首页 > 代码库 > 我对知乎前端相关问题的十问十答

我对知乎前端相关问题的十问十答

之前知乎上有不少同行邀请我回答一些前端相关问题,但是,大家都知道了,要认真回答一个问题是需要大量时间和精力的,对于还在不断学习积累阶段的我,时不时分散原本的精力,打乱自己原本的节奏,实际上是一件不划算的事情。就好像邮件或者微信,来一条信息,你就去看一下,时间和精力都会大大分散,工作和学习效率必然会大打折扣。所以我的策略是一段时间后专门花时间统一处理,这样时间利用率会更高,投入产出比会更大。

对于知乎上的这些前端的问题,我也打算采用同样的套路,趁着端午节前还有两个晚上的自由时间(当晚修正:两个晚上绝对搞不定,怕要月底前才能全部写好),决定抽十个比较具有代表性,自己能够驾驭的前端问题统一作答。

问题一、前端现在怎么这么多人?

 

问题描述如下:

投出去的简历没有人看了

技术分享

我的回答:

想来想去,还是从一个非前端领域的切身故事说起吧。

我的老家江苏泰兴是中国银杏之乡,产量全国 1/3,而我外公家宣堡镇除了小馄饨出门,还是就是中国银杏第一乡的美称。在我小的时候,银杏的药用价值和使用价值被发掘,银杏价格突然猛增,那个时候的银杏树是没有人专门种植的,全部都是很早很早以前的那些老树,百年以上的比比皆是,或者说全部都是又大又粗的银杏树(见下图),那个时候银杏 30~50 元每斤,20 年前的 30 元相当于现在 300 元,而一颗百年银杏大树一年可以产上千斤的银杏,按照现在的购买力,相当于一棵树可以给一个家庭带来年收入 30 万,所以那个年代相亲,听说市区有套房,恩,还行!听说家里有个百年银杏树,靠,直接就成了!当时一粒指头大的白果就可以卖几毛钱,可以换一斤西瓜。以至于银杏成熟的时候,银杏树拥有者(我家田里的就是我的)会在外面通宵守着。

技术分享

一看这玩意儿值钱,政府又鼓励,于是家家户户,真的是家家户户,包括我外公,屋子前面和屋后面地全部嫁接了的银杏树,好多好多颗,但是树这东西啊,它不是一嫁接就能成熟的,没个 3,5 年,花都看不到一个。然后前几年国庆回去看望,银杏成熟季节,结果发现家家户户银杏树上都挂着黄灿灿成熟的银杏果,很是奇怪,怎么还不收啊?

后来跟外公聊天才知道,现在银杏才一块多钱一斤,扣除打果子,蜕皮等一系列人力成本,完全就是亏本的买卖,所以大家全部都让果子挂在树上,自然掉落,然后烂在地里,甚至很多人,直接把好不容易长大的银杏树直接砍了,又种起了红薯花生。

我觉得前端人为什么现在这么多,和银杏树一下子这么多是类似的。

本质上市场需求导致的。

一个是移动 web 的兴起(本质上是多端的出现),二是 Node.js 发展带来的诸如大前端的发展,三是我国的互联网还在快速发展阶段,包括很多传统行业的转型等。

就好像智能手机兴起的那会儿,iOS 开发以及 Android 开发需求很旺盛,而导致后来相关开发人员过盛是一样的。

历史总是惊人的相似,但却又无法避免。

毕竟互联网行业的工资,确实比其他行业要高很多,一旦市场出现某个巨大的职位缺口,自然会有很多人涌向这一块蛋糕,来的早还好,还能吃到一口蛋糕。就像股市一样的,有些人敏锐,牛市起来的时候跟进,但大多数人都是在大家都已经知道事物很火的时候跟进的,承受的往往是低收益和高风险。

所以,当知乎上开始出现“前端现在怎么这么多人”这样的问题的时候,已经预示着市场开始饱和,那些趁着春风,听着前端很火,看着工资很高才进入这个行业的小伙伴就和牛市到头进入股市,别人银杏赚钱也跟着种银杏树的人一样,必然要面对贬值和风险两大问题。

在市场面前,我们其实都是商品。

当市场趋于稳定,最终能够摆在货架上的,还是那些真材实料的商品。所谓大浪淘沙,去粗取精,时间会证明一切,其实也是同样的意思。

所以,提这个问题的小伙伴,你应该意识到问题不在于前端有这么多人,而应该意识到自己在前端这一块的造诣还不行,意图趁着春风进入某个行业,并且有大成,这种概率非常小,因为职业生涯它是一个长期的过程,就算你趁着行业需求紧缺进入这个行业,你自身能力不过关,永远都会停留在这个位置,会逐渐沦为边缘角色,生活不一定开心的。

你想啊,如果你比大部分人都优秀,能力比大部分人都强,再多人进入这个行业也不需要担心,所以其实最重要的是,安下心来好好的把自己的前端知识给打牢了,基础学扎实了学系统了,千万不要有什么一夜暴富的想法,群体一定会发生小概率事件,但是是不会发生在你这个个体上的。
我当年大学毕业的时候,前端这一块的积累其实已经比很多人都多了,但我还是辞去工作,无业闭关学习了 9 个月的基础知识,你看我现在已经 30 出头了,虽然还是在一线,但是根本就不会担心小鲜肉顶替了自己的位置,因为内功足够扎实,这些东西呢,才是真正经得起时间考验的。

所以,如果当你们静下心来更关注自身成长的时候,说不定哪天一抬头,嘿,物联网兴起了,需要大量前端职位;人工智能兴起了,又来了前端职位;JS 已经深入到生物基因工程领域了,又是高薪职位。

