专栏首页大史住在大前端【随笔】野生在左 科班在右——数据结构学习誓师贴

【随笔】野生在左 科班在右——数据结构学习誓师贴

一. 科班 Vs 野生

这个老生常谈的问题让很多野生码农觉得不公平,在一次次面试中因为学历和那些工作中根本就用不到的知识虐的一脸懵逼,然后除了抱怨什么也做不了。那为什么看起来很多科班同学的编码水平和职场软技能都不如野生码农的逆风局中,科班同学却能够胜出呢?下面所说的3点并不绝对,只是概况。

  1. 学历的背后 这是HR同学说的,笔者并没有去求证。HR同学说招聘应届毕业生国家是有很多补贴的,可以降低一些用人成本。另一方面,规模稍大的软件公司在承接业务和申请一些资格认证的时候,人员学历构成是证明研究能力的一个硬指标,也就是说你必须至少拥有多少本科生,研究生,博士生,才能申请某些科研基金或者政策性的扶持资金,毕竟科技企业也是具备商业属性的,其本质还是要赚钱。 另一方面,研究生和博士生所经历的教育,让他们的逻辑思维和系统性思维能力更胜一筹,也就是说面对大家都不会也查不到资料的问题时,他们知道如何一步一步提出假设或方案,设计方案,验证结果。而你只会两手一摊说自己无能为力,很多时候一件事情并不是你无能为力就可以不做的。
  2. 内功修为 高手之间的较量,都是内功和基础的修为。你或许都没有意识到,码农的学名叫做程序设计师,而事实上,程序设计师不仅仅是职位名称上逼格更高,更重要的是,其知识体系的抽象层级更高,设计模式,数据结构,算法基础这三座大山将两者完全划分为了两个层次。 曾经有一个HR讲过这样一个故事,说面试者说自己熟练掌握了React,VueAngular,非常自信,可面对他提出的“那你除了SPA模型以外,对前端还有哪些了解呢”的问题一脸懵逼不知所措。这个故事让我很受启发所以自己一直记得,并时刻以此为戒告诉自己接触的新知识要尽可能去了解其原理和本质,因为在更高的抽象层级和面对的实际需求上,不同的新技术很可能是殊途同归的,而你却没有意识到。内功修为深厚的人更容易看到事物的本质,因为抽象的思维让他们的视野变得更广,也让他们思考和认知的角度更加靠近数学和哲学的本质。
  3. 学力差距 前端的知识体系平均每18个月更新一轮,选择这个方向意味着你必须要有足够的学习时间和自学能力。这是一场HIIT(High Intensity Interval Training)式的比赛,招式上的优势是无法让你保持持久竞争力的,你必须拥有间歇性到达巅峰的能力。就好比《倚天屠龙记》里学会了九阳神功的张无忌,分分钟就学会了太极拳;好比《天龙八部》里的鸠摩智,凭借小无相功就可以催动少林72绝技,也像《火影忍者》里仙人模式的漩涡鸣人,就会一招螺旋丸,然后混入各种查克拉,变化成各种属性的忍术。 那些内功修为深厚或具备学习技巧的程序员,往往能更快地学会新的技术,并找出它们和现有技术之间的异同以及可能适用的场景,结果就是牛逼的程序员越学越亢奋,越玩越开心,而内功修为不足的程序员凭借毅力和熬夜能力,在2-3轮的技术迭代后被无情地淘汰。

想要提升自己学力的读者,吐血推荐阅读斯科特杨的《如何高效学习》这本书。这是一本高效学习的方法论,作者凭借超强的学力,用一年多时间学完了MIT Open Courseware里4年的CS(Computer Science)课程,并分享了他是如何做到的,其中很多学习方法是非常有借鉴价值的。

二. 前端的数据结构学习和练习

Talk is cheap , Show me the code.

2.1 主动练习

关于这个话题,笔者只有一句话要说,那就是动手实现所学到的东西。如果你读过设计模式数据结构算法基础这一类的书籍就会发现,其中大部分的内容也并不是难到完全看不懂,而是难在你不知道这些抽象的东西是如何跟现实连接在一起的,你需要主动用这种抽象的思维去连接现实的开发,才会找到感觉。

2.2 方法论

你能找到的大部分讲解数据结构的书都是C语言或者Java描述的,你可以在互联网上找到O'Relly出版的《数据结构与算法javascript描述》这本书,并用你熟悉和喜爱的javascript来学习数据结构的知识。请记得数据结构是内功的修炼,是不受语言限制的,所以不要再把数据结构的学习安排在C语言之后。

2.3 誓师贴

笔者自己也是野生前端码农,为了让自己坚持学完数据结构的知识,会将学习过程中所实践的编程习题整理出来,并在github个人博客里提供javascript版本的参考代码,习题相关帖会陆续在各大技术博客发布,欢迎关注点赞,也期待有小伙伴一起加入学习!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【响应式编程的思维艺术】 (3)flatMap背后的代数理论Monad

    原文中在http请求拿到获取到数据后,最初使用了forEach实现了手动流程管理,于是原文提出了优化设想,试图探究如何依赖响应式编程的特性将手动的数据加工转换改...

    大史不说话
  • 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器

    Timer模块相关的逻辑较为复杂,不仅包含JavaScript层的实现,也包括C++编写的与底层libuv协作的代码,想要完整地看明白是比较困难的,本章仅以se...

    大史不说话
  • 野生前端的数据结构练习(9)冒泡排序,选择排序,插入排序

    bubble sort的是最基本的算法,被誉为永远会被考从来不被用的算法,基本原则是大数右移,每轮遍历后最右侧的数是最大的,所以下一轮循环时可不予考虑,时间复杂...

    大史不说话
  • 程序猿必须知道的一些有用的网站

    来自:开源中国 原文:https://github.com/sdmg15/Best-websites-a-programmer-should-visit 在学习...

    企鹅号小编
  • 程序猿必须知道的一些有用的(外国)网站

    原文:https://github.com/sdmg15/Best-websites-a-programmer-should-visit

    华章科技
  • GitHub超1.1万星:李沐经典作品《动手学深度学习》更新强互动

    《动手学深度学习》是加州大学伯克利分校 2019 年春学期 Introduction to Deep Learning 课程教材《Dive into Deep ...

    朱晓霞
  • Result Maps collection does not contain value for java.lang.Integer

    qubianzhong
  • 调查研究显示:大多数美国人对网络安全问题不够了解

    当提及双重认证和隐私网页浏览时,大多数美国人并不知道从2FA中获取HTTPS来提高个人账户保护。

    FB客服
  • Python之re模块

    re模块 在Python中想要使用正则表达式,就需要调用re模块来实现。 在 re 模块下的常用方法: 调用时程序最上面需要写 import re 常用的几个关...

    新人小试
  • STL常用对象,不会搞得C++跟没学一样

    map/multimap映射容器的元素数据是由一个Key和一个Value成的,key与映照value之间具有一一映照的关系。 map/multimap容器的数...

    风骨散人Chiam

扫码关注云+社区

领取腾讯云代金券