又一年过去了,到了交卷的时刻,在26岁的黄金时期,跑赢了梦想么?
经历了刚毕业时的无知"愤青",经历过维护"屎山"代码,经历过大牛同事充满设计、思考的让人膜拜的代码,经历过摸鱼达人的团队,经历过大牛团队,总是在想自己到底适合什么样的环境,但现在的想法是,如果环境没有差到不行,就不要对环境和其他人要求太多,多观察如何在当前环境下发挥自己的价值,得到别人的信任和口碑。因为优秀是相对的, 人精走到哪都发光,如果当前的环境里都无法脱颖而出,总是都无法脱颖而出原因的 。
我经常会思考,技术的价值到底是什么?
首先是我并不喜欢写代码,我喜欢健身、和与人交往积极阳光的生活,而不是一个人coding,最初是想做产品经理,但又没什么出色背景、以及并不知道产品经理应该学些啥,所以选择了前端,作为进入互联网的路线,只不过随着时间和努力,做的还不错,而且确实是一个可以给你很多想象力的职位,以及不错的薪资,所以我并不喜欢沉迷技术,这不是我的希望,我认为,技术除了像华为、阿里云、网宿、这些卖的就是技术的公司,其他场景下只是服务于商业的一小块,而很多开发者往往局限于自己的领域思考,比如怎么提升渲染时间、如何组织项目、如何提升代码质量、怎么减少的网络请求时间。这些重要么?当然重要,但这些影响真的很大么?这可能就要问一问了,比如上面举到的抢票软件的例子、再比如我实际经历,当初我们公司app用react native开发,公司大牛对项目进行了很厉害的设计、尤其缓存设计,真的是页面切换毫无白屏,很牛。但直到我我仔细观察了另一款我经常用app后,才发现原来它没有做这样的缓存,体验差距太明显了。但这在我做开发者之前我是毫无感知的,虽然技术差的公司没有最好的解决方案,但找到个能用的解决方案还是不难的。所以我选择的方向是,每个技术花20%的精力,快速掌握各个领域主流技术80%最重要的部分,然后学习商业、运营、产品,等其他知识成为综合性人才,并且有利于自己去完整的做一个产品,这是我最感兴趣的事。
我发现很多大道理或者言论都有一个明显的问题,只表述出 做了什么会得到什么,而对会付出什么却闭口不谈。
比如,阅读react源码这个计划,得到的是什么?
但失去的是什么呢?
而我想要发展的技术方向,让我没有足够的动力去阅读源码。
在做 react native开发真的造成了极大的痛苦,95%的场景很高效,但剩下5%的问题却会花费完全超乎想象的精力去解决,主要是和native端通讯、以及触控冲突、多实例交互,最终不看好这个方向,决定转向全栈工程师。但还好团队的人都很厉害,学到了很多技术以及工作方式,并且能做app了,也是一件有想象力的事。
关于全栈工程师的抨击有很多,比如样样通,样样不精;半吊子工程师,等等,但我认为是"全栈"这个称呼导致如此多的负面评价,听上去就是啥都会,听者心里就会想,我一个技术都专研好久,你啥都会,你咋那牛逼呢?
个人认为全栈,其实说“无栈”的更妥帖一些,只是想正确且最高性价比的方式去解决软件中遇到的问题,比如:
有利于降低沟通成本,只是越来越发现沟通成本是巨大的,每个人都对自己的技术足够了解,知道怎么做更好,但如果对另一方没任何概念,无法理解某种方案对他的影响会是什么样。往往就不能做出最正确的决定。
有利于解决工作中遇到的问题。什么都懂一些,解决一个问题就能从更高的角度去看待,比如一个页面渲染的慢了,如果眼里只前端,那么你可能会去想如何写函数减少js执行时间、如何分包加载、如何减少包体积等等、但前端优化的再优秀,和在ngix上加一层redis缓存相比带来的收益完全不是一个维度。
再有就是可以独立完成一个软件,自己有一些想法,或者想做一个软件。如果仅仅有一端的知识,就会卡住,明明往前稍微走几步,稍微学一下,就可以做到,但还要告诉自己,"我是前端,不能接触后端",这么做么?
总体上感觉一个软件体系是多么的庞大,前端不过是其中的一小部分,而前端经常出现争论几个明明没有核心差别的几个框架谁优谁劣、到底该如何管理数据也是讨论的热题,更有数不胜数的轮子等等,当然我没有否认前端的价值,以及确实所有面临的挑战都是有其价值的,我只相信市场上那只看不见的手,大体上讲,薪资确实能说明一切。但我的感受是,我在做前端时,真不知道大学学那些东西是干嘛用的,cpu是怎么工作的和我有毛关系?内存和我有什么关系?而且内存爆了大不了刷新页面;不需要了解一个数据在硬盘上是怎么存储的,string 和number是如何占用硬盘空间的,什么样的数据结构适合查询,什么样的数据结构适合增删改。说到优化,算法、写法层的优化可以说真的没什么意义,只要不写出明显错误的代码,大家写的在用户看来大多没任何差别, 而真正的性能问题又不是靠写法层面的优化能解决的(因为浏览器的性能,操作系统分给浏览器的资源、DOM的天然设计导致的性能瓶颈就在那, 没有量化指标的谈性能优化都是扯皮 );还有一个原因就是,作为客户端,一个计算终端只为一个用户服务, 可server端面对的却是同时到来的成千上万个计算要求,每一秒执行时间都会被无限放大。
服务端涉及到的模块可参考
后端架构师技术图谱