此时的你,站在了牛市的起点,自己就是一颗巨大健壮的银杏树,而银杏的价格又很高很高……

而银杏的故事其实还没完,很多农户把自己的银杏树砍掉重新种了普通庄稼,所以这几年银杏价格就开始节节攀升……所以简历无人问津,不要担心,你再坚持个一两年,一定会有新的机会的!

问题二、Web 前端的路该怎么走?

 

问题描述如下:

刚刚毕业,在公司一直做的是前端开发,之前都是自己去学习一些基础的前端知识(html+css+js)。到现在越来越迷茫,不知道自己该去学哪方面的。 在学校学的都是一些基础知识,毕业之后自己自学了 JavaScript,在这个公司,要求不高能搭页面就行,可是我想提升自己。.求各位前辈指点!

我的回答:

想要提升的想法是对的。企业对员工的要求就是搭页面,只会是下面两种情况:1. 页面质量各方面都是 top 级别,交给你实现可以收益最大化;2. 你技术能力仅限搭个页面,其他活交给你不放心。由于你刚毕业,我想你应该是第二种,所以,如果你满足于现状,必然对自己职业发展是非常不利的,任何可以被轻易替换的职位都是不具有竞争力的,搭页面就是IT行业门槛最低的职位,没有之一,虽然实际上要想搭的好需要很多积累,但是,对于大多数企业,大部分用户,大部分场景,只需要页面视觉过得去就可以,而这种程度的要求实在太好实现了,而太多入行的新人都是这种程度,导致“问题一”的出现。

从理论上讲,只要你 HTML 和 CSS 足够精通,页面足够好,也是可以进入很好的单位,有不错的发展。但是,很难,对于大多数同学而言,往往是条不归路,所谓一叶蔽目,不见泰山,简单和舒适容易让人忽略的对边界和底层的不断探索,以及即使是大公司,也不希望你化太多精力在收益不直接不明显的事情上,所谓人在江湖,身不由己,因此很难坚持下来。

所以,我的建议是优先投入精力在 JS 的学习上,学习一定要系统,一定要是基础知识。

学习有经验式学习和系统学习两种。经验式可以收获书本上没有的一些知识,例如微信浏览器下的坑,以及知识具有极高概率的重复利用可能性,可以说是投入产出比非常高的一种学习方式;但是不足也很明显,一是学到的知识比较狭隘,拿搭页面举例,常用的 CSS 颠来倒去就那些,以至于很多小伙伴都没见过unicode-bidi等 CSS 属性;第二个是工作效率其实并不高,一旦遇到之前没有接触过的场景或者需求,就会不知从何下手,百之谷之问人之,大把时间都被耗掉了;第三个就是技术实现往往不是最优解,举例来说,想要知道A元素是否包含 B 元素。以前工作经历让我们知道parentElement可以获得父元素,于是,说不定就会写一个不断遍历父元素判断元素是否包含的方法。写的人自以为写了个很厉害的方法,殊不知,浏览器,包括低版本 IE 都天然支持元素是否包含的 DOM 方法contains

而系统学习是成为一个技术能手所必须的,全部知识点在脑中(或者有印象),自然想要实现什么手到擒来。然而系统学习却是很枯燥,很花时间,有些知识可能一辈子都用不到几次,平均下来,似乎是个投入很大产出效率并不高的买卖。人总是喜欢舒适讨厌无用功的付出,因此,有非常多的开发人员的知识都是经验式学习,然后 1 年经验 3 年用,然后中年危机。

“基础知识”是相对上层工具或者应用而言的,例如,最近 Vue 很火,对于刚毕业的你,且公司又不需要你写 Vue, 因此,Vue 哪怕被说到天上去,也不要去学习,抓紧时间学习 JS 基础知识,原生的那些东西。

虽然前面讲过学习要系统,但是,JS 知识点那么多,如果每个知识点都花大把功夫去学习,且不说能不能学懂,怕是压根腾不出这么多业余时间吧。因此,很有必要指出哪些内容是适合你当下学习的,否则学习无重点像无头苍蝇,很容易陷入迷茫的。

非计算机专业背景学习 JS 要点:

  1. 非常重要:先要对 JS 这门语言要有整体、感性的认识;
  2. 掌握 JS 中的字符串、函数、对象、数组、字面量等基本概念,熟记所有内置的方法(包括参数和返回值);
  3. 所有继承和原型相关内容跳过,注意,是跳过,不要看!没有这些 JS 一样可以活得很好,你的日常工作一样玩得飞起,当然,你没忍住看了相关知识也没关系,因为你会发现自己看不懂的;
  4. DOM 事件和所有 DOM 方法一定要掌握的牢不可破;
  5. 学好正则表达式;

然而,要记住 JS 所有字符串、函数、数组相关的方法,所有 DOM 相关方法是相当庞大的一项工作,因为,很容易忘记,方法也很简单,所谓好记性不如烂笔头。把编辑器的 JS 自带补全提示干掉,从小交互开始,尝试使用原生的 JS 书写,写着写着,一定就会记住了,这是最快学习成长的方法。

学习的过程一定是带有痛苦的,并且漫长的,千万不要出现类似“《JavaScript 高级程序设计》和《JavaScript 语言精粹》我都看完了,接下来我要学什么的言论”?你以为你是黄蓉啊,看一眼就记住啦!反复看,看完肯定会忘记,忘记了再看,我也是看这两本书学习 JS 的,《JavaScript 高级程序设计》这本书已经被我翻到掉页了,《JavaScript 语言精粹》上面满满的笔记,哪个知识点不记得了,基本上一翻就可以准确到对应的页数,因为也是翻了太多遍了。

