你知道“回车键”究竟回的是哪个车吗?成为专业人士的必修读物

你知道“回车键”究竟回的是哪个车吗?成为专业人士的必修读物

和传统行业(媒体与写作除外)相比,软件行业的作家似乎要多出不少,这可能是因为程序员的本职工作就是敲键盘,因此额外敲出一些字不算难事。但更可能的原因是软件行业在几十年来迅速发展、规范,在短短的时间内完成了许多传统行业需要上百年乃至上千年才能完成的过程,因此在这一过程中可以说的话题就额外多,而程序员作为一种典型的知识工作者,其平均素质也较高,因此更容易整理与表达自己。如今,“软件”行业已经成了一个非常庞大而细分的产业,“程序员”也包含了诸多细致到外界无法区分的类别,但在外界看来,“程序员”仍然是一群沉默寡言、不易理解的家伙。正如Bob大叔在本书中所讲的,提到医生、律师、会计的时候,我们都立即承认其专业性,但面对程序员时,却总是很难将其也归类为这样的“专业人士”之列。而这本《程序员的职业素养》,正是为了讲述如何成为一名“专业人士”而写的。

在我看来,本书的适用范围绝不仅仅适用于程序员,起码在工程、能源这些传统的工业领域,要成为专业人士,这本书都有足够重要的参考价值(当然对程序员来说,书中可以参考的内容会更具体与深入一些)。在软件行业(姑且用此泛泛的名称)发展的几十年来,迅速地完成了从粗放到细致,再到不断迭代改进的阶段,和传统的工业行业相比,这种进步是及其迅速的,也是其内在的特征决定的:一段软件如果不足够规范,就无法通过编译,即使是大小写或者标点符号的错误,都可能引起编译器的迷茫;一段程序如果在逻辑上有一丁点儿疏忽,就有可能将整个系统带入到缺陷的深渊之中……与其他任何类型的工作相比(或许财务工作除外),这种要求都是非常严苛的。当然,工程上的关键环节要求的严苛程度及其后果不会比软件行业低,但是并没有到对每一个从业人员的每一个操作步骤都严苛到如此吹毛求疵的程度。软件行业的发展与规范也正是因为这些要求才形成的,而工程行业由于尺度原因则无论怎样推行项目管理都无法达到软件行业的标准化程度。在这个意义上,任何关于软件行业与软件从业人员的书籍都值得工业领域其他人员进行学习和研究,以求在自己的领域上获得发展的灵感与参考。

在原则上,这本《程序员的职业素养》中关于职业素养的内容,与行业并无关系,只是作者Robert C Martin(Bob大叔)本职工作是程序员,书中的案例与实践都是程序员行业而已。书中讲到的要素包括,如何理解专业主义;专业精神及有效承诺(如何坚定对无法承诺的事情说“不”与如何做到承诺是专业精神的底线);如何管理工作的状态,调整自我的工作状态、保持节奏以及面对阻塞与困难(向同僚求助是Bob大叔提出的非常有建设性的意见);如何对工作进行预估与测试;如何进行练习(有意识的艰苦练习对成为专业人士是必不可少的);如何管理时间、应对压力、与人协作,成为有凝聚力的团队一份子;专业人士如何经过学徒期与熟练期并成为大师。这些要素对任何一位专业人士而言都是重要的,而书中的内容也非常具有参考价值。是Bob大叔42年程序员生涯的精华总结。

之所以强调本书在工业领域同样非常合适,主要原因当然和我从事与熟悉工程领域有关,但更重要的是软件行业与工业行业在模式上相当接近,彼此有很多相通与值得借鉴之处。尤其在项目实施与工程管理方面,传统工业有必要向软件行业借鉴更多的思路与方法。

在本书的最后一部分,Bob大叔提到了细节。在编程工作中,编码永远不是最重要的内容,细节才是。他提到了编程中最重要的字符\n和\t,前一个代表换行而后一个代表回车。在如今,已经几乎没有人知道这两者的区别了,但是程序中还是会混杂着\n、\n\t以及\t\n这样的内容。究竟是为什么呢?

