写给未来程序员的建议

给计算机系学生的建议

大概在一两年前,我还在高喊,有着良好用户体验的Windows图形界面式客户端(rich Windows GUI client)将是未来的潮流。尽管我这样说了,但是时不时地还是有大学生写信给我,问我对于找工作有何建议。既然现在又到了招聘季节,我想我还是把我的标准建议写下来,让那些大学生读一读,笑一笑,然后忘掉。

大多数大学生都很自以为是,从不会虚心向前辈求教,他们觉得那样太麻烦。但是,很幸运,在计算机领域,这样做是对的。因为他们的前辈很可能会说一些不靠谱的话,比如“到2010年之前,对纸带打孔员的需求将超过1亿人”,还有“目前Lisp语言的相关人才非常抢手”。

我也不能例外,当我在给大学生提供建议时,我完全不知道我在说些什么。我已经无可救药地属于过时人物了。我真的搞不清楚AIM[1]是什么,我仍然在使用一种老掉牙的叫作Email的东西,真是太恐怖了。那玩意流行的年代,人们听音乐还是用一种又扁又圆叫作CD的小圆盘。

所以,你最好直接漠视我在这里说的话,将时间用来开发某种可以使其他学生找到约会对象的在线软件上。

尽管如此,我还是会说出我的建议。

如果你喜欢编程,那么你真是受到了上天的眷顾。你是非常幸运的少数人之一,能够以自己喜欢的事谋生。大多数人没有这么幸运。你认为理所当然的观念“热爱你的工作”,其实是一个很现代的概念。通常的看法是,工作是一种让人很不开心的事,你为了拿工资才不得不去上班。你工作的目的是为了攒下钱去干那些自己真正喜欢干的事,但是前提是你得等到65岁退休之后才行,而且还有不少条件。条件一,你的积蓄必须足够多;条件二,你没有老到走不动,你还有体力去干那些事情;条件三,你喜欢的事情不需要用到脆弱的膝盖、昏花的视力,也不要求你走上一里地不喘气,等等。

我刚才说到哪里了?对了,我要提建议。

二话不说,下面就是乔尔针对计算机专业学生的7条免费建议。(绝对超值哦。)

(1) 毕业前练好写作。

(2) 毕业前学好C语言。

(3) 毕业前学好微观经济学。

(4) 不要因为枯燥就不选修非计算机专业的课程。

(5) 选修有大量编程实践的课程。

(6) 别担心所有工作都被印度人抢走。

(7) 找一份好的暑期实习工作。

我会一一解释这7条建议。如果你头脑简单到我说什么你就做什么,那么你就不必读下去了。在这种情况下,我还要加上一条:

(8) 寻求专业人士的帮助,培养你的自信心。

毕业前练好写作

如果不是LinusTorvalds不断地散布福音,请问Linux操作系统会成功吗?虽然他是一个非常聪明的计算机天才,但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过电子邮件和邮件列表用书面形式传播自己的想法,最终引起了所有人的注意。

你听说过现在风靡一时的“极限编程”[2](Extreme Programming)吗?我在这个地方不谈我对极限编程的看法,我只说如果你听过这个词,那么原因就是它的倡导者都是一些非常有才华的作家和演说家。

即使我们缩小范围,将目光局限在任何一个软件开发团体中,你也会发现该团体中最有权势和影响力的程序员正是那些表达能力强的程序员,他们无论是做书面表达还是做口头表达,都能够清晰、自如、具有说服力地传达观点。此外,长得高也有助于提升影响力,不过这个不取决于你。

一个普通程序员与一个优秀程序员的区别,不在于他们懂得的编程语言谁多谁少,也不在于他们喜欢用Python语言还是喜欢用Java语言,而在于他们能否与他人交流思想。如果你能说服其他人,你的力量就可以得到放大。如果你能写出清晰的注释和技术规格说明书,其他程序员就能够理解你的代码,因此他们就能在自己的代码中使用,而不必重写。如果你做不到这一点,你的代码对其他人就没有价值。如果你能为最终用户写出清晰的使用手册,其他人就能明白你的代码是用来干什么的,这是唯一让别人明白你的代码有何价值的方法。SourceForge[3]上有许多优美的、有用的代码,但是它们都像被埋葬了一样,根本没人来用,原因就是它们的作者没有写好使用说明(或者压根就没写)。这样一来就没有人知道他们的成果,他们杰出的代码就衰亡了。

如果一个程序员不会用英语写作、没有良好的写作能力,我就不会雇他。如果你能写,不管你去哪家公司工作,你很快就会发现写作技术文档的任务会落到你头上,这意味着你已经开始在放大自己的影响力了,管理层正在注意到你。