最终学习是否成功的关键在于“坚持”。

在一个相对公平的环境下,想要超越他人,只要能够完成他人完成不了的事情就可以了。大多数非计算机背景前端从业人员对于 JS 的系统学习是很难坚持下来的,时间长,收益缓慢,但是,如果你坚持下来了,你就超越了这些人,你就不是一抓一大把的页面仔,而真正能独当一面抢手的前端开发了,完成了前端开发领域的阶级跨越。如果你学习的时候像放弃,想想前面这句话,或许就又有了额外的动力。

问题三、前端开发基础扎实的标准是什么?

 

问题描述如下:

  1. 题主妹子,现在在培训学习前端,看到有人说不要培训出来的程序员,因为基础不扎实,自学能力差等,让我不得不重视这个问题;
  2. 题主上一份工作是做招聘的,也了解过,有的企业是不要自学的,因为没有经过系统学习,基础也不扎实,但是有人又说会喜欢自学的人多过培训的。
  3. 感慨就是这个世界好复杂,每个人想要的都不一样啊,那其实唯一的标准就是基础好不好嘛?

那问题来了:
对于前端,或者其他的IT岗位而言,怎样才算基础扎实呢?

我的回答:

这个问题我们其实可以通过咬文嚼字来理解,首先要明白什么是“基础”,然后理解什么是“扎实”。

“基础”汉字表形上有“土”“石”“山”,原本用在建筑构造上,由于地球重力的存在,现代建筑都是从下往上建的,而最下面这个用来稳固建筑的这个底层就是“基础”。众所周知,建筑越高,基础一定要越牢固,否则就会出现“眼看他起朱楼,眼看他楼塌了”的情况。在这世界上有非常非常多的东西都是从无到有建立起来的,就跟一栋建筑的拔地而起是一样的,先有个底子,然后再慢慢的往上添加东西,最终形成一个完整事物,而这个“底子”,我们也称之为“基础”,可以看成是事物发展的立命之本。

其中个人技能成长,就是非常典型的一个从无到有建立的过程,比如说打篮球,篮球规则,运球,定点投篮等就属于非常基本的东西,我们就可以称之为“基础”,就算篮球之神迈克尔乔丹也是踩着这些基础成长起来的;又比方说前端开发,在接触这玩意之前,大家显然都是一无所知的,到后来祝那个玩出点花样来,这个从无到有的过程也必然伴随着一些称之为“基础”的东西在里面,那到底是什么东西呢?

回到这个问题本身,目前行业中前端开发其实分两类,一类是偏逻辑系的,一支也是偏视觉系的,无论是哪个系的,基础都离不开 HTML,CSS 和 JavaScript 的,但不同系别最基础东西有差异,如果是偏逻辑系的,基础中的基础是 JavaScript,至于逻辑思维能力和抽象能力,并不是基础,而是天赋,基础是通过努力可以夯实的,如果无论怎么努力也夯实不了,那就不能称之为基础;如果是视觉系的,基础中的基础就是 HTML,没错,是 HTML,不是 CSS,虽然 CSS 出镜频率甩了 HTML 好几条街,但是,最基础的是 HTML,自带行为和样式,前端中的前端。同样的审美能力和具象能力也不是基础,这东西天生的,很难练出来。

提问的妹子上一份工作是做招聘的,根据我其实不太靠谱的经验式猜测,妹子应该是走视觉系的,那前端基础排序应该是 HTML > CSS > JavaScript。大家千万不要有这样一个误区,认为基础的重要程度是和学习时间成正比的,其实不是这样子的。很多人学 HTML 估计就几周时间,觉得学得很不错了,简历上可以写“精通”二字,因为最终的效果好像确实和预期的一样,我说这个并不是想吐槽这些人“槑”,而是想表达的是 HTML 这门语言相当的厉害,这绝对是一个会非常长盛的语言,因为其重要同时上手非常的简单,并且随着发展,说不定以后会一统万端。

这个问题的重点其实是“扎实”。先说说“实”吧,拿大米举例,我们盛了满满的一碗饭,用勺子再压一压,我们会觉得米饭很“扎实”,很管饱,但是我想从来不会有人觉得一碗粥很“扎实”吧,为什么呢?粥里面虽然也有米饭,但其实百分之八九十都是水,水大家都知道的,进到肚子里一会儿一泡尿一撒就没了……

基础知识的学习其实也是类似的,所以“实”,就是要满,就是要没有间隙,就是没有水分在里面。假设请问那些基础知识,无论 HTML,CSS 还是 JavaScript,我们都看成是一碗米,那我们花两周速成那些知识,或者说平时项目开发所用的那些知识所代表的米粒顶多就一碗粥里面米饭的量,虽然吃的时候管饱,你以为好像知道了全世界,但实际上你知道的永远是碗里面那一小撮米而已,这就是不够“实”。

