如何成为一名全栈开发工程师
我曾经有一个梦想是要成为一名全栈开发工程师,因为我认为一个程序员无所不精无所不能是一件很牛逼的事情。
同时当一个程序员无所不精的时候,不仅仅自己可以开一家公司自己接活干,同时即便不办一家公司,在一家公司好歹可以吃香的喝辣的。
抱着这个理想目标,于是在那段时间我时而学Docker,时而学Nginx,时而学SpringBoot,时而学分布式,时而学Node.js,时而学Vue.js等等,总而言之运维、测试、前后端等能学的都学了。但是学完后来,留下的仅仅只是HelloWorld。其他有深度的少之又少。
之前那段时间我看书的速度非常快,几乎是两周三周一本书,技术方面的居多,但是呢?看了太多了,留下的太少。感觉出来知道哪项技术的名字和简单的Example之外,其他都没有了。
假设我将快速遍读群书的时间用来专攻一本或者两本书,那么我相信这一本或者两本书我已经足够吃透了。就算不足够吃透的话,半透应该没问题吧。
在知乎上我也搜索过不少关于如何成为一名全栈开发工程师,但是最终我只能一个这样的结论,那就是一专多能。所以我决定了接下来我所要做的就是一专。
曾经时常逛逛拉勾,不为跳槽,只为看看现在有哪些技术比较主流,然后就去学,记得当初学的时候,我那个时候学习是这样的,百度搜索找到对应的Demo,然后将人家的例子练习一遍,发现可以运行,十分高兴,然后就不管了,我就认为这项技术我已经懂了。当然了,如果遇到一些问题,我会先找找怎么解决这个问题,但是一般情况下是百度搜索出来的几乎质量不是太高。
以至于很多Demo跑起来了,一旦测试这里报错那里报错我就不想试了,一天天这样,最后发现技术广度虽然增加了点,但是这个增加的点似乎毫无意义,就像我前面说的那样仅仅只是知道名字或者是写简单Demo,对于其他的,比如技术的优缺点,应用场景等等一无所知。
我之前以为在小公司里面做前后端加运维和测试,就算是全栈了,但是后来我发现,这并不是我想要的全栈。因为这样一来我除了会用之外,似乎什么都不懂了,特别是有些时候出现问题时,我都忽略了日志的作用,不先查看日志直接找到对应的信息直接百度。变的慢慢缺乏思考了。变的像真正的码农了。这不是我想要的样子。
之前我在一篇文章中说过,我不喜欢别人叫我码农,因为码农在我看来是将脑力劳动变为体力劳动。有的时候我再想我写的代码到底有什么用呢?仅仅只是复制粘贴吗?
不,代码应该表现的是我的思想,我的严谨思想,我的一丝不苟。于是我反思自己,想到之前的代码,看到那堆糟糕的英文,我站在镜子面前看着我,真有种想那拖板鞋砸自己。
站在镜子面前我想,如果我当初写的严谨的话会不会有这么多问题,同时无效率的加班这么长时间。
知乎上有不少人这样认为,他们认为只有这样做才能成为全栈?比如:
当然了,也不乏客观求实的回答,例如:
我比较偏向这位客观求实的回答。
具体过多的我就不多说了,知乎或者其他博客平台有一大把这样的。
以倚天屠龙记里面的张无忌来说,张无忌自从学会的乾坤大挪移之后,在光明顶与少林、武当、峨眉、昆仑、崆峒、华山等六大门派对战,并在与少林对战的时候交战过程中轻易就将少林的龙爪手学会以此克敌。张无忌之所以能快速学会乾坤大挪移得益于身上的九阳神功。
在此我想说的是作为一名程序员,要想无所不能触类旁通,必先将内功心法练好,不然的话再怎么折腾感觉也没多大用。
或许有朋友说这个内功心法是什么?
我的回答是这个内功心法就是你吃饭的家伙,比如Java程序员通常吃饭的家伙是Spring全家桶之类的,作为Java程序员可以从Spring源码开始研究,等研究透了,就能触类旁通,其实我相信那些已经懂得了好几门编程语言的朋友们他们很能体会到触类旁通的道理。至于如何研究,笔者也不知道,因为笔者正打算研究,不过好在目前市面上有很多资料,许多有上进心的工程师研读源码时,踩了不少坑并将这些写成系列文章,以此让广大友友们受益。
我愈发的喜欢程序员这个职业,因为什么呢?因为乐于分享,将自己所知道的和吃的亏写成相关文章或者文档分享给其他朋友们,让其他朋友为此少吃亏少浪费些不必要的时间。
换成像其他职业的话,难免会遇到师傅带徒弟时留后手之类的。
当然了,也并不是说程序员这个群体就没有这样的人,但是相对于那些传统产业而言,程序员这行这种现象不是太多。因为每个程序员朋友都知道,帮助他人就是在帮助自己。
同时在帮助他人的时候,自己所收获的不仅仅是自我成长,同时还有来自内心的欣喜,你可以理解为成就感。
回到之前这个问题,如何成为一名全栈开发工程师?
就我自己的想法我是这么认为的:
第一、做好当前的事情(比如在公司的时候认真编写每一道程序,因为公司一旦交付出去后,不仅仅代表的是公司的形象,同是也代表我自己的形象);
第二、不要三心二意看到这个厉害就去学这个,看到那个厉害就去学那个,应当根据当前的业务而言,比如当前SSM框架开发这个项目及其单体拆分已经足够了而你还是想要以自己的角度出发动辄微服务分布式,这样到头来苦的还是自己;
第三、还是前面那个老兄说的对,全栈并不是指所有方面都略知皮毛的工程师,而是指在某一方面具有深入研究,同时可以在其它方面快速上手,解决问题,或协调他人解决问题的那一类人,所以首先要专注于当前的,比如我是Java开发工程师,应当专注于Java相关的,比如我目前用的最多还是Spring,最好还是应当好好研究下Spring,可以研读它的源码,毕竟目前相关的博文也不少,同时书籍更多,而不是去追求其他以外的技术;
第四、兴趣,将编码当做一件快乐的事情总比对着它发愁要好吧,同时兴趣也是不断前行的力量之一;
第五、坚持,著名的一万小时定律就是这样,当然了,这个一万小时我在前面一篇文章中说过,一万小时并不是像我之前那样这里学点那里学点,而是要专注,我发现我之前这里学点那里学点感觉编程语言似乎没有什么不一样的地方,都是基本语法,然后高级特性,然后web方面,然后就是框架了。
最后,我给我自己2019年定下的大目标和小目标,当然了,大目标是希望能够成为一名高级开发工程师,能够独当一面,带动团队。我知道这并不是一下子能够实现的,所以我将其定为我的长期目标。
小目标分为如下几类:
生活类:
(1)培养良好的作息习惯,晚上11点00关灯睡觉,早上8点起来(不管是平时还是节假日都遵循,因为我觉得时常熬夜的话,先不说伤身吧,美好的一天就因为睡觉过去了一半实在是太可惜了);
(2)适当锻炼自己的厨艺(总是出去吃或者点外卖确实有些腻了);
(3)锻炼身体(跑跑步、羽毛球、散步等),身体是革命的本钱,我可不想有一天倒在电脑面前;
学习类:
(1)认真踏实的读书(书中的例子,认真练习,模仿同时做笔记,不能只追求数量而不重质量了,先以数据结构与算法分析这本书为例);
(2)坚持写博客,并不断提高文章的质量,以博客园这位仁兄为楷模,五年里一直在不断坚持写,同时也一直再给自己定目标并实现目标,我觉得这种拼搏精神和学习精神值得我和许多小伙伴们学习;
(3)对所使用的Spring全家桶中的Spring好好研读一番;
(4)我的Github好久都没有更新了,我觉得有必要将我在工作常用到觉得很不错,应对编写个类库分享给大家;
(5)扩展知识面,感觉知识面还是太窄了,有一句名言叫做,人丑就是要多读书,但是我自认为我不丑,不过我觉得我的精神很匮乏,需要精神食粮;
工作类:
(1)来年我要实现代码Review,并在团队中推行,当然了,这个我需要沟通,之所以代码Review,原因在于我不想团队编码陷入各自为战的境地;
(2)代码约束还是要的,从我自己写的代码出发,问题不少,看到其他同事的代码,同样有问题,我希望能够定下一个规范,可以参考阿里巴巴的Java开发手册,当然了同时也要结合实际情况;
(3)今年觉得领导派给的不少任务,我没有做好,虽然不一定是我的职责,但是没做好就是没做好,不想找太多的借口,我希望从现在开始能够将事情做好,不管最终是否完成,起码态度上要好,我不希望我的心态变成面向工资编程,毕竟就我而言,成长比工资更重要,当然了吃饱饭睡好还是要的;
(4)更好的协助同事完成任务,同时也保障自己完成的前提下(之前我犯了一个错误就是我帮助同事把他的任务做完了,却没有把自己的做完,我之所以认为是一个错误是因为那位同事并没有开始做这个任务时,没有思考怎么做,我就已经帮她做完了,这才是最让我痛心的,应该反省的,我总希望自己变的更强,自认为帮助同事把他们的任务全部搞定是一件很牛逼的事情,但是自己的却没有做好,弄的我在领导面前都有些抬不起头了);
爱情类:
一句话,我要嫁给爱情,虽然我是一个Boy。即便每天生活如此繁忙,节奏如此快,我相信我一定能够遇到与我共此一帘幽梦的女孩。
财务类:
这个我要小小的保密了哈,总之我相信我能够实现。
旅行类:
这个看情况吧,我是希望来年北京回暖的时候,能够去登登山,登山可是我的爱好之一。当然了,节假日的时候,如果可以的话出去走走,世界那么大,出去看看也挺好的。
最后希望每个IT小伙伴们在即将到来的新的一年给自己定下一个目标然后为之努力去实现它。
再祝各位IT小伙伴新的一年,身体健康,家庭和睦,工作顺利。