大学里有些课程被公认为“写作密集型”(writing intensive)课程,这就是说为了拿到学分,你必须写作多得可怕的文字。一定要去上这样的课程!不要管学科,只要这门课每周甚至每天都要你写东西,你就去上。

你还可以动手写日记或者网志。你写得越多,写作就会变得越容易。写起来越容易,你就会写得越多。这是一个良性循环。

毕业前学好C语言

第二点我要讲的是C语言。请注意,我说的是C语言,而不是C++。虽然在实际使用中C语言已经越来越罕见,但是它仍然是当前程序员的共同语言。C语言让程序员互相沟通,更重要的是,它比你在大学中学到的“现代语言”(比如ML语言、Java语言、Python语言或者其他正在教授的流行垃圾语言)都更接近机器。你至少需要花一个学期来了解机器原理,否则你永远不可能在高级语言的层次写出高效的代码。你也永远无法开发编译器和操作系统,而它们恰恰属于目前程序员能够得到的最佳工作之列。别人也永远不会放心将大型项目的架构设计交给你。我不管你懂多少延续(continuation)、闭包(closure)、异常处理(exception
handling),只要你不能解释为什么while (*s++ = *t++);的作用是复制字符串,或者不觉得这是世界上对你来说再自然不过的事情,那么你就是在盲目无知的情况下编程。在我看来,这就好像一个医生不懂得最基本的解剖学就在开处方,他看病的根据完全是因为那些娃娃脸的医药销售代表说这种药有用。

毕业前学好微观经济学

如果你没有上过任何经济学课程,那么我首先来作一个超短的评论:经济学是这样一门学科,刚开始学的时候轰轰烈烈,有许多有用的、言之有理的理论和可以在真实世界中得到证明的事实,等等;但是,再学下去就每况愈下,有用的东西就不多了。经济学一开始那个有用的部分正是微观经济学,它是商业领域所有重要理论的基础。跟在微观经济学后面的东西就不行了。你接下来学的是宏观经济学,如果你愿意,尽管跳过去,也不会有什么损失。宏观经济学开头的部分是利息理论,内容比方说是利率与失业之间的关系,但是怎么说呢,看上去这部分里面还没有被证实的东西多于已经被证实的东西。学完这部分,后面的内容越来越糟糕,许多经济学专业的学生实际上都变成在搞物理学,因为这样才能在华尔街上找到更好的工作。但是不管怎样,你一定要去学微观经济学,因为你必须搞懂供给和需求,你必须明白竞争优势,你必须理解什么是净现值(NPV),什么是贴现,什么是边际效用。只有这样,你才会懂得为什么生意是现在这种做法。

为什么计算机系的学生也应该学经济学?因为,从经营一家公司的角度来看,比起那些不懂的程序员,一个理解基本商业规则的程序员将会更有价值。就是这么简单。我无法告诉你有多少次我是那么充满挫折感,因为我看到了太多的提出一些疯狂的想法的程序员,这些想法在代码上也许可行,但在资本主义世界中毫无意义。如果你懂得商业规则,你就是一个更有价值的程序员,你会因此得到回报的,但是前提是你要去学习微观经济学。

不要因为枯燥就不选修非计算机专业的课程

想提高GPA[4]绩点的一个好方法就是多选修非计算机系的课程。请千万不要低估你的GPA的重大意义。千千万万的人事经理和招聘人员在拿到一份简历的时候,第一眼就会去看GPA,包括我也是这样。我们不会为这种做法道歉。为什么?因为GPA不反映单个的成绩,而是代表了许多个教授在一段很长的时间中,在不同的情况下,对你的表现的一个总的评估。SAT[5]成绩难道不够吗?哈,那只不过一场几个小时的测试罢了。GPA中包括了四年大学期间你的小论文、期中考试和课堂表现,总数有几百次之多。当然,GPA也有自己的问题,不是百分之百准确。比如,这些年来,老师对学生的打分越来越宽松,学习成绩有通货膨胀的趋势。再比如,GPA无法反映课程的难度,没人能够看出你的GPA是来自无名社区大学家政系的轻松课程还是来自加州理工学院针对研究生的量子力学课程。渐渐地,我形成了一套自己的做法,首先我会过滤掉所有来自社区大学、GPA低于2.5的简历,然后我会要求剩下的人给我寄成绩单和推荐信。我再从中发现那些成绩一贯优秀的人,而不是那些仅仅在计算机系课程中得到高分的人。

