3

I'm currently learning to program, and I didn't take CS classes so I'm basically starting out on the bottom. I have been putting together code on and off for many years, but haven't really had a good understanding of essential concepts needed for enganging in bigger projects. Object-orientation is an obvious one, and I feel I'm beginning to understand some of the concepts there. Then there is a lot of buzz and methodology, such as MVC, UML, SCRUM, SOLID and so foth and so on.. I've looked at many of these but I'm always stumped as most explanations seem to require some understanding of other concepts.

I want to learn this stuff the "right" way, so where do I begin?

What are the overarching constructs I need to understand that enable me to understand all the underpinnings of software architecture/design/development?

What am I missing?

Are there constructs and concepts that can and should wait until I've cleared the foundation?

4

12 回答 12

4

The SOLID principles are probably the most important.

From those you understand the motivation behind using a pattern such as MVC, why people think of persistence ignorance as important and so on. They are at the core of the majority of good practices.

于 2009-06-26T08:02:20.800 回答
4

松耦合,高内聚。

至于书籍,Code Complete至少在某种程度上涵盖了几乎所有内容。

于 2009-06-26T08:11:37.007 回答
2

远离缩写词(包括您列出的那些)和方法论(tm)。至少在开始时。

读好书。从这个开始:实用程序员。学习算法和数据结构,可能来自Cormen 等人的算法介绍

写很多代码。实践比什么都重要。

于 2009-06-26T08:29:55.173 回答
2

软件开发是一个巨大的舞台,你应该小心不要太快地承担太多。除非你打算走函数式编程的方向,否则我建议你首先确保你完全理解围绕 OO 设计和编程的概念,因为这应该是你的基础。

一旦您很好地理解了这一点,您将能够更好地理解设计模式并了解何时使用它们。

我建议你尝试几种语言,直到找到一种你觉得舒服的语言,我个人最喜欢的语言是 Ada,它是一种非常纯粹的 OO 语言,但在商业世界中,我使用 C# 工作,它仍然有很多问题,但这些被更加活跃的就业市场所抵消。

在这个阶段我不会太担心 Scrum,因为在担心项目管理之前你需要更多地关注你的开发技能。

最重要的是使用尽可能多的代码,下载大量好的参考解决方案并仔细研究代码直到您理解它,并尝试关注开发趋势。

如果它可行,您可能还想考虑参加一些开发者会议,因为这些会议非常鼓舞人心。

于 2009-06-26T08:20:01.950 回答
1

How to test software with unit tests. Being able to do that will solve 90% of all the other issue automatically since you can't test while they are around.

When you know how to test, you can start on advanced topics like design.

于 2009-06-26T08:41:17.710 回答
0

I think that you should start coding real world problems to get a feel for problems in the programming domain.

Then you have a better background to understand why objects are important. Then, after managing objects, you will learn why patterns and OO principles are important.

Personally, I highly recommend the Agile Software Development, by Robert C Martin.

But it may be a long and tiresome read unless you have a feel for the problems being solved. I'm afraid that you may need 500-1000 hours of coding at the minimum before you get an appreciation that the problems being solved are real.

And it probably takes 7000+ hours before you develop an instinctive heart-felt pain from merely reading the problems, making this sort of book become the page-turner that it should be.

Regrettably, many of the sound practices that you should develop are only appreciated after having to live with your code over time. If you just do many excercises and abandon the code afterwards just "because it works", then you are missing out on the greatest pain of all. It is a luxury our industry does not have, and "technical debt" is a very very real and costly to those with large code bases.

于 2009-06-26T08:42:24.633 回答
0

如果你调查了基本的数据结构算法算法分析,你就会有一个不错的基础。

于 2009-06-26T08:21:46.687 回答
0

另一个不错的当然是 GoF 的设计模式,它可以让您了解松散耦合、有效封装和重用代码的方法等

于 2009-06-26T08:22:17.513 回答
0

对于涉及算法部分的内容,请阅读任何不受特定编程语言限制的书。我最喜欢的是TH Cormen 等人的《算法导论》,它在某些方面有点理论化,但当他们证明某些事情而不只是要求你相信它时,我特别喜欢它。

于 2009-06-26T08:25:34.980 回答
0

当您使用任何现代通用语言时,掌握模式可能是一个好主意(MVC 或 Model-View-Controller 就是其中之一)。“四人帮”的书是必读的,或者至少研究一些并作为参考。 咔嚓

重构是您的武器库中应该包含的另一个概念。Martin Fowler 关于这个主题的书是一本非常好的读物,有助于更好地理解上述模式,还包括关于 UML 的一些解释。

不能发布多个超链接,所以...

在亚马逊上搜索:重构、改进现有代码的设计

当您想传达您的设计时,UML(统一建模语言)是许多人选择的“工具”。然而,UML 庞大且笨拙,但 Martin Fowler(再次)设法将其归结为基本要素。

在亚马逊上搜索:UML Distilled(确保您获得的是最新的)

SCRUM 是用于管理软件开发团队的众多方法之一,我认为当您刚开始或独自学习时,学习它没有多大价值。尤其不详细。

希望能帮助到你...

PS:SOLID我还没有听说过,其他人必须在那里帮助你。

于 2009-06-26T08:27:40.343 回答
0

我推荐Grady Booch 等人的“带有应用程序的面向对象分析和设计”。最新的编辑详细解释了 OOAD 的概念,包括 MVC、UML(他发明的),并讨论了如何管理软件开发的整个过程。本书的第二部分通过开发 5 个示例系统(有时从最核心的正交方面)来举例说明所有这些。

于 2009-06-26T08:18:40.250 回答
0

我觉得像这样回答我自己的问题有点傻.. :) 但是我发现的一个学习编写代码的宝贵资源是http://www.projecteuler.net上的 Euler 项目

它基本上是您通过编写自己的解决方案来解决的数学问题的集合。一旦找到特定问题的答案,您就可以访问该问题的论坛,讨论不同的解决方案。我很惊讶我在 a) 解决挑战、b) 阅读其他人的方法和 c) 有多少编程语言方面学到了这么多!:)

问题一开始很容易(你可以通过解决问题的人数来判断),然后发展到越来越难的问题。

目前我正在解决第 3 个问题,已经解决了前两个问题……我建议你开始解决它们,无论你的水平如何!

于 2009-06-29T06:05:34.690 回答