谈一谈全栈,为什么不建议初学者去做

1,172 阅读10分钟

       最近二刷了余果的《web全栈工程师的自我修养》,颇有感触,想要和大家分享一下。

       第一次看是还在上学的时候,那时刚学前端不久,和很多初学前端的同学一样,想着以后要走全栈开发的路,要学好前端的技能,同时还要掌握数据库,服务端开发等技能,甚至是会点设计和测试,等于说是要一个人包揽整个web项目的开发。在持续的学习和工作中,越来越觉得,全栈可行,但不要轻易尝试。对于初中级前端来说,掌握好需要的前端技能已经是一件比较困难的事情了。

       第二次看就是最近看的了,目前工作四个月,主要从事React技术栈的项目开发,仅限于熟练使用React+Antd的API,也了解生命周期的运行机制,但是并不知其所以然,对于常用的数据结构与算法也仅仅局限于面试的时候的了解,设计模式一窍不通,ES6是各个框架和Node的基础必学,看了好几次仍然觉得理解的不够深入。目前的状态是我渴望学习很多知识,但是并没有真的学到这些,当然,我的状态估计也是很多前端同学现在也面临的问题。

       回到正题,两次看的侧重点也是不一样的。

在我认为,书的内容分为四部分,一是什么是全栈;二是学生和野生程序员,三是一些全栈的知识点,四是好的习惯和成长方式。

       第一次看的时候主要是看第一二部分,从那个时候了解到了全栈,也就有了成为全栈工程师的想法。第二次看着重看的是第三四部分,真的是受益匪浅,作为初入职场的小菜鸟,没有导师带领,只能自己摸爬滚打,没有人指导良好的代码习惯和成长路径,靠自己慢慢摸索总会感觉到迷茫,当我静下心好好看第四部分的时候真的觉得这些对于我来说都是很需要去执行的。

再来剖析的聊一聊这个话题:

1、什么是全栈

2、怎样的人或达到什么阶段可以做全栈

3、适合自己的成长方法论

希望大家可以带着这几个问题去看文章,看完之后可以回顾一下自己有什么收获。

一、什么是全栈

       有人这样说过:全栈工程师是指,一个能处理数据库、服务器、系统工程和客户端的所有工作的工程师。根据项目的不同,客户需 要的可能是移动栈、web栈,或者原生应用程序栈。也就是说一个人相当于一个团队使用,你得会点前端,后端,还得会点设计和测试,最后还要会运维上线。需要清楚的知道web开发的流程。没有接触过整个流程的,可能认为应该比较好掌握,但是并不是,每一个方向学起来都是很难的。

       真正的大牛他了解的是内部的运行和实现机制,从计算机到编程语言再到嵌入式设备和服务器,无所不精。工具和语言只是他们用来解决问题的不同方法而已。说他们是全栈不说说是全才,需要的是扎实的基础知识和良好的工作素养。

      书中也说了,我们大部分人都是普通人,遵循一万小时定律,才能掌握到某一行业的精髓,从平凡变为超凡。那么如何从一个小菜鸟成长为全栈工程师呢?书中推荐采用“先精后广,一专多长”,我也是很赞同这种学习方法的。下来谈一谈怎么成为一名全栈(即使不能成为全栈,也起码在这条路上前进了)

二、怎样做全栈

      全栈工程师并不意味着整个项目都只是你一个人负责,只是说希望拥有全局的思维去审视问题,记得一句话说的很好,观察网站的角度越高,就越能有效地定位问题和解决问题。说到‘先精后广,一专多长’,大家也应该理解意思,一个方向先仔细钻研,进行深度发展,之后在扩展宽度,学习其他技术。拥有全栈思维是一个基本素养,即使现在技术水平还不达标,但是看待问题的视角也会更加宽广一些。比如说小E是一个前端,他不仅能写前端代码,还需要围绕商业目标和关注用户体验。围绕商业目标就是说要关注产品质量,对市场和商业有想法;关注用户体验是指从用户角度出发,自己作为开发者,如果自己都不愿意使用自己开发的产品,那用户怎么会喜欢呢,多点设计理念,而不是单纯的实现需求。

      总结来说,需要的是‘先精后广,一专多长’,围绕商业目标和关注用户体验