因此,所谓“实”,就是从中心到边界全部一个不落的进行细致的了解,比如说举个很简单的例子,是我问过我厂实习生的问题:“CSS vertical-align支持几个关键的属性值?CSSvertical-align支不支持负值?CSS vertical-align百分比值是相对哪个属性计算的?”CSS vertical-align属性大家肯定都用过,一定是middle用的最多,有时候也会用用top或者bottom,然后有太多的人就会认为vertical-align:top/middle/bottom就是vertical-align属性的全世界,这就是典型的CSS前端知识不扎实,想要扎实非常简单,MDN 文档看起来。HTML 中有非常多的标签和属性,有新标签字的行为,有些属性自带行为,还有些属性自带样式,且影响无障碍访问,想要“实”,文档一个一个看过来,一定要一个不落,要记住;CSS 那么多属性,默认值是什么,支持的属性值是什么,定义是什么,都是非常简单的不需要逻辑思维的东西,全部一个不拉记住。于是你会发现这些其实非常表面的一些东西,你花两周时间是根本来不及看的,我想很多人两年都看不完,或者说根本就看不下来,静不下心来,眼睛速度一扫,恩,我知道了,这些东西,好简单,其实屁什么都看不出来,就好像自己写的文章中的错别字,有时候复查个十几遍都看不出来。要想从简单的自以为了解的东西中看出一些不一样的东西出来,这个其实是需要天赋的,心态,专注度等都有关系。

所以,虽然我这里对这个问题进行了用心的回答,但是最终能带来多少好的结果我其实是保持极大的怀疑的。

最后,回答一下“扎”,“实”为“满”,可以理解为广度,“扎”则可以理解为深度,我们可以看两张图片,形象的感受一下这个“扎”这个动作:

技术分享
技术分享

也就是说基础扎实的另外一层意思就是要“进入水下”,“深入肌肤”,也就是说,我们除了要熟记表面的那些定义啊,语法啊,参数啊,还需要多思考,为什么这样设计?为什么会有这样的表现?

举个简单例子,我们或多或少都听说话,写页面要符合 W3C 标准,HTML 一定要要语义化,但不知道大家有没有想过为什么要注意语义化?这其中背后的原因就是“扎”。

如果我们把前端基础知识点比多人的话,所以前端基础扎实,包括:在座所有的人我都知道你们的名字是什么,你们的父母叫什么,在什么地方上班,星座是什么,特长是什么;甚至我还知道你为什么你会叫这个名字,你为什么会有这样的性格。

发现没,“前端基础知识”这几个字看上去好像很简单,但实际上真的要做好其实是非常难的。HTML,CSS 和 JavaScript 分属三门不同的语言,每门语言都有非常多的基础知识,要想全部记住并能自如在项目中选项应用,那一定是需要大量的时间学习和积累的。

但是如果你积累到一定程度,犹如万丈高楼一样,有非常好的基础,日后在前端领域,尤其技术这一块,日后的高度一定非常可观,而且持续上升。并且无形中会从一个前端使用者变成一个前端创造者,成为一个真正的高级前端开发人员,成为行业的香饽饽。

问题四、前端新人的迷茫?

 

问题描述如下:

大二,学前端大半年了,html,css,js,jq,less,bootstrap 这些不敢说精通,但也熟练掌握,项目也做了不少。最近学 react 的时候开始感觉力不从心了,之后再去了解 webpack,npm,node 等简直一脸懵逼,各种配置命令行根本看不懂,仿佛到了另一个世界。
到了这个阶段应该怎么继续学下去呢,是我基础知识不足的问题吗?

我的回答:

现在的年轻人啊,就是急躁。有句古话说的好,不识庐山真面目,只缘身在此山中。

如果单看问题表面,进行不下去,肯定是因为基础知识不足,主要是计算机基础理论知识,这个时候就可以看出计算机专业背景的优势以及其实JS掌握得很弱啦。

但我看的是,你可能在走一条错误的方向,或者说有种给人盲目学习的感觉。

我觉得我大学最大的收获是“自我认知”。我当时买了一本厚厚的心理学书,叫做《人格心理学》,读得非常认真,一页不落全部读完,几乎每一页都有笔记和心得。这本书是我人生中的一个转折点,它让我明白了,为什么我会如此特立独行,为什么性格会很罕见地分布在两个对立端,为什么内在更像女孩子,敏感细腻,喜欢和女孩子相处,喜欢听女生的歌(取向还是正常的哈),这种性格特质比例多少,这种性格的优势在哪里,不足在哪里等等。

“自我认知”带来的好处是更自信,内心更强大了,比方说一些说话刻薄的人说你是“变态”,你就可以大可不必放在心上,因为你自己知道你是什么一个人;你知道自己的不足在哪里,以后就可以知道从朝方面努力不断改正让自己变得更好;你知道你自己的特长在哪里,从哪方面发力更容易让你走得更高更远,学习的时候不会盲目,即使是一条别人没走过的路,也会坚持走下去。注意,最后这一点就是我想说的重点,所谓“人贵自知”,人的精力总是有限的,盲目地学习,甚至直接去硬啃自己当下啃不动的骨头,实际上是种无谓的消耗和浪费。

在我看来,你学 react 除了让自我感觉良好以外,没有任何作用,如果你的目标是进入非常棒的前端团队的话。因为校招,甚至社招,基础绝对是更重要的。所以,我觉得你有必要好好想一想,我的专业是什么,我的兴趣是什么,我最强的特质是什么,既然你说你 react 力不从心,很显然,react 这种东西在当下并不适合你,如果进一步本质分析,可能这辈子都不适合你。大学数年过得很快的,要想校招时候 offer 拿到手软,一定要进行基础攻坚,jq,less,bootstrap 要学就不要学怎么使用,而是学人家的源码,为什么这么实现,如果看不懂,搞不明白,说明你 html,css,js 基础还很弱,离熟练掌握还差了好几条街,需要不断积累,再不断积累,会做几个项目鸟用都没有,和你竞争的那些前端哪个大学没做过几个项目,而校招名额就那几个。等什么时候,jq,bootstrap 甚至 react 源码都看得懂了,恭喜你,你已经到了另一个世界,眼界和认知都脱胎换骨,即使是一些你自己都没注意的谈吐表达,都会很容易感受出不俗的技术造诣在里面!