为什么我要关心某人的“欧洲历史”课程成绩呢,毕竟作为雇主我要找的应该是程序员啊?何况,历史是那么枯燥,不得高分很正常。哦,这么说来,你的意思是我应该雇用你,而不用考虑一旦工作变得枯燥你会不会努力工作?别忘了,在编程工作中也有很枯燥的东西。每一项工作都有枯燥难耐的时刻。我不想雇用那些只想干有趣事情的人。

在大学里,我选修过一门叫作“文化人类学”(Cultural Anthropology)的课程。因为我很好奇,想知道这门课会讲什么,想学一点关于人类学的知识,看上去这很像一门有趣的概论类课程。

这门课有趣吗?连有趣的边都沾不上!我不得不阅读那些乏味到极点的书籍,内容有关巴西雨林中的印第安人和特洛布里安德[6](Trobriand)岛上的居民。恕我直言,我对这些东西一点兴趣也没有。有一次,听课听到一半,实在是太无聊了,我渴望干一些更有意思的事情,比如看着窗外青草在长高。我对这个学科已经毫无信心了。完全地、彻底地,不想学下去了。我的眼睛酸疼,课堂上正在无休止地讨论堆山药,我彻底厌倦了。天知道为什么特洛布里安德岛上的居民要花那么多时间来堆山药?其他的事情我都已经忘记了,总之,这门课超级乏味。但是,那天讲的东西期中考试时肯定会考。所以,我忍住了,继续往下学。我逐渐下定决心,就把文化人类学当成我的抗无聊免疫剂,这是我的个人万米障碍跑的训练场,专门训练如何对抗无聊。如果我想在这门课的考试中得到A,那么就连印第安人在冬庆节[7](potlatch)中使用的毯子,我都必须知道得一清二楚。如果我做到了,那么我就无敌了,以后天底下再无聊的东西我都能够对付。后来,出于偶然我坐在林肯中心[8]听完了整整8个小时瓦格纳的歌剧《指环》[9](Ring
Cycle
)。幸亏我在文化人类学中已经尝过研究夸扣特尔人[10](Kwakiutl)的滋味,两相比较,我觉得坐着听8个小时歌剧可谓愉快经历。

最后,我在那门课中得到了A。如果我能做到,你也一定能做到。


[1]    AIM是AOL Instant Messenger的缩写,也就是AOL出品的即时通信软件。它的首次发布是在1997年5月。据统计,在2006年,它占据了美国即时通信市场52%的份额。

[2]    极限编程是一种软件工程的方法论,之所以称为“极限”,是因为这种方法提倡将一些公认的软件开发的“最佳原则”都发挥到极限,追求软件开发的最佳效果。

[3]    SourceForge.net是一个代码仓库,任何个人或团体都可以在上面免费发布开放源码的项目,访问者可以免费得到这些代码或软件。

[4]    GPA(Grade Point Average的缩写)是高校中衡量学生平均成绩的一种手段,将各种课程的成绩换算为一个绩点,然后再求加权平均。常见的GPA为4分制,A(90~100分)为4分。有的学校会将A+算为4.3分。

[5]    SAT(Scholastic Aptitude Test和ScholasticAssessment
Test的缩写,“学习能力测试”)是美国的一项标准化考试,通常用来评估高中毕业生的水平。美国高校采用这个成绩作为录取参考。

[6]    特洛布里安德群岛是南太平洋中的一个由珊瑚礁构成的群岛,面积为170平方英里,靠近新几内亚的东海岸。

[7]    冬庆节是北美洲太平洋沿岸的一些印第安部落的重大节日之一,人们在这个节日中往往互赠礼物。

[8]    林肯艺术中心是纽约最著名的文化表演场所之一,建于20世纪70年代。

[9]    歌剧《指环》全名为《尼伯龙根的指环》(The Ring of the Nibelung),是德国音乐家瓦格纳(Wilhelm
Richard Wagner,1813—1883)的巨作。全剧共分4部,全部演完需要4天,每天8个小时。

[10]   夸扣特尔人是太平洋东北海岸的美洲印第安人,主要生活于温哥华岛上。

时间: 2024-10-17 01:30:27

写给未来程序员的建议的相关文章

写给 iOS 程序员看的 C++(2)

原文:Introduction to C++ for iOS Developers: Part 2 作者:Matt Galloway 译者:kmyhy 欢迎回到<写给 iOS 程序员看的 C++ 教程系列>第二部分! 在第一部分,你学习了类和内存管理. 在第二部分,你将进一步深入类的学习,以及其他更有意思的特性.你会学习什么是模板以及标准模板库. 最后,你将大致了解 Objectiv-C++--一种将 C++ 混入 Ojective-C 的技术. 准备好了吗?让我们开始吧! 多态 这里的多态不

