我猜,你之所以拿起这本书,因为你是程序员,“职业素养”这个说法吸引了你。你应该如此。我们这种专业人士迫切渴求的,正是“职业素养”。
我也是程序员。我编了42年 的程序。这42年里,我什么都经历过。我被开除过,也被表扬过。我当过小组长,当过主管,也当过普通员工,甚至当过CEO。我的同事有聪明绝顶的,也有混日子的懒蛋 。我曾经开发过尖端的嵌入式软硬件系统,也写过寻常公司的工资系统。我用过COBOL、FORTRAN、BAL、PDP-8、PDP-11、C、C++、Java、Ruby、Smalltalk,还有其他许多语言和系统。我的同事有混工资的家伙,也包括无可挑剔的专业人士。本书要讲的,正是那些无可挑剔的专业人士。
在这本书里,我会尝试定义专业程序员。我会讲解,成为真正专业的程序员,需要什么样的态度、原则、行动。
这些态度、原则、行动从哪里得知?它们源于我一路走来的亲身体会。坦白说,看到我第一次作程序员时的表现,你几乎不会想到与“专业”二字搭边。
那是1969年,我17岁的时候。我父亲督促本地一家名为ASC的公司雇用我为兼职程序员。(是的,我父亲做得出这种事情。我曾见到他冲到疾驰的汽车前,伸出双臂大喊“停”,车真的就停下来了。没人敢对他说不。)那家公司把我扔在保管所有IBM电脑操作手册的房间里。我的任务就是把历年的更新记录到操作手册上。就是在那里,我第一次见到了“本页有意留空”这句话。
这个活干了好几天之后,我的上司让我写个简单的Easycoder 程序。领到这个任务可真叫人激动,我还从来没在真正的计算机上写过程序呢。不过,我曾钻研过Autocoder的说明书,对如何开始写这个程序,我也有些模糊的想法。
程序要做的就是,从磁带上读取记录,将旧的ID替换为新的ID。新的ID从1开始,逐个加1。然后,把更换了新ID的记录写到新的磁带上。
上司给我看了一个架子,上面堆着许多红色和蓝色的打孔卡片。想象一下,你买了50张纸牌,一半是红色的,一半是蓝色的,然后把它们一张张叠起来。那些打孔卡片就是这个样子的。总的来看它们红蓝相间,每部分颜色都包含了大概200张卡片。卡片的内容是所有程序员都会用到的子程序库的源代码。程序员通常会拿走堆在最上面的卡片,确认没拿错其他卡片,然后把卡片排在自己程序卡片的末尾。
我自己的程序写在编码表单上。编码表单是纸做的巨大的矩形列表,有25行,80列。每一行对应一张卡片。程序用大写字母和2号铅笔填在编码表单上。每行的最后6列,用2号铅笔编上号。通常编号以10为基础递增,这样将来还可以插入卡片。
填完编码表单,就要交给负责打孔的人。这家公司有几十名女员工,她们从一个大公文框中取出编码表单,然后把这些表单“打”到打孔机上。打孔机很像打字机,不过字符是打在卡片上的,而不是纸上。
过一天,负责纸带打孔的人会把对应的纸带通过办公交流信件发回给我。我那一小堆的打孔卡片,用我的编码表单包起来,外面用橡皮筋捆上。我想看看哪些卡片有打孔问题,但没有发现。所以我拿了一张子程序库的卡片,附加在我的程序卡片末尾,上楼交给电脑操作员。
计算机安放在密封的房间,有锁闭的大门,有高出地面的地板(用来走线)。我敲了门,操作员一脸严肃地拿走我那堆卡片,放在计算机房的另一个公文框内。等他们有空的时候,就会运行我的程序。
第二天,我拿回了自己的卡片。卡片外面裹着运行结果详单,用另一根橡皮筋捆起来(那时候我们得用很多橡皮筋)。
我翻开结果详单,发现编译失败了。详单里的出错消息我压根看不懂,所以我去找了上司。他仔细看了看,叽叽咕咕地说了几句,在上面做了个记号,然后拿起我的卡片,告诉我跟他走。
上司带我去了打孔室,找了一台没人用的打孔机。他逐个纠正了程序卡片上的错误,又加上了一两张卡片。他简单地介绍自己在做什么,但我根本来不及弄明白。
他把新的卡片带到计算机房,然后敲了门。他对操作员说了几句神秘的话,便跟在操作员身后进入了机房,还招手示意我跟上去。我们看着操作员开动磁带存储器,读入纸带。磁带旋转起来,打印机哒哒响起来,然后便结束了,程序运行正常了。
又过了一天,我的上司对我表示了感谢,告诉我以后不用来了。显然,ASC认为他们没时间去教一个17岁的孩子写程序。
但是我和ASC却没有就此断了关系。过了几个月,我得到了一份全职的工作(虽然是三班倒的第二班),管理ASC的离线打印机。这些打印机以磁带上存储的图片为材料,印刷垃圾邮件。我的任务是给打印机装纸,给磁带机装磁带,解决卡纸问题,除此之外,就是盯着机器运行。
那是1970年,我上不了大学,也不想上大学。越南战争还打得热闹,学校里一片喧嚣。我一直如饥似渴地学习使用COBOL、FORTRAN、PL/1、PDP-8、 IBM 360汇编语言。我的想法是不去上大学,自学成材,尽自己的力量去找份编程的工作。
一年后我做到了。我晋升为ASC的全职程序员。我与两个好朋友——Richard和Tim,我们都是19岁——一起,与同一组的另外3名程序员为卡车司机工会编写实时会计系统。我用的计算机是Varian 620i。这种微机很简单,结构类似PDP-8,区别在于它的字长为16位,而且有两个寄存器。我们使用的语言也是汇编。 这个系统的每行代码都是我们自己写的,我说的是,每一行代码。我们自己写了操作系统,自己写了中断头,自己写了IO驱动器,自己写了磁盘文件系统,自己写了内存的交换覆盖模块,甚至自己写了重定位的链接器,所有的应用程序都是自己写的。我们持续工作了8个月,每周工作70到80小时,为了赶那该死的工期。当时,我的工资是每年7200美元。
系统按期交付了,之后我们便辞职了。
辞职是突然的,而且是有预谋的。要知道,所有工作都完成,顺利交付了系统之后,公司才给我们涨了2%的薪水。我们感到受骗了,我们的劳动不受尊重。我们中的一些人另找了工作,径直辞了职。
我却选了一条不同,而且非常不幸的路。我和一个朋友冲进老板办公室去发泄,出来的时候还在大吵大嚷。这可真过瘾——但只过了一天的瘾。
第二天,我忽然发现没有工作了。我19岁,失业,没有学位。我面试了一些程序员的职位,但都表现得不够理想。所以我在我姐夫的割草机修理铺干了4个月。不幸的是,我脑子里可能缺少修理割草机的那根弦。他最后只好让我走人了,我的感觉糟透了。
那时候我每天凌晨3点才睡觉,睡觉之前的活动是吃比萨,在我父母的老式黑白电视机上看很老的恐怖电影,虽然那些电影里只有几个鬼怪可看。我睡到下午1点才起来,希望逃避沉闷惨淡的白天。我在本地一所社区大学学习微积分,但是考试却通不过。我真是个废物。
我母亲把我拉到一边说,我的生活糟透了,只有傻瓜才会没找好下家就辞职,才会这么冲动辞职,才会和同事一起闹事。她还告诉我,辞职前一定要找好下家,要非常冷静,非常沉着,不要拉上其他人。她劝我打电话给以前的老板求情。我母亲说:你要把姿态放低。
19岁的人根本不知道什么是放低姿态,我也不能例外。但是,现实已经撕碎了我的骄傲。最后我给老板打了电话,而且真正把姿态放得很低。结果奏效了,老板很高兴让我重新上班,给我6800美元的年薪,我也欣然接受。
我又在那里工作了18个月,观察自己的一举一动,尽自己努力成为一名有价值的员工。我升了职,加了薪,有了稳定的收入。生活走上了正轨。我离职时没和公司起任何冲突,同时我已经确定了更好的去处。
你可能认为我就此成熟,就这样成为了专业人士。其实并非如此。这段经历只是我需要学习的众多课程的第一课。后来,我曾经因为粗心耽误了关键日期被炒鱿鱼,因为不小心向客户泄露机密数据几乎被炒鱿鱼。我曾经领导过一个没指望的项目,看着它垮掉,明知需要他人帮助却无动于衷。我曾经好强地维护自己的技术决策,即便这些决策在客户的需求面前黯然失色。我曾经雇用完全不合适的人,给我的雇主背上沉重的负担。最糟糕的是,因为我领导无方,导致其他两个人被开。
所以,请你把这本书看成我的错误大全,它记录了我干过的所有蠢事;也请你把这本书当成一份指引,让它带你绕开我曾经走过的弯路。
分享到:
相关推荐
Martin, "The Clean Coder: A Code of Conduct for Professional Programmers" Prentice Hall | 2011 | ISBN: 0137081073 | 256 pages | PDF | 6 MB Programmers who endure and succeed amidst swirling ...
### 《The Clean Coder》:专业程序员的行为准则 #### 一、书籍概述与核心价值 《The Clean Coder: A Code of Conduct for Professional Programmers》是Robert C. Martin(通常被称为“Uncle Bob”)撰写的一本...
《Clean Coder》这本书是软件开发领域非常著名的一本指南,由Robert C. Martin(也被称为“Uncle Bob”)所著。它不仅是一本关于编程技巧的书,更是一本关于软件开发实践、项目管理以及程序员职业道德的综合性读物。...
Resume template for Coder 适合程序员的简历模板Resume template for Coder 适合程序员的简历模板Resume template for Coder 适合程序员的简历模板Resume template for Coder 适合程序员的简历模板Resume template ...
书中不仅讨论了代码质量和测试驱动开发(TDD)与验收测试驱动开发(ATDD),而且深入探讨了作为一个专业程序员所应具备的素质和行为准则。 首先,书中提到了对于职业程序员在与管理层互动方面的要求。这意味着...
The Busy Coder's Guide to Android Development Android开发经典图书, 最新版8.1 epub格式,pdf太大了
The Busy Coder's Guide to Android Development 8.9 - 2017.mobi kindle 可以用
For those of you who have read previous editions of this book, here are some of the highlights of what is new in the prose in Version 8.12. This update: • Adds more to the Android P coverage, ...
Programmers who endure and succeed amidst swirling uncertainty and nonstop pressure share a common attribute: They care deeply about the practice of creating software. They treat it as a craft. They ...
Java程序员在其职业生涯中通常会经历三个关键阶段,每个阶段都有其特定的学习目标和发展重点。 **第一阶段:初入职场的三年** 在这个阶段,新晋程序员从理论知识转向实践,掌握团队合作、项目管理工具(如Git)、...
The Busy Coder's Guide to Android Development: Version 8.2 Supports Through Android 7.1 2017 | English | ASIN: B06Y4TCV7F | 756 pages | PDF + EPUB (conv) | 63 Mb Do you want current information about...
Mark L. Murphy - The Busy Coder's Guide to Android Development 8.11 - 2018.pdf,pdf 版资料,配套还有apk应用已经kindle的其它格式equb等,请看我上传的资源,方便大家国内下载。
### 修炼一名程序员的职业水准 #### 一、掌握基础知识:十六年寒窗的持续积累 在成为一名具有较高职业水准的程序员之前,扎实的基础知识是非常重要的。对于软件专业的本科学子来说,从7岁开始,经过长达16年的学习...
《The Coder’s Apprentice: Learning Programming with Python 3》是Pieter Spronck撰写的一本关于Python编程语言的学习书籍。这本书主要面向初学者,用Python 3语言来教授编程基础。Pieter Spronck是这本书的作者...
Java程序员的职业生涯通常可以分为三个关键阶段,每个阶段都有其特定的学习目标和职业发展重点。 第一阶段:初入职场的三年 在这个阶段,新晋Java程序员从理论走向实践,从大学课本上的知识过渡到真实的企业级开发...
“我爱程序员”和52coder.net这两个标签则代表了一个活跃的社区和学习平台。我爱程序员论坛聚集了大量的开发者,他们分享经验、讨论技术问题,是学习和提升自我技能的好去处。52coder.net网站提供了丰富的学习资源和...
Java 程序员职业生涯总结与规划 本资源是 Java 程序员的职业生涯总结与规划,作者分享了自己作为 Java 程序员的职业生涯经历,从面试到职业规划,再到技术成长,希望对其他 Java 程序员有所帮助。 一、面试经验 ...
The Busy Coder's Guide to Android Development Android开发经典图书, 最新版8.1 mobi格式