---《构建之法》学习笔记5

北上广深真的是技术的宝地吗?


犹记得刚刚参加工作之后,有人邀请我去深圳,说沿海地区是IT行业从业人员的宝地,只有在那里才会学到真正的技术,而且能拿到更高的工资,不管从哪个层面来说,都值得你去看一看。然而当时的我并没有听信他的话,甚至还在想,互联网是平的,只要你愿意学习,哪里都有机会。这样的想法显然是错误的。在长沙这样的内地城市,也许你曾经一度对技术充满了兴趣,但是却不见得有机会让你实践新技术,往往很容易就开始接受公司领导层或前辈们的教导,一切以实现为重,最终把技术这条路给堵死。即使你想奋力一博,也往往年华不再了。

然而,真的只有内地城市才这样吗?那天我跟一位老程序员聊天,他说现在这个时代,技术发展太快了,就算他想学习,也看不到学习的方向,或者静下心来想学习也会被生活中的琐事所耽误。

他说,而且现在的企业对开发者要求也越来越高,不像十多年前他大学毕业后去广州找工作那样,只要你有点开发基础,总能找到工作。公司对你的要求也不高,你代码写得好不好,是不是参考设计原则,都不重要,关键只有六个字,梭代码、梭得快就可以了。
​ 我说在广州不是很不错吗?互联网技术应该也不错啊。
​ 他说,毛线,也只有顶级公司技术才会不错,大部分公司其实跟内地没什么区别。

好吧,我突然想起身边那几位去了北京深圳的朋友,他们也是从事软件开发领域,这几年都相继回到了长沙,我曾经问过他们觉得北上广深技术如何,他们都纷纷表示,也就那样吧,并没有想象中那么好,或者大部分都是吹得好。当然这几位朋友由于各种原因,也未能有幸进去顶级互联网企业,而且最终也未能在技术领域得以进一步精进。

当然也并非绝对,依然有许多人他们带着梦想而去,回到长沙时,已然成为出类拔萃的翘楚,在我把长沙.net社区拉起来之后认识的一些人,深深的感受到他们身上那些与众不同的感觉,显然有别于其他开发者,成为各家企业互相争夺的优质资源。还有许多开发者,他们的职场之路已经一骑绝尘,甩开很多个层次,成为技术世界中的顶级玩家。
​ 是什么决定了这种区别?不得而知。

学不完的技术,哪些是自己的?


然后老程序员继续吐槽:尤其是人年纪大了,就越来越感觉技能脱节了,而且是近几年突然开始的,早几年还能写点移动端多端代码和后端代码,这一两年就开始有点跟不上了,虽然这一两年学了点python和go语言。
​ 我说:那也可以啊,这些语言都是目前最流行的互联网语言,学会了优势明显啊。
​ 他说:虽然学了那么多语言,但是却感觉根本只是一个搬运工,把网上的资料搬运下来,遇到的问题也根本解决不了。
​ 我说:好吧,那大概是学习不得法,或者没有获得积累吧。

其实,我的内心同样没有底气,和他本质上没有任何区别,要说自己在技能上的积累,其实也好不到哪里去。一直在内地城市,我深深的感觉到包括我自己在内,开发者们很容易进入一个职场的误区,即容易成为多面手,而无法在某些领域专精。

由于一些公司对于人才的专业技能没有特别的要求,往往把独当一面当成是基本能力,只要你拥有这样的能力,就会把你往项目上丢,然后就是项目管理,部门管理,然后就与技术脱节了。当然,这些项目看起来也会用到许多不同的技术,但这种技术的应用水平却只是停留在初级水平,遇到问题,通过百度快速解决往往是第一选择,至于下次遇到了同样的问题,你该怎么做?还是继续寻求百度的帮助。为什么出现的技术问题,只要把百度中搜索到的魔法值一设置,答案就迎刃而解?
​ 好吧,大部分这样出来的高级工程师,大概只是CV工程师。(Ctrl+C,Ctrl+V)。

职业规划,如何规划?

​ 是什么原因导致了开发者们,哪怕去了北上广深,也没有成为真正的技术大牛、或者程序员们,学了那么多东西,却依然只知皮毛呢?

