美文网首页读书笔记
程序员的成长课

程序员的成长课

作者: Einstellung | 来源:发表于2018-08-22 11:31 被阅读239次


    这是我看的第一本关于程序员的职业规划方面的书。书中谈技术转型和如何持续在做到技术精进方面比较少。反倒是说管理的事情比较多。到什么山上唱什么歌。对于小白的我来说,在管理方面有一些不小的收获,但是目前不少东西还暂时用不到。

    在技术上持续精进的话,养成好习惯十分重要,我从今天开始尝试他在文中说的4个习惯(特别是三个问题),看看效果如何。


    第2章 如何在技术上持续精进

    一门编程语言、一个技术框架,从本身的知识层面也会有深浅,在学习时,也存在先后顺序的一般性规律。从这个角度讲,技术本身的深浅层次也可以用于个人对标管理。

    一般来讲,学习一门技术时,有三个阶段

    第1阶段,基础开发,了解API,基于API开发

    第2阶段,熟悉内核及原理,主要是了解框架的设计原理,阅读源码,洞悉内在机理。

    第3阶段,优化框架,主要是针对框架已有功能的不足进行完善、优化,或者使用框架提供的机制扩展框架功能,或者对框架进行定制,让它适合特定情形。

    在技术领域内的成长,基本都会经历三个阶段

    ● 第一阶段,专项能力的提升,这是初级阶段,你为了做事情,必须先具备某些基础能力,比如你要学会Python、Tensorflow等等

    ● 第二阶段,技能体系的构建,这是中级阶段,你拥有了一组技能,围绕某个方向构建了自己的知识图谱,能够用自己的方式来解决问题。比如在C++这个方向,你用C++、Qt、OpenGL等组成了自己的知识图谱,可以胜任流媒体方面的产品开发。

    ● 第三阶段,融合创新,这是高手阶段,你具备了丰富的实践经验,具备了T型知识结构,形成了自己的思维框架和解决问题的框架,能够融合不同领域的知识,组合各种资源,创造性的解决各种问题。此时你跳出了具体的技术束缚,站在了更高的层面。

    对于开发者来讲,若拥有一年左右经验,多数人处于第一阶段——专项能力提升阶段,熟悉某种编程语言,可以完成别人安排的一个小模块的开发。

    若拥有三年以上的经验,就应该进入到第二阶段了。当你在某个技术方向上构建了技能体系后,就可以完成相对复杂的工作了,可以独立做一些事情,甚至可以辅导初级开发者来完成一些工作了。这时候,你往往是团队里富有生产力的成员了。

    若有五年以上的经验,应该进入融合创新阶段,能够独当一面,可以独立完成特定项目的评估、设计、技术方案选择等事情。此时你往往是团队里的技术管理者,具有比较大的影响力。

    加入一个开发者干上八年十年,还到不了第3阶段,可能就需要考虑通过其他方式提升自己的竞争力,保住自己在团队中的位置。

    精进的4个习惯

    对标管理

    三个问题(纸质的笔记本更好,比电子的更有成就感)

    1. 我昨天完成了什么

    2. 我遇到了哪些问题

    3. 我今天做什么(最好不要超过3件事)

    4. 专门用一个笔记本记录自己每天完成的事情(称之为“成功日记”)

    刻意练习

    超越技术层面的核心竞争力

    在融合创新阶段,你建立起了可迁移的核心竞争力,使得自己拥有了超越技术层面的,快速解决问题的能力,即便到了一个陌生的领域、原来的技术积累不能直接应用,也可以应用自己的思维、想象力、构架设计、分析、解决问题的框架等,快速的厘清问题,找到解决问题的关键。此时你已经能够从容应对日新月异的技术变迁和各行各业加速融合的现状,因为你有了驾驭技术的“内功”。

    放在开发者身上,自身学习、逻辑思维、数据分析、价值判断、优先级排序、框架设计、想象力等能力,就是应用流程方面的能力。应用流程这类能力,是可迁移的能力,是核心竞争力。有了这些,你才能快速的学习新知识新技能,才能更好地整合自己的知识、技能来解决实际问题。

    软件开发有两个层次:体力化的代码打字(编码)与思考层面的创造。抱着“软件开发是吃青春饭”这一观念的人,只看到软件开发这一工作中的“体力化代码打字(编码)”这一初级层面,误以为程序员只能靠拼时间和体力来建立竞争优势,但实际上,体力化的优势,在偏重信息处理的工作中,永远都不是解决问题的关键,都不能带来竞争优势。

    决定程序员是否具有优势的,是应用流程方面的能力,即逻辑思维能力、思考能力、想象力、构架设计、解决问题的框架、快速学习、自我管理、创新与创造等。而这些能力,都需要时间的沉淀和项目的历练。

    第三章:成为技术管理者

    作为开发者,想要转管理岗位,如果你的技术能力卓越,远超他人,那么你有极大可能通过“技而优则管”这种方式自然而然地走到管理岗位;如果你的技术能力一般,就必须努力通过别的方式让别人(尤其是领导)意识到你是有管理能力的,这种方式就是跳出职责范围去打杂、去为领导分担他不愿做又必须完成的工作。

    在这里要特别提醒一点:营销展示。因为很多人还秉持着这样一种观点:只要我努力、认真工作,总有一天领导会发现我,给我想要的机会。但实际上,除非你的优秀超出别人10倍,否则别人很难主动跑过来发现你的特别之处并把机会送给你。

    所以我们不但要有效工作,做出成绩,还要展示成绩给别人看。营销展示的方式有很多,比如周报、月报,可以让上司知道你都做了什么、取得了什么成绩;比如产品功能演示,在相关干系人了解产品的同时,也可以展示你的演说、表达等能力;比如技术分享,可以让别你知道你在某个方向上有丰富的积累。

    要在工作中发现管理相关的机会,关键在于你要跳出工作内容和岗位职责的范围,放眼全局来思考。分三个方面,第一方面是产品或项目本身,多想想自己要做的软件到底要解决什么问题,给用户带来什么价值,为什么要做成这个样子,它是怎么被用户使用的;另一方面是工作实践,思考整个项目,从立项、需求、开发、测试、交付、运维、项目生产工具,分析哪个环节做的不好,哪个环节改善之后效果可以被看见,主动去做这些事情,主动成为衔接不同环节、不同部门的桥梁;第三方面,发现领导的目标是什么,他看重什么,他在为什么困惑,自己能不能帮到他,因为从某种意义上讲,你的工作,就是为了让领导的工作更顺利,你的工作目标,就是实现领导的目标。

    第四章:技术管理新人面临的挑战

    分配工作有三个目标:

    1)每个人都有能力完成他所分配的工作任务。

    2)每个人的任务都有足够的挑战性。

    3)每个人都尽可能的投入到工作中。

    要达到这些目标,必须每个人都参与到工作任务的分配过程中。

    每个人最了解自己所拥有的能力,最了解哪种工作最能激发自己的工作积极性。如果管理者在分配任务时能征求每个人的意见,那么任务就有可能到达最适合的那个人那里。

    为确保需要完成的工作都能得到完成,管理者可以先把所有的任务列出来,然后进行分配,确保每个任务都有人负责。

    上面的两点结合,就会形成“每个人从任务池中挑选适合自己的、自己想做的任务”的氛围,而团队的成员之间也会考虑其他人,考虑每个任务都有人负责的原则,不会只挑自己想做的,还会妥协,接受一些自己不那么想做的。

    管理者的职责有两块:完成工作,培养下属。假如一个管理者只愿意驱动下属完成工作,而不愿意给下属成长的机会,那么他就不是一个合理的管理者,最终也会承受这样做的恶果:团队成员整体业务能力停滞不前、人心涣散、没有协力。

    所以,为了改善工作分配模式,管理者必须要有责任感并能承受压力,而这样做绝对是值得的:一旦实践了这样的任务分配过程,每个员工的意见都得到了尊重,每个员工都有了选择的机会,每个员工都有可能从事有挑战性的工作,每个员工都有可能做自己想要的方向上获得成长,那么整个团队的凝聚力和战斗力就会越来越强。

    相关文章

      网友评论

        本文标题:程序员的成长课

        本文链接:https://www.haomeiwen.com/subject/ihzqmftx.html