注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿当的博客

世界是个游乐场

 
 
 

日志

 
 

怀疑精神 -- 写给前端小伙伴们的善意提醒  

2016-04-14 16:06:01|  分类: IT感悟 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
IT知识是海洋,广阔又深邃,任何一个领域一头扎进去都会发现深不见底。对知识的敬畏是必要的基本态度。但这道理其实我花了好多年才懂。

刚入行之时我信心满满,对编程有特殊的“创造力”,可以动手实现周边小伙伴惊讶的效果,比如flash相册,flashmp3播放器,flash小游戏,dhtml的很多特效,拖动排序,动画,换肤什么的,我能用php写后台,从前台的RIA到后台的代码实现,无框架裸写。群里的小伙伴说我是大牛,我也很得意地以为我确实很了不起。

但flash发展了,从三剑客中的小配角,从flash banner成长为炫丽导航条,到RIA组件,再到纯flash网站,流媒体服务器,页游。as2到as3,flex,air。今天已经没人再说三剑客了,技术的深度挖掘会让岗位分化出去,几年前就已经几乎没有人认为flash技术和前端有关系了。那么如果在公司定位的岗位是前端,该如何保留或者说发挥出这些技能呢?RIA工程师的定岗其实已经是历史了。专职flash技术的同学估计已经基本挤在了页游这最后一块领地了吧。

所以看着现在的webgl,我总忍不住联想起当年的flash,虽然webgl还未在前端圈引起足够重视,但它的潜力真的巨大,看看opengl,看看threejs官方的案例介绍,既兴奋异常又难免担心,担心未来它和前端工程师的关系会如何发展呢?

node其实也有类似的问题,虽然我从不承认它是前端技术,但确确实实它和前端圏的缘份已然结的很深。但是定岗呢?专职做node开发会如何?会从前端分离出去,纯写脚本是不可能的,最大的情况是转后端了。但后端界如何看待node?一个喜欢语言研究的爱好者偶然发现了v8引擎,然后包了个es语法的node出来,定位本就和前端没关系,本就是一时兴趣,然后作者本人现在玩go去了。这样一个新兴的东西得有多少坑待填呢?语言本身,模块,框架,工具,文档,推广,兼容,社区。。。已然成熟沉淀良久的java,c++,python,php等社区会如何看待这位新来的挑战者呢?node开发者该如何应对公司服务端团队的置疑,在地基尚且满是窟窿的情况下,如何证明自己的价值,证明自己可以替代java、php挑大梁?核心竞争力是什么?es语法?吸引前端小白还行,和java及宇宙最好语言php的工程师聊聊,看人家理你不?是异步?算了,不黑了,我知道已然入坑的同学其实日子一准不好过。同样的,react native在岗位上该如何落地呢?ios和android团队的同学可以退到一边休息去,甘心让前端同学们抢饭碗吗?

全栈是条路吗?其实对于绝大部分公司都不是,因为公司并不会这么去定岗,基本前端团队就是前端团队,服务端就是服务端,一般公司都不会招专职node工程师,真要招服务端还是会招java或php的。有node要求的,一般都是前端团队。但前端团队能拿node做什么呢?脚本,或者边角料非核心业务的服务端,而一旦正式的项目服务端团队一定会进来挑大梁的。什么公司会真的设全栈的岗位呢?创业公司。创业公司大多不懂技术,用什么无所谓,关键是钱少事多效率快。项目做大以前速度要求优于性能等其他问题,但做大后就会遇到麻烦重写了。twitter重写了ruby on rails,京东重写了.net。但前端出于个人能力提高的角度需要往全栈发展吗?不必须,但多学总是好的,团队沟通会少很多麻烦。只是记住,服务端不只是mvc框架和添删改查。别轻易觉得自己已经全栈了,it技术是海洋,服务端领域一样有深邃的东西,linux底层,运维,数据库,缓存,消息中间件,安全,性能,并发,开放平台等等,当然还有永恒的主题:语言。

然而我也缺乏敬畏过,也曾自以为已然全栈过,也曾像某些同学一样学会门语言学过一两个框架后,就觉得够用了。后来遇到过很多问题,知道得越多才发现不知道的越多。原来我太小看其他领域的知识积累了。虽然有不少同学叫我大牛,但确实愧不敢当。

