“我个人经历觉得,精进一门技术,不管是对于开发还是其他工作,都是重中之重!”
淘系技术部 - 前端技术 - 禾鸟
当我刚毕业的时候,在一家小厂做Flash游戏开发,由于当时开发人员配比严重不足(qiong),所以不但要用AS3去写前端游戏UI功能,还需要用NodeJS写服务端游戏逻辑、SQL处理数据读写操作、HTML/CSS/JS写后台配置管理页面,且一度在公司没有招到测试的情况下,所有的功能测试只能通过自测来完成。
时间一长就有些膨胀了,自我感觉非常好,觉得自己就是全栈,觉得只有更大的舞台才能配得上自己,进入大厂应该是轻而易举的事情,于是开始往网易、阿里、华为一些大厂投简历,Flash游戏开发、H5游戏开发、Web前端开发、NodeJS开发、服务端开发、测试开发各种岗位都投了遍。结果就是被现实狠狠地打了脸,投的简历石沉大海,少有的几个面试也都是一轮游。
后来总结反思了一下,在所有面试中,面试官经常会问这么几个问题:XX原理是什么?XX如何实现?对XX你是如何理解的?对于XX功能是否有更好的解决方案?面对这些问题,发现了自己其实对底层原理一窍不通,所有都还是停留在使用层面。
看清楚了这个问题之后,我暂时放下了其他域的学习,专注在前端领域的学习,从基础的HTML/CSS/JS入手,到lodash/JQuery等常用工具库的使用,再到Vue/React等主流框架的使用以及原理的学习,以及ES6、TS等学习掌握。等熟练掌握了这些技能之后,再深入到浏览器工作原理、网络通信机制、前端性能优化、稳定性安全保障等知识点的学习。一步一步从搬砖菜鸟变成了熟练搬砖工,然后继续朝着搬砖砖家努力。
总的来说,在小厂,老板当然希望能更省钱,巴不得一个人就能干完所有的活。而对于个人而言,精进一门技术,不管是对于开发还是其他工作,都是重中之重!【说的大实话!】
“不要把自己当做业务研发的工具人。”
淘系技术部 - 移动开发 - 临境
这个问题没有标准答案,角度不同,得出的结论会大相径庭。前不久刚从小厂跳到阿里,简单聊下我自己的感受。
小厂会更偏重于业务,因此我们更多的是在实现业务方的需求,日常的研发工作也少有接触特别难或者深的内容。这个阶段不是说基础不重要,但深入学习基础知识可能对你业务研发不会有特别明显的提升。
曾有段时间我为了学习算法知识跑去刷 leetcode,刷完两三百题后陷入了迷茫。这些刷题获得的算法知识在大部分的业务场景中不太能用上,虽然它对于在编程中边界条件判断、减少低效代码确实起到了一定的帮助,但相较于投入的时间来说性价比略低。
同样道理,学习操作系统、计算机网络、计算机组成原理能让你对整个计算机体系有一个更深层次的认识,但工作的人不比在校生,时间比较有限,如果你不是一个特别特别自律的人,投入时间没有看到明显产出很可能会中途放弃。
如果想要在工作的同时更深入学习一些计算机基础知识,可以从你正在做或者感兴趣的性能优化入手。不少性能优化手段背后都伴随着深入的知识,比如之前不少大厂分享的针对 iOS 二进制重排、优化冷启动的内容。学习过程中一定会碰到自己不了解的知识,一点点去积累,会比盲目的抱着一本砖头书直接啃更容易坚持。
另外,如果是业务研发,请一定锻炼自己对业务的理解程度,不要只停留于需求来了做完就完了,把自己当业务的工具人没有对个人成长没有益处。
最后,和大家分享一句我和喜欢的话:“书上没有知识,书上只有信息;知识是在特殊的工作和行动中运用信息的能力。” 共勉。
结语
程序员要精还是要广,并不是一个有着标准确定答案的选择题。
精于基础,广于工具,熟于业务,永远保持进步和学习的心态,希望各位都能找到最适合自己的技术成长路径。