写给程序员儿子的一封信

亲爱的儿子:程序员

当你打开这封信的时候,我已经离开波士顿回到加州了,你也已经结束本身最后一个暑假,去往本身很是喜欢的公司。web

虽然你我都是程序员,可是你却不多向我咨询过技术相关的问题,我们上一次一块儿写代码,也是你高考结束那个暑假了。不过前几天你问了我一个问题,你说,若是让你写一封信,跟当初刚刚成为程序员的本身说一些话,你会说什么呢?算法

我在想,我会说些什么呢?我想说的太多了,但是若是说了,他能听进去多少呢,就算听进去了,他又会用到多少呢?我想起了瑞·达利欧的《原则》,若是我把我这几年的经历、收获,总结成几条原则,是否是会好一些。编程

如下,是我总结的几条原则。后端

1.权威精神

对于某一项具体技术来讲:
官方文档、白皮书、论文,比博客更权威;网络

由此引伸出:
谷歌比百度更权威,由于谷歌的搜索结果,权威的资料靠前,而百度,靠前的可能是博客;
大多数时候,英文文档比中文文档更权威,由于官方文档、白皮书、论文,大多数是英文的;
若是你想向别人解释一项技术,那么请向他们展现权威的资料,而非一些网络上的博客;编程语言

为何这么强调权威精神?
《禅与摩托车维修艺术》里,做者和朋友骑摩托车去沙漠,车坏了,朋友依靠直觉和经验,尝试了各类办法,就是修很差,而做者找到了他购买摩托车时配套的指导手册,照着上面的步骤排查,很快找到了致使车子故障的缘由,换了个零部件,车子就行了。性能

数学、物理的不少研究,都是基于定理之上,谁也不会基于一条未经检验、未被公认的理论去研究本身的工程,就比如一位军事科学家,是不可能用一位民间科学家的一篇文章里的理论,去设计本身的军事系统的,稍不留神,一个计算错误,就会把导弹射向本身。学习

而软件工程,其实和数学、物理同样,也是一门科学,这一点不少人都忘了。测试

为何他们会忘了,由于在软件领域,破坏的成本几乎是零。

你能够在计算机这个狭小的空间内,制造各类爆炸:内存溢出、栈溢出、空指针等等各类系统异常乃至奔溃,都不会对你形成伤害,计算机默默承受了这一切,CPU 帮你执行了一次又一次的任务,最多就是浪费电,不太环保而已。

事实上不少程序员就是在不断的试错中完成需求的,我喜欢称他们为“试错型程序员”,他们在网上随便找代码抄过去,本身跑了一下,有点问题,改了几个 bug,看起来没问题了,提测,测试同窗又发现了几个 bug,改 bug,bug 改完了,上线,上线后有点小紧张,怕会出现什么“意外”,观察了好一阵子,没有“意外”,呼,长叹一声:运气真好。

而一个具备权威精神的程序员,是不相信运气的,他的学习、工做效率是极高的。

他从官方文档、白皮书、论文里看到的资料,就是软件工程的定理,他能够放心的认为它们就是正确的,而那些从非权威资料,从网络零零碎碎博客学习的程序员,他们会心虚,他们也许得看好几篇博客,才能以为这就是正确的结论(而这时候有可能这些博客都是错误的、过期的,所以他所认为的正确,其实仍是错误的)。

也许你也尝试过阅读英文文档,但因为母语环境的缘由,阅读英文,确定没中文快,不要紧,我并非说你就不能从中文博客里学习:

若是你如今还须要依赖中文博客,那么业界大牛的博客、参考了权威文档的博客,要比那些毫无依据的博客更权威;
在博客里得到的知识,请尝试到权威文档,找到对应的描述和依据。方法:把知识点关键词,翻译成英文,在谷歌里搜索,可以在官网站内搜索更好(固然谷歌也支持指定站内搜索,site:${官网} 关键词)
请多阅读英文文档,努力提高你阅读英文文档的能力;

2.底层精神

你极可能会焦虑,焦虑本身到底要作什么,学什么,才能让本身区别于他们口中的“CRUD 程序员” ?
有人说,程序员门槛很低,确实,若是把可以写出可运行代码的人,称为程序员的话,那人人都有成为程序员的潜质。

会写 CRUD 的程序员,不少,可是懂 CRUD 背后原理的程序员,则不多:

你会用 Java 在内存里给 i 作加一的操做,但不表明你知道 JVM 是怎么给 i 加一的;
你会往 MySQL 里插入一条记录,但不表明你知道 MySQL 是怎么插入的;
你会用 Kafka 作消息队列,生产消费消息,但不表明你知道 Kafka 是怎么处理消息的;
彷佛一切的动做,均可以概括为 CRUD,但若是你知道 CRUD 底层的原理,那就和那些只会写 CRUD 的程序员不同了,代码上线后:

某一段代码性能极慢,他们不知道为何慢,你知道;
MySQL 死锁了,他们不知道为何死锁,你知道;
Kafka 处理消息效率很低,他们不知道为何低,你知道;
并且你很自信,若是是你来写CRUD,是不会让这样的问题上线的。

这,就是你做为一个程序员的竞争力所在。

有一张后端程序员的学习路线图(Back-end Roadmap):

后端程序员技术图

https://mmbiz.qpic.cn/mmbiz_png/lA1CtgibZZmyt3iaIoyCOiaGZraX54JIKzMiczLhgxQxbt66ia5aMq14zdU9iboAYA8ncFdP1J8gBNff6opXXnxicvkTA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