所以呢,那些让你懵逼的东西就不要学了,了解下大概即可,好好扎实基础,参见问题三,这才是你的方向。

然后,对于在校学生,从概率上讲,深入 JavaScript 要比深入 CSS 入职概率高,但也有团队招 CSS 很厉害,JS 毛毛雨的人,例如我们阅文集团,但这样的企业并不多。当然,如果要我说心里话,我是鼓励大家追寻自己的内心世界,不要被外部这些东西左右,做好自己,等待时机。但对于大部分人其实只想混口饭,给父母长长脸,功利些也无可厚非,面向职位面向热门前端开发也没什么不好的,乔布斯的名言“follow your heart”其实只适合有资本有能力的那些人。

问题五、① 前端工程师的价值体现在哪里?② 前端的意义是什么?

 

问题描述如下:

上一门必修课的时候,老师介绍了许多她的科研成果,感觉好高端。最后,老师让我们思考一下自己学计算机的意义是什么?难道就是为了写写网页?

我个人深知将网页写好多么的不容易。但是感觉所解决的问题貌似是可有可无的,即没有前端,我们好像也能使用好多的互联网功能。前端的意义是什么呢?仅仅是可以优化视觉效果,让用户用得开心(我承认这是很重要的一部分,想知道还有没有其他的)

由于两个问题答案本质上类似,因此,我统一作答。

我的回答

如果作为一个打工者角度来讲,前端的意义就是可以养家糊口。

而作为职业本身,前端的意义其实就如你说的,让人机交互这一块让用户更加愉悦。至于其他什么高大上的意义,其实并没有。前端工程师的价值其实也就是让用户在于机器交互的时候更加愉悦,让用户越来越喜欢,甚至在上面花钱,给企业创造价值。

你说如果你想要通过前端代码来改变世界,很难,除非你造个像 jQuery 这样的东西,也就让世界变化了那么一点点而已。

所以千万不要高估前端这个职位的价值和意义。有种效应叫做“禀赋效应”,指的是“当个人一旦拥有某项物品,那么他对该物品价值的评价要比未拥有之前大大增加”。我们身为前端工程师,对前端这个职位的评价自然就要比真实的要高那么几分。

我刚开始工作的时候,有非常强烈的,我是前端我自豪的感觉,追求完美的代码,和开发 PK JS 要放底部还是上面,怂第三方推广负责人产生的 http 请求太多等等。当然现在看问题的角度已经完全不一样了,比方我们看新浪微博,前端体验其实是做的很不好的,性能也很差,微博网页挂着同时看腾讯视频,视频就会有卡顿,把微博网页关掉立马就好了,但是你看人家的财报,看看人家的股价,你就会发现前端在整个产品中使用的价值其实并没有我们想的那么高。

我突然想起了很早年的时候参加 D2 前端技术会议,因为支付宝的前辈分享了一个很有意思的案例,就是很重要的支付页面的加载时间,具体时间我记不得啦,我大致说两个数值示意下,就是 1 秒变成 500 毫秒,然后去看用户的跳出率存留量之类的数据,结果发现并没有什么明显的变化。也就是说我们拼命优化提高的那点加载时间,其实对用户来讲并没有什么价值。

因此,从企业的角度讲,前端仅仅是整个产品流程上比较重要的一环,想要真正改变世界,需要上下游一起齐心齐力,当然,最重要的还是上层领导者的方向,决策一定要正确。

这里可以顺便说点其他的东西,前端工程师的的薪资水平其实是与他给企业带来的价值决定的,一个前端工作者,就算他技术再牛,如果他只是单打独斗,给企业带来价值其实是有限的,哪怕做的产品在前端这一块是世界一级棒,可能会遇到晋升阻碍;但是如果他可以让其他前端同事一起变得更好,现在上游的设计师或者下游的开发也变得更好,产生了更多的价值,自然薪资也会上去。因此,通常前端管理人员会工资比较高(即使不参与一线开发),因为他需要让很多的前端人员一起变得井井有条,高效运转,这也是需要很多精力成本和承担巨大压力的,还有一类就是前端架构人员,负责优质的类库,业务配套工具等基础建设,保证整个产品线都高质量,同时节约人力等成本,也会有比较高的收入。

作为职业人,在谈论前端工程师的价值的时候,眼中不应该只有技术,或者心心念念,实际上根本就不了解的用户,其实可以多想想给团队,给公司带来了哪些价值,并且能够佐证之。跳出职业本身思考问题,或许会有不一样的感悟和成长。

对了,你的代码最终能否改变世界其实是你的老板决定的,就算你写的代码一般般,但是你的老板很厉害,产品全球使用,你其实也已经改变了世界了。最后你会发现,改变世界似乎和你技术牛不牛一点关系都没有,还是那句话,站在老板的角度,前端的意义其实就那么回事。

问题六、学 Web 前端开发,培训还是自学靠谱?

 

问题描述如下:

先说明问题:想转行做 web 前端开发工作,但是无从下手。询问别人有的说是培训比较靠谱,也有说自学也没什么问题。所以想在这请教一下师兄们,集思广益,但求少走弯路。


