程序员是最好的职业,说这话的是 Anders Hejlsberg,他的理由是 每两年CPU的速度要加倍,内存容量是原来的四倍,但是我们的大脑还是原来的大小,很显然,未来将需要更多的程序员来补充这些,他的意思也就是大脑的进化速度赶不上计算机的处理速度,但是这些机器也需要人来操控,所以更多的程序员就有机会。
anders是谁?估计现在年轻的程序员不太了解,在windows桌面软件盛行的年代,anders 就像神一样的存在,就跟现在的jeaf dean之类的一样大名鼎鼎,他写的pascal 编译器,delphi,乃至后面的vj++,c#,.net 都是绝对的精品。当年几乎靠一己之力撑起一家大名鼎鼎的borland公司,在borland传奇这本书中,anders也被称为不世出的天才。
天才的话如果你认为个体性太强,存在幸存者偏差的话,那么你看看近年的福布斯榜,IT方面的富豪几乎占富豪榜的大部分榜单,无论BAT,TMD,腾迅系,阿里系,还是拼多多等都带动产生了一大批富豪,从而进一步刺激互联网行业兴盛,在一些像水木的知识社区,里面的社招招聘板块基本90% 被IT的各种招聘所包围。
但是无论IT被各种各样的光环神话所包围,笼罩,但总有铺天的报道程序员如何的艰难,大龄程序员如何的被时代抛弃连声招呼都还没有来得及跟他们打,尤其是最近爆出的在网易工作没几年的程序员患重病被公司hr,保安,轮番逼退,虽然此事在媒体的压力下以网易道歉并赔偿而告终,但这也刺痛了中年程序员们那原本早已脆弱的神经,打开百度的搜索引擎,在里面输入"35岁程序员",会出来四个热词,分别是 “35岁程序员何去何从”,“35岁程序员好找工作吗","35岁程序员出路在哪?","35岁转行做啥好"。能成为热词的前几名的一般是竞价排名,但从这几句话 貌似看不出有任何的竞价排名必要,那就只能是大量朴素的自然搜索后的累计结果。
看起来好像IT行业是一个最好的行业同时也是一个最坏的行业,造成从业者之间如此巨大的本质原因是什么?在我看来正是每个从业者的底层思维决定了他们未来的走势,正所谓思维决定行为,行为决定性格,性格决定命运,下面来看看这些我认为能让程序员朋友把握好自己机会的底层思维。
一 复利思维
数学公式如下:
F=P(1+i)^n
F:终值(Future Value),或叫未来值,即期末本利和的价值。
P:现值(Present Value),或叫期初金额。
i:利率或折现率
n:计息期数
这就是被爱因斯坦称为世界第八大奇迹的复利,这里我就不详细列举大家基本都熟悉的例子比如国王赏赐一个棋士,在棋盘的64个格子里,按照2的平方来在每个格子放米粒,或者把一张薄薄的纸张反复的折叠,然后计算总高度。程序员成天都在和binary,byte之类的打交道,基本能随口说出2的10次方等于1024, 当然也知道2的64次方是一个巨大无比的天文数字,这其实就是复利的结果。
再看看下面的表达式:
(1+0.01)^365 = 37.8
(1-0.01)^365 = 0.03
这就是为什么我们说每天要进步一点点,就0.01,在复利周期内看似不起眼的小进步或者小退步,把时间当成朋友,假以时日,会让本体产生超乎想象的巨大进步或者退步。
既然了解了复利的威力,得需要利用这个思维来指导我们的行动,在日常生活中尽量寻找具有复利效应的事情来做。那对于程序员来说,做哪些事情能让我们产生复利效应从而让我们生活更美好呢?
排第一的我认为永远是运动,健身,尤其是程序员这个行业, 常言道做学问,板凳要坐十年冷,如果对于其他行业的话指的是需要持续的付出,要耐得住寂寞,沉得下心去琢磨,去研究,要衣带渐宽终不悔,但对程序员来说除了以上都包含外,还真的是要坐快10年,毕竟写程序基本时间都是坐着的,即使现在有那种站立式办公桌,也有些程序员在用,但毕竟是少数,大家都还是坐着写代码,坐着看书,坐着看B站视频,玩游戏,开会讨论,甚至有些小兄弟 除了中午吃饭,下班, 其他的都不会离开凳子,有时附近同事之间要讨论什么问题,都是用脚滑翔着和凳子一起到同事工位去讨论。久坐对身体是有巨大危害的,这一点老程序员是有深刻体会的。腰,脊椎,基本都有很大程度的磨损,还有就是肠胃,也是由于长时间久坐肠胃蠕动慢导致。
记得上次在微信chat作者群里,一个作者提到程序员的第一个品质是皮实,指的是抗压能力强,有事能抗。其实做事情要长时间保持高效,首先需要长时间的专注,而要长时间专注就需要好的身体来支撑,以前一个程序员朋友给我说起,有时候即使在思考编程问题的时候都会不自觉的打开网易,新浪网页,B站 翻翻新闻,看看八卦,看看视频,并且每天要打开然后关闭,然后再打开,很多次,而他本人对此也觉得习以为常,认为是自己的一种大脑休息的方式,其实深层次原因还是他自己身体原因而引起的不专注导致。
其实做程序员这行,刚开始的时候确实是智力,勤奋,学习力等的比拼,毕竟刚开始需要掌握大量的技术栈,要有比较大的学习成本,但一旦过了初级,中极阶段,其实就到了体力的比拼了,看谁身体最好,最持久。尤其是高级程序员,大家水平也就半斤八两,一天都只有24小时,只有拼精力,谁的精力好谁的效率就高,谁的产出就多,而精力就需要身体来支撑。
让我们来听听雷义,空客的王牌销售人员,号称这个星球上卖飞机卖得最多的人的成功秘诀。雷义认为他自己之所以能签这么多大单的最大的原因是他能时刻保持自己最好的状态,做一个最有感染力的人,而做一个有感染力的人首先要做到精神饱满,并且这种精神饱满是自然的,不是演的,为了达到这个效果,他每天坚持健身一小时,每次去见客户,在下了飞机后都会做半小时的有氧运动,然后就能保持在客户面前神采奕奕,容光焕发 ,在谈判中也总能轻易的占据上风。
第二个是读书,读书对于每个人来说都有巨大的复利效应,对程序员朋友当然也不例外,当然这里程序员的书单里并不应该只包含专业书籍,比如大家都耳闻目详的xxx从入门到精通,xxx从入门到放弃,深入浅出xxx,由于程序员工作的特殊性,我并不建议去买太多的专业书去读,毕竟在大学里我们都念过数据结构,操作系统,编译原理等等,对计算机的底层逻辑都了解,
对于语言特性,项目架构等方面,我还是建议大家直接读帮助文档 或者readme文档,就跟我们当年我们搞visual c++,visual basic不懂就去翻msdn一样。当然除了读帮助文档,更需要读读 一些优秀的文章,比如chat里的一些研发人员写的实战文章或者优秀的公开课程,在老师们的带领下,少塘坑,一步步上手再逐步精通,或者直接下载些优秀项目的源代码来仔细研读。
为啥程序员需要读读非专业类的比如文,史,哲类书籍?也许你会说我工作了几年没读过一本这方面的书,这不也过来了么,程序编得也不错,至少工作也有。几年也许看不出啥,但是十几年后你也许就可以看出差距了。
程序员工作本质其实是对事物或者问题进行抽象,只有抽象后才能进行深度思考,才能建模,建好模型后,才能用编程语言写成程序,无论是做算法,架构,或者纯粹的ACID操作数据库的coder.当然这里的建模是广义概念,并不一定是一套吊炸天的算法。其实我们建个表也算建模,表关联,存储,查询,删除来解决我们的实际的问题。
但是一旦抽象久了,我们就很难了解事情的真相,我们不能一直处在一个虚拟的环境里,需要对事物进行还原,需要走到真实的环境中与人接触,到真实的场景中去讨论需求,去做软件定价,销售等,这些工作比我们想象中的要复杂,但是在软件公司还原事物是由运营,产品,销售,售前等去做的,所以导致我们在现实生活中去做需要与人打交道的事情往往会显得力不从心,尤其是年纪大了,我们的体力又跟不上了,又没有积累起这方面做事的能力的时候。
由于我们需要每天花大量时间坐在电脑旁coding,所以在现实生活中我们比较难找到相应的场景而只有通过读些文,史,哲,经济,管理类书籍去帮助我们建立还原事物的能力,刚开始也许不能有立竿见影的效果,但只要坚持去做,和时间做朋友,就会有巨大的回报,至少在我们年纪大了的时候会有更多的选择。
最后至于读哪些书,上哪里读书,以我个人经验可以上微信读书,或者豆瓣读书上去看一些精品推荐书籍,一般让大家都能产生共鸣并给予高评分的书质量都不会太差,就跟好电影一样。或者可以去得到app上去听一些好书,反正一句话只要你想读并决定读,在如今这个网络化时代总是会有办法的。
第三 投资
我认为投资对于程序员来说就跟喝水,呼吸一样重要,首先程序员的工作毕竟是一项高强度的脑力加体力工作,绝非那些所谓“搬砖”,“码农",
既然是一项高强度的还是结合脑力和体力工作,这样就决定了程序员的职业生涯黄金阶段不会太长,所以更需要好好地规划,更需要投资来让我们的生活
因为有保障而变得更美好,很多的事情就得提前做好计划,一般程序员的从业时间平均是在24岁,黄金年龄,这时候的程序员我认为该
把自己的绝大多数时间和精力,财力用来投资自己,拼命学习编程,业务等各个方面有益于自己的知识,参加培训,讲座,购买优质chat文章。
用自己所能想得到的办法在30岁之前把自己打磨成一个技术专家,当然这个阶段也需要学习投资相关的一些理财知识,比如指数型基金之类的,
个人不建议这个阶段花大量的时间去投资股票。因为从经济学的角度来讲,一个刚毕业的程序员的收入经过努力,实战 6年后 薪水翻4倍是大概率事件,
(当然这里我指的是大多数,会排除个别的比如媒体新闻上老说的xxx公司应届生薪水达到200万)
相当于6年的年化收益超过30%了,你要知道连续6年,年化收益超过30%即使巴菲特也未必能做到,所以30岁之前投资自己达到最大的年化率,
至于30岁后,随着阅历的增加,这个时候经验,财富也相对有些积累了,在公司做事也会游刃有余,但同时这个时候对于大多数程序员来说除非技能有个大的突破,或者机遇非常好,进入一个处于大爆发期间的好公司,比如早期的TMD等公司,否则后续的收益很难像刚开始工作那样持续每年30%的复合增长,那这个时候我们需要怎么办?难道混吃等死,按流行的说法某些人30岁其实已经‘死’了,80岁再掩埋?我想对于本来就拥有创新,奋进基因的大多数程序员们来说,应该不会做此选项,看看下图。
从这个图看到最重要的元素了么?对,就是这条虚线,第二曲线,找到能将我们带出衰败期或者至少把我们衰败期曲线的斜率变小,变慢的第二曲线。无论是个人还是企业,都会经历开始期,成长期,成熟期,然后是衰败期,公司是靠一款或者多款产品到达成熟期,比如腾讯当初靠QQ在移动互联网到来之前达到的了成熟期,如果这个时候微信没有出场,没有这第二曲线,那腾讯就不会有现在的高市值,说不定已经在移动互联网的浪潮中被抛弃。google在其主要贡献公司营收的搜索业务只占公司研发力量不到5%,其他的大部分研发在外人看来是不务正业的,有比如卫星发射,基因编辑,无人驾驶,阿法狗之类的,还有人更夸张说google是真的在改变世界,因为他们舍得用如此巨大的投入去做对全人类有益的事。其实google作为一家以盈利为目的的公司哪能有这么伟大,它也只不过是在自己成熟期里寻找自己的第二曲线,再通过一个个的第二曲线把自己再次推向高峰,并想让自己始终站在行业在最高点。
对于程序员来说,在自己职业生涯的成熟期寻找第二曲线是不得不面对的问题,一旦没解决好这个问题,程序员的职业生涯晚景就显得很凄凉,当然一谈到这个问题,大家就会调侃说去开滴滴,送外卖之类的,即使是这种工作也需要一个好的身体,所以依据我前面讲的复利思维如果有一个健康的身体的话也是可行的,但绝不是最优选择,毕竟干了多年的脑力工作直接跨界去和小年轻们拼体力是需要下很大决心的,实在不得已不建议这么做。那对程序员有没有比较好的第二曲线呢?这里我推荐可以考虑花些时间系统学习下股票等相关投资知识,把投资作为自己的第二曲线,从信息的获取度和逻辑的推理性讲程序员做投资相对有比较好的优势。
以我个人经验,当年做通信出生,根据自己掌握的一些通信知识就比较容易区分通信行业和通信附属行业的一些好的公司和差的公司,比如对5G的概念股,我在很早的时候就有比较详细的分析,所以提前做些布局,由于后来在公司还做了比较长一段时间的爬虫开发,然后我又写了爬虫程序,抓了些自己一直在跟的股票的历史数据,跑脚本做比较,拟合数据,预测,最后做出一套量化模型来为自己投资做决策,到目前为止基本收益还不错,同时也让自己逐渐变得从容,对冲随着年纪增大带来的恐慌。所以程序员最好把投资当作自己的第二曲线,让投资复利像雪球一样越滚越大。
逆向思维
芒格曾经说过如果知道自己未来会在哪个地方死去,他一定不会去那个地方,就是最朴素的一种逆向思维。马云也说过创业的时候我们别老想着成功,最好想清楚如何才会失败并且自己所能承受的最大的失败是什么;Marie Kondo ,这位靠做“家务”改变世界的“日本收纳女王“在整理房间的时候留下有一句名言:“我们应该选择我们想要留下的东西,而不是想我们该扔掉哪些东西“。
其实逆向思维就是换个看问题的角度,从事物的反面去思考问题的思维方法,这种方法常常使问题获得创造性的解决,可能刚才还是山重水复疑无路,接下来就会柳暗花明又一村。像数学中的反证法就是一种逆向思维的运用。
下面有一个题目:
证明 假设a为有理数,b为无理数,证明a+b是无理数。
证明如下:
假设a+b是有理数那么a+b-a=b 也是有理数,这与题目b为无理数相矛盾。
所以 a+b是无理数。
这里的逆向思维就是为了证明a+b为无理数,我们假设它为有理数,再推出矛盾,然后得出结论它是无理数。
芒格在一次毕业生典礼的演讲中说他无法告诉即将毕业的同学们如何才能得到幸福,获取成功。但根据经验和阅历他可以告诉学生们如何保证自己过上痛苦的生活。他开出的处方包含:
1.妒忌。
2.怨恨。
3.反复无常,不要虔诚地做你正在做的事。
4.尽可能从自身的经验获得知识,尽量别从其他人成功或者失败的经验中广泛获取教训。
5.当在人生的战场上遭遇第一次,第二或者第三次严重的失败时,就请意志消沉,从此一蹶不振。
最后既然逆向思维应用如此广泛,并且被名人大咖们如此反复运用,那么对于普通人的我们来说该如何训练逆向思维呢?下面我简单介绍下刘润老师提出过的几种训练逆向思维的方法。
一,功能逆向。
比如保温瓶的功能是保热,逆向思维一下,于是就有了冰桶。
二:状态逆向。
人走楼梯时,是人动楼梯不动,但是这样走楼梯时间长了人会很累,逆向思维一下,能不能让人不动而楼梯动?于是就有了自动扶梯。
四,原理逆向。
电吹风的原理是用电动马达制造气流,把空气吹向物体, 但是对于地上的灰尘,小的垃圾,吹肯定是不行,会导致漫天灰尘,轻舞飞扬。逆向思维一下,我们得让空气反向流动,变成把它吸向电吹风里面去,于是就有了电动吸尘器。
五,序位逆向。
序位逆向指的是顺序和位置逆向,比如我们去动物园,一般都是动物被关在笼子里,人在外边来回走动观看,但这样的观光体验并不是很好。逆向思维一下,可以把人关在笼子里,让动物来回走动。于是就有了开车观光的野生动物园或者一些海底水族馆。
六,方法逆向。
如果两个骑马的人要比谁的马跑得最慢,这个确实没法比,两人几乎都可以慢到直接静止,逆向思维一下,如果让两人分别骑对方的马,那几乎瞬间就可以完成比赛,同时也分出了胜负。
看完这六个训练逆向思维的方法是不是有点脑洞大开的感觉,其实在我们编程的日常生活中如果多用这些方法去思考,对知识的掌握也有很好的推动作用。比如后端都在强调写高并发程序,那我们是否想过如何写程序让并发变得更低?如何让写的程序执行得更慢?如何让程序产生死锁 或者写一个不太容易一眼看出来的内存泄漏bug?或者做安全的 如何写一个让别人攻破的漏洞程序,一旦我们有这种思考方式并且加以相关的训练和复盘,再去写程序就能自觉的避免这些坑,因为你都提前演练过。
最后希望我们的程序员朋友都有一个好的职业生涯,都能过好这一生。