IT人永远不老,老程序员价值何在?

enter image description here

IT人永远不老?做梦,怎么可能。无论你现在是多么风华正茂,青春洋溢,终有成熟、老去的那天。

但是,人的身体可以变老,人的精神面貌、心态却真的可以“归来仍是少年”,只要你心不老,保持着对生活、对世界的好奇心和进取心,眼光和状态就会不同。

最近一则新闻刺痛了我的神经,中兴公司的某大叔级开发人员被公司逼迫辞职,最后发生惨剧。再联想起年初的“华为-35岁辞退”事件,我很想在这里聊几句。

首先,你要对资本的残酷性有一定认识,很早就要有心理准备。当它需要你的时候,鼓吹“公司就是你的家”,你可要明白这是忽悠,别真的信了 – 哪里有这回事。公司不是你的家,如果需要,他可以随时裁掉你,解除雇佣关系,毫不留情。人力与资本之间,实质是合作关系。既然是合作,当然可以一拍两散。心里不把公司当成家,把它当作随时可以走开的工作场所,你就不会真的无法忍受、想不开了。但是,这跟工作要认真敬业并不矛盾,人可以很职业很负责,工作做的很好。真要到最后一刻,属于自己的利益要积极争取,实在没办法也不要太计较身外之物,人要豁达。

为什么要“清理老程序员”?有公司管理、成本方面的原因。同样的事情,如果新人比老人好用又便宜,没家庭负担,加班不要钱,干活劲头儿还足,你是老板你咋做?很明显的选择嘛。换个角度说,你在做什么以至于让自己可以轻易被取代呢?当然,如果是公司经营困难或者全行业出了问题,那个是另外一回事,倾巢之下,岂有完卵。通信行业就有点类似“基础设施”的味道。基础设施做完了,除了维护、更新还需要人力,建设大军们就得等下一波技术进步的浪潮了。但是信息化社会的应用需求却不是。应用需求千变万化,深入企业应用,使用IT技术提升生产效率和资源利用率,整合进入生活、提高生活品质,IT行业还会有很长的发展时间。

另外还有一个背景因素:社会分工的水平,也就是产业发展的程度作为背景,决定了个体职业的前景。从经济学角度看,社会专业化分工止于边际交易成本。说白了,如果请人干不如自己干,那就不会再细分工作了。欧美社会因为制度优势/科技优势,可以把分工发展的很细,专业化程度很高,反之也推动了专业技术水平的提升。你做程序开发人员,可以做到年纪很大,只要足够优秀没问题。著名的StackOverflow网站有过统计,其站内40岁以上的经验丰富、水平高超的开发者大有人在,非常活跃。

国内行么?困难。国内的IT业发展水平决定了,大量的工作都是技术含量较低的普通应用开发,一套系统,增删改查,会骑自行车就可以了,要什么开宝马的司机?你看看有多少重要的开源项目,特别是基础应用项目,都是国外资深开发者发起的?国内大量公司是拿来用就好,能给出点反馈,提交点代码就算不错了。因为我们没多少时间也没什么耐心参与开发,甚至觉得经济上划不来。既然不需要做那么复杂的工作,简单开发应用就好,那还要“资深的开发者”干什么呢?所以这里缺乏职业深化分工的土壤,以至于限制了程序员的职业生涯,反过来也制约了国内的开发水准。

不过,近些年值得庆幸的是,越来越多的人认识到,参与基础性系统开发的重要性。一些大公司开始自己研制适合自己需求特性的,但是也能通用的产品。比如阿里巴巴做了数据库/分布式中间件等一系列产品的开发和开源推广。这些地方,特别需要高级开发人员,因为没有深厚的积累以及高超的开发能力,根本就玩不转。

心理学的研究表明,即便是成年人,认真的学习仍然可以获得神经元的有效连接 – 形成记忆和技能。所以不要才40岁就真觉得自己学不动了,其实是你犯懒了。IT研发这行,知识更新飞快,如果你指望拿以前学的东西吃老本走下去,从不想着刷新知识储备和技能,真的是很危险的行为。突然某一天,你的知识派不上用场,职业上再也不需要你,那真的没什么可说的了,只能怪你自己。

