大叔也记不清曾几何时,软件业出现了前端工程师这个称号。从此世上就有了搞前端的有了搞后端的,更有大牛者,自称前后端都能搞,唤作全栈。
我一直对全栈这个词不甚明了,栈原本是描述程序处理内存的一种方式,具有后入先出的特点,为什么要用栈来表达一个人知识多能力强,而不是堆。全堆是不是听着更合理一些?
大叔从业20年,从汇编语言玩起,这把年纪除了坐在电脑前一身肥肉全堆下来,还真不敢自称全栈全堆什么的。实际就一匠人,手艺人罢了。
俗话说,自古文人多相轻,前后端工程师自然也有互看不起的时候。后端认为他们维护着系统核心。前端则认为核心是个球(这里不是骂人,大叔有时候还真认为核心是个球,你懂的),只要前后端分离,说换也就是个松松的事儿。
实际上大家都是软件系统的实现者--俗称码农,除了分工不同,在体劳神伤的层面上没有任何本质的差别。
这就好比盖大楼,干主体的和干安装的哪个重要?当然...都重要!
话又说回来,事实上,前端这几年也确实火了起来。根据RedMonk在2017年6月(Q3)发布了的编程语言排行榜:JavaScript 稳居榜首。虽然JavaScript不能完全代表前端,也差不多说明点事情。此时,耳畔似乎又响起了那首脍炙人口的歌:
好的前端工程师很难找,究其原因大概有几个方面的因素。
从历史上看,早些年根本没有人愿意做前端,甚至有人误认为前端就是做做网页,属于低端不入流技术。
从近几年看,前端又是最活跃的领域,技术规范不断更新,新技术层出不穷,旧的还没舍得丢掉新的又来了。尤其对新入门的人,时常感觉无从下手,力不从心。
再一个,我们的大学在计算机课程安排上往往还延续着传统,毕业生擅长前端的也不多。
底子薄,门槛高,后备力量不足,导致很多公司HR想要在短期内找到合适的前端力量,还有一些困难。如何把现有的力量培养上去,也是解决当务之急的办法之一。
其实,做软件工程师很难,做好的软件工程师更难,而要做一个好的前端软件工程师就难上加难。
那么,如果想要做一个好的前端工程师,需要具备什么样的素质和修养呢?大叔总结下这么五点以供探讨。
第一,基本功扎实
齐白石46岁定居北平,以作画为生,殊不知他从7岁就开始执笔描摹,14岁以残本《芥子园画谱》为师,做过木匠又专以雕花为营,学诗文,治金石,刀管未辍。正是他前半生的经历积累,才造就了后来绘画上的伟大成就。
软件素质和基本功的养成也需要长时间的磨炼,这里并无前后端之分,而是一种通用的综合性素质。
无论使用什么语言,针对什么平台环境,软件思想与经验都是通的。设计模式,封装与多态,解耦与解构,数据与表象,模块与重用,以及简洁干净的书写习惯,诸此种种,都需要长时间的经验磨炼。
这也是为什么我们经常能见到一个基本功扎实的程序员转行来做前端,也不会太差。而一个毕业后只接触几年前端的人,往往骨子里还缺了那么一股劲道,写出的东西总是少了一些神。
俗话说台上十分钟,台下十年功,基础的积累是做好前端的前提。一定要多学多看多练,把基础打好。
第二,见多识广
在中国,医生的临床经验要远远高于美国,因为中国医生见过的病例实在是太多了,什么疑难杂症都能遇见。见得多自然识得广。
《北京遇上西雅图》里吴秀波有一句话:“我一天看的病人比你一周看的都要多”, 说的就是这种情况。
再比如,号称宇宙最大医院的郑大一附院,最多时日接诊达到3万人,你说美国医生怎么能有这个条件?
前端领域也类似,HTML/CSS/JavaScript标准时有更新,不同厂商在解读和实现标准上存在差异。浏览器种类多,终端设备种类多。同样的代码,在不同的浏览器上可能行为不同。相同的浏览器,版本不同可能行为也不同。同样的浏览器同样的版本,在不同的操作系统上行为又不同。苹果的移动端和三星的移动端又不同。
天哪!世界为何如此多样?而又为何如此折磨前端工程师?
早些年为了兼容多浏览器,代码中充满了对浏览器类型和版本的判别,种种苦难历历在目。春花秋月何时了,往事知多少?小楼昨夜又东风,故国不堪回首月明中。
幸亏大叔受持《金刚经》里“凡所有相,皆是虚妄”这句话才挺了过来,也许,不是世界复杂,是心复杂了。
而如今,现代浏览器更趋于标准化,差异性虽在减少,可并没有根除,尤其在移动设备上还比较突出。
在纷繁复杂的前端环境里,要想做好前端,没有见识是困难的。
也就是说,在世俗谛的层面上,工作还是要做,要多遇到问题。你遇到的每一个问题,都是修炼的机会,好好修行,总有一天会见相非相。
第三,学海无涯
自从1996年JavaScript诞生以来,这20多年前端技术发生了翻天覆地的变化,尤其是NodeJS出现后,带动了前端生态圈的爆发式成长,大叔称之为前端的寒武纪。我会另起一篇文章专门聊聊前端技术在这20年里的发展历程及其前瞻预测,在这里就不赘述了。
前端要学的知识很多,到目前看,大约能总结出20个分类,100多个技术点。新技术出现快,淘汰也快,往往今年还在追逐的时髦,明年就没落了。大有天下熙熙皆为利来,天下攘攘皆为利往的感觉。
有些新入门的人认为前端难学,常有“五色令人目盲,五音令人耳聋”的感受,不知从何下手。不要担心,大叔也有打算另起文章,告诉你们什么是本质,哪些是实象,如何不被如梦如幻如泡如影如露亦如电的表象所迷惑。
大叔也一直对有些公司在技术选型的时候盲目追新抱有担忧,前端深似海,不要迷失自我而走了弯路。
站在前端,等待你的不仅有壮丽的风光,还有冰山。
杰克,起床啦,新框架又出来了!
第四,有审美情趣
天下皆知美之为美,斯恶已。皆知善之爲善,斯不善已。美与不美是相对的,美的感受也是有差别的,很难给出一个标准。
审美会随着时间而改变,例如唐朝女人以胖为美,现代则喜瘦。
审美也会依习俗而差异,例如泰国和缅甸边境的克伦族以长颈为美,我们肯定欣赏不来。
审美也会因文化不同而不同,中国人喜欢红色,而在西方文化里,红色则代表血腥和暴力。
我们说的审美是依据现代主流意识,又不脱离客户文化背景的通用型审美。
假如产品最终用户是美国人,就要按美国人的审美取向,在功能上实用主义上下功夫。假如市场是中国,就要按中国人的喜好,不仅实用,还要在视觉体验上下功夫。软件行业如此,汽车行业亦复如是,卖给中国的车与卖给欧洲的车侧重就不同,中国人更喜欢漂亮内饰,就是这个道理。
Vue.js为什么在动画效果上下了很多功夫,因为Vue.js是中国人开发的,明白了吧。
具备审美能力和情趣,是前端工程师有别于非前端工程师的最大的要求。
毕竟前端是最接近用户的一层,承载着人与机器的沟通,屏幕对前端工程师来讲,不仅是显示与输入设备,也是画布。
大叔见过这样的前端,做出的UI字体不统一,内容不对齐,线条粗细不一致,间距不平衡,就连按钮大小都不一样。也不是技术不强,就是缺少那么一点点对美的基本评判和追求。而有些人不用多说,做出来的东西就是漂亮。这些都不是技术层面的问题。
有人会说,这个不用担心,我们公司有专门的UI/UX设计师,我只需按照要求做就可以了。有这样想法的人一定不会成为一个好的前端。这就好比一个画家,每画一笔都需要别人代替调配颜料,自己只负责动笔,这样怎能创作出好的作品?
美的表达和感受有时是与生俱来的,技术人员往往会参考别人的作品,吸取优点,见得多也想的多,在某些方面是UI设计人员的一个很好的补充。好的前端工程师要对UI设计的不合理地方大胆提出意见,大胆把内心对美的追求表达出来,配合UI设计师共同完成作品。
第五,要有爱
天哪!已经上升到了道德伦理层面来,大叔的要求是不是有点高了?
非也,好的前端工程师一定要有爱。
据说爱因斯坦在给他女儿的信中,曾经提过他发现宇宙中有一种广大的能量,包含并统领所有其他的一切,而我们至今未曾完全认识它。这种宇宙的能量叫做爱。
爱是这个世界得以运行的推动力,上帝如果没有爱,怎么可能设计出如此完美的世界?菩提萨埵如果没有爱,怎么可能发广大深远誓愿普度众生?前端工程师如果没有爱....嗯....还是改行吧。
前面我们提到美,实际还有两个词与它是相通的,那就是真与善。大叔认为,真、善、美是同一事物的不同表现,就像一个立方体具有不同的面一样,它们其实是一个东西的不同面。
而真、善、美的表达离不开爱。
具体在前端工程师身上,就是要尽一切可能为前端的受众着想,让用户在使用上感觉到爱。记着,前端不仅负责UI,还要负责UX(User Experiece),就是用户体验。
为什么这里字体要加大一些,用户是否能从众多信息里面很容易看到重点,能不能减少操作步骤,鼠标移动跨度是否太大,这个按钮放这里是否合适,用户是否会因为视线跳转频繁而感到累,如何才能更加顺畅操作。
用户使用时不受罪,源于前端工程师已经替用户受了罪,这就是爱的本质。
当然,对工程师来讲,把代码写好,结构清晰合理,考虑周全,减少错误,也是一种爱的体现。
结论
读完这些,你是否已经对前端以及前端工程师产生了新的认识?只要按照大叔说的这些努力,一定会成为优秀的前端工程师。
做前端工程师确实不容易,属于软件工程师里最接近完美的一类人,智商情商都要具有。
如果你身边有前端工程师,请一定要善待他。(倘若还是个单身狗,那就大胆的下手吧!)