我不敢自认大牛对身边的所谓大牛也是谨慎对待。我从网页设计师title开始,在不同的互联网公司从基层做起,前端工程师,RIA工程师,前端架构师,架构师,项目经理,技术经理,技术专家,研究员,各位title不停变,工作内容不停变,视野在不断打开。我对技术的广度和深度越来越敬畏的同时,也越来越意识到"专业领域知识"和"通用知识"的问题。这问题很重要很重要。原因有五:

1,整个it领域的知识非常多,因为精力有限,所以选择不学什么和选择学什么同样重要,一个和工作八杆子打不着的知识别学,比如前端没特殊原因别学c#,编译原理。

2,即使有些知识有用,但可能并非核心技能,无需深究,比如前端没必要深究linux,git工具,vim插件,node,java,项管之类。如果乐意挖的话,vim都可以写脚本,可是把精力花在这里做研究,真的值吗?逼格绝对有,只是。。。

3,有些看似有用,但其实你工作中遇不到,也许有的圏子重要且实用,但到了别的圈子就不是那么重要了。比如数据结构,算法,数学在前端就并不是那么重要,函数式编程思维就不重要。js语法简单,数据类型很少,而大多数业务需求其实也用不上算法,DHTML、可维护性、代码重用会重要得多。经过web2.0的数年努力,一众面向对象框架都倒在了jq的性价比之下,OOP这么实用的东西在前端圈推广落地停滞数年建树寥寥,终于在最近稍有起色,函数式思维如何可能落地。

4,需要警惕跨界大牛。一些同学可能在某个领域能力不错,也有那个领域的思维模式和心得体会,这既是跨界优势也是劣势。优势在于他可以跳出新进入领域的固有思维,带来不一样的思路,不一样的解决方案,比如sass、coffescript、typescript、angular,只是所有问题都有正反两面,要带着疑问的态度谨慎对待,看到好处的同时也警惕背后的隐患。技术推广和邪教是一样的,只会片面告诉你好处,坏处是不会主动说的。其实老赵的wind.js也属此列。跨界大牛的劣势是什么呢?是他们固有的思维模式很难在新领域变通。比如说数据结构算法计算机系统原理数学之类是程序员必修的基础中的基础,单元测试一定重要一定性价比高无论哪个领域,这就像公理一样不容置疑,而api不过是可以现学现用快速掌握的东西。可是,这真的是公理吗?我对此存疑。能拿具体工作中的案例证明一下吗?什么场景下它们重要,又如何体现出这种重要呢?只可意会不可言传,还是不屑于科普?

5,不同专业领域在工作中需要具备的技能是不同的,比如运维肯定得熟linux、服务端肯定至少要熟悉一门服务端语言和一种数据库、android开发肯定要熟悉java和android sdk。而前端需要的基础技能是什么?前端是运行在安全沙箱里的,能接触到的最底层是html、css和js三大块,所有的框架、类库、预处理器和工具都是围着它们转的,是基础中的基础。说算法数据结构是所有程序员应该重视的基础,这点我个人存疑。说编程范式,设计模式甚至图形学是所有程序员应该重视的基础,我肯定不认同。但我非常确定html、css和js是前端工程师的基础,而且必修,三门都是。而这些基础具体反应在什么上面呢?反应在api的系统知晓上,反应在探坑和实践总结上,经验在什么地方值钱?前端工程师的"核心"竞争力应该在什么地方上,跨界知识广度上吗?框架熟练度上吗?工具上?所谓外行看热闹内行看门道,看到某个效果时脑子里能马上想到应用了哪些html、css或js组合出了这个效果吗?还有没有别的组合的可能性?如果是你自己会如何去实现,为什么?如果不熟练掌握基础,永远是外行。我说很多人伪前端,并不是因为他们前端基础太弱,而是因为他们对前端基础让人惊讶地不重视,甚至不尊重。不重视api的系统化掌握,也不重视实践经验的沉淀。

以前在雅虎听内部分享时,说前端技术是三条腿的板凳,缺一不可,以我实际工作经验来看我很认同。过于强调css路线或过于强调js或者es的都不好,鄙视切页面就更加外行和不必要了。这是必修课,不说website,再算再复杂的spa、web app也离不开切页面这个步骤。不同的css方案会带来完全不同的适应性和扩展性,特别是css3时代css有了更加强大的能力,非常值得深挖,不可小视。小视css或者说切页面,其实是无知和傲漫。

