从我开始工作算起,已经有20多年了。即便如此,我依然记得当时对从大学毕业并开始工作的憧憬。在那之前,除了少数几份和编程无关的暑期工,我的人生基本都是在学校度过的。虽然我对工作的大多数期望都实现了,不过在步入职场头几年中也发现这一行许多令人惊奇的事,下面是头五件:
5. 人际交往
编程看起来是一份相当孤独的工作——你需要完成一个功能,所以你坐下来并用代码将其实现。不过事实上,你和其他的同事会有相当多的交流。你会和同事讨论设计,你会在开会时审查新功能,你会和测试人员讨论你的代码。
学会委婉和圆通,在交流中非常有帮助。如果还不会,那你得去学一下。关于这方面,有一本畅销书——卡耐基的《人性的弱点》。如果还没有读过此书,我强烈建议你读一读。
4.写作很重要
通过写作清晰地表达观点,这很有帮助。从某种程度上来说,写代码和写作非常相似,两种都需要你把你的想法,通过某个结构化的方式清晰并且无歧义的表达出来。Email当然是写不完的了,不过还有你所开发的产品特性所配套的文档、需要清晰描述Bug的漏洞报告、还有对你修复的Bug做出的解释。在大学里写作并不是重点,但是如果你写作好的话,这绝对是工作中的一个筹码。
3.从来没有已做完的软件
在我开始工作以前,我觉得当我开发出一个特性之后,这个特性就算开发完成了。不过在现实中,你会很经常的要回到这个特性上来。有时候是因为这并不完全是客户所要求的,也可能是因为你需要为它添加更多功能,又或者是你想要把有些相似的功能合并起来,或者修复一个Bug。不管怎么样,对你的代码继续进行编程是很正常的事。
在大学里,我们经常会把一个程序从头做起,但这在现实世界中几乎是没有出现过的。当然,除了你做新功能的时候,但这些代码总要融入旧代码。正因为如此,做新功能时的很大一部分工作都是在阅读并理解旧代码。这是一项我们在学校里没有练习过的技能。
(伯乐在线补充:这一点和乔纳森·丹尼可在《风雨20年:我所积累的20条编程经验》中的第 19 点一样的。)
2.很少有巧妙的算法
在大学里我得到了一个计算机科学与工程的硕士,我学习了通信系统,里面包括信号处理、错误纠正码、排队论等等的课程。我们也有像算法和数据结构这样的计算机科学核心课程,我很喜欢这些课,我觉得学会这些聪明的算法和数据结构是一件很酷的事,所以我非常期待在工作中见到它们。
我的第一份工作是在蒙特利尔的爱立信公司,在一个蜂窝网络的移动电话交换中心担任软件工程师。那里有大量的代码来控制通话的建立、挂机、漫游等等,但当我看到这些功能都是用最基本的数据结构和算法完成时,我觉得有点失望。最有趣的是,我发现用来跟踪用户漫游状态的代码居然是由一千多个二叉树构成的,用户手机号的末三位数决定了用户处于哪颗树上。当需要找到这个用户时,根据用户的手机尾号找到用户所在的树,然后遍历该树以找到该用户。除了这个,其他的都是链表甚至是更简单的数据结构。
1.系统集成后的复杂性
说起来既然没有什么精巧的算法,而且整个应用程序都在使用基本的数据结构,那看来在这里工作应该没有什么挑战吧?错!我很快就意识到这套系统高度复杂,倒并不是因为那些复杂的功能,而是因为太多太多简单的功能集成合到了一起。
在我工作过的那么多套系统中,我看到了一些共同点:大多数特性都非常简单,但正因为就是有很多简单的特性,在集成这些特性之时所遇到的微妙(或不那么微妙)交互,就引发了Bug。
相关阅读:
在IT行业工作如何获得高薪?选择前沿的技术,把准方向,有技术有人缘
工作7年,对技术的感悟与理解
IT人为什么难以拿到高薪?
相关推荐
WINDOWS程序员使用指南(三)----OLE_DDEWINDOWS程序员使用指南(三)----OLE_DDE
WINDOWS程序员使用指南(五)----OBJECT WINDOWS库WINDOWS程序员使用指南(五)----OBJECT WINDOWS库
程序员简历模板,包含英文简历模板-带项目内容的简历模板-社招简历模板以及一个实际java案例 程序员简历模板,包含英文简历模板-带项目内容的简历模板-社招简历模板以及一个实际java案例 程序员简历模板,包含英文...
软件工程课程设计---学生管理系统--程序员SUMER 软件工程课程设计---学生管理系统--程序员SUMER 软件工程课程设计---学生管理系统--程序员SUMER 软件工程课程设计---学生管理系统--程序员SUMER 软件工程课程设计---...
软件工程课程设计-----Release.rar --程序员SUMER 软件工程课程设计-----Release.rar --程序员SUMER 软件工程课程设计-----Release.rar --程序员SUMER 软件工程课程设计-----Release.rar --程序员SUMER 软件工程课程...
简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选...
程序员的数学系列书籍介绍 本资源摘要信息中,我们将对程序员的数学系列书籍进行介绍,这些书籍涵盖了数学、算法、信奥、NOIP、CSP-J 等领域的知识点。 本系列书籍共有十四本,分别是: 1. “编”玩边学:Scratch...
WINDOWS程序员使用指南(二)----MICROSOFT基本类库WINDOWS程序员使用指南(二)----MICROSOFT基本类库
桌面右键多余菜单删除代码---程序员SUMER 桌面右键多余菜单删除代码---程序员SUMER 桌面右键多余菜单删除代码---程序员SUMER 桌面右键多余菜单删除代码---程序员SUMER 桌面右键多余菜单删除代码---程序员SUMER 桌面...
这本书名为《程序员都知道的那点事儿!97件事儿》,由Kevlin Henney编辑,首次出版于2010年2月。该书汇集了来自众多国外软件开发领域专家的智慧和经验,包含了97条建议,旨在帮助程序员在日常工作中提升能力、避免...
“程序员的数学系列书籍介绍” 本资源概述了程序员的数学系列书籍,涵盖了从基础数学到高级数学的多个方面。该系列书籍共13本,分别是: 1. “编”玩边学:Scratch 趣味编程进阶——妙趣横生的数学 2. Scratch ...
黑马程序员-SpringCloud-学习笔记01-认识微服务
MicrosoftWin32程序参考大全 函数大全 结构大全 等 Win32程序参考大全(一)——窗口管理和图形设备接口 Win32程序参考大全(二)——系统服务、多媒体、系统...MicrosoftWin32程序员参考大全(五)----消息、结构和宏
最后,压缩包中的“LoveSourceCode-master”很可能是一个项目源码仓库,采用了Git进行版本控制,方便多人协作和代码管理。程序员们通过GitHub等平台分享这些源码,不仅表达了个人的情感,也为其他程序员提供了学习和...
黑马程序员训练营CSDN创始人 蒋涛2010-12-09
为您介绍程序员在编写代码过程中所要注意的地方,并可以避免不必要的错误!
小贝程序员生活\jar\lib\asm-commons-3.2.jar 小贝程序员生活\jar\lib\asm-commons-3.2.jar 小贝程序员生活\jar\lib\asm-commons-3.2.jar
小贝程序员生活\jar\lib\asm-analysis-3.2.jar 小贝程序员生活\jar\lib\asm-analysis-3.2.jar 小贝程序员生活\jar\lib\asm-analysis-3.2.jar
程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 ...