产品经理与程序员的矛盾从何而来?(给产品经理们的建议,给程序员的建议。程序员处在信息传导到最末端,因此比较弱势、信息不准确)

今天我们来讨论一下在软件开发过程中的一个很常见,也是令很多程序员头疼的问题,那就是与产品经理直接的矛盾到底是怎么形成的. 先看下面的一张图片,我想大家都明白其中的意思. 一.产品需求经常变动 由于产品经理经常改动需求,导致程序员不得不把做好的东西重新再做,结果可想而知.有的时候程序员加班加点刚做完的东西,被产品经理一句话给推翻了,说需求变动了,不能这么做.严重的时候连核心模块都完全大变样.就一直这样改完做,做完改,无限循环下去.这个小编我可是深有体会. 二.产品经理对程序员的不理解 遇到一个懂技

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验.因此,掌握基本的CRC算法应是嵌入式程序员的基本技能.可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式. 其实,在网上有一篇介绍CRC

第1次作业:这是一个不想当程序员的未来程序员

前言:这是一个不想当程序员的未来程序员对于计算机专业的某某看法.... 1.结缘计算机 问题1.1:你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 对于这个问题,其实计算机专业并不是我的第一志愿,而是第三志愿,我第一二志愿分别是会计和金融,不过现在看来其实我的兴趣也不在这几个方面,有句话说得好,三分靠高考,七分靠志愿.志愿填的好,将来烦恼会少很多.经过两年的学习,我发现当初我就不应该考虑就业前景而填报专业,而是应该结合自己的兴趣爱好来,即使这份兴趣爱好所对应的专业将来并不好找到工作

敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述

第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dynamic diagram)展示了软件实体在运行过程中是如何变化的,其中描述了运行流程或者实体改变状态的方式.物理图(physical diagram)展示了软件实体不变的物理结构,其中描述了诸如源文件.库.二进制文件.数据文件等物理实体以及它们之间的关系. 查看如下代码,这段程序实现了一个基于简单

不要困在自己建造的盒子里——写给.NET程序员(附精彩评论)

转自:http://kb.cnblogs.com/page/92260/ 此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说.NET不行或劝大家放弃.NET.恕我愚钝,此主旨在文中表达不够清楚,看评论中很多朋友误解了,特此说明. 另外,本文中的观点并不全部是我个人的想法,相当一部分来自我以前聊过天的某些大牛,他们很多来自微软.百度.腾讯等知名企业,并

给刚入门的程序员五点建议

每个IT企业,尤其是初创企业,非常苦恼:找不到好的程序员.现在大学.软件学院及各种培训机构,每年培养几十万的程序员,毕业的每个人都有同样困恼:找不到好的工作.问题出在哪里呢?其实,企业需要的是不是刚会写程序的人,需要来了就能干活的人,尤其能把活干好的人.而刚毕业的大学生多半刚学会如何写程序,的确很难企业需求. 企业到底需要什么样的程序员,一个刚入门的程序员如何成为企业需要的高手呢?还有很多程序员问我,“我需要具备什么样的能力就可以去创业?”我一直在琢磨类似的问题.我自己写过十年程序,也在金山管理

给程序员的建议

程序员如何优雅度过一生的15个建议(转) http://help.3g.163.com/16/0203/07/BESP8DN300964KAD.html 要点有以下几个: 1.积累你的代码量,不管是写什么样的代码,写那方面的代码,但是有一点,一定要思考,然后有所收获 2. 编程语言只是一种工具.(当然这个觉悟在菜鸟程序员看来简直是一个荒谬的事.但是当你学的足够深入,接触到一定量之后你就会对这个想法完全表示赞同.而且既然一种编程语言都只能说是一种工具的话,那对于前端来说,什么测试工具eslint,

写给新手程序员的一封信

首先,欢迎来到程序员的世界.在这个世界上,不是有很多人想创造软件并解决问题.你是一名hacker,属于那些愿意做一些有挑战性的事情的人. “当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题.” – WhyTheLuckyStiff 对于下面的文字你不必完全接受,所有这些来自一个其貌不扬的程序员.我喜欢把事情做到最好,而不是对原来的东西修修补补. 仅仅是因为爱好开始做一些创新,这是一个很好的开始!如果你说“我要先学习一下再开始做”那么你永远不会真正开始.每个人都需要从某个地方开始,所以现