软件随想录:程序员部落酋长Joel谈软件(local.joelonsoftware.com/wiki)-10

本文主要是介绍软件随想录:程序员部落酋长Joel谈软件(local.joelonsoftware.com/wiki)-10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给计算机系学生的建议

  • 作:周思博 (Joel Spolsky)
  • 译:Paul May 梅普华
  • 校:Tian-Jian "Barabbas" Jiang 姜天戬

Sunday, January 02, 2005


    虽然一两年前我就喊过 rich Windows GUI 用户端会是未来趋势,不过还是经常有大学生写电子邮件来问工作方面的建议,由于正逢招募时期,我想还是把我的标准建议写下来,让这些学生读一读笑一笑然后忘掉。

    还好大学生大多很傲慢,从不找长辈讨教,而这就计算机科学领域来说是件好事,因为他们的长辈很可能会说些荒唐过时的主意,比如说「2010 年打卡操作员的工作机会会超过一亿个」或是「现在 lisp 工作可是炙手可热的呢」。

    我也差不多,在给大学生建议时根本不知道自己在讲些什么。我实在是彻底的过时,连 AIM 都搞不懂,还在用叫做email的 那种奇怪古老的玩意(真恐怖!)。当这玩意流行时音乐还是由叫「音乐 CD」的圆形薄片里放出来的呢!

CA1.JPG

    所以你最好忽略我这里写的东西,直接离开去做些在线交友软件之类的东西帮其他学生配对约会吧。

    然而......

    如果你喜欢写电脑程序,那么,恭喜你:你是少数能从事自己所喜爱的工作的幸运儿。大部份人都没这个福气。「爱你的工作」是个新概念。工作应该是某种讨人厌的东西,你得靠它赚钱去做自己真正喜欢做的事,前提是等到65 岁你可以退休又存够钱,而且到时不会太老太虛弱,另外你喜欢的事还不能需要好膝盖、好眼睛、以及走20 呎不断气的身体。

    我刚刚要说些什么?哦对。建议。

    不再废话,来,以下是约耳的:给计算机科学系学生的七个免费建议(物超所值哦):

  1. 在毕业前学会写作。
  2. 在毕业前学会C。
  3. 在毕业前学会个体经济学。
  4. 不要因为非计算机课程无聊就放弃。
  5. 修要写大量程序的课。
  6. 别担心所有工作都会外流到印度。
  7. 不管你做什么,去找个好的暑期实习工作。

    接下来是解释,除非你好骗到只因为我叫你做就去做。万一你真的那么天真,那就再来一个吧:8. 自尊心受损时要寻求专业援助。

在毕业前学会写作

    如果没有 Linus Torvalds 在传道的话,Linux 会成功吗?虽然他是个很出色的骇客,不过还是因为其能以英文通过电子邮件及 mailing list 推广他的想法,才能够吸引全球大量的志愿者。

    听说过极限编程这个最新的流行吗?很好,先撇开我对它的想法,你会听过 XP 是因为有一群好作家和讲者在推广。

    即使从小尺度来看,当你细看任一个写程序的组织,最有权力和影响力的程序员都是能清晰自信又自在地说写英文的人。另外长得高也有用,不过这一点你做啥都没用。

CA2.JPG

    堪用的程序员和伟大的程序员的差别并不在于他们会多少种语言,也不在于他们喜欢 Python 还是 Java。重点是能够和他人沟通自己的想法。伟大的程序员藉由说服他人而得到影响力。他们撰写清楚明白的意见和技术规格,让其他程序员了解他们的程序,因此别人可以运用这些程序而不是重写。如果少了这一点,他们的程序代码就毫无价值可言。他们为使用者撰写清楚易懂的技术文档,让大家能了解他们的程序的作用,这是唯一能让使用者理解其程序价值的方法。SourceForge 里埋藏了很多神奇有用却没有人用的程序。只因为程序的作者写不出好文章(或者根本不会写),所以没人知道他们的成果,而出色的程序代码就此凋萎。

    我不会雇用写不出好英文的程序员。如果你有能力写作,不管到哪上班,很快就会发现自己被要求写规格文件。这意味著你已经发挥自己的影响力,还让管理阶层注意到你了。

    大部份大学把某些课标示为「密集写作」,意思是你得写很多很多东西才能通过。找几门这种课来修吧!不要管学科,去找那些每周或每天都需要书写作业的课。

    开始写日志或网络日记。你写得愈多,写起来愈容易,就会写得更多,这是个正向的循环。