情况:本姑娘普通二本院校 14 级毕业生,电子信息工程专业学嵌入式开发。毕业后由于一些什么“铁饭碗”、“工作稳定”、“国企有发展”之类的原因,家里在这边给找了一份银行的工作,现在工作一年。一年的工作终于发现这跟本不是我想要的生活,于是果断辞职。在校期间学习过 C 语言。曾经也对网页设计比较感兴趣,自学了一点,不过那个时候学的都是Dreamweaver,Fireworks , Flash 什么的,也没去研究 HTML,CSS,JavaScript 这些。


所以在这里还是想询问一下,如果我想做这些究竟是找一份工作一边工作一边自学,还是找一个培训机构学习更靠谱一些。第一次在知乎提问,求大神指点迷津。多谢了。

我的回答:

站在我个人的角度,肯定是自学靠谱,因为我自己就是完全自学成长起来的。

但是,我的成长不具有代表性,因此,不一定具有参考价值。

虽然是上的是理工科大学,但是,对于设计,绘画,人文之类的东西很很兴趣,但是人比较迷茫和忧郁,既然如此,早就做些自己喜欢的事情,例如……翻阅断子绝孙的栅栏FQ去后面的东湖钓鱼,或者去图书馆把所有绘画相关书籍(老图书馆这方面书不多)就借了个遍,去临摹与学习,彩铅,油画棒,水彩都自娱自乐过。

技术分享

大二有了电脑,就自学 Photoshop,暑假都在刻苦练习 PS 技术,技术练得很好,做做平面设计,PPT 设计什么的;下学期开始自学 flash,制作一些动画片什么的,当然,也是兴趣使然,自娱自乐,例如下面这个杀马特风格浓烈的 flash 动画(点击加载)。

点击加载Flash动画

后来大三开始玩社团,去了学校网研团队,小胡子哥阎王也是这里出来的,当时在网页上弄酷酷的 flash,写写简单的 AS2.0 脚本,当年流行这个。再后来,没什么需求,就开始写写帮其他小伙伴应付应付 CSS 和 HTML 的工作,看了一晚上别人实现的代码,然后就自己可以把页面鼓捣出来了,可见写页面这件事入门门槛太 TM 低了。

然而,上面这些事情其实都是业余爱好,自娱自乐,和很多牛人同学不一样,他们一开始眼界就不一样,就奔着 top 级别的好公司去的,所以,成长都比较专业和正轨。像我这种随性吊子的人暑假就在学校帮老师干点活算实习,现在想想真想甩当时的自己几个嘴巴子。

等到大四了,玩耍了 3 年,看着周围同学出国的出国,直博的直博,或者 offer 拿到手软,自己又找不到读研的理由,BAT 都不鸟我,我心里急啊,这才意识到,业余玩耍自我感觉不错的东西,在专业人眼中,就是坨“巧克力冰淇淋”。所以,我就出卖自己劳动力去创业小作坊拼命学习和成长(吃睡都在公司),老板很喜欢改版,正好,活够多,于是天天起早贪黑写页面,年写页面1千张,所以,CSS 和 HTML 的学习有个很简单的方法,就是写,很多人写了个淘宝首页,京东首页好像就觉得我行了,毛线,请整站完整写一遍,写他个上百个页面,然后对比自己的实现和对方的实现有什么不一样,前端这个东西有个好处,就是都是明文的,尤其 CSS 和 HTML,压缩都没法压缩,就去去空格换行之类。遇到疑问之处,全部搞懂它,那成长速度,蹭蹭蹭的,比去培训班快,听来的看来的,不如自己实践来的快。

后来毕业了,大家都快快乐乐地去上班了,我就把小作坊的工作辞掉了,裸辞,然后远走他乡闭关学习去了。可以看出我还是很有想法,很有个性的一个人,甚至很多温室中一帆风顺长大的自我感觉很好的人不理解,你一边工作一边学习就好了。正如问题五提到的,人贵自知,你希望你以后成为什么样的一个人,当时我是希望自己 3 年内可以成为前端技术牛人,但是,一看自己,就会写点页面,JS 是个渣,后端语言是个 P,弱项非常明显,要想以后高度足够高,这些基础一定要打牢实。但是,如果一边工作一边学习,考虑到之前小作坊每天都是早 9 点到凌晨 1 点,每周只有半天休息的状态,屁的时间给你学工作以外的知识,你就会发现,你的技术一定会早早遇到瓶颈,然后就成为一个普通的技术人员,和自己未来的期望背道而驰。于是倒退下来,我需要学一门后端语言,需要把 JS 进行系统学习,把基础夯实。

这次闭关共耗费我 9 个月时间,独自离家,直接去了一个从未去过的省份去闭关,9 个月的时间把之前小作坊赚的小钱全部耗费光光,收获的是可以自己用 php+sql 做一个动态网站,基本上算是和全栈,把 JS 基础夯了一遍。学习的方法是看书,《 php 和 mysql 程序设计》《 PHP 6 与 MySQL 5 基础教程》,《JavaScript 高级程序设计》和《JavaScript 语言精粹》,反复看,反复理解与记忆,一页都不访问,其中实例全部都亲自跑一遍,看完后,给自己安排了个项目,从 0 到 1 把自己个人网站建起来,纯自己手写代码,算是自己闭关学习的一次考试,结果个站从设计到开发上线,共花了我 3 个月时间,因为包含完整的账户体系,以及诸多内部频道和外部频道。

虽然我的自学故事才说了一半,但已经足够回答这个问题了。

