我已经编程了大约一年了,而且我编写的所有内容都有效 - 从我的观点来看,它写的非常糟糕。我想知道是否有关于软件设计的任何(免费)好书可以为初级程序员提供一点指导?如果我对软件设计的思考过程有所了解,我认为我没有那么多问题。
答案 0 :(得分:12)
Head First Design Patterns可能是GoF“设计模式”一书的更温和的介绍
史蒂夫麦康奈尔的Code Complete是许多代码的良好指南,包括如何在本身不支持它们的语言中使用好的策略。Martin Fowler的Refactoring在很大程度上涉及设计模式,但它是一个很好的代码编程目录,以及更好的编写方式(我在阅读“Code Complete”的同时阅读它,一对在阅读设计模式之前的几年[tsk tsk],“重构”对我看待我编写的代码的方式产生了重大影响。我想更好的想法。
这些都不是“免费的”。但是你想要多好的建议?如果你正在努力投资你的职业生涯,这是最便宜的方式。
答案 1 :(得分:7)
DRY和YAGNI是初学者的良好起点,您需要学习和理解OOP。
关于Design Patterns(比DRY和OOP更高级和抽象),您可以从免费的Design Patterns - Java Companion学习。事实上它不是Python不应该打扰你 - 经典的设计模式适用于所有地方。
如果您希望进一步了解DDD(free DDD book from Eric Evans),当然还有Unit Testing,不管您信不信,我们会改进您的代码以及您作为设计师。
答案 2 :(得分:4)
听起来你想要一本关于设计模式的书。
看看:Design Patterns - Elements of Reusable Object-Oriented Software。警告它不是Python特定的。
您也可以使用此online resource来获取Python设计模式。
Stackoverflow用户@S.Lott也有很多非常好的Python资源。您可以在Stackoverflow页面上看到它们。
答案 3 :(得分:4)
阅读其他人的代码。这是学习更好的设计原则的最佳方式。在你的工作中阅读人们的代码,在论坛上阅读人们的代码,看一下开源项目......并且永远不要停止编码,因为最好的老师就是你一路上犯的错误......
查看书籍Pragmatic Programmer, from Journeyman to Master。这本书很有帮助填补你正在寻找的知识空白。
答案 4 :(得分:3)
其他一些可能值得注意的原则:
C.R.A.P.:The Four Principles of Sound Design - 为了实用性,这些是很好的原则。
Pablo's Topic of the Month - March: SOLID Principles - 也有一些好主意。
答案 5 :(得分:3)
有一年的编程经验,我不会建议设计模式(或头部设计模式),因为我认为一旦你有更多的编程经验,设计模式(概念)就会得到最好的处理,也许更像5到10年的经验。
我认为The Pragmatic Programmer: from Journeyman to Master和Andrew Hunt这本书David Thomas可能是您目前最高级别的最佳选择。这是一个很好的summary主题和内容(来自Coding Horror的Jeff Atwood)。如果您无力购买自己的副本,请使用inter-library loan。
另外两个与语言无关的标题,但是你可以记住的新程序员强烈推荐的经典书籍是弗雷德布鲁克斯The Mythical Man-Month(1995年出版的周年纪念版)和Code Complete(第二版)Steven McConnell。
这些书将有助于扩展您的编程知识,而不会在您当前的开发阶段压倒您,并为成为更好的程序员奠定坚实的基础。对于认真的程序员来说,所有这些书籍始终位于recommended programming books之上,而且他们都“老了”,以至于他们显然不是时尚,但持久的推荐并不受限制通过特定的语言,环境或工具集。
答案 6 :(得分:2)
查看这本书:Head First Design Patterns ......字面意思。看看这个。来自图书馆。
答案 7 :(得分:2)
学习优秀软件设计的最佳方法是以一系列不同的方式编写代码,阅读其他人编写的代码,并了解哪些代码有效,哪些代码无效。
编写代码时,请询问以下问题:
我相信其他人会根据自己的经验有其他想法。
答案 8 :(得分:2)
我肯定会添加另一本书。我认为Bob Martin的Clean Code是一本非常好的书,可以告诉你如何编写可维护的代码。它引入了一些简单的规则,使得代码结构和可读性都很好。
答案 9 :(得分:2)
我建议Structure and Interpretation of Computer Programs,可在线提供书籍形式,以及在线课程。
这不是一本关于设计模式的书,但它将帮助你为构建应用程序开发良好的基础知识。
答案 10 :(得分:2)
这不是一本书(书籍如此过时),但花几个小时阅读Portland Pattern Repository绝对是好事。
虽然它也不是一个教程,但它有很好的代码示例,同样也很好地讨论了设计模式和编程。这是学习如何像程序员一样思考的优秀资源。
答案 11 :(得分:1)
也许20%的Ur编程时间(这意味着如果U代码每天,每年不超过2个月!)得到一些理论。
为什么不从大量理论开始?你杀了Ur的动机和Ur的本能。但当你坐在那里尝试解决问题时,主要是关于正确的本能。有太多的理论U推翻问题和Ur解决方案。但是,无论读多少,Ur的本能仍将处于Ur经验的水平。
(抱歉,如果英语不好,不是我的动机)
答案 12 :(得分:1)
学习其他语言!我喜欢python,尽管每个人都说,我的python更好,因为我知道java 。 (有些人抱怨说从java开始导致一个人最初编写笨重的python,但是如果你已经或多或少知道在python中做某事的简单方法,你就可以安全了。)
让我在这里做一些电锯手术。第一次编写python很容易。我用vim写它,因为我可以因为我喜欢vim。如果你有一个IDE,它很容易维护和重构java。我在Eclipse中编写java,因为没有它我会毫无希望。但关键是,用一种语言编写,迫使你使用抽象工具使抽象更容易,这将慢慢塑造你的大脑以更抽象地编码。你会把它带回python,即使首选的抽象会略有不同。
答案 13 :(得分:1)
您应该了解有关面向对象编程的更多信息。这是一个基于Python的好教程:
面向对象编程是一种以反映您尝试解决的问题的方式组织程序的方法。
HIH
...里奇
答案 14 :(得分:1)
Head First Design Patterns将是一个初学者的好地方。它可能比四人帮更容易进入。
答案 15 :(得分:0)
忘了书。根据我的经验(其中包括作为OO设计课程的讲师和作家的时间),一些人可以做设计而一些人不能 - 这是一个天才,就像一个雕塑家。最好的情况是,如果你没有这种才能,阅读有关这一主题的书籍将使你能够设计得很糟糕。
答案 16 :(得分:0)
根据您的背景(以及某种程度上的经验),您可能还想了解基本算法的方式。像Introduction to Algorithms这样的书是一个好的开始。
除此之外,我还投票赞成Head First Design Patterns。 GoF在以后更好地作为参考。
答案 17 :(得分:0)
获得四本帮 - 设计模式.. 但是请不要过度关注它并尝试在任何地方使用Singleton:)
只要知道并明智地使用它。此后,看看良好的开源代码,并尝试从他们的结构中学习..我建议谷歌代码和sourceforge