笔者依然记得当年完成学业时,深信自己已经准备好进入任何一家软件公司,并开始成为一个顶级的开发人员。显然,开始工作后没多久,笔者就意识到,还有很多事是我所不了解的。
在不断吸取经验的同时,笔者一直在努力学习那些我从来没有学过的,但却是成为优秀的开发人员所应了解的基本知识。以下是笔者希望自己能在学校就学到的十件事。
编程
1. 我们总是错的
开发人员有着相当大的自我意识,包含了一些其他的非技术性缺陷,这也正是为什么我们很难发现我们做错了什么。我看到过很多无休止的设计讨论,开发人员不断地发表自己的想法……呵呵!猜猜怎样……我们都错了,唯一的区别就是我们犯错的离谱程度不同。
理解并接受这个事实非常重要,我们只有这样做了,才能敞开心胸去听听别人的意见,采用他们的想法,来得出一个更好的解决办法。
2. 事情若有可能出错,就一定会出错
也就是说“希望驱动开发(hope driven development)”,如果你对于某些事并不确定,如果你发现自己使用了“应该”这个词,那你就麻烦了。
而这只有一个解决方案,尽己所能去保证它不会出错,这可能意味着你需要编写一个测试、调试并验证需求……
3. 所有的代码都烂
在我抱怨那些我碰到过的代码十年之久后,我得出了一个精辟的结论,所有的(包括我自己写的)代码,都烂。当然,烂还是有等级之分的,但即便是我见过写得最好的代码,也是难以读懂的。
这并不意味着把你的代码写得更好是没有意义的,恰恰相反,最好和最坏的代码还是有天壤之别的。
4. 错误(Bug)总会存在
永远存在!问题只在于要发现它困难与否。
5. 客户最大
许多客户并不在乎你在方案中使用了哪些技术,应用程序需不需要做更多的事……或通俗上说,你是否使用了好的实践方案。
也因为我可以想象,要是我只说了前面那一段,我会收到多少恶评,让我说得更清楚些……我想说的是,我们永远不应该忘记客户的立场,有时候,开发人员为了最佳实践而在项目工程中过度坚持采用(某些)技术,但要记住,若这些技术无法给客户带来价值,那就放弃吧!
6. 纸上谈兵是行不通的
我曾认为,我可以在前期就把我的整个设计置于纸上,然后只要将缺漏处填上就好,但这样根本行不通。
软件开发是复杂的,若不亲手去碰碰看,很难看到所有的实际层面以及它们之间的关系。因此,在前期保持规划与设计是很有用的,但不要过度坚持,也不要把设计图表当作合约固守。
7. 少即是多
或者,你可能知道更好的说法是:“Keep it simple, stupid!”(保持简单,KISS设计原则)。所以,如果没有必要的就舍弃吧!因为要记住:“事情若有可能出错,就一定会出错。”
8. 编写代码只是我们所做工作的20%而已
请准备好,花80%的时间用于思考、调试、测试、开会、谈话……而所有的其他活动都是非常重要的,所以若要成为一个优秀的软件开发人员,你必须培养广泛而全面的技巧(Skill),而不仅仅是技术(Technical)。
9. 客户永远不知道他/她想要的是什么
客户若有需求,或是想法,但是他们不知道详细情况……软件开发要做的工作就是,发现细节并去除所有的不确定性,将这些需求转换成客户想要一个应用程序。
10. 已经有人做过了
所以不要再重新发明轮子,用谷歌找找看,或者更好的方法是,请教你的同事,很多时候他们可能都已经做了相同、或非常类似的事情。
本文摘自: http://www.williamlong.info/archives/2769.html
分享到:
相关推荐
十年典藏版更是集合了多年的教学经验和实际项目案例,旨在帮助读者深入理解VC++编程的核心概念,并提升实际编程能力。这本书的光盘源代码包含了大量实例和练习,有助于读者将理论知识与实际操作相结合,从而更好地...
本书用详尽的实例全面介绍了使用JavaScript进行各种客户端编程的过程和应用。全书共分10篇,主要包括JavaScript的时间日期类、文本、鼠标、图片、页面等特效、页面技巧与页面游戏、导航菜单、Cookie和JavaScript的...
《医学图像编程技术》可作为医学影像学专业高年级本科生和研究生教材,也可作为大学教师、公司研发人员、硕博研究生进行医学图像研究时的技术参考书。 《医学图像编程技术》中的医学图像数据和编程范例在随书携带的...
ITAV作为国内知名的中控品牌,其编程教程"ITAV编程培训资料.pdf"可能详细介绍了ITAV的编程平台和步骤,包括如何配置设备、创建控制页面以及实现自定义逻辑。ITAV的系统通常具有良好的本地化支持,对于中国用户来说...
《64位 微处理器系统编程和应用编程》 周明德编著 完整清晰版 1 针对当前应用最广泛的两种64位处理器--Intel和AMD的四核处理器作为基础进行介绍分析,反映了当代微处理器的最新发展。 2 把Intel和AMD两种处理器综合...
编程能力的培养是一项系统工程,它涉及到计算机语言的学习、编程思维的锻炼以及实际编程技能的提高。首先,基础的扎实与否决定了编程能力的上限。在学习过程中,对于编程语言的选择尤为重要。作者提到,在其经历中,...
根据给定文件的信息,我们可以提炼出关于C++游戏编程的一些关键知识点。首先,标题“C++游戏编程入门.pdf”明确指出这是一本介绍如何使用C++进行游戏开发的教材。C++是一种广泛应用于游戏开发的强大编程语言,因为它...
数控车床编程100例
本书共计4个压缩包(linuxC编程实战+.part1.rar,linuxC编程实战+.part2.rar,linuxC编程实战 +.part1.rar,Linux+C编程实战源代码.rar) 内容简介 《LinuxC编程实战》系统地介绍了在Linux平台下用C语言进行程序...
UNIX环境高级编程压缩包包含这些内容: catalogue.txt src.3e.tar.gz(源码) UNIX环境高级编程(第2版)-中文.pdf 带目录 UNIX环境高级编程(第3版)-中文-mobi转换.pdf 带目录 UNIX环境高级编程(第3版)-中文.pdf 带...
《C++编程实例100篇》是一本深入浅出的C++编程教程,它以实践为主导,通过丰富的实例帮助学习者掌握C++语言的基础和核心概念。这本书的每个实例都精心设计,旨在帮助初学者和有经验的开发者巩固和提升C++编程技能。 ...
《Windows图形编程》完全版是一本深入探讨在Windows操作系统环境下进行图形编程的权威指南。这本书主要涵盖了图形、多媒体和游戏开发的关键技术,旨在帮助开发者掌握创建动态、交互式应用程序所需的技能。 在...
- **最佳实践**:分享了一些关于并发编程的最佳实践和技巧。 #### 九、高级线程管理 第九章涉及了一些更复杂的线程管理主题,如线程池、线程优先级调整等。 - **线程池**:介绍了如何使用线程池来管理和复用线程...
云风将自己十余年的游戏编程经验,包括面对不同时代的技术挑战、与内存空间和显卡的斗争、在网游时代与网速和外挂的斗争等,详尽记录并形成了这本著作。书中不仅有实用的技术经验分享,更传递了研发过程中的理念和...
下载文件包括斯坦福大学公开课讲义,作业,考试以及Karel机器人插件和相关文件Assignment 请自行官网下载eclipise。解压本下载文件,再将Karel机器人插件.zip解压,把文件夹中JAR放入你的eclipse 安装目录下的...
《Java网络编程第三版》是Java开发者深入理解网络编程的重要参考资料。这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点:...
CUDA C 编程指南是程润伟教授的著作,它主要针对的是想要深入理解并掌握CUDA C编程技术的读者。CUDA(Compute Unified Device Architecture)是由NVIDIA推出的一种并行计算平台和编程模型,用于利用图形处理器(GPU...
Python是一种广泛应用于科学计算、数据分析、人工智能以及web开发等领域的高级编程语言,因其简洁明了的语法特性,常被称为“胶水语言”,能够轻松地连接各种组件。"Python趣味编程100例(99个)"这个资源显然是为了...
西门子S7-1200系列是西门子推出的一款先进的小型PLC(可编程逻辑控制器),专为满足工业自动化领域的各种需求而设计。这个编程手册合集提供了全面的指南,帮助用户掌握S7-1200的编程、配置和调试技巧。以下是对该...
《C#网络编程技术教程》注重理论与实践的结合、循序渐进的教学方法。系统介绍了C#网络编程的相关知识,使读者能够快速掌握基于C#的网络应用开发技术。根据应用的需要,《C#网络编程技术教程》在内容安排上对C#基础...