当下因为很多其他社区的友邦人士热心帮助落后的前端社区从洪荒走向现代文明,造成了一些在我看来畸形的结果,比如过份强调语言硬生生催生了babel,如果说sass在引入不必要的团队合作麻烦之余,尚有一线价值,babel就真的是为了解决问题创造问题也要解决问题,比如前端mvc,angular如此重如此约束性强的框架,适用场景却严格受限于后台这种地方,相比传统的frame刷新,spa带来的用户体验改善和付出的成本真的划算吗?特别是前面提到的html、css、js基础都没掌握熟练的同学,就来学angular,只能说太糊涂了。比如grunt、webpack之类的框架有价值吗?当然有,但工程化真像某些同学说的那样是前端痛点吗?真的能极大提高工作效率吗?http://www.zhihu.com/question/19984897/answer/13562908 4年多以前我总结的前端痛点,除了浏览器环境有了变化,其他三点仍然没有丝毫变化,我仍然认为它们是前端开发真痛点,真难点,即便对于spa,对于移动端也一样。这三点是什么?是基础,是实践。工程化有意义,但相较于这三点,真不是一个量级的问题。虽然两者并不冲突,但在解决掉核心痛点问题前,过份夸大工程化的优点和性价比,会分散同学们的学习精力,基本功一踏糊涂的同学不去打牢基本功反而不停追新grunt、gulp、webpack,这印象很能说明些问题。

任何技术在推广时都会像邪教一样,他们不会告诉教徒这些的,不会说什么人什么阶段适合学,以及自己的短板。而有经验的老人也没有义务去提醒你们,所以只有保持独立思考能力,带着置疑精神才能在这江湖上自救。我讨厌node并不是讨厌技术,而是讨厌node社区在前端圈的安利手法,说人蝙蝠也是这个原因,我说给阿甘陪跑,是恨无脑小白不成钢,npm前阵子像笑话一样的unpublish事件以node社区的成熟度来看丝毫不让我意外。但即便如此,node社区也算成了一定气候了,事到如今,恐怕对前端社区的绑架之势已成,嫁鸡随鸡嫁狗随狗了。

比起对权威、公理的毕恭毕敬,我更欣赏的是置疑精神,无论对哪个人还是对哪个观点都不盲从。置疑错了又如何?置疑对了是圈子的收获,置疑错了是个人自己的收获。对于不符合自己观点的言论,误人子弟或是不懂别说话之类的言辞不要轻言,这意味着只能说些模棱两可的话或者只有学究才允许说话,我想这应该是所有人都不希望出现的氛围,但我却在程序员圈真真实实地体验了近10年,而且愈演愈烈。谁能保证自己的观点一定是对的,尽信书不知无书,尽信人言不如别听,讨论的过程和结果同样重要,某种意义上甚至更重要。今天你让人闭嘴,明天就会有人让你闭嘴,最后坏掉的是整个圈子的氛围。我对王垠不熟,但王垠说程序员圈有心理疾病,我却非常有体会,不知是否算斯德哥尔摩综合症。这是病,得治。

=====================

年前一个不经意的对流行技术的吐槽,却大大出乎意料地引起了巨大反响,一群很有攻击性的同学礼貌与讨论的意愿之低让我非常吃惊。然而事情并未在我接连的长文章长回答说明之后平息,几位观点不同的同学在我对己见成因解释说明后,并不能接受求同存异的收场,然后更喜欢针对动机进行揣测和批评。我不喜欢这个层面的讨论,对不认识的同学不太回应,但对认识的同学却忍不住失望和生气。这种生气是个可怕的事情,会让人变得越来越难控制情绪。很不好。但这种争吵的收获是确实看清了一些事,这些事进一步加深了我对程序员圈子的无奈。特别是老赵同学,人品,言行,恶意曲解,断章取义和某当老师的话题,刷新了我对所谓程序员大牛可以达到的无耻下限的认知。

今天团队拓展训练,所以有空多说几句。重心转到产品和管理层面,是我初心,而有得就有失,虽对前端圈感情很深,但确如老同事劝我的那样,既然已经征战新战场了,就别再念着前端圈了,优胜劣汰自然选择,由它去吧。

不是不愿再"战斗"了,而是确实精力有限,是时候务正业了,而正业于我已然是产品了。写鼓励的话给我的前端同学们,谢谢你们。后会有期。
  评论这张
 
阅读(177)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017