***本文来自于我从2014年来一直在豆瓣更新的码农日记,可是被删了。。只能躲到这里了。以下是正文
(智商90以上人群勿看)我决定写一篇日志来记录一下自己在码农之路这条不归路上的心得体会,之所以写下来,一个是总结一下自己的思路,二是总结自己学过的知识,三是吐槽,四是可能会帮到一些和我一样脑残智力在90以下的人是怎么进阶的,五就是作为励志的一种方法吧。(在网上看到任何自称学渣的人都没有我水平烂,所以算是网上第一篇针对真·弱b的成长之路,如果我以后有幸成功,就可以造福后人了吧)
————————————首先是吐槽——————————————————————
首先我觉得智力低下如我这等蠢人,智力90以下肥猫一样的人,根本就不应该干这一行,因为经验的影响虽然确实有,但是你会惊奇发现大牛的进步速度远远指数级的超过你,最后把你碾成渣。但是更令你绝望的是,你原来眼中的大牛在其他人眼中其实就是个傻逼,人外有人,井外有天。所以我就经常在一亩三分地里看到各种大神在讨论我根本看不懂的东西,最后深深的自卑。人家眼中各种基础中的基础我花一天都想不出来。而且这些大神说实话根本还远远不算大神啊!
话说我成为了一个学渣其实这根本不怪我自己,我觉得我应该算是一个学弱,之所以称之为弱,是因为我在大学期间已经很辛苦努力地学习了,真是刷夜刷的我肾虚,苦逼的经历我至今仍然历历在目,根本不堪回首。但是我之所以成为学弱,根本不在于我,而在于sb的大学教育(当然你可以找到我身边各种学的好的人,但是他们智力比我高,他们就算学什么都应该比我厉害),还有sb学校的课程设置。首先我tm傻逼的选了一个通信工程作为专业,首先通信这方面可以钻研的东西太jb多了,随便拿一门课你tm就可以干一辈子就是一个职业,你说我是苦刷dsp呢,我还是苦刷模拟电路呢,我还是苦刷单片机呢,我还是苦刷微波光通信呢,我还是苦刷电磁场理论呢,通信原理还要不要刷?这尼玛比都是什么玩意啊,之间没联系啊!你学好了这一个成为了神,其他的你也是个挂科的货!还tm有毛邓三军事理论四门课!几本书加起来一脑袋那么厚!闭卷得背下来!背完了有个jb用,最后抵得上敲几行代码么?
通信尼玛学的东西太散了,根本就是把我当螺丝钉来培养,最后我东一榔头西一棒子的辛辛苦苦学完了以后,下学期马上肯定得忘,我一个大一学生大二学生,我知道学这sb玩意有什么用么,不学到博士有用么!?根本没有人给我一个人生规划,我一个sb大一学生我知道刚上大一,我应该是苦刷c语言,还是广交朋友,还是辛苦学生会跑龙套,还是苦刷英语,还是苦刷数字电路啊,还是刷java啊?!
所以贯穿我大学期间我一直在想的事情就是,他妈我这个专业到底有没有一个“内功学科”啊?所谓内功学科,就是像金庸小说里所说得,练好了内功以后,所有武功都得心应手,乔峰用一套太祖长拳就可以打遍武林群雄。练好了内力,草木飞石皆可伤人,观察力,反应力,感悟力都会大幅上升,这就好像是九阴真经里的武学总纲一样。有一个目标,实实在在的,你去苦刷你就牛逼。天下武学唯快不破,你可以去练习快。健身你可以苦练核心,金融你可以苦学k线,会计你可以考CPA,计算机你可以学算法,美术你可以天天素描,主持你可以天天练声,都是内功学科,你好好练了,你整个专业都会提升,你以后肯定成功能挣钱。我tm通信专业我到底该学啥啊?通信工程没有内功课!
其他学校sb的课程设置拖累了我我就不说了,直接耽误我四年,我一个90以下智力的,能跟110的比么!他们大一就明白以后当码农天天刷C语言,其他科目水的一b,毛邓三全都挂,可是人家现在去苹果了呀,年薪一百万人民币呢。我其他科分数超过他们有个毛用!
——————————————————吐槽以后继续补充,sb大学永远吐槽不完——————
以下所有编程能力的境界都用游戏--黄金英雄坛说--的武功境界来表示,我觉得非常贴切
——————————————不堪一击——————————————————————
首先大学期间我是连200行代码都没写过,所有编程都是女朋友写的,所以不考虑。真正让我开始能够开始让我真正正视coding的是在研究生期间上的computer vision课,sb老师和sb助教留那么多作业差点逼死我,每周刷夜3天,每天睡4个小时,学校里那么多开放美丽的日本妹子我都没空泡,真是sb遗憾一辈子的事情。当时是用matlab做各种计算机视觉的filter,大作业是一个人脸识别,matlab是scripting语言,严格不算编程,但是也得敲键盘,但是当时我是一点编程还是不会,菜的一b,怎么办呢,还好我记得大学一个同学的毕业设计做的是这个,我就借过来,各种参考,不过那个是C++写的我愣是一点没看懂,还好它有个论文讲思路的,我就各种谷歌,把上面需要的东西都在csdn上幸好找到了各种写好的模块,我就挨句抄一下,然后在matlab的console里面试一下看是什么效果是干什么的,然后加到我自己到文件里,一句一句,就这样三个大模块,我就挨个抄啊抄,然后有时候对里面对if else,for什么的,改一下变量名字、循环次数什么的,最后勉强活了下来。
完成这个程序以后,我就对for loop,if else有了一个基本的认识。同时各种自己写的bug,得各种改,也对软件完成的基本流程有了一个基本认识。但是你让我自己写个什么基本的东西,我还是不会写。但是这个课让我对敲代码对恐惧心理这堵厚厚的墙,似乎有了一个小小的蚁穴。
——————————————毫不足虑————————————————————————
在那之后又上了一个DSP的课,大作业需要写一个filter,那是什么都没得抄,啥都不会怎么整啊,还好最后在老外同学一组的帮助下,他写框架,我写if else细节,完成了。还有一个什么project来的,我还是根本不会啊,太菜了,还好靠着同学跟学长要了一份去年的,我们一堆人抄啊改啊的,终于也算过关了。所以这个时候我的编程能力,就是说给我一个很简单的程序,我能勉强去看,也不一定看懂,我就只能一句一句放到console里去实验是干什么的,达到我的目的我就抄到我的代码里,然后最后把变量名字改了,免得老师发现是抄的。这个阶段对敲代码还是那么恐惧
——————————————不足挂齿————————————————————————
又过了两个学期,在##(以前都是用公司名,决定还是屏蔽了)实习的时候我才算是终于开窍了(2014年11月20日我是认为我当时开窍了。当然我的“开窍”对于大牛的开窍不值一提了),当时是做C#software developer,当时对于编程我还是一直有恐惧感。提一嘴当时的面试,由于自己的水平太次了,我面试了16次,被连续拒绝了15次,我当时我都不想活了。最终第16次的时候,##给了我offer,而且其中这15次面试难度之容易,跟一亩三分地真是没法比,我当时看了里面的各种面经,我连题目都看不懂,更别说想答案了,我这15次实习面试,难度真是超级低了,但是我还是真不会啊!
为什么第16次面试得到offer了呢?你可以说是老天眷顾,也可以说是狗屎运,也可以说是大公司对于实习生根本不在乎,能喘气就行,可是##也有另外两个组面过我我都跪了啊。是这样的,当时面试我的是一个中国人和一个阿拉伯人,面试就问了我什么是java里的多态,polymophsim,我事先在网上查了这个词因为前面都问我好几次了,然后就过了!(这面试是不是太简单了!)事后实习的时候我才知道,原来这个老中,原来80年代的时候是个高中老师!他辅导报志愿!他知道我们大学!我们大学当年高考分数堪比清华北大,然后他出国了,现在还以为我们学校还那么牛逼,于是他觉得我会很好,于是就要我了!而且他也是半路出家的程序员,他也就比我强一点,他也啥都不会(我至今对这个国人大哥非常感恩)!那个阿拉伯的后来我去的时候直接被裁了因为他太水了!你说我当时多幸运。
在##实习,真是能学好多东西,库里面各种看不懂的代码,老印的编程能力特强。我刚到第三周,我的老印manager就打算干脆给我一个contractor offer,我都高兴坏了他脑子肯定有问题(过了几年以后才琢磨出来他是为了办公室政治斗争的需要,你招的人多,你的leadership影响力越大)。但他说让我给他编一个程序,他不招不会coding的人,编什么我自己想,只要有用。我当时压力超大,就跟组里另一个老印研究我编什么,他就给了我好几个选择,我都没听懂,但是有一个是编一个windows后台软件,每天自动定时去删我们网盘里的log,好几十个g的他们自己手动删不过来(这就是一个普通大学课里大作业的难度啊)。然后我就赶紧周五晚上回家赶紧琢磨怎么用visual studio,然后百度找看看有没有类似的,因为我连基本的C#语法都不会,结果真在网上找到一个十几行的!!我就当天晚上以那个为框架,填充上肉,刷了一夜刷出来了!!然后我周六给manager发过去了!然后就是谈offer,结果发现我是coop学生,签不了offer,只好作罢了。当时第一版的程序收到了组里老印的嘲笑,bug倒是没有,但是及其简陋,各种烂,各种细节都没处理,碰上大堆大堆的文件就瘫痪。所以老印他给我充当了一个产品经理的角色,我就各种按需求改,第二版加上了各种功能。后来又有了第三版,跟第一版真是天壤之别,我也对产品经理,程序员的角色有了直观的感受。
这个过程一共四个月中,我对C#好感提升无限提升,我觉得里面各种写好的函数,直接调用各种强大好不好,写代码真是享受,各种windows功能我都能实现!对于编程的恐惧终于一扫而空!!!原来编程好像也不难嘛(是C#)。自信心也提升了好多。在这个阶段我终于能用最简单的C#语言编程了,我可以实现各种功能,只要我去谷歌一下怎么用。现在的能力就是对于IDE不熟,语言不熟,但是写程序还是一点算法不会,碰到大程序什么的肯定死。而且读别人代码的能力超弱,让我改别人程序的一个bug要了亲命了。美国公司的实习面试估计还是一个通过不了。
——————————————初学乍练——————————————————————
##实习结束以后,大公司光环的照耀下,正好在师兄的内推下,找到了现在这个正在扩张的组做测试,所以面试时候一点技术面没有,就是看我的态度人生观人品什么的,不出意外拿到了offer。从此我就做起来万年测试了。这个期间也写一些代码,但是全是把你熟悉的写好的函数按你想达到的测试顺序放到你自己的函数里,所以一点编码能力不需要,全看你对写好的这些函数熟悉不熟悉。但是呢,现在有了充足的时间,稳定的生活,也让我终于能够有一个闭关的时间,充分的苦练内功。这种大块的连贯时间,我决定利用好,目标是从半路出家的码农成为一个真正的算法程序员。在这个期间,一亩三分地一点没停各种看帖,终于看明白了里面说的半路出家程序员应该怎么学习的帖子,以后决定照着做。
首先我上udacity看了里面的introduction to cs的免费公开课,(真恐怖现在居然收费了!)发现python居然比C#更简单!感慨大学时候如果学python我现在是不是都很牛逼了。prententiously觉得讲的东西很基础自己全都懂,作业努力思考也能做出来,所以就全都快进着看的。
然后我就决定我以后不走C/C++的路,因为太难了我肯定学不会的,所以我就决定以后走java的路线了。java和C#语法好像啊,而且各种库都是写好的,就业好像也比较广,一亩三分地里的帖子也是那么写的,于是我就开始重新看head first java这本书(最好别看中文的,翻译的很烂还有很多错误)。
话说这本书我一直随身带着,大学毕业我以后还带到了加拿大,几次搬家都没扔。大学时候学过一遍,但是真是看不懂听不懂project不会做,全是ex搞定的。现在重新看一遍以后惊为天人,居然各种看懂了!全归功于##实习C#经历,语法太像了,很多用法和特性都在##数据库里看过,这种感觉太爽了!各种不懂全都现在ber一下懂了!白天上班,晚上学英语,睡前才能找时间看上十几页。看了大概2个月,现在基本重新“复习”完这本书了。不过后面的两百页我就又读不懂了,因为没有相关经验我完全不知道它在说什么。同时自己买了一本SQL的介绍性书籍,叫做A Manga Guide to SQL,是一本关于SQL的漫画,给自己这个半路出家的扫扫盲。这个阶段基本上还是代码量不到1000行,但是对于一个语言的基本特性有了一个深入的了解。也对自己的未来有了一个规划。但是面试还是过不了的。
——————————————勉勉强强————————————————————————
这个阶段终于明白了原来cs的核心内功学科就是算法!买了两本书,一本是Data Structures and Algorithms in Java,推荐买二手和盗版,第二本就是一亩三分地版主推的,不说了对我这个智力的没用。上了大家都推荐的
Berkeley CS61b:http://www.cs.berkeley.edu/~jrs/61b/.(现在已经换老师了,youtube上还能找到老老师的课)
现在刚开始听这个课,发现老师讲的超级好,不愧是世界顶级名校的老师,真是太清晰太明了了,跟我大学时候上的java课完全不能比,看来我没学好可能还真是怪老师了。这你妈一节课就能把所有重要概念直接印在你脑子里扫盲成功了,我大学时候上了半学期大概也就是cs61b一节课的内容,而且我听得云山雾绕的。特别有意思的一点是,这个课的老师还在页面上特别感谢了四个中国同学,他们组成了一个叫做“超威蓝猫”的team,每次想起来我就感觉好好笑啊,于是我赶紧上b站撸了两集超威蓝猫。楼下的帅哥回复我说多看开源,这个真心是个丧心病狂的建议,但是还是特别正确。所以现在这个时候就得注册一个github账号了,首先你得有一台mac。为什么我说mac呢,因为windows上设置环境变量的恐怖记忆我还有啊,大二整整一下午我在学校机房里,试了整整一排机器才调好,我当时死的心都有了。现在的mac都自动带的调好了啊!需要强调的是,这门课的作业和lab超多,不过一定要扎扎实实的全都自己做了啊!很痛苦,但是学完以后进步超大。
——————————————初窥门径————————————————————————
智力太低,完全没法跟那些转专业的一个月突击搞定FLG offer的那种牛人比。我就是一个智商90以下的脑残,所以还是慢慢来。学cs61b的时候,我就看那本教科书,发现好多东西咋都看不懂,深深怀疑人生。
这里有个我的心得体会,就是给大脑足够的休息时间。有的时候你感觉一个东西怎么都理解不了的时候,就休息两天,两天之后再看的时候就会发现突然能看懂了,哪怕这两天啥都没想。我觉得是因为新的东西没有在大脑里建立足够的回路,神经元什么的,所以思考起来很困难,毕竟智力低ram不够用。当过了几天起码建立了一点神经元以后,再去思考,有了神经元物理的支持,就能容易一些。
还有就是有时候东西你刚学,很难压力特大,你不需要怎么去拼命理解。你首先大概稍微理解一下,这样大脑就会睡觉的时候慢慢的建立一些神经元去储存这些知识。这个时候你是不理解的,但是等到建立好了以后,下周你又回来看一下这个问题,你看起来就会轻松好多,到时候就会想到当时根本没琢磨过的问题,这样大脑就再在这个神经元旁边建另一个节点,大脑会帮你把他们联系起来,就像一个链表一样。最后关于一个知识点的神经元越来越多,你就越来越强了。所以最重要的事情就是先建立第一个神经点,所以说入门就很重要了,入门的时候别追求那么难的,先上路了再说。我也真是惭愧,hash table看完第一遍以后,休息了整整一个月以后才渐渐明白到底意思,建立了第一个节点,之后就感觉好懂多了。
我也终于知道了以前为什么我上大学的时候编程学的欲仙欲死了,原因就是tm老师教太烂。老师的教材选择上有问题,讲解有问题,导致了学习曲线陡峭的一逼。聪明学生直接碾压了陡峭的曲线,我这种sb一下在山脚跪下了。近半年来遇到陡峭的学习曲线好几次,但是我也终于总结出来了经验,编程这个东西虽然难,虽然陡,但是我们可以绕路走。方法就是多看几本参考书。这个就相当于你修炼九阳神功,直接给你你也看不懂啊,上面的经脉全是不通的,一点内力没有,怎么游走奇经八脉呢?所以方法是先找本简单的基本内功看一眼,学学术语,得点气感再说,然后看看全真心法少林心法,最后九阳神功的曲线对你来说就没有那么陡峭了。
学完cs61b,他的project我觉得不需要做,对我这种智力的人来说太花时间,而且白天上班没精力,所以直接跳过。学完了以后教课书也看完了,我有一种身体里有东西在萌发的感觉。其实我觉得最最最有用的东西就是单链表和双链表,其他所有所有的东西都是链表的进化体而已。入门最重要的就是链表,一旦建立了这个思维,其他的都简单了好多。整个数据结构书,我觉得就是一本链表使用手册。我就又把head first java看了一遍,感觉体会又深了一些。我也是速度很慢的人,这个时间花了我半年左右。真丢人啊,但是感觉到自己慢慢进步,还是挺有成就感的,起码原来我这个EE行业的就没学过链表呢。
——————————————初出茅庐————————————————————————
这个时候我听网上的人说,就可以开始刷题了,至于咋刷,我一点头绪没有,说起来挺可笑的,就是去刷啊。但是怎么进这个门槛,就是一层窗户纸我就咋都捅不破,智力低就是别人说“你就xxxx”,我就是听不懂。我看了好多帖子,很多人说可以去刷那本最简单的Programming Interview Exposed,我就买了本读完之后真是云里雾里,根本不知道他在讲什么,试着去背所有的题和答案也完全不知道问题问的是什么,东西也不系统,联系不上。我都灰心死了,他们说简单的都这么难,那leetcode我不是要被弄死?(事实证明,上完cs61b,直接上leetcode,扯别的一点用没有,因为他知识点系统)
后来幸运的是我的一个同学他带着我捅破了这个窗户纸,也没啥,就是带我注册了leetcode的账户,然后给我展示了写一道最简单的题,让我终于明白了什么叫做刷题。于是我就按照tag来刷,array的全来一遍,链表的tag,树的tag,bit运算的tag。每个tag里从简单的开始做。里面array的我觉得是最难的了,因为这个时候啥都不懂,脑子也根本不会思考。大概一道easy难度的8行代码左右的题得做一晚。。。我就先看题,完全没思路,然后挨个讨论区里java的都看一遍,几种高票思路全都好好琢磨一遍,然后把它整理到我的github上。每天晚上两道题雷打不动,白天上班有时候微微琢磨琢磨。就这样坚持了整整4个月,每刷完1个tag就看一遍我的github这个tag的题复习一下,不然完全没印象记不住。脑子笨一定要多复习啊!(我同事1个月就特么刷了我半年的量我都服气死了),终于把简单和中等都刷完了,截止当时是240题。这个时候脑子清楚太多了。然后又花了1个半月又刷了一遍这230题。然后又刷了一个月复习一遍。这第三遍的时候,就基本上脑子会思考了,也可以能够多种思维想问题了。值得一提的是,在刷完了第一遍的时候,你可以去网上找一个CMU08722的刷题神课,只有课件而已。说是神课,是因为他把数据结构总结的特别通顺连贯,有一种拔火罐刮痧的感觉。
然后这个时候重新掏出Programming Interview Exposed还有cracking code interview一看,真的是秒杀,2-5小时一个章节。两周就搞定了两本书,有种九阳神功练完以后看乾坤大挪移瞬间练成的感觉。但是如果你反着练的话,后刷leetcode的话,就相当于苦练乾坤大挪移最后内力不足气血攻心而死了。
因为刷完了leetcode还有cracking code interview,(PIE我觉得没用),我也成功的实现了第一次跳槽。我真心真心觉得我大学的时候怎么没有leetcode!真的是太好了,我真的感觉到了一个内功学科的好处,我就可以苦练苦练内功,最后飞花走石都能伤人了。刷完以后你会感觉做码农的话,没有任何东西能够难倒你了。同时你对java的各种结构各种语法都手到擒来了,写小程序啥的没有任何问题了。
这个时候用金庸小说打个比方,你已经相当于跟着马钰在山顶练了两年全真心法的郭靖一样,内力练得很扎实,耳清目明,对身体各条经脉(map,queue,tree)和各种穴位(8种primitive)都熟悉了,每条经脉中的内力搬运(bfs,dfs,dp,binary search)都能做到,你现在就有了修炼上乘武功的基础。由于你练的是无属性兼容性特别强的道家玄门正宗心法,可塑性非常强,不管是以后去搞蛤蟆功(cloud), 还是先天功(AI)都可以,所以这个时候华山五绝这种高人(如FAANG公司,bat),看到你就会特别喜欢和欣赏,会收你做入门弟子,你的内力根基越扎实,被纳入门下的几率就越大。所以我建议这个阶段,要内力游走365处穴道,运转3个周天才行(刷365道题,刷3遍)。
——————————————略知一二————————————————————————
可是万一这一年内你没有成功入了五绝的门,你就相当于失了元阳,破了童身(应届校招),基本上与绝顶武学无缘了。这个时候你就得苦逼自己闯荡江湖了,相当于刚走出大漠的郭靖,连沙通天门下(不知名小公司)的黄河四鬼(野鸡面试官)都能虐你,嫌弃你这个扫堂腿(reflection)都不会,小擒拿手(servlet)都tm不知道,真垃圾,你也配是马钰道长教出来的?!(你个211毕业的居然连怎么写个轮播图都不知道?!)。因为你虽然有扎实的内力基础,但是这些low人他们不care啊!以上都是我的亲身心酸经历。
为什么说是心酸经历呢?上文不是说我已经顺利地跳槽了么?是这样的,这个时候我终于从一个通信行业的公司,彻底跳槽到了软件公司。但是我原来是做测试的,现在还是做测试,不过是从通信那套改成了软件行业这套。这个公司比较小但是是个nasdaq上市公司里的该领域龙头,其实还是很棒的。但是做QA呢,每天都是在东一榔头西一棒子,客户让干啥你就干啥,经理让你干啥你就干啥。我觉得在小公司里做developer的话,真的会学到超级多东西。不过作为测试,真的是有点灾难,每天都是在各种杂事,各种紧张的deadline,除了一点selenium啥都学不到。
现在干了不到一年呢,我就准备再次跳槽了,这次我决定了,我需要彻底的从qa转成开发,要彻底投身互联网!我决定用下班时间,3个月时间,系统的学习一下码农开发的知识。可是有好多好多东西要学啊怎么办,我发现网上人也是各种瞎jb说,特别是在知乎上看到人们说的自学教程,太多人说了你不知道听谁的,虽然说有用,但是效率实在太低了。比如说本来一晚上可以差不多入门的东西,没人带的话,我只能自己去看书,最后迷失在知识的海洋里,花半个月达到1晚上的效果,而且白天上班都很累了好么。比如说从最基础的html学起,人们说:哦你就去看head first html吧。这根本就是不着调,绝绝对对的事倍功半好么!
现在我是什么个情况呢,就是跟刚出大漠的郭靖一模一样!空有一身还凑合的内力底子,但是招式完全不会(大学老师垃圾的跟江南7怪似的,根本没教会我啥),所以逢人就被虐。而且我的智力也跟郭靖一样,特别低只有90,学习东西速度特别慢,领悟力和举一反三的能力特别差。反正这个阶段学习非常苦闷,就是在瞎学,效率很低。我觉得这一阶段的最最难的地方,就是找对学习路线,没有学习路线,根本不可能入行。
——————————————普普通通————————————————————————
幸好我这个时候我偶然得到了一个至宝!就是一套黑马培训班的视频!它是个90天训练集中营,都是那种中专厂工的学生上的,难度不高,适合我这种智力,所以听起来感觉特别顺畅!全栈的java培训课,啥都能学到,特别好!关键只要按照老师讲的进度学,就能通往罗马!其实不是说黑马培训的老师讲特别好,其实其他培训班的也不错看其他的视频也行,有的是。所以我这里不是广告,我是想描述我这个智力的,我这个水平的人该怎么学习。于是为了上完这套课加上现有测试工作学不到知识,我就裸辞了,决定死磕完这套视频。
首先你不一定需要精通前端,但是你现在的目标是Java EE Developer,你未来是应该先入门后端,然后进阶全栈的,前端你起码要知道,你才能明白到底后端是咋回事。而且前端的技术特别多,眼花缭乱的,你把这些东西都粗略的撸一遍,你的简历上就能写一大堆乱七八糟的,看起来贼炫!过HR那关会容易很多!按照以下顺序来食用效果最佳:
HTML:前端的起源,宇宙的奇点,一切从它开始。对于一个刷过leetcode的人来说,实在是简单到发指。学会就是一天的事情!千万别被前端的人胡扯吓到!前端没有任何可怕的东西,没有任何门槛!就是个熟练工种!(除非他发展成了全栈)不过这里我不建议一天搞完,因为我这个智力一天学会的东西我记不住。。。别看任何书,太浪费时间了,不值得。
a. 首先花一天到三天完成这套视频(愿意上别家的课也无所谓),免费的,
http://yun.itheima.com/course/183.html
b. 完成这套寓教于乐的游戏化html教程,最后还给你个证书。他可以ipad手机都可以
https://www.sololearn.com/Course/HTML/
c. 撸一遍W3School的html课程(中文的是W3CSchool,但推荐英文版,毕竟我在加拿大混,不知道那些专属名词怎么说怎么在面试中跟人愉快地聊天?),
https://www.w3schools.com/html/
CSS:HTML进阶,让html更好看,相当于学完从1数到20以后的10以内加法。对于一个刷过leetcode的人来说,实在是简单到发指。学会就是一天的事情!连黑马这种给三本厂弟讲课的都只用了半天而已。当然了,学会是一天的事,但是能做好前端,css就是一个非常吃经验的让你调色调版型到吐血的东西。我是走java路线,所以不需要精通,知道些基本的已经足够足够。
a. 去黑马官网找一套css的课程(你如果有整套培训班的课程,这是第二天的课,但是我是搞的盗版的,我不想去坏人家生意,毕竟得到了人家的免费知识了已经心怀愧疚)
b. 完成寓教于乐的游戏化html教程,最后还给个证书,他可以ipad手机都可以
https://www.sololearn.com/Course/CSS/
c. 去W3School撸一遍css的东西 https://www.w3schools.com/css/
JavaScript:让html出现动态效果,相当于学完从1数到20以后的10以内减法。对于一个刷过leetcode的人来说,实在是简单到发指。学会就是一天的事情!(但是当然了,现在JS出了ES6甚至ES7,衍生出来了React/Redux/Angular/Node/Vue/等等等等的巨复杂的东西,让前端能变成全栈,js出了很多神奇的用法,可jb难了!没有五六个月入不了门!)我这里是java路线,所以只需要掌握ES5。争取一天到三天搞定!
还是老三样,a黑马或者其他家的1天视频 bSoloLearn拿个证书 cW3School撸一遍
JQuery: JavaScript的进阶省事版,相当于网络玄幻小说里别人发个火球风刃术还需要念两秒魔咒,你学了JQ以后直接瞬发风刃火球了,干死他们。
贼简单(当然我是指达到入门水平,我要搞java,这些都是了解就行),还是老三样,1到3天搞定,a黑马或者其他家的1天视频 bSoloLearn拿个证书 cW3School撸一遍
BootStrap:前端的集大成者,这是一套模板,以前吭哧吭哧做半个月的网页,现在只需要选一套模板,好看,行,导入,ok,做完了!
贼简单(当然我是指达到入门水平,我要搞java,这些都是了解就行),还是老三样,1到3天搞定,a黑马或者其他家的1天视频 bSoloLearn拿个证书 cW3School撸一遍
到了这里,前端的课告一段落,你可以已经是“面向简历编程”了,简历上多了一堆唬人的词了。后面等你找到工作自己没事闲着的时候,可以研究一下JSP(老技术,贼简单,就是个熟练工),Vue/React/Angular,前端的大框架,真正的博大精深的练几十年的全家桶级别的东西,但是我现在就是想找个后端工作,我没这个精力学会他们
终于开始期待已久的后端的床戏了:
MySQL:这个是最起码的东西,在武功境界还是“初学乍练”的时候,就已经掌握了基本的语法知识。这里呢,需要起码掌握“多表”的知识,说白了也是很简单的东西,如何建立个1对多的表,如何建立个多对多的表。半天时间可以搞定,当然熟练问题得在以后工作中逐渐磨炼。
JDBC:相当于Java后端Developer的扎马步,根基中的根基,不能再更重要了,一切从这里开始。需要MySQL先学完才行。简单说来,就是程序员们懒,本来写java代码写的好好的,突然让他们切换到别的环境里,特别不爽,而且MySQL的语法经常记不住,况且SQL还有好几家竞争,语法还不一样,贼烦。所以JDBC就是用Java代码,实现SQL那套增删改查的东西。
所以花个3天时间,a黑马那套一天的速成视频,b网上找个博客或者类似w3school这种非视频网站,照着撸一遍
Servlet:后端的入门筑基心法,后端的万物起源,一切噩梦都是从这里开始,不学这个,根本不懂框架是干啥的;不学这个,你也不知道Java EE到底是干啥的。很惭愧我也是智力低,学了一周半最后学的半生不熟的,就是懂了到底后端咋回事,熟练是一点不敢说的。首先要掌握Tomcat软件的用法,大概半天。然后就是各种熟悉这个软件。
这个要学好久,学法:黑马或者找个其他的视频吧,看非视频的网站是肯定学不会的。这个得看着视频,一步一步照着老师讲的亲自去敲一遍,试一遍,不然这里非常博大精深,前面不自己动手敲,后面就彻底跟不上了。只有掌握了Servlet,你才能去理解框架。
还有一个网站还不错,难度不高,可以看完一些视频以后看一看,当做复习用
https://www.javatpoint.com/servlet-tutorial
之后建议学习两个武功:
hibernate,相当于古墓派的天罗地网掌,江湖上很流行的武功入门大路货,有一点输出威力,但是最主要的练习了你的轻功,让你轻身提纵,爬墙越房(增删改查sql数据库)的速度提升了,而且连带着你也顺手复习或学习了底层的jdbc和mysql。这里也可以学习其他的DAO层框架,主要是看你当地流行什么,我这里就流行用hibernate。好像国内很多公司也用batis,mybatis,Spring Data JPA之类的,其实学习哪个都可以,主要是找个教学视频多的,或者说是你能看懂的教学视频,任意一个都行。只要学会了一个,其他的都能触类旁通,他们的目的都是一样的,只是用法有些许不同,就相当于一个蛙泳,一个狗刨一样,都是游泳,一个是蛙式游法,一个是狗式游法。
这里我很推荐黑马老师的一个免费课程,这个老师讲课极其清晰:上完要花3天的时间。之前感觉这玩意好恐怖好难啊,所有公司面试都要,到底是啥,面对未知的东西很恐惧。上完课以后发现窝草原来就是这么个破玩意啊
http://yun.itheima.com/course/203.html
Spring,也是江湖上的大路货,相当于绝情谷的阴阳倒乱刃法,它把class之间的关系都颠倒了,本来刀是刀剑是剑,现在class之间都靠互相注入,又有一堆aspect之类的新名词,不伦不类的概念,弄得刀不是刀,剑不是剑的,让敌人眼花缭乱,一看好像特别屌!其实对你这个有内力基础的来说一点都不难!根本不需要畏惧!就是靠熟练,耍两把武器别把自己轮着而已!
这里还是很推荐这个老师的Spring课,和hibernate是一个老师,讲的非常清晰,上完要花4天的时间
http://yun.itheima.com/course/215.html
学完了Spring以后,让你知道了怎么把体内的内力能够运转出体外,而且Spring是拿着兵器的,这是套刀法,有了杀伤力你才能行走江湖,所以这个是必学的!
学完了阴阳倒乱刃法之后,可以学习进阶的丐帮-奇门三才刀(Spring MVC,MVC对应天地人三才,三才生五行,五行生万物,编出一切互联网,所以是个挺精深的刀法),田伯光快刀-狂风刀法(Spring boot,快速开发省去繁琐的Spring配置)。学过程中把遇到不会的东西都查查,扫盲一下,基本上就把java ee东西学会了,剩下的就是熟练问题。但是其实一切东西的熟练问题自己在家都很难搞定,这个不靠上班是很难练习的。Spring这套东西发展了这么多年,实在是太多东西了。所以这里我是看了好多好多的博客,相当于别人的武学心得,才逐渐的让自己理解了一些。
这个时候才终于有能力看开源项目了,也有必要去看一套Spring基础上的开源项目了,研究他们的后端是怎么写的。我是看了一个Spring Boot + Spring Data JPA的项目,我就从它的Rest API -> Service -> Repository -> DTO -> Domain -> Mapper -> MySQL这个线,一点一点捋的,比如有30个API,撸了这么三十遍以后,对后端怎么搞,有了一点点概念。至于熟练,是以后工作中的事情了。
这个阶段花了我full time每天从早到晚整整4个月时间,这套东西只是了解还是半生不熟的,没啥自信,Java EE也就达到了个实习生的水平。
——————————————平平常常————————————————————————
搞定了上面这套以后,我终于靠着花里胡哨的Spring招式,还有扎实的leetcode内力,找到了一个在加拿大还算有点名但北美没名的三流公司Java Developer工作!我这个肥猫智力的人,终于花了几年功夫,从通信工程 -> ECE 硕士 -> 通信行业测试 -> 软件行业测试 -> 互联网开发,终于走通这条线了!笨鸟慢慢吞吞的达到了本科聪明的同学刚毕业的水平,落后了我的同学们5年!不过我坚信以后会苦尽甘来的!
这个时候,开始争取成为一个越来越强的Java Developer!
有一本神书,或者说一门神课,对于cs专业的同学们肯定都看过或者上过,就是Design Pattern。美国的公司在面完算法以后,很喜欢聊天聊这个东西。当然了,对于很多30天生物专业转cs还搞定谷歌offer的大神们来说,就是一本厕所读物,读一天就扔一边去了根本不用细说。我本科学到的通信工程啊没上过这个课!!而且在武功低两个境界-“略知一二”以前的时候,我这个90的弱智还真是看不懂啊!
为什么这个阶段能看懂了呢,因为在上一境界-“普普通通”的时候,会接触到各种框架,其中就有比如spring声明的class都会是默认singleton。还有什么proxy pattern,factory pattern之类的。逐渐的好像有了点领悟,但是具体咋回事真不懂,人家一说我哑口无言,但是起码听着耳熟了,没那么恐惧了。也就是我一直强调的入门了,脑子里有第一个神经元了!
这个阶段终于有能力看懂这本书了《Head First Design Pattern》。HFDP这本书我早就有了,原来我是真看不懂就扔到了一边,现在我是边读边不断的“哦”,“原来如此!”,“soga!”,“妙啊!”,有种欲罢不能的快感,真是高屋建瓴啊!原来之前说的一堆各种模式,是这么回事!现在能看懂了!
此时此刻的感觉,就相当于令狐冲在思过崖刚刚学会了五岳5个门派的剑法,但是都是囫囵吞枣,乱七八糟的,只知剑招,不知道这招剑法为什么要这样使,什么时候使用华山的有凤来仪,什么时候该使用衡山的回风落雁,怎么把剑法使得更有效率。这时风清扬突然出现!掏出了一本Head First Design Pattern独孤九剑!就像一条细绳一样,把脑中散乱的珍珠,给串成了一串又一串。告诉你什么情况使用破剑式(singleton),什么时候使用破鞭式(factory),什么时候使用破刀式(proxy),什么时候使用破箭式(Observer)等等,真是高屋建瓴。你以后看到用剑的就知道它的破绽可以这么出招,下次看到用刀的就知道怎么出招应对,人家都给你总结好了!学完设计模式,令狐冲一下子从30招就被田伯光虐了,变成了能打败田伯光了!OOP能力一下提高一倍!
当然了我智商就90以下我没令狐冲这么聪明,这本书只能让我入门,以后独孤九剑想要用的好,必须经常和人切磋武艺(多看别人的code)才能越来越熟练,熟能生巧。ps:这本书一定要尽量看英语原版啊!因为汉语翻译的真是太垃圾了,翻译完了还是人话吗?这本书我每天地铁上看3个小时,花了3周看完的。
——————————————平淡无奇————————————————————————
这个时候我就做了很多研究,想要在java的造诣上更上一层,于是打算看完以下的几本书
Core Java Volume I, Java核心技术,卷1:
如果往好听了说,那就是“鸡肋”,如果难听了,那就是“垃圾”,而且是垃圾中的垃圾,非常sb的一本书。看1000页的破书纯粹是浪费时间。
刚学java的人,会被这书里东一锤子西一棒子的讲法绕的不知所云,看完以后根本没学会咋编程。反而学会了java的人,看这本书就是随手一翻,根本学不到东西,因为讲的东西都特别浅还特别偏,随便谷歌百度个博客都比它讲的好。
有人说它罗列了这么多没用的东西,可以当个工具书,字典书。我觉得它根本不配当工具书,人家谭浩强的c语言写的再烂,但是里面例子多啊,照着写啊可以起码学会个for循环吧。而且人家谭浩强的书里大把大把的表格啊之类的可以用来查字典呀,比如一个变量前面一个*,**,***,****都是啥意思。你这里面啥都没有呀!
我非常非常痛恨这本书,因为我发现我垃圾的大学老师就是这么教我java 和C的!怪不得我一直没学会。这本书其实真正的用法是给大学里没有进社会当过实际码农的sb留校老师用来写ppt用的!!每一节都可以直接复制粘贴当ppt!里面大量的文字描述还有琐碎知识点可以用来考试!期末考试题我都给你想好了:第一题:请列举reflection的4个优点。期末考试划重点,你就背诵默写吧。至于你背完了反射的4个优点以后会不会编程?那sb老师可不管,反正学校的教学大纲达到了。第二题:写出ArrayList的常用method以及用途,每个2分,本题一共10分。老师:哈哈这回我不是让你背诵了吧,理解的人都会懂。尼玛我理解了我也写不出来呀,我们都是IDE自动弹出来的呀!学生学的时候,又只能硬背了,至于背完以后ArrayList会不会用,肯定还是不会。
这书怎么脑残法呢,打个比方吧,相当于大家都是用一门《笑傲江湖》的语言来编程,这本书经常没事写一些犄角旮旯的东西凑页数,
比如:if (笑傲.正派.五岳.衡山.刘正风.get徒弟().contains(“向大年”) ) 输出(向大年.toString()) 。这种知识点非常生僻,程序难度又非常弱智,然后忽悠了半页向大年为啥叫这个名字的历史让你根本不知道它到底在说什么。如果我是会编程的人了,我平时都是用“令狐冲”这个library的,谁平时编程会用到“向大年”这个800年没人用的library。或者我是个菜鸟,你一顿呼啦啦的这么多乱七八糟的人名都是啥呀,到底咋写程序呀,我都懵逼了。所以新手老手看这个书都学不到东西。
最可气的大量篇幅跟c++对比,有用的java的内容篇幅就更少了。这本书我是在地铁上每天3小时,每天200页,看了1周半看完的,因为有时候地铁没座。
Thinking in Java:
花多少篇幅写这本书都不嫌多。这本书把java的学习上升到了一个哲学的高度。从根本上阐述了为什么OOP有别于其他的语言。
所谓朝闻“道”,夕死可矣。OOP就是传说中的“道”,OOP生太极,太极生两仪,两仪生四象,直到生万物。OOP就是那个万物起源,最根本的Object,万物皆由Object衍生而来,所以才能Object oop = new 万物(),整个世界都是一种多态。
过去我们一直在勇猛精进,学了一堆乱七八糟的东西。看似法力愈发高强,实际上我们一直忽略了学"道",夯实自己的道基,一直是修小术不修大道。长久以后,就会造成自己道基不稳,心魔入侵,走入邪途。所谓的“道基不稳”有些抽象,其实是你学了太多东西,没有一门自己的根本语言,根深蒂固地用以统合自己所有的知识,抽离出其中最根本的最有用的万变不离其宗的东西,成为一棵牢固的大树,形成自己的<核心竞争力>。读完这本书,其实并不能提高你编码的速度,但是它为以后的进阶,提供了指引的方向。这本书就相当于九阴真经的总纲,虽然讲的都是天之道玄而又玄的道理,没有具体武功。可是没读过的周芷若和读过的古墓传人黄衫女,同样是练九阴白骨爪,前者练的鬼气森森,后者像是仙女下凡,对招起来后者完胜。
又好比慕容博和萧远山,苦练几十年少林72新技术新轮子,虽然都成了大高手,其实他们都是在反复刷同级别的东西。眼中只有杀人技,却对扫地僧偷偷放在他们秘籍前的Thinking in Java视而不见。殊不知在编程中,我们大多数人常常抱着一颗“功利心”去学东西,少有人天赋异凛从小就喜欢这行的。所以我们就需要这本经书,化解我们心中的“功利”与“戾气”,静下心来,化浮躁为喜好,真正的喜欢上编程,破除码农之路上的<知见障>,走上大神之路。
这本书我觉得在这个阶段看非常好,读起来非常舒服,流畅。有的东西虽然很简单,但是作者从一个你意想不到的角度去描述,让你加深理解。我个人觉得起码起码需要掌握了MVC思想以后才能看的懂这本书,最好是读过了Head First Design Pattern以后食用效果更佳,不然会非常晦涩。当然了智力高的人(那种大一就看算法导论的也不知道是装逼还是牛逼的人)随时都能看。但是我这个人上大学时候被陡峭的学习曲线深深地伤害过,所以我特别喜欢厚积薄发,平缓的进阶。打个比方,同样是练九阴真经,根基极深的王重阳读了一夜九阴真经就彻底学通了,武功极高的黄药师听老婆阿衡背诵一遍以后就能武功大进,编程大神洪七公和一灯大师武功尽失(C++大神转Java)学了一年就能重回巅峰,可是梅超风这种根基不深底子不厚的,强行练了5年把眼睛都tm练瞎了! 这本书有机会我还会2刷以至于3刷的。
Effective Java:
如果说Java是一本博大精深,可以练一辈子的九阳神功,那么HeadFirstJava就是武当九阳功,由新手张君宝悟出,适合新手,占一个“纯”字,把java最纯的特性讲给你让你入门。Thinking In Java就是少林九阳功,由已经是大高手的无色禅师悟出,占一个“高”字,把Java最精深奥妙的特性讲给你,起点就高。那么Effective Java就是峨眉九阳功,由武林世家出身的郭襄悟出来,其从小对各种武学都耳濡目染,横向一对比,把Java的优缺点都烂熟于心,占一个“博”字。
这本书其实应该有一个接地气的中文名,比如《老程序员不会告诉你的78条道理》,《住户验房时必须检查的78件事》,《震惊!好文必看!78条让你震惊的编程禁忌》这么一看书名,你就大概理解这本书讲的是什么了。这本书确实用处非凡,不过我感觉它的主要用处是在于别人给你code review各种挑刺时,你觉得你个sb你懂个屁啊,于是从书里拿出来一条糊他脸上:书上就这么写的!
我个人觉得这本书不是很适合我,或者说是不适合现阶段水平还低的我。因为作者是个大神中的大神,各种参与设计java,设计google的底层框架,业界混了太多年,是个和郭襄一模一样的人,对刀枪棍棒都耳濡目染,这是他的毕生感悟。我读了一遍感觉共鸣感非常低。我打算再过几个境界以后重读这本书。但这本书绝对是必看的。
——————————————粗懂皮毛————————————————————————
回归现实世界,之前说过了,破了童身,无缘五绝的人,就不指望能去重阳宫这种好地方了,既能学武,又能学道,老师都是江湖上赫赫有名的高手,一不小心学成先天功那就是直奔先天高手去了,下山混江湖(创业)的时候人人尊称一声“道长”,混江湖的时候还有各种师兄师弟搭把手。亲戚一问你在哪工作你可以自豪的说:我在重阳宫上班!(哪怕你在里面只负责烧火)
没办法,谁让我智力低呢。沦落江湖的我,终于被一家三流镖局雇了,做一个全职趟子手(junior developer)。每天就是跟着老镖师(senior developer)押镖(写业务代码)。刚开始走镖的时候负责一些小活儿,比如喊路让行人借过。再后来解决几个小毛贼(简单的ticket)。得些江湖经验,比如走镖的时候要记得吃饭银针验毒(看log研究bug原因),放对儿的时候小心被对方的石灰迷了眼睛(正确理解ticket让干啥,别干了几天发现跑偏了),等等江湖大侠们碰不到的事情。
日子就这么过去,进阶道路现在看起来,应该是
趟子手(junior) -> 镖师 (senior) -> 镖头 (team lead) -> 总镖头(department lead / CTO)-> 地区瓢把子 (开源社区或者这个领域有一定名气) -> 总瓢把子 (业界赫赫有名)
这个时候终于算是入行了,至于以后如何进阶成为码农中的最强者,我发现此时其实有两条路。码农其实很像火影忍者,要想成为影,隐隐有两种码道(忍道):
一种是三代火影和大蛇丸似的,力求学会天下各种忍术(技术),一看到新语言新技术就扑上去玩一玩,不断去尝试新的忍术,研究新的禁术(造轮子),今天新出了scala试一试,明天玩一玩go,大后天研究研究swift,最后成为忍术博士。火遁·火龙弹 + 土遁·土龙弹,两个B级忍术合一,能成为S级忍术。你掌握的技术多了,了解的领域广了,土遁+风遁+火遁 = 无敌的尘遁。
一种是鸣人和佐助似的,忍术不要求学会多么多,而是把仅会的几种忍术练到极致。查克拉质变练到极致,再形变练到极致,两个都极致了以后再二合一。比如鸣人,螺旋丸 -> 大玉螺旋丸 -> 超大玉螺旋丸;风遁·螺旋丸 -> 风遁·螺旋手里剑; 最后二合一,超强的风遁·超大玉螺旋手里剑。比如佐助,千鸟 -> 千鸟流 ;千鸟千本 -> 千鸟刃 -> 千鸟锐枪 ;最后二合一,雷遁极致:麒麟。
我觉得我这个人对于新技术新语言兴趣不大,不喜欢没事造轮子,配置个新环境就要死要活的。所以我的码道,应该是第二种,将我现在会的Java领域的研究的更加深入,达到Java遁的极致。
——————————————半生不熟————————————————————————
漂流了这么多公司了,我领悟出3条在加拿大当码农的职场至理,算是我的毕生心得体会了。这3条至理是三个大方向,是根基中的根基,我觉得就跟牛顿三定律一样,看起来就几句话,但是可以延伸出无穷无尽的东西,具体如何延伸,就是见仁见智的东西了,放到网上供后人参考:
1.没有任何问题是解决不了的。
不管是什么技术难题,沟通不足,没有资料,水平不行,这些东西统统都是可以被解决的。只要给足够的资源/重视/时间,全都不是问题。
我自己是这么实践这条的:我碰到一个东西被难住了,缠住了,千万别着急上火,因为最后肯定能解决。码农本就苦逼,你再急,到时候秃顶了咋办,过劳死了老婆孩子咋办。碰到难题,马上第一时间跟你的经理反应,到时候他会给你建议/帮助/别人帮忙/资源/时间,别怕找人帮忙抢了你的功劳,或者别怕找经理要资源影响你的业绩,其实你不吭声,到截止了你耽误了事才是影响你的评价的。最好是你跟祥林嫂似的见到个人就一顿吐槽我碰到一个老难老难的问题了,人家可能碰巧一句话可以给你解惑(你赚了),或者人家感觉窝草我也不知道啊你居然能碰到这种难题,他会感觉你挺厉害的(你赚了)。然后最后解决了以后,你汇报情况的时候你可以一顿狂吹你解决了什么问题(你赚了)。次数多了,人们就会形成“你这个人是个专门能解决大难题的大牛”的错觉(你赚了)。
2.想升职就要爆刷存在感。
这条是我和各种无耻烙印们一起学习工作了10年时间学到的。
首先我在上研究生期间有一个关系很好的小印,这货的脸皮之厚让我瞠目结舌,比如他背着我抄了我的作业,助教也没发现,给我90分,给他60分(助教也是个sb),他不服,就去找助教:“我作业是照他抄的,一模一样,凭啥他90,我才60啊”。我和助教都被他的逻辑还有他抄作业还不知道哪里来的自信惊呆了,后来跟更震惊的是助教给他也90分了。从那以后我就隐约发现其实在加拿大(不确定美国是不是这样),我们周围日常能见到的所有老外都是sb,不sb的都去当ceo了,我们日常是看不到这种正常人的,sb对于sb行为而做出的sb反应,我们正常中国人是预判不出来的。以上这句话是前提。
小印每天上课都经常问老师一些特别sb的问题,我和有些国人同学每次听到都狂翻白眼,心想这都是啥sb问题还用问么。结果傻眼的是,老师们(不止一个老师)都可开心回答他的问题了,感觉他的提问搔到了痒处,感觉他特别积极思考,后来各种给他高分。其实不止老外或者烙印这样,在中国读小学的时候,我们肯定都见过这种人,上课总是积极举手发言,下课就黏着老师问问题刷亲密值。老师让朗读课文和诗朗诵,丫总是特别积极,念的那个摇头晃脑声情并茂的,我们都快吐了,老师却把丫当个宝!所以说(在加拿大)中国人很难升职,因为语言不行,文化上也不适应,为啥?因为我们从小在文化上就鄙视这种事儿b,进入职场我们必须变成这种狂刷存在感的事儿b才行!(参考下面说的曹云金相声)
至于怎么狂刷存在感,我陆续从烙印身上学到几条具体的方法,比如
a.sprint开会时候多说,不能只说一句:我昨天干了啥ticket,今天要干啥ticket。而是应该说:我昨天做某个ticket,它是个什么问题,为啥很难解决,我跟谁讨论研究了一下,后来和xx部门的谁谁开了个会,发现它其实是个什么的问题,于是用了xx和yy方法才解决,我又跟QA的xx研究了一下怎么测试,这个东西大概什么时候能deployed to production,到时候就带给我们什么好处。这样你其实没干啥也好像干了很多。起码不会出现你实际上干了很多,别人却以为你干了很少的情况。(这条方法入职的前3个月别用或者是悠着点用,省的把你的expectation bar提升太高了)
b.狂群发消息。干了点什么破事,尽量让所有人知道。和第一条道理我说的一样,跟祥林嫂一样,见到人就吐槽你在干啥东西,可难了blablabla。然后每出点成绩,狂在你们比如slack之类的群,或者群发邮件,说干了啥了。早请示晚汇报那套捡起来,各种群发update进度。让领导们都知道有你这么一个人,而且这个东西是你负责的。以后有相关事情,领导都马上能想到你了。(至于什么时候群发,取决于公司,如果你们提倡加班,你就留着邮件周末发。如果你们提倡ownership,你就大半夜群发你解决了bug)
c.狂总结和群发你们组事情的update。这个其实算是烙印抢别人credit的损招,是方法b的无耻版。比如你正吭哧吭哧改bug呢没空跟人交流,他群发了一个总结,说我们(用We就把你的功劳抢走了)找到了什么方法可以解决问题,正在改,大概什么时候能完成,QA已经了解了这件事,会在什么时候deploy。然后隔一段时间一个update,狂@领导。其实大领导根本不care你们到底咋改的或者你们到底谁干的或者你干的怎么辛苦,大领导喜欢的就是手下们把东西搞好了,别给他找麻烦,他不想从下面听到逆耳的声音。这时候发总结的人让他了解到事情的过程应该会很顺利,把他的气捋顺了,他开心了,感觉这个发总结的人不错,记住他了,根本不知道辛苦改bug的人是你!这个就是北美文化里的所谓leadership!方法c其实是一个manager的本职工作,但不是所有人都喜欢这么做,就会被喜欢这么做的人钻了空子。方法c如果是经理以外的人做就非常无耻,我们可以做也可以不做,但是方法b你必须做,定时更新你自己的东西省的别人用方法c抢你credit。(参考下面资源3的网文)
要想把这条道理深深地刻在骨子里,建议时刻重温以下3个资源
a.曹云金的从艺10周年相声<成长的烦恼>里面那个总“老师老师”的班长
b.新东方年会吐槽视频疯传:<累死累活干不过写PPT的>
c.一篇网文:<我工作10年 没拼过刚毕业的美国女孩>
3.没有什么东西是不能拖延的。
没有什么事是真的十万火急的。不是你开的公司,没有什么事情是急到明天完不成就能死的。
我经历过一个事让我刻骨铭心。在之前那个公司时候,组里雇了一个senior dev,结果他的出活儿水平连实习生都没有,那个慢啊。雇他的原因就是因为组里突然接到了一个大客户的feature,大订单有3M USD,时间非常紧急。大家都急的不行,天天996,可是他本身出活儿就慢,还天天一点都不急。所以到了交货那天他才干了三分之一。大家以为我们都完蛋了,结果跟客户死气白咧的一顿谈,客户又允许延期俩月,才好歹完成了。(换位思考:因为客户也着急但是他们也没办法了,跟你们已经耗了半年了,你还要两个月延期,如果他再找别的公司去,还要起码等半年,不确定别的公司会不会也延期,事情只会变得更糟。客户已经被你们深度套牢了,不想割肉止损就只能接受你们延期俩月)
自从这件事以后,我就有了一个标杆,就是只有高于3M usd价值的活儿,才能让我像之前那么忙活,不然根本不值得为一个事忙。公司的截止日期不合理,是客户代表的职责没做好,不代表最后一环的码农必须按不合理的方式去996。公司要首先保证做好的是把合同谈的靠谱了,再给码农们。如果一个公司连这点事情都搞不定,待下去也没意思是不是。合同再大,钱也不给你,你跟着着急啥。当然了,起码样子上,我要摆出端正的态度来,起码假装我很重视,像之前那个慢悠悠的同事,合同结束了就被裁了。在这件事里真正真正重要的,也是稀缺的能力,就是leadership,也就是协调各部门,协调客户关系,协调各种资源的能力,你如果能跟产品经理,测试部门,领导们,business部门把事情安排的妥妥的,顺利的把时间谈好,预期好,东西做好,经理的职位肯定就是你的。在这一点上,我还差的好远,我需要好好的学习。
**有一本神书,建议所有senior的程序员都好好研读,Robert Martin大神的The Clean Coder,注意不是他写另一个clean code,是两本书。这本书先从一名产品经理的视角,描述怎么去压榨老实人程序员,催他们干活,但是对其他部门却跪舔的心得。然后详细阐述了程序员应该怎么和产品经理撕逼,以及怎么跟不懂技术的领导踢皮球拖延时间的话术。读完以后就会发现真的没有什么事情是不能拖延的,哪怕作者拼了老命才完成的十万火急沃尔玛大订单,对方一个中层经理轻描淡写一句话就说这个产品无所谓啊又拖延了一年之后取消了。有的时候领导的一根鼻毛大的小事,层层压下来到了程序员老实人手里,就已经变成了周末加班不睡不休的天大P0重担,所以程序员一定要学会怎么保护自己,把事情合理的顶回去!
要清晰认识到:产品经理这个职业就是地主买来的鞭子,雇来的狗腿子,抽打着我们佃户码农们背着犁辛苦干活的,同时还要担心自己是不是犁地不够快,耽误了插秧,不然地主来年不雇自己了。醒醒这再发展下去就是斯德哥尔摩症啦!如果一个公司不光有PM产品经理,还有TPM项目经理,这个地主绝对是更黑心的了。你细想,一个地主家地太多担心种不完,多出来的钱不是去多雇几个佃户干活,却是用来雇狗腿子抽佃户快点干活,所谓的“优化项目进度”。我曾经和一个资深项目经理讨论我应该怎么跟他estimate一个ticket要用几个story,因为我总是担心写短了我完成不了,写多了怕人戳脊梁骨说我偷懒,怕被人鄙视我速度慢。英语翻译过来他回答说: “我其实都看不懂你ticket里说的咔咔一顿操作到底是啥,反正你就写分析的时候,多写点写复杂点。然后我就复制粘贴给领导了,领导更看不懂。一旦领导确定这个deadline了以后,你就千万不能改了。你到时候要完不成,我tm就得跟领导尴尬赔笑脸解释为啥没按时完成。所以你别让我难做,我就不会让你难做,你一开始就写长点。”所以尽量一个ticket在分配给你的时候,你就一定要夸大他的难度,多申请点时间给自己。你才能游刃有余的完成活儿的同时,有充足的时间吃透相关技术,做demo,和领导开会邀功等等事情。
——————————————登堂入室———————————————————
由于从小我的智力很低,我脑子里本能的有一个智商测试雷达,跟人交流一下大概就能判断出这个人的智力比我高还是比我还低。转成dev后渐渐的在边陲的福威镖局里干了1年趟子手(后半年被提拔成了普通镖师),虽然自己干的不是顶尖优秀,有不少人比我强,但是我没有发现很多人在智力上碾压我90的智力。有的人就是经验比我丰富一些,押镖业务比我熟练些而已,并没有指数级的碾压。有那么几个能碾压我的,都是鹤立鸡群的成为总镖头director了。
我意识到,我在三流的公司能中不溜,也就是说我是有能力去二流公司里垫底的。于是我打定了我要去更好的公司的念头,想去更广阔的地方去长长见识,那样的话,我就只能去中原武林闯一闯!
这时候我就需要好好准备一下System Design了,这个美国公司要考的能力。之前我一直在练习写code的能力,练得都是局限在一个method里,一个class里,在一个package里,顶天了在一个project里,但从来没有练习过或者着眼过这个project是怎么部署的,怎么架构的,怎么运营的。
其实用武功不太好形容,我发现用足球来比喻比较恰当。之前我们都是一直在努力成为一个好的球员,天天练习的都是球技,比如怎么盘球,怎么带球,怎么射门准,怎么过人,或者说练习的都是怎么自己单独一个人对球的控制更好。可是我从来没有从全局打配合的角度去思考过。你想被一个俱乐部录取,虽然你脚上功夫不错(写代码),可是你连什么是“越位”(fail-over)都不太清楚,就算进了俱乐部,还能不能和其他人愉快的交流了?一个不知道后卫球员怎么思考的中场不是好门将。
System Design其实就是训练让我怎么从一个足球教练的角度不再是一个球员的角度,去全盘思考一场球是怎么踢的。首先有很多基础知识起码要知道,比如强进攻能力(Strong Consistency, CP)的433阵型还是均衡(AP)的442阵型的配置,他们的优缺点,你要根据他们的优缺点做好trade off。你要了解怎么让前锋跑得快(CDN for faster static resource),提高中场的传球(Load Balancing)能力,加强后卫的防守(Master-Slave Replication)能力,提高守门员体质(Database Sharding),手长的傻大个门将(SQL)还是灵活的矮个子门将(NoSQL)选哪一个,球员们打好提前量配合(caching)等等。学会了基础知识以后,你再去俱乐部面试,人家给你一个白板,写吧,设计一个皇家马德里的阵型(how to design uber),你就不再一头雾水了。
学完了基础知识以后,我觉得剩下的其实都是忽悠能力和想象能力。我的练习方法就是拿个草纸,在上面不停的瞎画,有一个github repo叫做system design primer上面有很多例子,把上面的那些球员组合,看一遍,自己画一遍,看一遍再自己画一遍,如果中间出现了什么不一样的,说明理解出现了问题,研究明白以后就再画一遍。默写多了,就成为自己的东西了。系统设计现在经过码农们前仆后继的总结,现在就是简单的三步:1 Primer 2 Grokking 3 Data Incentive的书。完成1能找到工作,完成2能找到好工作,完成3能找到顶级工作。
我就又开始了刷题之旅,在痛苦和迷茫中有了一些感悟,一点拙见,如有高人异见,还请指点。
作为一个码农上班族,似乎天总是降障碍于我这种普通智力的人,空乏我身行,拂乱我所为。我觉得这终究脱离不开修身,修心,修性三个方面的磨炼。如果能熬过磨难,就应该会成功吧。
修身:于码农而言,则为时刻保持饥饿,时刻保持谦卑,不停地去学习新知识,从而提高自己的专业能力和技能水平;作为一个先天智力特别缺陷的人,我们肯定在修身上就照很多厉害的人差上很大的一截,但也不能任其越差越多下去。阳明心学里的“知行合一”只是修身最入门的方法,难的是能长期保持知行合一的状态。所谓知行合一,按我的通俗理解,即你知道这个道理是对的,你就应该去做;你知道这个道理是错的,就不应该去做;你“知”道的道理要和你的“行”为保持一致。
你如果觉得打游戏浪费时间是错的,但是你还去打,荒废了工作,这就是知行不合一。如果你觉得打游戏是对的,于是你天天去打,最后打出来一个冠军名堂出来,这就是知行合一。你觉得打游戏是对的,但每天到了网吧反而去泡妞,也是知行不合一。知行合一是最简单的也是最容易去做的有为法。若能长期保持身形意融为一体,不让自己的精气神外泄,就能达到佛家所说的佛身无漏,清净圆满的状态。
所谓身、形、意合一,即你有打游戏的天赋,提高自己打游戏的水平(身),你天天去打游戏,辞职去打(形),你喜欢打游戏,不断发掘自己对游戏的热爱(意)。所谓精气神外泄,即不受外界干扰:比如你妈天天在旁边唠叨耽误你时间,你老婆天天作,或者白天要去送外卖夜里还要干保安,只能在疲劳状态下抽空去练习,这样根本离清净无漏状态十万八千里,如何能成功呢。于我个人这阶段而言,我知道刷题才是对的;每天都要刷题;要让自己觉得刷题是个乐趣;不要迷恋于小说游戏电影抖音导致外泄精气神;如此知行合一下去,才有成功的希望。
修心:传闻很多高人,往往远离俗世,这样就能脱离红尘杂念,毕竟不是所有人都能红尘炼心的。“心在红尘中,片叶不沾身”是很难的。比如柳生宗严,去瀑布下修行冥想,在艰苦环境下,坚韧卓拔,意识到自己心灵的阴暗角落,斩杀心魔,从而突破自我。在磨练中,提高自己的心灵力量,鼓足勇气。用慧剑,斩去三尸,即斩杀烦恼,斩杀焦虑,斩杀恐惧,达到身如菩提树,心如明镜台的状态。从而人生积极乐观,心灵澄澈,充满正能量。
于码农的日常角度来说,在面临自己认为很难的任务前,不要有畏惧感,要勇于突破自己的心理安全区,接下来这个难活儿。不喜欢在众人前演讲,就要有意识的去接一些演讲。不喜欢和人社交,就要鼓起勇气,每天多去和不同的同事去聊聊天。
于我个人这阶段而言,刷题就是个修身与修心斩三尸的过程。刷题中碰到难题好可怕,克服恐惧,要战胜畏难心理,哪怕是抄也要咬着牙抄下来。不要艳羡他人,不要去想自己的同学们早都特别成功了,克服焦虑,做好自己就可以了。不要怀疑自己,认为自己做不好,自己比别人差智力低,克服烦恼;每天回家好累,要忍着坚持下去,克服懒惰,找个图书馆安安静静思考。要能常人所不能,忍常人所不能忍。坚持久了,哪怕比不上大牛,比起浑浑噩噩的普通人,也绰绰有余了。
修性:(我的修行程度还不高,对修性的理解并不深刻)修心和修性本来就互相交叉,是相似的概念可是却有细微的不同,“明心见性”说的就是,你了解了你的内心,才能一窥自己的本性。天天下班去看电影,撸串,打麻将,撸啊撸,沉迷于五色六迷之中,很容易迷失了自我,不知道自己喜欢什么,不知道自己存在的意义。
<金刚经>里说:一切有为法,如梦幻泡影,如露亦如电。这句话其实可以无穷无尽的引申,抛去唯心主义的宗教理论,从我个人生活的理解是:很多声色犬马,其实就是如朝露闪电一般匆匆而来,匆匆而去,并不会留下任何价值,都是虚幻的。只有自己,才是自己能把握的,才是真实的。所以很多东西如果并不属于自己,其实都是镜花水月,就并不值得去追求。比如你喜欢撸串,天天一顿吃,最后几年过去了,花了钱买了很多不健康,自己成了一个油腻的中年胖子,倒不如自己开个串店,那个才是你自己的。你喜欢女神,女神并不喜欢你,也不要纠结,随缘即可,如果太过着相,反而于人于己都只是带来烦恼和痛苦。你包养了个小三又有何用,小三最后也都是幻影,自己的美满家庭才是真正属于自己的。
人到中年,越来越对<道德经>里说“夫唯不争,故天下莫能与之争”这句话有感触,觉得有无穷的道理。 壁立千仞,无欲则刚,如果有了欲望,反而就有了弱点。有了弱点,就很容易失败。一旦对结果有了期待,如果达不到结果,就会失落。期待越强烈,反差就越大,失落就越大,本性反而被贪、嗔、痴所污染。就和炒股一样,非常想发财->买很多的股票->期待发大财->赔钱->想翻本->加大投入-> 亏更多的钱。如果一开始就知道投资肯定有赚有赔的心态,去投资而不去投机,抱着理财而不是发财的心态,就不会落入这种死循环里,反而成功率会更高。或者比如总蝇营狗苟的非要去和人竞争经理的职位,大家都知道你在争,争不过人家就丢大人了,恼羞成怒,只能一走了之,可是如果一开始就保持平和的心态,不去算计这个和那个,和同事们都保持良好的关系,经营出来个圈子在后面挺着你,自己的水平又足够,如此这样,到时候经理不是你的又是谁的呢,还需要去硬争么?又或者于我个人而言,特别特别想和其他成功的同学相比,感觉自己特别失败,自己就会特别失落和烦恼,又何必呢。我只要好好的修持,自然会有出头的一天,如果出不了头,保持现状也不是很差是不是。
如果能保持不悲不喜、不骄不躁,任凭风云变幻,我自不动如山,其徐如林,心灵空明澄澈,保持真我和自我,就不会失败。
总而言之,修身是有为法,有迹可循,修心和修性属于无为法,只能靠自己领悟,在这方面,我的领悟还非常浅薄,还需继续。有些人为啥智力很高,最后高考还没有别人好,工作也不一定好,事业也没人顺利,就是因为虽然修身很厉害,但是心性修为差太多。只有三者综合得分高的,最后才能成为大牛和大神。所以我这种普通人,也要三个方面齐头并进,三元归一。其实于各行各业,打工与当老板,也无外乎修身修心修性这三条,就如人饮水,需要各人各自品味了。
——————————————略有小成————————————————————————
上个阶段花了我整整一年的时间。感觉真是学到了好多东西,进步非常大。尤其是在后期的时候,越学越感觉到在福威镖局里武功得不到进步了,能学到的都属于镖局的业务经验,维护现有业务的维护经验以及在镖局里的撕逼能力,非常无趣。感觉同事们也都是浑浑噩噩的江湖莽汉,没有高手,注意力都不在打磨内力,而是在多学一些招式套路上,特别喜欢花架子。可最好的招式也顶多就是总镖头特别推崇的辟邪剑法(GraphQL)。妙是妙矣,可没有葵花心法,威力也就止步在三流尔尔。我也越来越有一种自己不属于这里的感觉,非常像修仙小说里写的,在飞升上界之前,隐隐感觉被这方天地所不容,可是又不能全力出手干活,因为会被此界的浊气污染了内息。
最后在各种偷摸的请假和面试中,我得到了少林寺的录取!相比之前的镖局,能进入少林寺,我也算是名副其实地达到“略有小成”境界了!而且不是那个和在福威镖局一起在福建边陲的莆田少林分部,而是在中原武林的少林寺总部!
不过虽然说“天下武功出少林”。虽说少林还是底蕴深厚,也能保证弟子们基本生活,下山也能受到江湖人士的必要尊重,但现在早已不是天龙八部时代了,少林也早已不是那个一言就废掉丐帮帮主的武林泰斗了。当然了,我原来的镖局,比起少林俗家下属的龙门镖局都不如。能进少林,也算是一个很大的进步了。只是我一直练的是道家心法,要被迫狠心转成佛门心法,不知道会不会兼容。尤其少林是方外之地,与世隔绝,用的东西都是老和尚们内部开发的轮子,不太利于再投别派。少林又戒律森严,不知道我的未来将何去何从,是福是祸。
——————————————已有小成—————————————————————
进了少林以后,最强烈的感受就是不愧是佛教圣地,天竺和尚真多啊!尤其现在的方丈-达摩,就是天竺人,非常有手腕,佛法精湛,将少林打理的蒸蒸日上。不过这些天竺和尚们跟我之前接触的倒是不一样,他们都非常友好和勤奋,又馋又懒偷奸耍滑的很少,对我的帮助非常大。我觉得可能是因为天竺人已经当家做主拿下方丈位置了,国人群体又已经非常非常小了,已经不是天竺的斗争目标了,反而天竺们的目标是从西夷人那里抢蛋糕。所以虽然升职成经理这种好事轮不到,但是平时在这种氛围下,天竺僧人们都非常友善。(当然了,不能因为任何人表面友善就轻易相信别人。呆了半年我就经历了一例我们组为了抢credit,非要瞒着另外一个天竺组偷偷造重复的已有轮子,还要无耻的跟那个组要权限,理由是要开发另外一个不相关的东西。他们连自己人都骗)
再有的感受就是,少林的辈分真多啊,分为:慧、智、觉,了、本,寂、圆、玄、空、虚,等起码10个辈分!新毕业生都是“虚”字辈的。我混江湖了这么久,开始才分我一个“空”字辈的offer我是觉得有点可惜的。可是我进来才发现连没有辈分的小沙弥(intern)都特别强,虚字辈我打起来就非常吃力了。有的师兄们已经在寺里20年了还是“空”字辈。我也发现少林这里特别多的和尚们挂单挂好几十年不跳槽,特别忠诚。
我一开始是跟着高我两辈的“圆”字辈的一个师叔祖混,姑且叫他“圆真和尚”吧。圆真在寺里已经20年了。圆真叔祖佛法也是极为精湛,尤其是口吐莲花的技能,可以连续讲经三天三夜(开会时候可以不大喘气的狂侃3小时)。后来我开会多了,发现凡是“圆”字辈以上的人,基本都有非常强的讲经技能。比如说给你一个ticket,改一行URL,他们能连讲一个小时这个东西的意义和各种context。还有就是老和尚们的辩经能力特别强。辩经就是天竺传来的佛教特色,藏传佛教还保留着这个传统,即大家坐一圈,针对经书(design doc)上的一点展开激烈的辩论。对方一顿扯,你不可以被绕晕,还必须迅速从中提取出需要辩论的点,迅速捋顺思路给予还击。我经常开会几分钟以后就基本跟不上节奏了,而且常常开会一小时连话都插不进去。在少林想要升职,真的是需要提高讲经辩经的能力,难啊!
以前在镖局大家走镖的时候,都是组成一个圆圈,一起保护一台笨重的大镖车,一旦某个镖师失手(有bug)或者面对的敌人太多(traffic spike),这种monolithic的镖车就面临很大的危险。在少林我们下山化缘的时候,都是组成十八铜人阵(distrubuted system),每个人只负责自己那份斋饭,这样哪怕一个microservice铜人被击倒了,并不太影响其他铜人的阵法运行。 但是我个人并不喜欢铜人阵,它对公司的运转稳定性当然是好的,铜人就是一个螺丝钉,死了就可以换;但对于个人来说,阵法太复杂,每个铜人都需要练习自己独特的步法,习惯了一个位置以后就很难转换到另一个位置,如同盲人摸象一样,每个人就了解自己摸的那个部位,很难掌握big picture。而且十八个铜人各司其职,两个铜人之间很难互相比较,对于比较努力的人,很难鹤立鸡群,有的人得到的活儿就好,有的人的活儿就又苦又累。本来努努力就可以成为整个project的go-to-person,但是现在即使努力也就是成为两三个service的go-to-person。
在少林没人用Spring刀法,都是用拳法-虎鹤双形。刚换了技术栈的我特别不适应,完全不明白怎么回事,前几个月特别紧张。还好虎鹤双形并不是什么高深的武功,慢慢地适应了下来。突然有一天我领悟到其实阴阳倒乱刃法的阴阳概念,就对应着虎鹤双形里的虎鹤,虎的刚猛结合鹤的灵动,虎的威猛结合鹤的优雅,各种framework竟然如此相通!软件开发就像一个太极图,前后端一阴一阳,前端多变灵动,后端沉稳厚重,API就是中间那条交界融合阴阳。所谓后端,无外乎就是接口的定义而已,不论执行层叫做什么,不管数据层什么语法,内中刚柔并济(数据model和展示model并存),生死幻灭(Object inject dispose),加上层层Filtering和一个Auth验证(闯入太极图中黑圆领域里的白点),此时后端于我,再没有秘密可言了!
其实如果有人喜欢业余搞开源多见过几个framework的话,应该比我更早领悟。到了这个境界我唯一有点怵的地方就是DB设计,毕竟一个组弄完一次就不会再碰了,不是建组时候进入更不会接触到。经验太少,希望找到机遇能在这方面有所突破。
——————————————鹤立鸡群 —————————————————————
时光缓缓流淌,我一直在苦苦思考未来的我应该如何走出自己的职业道路。为了更好的职业发展,是应该不停的刷题看DDIA跳槽升级,还是辛苦干活儿在同一个公司爬梯子升级?一旦换公司,你之前的一切名声,信誉,领域知识,都会受损严重,甚至要彻底重头来过了。就像我这次的跳槽一样,在上一个公司什么都懂又怎么样,只是domain knowledge多一些而已,一旦挪窝了,换了新技术栈,新工具,新环境,新商业模型,一切重来,我和一个懂的多点的intern(越好的公司intern就越强)有什么区别?如果俩人同样起点,就是纯拼智力,人家比你聪明比你能加班就是比你代码写的多,到时候你一个senior尴尬不尴尬?可是要是呆在同一个公司,就要苦熬资历,面临工资倒挂,努力工作都不一定能得到晋升。我又根本没有那一学就会,一会就精的聪慧,毕竟我这么低的智力,到了少林,已经堪堪快垫底了啊,我的智商就注定了我在技术上已经快要到达我的知见障了!哪怕换个组都伤的很!所以我苦苦思索,程序员职场中的恒常不变的“道”到底是什么?到底什么才是可以移植的能力?对于我这样的普通人该怎么办啊啊啊?
后来我读小说中得到了第一部分启发,小说里一般都有金仙和大罗金仙。何为金仙?金仙是这个世界的混元圣人,在本世界中称雄,万劫不磨,与天地同寿。但是出了本世界,来到本宇宙中,凶威就大大下降了,若是去了其它规则冲突的异宇宙,也就和普通的仙人差不多,因为天地规则变了,所以金仙是世界位格!但大罗金仙不同,大罗是通用位格,被一切时空、宇宙承认,一证永证!不论在任何世界,任何宇宙,同样都有巅峰实力!大罗金仙的修炼,在于游历诸多宇宙的过程中,将自身领悟的规则不断剔除,取其精华,去其糟粕,不断整合自身,留下最为本质、最为纯粹的规则之力。所以这里的“规则之力”就是我一直苦苦找寻的码农之道!
第二部分是回想到了天龙八部,其中给我印象很深的一幕就是,虚竹哪怕武功高强堪比CTO,也要被罚去菜园挑水劈柴,report to无良菜园管事(缘根),天天被职场PUA,脏活累活都得干,credit却全被菜头抢了。菜头可是管着三四十人,威风的很呢。如果没有鸠摩智打过来,菜头的职场影响力在方丈眼里绝对完爆武功高的虚竹。而且菜头的技能非常transferable,哪怕少林寺倒闭了,拍拍屁股也可以去大相国寺继续面试当菜头!干的好的话还可以升职到饭头,院主,监寺,督寺,甚至是小庙的方丈呢。
第三部分是有一天我碰巧和一个失联多年的同学重逢,他的智商大概是正常人,比我高一些,但是他的情商太低太低了。平日里都是别人用关爱智障的眼神看我,几天来居然换成了我用关爱病人的眼神看他,这给了我巨大的启发!哎我的智商虽然低于普通人,但是我的情商稍微高一点点,是普通人的水平啊!我应该扬长避短!(虽然我的长也不是很长) 。
一个大组织,比如丐帮,一定会有传功长老的track和执法长老的track。传功长老要武功最高,技术最强,带着组员在技术上进步,属于tech lead。而执法长老就是要负责规章制度,请假晋升,招人裁人的people manager。所以综合考虑起来,我最后决定我的路线就是做people manager,而不是tech lead。
既然目标已经定下来了,我决定自创出一套属于我自己的心法口诀,结合技术与非技术,尤其着重于锻炼我的嘴炮能力。自创武功的过程中,人就会主动思考并且主动去寻找书籍资料,去探索自己以前不知道的东西。主动学习比被动学习更有效率,瓶颈就更容易被突破,小说里都是这么写的!
打算用余生完善我这部码农版本的<道家秘传·九字真言>: 临、兵、斗、者、皆、阵、列、前、行。正文只收录“斗”字诀,其他的放在外篇,本来一开始收录的是"临"字诀,但我感觉其他都是小术,唯有内心的强大才是真正的强大, 修心才是根本法门。
斗字诀:斗志,勇敢,sense of ownership。有的时候只想躺平,不想努力,不想奋斗,觉得实在坚持不下去了,做什么都没用。所以矢志不移的决心和意志,保持斗志是攀上顶峰的必要条件。不过可惜的是,这世上没有人会给我斗志,我能靠的就只有我自己,所以要培养自我激励能力。我发现,自我激励可以分为正面激励和负面激励,要发现自己的激励点,没事就按一按心里的这个按钮,给自己上一上发条。(我并没有找到心理学界的相关研究来支持我的观点,所以应该是我首创的)
正面激励:重温郑伊健的电影<中华英雄>,最后无情的吴镇宇最终败在华英雄的手上,是因为他漠视爱,他杀了妻儿,自毁双目,就是为了追求更高的武功,已达到无情无义的绝情剑法的顶峰(一个热爱技术而完全忽视家庭的geek确实可以很强)。而华英雄,将对妻儿压抑在心底的思念变成力量,我要为我的儿子,为我所爱的人打败你,我要为他们活下去。这种就是正面激励。当你为了家人而战,为了家人而变得更强,这时你就有了更强的力量。这就是你赢了的价值。有的人正面激励就有动力,比如喜欢技术,或者想为家人改善生活,或者为了纯粹认可公司的价值而努力。这都是正面情绪产生的激励。
负面激励:其实很多人都是被负面情绪激励的,只是自己不知道。最典型的想法就是那句,“当初你对我爱答不理,以后我让你高攀不起”,幻想自己发达了,狠狠拿钱抽在以前看不起自己的人脸上。举个贴近生活的例子,比如说在亲戚微信群里,你的北大表哥侃侃而谈一些你一听就觉得错的东西,你不服气反驳但是周围的亲戚纷纷称赞他却说你不懂事。人们都有慕强心理,强的人放屁都是道理,弱的人有道理也是放屁。原因是你不够强,想要得到人们的认同,你必须要变强,到时候就可以狠狠打脸他们(往好听说就是想得到人们的认可)。仔细想一下,其实火影忍者里的鸣人就是这么想的。而且鸣人他每次战斗前,都要先回忆一遍从小别人不认可,孤零零坐在秋千上的场景,来激发自己的斗志。我发现我就是一个很容易被负面情绪激励的人,负面情绪最能激起我的斗志。所以我找到最能激励自己的点:“你看上学时候你最讨厌的谁谁谁,现在混的比你好多了”,每次一想,半夜睡着了我都要一拍大腿然后起床使劲工作。
斩除负面情绪:上面说的不论正面还是负面激励,他们都是把你往前方拖着走的。但是很多时候人会产生很多负面情绪,比如很多时候会想,为什么公司这么抠,为什么同事这么蠢和坏,为什么代码库这么屎等等,一旦负面情绪大于激励,你就会被拖着往后面走。我之前在修心篇斩三尸那里有些涉及,但那是属于宏观方向,至于如何保持对微观工作本身的热情,我偶然从一位禅师那里得到了启迪。禅师说:
单纯扫地不会累,扫着扫着起一个念头,“我已经扫了好久了”,马上就累了;“扫了好久了,还没有人来替我”,马上就起烦恼了;“没人替我不说,旁边有人看热闹也不管”,好,烦恼就加倍;“我觉得他们都是别有用心的,故意这样看我笑话的”,好,烦恼就生了一大堆儿孙。是因为扫地的缘故么?不是的。是因为那个念头的缘故。谁让我们烦恼?莫名其妙生气的烦恼。如果只是单纯的扫地,开心地扫地,什么都不要想,这是一种享受。
从今起,我将我的修心流派命名为:不动洗心流。何为洗心?洗涤心灵,道心不净,吾洗之。有生必有灭,无生则无灭,不执著于生灭,心净不起念。 何为不动?人生在世如身处荆棘之中,心不动,则人不动,如心动,则人妄动,伤其身痛其骨,于是体会到世间诸般痛苦。所以内心的强大才是真正的强大,内心安宁才有真正的喜乐。
——————————————驾轻就熟 待续—————————————————————
随着世间的修士越来越多,汲取更多的天地灵气,却不知反哺天地,正应了那句“天生万物以养人,人无一物以报天”。天地间的灵气和资源越来越少,终于我们进入了一个天人五衰的末法时代(码农开始供过于求)。天地不仁,以万物为刍狗,天发杀机,移星易宿,竟是无人能逃!因果纠缠之下,我们修士,都要被迫完过一场杀劫(裁员),以杀止杀,以力证道。若渡过杀劫,可再享一千二百年逍遥;若渡不过杀劫,则身化灰灰,身死道消。
“一生悬命”,就是我们码农这辈子最好的写照。不过我已经把这个词改变了原有意思,变成:“我们(可怜)的一生,命都是悬着的”。我们不停地被各种时间线timeline, 死亡线deadline悬着脖子,脚下无依无靠就是个小板凳,随时可能被这些线勒死了。哪怕从微观层面不断披荆斩棘、如履薄冰完成了各种任务,但是宏观上却躲不过人老珠黄,被公司卸磨杀驴而最终命悬一线。众生皆苦啊,这种苦无法被人理解,无从对人言说,没有一个人可以帮助自己。人唯自渡欸,要努力打破天地这个大囚笼,获得大解脱,大自在!
——————————————青出於蓝 待续—————————————————————
——————————————融会贯通 待续—————————————————————
附录:
现在我的境界还是太低,不过我隐约觉得未来会有一些境界,不知道有生之年我能不能达到这几个境界。
人键合一: 当你对于你的项目还有所用的技术栈tech stack有相当的了解以后,可能突然有一天福至心灵,达到一种莫名的神而明之的沉浸状态。那时候你就是键盘,键盘就是你,人键合一。你的心中只有键,指哪打哪,想到什么思路就能瞬间码出来。达到这种状态以后,一天你码的代码量能达到平时一周的量。但是需要消耗大量真气,解除状态以后能累吐血,第二天精神状态很差。
凝练键意:达到一定的武道境界,逐渐形成自己的风格,在对敌(编程)时,亦无所谓招法,出手即是招,亦无须经过大脑的思维,而是“不期然而然,莫知之而至”的本能反应。此时返璞归真,最简洁的代码往往是最有效的,不需要经过大脑思考,就能写出让人惊叹的代码。和小说中的拳意,剑意一个道理。
祭炼一件本命法宝:熔炼自己毕生所得,化而为一,写一个自己的项目 personal project。这个项目和你血脉相连,你对它的了解就像自己的手一样。把它放入紫府中,时时用自己的本命真元温养和淬炼,最后无坚不摧,最终成为一件大名鼎鼎的法宝,以至于码农界一聊起来法宝排行,你的能占一席之地。就和尤雨溪炼的Vue.js, Linus炼的Git一样。
万法归一:对于这个境界的码农来说,什么语言,什么技术都无所谓了,都是一样的东西。飞花摘叶皆可伤人,草木竹石均可为剑。什么batis啊,mybatis啊,什么spring啊,什么react angular啊,什么php啊,什么python啊,都无所谓,都可杀人。
打通任督二脉,后天返先天:终于回归了编程的本源,从此不再是单纯地为了码代码而码了,而是为了实现自己的理想而码,为了实现一门事业而码。就像饿了么,滴滴打车,比特币这种项目,编程变得纯粹,是为了改变世界。有的人被后天浊气污染,不打通任督二脉没法返本归元,回到编程的最初意义。我就有一个同学达到了这个境界,在FAANG几年以后悟出了一门先天神通,搞出了一个business。或者有的人天生娘胎里就留下了一缕先天真气,于是在没达到这境界的时候,就能搞project。大家都在学校的时候经常看到一些大牛,上网找一些技术,拼吧拼吧就拼成了个东西(大牛不需要深入懂这个技术,技术只是实现他想法的东西,能用即可),然后创业去了。
天人合一:已经站在已经计算机界的巅峰,太牛逼了已经要上天了。他们已经窥得了造物的奥妙,宇宙的真理,比如计算机之父伊曼,AI之父图灵,信息论之父香农,互联网之父蒂姆·伯纳斯。他们修炼的已经是规则之力,随手打出一拳,都是法则和真理。
破碎虚空:可能天人合一境界以后,天降劫雷劈大神们,大神们渡了雷劫之后,就破碎虚空了。这个就应该是最终的境界了。这个境界只是一个传说。
外篇·码农版九字真言
https://blog.wenxuecity.com/myblog/79604/202203/25838.html
=========================比较好的别人帖子===============
其实很多人学编程都会遇到困难,我觉得其中一个根本原因是他们没搞明白学编程到底是学什么。
编程不是一种知识,而是一门手艺。
我们从小到大的学习都是学习知识,流程一般是课前看书预习,上课听讲,下课做作业,然后复习考试。但是学手艺可不是这么学的。
我们先拿游泳举例,游泳不是知识,而是技能,也可以算门手艺吧。
需要预习吗?需要上课听讲吗?不需要,因为两岁小孩都能学会游泳,他们连话都不太会说呢,怎么可能听课预习呢。游泳是通过在水里的练习,教练手把手地传授动作,一点一点提高熟练度学会的。
我们再来看看弹琴,学钢琴一定要有钢琴,音乐基础知识也是老师在练琴间隙传授的,并且一定会结合练习,另外练琴时间是很重要的,必须保证一定的练习量,有些理想远大的琴童练琴时间可以用惨无人道丧心病狂来形容。
千万别把编程看作知识,计算机科学是知识,但是编程是手艺。
既然是手艺就要用学手艺的思路去学习。
以动手练习为主,看书学习为辅,甚至极端点,初学的时候除了看必要的文档都可以不看书,等有了一定编程基础后再去看书,看完书立刻动手编程去验证书上的理论知识。
练习一定要循序渐进,把手艺分解成几个简单的动作,反复练习直到熟练,然后再把基本动作组合起来练习直到熟练。拿C语言举例,比如从认真写好一个Hello world开始,然后去熟悉 if for while 等基本关键字,然后熟悉字符串操作,内存操作,练习查找 排序 二叉树等基本算法数据结构,然后学习一个小型Framework。。。。
找个师傅,手艺的一大特点就是自学是很慢的,而且容易走弯路,而有人手把手教要快得多,手艺有很多细节,实际操作经验,需要去体会感受的东西,这些细节书上基本不会有。
坚持做大量的练习,以代码行数为例,每年50000行左右是比较一般的练习量,有毅力的话可以挑战10万行。(有人说代码行数不代表什么,行数多不见得程序就对,写得好的程序代码很少blablabla,滚,去跟朗朗说去,告诉他其实不用练那么长时间琴。)
回忆下自己当年是怎么学会骑自行车,学会游泳,学会打篮球的,按照那个思路去学编程,而不是用你学大学课程的思路去学编程。
记住,编程是手艺,不是知识。
最后再强调下,对编程能力本质最好的比喻就是弹琴。但是有了编程能力还不能算优秀的程序员,优秀的程序员是作曲家,他们不仅能想出优美的旋律,并且能弹奏出来,就像优秀的程序员不仅能想出优美的算法架构,而且能把它变成可执行代码。你很难想像作曲的人不会任何乐器。
很多人的问题是想当作曲家却不肯下功夫去练琴。
共勉。