答案是这是打印机时代的遗物,在打印机时代,当一行文字打印完之后,你必须先换行,才能保证打印头将内容打印到下一行上,然后,你需要回车,因为打印头放在一个被称为“车架”的设备上,回车意思是将车架回到第一个字符的位置,这样你才能开始在下一行开始打印。如今对大部分电脑使用人来说,换行与回车的操作都通过一个“回车键”实现了,我们并不关心“回车”是将什么车回到了哪里。但对程序员来说,这细微的区别也可能导致程序的崩溃,因此,即便是这样的细节,也要引起足够的重视。

以下为书中部分精彩段落:

管理层一遍又一遍地向我们强调这些截止日期的重要性。如果延期一次,政府就会把我们列入当年的黑名单;而如果客户们没有在第一时间和我们签约,他们就会和别的供应商签约。如果拿不到订单,我们就彻底出局了。

职业发展归根结底是自己的事。雇主没有义务确保你在职场能够立于不败之地,也没有义务培训你,送你参加各种会议或者给你买书籍充电。将自己的职业发展完全依赖于雇主的人会很惨。

坚持学习:你会找那些已经不看医学期刊的医生看病吗?你会聘请那些不了解新税法和会计法则的会计吗?你会求助那些不了解当前的法律条文的律师吗?那么雇主们会什么会聘请那些不能与时俱进的开发人员呢?

真正的专业人士往往勤学苦练,以求得自身技术的炉火纯青。只完成日常工作是不足以称为练习的,那只能算是执行性质的操作,而不是练习。练习是指日常工作之外的专门练习技能以自我提升。

专业人士不需要对所有请求都回答“是”。不过,他们应该努力寻找创新的方法,尽可能做到有求必应。当专业人士给出肯定回答时,他们会使用承诺用语,以确保各方能明白无误地理解承诺内容。

专业开发人员的“完成”只有一个含义:完成,就是完成。完成意味着所有代码都写完了,所有测试都通过了,QA和需求方已经认可。这才是完成。

会议的成本实际是很昂贵的,包含了工资、福利、设备等因素。关于会议由两条真理:第一,会议是必须的,第二,会议浪费了大量的时间。专业人员清楚会议的高昂成本,他们同样清楚自己的时间是宝贵的。因此,如果会议没有现实且显著的成效,他们应该主动拒绝。

你应该明白,继续待在会议室里浪费时间,继续参加没有太多意义的会议,是不专业的行为。因为你有责任合理分配老板给你的时间和金钱。

即使有压力,专业开发人员也会冷静果断(想一下手术台上的外科医生)。尽管压力不断增大,他依然会坚守所受的训练和纪律,他知道这些是他赖以战胜由最后期限和承诺所带来的压力感的最好方法。

让你的团队和主管知道你正深陷困境之中。告诉他们你所制定的走出困境的最佳计划。请求他们的支援和指引。

有凝聚力的团队通常有大约12名成员。最多的可以有20人,最少可以只有3人。

除了自身的内驱力和资深导师的有效辅导外,没有东西能将一名年轻的软件开发人员更快地提升为敏捷高效的专业人士。

专业程序员最糟糕的表现是两耳不闻窗外事,只顾一头将自己埋在技术堆里,甚至连公司业务火烧眉毛行将崩溃也不闻不问。你的工作职责是让业务免于陷入困顿,让公司可以长久发展下去。因此,专业程序员会去理解义务……简而言之,他们会将注意力放在如何与业务同舟共济上。

作者
魏智勇(John)
加入讨论

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据

魏智勇(John)

站长,80后,创业者,擅长工业自动化与信息化技术,熟悉各种PLC,组态软件,熟悉计算机技术,熟悉LabVIEW、C,C#,JavaScript程序设计技术。