首先介绍下DK-effiect

image.png

x轴:智慧的高低,从小白到大师
y轴:自信程度,由低到高

大概是人的自信程度会随着智慧的积累而变化。
图片说明比较清楚。可以从这篇文章中的TED视频详细了解 点击这

程序员的技术成长之路

第一阶段 愚昧之山,不知道自己不知道

801581838696

初入行,对一切技术充满了新鲜感,随着996的加班,积累了一点经验。忽然发现写程序不过如此,CRUD而已。此时自信心爆棚,感觉自己无所不能。是的,我也经历过这个阶段,感觉可以迎娶白富美,走上人生巅峰。回忆下这个时候自己会了啥:

  • 自以为会了前端(HTML+CSS,所有的布局都是DIV,敢想?)
  • 自以为自己懂了数据库(四大范式手到擒来,各种索引也略知一二)
  • 自以为懂了DDD(18层分层如数家珍)
  • 还有很多自以为掌握的技能。

这个阶段是比较危险的阶段,需要尽快度过。方法就是保持一颗谦逊的心,并保持学习。随着知识的积累,你会发现自己的无知,并快速进入下一阶段。如果这个阶段你不去持续学习,便会深陷新手的泥潭之中,这种感觉很high,几年后你会被淘汰,企业不需要资深新手。这样的人,现实生活中很多,我们平时说的用一年的工作经验干了五年十年,就是这类人,我也有幸见到过很多,希望你不是其中之一。

第二阶段 绝望之谷,知道自己不知道

image.png

通过持续学习和经验的积累,你发现世界很大,人外有人。随着项目的推进,代码规模膨胀了,bug增多了,简单的修改也没有底气了。看了很多别人的代码,看了一些牛x的开源项目。在看看自己写的代码,你绝望了。你觉得自己写的代码就是垃圾,一无是处,甚至怀疑是否选错了行业。公司的开发业务很重,一个功能接着一个功能,你感觉喘不开气,有过想跳槽的想法,甚至有过想换一个行业的想法。恭喜你,你来到了绝望之谷,这是真正的考验,会折磨你很长时间。

如果你真的没有坚持住,换了一家公司,甚至换了一个行业,你会发现DK效应是一样的,从小白到大师的必经之路依然坎坷,没有捷径可以走。
这个阶段你需要问自己个问题:

  • 编程是你的兴趣么?

如果只是谋生的工具,或者你别无所求,其实这个阶段你的技能已经可以满足企业基本的需求,只要在业务领域多加沉淀,企业也需要这样的老黄牛,慢慢的也会度过绝望之谷。编程不是兴趣,仅是个人的选择。不是兴趣,也可以把基本的工作做好,这是职业素养。做一个斜杠青年,也挺好。

如果编程是自己的兴趣,那么恭喜你,这个社会只有很少数的人可以把自己的兴趣和工作结合在一起。这个时候你会不限于上班的八小时,下班时间、周六周日、节假日,都会把心思放在code上。你的梦想是构建一个牛逼的软件,编程是你的兴趣,怎么度过绝望之谷,个人给出一些方法:

  1. 绝望时向公司、上级寻求帮助,公司会给你一些疏导和建议
  2. 梳理工作中用到的知识点,深入的系统的学习

这个时候,不仅要知道各项知识怎么用,更要知道为什么,原理是啥。这些公司没有义务去传授于你,全靠你个人主观能动性。公司付钱买你时间来创造价值,学习提升大部分需要你付出业余时间,周六周日。

这个阶段,快则一两年就可以度过,慢则会折磨很久。最坏的会放弃整个程序的职业生涯。never give up!

系统掌握以下知识也许可以帮你快速从谷底爬起来:

  • 业务层面,熟悉客户业务、学习领域知识
  • 编程语言方面,做到熟练使用,各种特性、注解。
  • 框架层面,做到熟练掌握,各个组件、各个开源项目
  • 数据库层面,熟练使用SQL,并掌握一定的优化技巧
  • 软件工程管理层面,掌握敏捷开发的理论、工具
  • 操作系统层面,熟悉linux的使用,常用命令不用搜索
  • 运维层面,熟练使用docker,docker-compose,ci/cd流程

第三阶段 开悟之坡,知道自己知道

papo

经过前面两关之后,恭喜你,正式入门了!这个时候可以称你为一名软件工程师了。你将在软件的世界里尽情的遨游。你会知道自己知道啥,知道自己不知道啥,同时你是公司坚强的后盾,是左膀右臂。你的上级知道,问题到你为止,你会体会到解决问题的快乐,创造“世界”的成就感。这个时候你最需要的是规划和持续学习。不管是以后要选择走技术专家的岗位,还是走技术管理的岗位,技术必不可少,谁都不想被一个外行领导。
这个时候给自己做好规划,系统的学习,量的积累必然会带来质的变化。

随着年龄的增长,我们开始焦虑,我们需要对自己的工作价值有所思考。面对未来的不确定性,我们如何反脆弱?答案就是成为大半个领域专家。技术的可替代性比较强,十年后,我们无法与年轻一代比脑力和体力。我们能与之相比的只有智慧,智慧是知识加经验的合集,熟悉特定领域知识会极大的增加自身的附加值。在开悟之坡,我们要双管齐下,积累技术和领域知识。

在这个阶段,技术方面可以了解下架构师的工作职责,并为之努力。我简单列一下:

工作职责:

  • 定义和确定公司是用的技术路线与开发平台
  • 定义开发标准、开发流程、测试流程、审核流程
  • 设计系统、框架并根据需求作出决策
  • 检查并审核架构与代码,确保按照标准在实施
  • 对销售提供决策支持

架构师需要的技能:

  • 设计 你需要了解一些业内的最佳实践、需要知道模式与反模式、理解并尝试多种技术栈
  • 决策 你需要制定决策,甚至要指引项目的正确方向。你需要认清自己的实力,不要在自己的能力外做决策,否则公司可能会应为你的决策承受巨大的风险或打击。需要评估多种选择,作出最优决断。
  • 编程 你需要持续提升自己的编程能力,并且不能脱产。否则,你将不能了解开发人员面临的挑战和需求。开发人员将不接受你的说法和决策。
  • 平衡 美好的事务都是有代价的,高质量的代码也是,需要平衡质量和市场需求。需要平衡各个小组之间的冲突,达成一致的战略目标。
  • 咨询、培训 对上,让管理层了解最新的技术动,便于辅助公司决策。对开发,需要有远见,制定中远期计划,给予团队成员指导

技术图谱:
archRoadmap

路漫漫其修远,兮吾将上下而求所!享受这个过程把。

第四阶段 持续平稳的高原,不知道自己知道

image.png

这个阶段,未曾达到,我只能畅想以下。

融会贯通、人剑合一,亦或是剑都是累赘。知识已是自己的一部分,形成自己的体系,随意使用,开宗立派。