其实姑娘和我当初的经历有些许类似,由于业余兴趣玩过一些网页相关的东西,然后现在希望重拾并进入这个行业。我是从兴趣向职业转移,这其中是 9 个月小作坊 + 9 个月闭关,共计 18 个月也就是 1 年半的高强度前端知识积累,外加我还有计算机专业背景。所以,你这个问题,尤其看到“无从下手”,“少走弯路”这些词,我觉得你无论是一边工作一边学,以及还是培训班,最后的结果都会是“问题一”,想变成职业没这么简单的,我觉得你需要破釜沉舟,自断后路的勇气,前路一定挫折不断,如果没有足够的心理预期,最后可能就变成嘴上说说而已。什么“少走弯路”,有这种想法恰恰容易走弯路,认准目标,直接义无反顾往前冲,哪怕路上是荆棘是深沟,也不要退却,这此时绝对的直线之路,才是真正的捷径。所以,自学也好,培训也好,形式根本不重要,重要的是你的心到底有多勇敢。

问题七、前端工程师和 UI 设计师该如何选择?

 

问题描述如下:

本人大四了,正准备校招呢~可是本人是学计算机的,本人特别喜欢设计,ui 设计 视觉设计平面设计啦等等,熟练 ps,给朋友做过设计 ,也设计这网页。由于大部分时间都 学前端了,所以设计的软件就熟练 ps。我当然也不讨厌编程,前端开发需要的基础我都会,也做过不少的网站项目,但是一想到以后想做好前端开发还要学的语言多了去了我就头疼,但是想到设计不管以后要学什么还是怎么样我都不烦,我不知道该选网页设计和前端开发这两个职业的哪一个。
我想选设计但我不是设计专业的,我不是学设计的是不是一般公司都不会鸟我。。?但是前端要做好学的东西太多。。而且前端是不是就是程序员?。。

我的回答

参见“问题六”我的经历,你具备了传统意义上真正优秀前端的基本潜质。网页设计劝你就不要做的,千万不要把兴趣冲动当才华,非设计专业要想在设计领域有所造诣,除非个别天才,基本上是不可能的,设计理论和设计素养这些东西很难补的,而这些决定了以后的高度。我当年就是看到了专业第一同学的作品,意识到我20年都追不上,放弃了做设计的打算。但是,业余从事设计的这段经历对你从事前端大有裨益,尤其是偏体验方向的前端。我工作之前并未意识到自己这方面的优势,后来去了腾讯,我才发现,我本身细腻的性格以及以前的那些设计和动画方面的积累,是我和其他前端相比而言最大的优势,这也是我后来更多的学习中心向交互体验这块发力的原因,可以充分发挥自己的优势,让自己更具有不可替代性。

所以,你可以选择前端设计这个职位,卧槽,我给你讲,超级稀缺的,要代码写得溜,要设计敏感,基本上就是计算机背景但对设计感兴趣的那些人,居然你就是这样的。哎呀,居然问题是 2 年前的,不知道你现在再做哪一块工作。要是真的做了设计师,我觉得可惜了。真正的前端,应该是负责人机交互的,和交互与体验走的更近,而这类职位就需要兼顾代码和设计,是个是个交叉职位,和传统意义上的程序员其实并不是一路的,通常玩不到一块的,反而和设计师走的比较近,哈哈。

问题八、如何面试前端工程师?

 

问题描述如下:

需要考察的重点有哪些?有什么方法能够有效地判断其水平?

我的回答:通常我并不参与面试,但如果有面试,通常会花半小时对候选人各方面信息有尽可能的了解。

我很不喜欢自己准备一些没什么养料的问题去问面试者,而总是尽可能让面试人员自己表达自己认为最厉害的地方,可以是 JS 的也可以是 CSS 的或者 HTML 的,SVG 以及 Canvas 也是可以。面试的最终目的并不是一场应试考试,而是在对候选人能力等不确定的情况下进行准确评估。如果你搞几个固定的题目,那些面试党说不定正好研究了这个题目,也有能力不错的人技术栈并不在你这个点上,这招聘质量就会大大折扣。

所以,我的策略是,把你最厉害的一面展示出来,然后,让我来看看你这个最厉害的一面到底有多厉害,然后根据其表述话语中一些有意思的信息进行深入提问,为什么会这样?有没有其他策略?当时你是怎么想的?最后效果怎么样?之类的问题,可以看看对待问题的思路,技术的深度是怎样的。

千万不要拿自己的长处去面别人,而是发觉对方的长处,然后看看能否给团队带来足够的帮助。

除了技术,也会考察候选人的沟通表达能力,以及特质方面的一些东西。例如,这个人回答问题比较的油,技巧性很强,抱歉,你大概率会被毙掉,上头更喜欢简单纯粹的小伙伴,因为对整个团队而言是有好处的,因为油的人太多,团队就不好带了。

总之,就是从多个维度勾勒出候选人的轮廓,然后看看是否是团队目前需要的拼图。

对于面试者,我这里有个建议,尽量展示最真实的自己,因为你根本不知道应聘团队需要的是怎样的人,例如,本希望招一个神经刀,你反而刻意一本正经,只能有缘无分了,岂不可惜了彼此。

问题九、前端工程师们,你们对前端的兴趣是什么?

 

问题描述如下:

难道没有真正喜欢前端的吗 QAQ 大一妹子,信息安全专业,刚刚确定了自己以后的方向,拥抱大前端,并希望着几年后可以以前端工程师的身份来介绍自己,但我确定自己前端方向的时候可能有些坎坷。希望可以从知乎中得到前辈们的经验和指点。我确定前端方向的时候很坎坷,想了好多,放弃了好多,但是很好奇前端界的前辈们为什么会选择前端工程师呢,你们的兴趣在哪里?