我们怎么办?问题的实质,是如何在职业生涯中,保持好足够的竞争力,以及给自己增加其它选择的机会。

提升学习的能力。要懂得研究学习方法。优秀的学习方法,可以让你的学习能力,长时间保持在高峰,学会新把戏也不是新狗才能办到,老狗也能做到,并不是多费力的事情。人年纪变大,记忆力会不如青年时代,但是因为经验增加,理解力却提升了,此消彼长。如果可以,多学些领域之外的东西,扩展知识面,特别是人文类。懂人远比懂机器更重要,更有价值。

以精神、体力透支为代价无法走的长远。你拼不过小年轻的,也没必要比这个,早点拒绝“天天白加班”的工作和公司吧,无论说的多么动听,公司多有名。自己想一想,值不值得。拼体力你没有优势,优秀老码农的价值,不仅在于技术深度,更突出体现在技术组合/选型上。搞过的东西多了,有创造力的人会形成直觉。解决某些问题,用什么办法好,什么技术组合起来最合适,直觉上就有了主张。甚至还能用别人想不到的角度去处理需求,这种能力很珍贵的,也很有价值。

争取成为一个领域的专家。专家才有良好的直觉,才能用直觉工作,专家难以替代。有时候,你工作的领域,深度是不够的,很容易干个2-3年就到底了,摸的很透彻。那么这就是比较危险的地方。新人在有经验的老手带领下,甚至熟悉的更快,自然要替代你了。那就想办法换个更有深度有价值的领域,研究到非常深入的水平。如果你现在贪图省心省力、轻松愉快,那后面自然是费神费力、紧张焦虑。容易的道路越走越困难,困难的道路越走越容易。如何判断领域的价值?看看是不是“强势知识”。所谓的“强势知识”,就是它的认知进步、革新,能给人类带来很大的好处,而眼下确实有产生突破、扩大应用的情势,大家都很热切需要的东西。此外,它还有比较大的难度,以至于学会用好,非朝夕之功。有时候它是行业的热门,有时候也不一定,因为有炒作的成分,自行判断吧。

别乱花钱,要有点风险意识。有太多太多年轻的时候拿着高工资,不知积累,到处玩乐,到处瞎买,胡乱买入高风险资产,胡乱买股票的人了。你确实是给经济繁荣做了自己的贡献,但是也埋下了未来的隐患。人重要的是学会克制自己,约束自己的欲望。适度娱乐理所应当,没家底的月光挥霍不可取。世界急剧变化,未来高度不确定,很难说得清。连系统架构设计都留冗余手段以防不测,何况人类。手里留下适度的储备用来缓冲,是很必要的。

年龄真到了职场上难以应聘的数字,你对自己的积累和技能有底气么?你坚信自己有能力做些有利于社会、能解决人类需求的产品和服务吗?有底气跟人合作也行。如果你甘当职场上的螺丝钉,就不要怪自己在突然的变化面前不知所措。

愿各位朋友都能在职业生涯中,不断追求新的人生境界,获取新的人生价值,让自己的人生把握着主动的权力。

重要的技术创新节点容易发生在什么地方?

这个想法酝酿过一段时间了。不过写成文则是临时起意。

enter image description here

今天看到这篇文章:

数据库压缩技术探索

http://geek.csdn.net/news/detail/201478

想起以前还有一篇谈TCP的新BBR拥塞算法的:

Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?

https://www.zhihu.com/question/53559433/answer/135903103?from=groupmessage

在我看来,这几个都是很重要的创新,特别是TCP的BBR拥塞控制算法。但是这些创新,它们有什么特点呢?

特点就是:它们打破了原有的技术假设。一些重要的技术创新,可能发生在原有假设被破坏的环节。

原有的思想、相关设计,基于过去的环境设定,可能过了很久之后,并不适用于当下早已脱胎换骨的环境。

