年终了,这两天一直在构思一篇文章,之前一直犹豫是否下笔,因为年终必然会有一篇年终总结,如果两篇合一可以省下一点时间。思来想去,最后想着还是单开一篇比较翔实,与年终总结一起,难免会轻描淡写,不符合自己构思的初衷,因此有了此篇文章。这篇文章主要是这段时间对程序员之路的一点思考,当然,这只是个人意见,如有异同,欢迎留言,下面就直入主题。
就分类来说,我觉得大部分的程序员可以分为两大类,一类只钻研技术,不考虑其他,我将其归类为码农。一类以产品为导向,技术为工具,我将其称之为工程师。可能使用码农这个含有贬义的词汇来称呼技术研究者,实在是有些欠妥,但我实在没有更好的词汇了,姑且就暂用。
那么,如何直观的将某个人归入这个分类呢?下面我举一个实例来参考下,大家对号入座下就知道自己属于哪一类了。
问题:关于js闭包
码农版:
问:你能阐述下闭包吗?
码农:闭包可以用来保护局部变量。
问:这是他的作用,你知道他的原理吗?
码农:原理是函数运行之后,函数作用域的变量将会被回收,但是如果函数内部再有一个函数引用外部函数中的局部变量,这个外部函数作用域中的变量将不会回收。
问:说得不太清晰,那你说下如何生成一个闭包?
码农:嗯,闭包是一个函数中返回另一个函数,并且内部函数必须引用外部函数作用域中的变量。
问:就这些?
码农:嗯,是的。
工程师版:
问:你能阐述下闭包吗?
工程师:闭包就是能够读取其他函数内部变量的函数。
说到闭包就必须要说下作用域。js作用域分为全局作用域和函数作用域,当然es6还有块级作用域。
内层函数作用域中可以读取外层函数作用域中的变量(常量),外层函数作用域可以读取全局作用域中的变量,读取方式不可逆,即全局作用域不能读取函数作用域中的变量。块级作用域也和函数作用域类似,是由内而外的。
闭包还涉及到V8的垃圾回收机制,其中有个很重要的垃圾回收方法是标记清除。对闭包的影响就是,闭包的生成条件。
1、必须要有全局作用域、外层函数和内层函数;
2、内层函数必须引用外层函数中的变量,这样外层函数中的变量才会由于有内层函数的引用不被垃圾回收机制回收;
3、必须返回内层函数,并且全局作用域中要有一个变量接收这个返回的函数。如果全局作用域中没有对内层函数的引用,内层函数也会被垃圾回收机制回收。
闭包的作用就是保护变量和复用,但是这也导致了一个很严重的缺陷是内存泄露,因为垃圾回收不会主动回收闭包。
js中闭包最主要的用处就是模拟块级作用域,但是现在es6已经有了块级作用域。所以,如非必要,不要使用闭包。
如果只是单纯使用闭包的保护变量功能,建议使用es6的块级作用域,实在需要也可以使用块级作用域加函数的方式,最次也要合理使用,必要的时候手动回收。
通过上述js典型问题阐述的比较,我相信很多人都很明白码农和工程师的区别了。我这里稍作总结下:
一、码农很多时候不会主动去回答,问一句说一下,这就容易导致很多东西不完整,阐述不够清晰,让人听得云里雾里。工程师大多时候都站在全局去看待思考问题。如果你要说工程师在技术上比码农牛逼,比码农懂得多,那就大大的错误,其实工程师说的这些码农心里清楚得很,就是不想去表达,也觉得没有必要说那么多,一个眼神你自己领会去。
二、码农很多时候都是产品出需求,做需求,基本不提出意见,即使提出也是时间紧、实现困难之类的意见和一些需求变更太频繁的抱怨。工程师大都会站在产品的角度去思考问题,找出其中技术实现的难点和产品设计的不足或不合理,从而提前规避风险并合理预期开发时间。
三、码农对自己运用技术的追求是孜孜不倦的,常常持久学习这个技术。这也导致一个问题,很容易在某个时候(两三年)遇到瓶颈,因为某个技术及其衍生知识的变化速度大都赶不上学习的速度。并且学到的知识不能在实践中运用,又很难研究得很精深。达到瓶颈后就像没头苍蝇,四处乱撞,这个学一点那个学一点,啥都知道一点,啥都不太精通。程序员首先会精通一门技术,了解其他技术。熟悉产品,熟悉产品构架,了解需求的方方面面,然后以产品为导向使用技术,灵活的学习新技术,这就很难达到瓶颈(是否有,我还不知道)。
四、码农的巅峰职业大都比较窄,或者成为高级程序员或者成为资深程序员,工程师的巅峰职业却比较宽,可以是产品经理、项目经理,也可以是技术专家、架构师甚至CTO、CEO。
当然或许你会问我你这样大言不惭的评论码农和工程师,一定是一个高级的工程师了。实际上并不是(那还敢在这bb),为什么能这么透彻的知道这其中的区别与变化,是因为自己正处在码农和程序员转变的中间状态,因此对这些区别很敏感。其实大家很容易发现,在码农遇到瓶颈后稍微转变下思维就会成为工程师。但是为什么社会上码农一大堆,工程师却如此稀缺,我觉得是思维转变的问题。举个实际的例子:
父母那一代,特别是农民工或者在家务农的。有钱也不会主动想着去旅游,即使你把钱给他们说好是用于旅游的,他们也不会去。难道他们不想去或者讨厌?其实你一问,他们会有很多理由,大概是些以前赚钱辛苦,曾经遇事没钱之类的,总之能找出一大堆,之后不了了之。但是如果你把一切准备好,然后带上他们,当然,推脱是免不了的,但是既然成行他们也会玩得很高兴,很开心,这也说明他们是喜欢的。但是为什么不会主动去呢?最主要原因还是思想转变不过来。
这就和码农转变成工程师是一个道理,所有的程序员初期都是有一个学习的心态的,很多人工作了几年十几年了还是原地踏步走,或者被这个行业淘汰,最主要原因就是思想转变不过来。到了职业瓶颈就找不到方向,一些人慢慢就放弃了,这些人很可能原地踏步走或者被淘汰,一些人慢慢模仿优秀的人,时间久了自己就被潜移默化的转化过来了。这就导致很多技术的小领导和大领导都不年轻。此时如果有人引导或者提醒的话,这就容易找到程序员进阶的钥匙,从而找到前进的正确方向,高歌猛进,能极大的缩短这个流程,这样我写这篇文章的目的也就达到了。我将自己的这些思考和领悟总结出来,希望能给大家一些帮助,如果能间接多诞生即为工程师,那将是我莫大的荣幸。
年终了,发个小福利。推荐看一本书琼瑶的《我的故事》,内容真实感人,情节曲折跌宕,感情热烈醇厚。最后,借用里面的一句话:我想说明的一点是,在我写的时候,我笔端心底,满溢着爱。但愿我生命中的每一个人:爱过我的,不再爱我的,关心过我的,不再关心我的,仍在我身边的,已远离我而去的……都能怀着一颗宽容的心,原谅我的“错”,包涵我的“真实”!
热门评论
我还在初学阶段,谢谢你的经验