程序猿职业发展之路

引言: 之前这个文章发布在了我的头条号"程序加油站"上的文章,这里也同步发布在这里,希望对大家有所裨益,有所思考,善莫大焉。

    这几日有同事与我聊起了未来职业规划之路,对于未来的发展略感迷茫,未来不知方向如何,这里就把这篇文字来简述一下个人的若干理解,以资有所帮助。 在这里我把程序员或者软件工程师的职业生涯按照年限分为以下若干个阶段:

  • 1~3年

    这个阶段是起步阶段,离开学校,从0开始,一切包括技术技能和职场经验都需要从新学习;这个时候非常重要的是挑选一个好的mentor或者老板,他或者是你的团队领导,亦可是比你资格老经验丰富的老程序员;他所带给你的东西将深深影响你之后的发展之路和技术习惯。所以一定要慎重挑选团队,尤其是带你的那个mentor。

    这个阶段主要潜心熟悉业务,掌握技术,将工作中用到的技术点学好用好,做到用过的技术都是熟悉的;如果能够做到知其然还要知其所以然,将是一个非常大的加分项。

    如果你足够幸运的话,或许正好碰到一个项目启动,从零参加一个项目,参与到其中的主要的技术决策点、技术讨论、团队的协作开放模式、沟通方式、架构设计等,都对你未来的发展裨益甚大。这个机会或许有,但是能从中收获多少,因人而异。

    此时的角色为新手,初级程序员。

  • 3~5年

    这个阶段,基础的技术素质已经具备,具有若干或者不多的项目经验,曾经有一个或者几个公司团队的工作经历,此时将面临提升的问题,如何提升自己,将所用到的技术能够深入的理解相对于理解技术的使用,变得更为重要;知其然还要知其所以然。

    在团队中处于干活的主力,此时需要注意学习好的工作习惯、沟通方式;在团队技术讨论或者大的技术决策中,除了了解到其中的技术讨论结果之外,还需要认真思考为什么选择这个技术方案,而非另外一个技术方案,其中的利弊会是什么样子,做出的技术决策最终驱动力来自哪里;对于其中不明白的地方,可以和其中的当事人多讨论,可以极大提升自己对于技术的理解和判断能力。

    另外一个重要的学习点是理解项目或者团队的运作方式和工作方式,不同的公司以及团队的风格各异,且与其中的灵魂人物或者负责人息息相关。因为身处其中,故可以近距离观察团队的工作方式,分析其中存在的问题,帮助自己理解项目、团队、协作以及如何解决其中的问题方式。这一点非常重要,团队中的善于学习者将从此被打上团队的烙印,如果是好的做事风格将裨益良多,反之则会走诸多的弯路。

    在这个结束之后,已经建立起了扎实的技术功底和良好的技术分析能力,对于团队化的开放方式具有自己的理解和判断能力。角色为中级程序员。

  • 5~10年

    在这个阶段,如果所处的团队无法提供新的提升以及上升空间,一般可以考虑选择新的机会。这个阶段是程序员的黄金阶段,已经具备了独当一面的能力,可以实现从想法到落地的整个过程,角色为高级程序员。

    在项目中承担主力实施者,可以具备挑选技术方案和评估技术架构的能力;关注的问题将从之前的实现功能转化为挑选一种最优的技术方案来实现,考虑方案的技术特性以及系统中的诸多限制因素,综合考虑,选定最优的方案;可扩展性、可维护性、团队的驾驭能力、时间周期、性能要求、变更频次等等都将成为影响技术方案选择的因素;某种意义上来讲,技术方案的确定其实是一个对比分析和选择的过程,平衡各个方面的影响因素,做出最优化的选择。

    对于技术保持敏感度,虽然一定有若干的技术,没有机会了解;但基于技术的原理来分析,通过快速的学习,是可以做出正确的判断选择,这个就是所谓的技术感或者潜质;每种技术都有其适用的场景,有其面临的问题和不足,结合业务系统的场景,做出最为合理的判断选择。

    对于项目中出现的各类技术难题和诡异问题,都是可以基于自身的技术理解和逻辑推理判断来进行快速定位分析的,这个技能是必须具备的,是之前阶段积累的各种技能经验的综合应用;在真实的项目中,总是会有相当多诡异或者偶尔出现的问题折磨着技术团队,能解决此类问题,会成为程序员能否更上一层楼的标杆卡尺,能胜任此类问题,建议考虑向架构师方向发展;反之,可以考虑走项目经理,走综合素质的方向。

