《程序员修炼之道》之前言

一、是什么造就了务实的程序员

  • 早期的采纳者/快速的适配者;
  • 好奇;
  • 批判性的思考者;
  • 现实主义;
  • 多面手。

1.早期的采纳者/快速的适配者

你对技术和技巧有一种直觉,喜欢尝试。当接触新东西时,你可以很快地掌握它们,并把它们与其他的知识结合起来。你的信心来自经验。

2.好奇

你倾向于问问题。这真不错-你怎样做到的?你对那个库有意见吗?总在听人说起的量子计算到底是什么?符号链接是怎么实现的?你热衷于收集各种细微的事实,坚信它们会影响自己多年后的决策。

3.批判性的思考者

你在没有得到证实前很少接受既定的现实。当同事们说”因为就该这么做”,或者供应商承诺会解决所有的问题时,你会闻到挑战的味道。

4.现实主义

你试图理解所面临的每个问题的本质。这种现实主义让你对事情有多困难、需要用多长时间有一个很好的感知。一个过程应该很难,或是需要点时间才能完成,对这些的深刻理解,给了你闻到挑战的味道。

5.多面手

你努力熟悉各种技术和环境,并努力跟上新的进展。虽然目前的工作可能要求你在某个专门领域成为行家,但你总是能够进入新的领域,迎接新的挑战。

我的思考:
结合我自身职业经历,这五年来,我身上或多或少也体现上面的五个特征。因为我非常喜欢技术,特别是喜欢尝试新的技术、新的架构模式、新的设计理念等等,但这建立在我已经拥有对应工作经验的前提下,如果没有相应的经验,我很恐惧,因为恐惧来源于未知,特别是刚工作的那一年,不仅仅恐惧生存的问题,也恐惧发展的问题。但当我有了工作经验后,我不断尝试,例如在Java领域内,基于Java的分布式微服务构建等。工作有五年多时间了,我至今仍然认为好奇非常重要,这个重要体现在学习或解决实际问题中不断提问(多问几个为什么)让自己对技术或实际的问题理解更深从而游刃有余。关于批判性的思考者,《黑客与画家》这本书给了我一些启迪,写下了这篇文章黑客价值观的思考与探索,在我看来,作为一名技术开发者,在做相关的设计如架构设计、数据库设计等等,在自己深入理解的前提下,也要多多询问团队中经验丰富的成员或召集团队大家一起讨论,这有助于让设计更完善更具有落地成功率,同样当领导提出问题的解决方案时,不应盲目执行,一定要深刻理解问题,然后再执行,或者是如果领导的解决问题方案不是特别恰当,应当有理有据的提出自己的看法。再说到现实主义,特别是当产品发布的时间越来越近的时候,这时有一个非常难的功能需要实现,实现的方案有两个,一个是简单,一个是复杂,简单的话会使你代码非常冗余、扩展性非常低、性能也不那么好,复杂的话代码可读性强、高内聚低耦合且性能优,简单方案所花时间短,而复杂的方案则所花时间非常长,这时为了保障产品发布的大局,只能采用简单方案,因为产品发布关系公司的利益,特别是对于创业公司而言,第一个MVP特别重要。最后关于多面手,我做过运维、前端开发、后端开发、测试、项目实施、架构师(半个架构师)等职责,多面手的一个好处让我对产品开发流程有一个全局的视野,同样也有助于我跨部门沟通和快速定位问题和解决问题,但任何事情有利也有弊,什么都会,意味着什么都不精,后期很容易被卡脖子。

二、两个提示

1.关注你的技艺

我们觉得,如果你不关心怎么把软件开发好,那么软件开发领域再也没什么好谈的事情。

我的思考:
作为一名软件开发工程师,虽然说不同的公司,不同的业务,不同的产品,但有一点非常重要,那就是自身的技术能力,技术能力主要体现为如下几点?

  • 发现问题、定位问题、解决问题的能力;
  • 理解业务,基于业务进行相应的设计能力;
  • 针对实际业务场景,使用对应的技术实现能力;
  • 与人沟通,部门或跨部门协作的能力;
  • 自我驱动和自我管理的能力;
  • 不断从工作中或业余时间中学习的能力。

