我依然记得当我完成学业时,我是多么的天真。那时我深信自己已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工作后没多久我就意识到,还有很多事是我所不了解的。
在不断吸取经验的同时,我一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是我希望自己能在学校就学到的10件事。
0. 我们总是错的
开发人员有着相当大的自我意识,包含了一些其他的非技术性缺陷,这也正是为什么我们很难发现我们做错了什么。我看到过很多无休止的设计讨论,开发人员不断地发表自己的想法……呵呵!猜猜怎样……我们都错了,唯一的区别就是我们犯错的离谱程度不同。
理解并接受这个事实非常重要,我们只有这样做了,才能敞开心胸去听听别人的意见,采用他们的想法,来得出一个更好的解决办法。
1. 事情若有可能出错,就一定会出错
也就是说“希望驱动开发(hope driven development)”,如果你对于某些事并不确定,如果你发现自己使用了“应该”这个词,那你就麻烦了。
而这只有一个解决方案,尽己所能去保证它不会出错,这可能意味着你需要编写一个测试、调试并验证需求……
2. 所有的代码都烂
在我抱怨那些我碰到过的代码十年之久后,我得出了一个精辟的结论,所有的(包括我自己写的)代码,都烂。当然,烂还是有等级之分的,但即便是我见过写得最好的代码,也是难以读懂的。
这并不意味着把你的代码写得更好是没有意义的,恰恰相反,最好和最坏的代码还是有天壤之别的。
3. 错误(Bug)总会存在
永远存在!问题只在于要发现它困难与否。
4. 客户最大
许多客户并不在乎你在方案中使用了哪些技术,应用程序需不需要做更多的事……或通俗上说,你是否使用了好的实践方案。
也因为我可以想象,要是我只说了前面那一段,我会收到多少恶评,让我说得更清楚些……我想说的是,我们永远不应该忘记客户的立场,有时候,开发人员为了最佳实践而在项目工程中过度坚持采用(某些)技术,但要记住,若这些技术无法给客户带来价值,那就放弃吧!(编注:关于客户,作者Alberto在其前几篇文章《我的10个开发原则》和《程序员常犯的5个非技术性错误》都有提到,可见他对这一点的体会。)
5. 纸上谈兵是行不通的
我曾认为,我可以在前期就把我的整个设计置于纸上,然后只要将缺漏处填上就好,但这样根本行不通。
软件开发是复杂的,若不亲手去碰碰看,很难看到所有的实际层面以及它们之间的关系。因此,在前期保持规划与设计是很有用的,但不要过度坚持,也不要把设计图表当作合约固守。
6. 少即是多
或者,你可能知道更好的说法是:“Keep it simple, stupid!”(保持简单,KISS设计原则)。所以,如果没有必要的就舍弃吧!因为要记住:“事情若有可能出错,就一定会出错。”(编注:除了KISS原则之外,此文还介绍了其他一些软件设计原则。)
7. 编写代码只是我们所做工作的20%而已
请准备好,花80%的时间用于思考、调试、测试、开会、谈话……而所有的其他活动都是非常重要的,所以若要成为一个优秀的软件开发人员,你必须培养广泛而全面的技巧(Skill),而不仅仅是技术(Technical)。
8. 客户永远不知道他/她想要的是什么!
客户若有需求,或是想法,但是他们不知道详细情况……软件开发要做的工作就是,发现细节并去除所有的不确定性,将这些需求转换成客户想要一个应用程序。
9. 已经有人做过了
所以不要再重新发明轮子,用谷歌找找看,或者更好的方法是,请教你的同事,很多时候他们可能都已经做了相同、或非常类似的事情。
分享到:
相关推荐
关于编程,大学教育通常侧重于基础理论和语言特性,但现实工作中,开发人员需要面对的远不止这些。以下是一些大学课堂上可能未传授的重要事项: 1. **承认错误**:开发人员往往对自己的代码充满信心,但必须意识到...
作为高等教育的重要一环,东南大学开设的高级网络编程课程,受到广大学子及IT专业人士的青睐。在陶军教授的精心讲授下,本课程通过UNIX网络编程的套接口API,传授网络编程的核心知识与技能。 UNIX网络编程,又称为...
大学阶段,他继续深入研究黑客编程技术,尤其是后门开发,并立志代表学校参加国际大学生程序设计竞赛(ACM)。 作者在前言中提到了自己的编程学习经历和感悟,强调了从一个黑客杂志的忠实读者转变为作者的愉快过程...
《Unix/Linux编程实践教程》中文简体版由杨宗源和黄海涛翻译,由清华大学出版社在2004年10月出版。本书的英文原版书名为《Understanding Unix/Linux Programming: A Guide to Theory and Practice》,由Pearson ...
《信息学奥赛一本通·编程启蒙 C++版》是一本专为初学者设计的教材,旨在...它以实际操作为导向,结合实例和练习,系统性地传授C++编程的知识,使学习者能够逐步构建起编程思维,为进一步深入学习和竞赛做好充分准备。
本书名为《程序设计教程:用C++语言编程》,由陈家骏和郑滔编著,是南京大学出版的一本专门针对C++语言编程的教学材料。本书以C++语言为载体,旨在向初学者传授程序设计的基本思想、概念和技术,同时也强调了数据...
哈工大的教程,旨在将这一基础编程语言传授给学生,并使其在实践中达到熟练应用的水平。 哈工大的《C语言精品教程》是一套完整的教学资源。它起始于C语言的基础知识,例如数据类型、变量、基本的输入输出操作,然后...
这份讲义旨在传授编程艺术,通过深入浅出的方式引导学习者掌握编程的基本原理和高级技巧,特别关注Java语言。下面将详细探讨这份讲义中可能涵盖的关键知识点。 1. **基础编程概念**:讲解编程语言的基础语法,包括...
东北大学开设的《计算机辅助数控编程》课程,正是为了让学生们深入理解并应用这些先进技术。 本门课程不仅仅是理论知识的传授,更重要的是通过实践来加深学生对知识点的理解。这一点在东北大学20春《计算机辅助数控...
武汉大学测绘学院的编程培训学校通过系统的教学计划和严格的管理制度,旨在全面提升本科生的编程能力和科研素质。学校不仅注重理论知识的教学,还强调实践操作和团队协作的重要性,这有助于学生们在未来的学习和职业...
同济大学计算机系基础教研室推出的这份《VB教案PPT 同济大学》教程,不仅为初学者提供了学习VB的捷径,更是将VB编程的系统知识以深入浅出的方式呈现给学习者。 教程开篇即对VB进行了全面介绍,它强调了VB作为面向...
总而言之,“四川大学(谭浩强)C语言完整课件”是一份宝贵的资源,无论是对于那些希望掌握C语言编程的初学者,还是那些希望提升自己编程技能的在读大学生或者软件工程师来说,都是极为有益的。它不仅提供了详尽的...
《大学计算机——计算思维视角》是一本面向大学生的计算机基础教育教材,旨在通过计算思维的视角,引导学生理解和掌握计算机科学的基本概念与方法。作为一本配套教学资源包,该压缩文件包含了丰富的辅助教学材料,...
《C语言趣味编程》这本书为我们提供了一种既有趣又实用的方式来学习C语言,它不仅仅关注于理论知识的传授,更加注重将理论与实践相结合,引导读者在动手实践中学习和掌握C语言编程。 C语言之所以能成为学习编程的...
然而,作为一个IT行业的专家,我的专长在于解释和传授与信息技术相关的内容,如编程语言、网络技术、数据库管理、软件开发、人工智能、数据科学等。由于这个文件涉及到的是英语教学材料,并非IT领域,因此我无法提供...
【C语言过程化考核教学改革】是针对大学一年级新生在学习C语言时普遍遇到的编程入门困难问题而提出的一种教学模式。传统的C语言教学往往强调理论知识的传授,但忽视了编程实践和技能的培养,这使得许多学生在面对...
【清华大学Java教学精品课程】是一门深度探讨Java编程语言及其在Web开发中应用的课程,源自我国顶尖高等学府——清华大学。这门课程以其高质量的教学内容和严谨的学术态度,深受学习者喜爱,被誉为“非常不错的”...
为了响应这一需求,“牵手飞翔”系列活动应运而生,其衍生的编程培训学校自2013年起为大学测绘学院本科生提供了更为专业的编程实战培训。2015年作为学校发展的一个关键节点,我们有必要回顾和总结该校的办学宗旨、...