在毕业前学会C

    第二要素:C。

    注意我并不是说 C++。虽然 C 愈来愈少用,但它还是现役程序员的通用语。它是程序员与程序员互相沟通所用的语言;更重要的是,它比大学里教的「现代」程序语言(ML、Java、Python 或其他最近教的流行垃圾)更接近机器多了。你至少要花一学期去贴近机器,否则你永远无法用高阶语言写出有效率的程序。你也永远不能去做编译器或作业系统,这里头还有最棒的程序工作机会。另外也永远不会有人相信你能创造大型专案的架构。我才不在乎你有多懂 continuation 和closure和例外处理:如果你不能解释为什么 while (*s++ = *t++); 会复制一个字串,又或这对你并不是天底下最自然的事,那么我就会认定你写程序的依据是迷信:一个不懂基本解剖学的医生,会因为卖药的菜鸟业务说药应该有效就用来开处方。

在毕业前学会个体经济学

CA3.JPG

    如果你没修过任何经济学课程,面试都会其快无比地结束:经济学和某些学科一样,开场白声势浩大,有著许多很有道理的有用理论和事实,可以在真实世界里实证等等,之后却突然急转直下。这个有用的开场白就是个体经济学,亳无疑问它是所有重要商业理论的基礎。不过接下来事情就恶化了:你进入总体经济(不想的话可以跳过)和关于利率和失业的有趣理论(不过实际上反例似乎比较多),接下来只有愈来愈糟,所以很多专攻经济的人就跳槽到物理,反而在华而街有更好的工作机会。不过个体经济学是一定要修的,因为你得了解供求与需求,也得知道竞争优势并了解净现值和折扣还有边际效用,才能稍为搞清楚商业为什么能这样运作。

    为什么主修计算机的学生要学经济学呢?因为懂商业基础的程序员会是个更有价值的程序员。事情就是这样。有些程序员的点子从程序的立场来看有道理,但由资本主义来看完全不通。我已经数不清被这种人打败多少次了。如果你能了解这种事,你就会是更有价值的程序员,同时也会获得对应的报酬,而其中的道理也能在个体经济学里学到。

不要因为非计算机课程无聊就放弃

    放弃非计算机课程是个降低 GPA(学业平均成绩)的好方法。

    永远别低估 GPA 的影响有多大。很多的招募人员和用人经理(包括我在內)会在浏览履历时直接去看 GPA,而且不会觉得有任何不对。为什么呢?因为比起别的单一数字,GPA 更能反映长期下来各种状况下,几十个老师对你成果的总评价。SAT 分数呢?哈!只不过是数小时的一个测验罢了。GPA 反映了四年间的几百份作业还有期中考和课堂参与状况。没错,GPA 本身是有些问题。比如这些年来有分数膨胀的情形。另外 GPA 也没有说分数是怎么来的,是在无名社区大学家政系修简单课程?还是在加州理工学院修研究所的量子力学课程?最后当我剔除所有在无名学校拿 2.5 GPA 的履历后,就会去要成绩单和推荐信。然后我会找那些全部都拿高分的人选,而不是只在计算机科学拿高分的。

    为什么我这个找软件开发者的雇主要在意你修欧洲史的分数呢?毕竟历史是蛮无聊的。哦,所以你是说由于你觉得工作无聊就不去好好做,我就应该雇用你吗?算了吧,写程序也有无聊的事情。每个工作都有无聊的时候。我才不会请一个只想做好玩事情的人呢。

    我在大学时候修了一门叫文化人类学的课,因为我不知怎的觉得自己需要知道些有关人类学的东西,而这看起来像门好玩的通识课程。

