前两天逛知乎发现一个很火热的问题,阅读量高达55万:
既然报个培训班就可以成为码农,那学计算机专业有什么用?
洋哥是科班出身,但读书期间的确也没好好学,大部分都是靠自学,所以这个问题也引发了我的深思。
思考半天之后回答了这个问题,今天也给公众号的读者分享下读计算机专业究竟有哪些好处:
1.更牢固的计算机体系基础知识
培训班基本以语言培训和相关工具为主,比如Java培训,一般来说以下知识都可以通过培训解决的:
- Java基础语法:变量,赋值,判断,循环,函数,类等等;
- Java语言特性:面向对象、继承、封装、接口、多态、抽象、跨平台等等;
- Java内置SDK: Map、List、Arry、Network、File、Thread、 IO等等;
- SSM框架:SpringMVC: 负责和浏览器交互、Spring:负责业务逻辑、MyBatis:负责和数据库交互、Log4j:日志、Maven:跨平台依赖包管理等等;
- 语言设计特性:JVM、GC回收算法,Thread Local等等;
- 架构体系:分库/分表、分布式、缓存、搜索、抓取、索引、消息队列、集成部署、集群等;
- 设计模式:单例模式、工厂模式、迭代器模式、中介者模式、解释者模式等等;
但计算机体系基础知识基本培训班是不会涉及到的,比如算法数据结构、操作系统、计算机网络、计算机组成原理、数据库、编译原理等等。
这就导致一个问题,比如你学会了Java里的Map、List、Arry,但不知道底层是如何实现的。
再比如学会了Java里的Network,但底层的网络是怎么传输的,怎么实现跨平台通讯的,几乎也是一无所知。
初中级程序员还好,一旦想成长为高级程序员,需要具备解决各种卡点问题,这个时候这些缺陷就会跳出来影响大家了。
2.掌握优秀的解决问题的方法
计算机科班出身,必然需要具备良好的搜索技能和不错的英语能力。做了程序员之后,你才会知道会搜索对解决问题有多么重要。
google+stackoverflow+程序员=超级程序员,而英语尤其是计算机英语是看懂官方文档和各种开源代码的基础条件。
科班出身的同学在完成学业的过程中会大量锻炼信息检索能力,比如各种课程作业和毕业论文。
信息检索的能力对程序员真的非常重要,万事不决先看官方文档,还不行问google,再搞不定上论坛。
关键字和搜索渠道,这两点搞定了基本问题就不大了,很多时候程序员很难记住知识点,但会搜索就解决了,很多时候让你痛不欲生的神奇bug,官方文档和各种论坛上早就安排明白了。
3.敬畏之心
科班出身的同学大多知道这个世界的计算机大师有多么厉害,无论之后自己在编程领域取得或大或小的成绩,都不会狂妄自大,自诩天才。
他们知道哪些问题是非常困难甚至无解的(比如NP难问题),大家千万别小看这一点,真正的技术大牛最大特点就是知道技术的边界在哪。
他们知道哪些计算机问题是已经被人解决的,不要试图去重新发明个方的轮子。要学会站在巨人的肩膀上,比如ECDHE-RSA算法的诞生,是由5个图灵奖获得者一起研究出来的,一上来就说要弄个新算法超越它,可能吗?
4.好奇心和探索欲
这甚至是大学教育精华中的精华,很多朋友会问:我全部能自学,读大学做什么?
那些浩如烟海的知识、那些博学多才的教授、那些出类拔萃的同学,都会激发你内心的好奇心和探索欲,而它们将驱动你在职场、在生活中,不断的更上一层楼,不断的精益求精。
5.重思维而不是框架
很多培训班出身的朋友,都是学了一门语言+一门固化的框架,培训班并不会给你讲来龙去脉,反正你照猫画虎会用就行。
很多人直接硬背下来但并不能完全理解。比如jsp时代,很多非科班的人就被固化的框架限制住了。
而科班出身基础强的朋友一上来就知道:框架只是工具,真正的精髓在于编码思维。
6.计算机领域的人脉
科班出身的朋友,身边的同学大多从事计算机行业,在计算机领域随着工作时间的增加,人脉和资源会高速增长。而非科班出身的朋友,显然就没办法轻松拥有这些资源。
以上6点就是我对这个问题的全部看法了。
有朋友可能会问:那不是计算机专业毕业的,想做优秀的程序员怎么办?
科班的这些优势都不是绝对的,只是相比起来会有一些优势,我身边就有不少非科班出身的大牛。
但请注意这些大牛也是花费了大量时间去弥补以上这些不足,他们会体系化的去学习计算机基础知识、他们会刻意的去扩展人脉和资源、他们会不断的训练自己的编码思维和结构化的能力。
是否科班出身只是决定了我们的起点,码农的道路从来都是一场马拉松赛跑,只有那些坚持不懈的人才能取得一点点成绩。
和所有读者朋友们一起共勉!
今天就写这么多了,我们下期见呀~