【编程之外】“我是学前端的,我可以不学数据结构和算法吗?”
- 摘要:作为一个学前端的学生狗,最近在思考这个方面的问题,作为一个学生党,才疏学浅,故短视谬误之处还请前辈们多多谅解~。π__π引子《乾小端》——改编自《孔乙己》鲁迅(改编段落为本人原创)码农QQ群的格局,是和别处不同的:都是满满的群文件,文件里预备着图灵社区的pdf的书,可以随时阅读。在群里,架构师是一副凶脸孔,产品经理也没有好声气,教人活泼不得;只有乾小端上线,才可以笑几声,所以至今还记得。听人家背地里谈论,乾小端原来也是计科科班出身,但上课又没有听讲过
- 标签:数据结构 数据 编程 算法
作为一个学前端的学生狗,最近在思考这个方面的问题, 作为一个学生党,才疏学浅,故短视谬误之处还请前辈们多多谅解~。 π__π
引子
《乾小端》— — 改编自 《孔乙己》鲁迅
(改编段落为本人原创)
码农QQ群的格局,是和别处不同的:都是满满的群文件,文件里预备着图灵社区的pdf的书,可以随时阅读。 在群里,架构师是一副凶脸孔,产品经理也没有好声气,教人活泼不得;只有乾小端上线,才可以笑几声,所以至今还记得。
听人家背地里谈论,乾小端原来也是计科科班出身, 但上课又没有听讲过,从来不学数据结构和算法;于是越过越窘迫,将要讨饭了, 幸而写的一手CSS, 便替人家写写UI,换一碗饭吃,可惜他又有一样坏脾气,便是好喝懒做。一到deadline,便连人和文档一起失踪。 如是几次,叫他写UI的人也没有了。
乾小端一上线,码农QQ群里的人便都看着他笑,有的叫道,“乾小端,设计又叫你改宽高了!”他不回答,对群主说,“前端文件已经用webpack打包好放到服务器上了”,便排出九文大钱。他们又故意的高声嚷道,“你连hashu.html" target="_blank">二叉树都不知道!” 乾小端睁大眼睛说,“你怎么这样凭空污人清白……”,“什么清白?我前天听说你偷偷问群友冒泡排序怎么写,还是一个大一的学弟告诉你的。” 乾小端便涨红了脸,额上的青筋条条绽出,争辩道,“问问题不..不能算……不知道!……再说我搞前端的嘛,能什么都知道吗?” 接连便是难懂的话,什么“前端是处理UI的不是处理数据的,所以不需要学数据结构和算法”,什么“字符串查找有正则表达式就够了,不需要什么KMP查找”之类,引得众人都哄笑起来,群里内外充满了快活的空气。
正文
前些日子,一个同样学前端的同学找我聊:我以后就想去前端岗, 那算法和数据结构是不是不用学了呀,反正平时工作也不怎么会遇到。 我一时语塞,竟不知道如何回答。
嗯, 他的问题准确地戳中很多编码工作的矛盾: 大家都知道”程序 = 数据结构 + 算法“这个经典公式,但是,我们很多的工作(尤其是前端的),都是经验堆积的体力劳动, 和数据结构和算法似乎并没有什么联系。那个所谓经典的公式于是成了一句挂在口头的空话
仔细想想,却发现这好像也是很自然的。 宏观上根据任务对人力的分配导致的就是这个结果,基础的、重要的、有创造性的工作没必要丢给所有人或多数人去做, 只要留给一少部分的人去完成就可以了, 剩下的大多数人只要执行“经验积累”和“重复搬运”的工作就可以了。
所以, 《数据结构》和《算法》被一些人束之高阁,感觉弃之可惜但毕竟食之无味。 而《XXX从入门到精通》等书籍却仿佛成为了必读的枕边书。
所以,一些人在掌握一门语言的基础语法前就迫不及待地抄起用该语言的设计的流行框架,恨不得学之而后快,仿佛框架才是语言的本体。
大多数学科的知识都是枣核型的结构,底层的知识少而稳定, 上层的知识由底层推演而来,故繁多而变化。 计算机这门学科当然也不例外, 再上层的知识,寻根直下,都是数据结构和算法、计算机网络、操作系统等基础知识。 前端的框架迭代迅速,从早先风靡的Ext,到近几年的React、Vue、ng三大件,不过也就几年的时间而已, 但直到ES6,底层的javaScript又变了多少? 其实多数人都知道这套底层基础和上层建筑的关系, 但又总在不经意之间,本末倒置。
鲁迅说过:在编程领域,学习一定要重视基础 (鲁迅说没说过这句话不影响本文论述)。 和其他企业不同的是, 互联网企业的技术人员占比高, 所以, 技术强的开发人员也能掌握更多的话语权。 这里的衡量技术“强”度的, 很大一部分就是对数据结构/算法、语言等基础领域的理解和超越。(相对而言)
也许上面这种论述还不足有真正的说服力, 有些做前端的人还是会说: “我也知道算法,数据结构等基础很重要啊, 可平时都用不上的话, 为什么要深入学习呢” 。
问这种问题之前,不妨先问一问自己另一个问题: 我是打算要一辈子都做前端吗?
对于前面那个想法, 实际上暴露的是一种职业固化的思维。
也就是:因为我只想一直做前端,一直稳稳当当地待在现在的舒适区里, 所以我只要待在我的世界里,学我需要学的东西就够了, 至于“外面的世界”, 与我何干。
虽然我只是个学生,但这种思想却也见过不少。例如前面那个问我“是不是可以不学算法”的那个同学。又比如,我大多数博客都是关于前端的,而有一天当我开始发表关于Java和算法等方面的博文的时候, 有评论就问我: “你之前那些前端文章写的挺好的呀,怎么好端端的又放弃了呢? ” (上学期我大二... ...)
我只觉得很诧异: 我什么时候成为一个只学前端的了? 虽然我总是更JavaScript/CSS/Webpack/React/Vue/Redux/方面的博客,但我并不一定就是一个前端人员啊。我还是个学生呀,我也喜欢学习算法方面的知识啊,也学Java,PHP和数据库,平时也会在学长指导下用unity3d做个VR游戏玩一玩,为什么我就一定只是一个前端呢? 之前发表那些博客,是因为刚好实习时候用到而已。 更有甚者,在上次的facebook licence事件中,一些React开发者听闻自己使用的框架可能被弃用,感到惶恐,似乎作为一个“React开发人员”,没了React,自己就注定失业了一般。 可除了需要考虑经济效益的公司要考虑这个问题,可对于一个开发者来说,用不用React,又有什么至关重要的影响呢? 再不济咱也还可以用和Vue和ng好吧
有一句话说: “语言只是工具”, 我的能力还远远达不到能轻松地说出这句话, 但我仍然想用同样的方式说:“职业只是选择”(这里的职业特指互联网领域的细分行业)。人为地固化这种选择,并不是一件好事
在互联网领域,一切都是瞬息万变的,你可能知道,随着人工智能的不断普及, 司机、柜员、许多工人岗位都会逐渐消失。 首先消失的当然就是纯粹的体力劳动的岗位,也许就在不久的将来的某一天, “前端”这个岗位也许就消失了, 那这时候, 我们又该何去何从。好吧,暂且不管这个听起来比较遥远的未来, 如果某一天因为公司的管理调整, 所在的“前端”部门要被撤销了, 领导下达通知,让大家申请去其他部门,而自己除了JS外什么都不会的话, 又该怎么办?
我有一个已工作五六年的学长(现已实现财务自由), 前一阵子从58跳槽到百度, 而且他不仅“跳槽”了公司,也“跳槽”了岗位, 原来他是做后台开发的, 转为做机器学习了, 而且总共完成这个职业转变,从开始到完全适应总共就用了几个星期的时间, 当时他和我们几个学弟聊这件事的时候, 他就说道,在他做后台开发的时候,他也一直在不断地积累现在的从事的工作所用到的那些知识, 而刚好在今天就用到了。 行业转变的快速适应, 其实来自于几年知识积累的厚积薄发。
所以我认为: 除了夯实基础之外, 很重要的一点是要培养一个开阔的职业发展的观念, 多涉略当前职业外一些其他知识, 绝不会是坏事。古语曰: 术业有专攻, 说的是个人有个人专精的领域, 但是一昧地保守于一个领域, 甚至以“专注”作为懒惰的理由, 就是一种不思进取的行为了。在已经有一把刷子的前提下,争取再多拿一把,岂不美哉? JS们花些时间了解下java、作为前端人员, 学一学后台开发就挺好的呀。这种不断开拓学习的行为,无论对个人还是公司都是一件好事。这时, 如果把目光更长远一些的话, 视野就应该放到算法上了。
也许行业并不是能完全由我们来选择的,但数据结构和算法的深入学习,应该成为每一个程序员的追求
最后总结一下我想表达的观点:
第一, 技术学习上需要重视基础,不要本末倒置。
第二, 职业发展上不要固步自封,需要立足长远。
作为一个学生党,才疏学浅,故短视谬误之处还请前辈们谅解, 以上。