CA4.JPG

    好玩?连一点点都算不上!我得读些单调到爆的书,里头写的是巴西雨林印第安人和特罗布里恩群岛岛民,不管从哪方面,我都不会觉得它有趣。有时候课程实在烦得要命,烦到我想找些更刺激的事,比如看著草生长。我对这个主题彻底完全失去兴趣,眼睛还流著泪。我已经受不了不停的讨论土著在堆集山芋。我不知道特罗布里恩岛民为啥要花这么多时间堆山芋,我什么都记不住了,这实在是无聊透顶,但期中考到了,所以我就考砸了。最后我決定把文化人类学当作我烦人的铁手套:我个人无聊而单调的障碍课程。如果我能在一门得完全搞懂冬季赠礼节互赠毛毯的课拿到 A,我就能搞定任何事,不管它有多无聊。后来当我意外卡在林肯中心对付全长18 小时的华格纳「指环」时,我得感谢当初研读夸扣特而部族,相较之下华格纳真是亲切啊。

    我后来拿到 A。如果我能做到,你也可以。

修要写大量程序的课

    我还记得我发誓绝不上研究所的那一刻。

    那是动态逻辑的某堂课上,教课的是活力充沛的耶鲁教授 Lenore Zuck,是这出色电脑科学学府里最出色的一位老师。

    我现在的回忆已经模糊,并不能正确地评价这门学科,但请容我敷衍过去。形式逻辑的想法是:你能证明某件事是对是因为其他事情是对的。举例来说,形式逻辑可以由「成绩好的人都能得到工作」加上「強尼成绩好」,让你发现新事实:「強尼被得到工作」。这一切非常的离奇有趣,而且一个解构者只要十秒,就能用形式逻辑把任何有用的东西完全拆散,只剩下一些有趣而无用的玩意。

    现在呢,动态逻辑是一样的东西,只是再加上时间因素。举例来说,「你把灯打开之后,你就能看到你的鞋子」加上「灯原本是开著的」暗示「你可以看到你的鞋子」。

    动态逻辑对 Zuck 教授这种出色的理论家来说非常有吸引力,因为你有希望用它来正式证明有关电脑程序的事,而这种证明会非常有用。举例来说,你可以正式证明,应该在红色行星上到处寻找火星人马文(译注:某卡通人物)踪迹的火星漫游号,它的记忆卡不会有溢出错误而因此整天不断重新开机。

    于是 Zuck 博士在那门课第一天就写满两面白板和白板大块的墙壁,证明如果你有个电灯开关而且灯是熄掉的,当你打开开关时,电灯就会打开。

    证明过程繁复至极而且非常容易出错。要证明该证明正确要比说服你自己开开关会开灯还要困难。写了这么多面白板的证明其实已经略过了很多过程,省略的原因是是因为这些过程太冗长沉闷无法正式写出。很多过程都是用归纳法得到,其他则是用归谬法,剩下的是用研究生证法证明的(译注:意指教授叫许多研究生进行大量人工计算才验证得出来,又称为研究生演算法)。

    至于作业呢,我们必須证明相反的情况:如果灯原本是熄的,而且现在开著,证明是你打开了它。

    我尝试了,我真的试过了。

    我在图书馆花了很多个小时去试。

    花了好几个小时之后,我在模仿 Zuck 博士原本的证明时发现其中有个错误。或许是我抄错了,不过这让我明白一件事:如果得花三小时写满几个黑板才能证明某件小事,而且过程中会出错的地方有好几百个,这种机制永远无法证明出有趣的事情。

    不过这跟动态逻辑家无关:他们做这个并不是因为它有用,而是为了长聘教职(译注:tenure,以往是终身教职,但现在未必了)。

    我退掉那门课并且发誓绝不上计算机科学的研究所。

    这个故事的教训是计算机科学并不等同于软件开发。如果你真的非常幸运,你的学校可能会有一套合宜的软件开发课程,不过大概是不会有的,因为精英学校认为技职教育和犯人改过自新计划才需要教导实务技能。只不过是写写程序而已,到处都可以学。我们可是耶鲁大学,身负铸造未来世界领袖的重责大任。你觉得 16 万美元的学费是让你来学 while 循环的吗?你以为这是什么?某个在机场旅馆举办的骗人 Java 研讨会吗?哼。

    问题在于我们并没有真正的专门软件开发学校,所以如果你想当个程序员,可能还是得主修计算机科学。这是个好的主修学科,不过跟软件开发是两回事

    不过如果你幸运的话,可以在计算机系找到很多密集写程序的课程,就像你可以在历史系找到很多能学会写作的课一样。这些是最好的课程了。如果你喜欢写程序,修 lambda 演算或线性代数这种不碰电脑的课时,有些地方搞不懂不必难过。去找那些课程名称有 Practicum 的 400 等级课程。这些课用这个拉丁文只是想弄个漂亮的课程名称,好瞒过那些爱跩文的屁管理阶层。