10年以上

   此时角色是项目的架构师或者核心负责人;将承担着整个项目团队的兴衰成败的关键;这里主要是讨论有追求的团队,希望做出点拿得出手的项目的团队或者项目,并给团队成员带来有价值的成长经验。其他不在讨论之列。

   平衡的艺术;需求、技术架构、可维护性、时间周期是其中冲突最为严重的若干因素,平衡就是在取其中的折中和妥协;完全偏向任何一方都是非常危险的,由需求方决定技术方案更是为整个项目埋下深深的技术隐患和不确定性;所以,坚持原则,合理平衡会是此时对于程序员的巨大考验。

   团队培养的技能。此时身负培养团队的责任,手下有若干号人在相当长的时间之内,和你一起工作;除了保障项目的顺利实施,还需要让技术团队在这段一起工作的过程中,都有所提升,在未来会有更好的发展机会。如有可能,可与团队的成员进行一一沟通,基于自身的经验为团队成员设计不同的职业目标提供建议;通过不同的方式,比如技术分享、stand-up的技术直接讨论等,营造开放自由的学习氛围,让团队从中受益。这样才是一个合格的架构师和团队领导。

    勇气与信念;在团队进行项目的开发和维护过程中,一定会有各种冲突和矛盾,作为项目的核心和负责人,请注意保护团队成员;如果他们有做得不够好的地方,请提醒他们。如果他们犯了错误或者与其他相关方发生冲突,请站在他们前面,分析问题解决问题,帮助他们共度难关,让他们从冲突和错误中学习和成长;士为知己者死,团队用命,最大限度激发团队的荣誉感、向心力,才是凝聚之道,为团队文化之精髓。最为团队的架构师或者核心负责人,要有勇气和信念,有所坚持有所舍弃,知道什么是错的东西,什么是正确的做事方式,在无法改变大的环境情况下,尽力维持,保证团队的稳定与战斗力。

    过了10年,更多的时候是选择平台和未来发展的立足之地;也可以慢慢学习如何做一些自己感兴趣的事情,如果有机会参与到创业中也是不错的尝试。总之在具备的经验、能力和团队领导力之后,可以有更多的选择和机会。

另外还有几点日常的经验可以与大家分享:

  • 多阅读

    阅读各类技术书籍,尤其是业界大牛的图书会让视野打开,关于技术以及技术背后的内容会非常有价值;我一般每隔一段时间都会逛各大网上书店,趁起打折之际,买回来细细阅读,有基本我甚至阅读了几遍,方有所收获。比如关于java的,我推荐大家可以买葛一鸣的书来看,属于比较高级的,但是写的很好;关于服务化,推荐大家看看李林峰的书,还有李智慧的《大型网站技术架构》等都是非常优秀的内容。

  • 和优秀的人多讨论

    个人非常推崇此方式,在身边和团队中,多参与到各类技术讨论中,多思考多分析;大胆假设小心求证,从不同的人身上了解到不同的技术理解,帮助你在有限的时间内,拓宽对各类技术和解决问题的方式方法的理解;老子有云:法无定法,水无常态;在与各类的讨论,收获将是非常有价值的。把时间浪费在有价值的事情,和优秀的人多讨论,远离低效或者所谓很Low的人。

  • 学习写作,把自己的理解融会贯通记录下来

    写作是技术表达的一种,在写作的过程中,会强迫自己梳理出清晰简介的思路出来;我在写文章的过程,一般不会只写结果或者结论,而是以提出问题,分析问题,解决问题,并针对整个过程中的思路进行重新反思,从而提出更为高效的解决思路;在我的理解中,最终的那个结论并不是最重要的,而针对陌生问题的解决思路、方式方法才是最为重要的;授人以鱼不如,授人以渔,我是非常认同的。

  • 多参加各类技术论坛以及学习各类的网络公开课

    互联网时代,资源极大丰富;优秀的公开课一般都是国外大学的高质量课程,英文中字,略有一定的难度;另外也可以考虑参加一些收费的培训,因人而异;拿笔者个人的体验来说,在某个针对大数据的平台上,在3年的时间里,一共学习了19门课程;在其他网络平台的免费公开课不算。

在高中之时,路遥的书非常的印象深刻,这里引用他在人生中的一段话来结束本文吧:

    " 人生的道路虽然漫长,但紧要处常常只有几步,特别是当人年轻的时候。没有一个人的生活道路是笔直的,没有岔道的。有些岔道口,
譬如政治上的岔道口,事业上的岔道口,个人生活上岔道口,你走错一步,可以影响人生的一个时期,也可以影响一生。“

      程序猿职业发展之路_第1张图片

以上仅仅都是个人的若干体会和经验,如果不足之处,还请大家多多谅解。

你可能感兴趣的:(管理思辨)