三、成长方法论

       这点是比较有感触的,每个人需要的成长方式都是要找适合自己的,你不能把别人的经验拿来即用。正如作者在高效工程师这一章所讲的一样,不提倡无效率的加班,如果在工作8小时内没有解决完问题,那就是自己效率太低或排期安排太紧张了。有以下方式都是可以提高工作效率,特别是对我们这些初入职场的,没有得到良好的指导,所以很多需要自己去摸索,在职场初期养成良好的行为习惯,也将受用终生。

      时间管理

      每个人一天都只有24小时,为什么别人可以高效的完成工作,你却拖拖拉拉要加班到深夜,有一大部分原因是上班时间工作效率太低。所以时间管理就显得尤为重要。时间管理四象限是目前一种很被提倡的时间管理方式,合理的安排将提高你的工作效率。在工作之余可以做自己喜欢的事情,人生不止工作,多去生活也是很重要的。

英文

       作为软件开发工程师,接触的最新的技术文档其实都是英文的,而且全球最大的同性交友网站github也是国外网站,不会英文就只能看别人翻译后的文档,但是

中文化的文档都是加入了翻译者的主观思想,不能确保完全是作者的意思。作为一个大学四级考了第四次才考过的人,我的英语也是极差的,所以我也是更加深刻的感觉到英语的重要。首先是英文的技术资料更多也更前沿一些,其次google是更能解决问题的(相信开发者都是比较有感触的)。

      怎么学习英文呢,颇有感触的是 github.com/byoungd/Eng… 这个文章,我看了两遍了,感觉很不错。所以推荐大家在日常的开发和搜索中可以多使用英文,多去github看看项目和源码,读不懂没有关系,一个单词一个单词的先去认识,推荐 一款google插件,可以划词翻译。大家可以在公众号后台回复chrome获取google神插件。

关注用户体验和设计优化

      部门老大一直强调我们需要关注用户体验,做一个懂点设计的前端工程师,不需要学会设计,就是要懂一些设计理念和原则就好,在实现原型图的时候,可以从前端的角度出发,做出优化,因为前端是离用户最近的开发者,可以将产品做到更好。设计的原则其实很简单,四大基本理论:亲密,对比,重复,对齐。可以带上这些理念去重新审视原型图。

       推荐一些设计的网站:antd,小程序,Behance,dribbble,UI8,站酷,花瓣,Pinterest。可以了解一些。

沟通,反馈与输出

      有人认为开发工程师只要好好敲代码就行,不用太会说话,其实并不是这样,沟通能力真的很重要。正确的表达自己的想法,又让别人觉得舒适的沟通方式一直是很多人想要的。程序员和产品,测试,对应的开发以及上级是沟通最多的,和产品,测试那就不是沟通,基本就是怼,但是怎么能怼的他们心服口服呢,我目前也没有什么方法,哈哈。和对应的开发需要联调接口,那就是需要好好沟通了,以接口文档为准,如果修改了就及时反馈到文档上,有必要的时候可以带着电脑一点点的调接口,没有什么的是解决不了的。

       程序员经常做项目,一个项目完成之后总会有收获,所以需要进行及时的反馈输出,我算是有一个好的习惯,每天都有工作笔记,没有多难坚持下来,就是你早上打开电脑,自然而然就会想一想今天需要完成什么,进度需要到哪里,然后我就会列出来,下班之前再回顾一下,把今天遇到的难题和解决办法记录下来。一个项目完成之后,我会把它们梳理成一篇文档,记录一些经验和学习成果。如今做了公众号,我也会把最终结果输出并分享给大家。

       记笔记的工具就给大家推荐 有道云笔记 吧,建议使用网页版,听说在客户端即使是加密的文档,也是可以根据文件路径找到并读取的,但是网页版就不会的,可以放心使用。

【结尾】

以下类型的人有且大有人在:

1、还在学校或是刚工作,连JS执行机制,原型都还没有搞懂

2、每次遇到数组,字符的方法时还需要百度

3、只在做业务,熟练使用框架API,但不知其所以然

对号入座自己是不是以上类型的开发者,如果是,先暂时放弃全栈的想法吧,好好攻克自己的专业方向,先做到一专多能,也就是要先有深度,再扩展宽度。

       此文并不是劝你不要走全栈,只是谈了一些观点,对于想走全栈的朋友,我认为大家应该先深挖自己的潜力,打好基础,不要着急,将前端学习到比较深入的层次,至少是要理解了JS的原型,执行机制,闭包等,做个几个项目,对web开发流程有一定的了解。希望大家可以找到适合自己的成长方法论。