而人是很容易习惯过去的动物,时间一长,就忘记了后面蕴含的假定。比如TCP原有的拥塞控制算法,基于网络带宽小,速度慢的假设上。可是过了这么多年,光纤大行其道,骨干网络速度飞快。原有的算法就不再适合了。其它情况也是类似的。如果察觉到这个变化,找到错误假设的环节,就能得到核心级别的突破创新。

以前学《计算机原理》的时候,老师就问过一个问题:数据是校验多好,还是少好。 我们本能的回答:多好。老师说:不是,只要有条件,越少越好。因为只要链路可靠,不校验就提高了有效数据比例,提高了性能,节约了成本。

20多年前,我的第一台计算机还是486-80,内存4M,硬盘630M的时候,我也没想过自己用的PC,内存都是32G了。相对于CPU、内存,硬盘进步算最慢的了,可固态硬盘 – SSD还是能秒杀机械硬盘。

原来的拨号网络网速56k,现在光纤100M。硬件环境变了,很多基于原来硬件设定的东西都要随着变革,这里面就会有很多改进、创新的机会。

人要与时俱进,顺应时代潮流

坂本龙马曾经对土佐勤王党成员桧垣直治说:“今后在室内乱打乱斗的情况会多起来。我喜欢小太刀,小太刀灵活,比太刀实用〔当时流行太刀〕。”之后直治带了小太刀再见龙马,他却掏出来一柄手枪:“这个比小太刀更具威力。”坂本龙马拜胜海舟为师后,直治带了枪再见龙马,这次龙马掏出的是一部《万国公法》(一本国际法方面的书):“手枪只能杀伤敌人,此书可以振兴日本!”西乡隆盛曾对坂本龙马说:“你前天所说的和今天所说的不一样,这样你怎么能取信于我呢。你作为天下名士必须有坚定的信念!”坂本说:“不是这样的。孔子说过,君子从时。时间在推移,社会形势在天天变化。因此,顺应时代潮流才是君子之道!西乡,你一旦决定一件事之后,就想贯彻始终。但这么做,将来你会落后于时代的。”

 

坂本龙马.jpg

上面这段话,摘自维基百科关于“坂本龙马”的条目。这段话给我很大的震撼:那可是明治维新时代啊!只有思想家才有这样的见识和洞察力。可为什么说起他?因为在跟群内的朋友聊最近发生的“格斗狂人20秒KO太极高手”的事情。我提到,李连杰的经典电影《精武门》里面的高手船越跟陈真有过一段精彩的对话:

船越:中国人的武功是强调个人的修为,而不注重实战。

陈真:技击的目标是讲求击倒对方。

gun2.png

船越:你完全错了,年轻人我告诉你,要击倒对方最好的方法就是用手~枪。练武的目标是要将人的体能推到最高极限。

wushu2.png

这段话,是影片的精彩之笔。然后朋友告诉我,这来源于坂本龙马,遂查询到坂本龙马的资料。

铺陈了这么多,我到底要说什么?其实很简单:人要与时俱进,顺应时代潮流。

这对于技术也是一样的道理。即不要固守既有的东西,不要永远抓着一个东西不放,仅仅因为你过去对它很熟悉。对于Windows开发、.Net、C++语言,我也持这个态度 – 它们过时了,已经不能代表产业的潮流。当然,这并不是说它们没用,而是说,当你有机会做选择的时候,可能在大部分场合都不会选择它们。因为总有更佳的方案可以替代。

我以为整个产业的重点,早已从单机模式转向移动设备及其相关联的互联网服务上。而且还会有进一步的发展和转移,比如智能设备。

微软公司没有抓住机会并顺应这一潮流,这是它们丧掉信息技术浪潮之巅的根本原因。它在Internet刚兴起的时候就错过一次,而且连带着缺乏革新的C++一起衰落了。要知道,多年以来Windows上核心的开发技术,都是以C++为主的,要使用Visual C++工具包。程序员里面,能熟练使用C/C++开发的,那真的是有相当不错技术功底的。在“程序员鄙视链”中,位于顶层。不是因为语言太难学 – 这是一部分因素,核心原因是因为缺乏高度抽象、优秀的封装,开发者不得不亲自对OS的API接口进行操作,学习操作系统底层的设计、准确理解各种重要概念、精确操作各种进程、线程、同步接口等等。这些东西不是朝夕之功,需要很长时间的积累。

