代码整洁之道
简介:
本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。
本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。
第十四章 辅导、学徒期与技艺
计算机科班毕业生的质量一直令我颇感失望。究其原因,并不是这些毕业生不够聪明或缺乏天分,而是由于大学并没有教授真正的编程之道。
14.1 失败的学位
我认同在大学里是有可能获得良好教育的,但是我也认为,在大学里完全也可以蒙混过关,混得一纸文凭,其实什么都不懂。
那些符合要求的毕业生有个共同点:他们几乎都在进入大学之前就已经自学编程,并且在大学里依然保持自学的习惯。
而且还有另外一个问题。即使是最好的计算机科学学位教学计划,通常也不足以帮助年轻毕业生充分准备好应付工作后遇到的挑战。在这里,我并不是要控诉教学计划里的那些课程。在学校中所学的内容和在工作中发现的实际需要,这两者之间通常会有巨大的差异。
14.2 辅导
在第一个案例中,我通过一本精心编写的手册向作者学习。
在第二个案例中,我通过观察他人工作来学习,尽管他们对我视若不见。在这两个案例中,我所获得的知识虽然基础但是意义深远。
没人帮助我理解真正专业的程序员是怎样的,也没有什么专门的人教我该如何行动以及做什么事情是有价值的。我必须自己摸爬滚打,自己教自己,而这绝非易事。
我最终挺过来了,而且也取得了成功。但是,这个过程本来可以走得更好。如果当时我有一个真正的导师,能够深入浅出地指导我跨过其中的沟沟壑壑,那我的路途就要平坦很多。我可以在给他打下手完成一些小任务时观察他的工作方式。他会对我的工作进行审查,指导我的早期工作。他会专门教导我建立正确的价值观和反思内省的习惯。这类角色,你可以称他为“老师”“大师”或是“导师”。
14.3 学徒期
但是,在软件开发行业中已经形成一种观点,认为程序员就是程序员,一旦毕业后就肯定会编程。事实上,一些公司在雇用一些刚从学校里出来的毛头小孩后,就会立马将他们组织成“团队”,把他们扔到关键系统的开发中,类似这样的情形屡见不鲜。这真是荒唐透顶!
大师:
- 他们是那些已经领导过多个重要软件项目的程序员。一般说来,他们已经拥有10年以上的从业经验,曾在多个不同类型的系统、语言和操作系统上工作过。
- 他们懂得如何领导和协调多个团队,他们是熟练的设计师和架构师,能够游刃有余地编程。
- 组织曾为他们提供管理职位,但是他们不是拒绝就是在接受管理职位后又回去了,或是将管理职位和主要承担的技术角色整合在了一起。
- 他们通过阅读、研究、练习、实践和教学来维持自身的技术水平。公司会把项目在技术方面的主要职责交由大师承担。想象一下,大师就像“Scotty[5]”。
熟练工:
- 他们还处在受训期中,不过已能胜任工作,而且精力充沛。
- 他们彼此间的经验水平差异可能很大,但是平均经验水平大约在5年左右。
- 在职业生涯的当前阶段,他们将会学习如何在团队中卓越工作和成为团队的领导者。
- 他们对当前的技术都十分了解,但是对其他许多系统尚缺乏经验。
- 他们一般只了解一种语言、一个系统、一种平台,但是他们正在不断学习的过程中。
- 他们之上是成长十分迅速的大师,之下则是刚刚进来不久的学徒工。
- 熟练工在大师或者其他资深熟练工的督导下工作。很少会让资历尚浅的熟练工独立工作。他们在严格的督导下进行工作。他们的代码会被人仔细复查。
- 随着经验不断积累,他们的自主能力也会不断增长。对其直接介入指导的地方也会变得越来越少,指导内容也会越来越趋向那些微妙之处。最终,督导活动会转为以“同行评审”的方式进行。
学徒/实习生:
- 毕业生会从学徒这一步开始他们的职业生涯。学徒没有“自治权”,他们需要在熟练工的紧密督导下工作。
- 在一开始,他们不会单独承接任何任务,而只能作为助手为熟练工打下手。在这个阶段,应该十分密集地进行结对编程。这一时期是学习纪律并强化各项实践的阶段。各项价值观的基础也都是在这个阶段塑造成型。
- 熟练工会担任他们的导师。他们要确保学徒们能够了解设计原则、设计模式、各种纪律和固定的操作环节。熟练工会向他们传授TDD、重构、估算等各种技艺。他们会为学徒安排阅读、练习和实践任务,还会检查学徒们的任务进展情况。
- 学徒期至少应持续一年。
- 期满之时,如果熟练工愿意接受学徒上升到他们这个层级,就会把学徒推荐给大师们。大师们则通过面谈和水平检测,对学徒们进行考核检验。如果能够取得大师们的认可,那么学徒便可晋升为熟练工。
现实情况:
- 在大多数情况下几乎没有技术层面的督导!在大多数公司中,根本就不存在技术督导这一回事。程序员的水平是否能够提升和最终是否能够得到职位晋升,全视乎程序员自己的表现。
- 我们今天的做法和我所提倡的理想化的学徒制程序,这两者之间的主要差异在于技术方面的传授、培训、督导和检查。
- 观念上最大的差别在于,专业主义价值观和技术敏锐度需要进行不断的传授、培育、滋养和文火慢炖,直至其完全渗入文化当中。
- 我们当前的做法之所以传承无力,主要是因为其中缺失了资深人士辅导新人向其传授技艺的环节。
14.4技艺
技艺是工匠所持的精神状态。技艺的“模因”(meme[6])中包含着价值观、原则、技术、态度和正见。
技艺模因经由口口相传和手手相承而来,需要由资深人士向年轻学徒殷勤传授,然后再在学徒之间相互传播。
资深人士会观察年轻学徒的学习过程,然后不断反思和改进传授之道。技艺模因宛如一种“传染病”,一种“精神病毒”。通过观察其他人的工作,让模因落地生根,你也会“感染”上技术模因。
觉者:
你无法说服别人成为一名匠者,你无法说服他们去接受技艺模因。
口舌之争并无益处,数据亦无足轻重,案例研究也无法说明什么。接受技艺模因并不是一种理性决策的过程,也非感情用事便可奏效。这与人的“自性”(humanthing)紧密相关。
那么该如何让人们接受技艺模因呢?前面我曾说过,只要技艺模因可以被人观察到,它便具有传染性。因此,只需让技艺模因可以被他人观察到即可。你自己首先要成为表率。你自己首先要成为能工巧匠,向人们展示你的技艺。然后,将剩余的事情交给技艺模因的自然运行之道即可。
14.5 结论
学校能够传授的是计算机编程的理论。但是学校并不会也无法传授作为一名编程匠者所需掌握的原则、实践和技能。这些东西只有经由师徒个体间多年的细心监督和辅导才能获得。
软件行业中像我们这样的一批人必须要面对这一事实,即指引下一代软件开发人员成熟起来的重任无法寄希望于大学教育,现在这个重任已经落到了我们肩上。建立一种包含学徒期、实习期和长期指引的机制已是迫在眉睫。
---meme 模因:
模因,meme,这一词最早出现在英国牛津大学著名动物学家和行为生态学家理查德·道金斯于1976年出版的《自私的基因》一书中。道金斯杜撰meme一词的主要目的是为了说明文化进化的规律。在他看来,人类文化进化的基本单位是meme。meme在很大程度上指的是“以非遗传方式(如模仿)传递的行为或文化属性”。任何一个信息,只要它能够通过广义上称为“模仿”的过程而被复制,它就可以称为meme。也就是说通过模仿获得并加以传播的任何想法、说法或做法都可以算作是meme,如“曲调旋律、想法思潮、时髦用语、时尚服饰、陶器制作或搭建拱门的方法”等等。如今,研究meme及其社会文化影响的学科被称为Memetics。在本文中,将meme译为“模因”。道金斯根据gene杜撰出了meme,而“模因”一词则是模仿了“基因”一词翻译而成的。——译者注