成为程序员的五大惊喜
英文原文:Top 5 Surprises When Starting Out as a Software Developer
尽管已经过去 20 多年了,我是如何毕业开始工作的场景依然历历在目。而在这之前,除了几个与编程无关的暑期工作,我几乎把我所有的时间都耗在了学校里。对于我将来的软件开 发员的工作我的设想很多,后来也一一实现了,但在工作的头两年,这个身份还是给我来很大的惊喜,下面列举其中最棒的 5 个:
TOP5 互动
编程似乎是种相当寂寞的工作——为了实现一定的功能,你不得不坐在电脑前写啊写啊写代码。事实是,编程其实需要和很多人进行互动协作。你得和你的同事讨论你的设计,你得在会议上解释程序的新功能,而且还要和测试人员聊聊代码。
互动有助于培养得体的社交方式。并且这方面能力是完全可以通过后天学习学会的。关于这方面我推荐 Dale Carnegie 的著作《如何赢得朋友和影响别人》,非常值得一读。
TOP4 写作
写作能力的强弱直接影响别人能否轻易读懂我们要表达的观点。而在一定程度上,编程和写作是非常相似的,它们都需要用一种结构化的方式清楚明确地 表达自己的想法。并且写作这个技能应用非常广泛,写电子邮件需要,写软件的功能文档需要,在错误报告中描述 bug 也需要,甚至是清楚知道问题之后,详细解释如何修复 bug 之时还是需要。如果我们能在大学时好好锻炼这个能力,那么绝对让你今后的工作受益匪浅。
TOP3 永远搞不定的软件
我原来以为写软件只需要把设定的功能捣鼓出来就算完工了。而在现实中,事实并非如此,我们需要时不时地回过头去检阅软件,看看这个功能是不是客 户真正想要的,是否需要增加更多的功能(或者类似的功能),看看有没有 bug,要不要修复等等等等,我们得不时地查阅之前写好的代码。
有时候,我真心不明白新的功能为什么总是要插入到已有的代码中去。在大学的时候,我们是一点一点写代码,写好就完事。但是现实中却不是这样的。 我们可以创建新的功能,但是得在已经写好的代码中植入进去,要适应原先代码的运行环境。因此,要想创建一个新的功能首先必须理解现有的代码,以便新功能适 合这个软件,这是在学校里你永远也学不到的。
TOP2 聪明的算法
在大学的时候我拿到了计算机科学与工程专业的硕士学位。我学的是通信系统,内容包括信号处理、代码纠错、排队论等等。我们也学习计算机科学的核心课程,比如算法和数据结构等,这一切都让我着迷。并且我特别期待将来能在工作中使用这些知识。
我的第一份工作是在蒙特利尔(加拿大东南部港市)的爱立信公司,职位是软件开发人员,主要处理移动交换中心的蜂窝网络呼叫工作。它是通过代码来 控制呼叫建立、越区切换、漫游等等,特别让我失望和震惊的是,这么大个控制中心所用的竟然是最最基本的数据结构和算法。最滑稽的事情来了,这些代码竟然还 能追踪当前系统中的漫游用户。系统由上千个二叉树构成,其中用户号码的最后三位数字来确定某一特定用户在树的哪个位置。所以,你要是想找到某个给定的用 户,在知道最后三位数字的基础上,你还得傻乎乎地在整个树上查找。除此以外,这几乎就是唯一的链接列表,或者是更为简单的链接列表。
TOP1 整合之后的复杂性
因为考虑到在实际应用中并没有使用到精巧的算法,整个应用程序只使用了非常基本的数据结构,想要运作这个系统似乎是没啥挑战性的。但是很快我发 现自己错的很离谱,这个所谓“简单”的系统,因为很多很多简单功能的整合,竟然变得特别特别复杂!哦,天哪,这简直要了我的老命了。虽然绝大多数的功能虽 然都死命的简单,但是因为数量实在太多,使得其中一个出了 bug,其他的或多或少都会有微妙的影响,简直就是牵一发而动全身啊。这种类型的系统复杂性来源于许多简单组成部件的整合,而不是因为任何复杂的组成部 件。
译文链接:http://news.html5tricks.com/5-surprise-to-be-programmer.html
翻译作者:IT 新闻 – 蒋丽丽