固然,不是这里面的东西都要学,若是都学,你可能就会和其余程序员同样,只懂得怎么用,而不知道技术底层是怎么实现的。

挑其中你最经常使用的几项,好比 Java、Spring、Dubbo、MySQL、Kafka、Apollo,深刻研究他们,阅读他们的官方文档,看源码,知其然知其因此然。

检验的标准很简单:梳理出本身的一套调优方法/最佳实践,并能解释为何这样作是最优的,这就要求你弄懂它们底层的原理。

3.不仅是技术

技术是用来解决问题的,可是当你工做后,你也许会发现,只靠技术,是不能解决全部问题的。
你须要熟悉公司的业务,理解需求的价值和目标,再用合适的技术去实现它,能解决问题的程序员才是牛逼的程序员;
你想用的技术,公司不支持,也许是由于须要更多的机器,你须要学会怎么在技术和成本之间作平衡;
技术是你的一把锤子,但不要有了锤子,就认为万物都是钉子,什么都想用技术去解决,也许换个需求的实现方式,也能解决用户的痛点,并且实现起来还更简单,那何乐而不为?
只会用技术解决问题,那不是你掌握了技术,而是技术控制了你;
知道何时要用技术解决问题,用什么技术,这才是你掌握了技术。
你要学习的,不仅是技术,也许还有沟通、管理、写做、思考等等能力,也许你须要阅读不少非技术类的书籍,我也会在后面的来信中和你分享一些书单。

4.保持技术热情

你是否是以为我很矛盾,刚说不要只懂技术,如今又让保持技术热情。
但是这二者并不冲突呀,只懂技术是一个极端,丧失了对技术的热情又是另外一个极端,最好的状态就是,保持对技术的热情,又清醒的知道没必要什么都用技术去解决。

为何会失去对技术的热情呢?也许就是由于上面所说的,你发现了太多太多的事情,不是用技术就能解决的,现实并不是你之前认为的那么纯粹,现实世界并不像计算机世界那样,特定的输入就有特定的输出。

可是,想想你为何选择了作软件、作科学,也许当初你爱上编程,就是由于你喜欢创造,你享受本身写下的代码,创做的的做品,运行起来时的那种美妙的感觉,哪怕只是打出一行“Hello World”,都让你开心半天,更况且是你写的代码,作的轮子,被成千上万的用户使用了呢?

总而言之,不忘初心,不要被工做、生活的其余杂七杂八的因素,毁灭了你的技术热情。

你想问我是怎么保持技术热情的?

个人方法很简单,那就是在工做以外,本身写些代码解决问题,若是实在没有问题能够解决,我就写编程题、写算法题,我还喜欢用非工做语言的编程语言来写,好比我工做用的 Java,那业余时间我就用 Python。

写代码有时就像写做,写着写着,你就会情不自禁的回忆和思考,拾回一些丢失的东西。

5.立刻就干

不少人懂得不少道理,但就是过很差这一辈子,每一年年初都制定了一堆计划,可是最后发现都没坚持去作。
也许你看了我上面的信,有不少感触,可是若是没有行动,这些收获就不能转化为实实在在的东西。

我相信你不想成为这样的人,怎么办?四个字:立刻就干。

一般当我听到一些颇有用的话时,我不会就此打住,我会继续追问,而后呢?而后我能够作什么呢?有什么事是我立刻就能作的呢?

陈皓老师(左耳朵耗子)发起的一个叫 ARTS 的打卡计划启发了我,若是咱们能够针对咱们的目标,列出对应的行动,而且给本身布置做业:每周/每个月完成多少次,甚至是跟一群人一块儿打卡,互相鼓励和分享,这样一些看似很难实现的大目标,就被咱们拆分红每周/每个月去完成的小目标,这样也就变得很容易实现。这也是陈海贤老师在他的书《了不得的我》里头提到的 —— 小步子原理。

若是你的目标跟我同样是:

提升阅读官方文档、白皮书、论文等英文权威资料的能力;
深刻学习经常使用的技术,打造本身的竞争力;
提高沟通、管理、思考、写做等综合能力;
保持技术热情;
那么你能够这样制定本身的每周打卡计划:

每周至少作一个 Leetcode 算法题。主要是为了保持技术热情,不忘初心。
阅读并点评至少一篇英文技术文章。主要是为了提升英文阅读能力,让你能阅读更多的权威资料。
分享一个技术知识。主要是为了概括总结你的技术学习,最好是在某个你经常使用的领域,不断深刻学习,提高竞争力。
分享一个你在非技术领域得到的感觉。主要是为了在其余方面也可以获得成长。
每周完成这四个目标后,把四个目标对应的输出合并在一块儿,发布出来,完成打卡。

若是你的目标跟我不一样,想在其余方面有所发展,也能够制定本身的目标和打卡计划。但有一点,我但愿你的成果,是可以输出出来,给其余人去看的。

若是你仔细看个人目标,你会发现,个人结果都是对外可见的。无论是代码,仍是点评文章、仍是分享,以及最后的汇总发布,由于只有你的成果,是你愿意去对外分享的,你才真的收获到了东西。

若是你只是在内心跟本身说,我这周学习了,很努力了,但其实你并无收获到什么,那你只是在自欺欺人,伪装很努力。

可是一我的的自控力是有限的,不可能要求本身每次都能管住本身,每次都能约束住本身,这时候,就须要借助外界的力量。这时候,找一群志同道合的人,一块儿学习,一块儿打卡,就变得特别有意义。

转自:公众号-柳树的絮叨叨

相关文章
相关标签/搜索