忽然间想起了10年前,那是2004年的8月,我再次毕业。感谢两次上学的城市沈阳。
毕业后我又离开了这座城市,回到了之前工作的城市大连。报道到一家专做日本外包的公司。先到之前同事家落脚,只待公司召唤报道。
晚上我和朋友一起喝酒,撸串。
朋友问我,打算怎么办?我说之前的工资都交给学校了。同事说,他们大部分都在大连付了首付买了房,在考驾照,哥们得好好干。
是啊,我说,现在从头开始,一定得好好加油。
过了几天我遇到了在北京上班来大连出差的朋友。
他兴奋地和我说,北京有个互联网公司刚被并购,缺研发工程师,是个机会,邀请我前往。我喜欢互联网,之前还做过站长,反正现在是零,不如一试。那天晚上我们打着出租车在大连城区转了几圈。9月我买了一只皮箱,装着梦想,坐上了大连通往北京的火车。没有卧铺,硬座的感觉也那么好!
坐了一夜的火车,当我走出国贸地铁站,外面的阳光是那么耀眼。
我拖着皮箱,走在长安街上,看着似乎比大连要高又多又厚实的楼群。从那时,我从零起步,一腔热血,正式开始了我的北漂生活。
至此,我的职业生涯,软件开发行业到现在已经超过15年。从程序员到架构师、半个技术管理者,以及创业者和作者之路。
现在回过头看,从当年的选择技术这条路,写了两本书,做了几个明星级产品,虽然苦,却也有乐趣,也给自己带来了一些价值。
兴趣驱动
我的高中时代,亲人送我一本BASIC语言书。后来我翻了翻,发现很有趣,几行程序就可以让计算机做题,实现比人能够完成更强大的应用,还能显示不同的图形。
我的家乡在农村,那时候电脑还是486和586时代。兴趣驱动我寻找有电脑的县城,那时县城的打字复印社也不多,终于找了一家店,我不和人家要钱,帮助人家打字,只要让我用机器就可以。我家离县城不算远,大概15公里。就这样,在暑假,我来来回回十几次,不仅学会了BASIC,还学会了五笔字型,UCDOS和WPS。
那时候最喜欢看到红蓝相间的UCDOS界面和WPS的纯蓝界面,看到香港金山和求伯君几个字,很是佩服,希望将来有机会也成为一个程序员。
到了大学,我学的是计算机,除了功课之外,还有在校外网站和网络维护。
所有的这些初心,都需要有兴趣驱动,否则是坚持不下来的。
如果你只想多赚点钱生活,开始可能干劲很足,但我担心你可能坚持不了多久。
当有了兴趣驱动,你会有热情,有方向,更具有信念。此时的你应该专注在目标上。
清晰的目标
目标是你在一段时间内要达成的结果。比如说在一段时间内学好一门语言。
要注意基础的积累,写程序需要有严谨和逻辑思维。否则写不出好的代码。
我记得有一次,有一个同事写的代码逻辑存在问题,循环成了死循环。这段程序是后台的批量下单,结果顾客在同一天收了几次货。好在,客户并未多收,礼貌给拒绝了,才没给公司带来损失。
所以,你要训练自己有一个严谨的态度和思维方式。基础扎实的人
你可能是那个“不适合编程的人”
在编程的时候,是多多少少处在一种在困难中解决问题的情绪,你会觉得,你会努力,再大的努力去解决它,不管它有多棘手,还是有多简单,你都会想办法做好它。你除了自己努力还要有三五好友,多出去走走,没事喝点小酒。
然后你才能从悲观到孤寂后收获那满满的成就。
在三到五年的时间,我曾遇到过严重的瓶颈,编程很苦逼,每天都面对电脑,和人打交道少,加班严重等对自己的思维干扰。
我觉得写程序很累,有点不愿意干了,想转行,可是又没有想出要做什么。也有人说:“你很聪明,做点别的吧”,后来我不断的拓宽自己的深度和广度,看书,实践,温习算法,数据结构。
后来我尝试写书,从感觉到容易,再到写起来难,再到写出来,有没有书商愿意出版。出版社说你写吧,我们给你出。再到出版了,有没有人愿意买,你又担心卖得好不好。
如此这般,经过几关,终于从别人的眼光里跳出来,做回了自己。
人适不适合,只有自己知晓,或者自己愿意不愿意坚持。
透过现象看本质
写程序经过四五年后,多半是CRUD的操作。但是应用级别越来越复杂,使得开发强度越来越大。有的人也可能会产生厌倦。你可以这样来做:
这时不妨尝试一些新语言,或者查看底层的源代码,比如JDK或者PHP的源代码。看得多了,你就不是只知其然,而知其所以然了,理解了底层机制后就可以触类旁通,对应用级开发简直就是小菜一碟。
还有GitHub的开源平台上也有很多优秀的源代码可看。在GitHub前几代有Sourceforge、Google Code,但这些平台慢慢的都Out了。其实本质上它们区别并不大,但是到后来就是没人用了,为什么?
停下来多想想,你的核心竞争力是什么?是和别人一样的Coder?
向上,向左还是向右?向上,是架构师。向左产品经理,向右转行?
实践出真知
当你累积了一定编码量,以及应用开发经验后。你所在的公司可能会推着你向技术经理或架构师转换。
技术经理会承担一些项目、产品计划,而架构师会多承担技术上的深一层,比如大并发,高负载、可扩展等能力。
你可能要面临着一堆冗余的烂代码,不同架构的系统,经常宕机的网站等等棘手问题。我们需要根据这些情况,一边要让车正常跑在路上,还要边快跑边修车,这个难度显而易见。
人生就是一个难题接着一个难题,需要我们用极大智慧来解决,来克服,包括我们自身的改变。
非权力领导力
程序员转型管理,在此方面应该是偏弱的。因为创造环境是需要更多的与环境和人交互。而技术者更多擅长的是与计算机交互。与环境交互,与人打交道所需要的技能和与人机交互所需要的技能是完全不一样的。
在此方向,我也曾遇到过,哪个工程师”背着手上厕所,就是不扶你“的情况,有的同学投机取巧,写烂代码,迟到早退,屡教不改被我开除,还跑到百度知道上骂我和我的书不好云云。
还有经常事必恭亲,程序员盼着我来救火,上司看着我像头牛,动不动就自己拼了命。结果上下不讨好,搞得自己精疲力尽。
所以,对于程序员来说,成为技术领导的道路真心不太容易。下面是我的事后诸葛亮:
第一步,你需要建立在整个团队的威信。比如在某个时候上线,一个人遇到了问题卡在那里,在这个关键时刻,你走上前,几分钟解决问题。另外,能够搞定问题,但不要陷入细节,这些是你团队的问题,不要让猴子跳到背上。
第二步,招合适的人,对路的人,招比自己年轻且优秀的人。你需要侧重的是让大家的方向感,目标感。还有自己与同级、上级的沟通技巧。
除了是技术大牛,你还得是情商、管理大牛。这条路,我和电脑前的朋友们共勉。
现在,该你了。
PS:知道大家喜欢看到这样的文章,或者有任何建议,欢迎后台留言告诉我,我会试着连载一系列文章,带着大家从程序员走向架构师,CTO之路。