我依然记得当我完成学业时,我是多么的天真。那时我深信本身已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工做后没多久我就意识到,还有不少事是我所不了解的。php
在不断吸收经验的同时,我一直在努力学习那些我历来没有学过的,但倒是成为优秀的开发人员所应了解的基本知识。如下是我但愿本身能在学校就学到的10件事。程序员
0. 咱们老是错的学习
开发人员有着至关大的自我意识,包含了一些其余的非技术性缺陷,这也正是为何咱们很难发现咱们作错了什么。我看到过不少无休止的设计讨论,开发人员不断地发表本身的想法……呵呵!猜猜怎样……咱们都错了,惟一的区别就是咱们犯错的离谱程度不一样。测试
理解并接受这个事实很是重要,咱们只有这样作了,才能敞开心胸去听听别人的意见,采用他们的想法,来得出一个更好的解决办法。设计
1. 事情如有可能出错,就必定会出错调试
也就是说“但愿驱动开发(hope driven development)”,若是你对于某些事并不肯定,若是你发现本身使用了“应该”这个词,那你就麻烦了。orm
而这只有一个解决方案,尽己所能去保证它不会出错,这可能意味着你须要编写一个测试、调试并验证需求……开发
2. 全部的代码都烂get
在我抱怨那些我碰到过的代码十年之久后,我得出了一个精辟的结论,全部的(包括我本身写的)代码,都烂。固然,烂仍是有等级之分的,但即使是我见过写得最好的代码,也是难以读懂的。it
这并不意味着把你的代码写得更好是没有意义的,偏偏相反,最好和最坏的代码仍是有天壤之别的。
3. 错误(Bug)总会存在
永远存在!问题只在于要发现它困难与否。
4. 客户最大
许多客户并不在意你在方案中使用了哪些技术,应用程序需不须要作更多的事……或通俗上说,你是否使用了好的实践方案。
也由于我能够想象,要是我只说了前面那一段,我会收到多少恶评,让我说得更清楚些……我想说的是,咱们永远不该该忘记客户的立场,有时候,开发人员为了最佳实践而在项目工程中过分坚持采用(某些)技术,但要记住,若这些技术没法给客户带来价值,那就放弃吧!(编注:关于客户,做者Alberto在其前几篇文章《个人10个开发原则》和《程序员常犯的5个非技术性错误》都有提到,可见他对这一点的体会。)
5. 纸上谈兵是行不通的
我曾认为,我能够在前期就把个人整个设计置于纸上,而后只要将缺漏处填上就好,但这样根本行不通。
软件开发是复杂的,若不亲手去碰碰看,很难看到全部的实际层面以及它们之间的关系。所以,在前期保持规划与设计是颇有用的,但不要过分坚持,也不要把设计图表看成合约固守。
6. 少便是多
或者,你可能知道更好的说法是:“Keep it simple, stupid!”(保持简单,KISS设计原则)。因此,若是没有必要的就舍弃吧!由于要记住:“事情如有可能出错,就必定会出错。”(编注:除了KISS原则以外,此文还介绍了其余一些软件设计原则。)
7. 编写代码只是咱们所作工做的20%而已
请准备好,花80%的时间用于思考、调试、测试、开会、谈话……而全部的其余活动都是很是重要的,因此若要成为一个优秀的软件开发人员,你必须培养普遍而全面的技巧(Skill),而不只仅是技术(Technical)。
8. 客户永远不知道他/她想要的是什么!
客户如有需求,或是想法,可是他们不知道详细状况……软件开发要作的工做就是,发现细节并去除全部的不肯定性,将这些需求转换成客户想要一个应用程序。
9. 已经有人作过了
因此不要再从新发明轮子,用谷歌找找看,或者更好的方法是,请教你的同事,不少时候他们可能都已经作了相同、或很是相似的事情。