工做三年多了,作技术不能只顾埋头搬砖,也要按期回顾,思考将来,不要让本身成为那种一年经验用了十年的开发者,这点要时刻提醒本身。菊厂工做三年多,不少有能力的小伙伴都离职了,去百度搞云计算的,去阿里搞AI的,去大疆的,去美团的…对本身有触动吗?那是确定,没有才是假的,可是本身却在温馨区里每天循序渐进的过着,绩效薪水都还不错,可是技术能力呢?原本就不高,还遇到提升瓶颈了,囧~ 反观周围的老同事,好多搞管理了,带版本管项目,每天拉通对齐端到端… 既然想走技术路线,就该好好想下工做后如何有效的学习了。git
从本身的工做谈起,三年多菊厂Linux C/C++通讯软件开发,第一年收获最多(可能由于本身自动化出身CS基础太差),工做须要的编程方面技能补齐后,就能够很好的应对业务需求的开发了。「工做后,你只须要比你们多努力10%,回报则赛过50%」,亲身体会真是一点不假。工做后,稍微深刻点知识的学习都只能靠本身。观察周围同事,对技术颇有热情的并非不少,除了一些专家大牛,不少老员工单就技术能力而言跟入职两三年新员工的技术能力没什么差距,我思考了下缘由,大概以下:程序员
我工做这三年以为本身收获的最有用的经验就是:问题定位能力,提早识别坑,快速填好坑。固然,也见识了一些优秀架构的设计,但也仅限于见识与使用。github
先说说我本身平时工做以外的学习,基本就是下面的三项:面试
本身的学习我的认为仍是有效的,学习成长本身是能体会的到的,而且工做也作的不错,只要稍微比同事多努力一点,就能有不少回报,工做后真的是这样。可是呢,本身的水平本身清楚,而且本身的努力程度远远不够。看一个大牛的心得《如何成为一位技术专家》:算法
如何成为一个技术专家?答案其实很简单,努力学习。
从学生时代一路万马奔腾而来,何时努力的效果最差,高三的时候,由于你们都是如此努力,工做后,你只须要比你们多努力10%,回报则赛过50%,不止在技术上,其余领域也是如此。
《最牛B的编码套路》一文提到了技术上的训练方法:预期留出时间,集中锻炼,留出技术梯度,时刻关注本身有完成目标,到达瓶颈。
程序员最重要素质是“不断努力学习”,要不断地挑战自身能力以外的东西,运动爱好者们经年的跑步锻炼,但是仍然跑不过刘翔,业余象棋看上几千盘,仍可能被一个初出茅庐的棋院学生杀个大败。不断努力学习,不断训练,在于发现短板,并有针对性的提升。
套路一文提到了不少训练方法,其实我很赞同最后的两个方法:1. 写博客;2. 参与开源项目。
关于写博客,牛人们是非重点不写,本身则不必非得高大上,还要解释一下,我的感受刚开始写博客则是要养成定时习惯,有什么写什么,虾米再小也是肉,这个月不写,下个月要补上。固然中间的区别是,如今我是写给本身看的,牛人们是传播知识。shell
参照大牛的文章反观本身:开源项目没参与过,这点本身有待提升。对于写博客我比较认同大牛的见解,写博客也就是记录总结下本身学习笔记,方便本身回顾查看,不必想着多高大上,本身也就一水平普通的程序员记录点东西而已。以前在知乎看过一个问题,是关于微软一员工和Facebook一员工PK的,以为颇有意思,我很欣赏里面@古轮木的拖拉机的一个回答,摘录部分:编程
老乡,江汉臣,他在一个回答里说本身得清华特奖的经历是”下课作不少题目,而后提早看一些考研的题目,而后就超过了同班的同窗,能够去帮助他们”,体会一下,特奖诶,清华诶,课下不该该去读普林斯顿数学讲义实现日新月异么,考研试题什么回事,太low了吧,清华peer pressure这么弱的么,实际上这一点都不low,这叫”祛魅”,这叫”平实”,你看ZB就历来不说本身是怎么学习的,他说本身是天才嘛,可能用的是记忆面包,因此咱们快来膜拜他。markdown
做者要表达的是什么?大牛靠的也是科学的方法和踏实的努力。吹捧神化之类的真的也没必。不盲目崇拜,不妄自菲薄,踏踏实实学习,博客写的东西简单不low,LeetCode题目作不出来也没啥,静下心来学习就是了。天才是极少数,大部分牛人仍是厚积薄发一步步积累出来的,靠的仍是朴实科学的方法,再加上多一些勤奋。在关于LeetCode刷题难不难时,不少北美FLAG员工也现身说法了,初期都会难,练的多了就行了。本身知道的读书时的大神,工做后的大牛同事,靠的都是平时踏实的努力。网络
单独把刷题拿出来讲,是由于刷题真的很重要,并且颇有用。做为一名developer,最本质最核心的工做就是:用代码把功能特性给实现,可以使用合适的算法,快速写出尽可能bug-free的代码!工做三年来,我LeetCode其实没刷多少,100道都还差的远,真是惭愧。不过公司内部的OJ刷了100多道,由于是转正要求,相比LeetCode水了点,囧~~ 。虽然本身OJ刷的很少,可是仍然能够明显感受到刷题让写代码的手感提升很多,也多是由于本身当时太菜,再次囧~~。在知乎上有这样一个问题:刷 LeetCode 吃力正常吗?, 不少答案都写的很好。@Coke Zero的答案是说方法的,我我的很赞同:架构
- 不要贪图数量,刷300-400题足以干掉FLAG,每一个tag精选5-10个表明题目足矣,不必每一个都刷。
- 对于精选出来的经典题目,要反复熟悉。反复的意思是能背下来……对,咱们智商低的人就是这样的(挺胸抬头)。固然,是背思路,不是背代码。这里推荐用Python刷题,由于Python比较方便把代码直接翻译成思路,Java容易被语言细节缠绕而迷失思路。若是对其余语言能熟悉到思路无缝转换的程度也没问题。 // PS: 我的认为做为一个C/C++ coder仍是用C++吧。
- 怎么背思路呢?推荐一个背单词利器——艾宾浩斯曲线app,好比iPhone上的memory helper之类。把刷过的题号输入进去,每隔一个艾宾浩斯遗忘节点,就提醒你一次,而后在脑中回忆思路,回忆不清楚的拿出来再看一遍。回忆几回之后,有时间就再写一遍熟悉代码。
- 死记硬背带来理解。背多了,你会发现各个tag的本质,及其之间的联系。好比麻烦的backtracking(Google特别爱出),这东西的本质是什么,跟recursion、dfs、dp之间是什么关系?为何它的复杂度老是指数或更大,缘由是什么?而后你打开算法导论(或stackoverflow)发现了新世界……原来backtracking说的是所有解空间的穷举搜索,既然是穷举固然很慢,但它思路其实很是直观,和linear search同样都是一个一个搜过去而已。因此,下次看到所有解空间穷举类问题,就能够先想到basic backtracking,穷举一遍,而后再想怎么优化。相似的哲学性总结很常见,随便翻开一本面试辅导都能看见一大堆,但不经历本身想本身写并在反复死记硬背中熟练的过程,那些结论是没有意义的,即便记住了,一阵不练也忘了。不少人说死功夫下多了就开窍了就是这个意思。固然,有的人彻底没有触类旁通的能力,但大部分人是有的,因此反复熟练经典题以后,能够解决掉新题。// PS: 颇有同感!
- 若是有时间还能够联系一下算法题和其余CS知识,绝大部分算法题都来自实际应用。好比Trie, LRU, HashMap,图论这些都是和industry应用联系很紧密的。知道应用背景,就会发现LC上的题都是最最最最简单的浓缩版,心态上就没那么畏难了……
- 若是有条件,反复刷一年甚至两年是最好的。见过它十遍以上的时候就不以为它有多难了,即便细节不记得了,心态上不会怕。
- 尽可能不要中止刷题,天天都作一道,实在没时间作也必定要拿出艾宾浩斯app回忆一下。不要一天10道,没有意义。一年,两年,三四年后,就渐渐不拿这东西当回事了,来新题也能立刻crack。即便转cs,也有一两年时间来熟悉算法题。我以为刷题应该piecemeal,尽可能早开始,坚持到退休,这个是吃饭的手艺,就像witcher的剑:一个猎魔人能够不吃饭,不睡觉,但不能不时时擦拭本身的剑。
按期刷题,是作的针对性训练,这个是通常项目给不了的。CoolShell博主,前阿里P9,陈皓2018年都还时不时的刷题,更新本身的Github-repo: LeetCode, 让人十分钦佩。
技术的学习,不像是背单词,能够零散着来,须要有完整的大块时间集中注意力去学,尤为是啃硬骨头时。不少难点都是靠长时间专一思考突破的,如算法的学习,一些OS底层知识点,最近大热的机器学习等。
记得本身当时理解函数调用栈的内存布局,寄存器rbp如何一个指另外一个,如今看很简单的一个知识点,可是本身当时也是集中思考了好久才完全搞明白的,关于如何从栈空间连续的二进制内存中还原出调用栈帧结构,也记录了一篇博客《Linux C函数调用栈帧结构》做为笔记。
因此,对于技术的学习,要作到长时间的专一。若是不能作到长时间的专一,那么学习的效果就要大打折扣了,知乎上一个问题:如何作到长时间(4 个小时以上)精神专一?,里面@Will Zhang的回答我很是赞同。PS: 赞同来本身的经历和亲身的体会,而不是由于这个答案自己的高票。摘录部分:
- 我听闻番茄工做法已久。可是我本身历来没用过。我很好奇的是,无数的人赞同他的时候本身是否用过。对这个问题我有不少疑问,要是打断的时候正好是我精力最集中的时候,怎么办?不停地这样中断,每一次中断我就要保存一次如今看到哪儿了,而后下一次开始的时候我再去进入状态,接上思惟,这个开销能够忽略不计吗?还有不停的设置时间提醒本身,不嫌麻烦吗? // PS: 这个我用过,发现不适合技术学习和编程练习,每次时间过短!
- 让你的注意力聚焦在你所作的事情上,你的处理速度趋近于你的接收速度,你的思惟跟上你所作的事情的发展。而后保持,就OK了。
- 你就很难两小时精神专一于教科书上,首先,你就不必定感兴趣或者不想看教科书的内容,注意力就集中不了,其次就算你集中注意力开始看,你的处理速度是跟不上你的接受速度的,由于教科书的知识密度大,一页书包含了可能不少的信息,你大脑处理不过来。 // PS: 学有点难度的新东西,我通常适当放慢速度,笔记演算,反复看!过快是没有效果的,还容易注意力下降走神懈怠。
- 举个阅读的例子。阅读长篇英文的时候,你们是否是会有常常看着看着就不知道看到哪儿去了的经历?这时你的大脑就不是在积极主动工做,而是被动工做的。事实是,若是你一边读一边想这段文字的他在表达什么,和上一段是什么联系,和文章主题是什么联系,说完这一段,下一段你预期他应该讲什么,到了下一段是否符合你的预期,若是符合的话你能够加快处理速度,若是不符合你就去修正你的预期。这样去阅读的话,那么你会发现你就不容易走神了。
- 保持运动、充足睡眠。保持运动是为了睡眠质量高,身体健康,醒着的时候精神状态好。精神状态好,你的机体都能发挥正常的功能,大脑可以正常处理它接受到的信息,眼睛可以正常地阅读。
认清本身的不足,坦诚面对不逃避。本身过得好很差,工做开不开心,能力有没有提升,技术怎么样,本身最清楚,千万不要自欺欺人,混混沌沌的过日子。一个前Google 程序员@lucida的文章写得很好:2018,从对本身诚实开始,摘录部分:
- 如今回看之前本身的博客,悲哀的发现本身已远没有当年对技术的热情,或是对人生目标的清晰——上学时本身的想法很单纯——写最好的程序,而后以此做为基石找到一份好工做。如今看这个目标是实现了:找到了一个对应届生而言还不错的工做,本身还写了一篇如今看起来十分好笑的 心路历程,当时那篇文章被各类转发,本身的虚荣心也获得了极大知足。
- 好笑的是,我在 Google 里工做不顺,并无本身想办法改变现状,而是在工做之外的地方寻找慰藉,以填补本身的虚荣心。在这段时间,我建立了本身的独立博客 lucida.me,并花费大量业余时间撰写了诸如 Sublime 教程和程序员必读书单之类的质量长文。这些文章的反响很好,我由于这些文章也成为了读者口中的大牛。虚荣心再次获得知足。
- 然而与网络的“成名”相比,本身在现实工做中毫无进展。本身在 Google 3 年始终停留在入门级别(通常来讲,正常表现一年半到两年就能够升一级),尽管有换组和项目被砍这些因素,但无能否认,本身前三年的工做(也许是最宝贵的三年),完全的 doomed。在 Google 时有很多人经过个人博客找到我,想和我约饭聊天(他们可能认为我真的是大牛吧),都被我本身的偷偷的躲掉了——我并不想让他们看到现实中的本身。
- 2017 这一年中,我在 FB 写了很多东西,也结识了很多新的朋友。读了一些书,也得到了一些新的技能(开车,摄影,举重)。最大的收获,是终于能够诚实的面对本身,不会由于本身在线上和线下的不一致而产生自我认知矛盾。
- 与其在网络上打扮成本身但愿别人所看到的本身,不如对本身诚实,在现实中成为本身但愿的本身。但愿这篇文章能够终结我本身的浮夸,终结我 5 年前写的那篇文章的“诅咒”。Stay hungry, stay foolish, and be honest to myself。这是 18 年的第一篇文章,但不会是最后一篇。但愿我能够经过写做,锻炼本身的思考能力,总结本身的收获,清晰本身的目标,让本身对本身更诚实。
真情实感的故事,总能引发共鸣。想成为本身指望成为的本身,首先要坦诚面对真实的本身。改变不是一蹴而就,而是从天天的一点一滴作起,谨以此文督促本身的改变!