所有程序员应该学习和使用的基本概念是什么?

时间:2009-06-26 07:58:08

标签: methodology

我目前正在学习编程,而且我没有参加CS课程,所以我基本上都是从最底层开始的。我已经将代码打开和关闭多年,但是对于参与大型项目所需的基本概念并没有真正理解。面向对象是一个显而易见的,我觉得我已经开始理解那里的一些概念。然后有很多嗡嗡声和方法论,比如MVC,UML,SCRUM,SOLID等等......我看过很多这些但是我总是难过,因为大多数解释似乎需要一些了解其他概念。

我想以“正确”的方式学习这些东西,那么我从哪里开始呢?

我需要了解哪些总体结构能让我理解软件架构/设计/开发的所有基础?

我错过了什么?

是否有可以而且应该等到我清除基础的构造和概念?

12 个答案:

答案 0 :(得分:4)

SOLID原则可能是最重要的。

从那些你了解使用MVC等模式背后的动机,为什么人们认为持久性无知是重要的等等。它们是大多数良好实践的核心。

答案 1 :(得分:4)

松耦合,高凝聚力。

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

答案 2 :(得分:2)

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

一旦你理解了这一点,你就能更好地理解设计模式,并对何时使用它们有所了解。

我建议你尝试一些语言,直到你找到一个你觉得舒服的语言,我个人最喜欢的语言是Ada,这是一种非常纯粹的OO语言,但在商业世界里,我在C#工作,但仍然有很多问题,但更充满活力的就业市场超过了这些问题。

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

最重要的是尽可能多地处理代码,下载大量优秀的参考解决方案并完成代码直到您理解为止,并尝试着眼于发展趋势。

如果它可行,你也可以考虑参加一些开发人员会议,因为这些会非常鼓舞人心。

答案 3 :(得分:2)

远离ACRONYMS(包括您列出的那些)和Methodologies(tm)。至少在开始时。

阅读好书。从这个开始:Pragmatic Programmer。学习算法和数据结构,可能来自Introduction to algorithms by Cormen et al

写了很多代码。实践比其他任何事情都重要。

答案 4 :(得分:1)

如何使用单元测试来测试软件。能够做到这一点将自动解决所有其他问题的90%,因为你无法在他们身边进行测试。

当您知道如何测试时,您可以从设计等高级主题开始。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果您对基本Data StructuresAlgorithmsAlgorithms Analysis进行了调查,那么您将拥有一个不错的基础。

答案 7 :(得分:0)

另一个好的当然是 GoF的设计模式,这将让您了解松散耦合,有效封装和代码重用的方法等等。

答案 8 :(得分:0)

对于算法部分的问题,请阅读任何不受特定编程语言约束的书籍。我最喜欢的是TH Cormen等人的算法导论,它在某些方面有点理论,但我特别喜欢它,当它们证明某些事情而不仅仅是让你相信它时。

答案 9 :(得分:0)

当您使用任何现代通用语言时,处理模式(MVC或模型 - 视图 - 控制器是一个)可能是一个好主意。 “四人帮”这本书是必读的,或者至少研究一下并用它作为参考。 clicky

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

无法发布多个超链接......

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

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

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

SCRUM是用于管理软件开发组的众多方法之一,我认为当您刚刚开始或独自学习时,我认为没有太多的优点。特别是不详细。

希望它有所帮助...

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

答案 10 :(得分:0)

我认为你应该开始编码现实世界的问题,以了解编程领域的问题。

然后你有一个更好的背景来理解为什么对象很重要。然后,在管理对象之后,您将了解为什么模式和OO原则很重要。

就个人而言,我强烈推荐Robert C Martin的敏捷软件开发。

但除非您对所解决的问题有所了解,否则这可能是一个冗长乏味的阅读。我担心你可能需要至少500-1000小时的编码,然后才能理解正在解决的问题真实

可能需要7000多个小时才能从仅仅阅读问题中发展出一种本能的心痛,使这类书成为应该的页面翻译。

令人遗憾的是,您应该开发的许多声音实践只有在您不得不随着时间的推移使用您的代码之后才会受到欢迎。如果你只是做了很多练习并且之后放弃了“因为它有效”的代码,那么你就错过了最大的痛苦。这是我们行业所没有的奢侈品,对于拥有大量代码库的人来说,“技术债务”是非常真实和昂贵的。

答案 11 :(得分:0)

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

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

这些问题很容易开始(你可以通过解决问题的人数来判断)并逐步解决问题。

目前我正在解决问题#3,解决了前两个问题......我建议你不管你的等级,都要开始对它们进行切换!