我的回答:

老实讲,我之所以选择前端这个职位,是因为我其他东西做不来,我其实国标跳得蛮很不错的,身高身材力量柔韧性都有成功国标高手的潜力,但是当时的性格比较内向,具有轻微的社交恐惧,对于一个需要亲密舞伴的舞蹈,自己觉得路不太好走。我其实对设计也很感兴趣,但是总是有力使不出来的感觉,空有技术,但设计出来的东西,咳咳,当作厕纸我都觉得有辱屁股,以后就算硬着头皮做下去,估计也就是一个普通的设计打杂人员。我的专业是生物信息技术,生物这玩意儿不念个博士,基本上也是苦逼的打工命,可怜,我要想念博士,必须考研,但找不到考研的理由,所以,生物这条路只能以后想办法曲线救国了。信息就是计算机,大学时候我计算机编程起步相对比较晚,我上大学之前网吧都没去过,大学用电脑键盘都是要一个字母,一个字母盯着然后再敲的,如何和初中就 VB 拿奖的同学比,虽然也学了些理论知识,但当时连程序是什么都是一脸懵逼,更别谈实际操作了。

后来发现就前端好像玩得来,要会懂点 ps,要会写点代码。写代码面向过程即可,并且效果所见即所得,兴趣很容易被燃起来。然后我就开始选择做前端了。

当你做其他东西都不顺心的时候,突然发现某项东西做的非常得心应手,这个东西很自然就会变成你的兴趣所在,而这个兴趣反过来又会让你坚持不断做这件事情,形成一个良性循环,最终成为你的终身职业。

问题十、Web 前端开发前景如何?

 

我的回答:

我其实并不关心 Web 前端开发前景如何,正如我当年选的这个职业一样,根本就没有想过以后会如何如何。所以三十年河东三十年河西,如果有一个工作机会摆在你面前,分别是十年前的联想和腾讯以及现在的联想和腾讯,请问你会如何选择?

同样的,十年前的 .net 开发和网页美工以及现在的 .net 开发和前端开发,请问你会如何选择?

未来其实是不可预期的,金融危机出现之前,大家根本就吃意识不到会出现金融危机。

人的职业生涯长达 40 年,而科技行业的发展这么快,在你的职业生涯有生几年,Web 前端开发一定会衰落下去,说不定 10 年后就直接哔哔了。难道就因为这个你就不从事这一行了?万一前端由于其简单以及广泛适用性,可以再兴盛个 30 年呢?

我说这么多是什么意思呢?如果我们能把职业生涯像赌博一样交在所谓的前景上,其实非常危险的一件事情,就像随波的树叶,很难掌控自己的前进的方向,随时都有倾覆的危险。我真正关心的应该是,你的内心是怎么想的?你的兴趣在哪里?你想成为怎样的人?你的理想是什么?你的价值观是怎样的?

正如乔布斯说的那样:“follow your heart!”——追随你的内心!

除了职业本身,我们还应该随时注意提高自己在软实力方面的竞争力,沟通表达、为人处事、团队协作、项目推动等等,日后即使行业不景气了,也不要担心随风而去。

当然,如果只回答问题字面上的提问内容,我认为前端开发还是可以继续持续,如果非要加 Web 这个前提,那就不好说了,浏览器这个二级壳子在下一代大规模端设备出现的时候说不定就没了,自然也就没有 Web 这种说法。

为什么我的我对前端开发前景这么肯定呢,因为越是简单的东西,越是容易普及的东西,越是能够兴盛昌盛,经久不衰。前端开发除了在 Web 上,还可以出现在桌面软件上,各种物联网端,甚至操作系统都前端开发来搞,因为足够简单。简单事物生命力更旺盛,这是亿万年生物演化验证的哲理。

HTML 和 CSS 是伟大的发明,简单实用;JavaScript 其实也很伟大,别听那些程序员瞎哔哔 JavaScript 的一些不足,对于那些被 C,C++ 奶大的程序员,自然会觉得 JavaScript 的套路很奇怪,也会诟病性能方面的东西。

但是如果站在设计师和普通开发人员的角度而言,如果没有被 C,C++ 这些东西污染,就会觉得 JavaScript 就像是一个灵动的精灵,亲切自由洒脱奔放随性,套路比较符合现实认知,非常适合人机交互这种场景。当然,如果你要使用 JavaScript 实现传统后端或者桌面软件的功能,则自然现在的套路是有不足的,这就是 ES6 开始出现的原因,是用来让传统的那些程序员舒服开心的。

当我们判断一件事情的大方向趋势的时候,套用古代哲学思想其实是非常好的一件事情,这些思想之所以可以流传千年,肯定是有其道理的。如果我们只专注当下表面的那些信息去做判断,很容易会导致大方向错误。就好像你进入一个迷雾森林,如果你只是根据当前的树木和路进行方向判断,你很容易迷路,走错方向,但是如果你以天空中的北斗星作为方向去指引的话,你永远不会走错路。

如果这个问题的本意是问“ Web 前端开发钱景如何?”,我只是说三十六行,行行状元,任何行业,哪怕你是清洁工,需要做到顶尖,“钱景”根本就不要担心的。

这个问题好像是 2014 年提出来的,现在来看,前景感人,感人没有引号,是真的感人,2016 年培训最火的职位,同时也是竞争最激烈的职位。

结束语


学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
343599877,我们一起学前端!

人生路漫漫,找准目标,认准方向,坚持不懈,终有所成

我对知乎前端相关问题的十问十答