一只大四狗对程序员的浅见

1,080 阅读8分钟

前言

最近重学前端在前端娱乐圈是挺有热度的,早前无意间通过别的木易杨大佬接触到winter大神,这是当时看到的大佬整理的笔记,这位大佬也在掘金活跃,这是大佬的笔记节选:

1、对于框架的使用没必要花太多时间,应该多研究一下三大框架背后的设计思想。

2、当一个程序员对算法、语言标准、底层、原生、英文文档这些词汇产生恐惧感的时候他的技术生命已经走到尽头。

3、前端架构主要解决的是高复用性,架构能力提升方向主要是组件库开发、前端框架实现等。

4、对于前端进阶这个问题,其实看书的作用和意义已经不太明显,需要寻找好的平台和合适的项目,在项目中不断克服难题并挑战自己,遇到问题再去查资料总结。如果只是闭门看书那很难成为高手,书只是基础而已,真正的应用还是在项目中。

5、寒冬中能做的只有提升自己,但是光靠技术是不行的。

专业能力

底层

1.编译原理,这个东西离我们前端是多么遥远,但是现在SASS,Babel这些,不都是依赖AST,需要编写的Bable插件,很多时候需要我们对AST有一定了解,编译原理对这方面有很大帮助,这里有一篇文章 2.计算机网络,话说这个东西我上课的时候,觉得特别无聊,等工作的时候,发现,哦豁,书上的东西和现在的东西咋不一样,TCP、UDP这些,我都很吐槽的,因为平时就发个请求,也没啥,到了接触工作,发现了解http、https这些,对我们开发很有帮助

原生

1.我的一个想法就是,原生就是我们学习的加减乘除,而后续的高级数学(框架)都建立在这基础上,一个加减乘除不熟悉的人,你觉得他会很多计算出高级数学的结果吗

2.了解原生能够站在语言设计者角度来认识这门语言,就像妈妈一样,你了解你的孩子优点和缺点,那么很容易在让他做一件事之前,分析优缺点,让他做合适的事情,如果是外人,那么只想着让孩子做事情而已

算法

1.算法的本质是为了解决问题,但是一般来说,我们很少遇到非算法不能解决的问题,那么算法就主要突出在解决问题的思路和效率上,也就是可以更好的解决问题,这是算法被忽略的重大原因,从以前我看到阮一峰大佬的快排算法被批,我就意识到问题的严重性,算法是严肃的,人家是空间换时间,你是为了实现方面牺牲了空间,实现倒是实现了,但是缺不能了解到快排的灵魂所在,只要没有到达瓶颈,那么优化永远是句空话,现在的首屏渲染优化,也是突出了以后才被重视的。

2.算法可以带来思维方式的变化,当时有一个舍友在实现一个类型微信的好友查找,有一个输入名字然后显示候选人,我被他的思维所惊讶道,他使用了最长公共子序列,然后那这个最长公共子序列算法去计算这个序列与匹配字符串的比率,按照这个来排序,这个方法先不谈,我惊讶于他对处理事情的思维,与我已经不同,还有一个就是当时在CNODE社区看到的嵌套数组查找元素,有人提出了更快的查找算法,多么有思想的人。

3.算法思想也可以迁移到其他场景,我发现这个问题是在刷一题叫数组前K个最大值、还有一题n个元素的数组,最少需要比较多少次的题目,两者都用到了快排的思想去解决。

语言标准

1.语言标准就像数学上的定义,是所有问题的最终解决手段, 最近来看,ECMASCRIPT规范,已经被很多人知道了,并且应用到了自己学习中去,对我而言,有一个贴切的例子,规范就像我们学习的导数,不知道原理,可以去用,还用得不错,但是遇到一些问题,无法解决,这时候老师就会从导数原理讲解解题思路,正如这个例子,语言标准是我们解决问题的最终手段,是这门语言的公理,有时候一些问题困惑,我们需要它来解惑。

框架

1.三大框架的共性是什么,MVVM、组件化、状态管理、路由,当然这里由于我也没仔细研究过Augular,React,这里只能说大体是这样。因为以前JQuery那种MVC的模式,所以出现了MVVM来实现关注点分离,让我们精力关注在数据上,前端复杂了,所以需要组件化来解耦,解耦之后数据流成了网状,我们设计了状态管理来使得数据流变为树状,为了实现全局、局部切换,设计了路由来对应视图的URL映射

个人能力

英语

1.命名,现在很多人乱命名,写出来的代码只能给自己读,好的命名可以自解释,像拼音首字母缩写命名法,可能第二天你自己都忘记了,但是标准命名,人家就算不懂英文,查一下就知道你写的是啥。

2.看到XX报错,反手就把提示甩给别人,其实现在框架做得很好,英文提示基本都告诉你是什么错误了,不懂英文还要先去翻译一次,懂英文能够直接翻译成中文,按照自己的理解来解决问题,这方面花费的时间差距是很大的。

3.技术博客、技术书,编程这东西是在外国带过来的,人家就像我们用中文写代码那样畅快,我们起步也晚,国外的技术博客、技术书很多时候都是质量非常高的,有人会说,我们可以看翻译,翻译失真是一方面,更大的问题是,技术的抢先,一般来说,翻译一本书是需要时间的,也不是所有的外国资料都有翻译,你能抢先学习,那么你就有先发优势,第一次意识到这件事,是我在学习语言的类型系统看到的《Types and Programming Languages》,冒的中文翻译,就只能自己去翻译了。

表达、理解能力

1.为啥说表达能力那么重要呢,因为你会技术很理所当然的事情,但是担忧的是,可能你觉得你会,只是你的知识限制了你的想象,我们需要与他人更多的交流,程序员追求的就是言简意赅,深入浅出,在读官方文档会有摸不着头脑的情况,但是看别人的博客就会好很多,博客就代表了这个人的知识组织能力和表达能力。 2.理解能力,甲方爸爸的需求,你总得好好理解吧,半路再改,两边难受,我觉得理解的终点,就是能够根据现有的场景推测出对方的意图,通常来说,对方并不知道他要什么、问题在哪里,我们基于现有的场景进行推测,理解,一个例子就是群里说为啥Vue数据不更新,你就知道他是遇到响应式边界或者异步问题导致的,当然这个例子不太恰当,我觉得更加像是心有灵犀吧。

抽象与具体转换能力

1.erlang之父提倡写程序之前先思考,我个人也觉得是,不应该一股脑去堆代码,而是应该先站抽象整个事情,分析流程,选择方案,这个过程就像把完美的算法伪代码实现,更加符合我的理想中的程序员

总结

我也只是一条大四待业单身狗(哭),这是我昨晚突然想起来需要总结一些程序员方面的,毕竟最近因为种种原因,一些思想有了变化,在迈向下一个地点之前,做一个小小的总结,来警示自己,对了,如果大佬们赏脸,可以在我的GitHub仓库star鼓励下