从某种意义上来说,也必须承认,许多以外包项目研发的企业,实际上对于软件工程师的职业发展规划根本就是失败的,毕竟让这些非科班出生的企业家、以及一些依托百度搜索、靠掌握CV编程绝技成长起来的高级工程师或TeamLeader来对软件工程师们进行所谓职业规划根本也是不可能的事情,所以从某种层面上来说,需要开发者自己来明白自己的职业发展规划。
​ 在《构建之法》这本书中,有一个章节《软件工程师的成长》专门提到了这个内容。在这个章节中,邹欣老师提到,初级软件工程师应该有以下几种成长:
1、积累软件开发相关的知识、提升技术技能(如对于具体技术的掌握,动手能力)。
2、积累问题领域的知识和经验。
3、对通用的软件设计思想和软件工程思想的理解。
4、提升职业技能(区别于技术技能)(例如自我管理的能力、表达和交流的能力、与人合作的能力)
5、实际成功。应该做出一些能够公开展示的工作成果。

同时,老师也提到了一些职业成长的建议,包括做好自我评估的一些方法,虽然不少开发者做的都是所谓的"CRUD”开发,但并非这种开发方式就是没有技术含量的事情,同样需要一些核心技术和扩展的知识。

例如,一个简单的单表增删改查,看似是满足数据存放到数据库的最简单的操作,每天的重复或许枯燥无味,但是与数据库技术相关的操作、大于大容量数据的数据库操作、并发、备份、以及进一步的关系数据库模型和数据挖掘和商业智能,都是属于可以进一步的扩展能力。

所以一个人的知识成长,如同早年一款流行的策略类游戏《帝国时代》中的知识树,往往都是从最基础的技能出发,推而广之,进一步扩展,最终才能打造出更加完善的知识体系。
​ 而如何才能提高技能?邹老师认为,“答案很简单,通过不断的练习,将低层次的问题都解决,变成不经大脑的自动操作,才有足够的时间和脑力来解决更高层次的问题
”。老师将问题分成3个层次,分别是:低层次问题(变成自动操作)=》容易精通;中间层次的问题(由于需要花一点脑力来解决,所以可以是不断的学习中);而高层次的问题,大部分情况下是无暇顾及、甚至很难遇到很难重现的,所以也很难成为所谓精通。


在工作过程中,尽可能的积累经验,让自己掌握的技术更加纯粹,形成自己的技能,除此之外,我们也可以有一些适当的自学来进一步扩充自己的知识面。在长沙.net技术社区博客兴趣小组中,有朋友指出,
通过不断的自学和练习,也可以形成自己独特的学习方法,这些学习方法能够快速的应对技术变化带来的挑战
。在这个知识大爆发的时代,靠死记硬背来记住某些问题的解决办法可能作用不大,只需记住具体的问题关键点即可。
能力强的人不一定比其他人会许多东西,而是能够以更快的速度解决问题。

例如,像我曾经提到的作者邹琼俊,他的学习方式就非常独特,那就是自学一种技术,并出版一本书,然后把他应用到公司项目中,进而推动公司的技术变革。在此之前他已经出过.NET技术书籍《Asp.NET企业级开发实战》这样的畅销书,最近他又出版了一本新书,这本新书则是基于跨平台技术开发的书籍《H5+跨平台移动应用实战开发》,这本书通过模拟一个社区的维修功能模块来介绍如何进行H5+跨平台移动应用的开发,采用了一些目前主流的前端开发框架或语言进行编写,包括MUI、ES7等。


(据我所知,在目前的开发者圈子中,有关这一块的技术书籍似乎不是特别多,尤其是前端技术发展的非常快,所以许多技术与生产环境严重脱节了,而这本书则采用了目前都比较先进的一些技术,确实值得大家入手。)

​ 当然,我的重点并不是介绍这本书,而是介绍邹琼俊学习的这种形式。难道还有比写一本书更好的学习方式吗?显然没有。

结语


对于IT企业而言,如果不掌握技术革新的方法或抓住新的机遇期,或许迎接而来的是自然而然的内卷化到死亡。《浪潮之巅》一书中,将企业变革称为“转基因”,吴军老师认为,技术浪潮面前,要保持优势,需要具有不断变革的勇气和能力。
​ 人何尝不是如此? 学习,并不断的练习,进而形成自己风格的高效学习法,正是开发者们不断刷新自我知识体系得到的宝贵财富。