What are the essential concepts all programmers should learn and use?
我目前正在学习编程,我没有参加CS课程,所以我基本上是从底层开始。多年来,我一直在编写代码,但对参与更大的项目所需的基本概念还没有很好的理解。对象定向是很明显的,我感觉我开始理解其中的一些概念。然后有很多讨论和方法,比如MVC、UML、Scrum、Solid等等。我看过很多这样的概念,但我总是感到困惑,因为大多数解释似乎需要对其他概念有一些理解。
我想以"正确"的方式学习这些东西,那我从哪里开始呢?
我需要了解的使我能够理解软件体系结构/设计/开发的所有基础的总体结构是什么?
我错过了什么?
是否有可以和应该等到我澄清基础的结构和概念?
松耦合,高粘聚力。
至于书籍,至少在某种程度上,代码完整几乎涵盖了所有内容。
可靠的原则可能是最重要的。
从那些你理解使用MVC模式背后的动机,为什么人们认为持久性、无知是重要的等等。它们是大多数良好实践的核心。
远离缩写词(包括你列出的那些)和方法(tm)。至少在开始的时候。
读好书。从这个开始:实用的程序员。学习算法和数据结构,可能从Cormen等人的算法介绍中学习。
写很多代码。实践比任何事情都重要。
软件开发是一个巨大的领域,您应该小心,不要太快承担。除非你要走上功能性编程的方向,我建议你从确保你完全理解面向对象设计和编程的概念开始,因为这应该是你的基础。
一旦你很好地理解了这一点,你就能够更好地理解设计模式,并了解何时使用它们。
我建议你尝试一些语言,直到找到一种你觉得舒服的语言,我个人最喜欢的语言是Ada,这是一种非常纯粹的OO语言,但在商业世界,我在C工作,这仍然有很多问题,但这些问题被更活跃的就业市场所压倒。
在这个阶段,我不会太担心Scrum,因为在担心项目管理之前,您需要更加关注您的开发技能。
最重要的是尽可能多地使用代码,下载大量好的参考解决方案,并在代码中进行工作,直到您理解它为止,并尝试关注开发趋势。
如果可行的话,你也可以考虑参加一些开发人员会议,因为这些会议很有启发性。
如何用单元测试来测试软件。能够做到这一点,将自动解决所有其他问题的90%,因为您无法在它们存在时进行测试。
当你知道如何测试时,你可以从高级主题开始,比如设计。
像这样回答自己的问题有点傻……:)但我发现的一个学习编写代码的宝贵资源是位于http://www.project euler.net的euler项目。
它基本上是一个数学问题的集合,你可以通过编写自己的解决方案来解决它。一旦你找到了一个特定问题的答案,你就可以进入这个问题的论坛讨论不同的解决方案。我很惊讶我在a)解决一个挑战,b)阅读其他人的方法,c)有多少编程语言在那里!:)
问题一开始很容易(你可以通过解决问题的人数来判断),然后发展到越来越困难的问题。
目前我正在研究问题3,解决了前两个问题…不管你的水平如何,我建议你开始对他们刮目相看!
我认为您应该开始对现实世界中的问题进行编码,以了解编程领域中的问题。
然后你就有了更好的背景来理解为什么对象是重要的。然后,在管理对象之后,您将了解为什么模式和OO原则很重要。
就我个人而言,我强烈推荐罗伯特C马丁的敏捷软件开发。
但是,除非你对正在解决的问题有感觉,否则这可能是一篇冗长而令人厌烦的文章。恐怕您可能至少需要500-1000小时的编码,然后才能理解正在解决的问题是真实的。
可能要花7000多个小时,你才能从仅仅阅读问题中感受到本能的疼痛,使这类书籍成为本应成为的翻页器。
遗憾的是,许多您应该开发的良好实践只有在随着时间的推移必须使用您的代码之后才会得到赞赏。如果你只是做了很多练习,然后仅仅"因为它有效"就放弃了代码,那么你就错过了最大的痛苦。这是我们行业没有的奢侈品,"技术债务"对于那些拥有大量代码库的人来说是非常真实和昂贵的。
当您使用任何现代通用语言时,最好掌握模式(MVC或模型视图控制器就是其中之一)。"四人帮"的这本书是一本必须读的书,或者至少要研究一些并作为参考。咔哒声
重构是另一个应该存在于您的仓库中的概念。MartinFowler关于这个主题的书是一本非常好的书,有助于更好地理解前面提到的模式,还包括了一些关于UML的解释。
不能发布多个超链接,因此…
在Amazon上搜索:重构,改进现有代码的设计
当你想交流你的设计时,UML(统一建模语言)是许多人选择的"工具"。然而,UML是大而笨拙的,但是马丁·福勒(又一次)已经设法将它归结为基本要素。
在Amazon上搜索:UML蒸馏(确保您得到最新的一个)
Scrum是用于管理软件开发组的许多方法之一,我认为在刚开始或自己动手时,学习它没有多大的价值。尤其是细节上。
希望有帮助…
附:很好,我还没听说过,有人要帮你。
对于涉及算法部分的内容,请阅读任何不受特定编程语言约束的书籍。我最喜欢的是T.H.Cormen等人的算法介绍,它在某些方面有点理论化,但我特别喜欢当他们证明某些事情,而不仅仅是要求你相信它的时候。
另一个好的方法当然是由GOF设计模式,它将使您了解松耦合、高效封装和代码重用的方法等。
如果你调查基本的数据结构、算法和算法分析,你就会有一个不错的基础。
我推荐Grady Booch等人的"面向对象的分析和应用程序设计"。最新的editoin详细解释了OOAD的概念,包括MVC、UML(他发明的),并讨论了如何管理软件开发的整个过程。本书的第二部分通过开发5个样本系统(有时从最核心的正交方面)来举例说明这一切。