别担心所有工作都会外流到印度

    好,首先如果你已经身在印度,的确永远不用管它,你根本不用开始担心所有工作都跑到印度。这些工作都很好,好好享用并祝身体健康。

    不过我还是一直听说计算机系的入学人数直线下降,而谣传的原因之一是「学生害怕进入一个工作机会都将外流到印度的学科」。有很多理由可以证明这实在是错得离谱。首先,根据目前流行事业来选择职业本身就很荒谬。其次是即使每一个程序设计的工作都移到印度跟中国,写程序还是一种绝佳的训练,可以协助你从事各种非常好玩的工作(如商业流程工程)。再来就是真正好的程序员还是非常抢手,不管是在这里还是印度,这点你得相信我。没错,的确有一大群失业的资讯人员在吵著说他们已经失业很久很久了。虽然会得罪这些人,不过你知道吗?真正好的程序员还是有事做。第四点是没有更好的主意了,你还能有什么选择?去主修历史吗?不然你只好去念法学院了。不过我倒是知道一件事,99% 的执业律师都他们的工作,恨做律师的每一分钟,更不用说他们每周同样要工作 90 小时。就如我所说的:如果你喜欢写电脑程序,恭喜你:你是少数能从事自己所喜爱的好工作的幸运儿。

    不管如何,我不认为学生真的能想到这一点。计算机系入学人数的下降,不过是在网络热潮造成人数暴增的泡沫后,回复到以往的正常水平。这些多的人并不是真的喜欢写程序,只是认为可以在计算机系找个诱人的高薪工作,还有机会在24 岁时就能股票上市上柜。谢谢老天,这些人现在都走啦!

不管你做什么,去找个好的暑期实习工作

    精明的招募人员都知道,爱写程序的人国中时就替牙医写过数据库,读大学之前就去过三次夏季电脑营,还替营队报纸架设管理系统,另外暑假还会到软件公司实习。他们就是要找这种人。

CA5.JPG

    如果你喜欢写程序,绝对不过要随便选工作,不管是暑期打工还是兼职或其他情况,一定要找写程序的工作。我知道其他19岁的青少年都想去商场打工折衬衫,不过即使你只有 19 岁也一样,拿你所拥有的珍贵才能去折衬衫实在太笨了。当你毕业时应该要有一份列有各种程序设计工作经验的履历。折衬衫的同学毕业了就让他去租车公司服务他人吧(Tom Welling 例外。他的打工是去上电视演超人。)

    为了让你的生活更容易,也为了强调这整篇文章纯粹是为了个人的利益,我的公司 Fog Creek Software 在履历上提供了很醒目的软件开发暑期实习。「比起其他实习机会来说,你在 Fog Creek Software 很可能会学到更多关于软件的程序撰写、开发、商业知识。」去年的暑期实习生 Ben 如是说。这可不全是因为我派人去他宿舍才让他这样说的。申请期限是 2 月 1 号。来吧!

    如果你听从我的建议,你最后可能还是会做些蠢事,比如太早卖掉微软股票,或者为了有门的办公室而回绝在 Google 的工作机会,或是做出其他愚蠢的重大決定,不过那些都不关我事。我说过不要听我的了。

    这些网页的內容为表达个人意见。

这篇关于软件随想录:程序员部落酋长Joel谈软件(local.joelonsoftware.com/wiki)-10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885359

相关文章

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松