Web时代来临,单机操作系统的重要性大大下降。因为信息需求的本质,是要传播。这个时候,单机就成了生产力工具了。

Web就是OS。你可以根据这个论断,映射一下:

应用程序 – 网站;操作协议 – HTTP;文件系统 – 数据库/分布式;打开网站 – DNS;检索信息 – 搜索引擎;这种类比有一大串。

Web开发迅速改进、革新,发展速度比起传统单机软件开发模式,感觉快了10倍。10多年前的网站开发还很原始简陋,现在你再看看?翻天覆地。而你再看看Windows单机软件的开发,甚至连画个图片按钮都得自己从头来,这什么年代了?这充分反应了社会需求。

移动互联网兴起10年,人类真正实现了“信息在指尖”的梦想。Web其实是跟着移动开发一起进步的,并未衰落。因为移动设备后面,可全是一套套的Web技术在支撑服务啊。它们是互补融合的。

而在这些一套套的技术里面,C++已经给逼到了墙角,基本没什么位置了。或者从另外一个角度说,C/C++已经变成基础工具构件,专门用于系统、其它工具的开发。比如用C/C++实现其它语言的引擎。但是具体的应用级工作,大半退位给其它选项。你会用C++去开发web应用么?除非去开发服务器扩展,否则不会。因为那是自寻烦恼,系统的瓶颈是I/O,不是CPU,用脚本性能足够好了,而且开发速度快得多,维护也容易的多。

另外,语言之争,已经演化为社区之争。典型表现就是分发系统。各种流行的脚本语言,都有自己设定的打包分发系统。如PHP的Composer,Javascript的npm,Python的pip等等。社区设定标准,只要符合标准就可以上传分发,下载使用。这种模式下,开发跟搭积木无异,要什么功能?直接找个实现的最好的包,拿来用就是了。除非你觉得不满意,无法满足自己的需求,想重搞一个。否则没理由重新发明轮子。你告诉我C++的代码咋分发?一套C++ Class发过来,连编译都无法跨平台。在语言实现上,Python/PHP/JS这类语言有天然的优势。这种开发效率,比C++快了N倍。

过去,C++开发有个比较强的需求:客户端。操作高效、使用流畅的客户端还是有它的应用场景的。但这个需求在减弱。

一是移动端、Web端在侵蚀,对Windows客户端需求不再那么强烈了。笔记本、台式机厂商的日子比较难过。

二是其它语言特别是用Html5/JS/CSS技术实现的客户端,日益成熟。早晚会吞噬C++ UI开发的大部分市场。早期的HTML界面实现很弱,缺陷很多,特别是性能。但是基于高效的V8 JS引擎、webkit引擎内核技术的新开发模式,已经脱胎换骨。因为并不调用什么IE接口,没有那么多跨进程的COM调用消耗,所以性能好得多。

三是实现效果大相径庭。基于新一代CSS技术的UI,效果绚丽,个性化突出,这些完全是C++ UI开发望尘莫及的。C++想实现出来?累死你。而且这也不是业务逻辑,做它又觉得亏。

眼下多语言竞争、分割应用需求是大趋势,每个语言占据各自的山头,再向外延伸。PHP专注于WEB开发、Java做后端应用、Python做网络、数据分析、JS做前端应用,如此等等。这种条块分割,也逼着你要多学点不同的编程语言了。

对C++熟悉的人,优点是基础好,缺点是思维往往被微软那一套模式束缚了,学的越是好,摆脱起来越是难。但是如果确实摆脱了,功力又确实比只会脚本的深。出个什么状况,可以一口气扎进去,翻看源代码,追踪系统调用,彻底理解并解决问题。遇到脚本的性能瓶颈,用C/C++做个扩展模块,性能如飞。

所以各位如果碰见好的C++开发,尽量别错过,拉进来,让他转型。技术水平上有很大把握优于直接从脚本开发入行的人。

只会C++开发的朋友,也关注点新发展吧,坚守没有意义。顺应时代潮流才是君子之道。

Top