上述这六点,都是技术能力的体现,无论在大家公司都是可复用、可持续的。我们在实际工作中,自己一定要重视上面六个方面,并想方设法提高它们,千万不能当一天和尚撞一天钟,否则到头来后果很严重。

2.思考!思考你的工作

为了成为一名务实的程序员,我们要求你在做事的时候,思考一下自己正在做什么。这不是对当前实践做的一次性审计-而是对每天里每一个项目所做的每一个决定进行的批判性评估。不要用自动辅助驾驶系统偷懒,而是要不断地思考,即时地批判自己的工作。IBM公司的座右铭”思考”,实属每个务实程序员的真言。

我的思考:
在阅读上面这句话的时候,我想到了教育SaaS公司的技术经理一次开会对我们说的一句话,这句话我至今印象深刻,那就是在自己所负责的工作职责内,一定要是那个职责范围内的权威,如果你不是的话,那么你就可以离开这个团队了。技术经理说这句话的背景是,大家对于产品经理提出需求很少有人去质疑的,例如反驳说你的设计不是合理并给出恰当的理由,以至于那段时间做虚拟货币相关的业务时,错误预估该业务从设计到实现的难度,原本的两周发版一次,因为那一次,耽误了整整一个月之久。那一次给我们团队每个人都上了印象很深的一堂课。我在2020年国庆期间写下了八个思考,其中就有关于对工作上的思考,文章名为2020年的一些思考和总结,读者朋友可以读一读。
工作中一定要有自己的主见(要有自己的思考),对于合理的决策,坚决执行,对于不合理的决策,给出意见,进行反馈,在自己所负责的职责范围内,一定要做最权威的那个人。

三、务实的个体,大型的团队

有些人认为在大型团队或复杂的项目中没有个性的空间。”软件是一门工程学科,”他们说,”如果团队成员个体自行其是,软件就会崩溃。”
我们强烈反对这种看法。

我的思考:
创新来源于独特,也可以理解为个性化。如果团队总是大家埋头苦干,守着自己一亩三分地,按时出活,到点下班,遇到难题很难定位就重启,遇到重复工作不思考如何自动化解放自己而是偷懒式的采用CV大法(复制黏贴之类的),那么长此以往,这个团队是没有活力的,也很难打大仗、打硬仗。我认为个性化的前提不能以牺牲公司及其部门团队的利益,否则那就是团队里的蛀虫或害虫了。总而言之,我是很赞同团队成员的个性化,因为往往个性化能产生创新,创新往往能推动生产力的提高,生存力的提高最终会使公司及团队整体受益。

四、这是一个连续的过程

一则小故事:
一位游客在参观英格兰伊顿公学时,询问园丁是如何把草坪修剪得如此完美得。”那很简单,”园丁回答说,”你只要每天早起拂去露水,隔天修剪一次,一周再滚压一次就行了”。”就这些吗?”游客问。”就这些,”园丁回答,”这样做上五百年,你也会有一片漂亮的草坪。”

伟大的草坪需要每天的点滴护理,伟大的程序员也是如此。

我的思考:
过去我写了很多博客系统或者学习很多技术框架或编程语言,但我本身并未受益太多,反而从某个角度来看,我反受其累。那就是因为我太心急了,总以为事情做完了,我就成长了,非也,例如读技术书,我读完了《Java数据结构与算法》、《架构整洁之道》等这样的书,但我还是所知皮毛,原因在于任何的事情都是一个循序渐进的过程,读书是需要思考的,思考促使你不断提问,提问有助于深入理解,深入理解便是成长收获。
同样在做架构的过程中,架构的演进也是连续的过程,没有一开始就很完美的架构,真正高性能高可用高并发的架构,都是在实际中,一点一滴,慢慢演化的,而非一开始就是如此。

文章目录
  1. 一、是什么造就了务实的程序员
    1. 1.早期的采纳者/快速的适配者
    2. 2.好奇
    3. 3.批判性的思考者
    4. 4.现实主义
    5. 5.多面手
  2. 二、两个提示
    1. 1.关注你的技艺
    2. 2.思考!思考你的工作
  3. 三、务实的个体,大型的团队
  4. 四、这是一个连续的过程