昨天摸鱼的时候在知乎刷到这样一个问题:《既然报个培训班就可以成为码农,那学计算机专业有什么用?》
既然报个培训班就可以成为码农,那学计算机专业有什么用?
知乎是众多程序员的聚集地,马上就引来了大量程序员围观,到目前为止,这个问题在知乎上有69万的阅读,这说明了有很多朋友对此很关注,或者说有同样的疑惑。
这个问题从本质上来讲,不管你是计算机专业,还是经过培训进入程序员这个行业,这些背景仅仅决定了你进入这个行业的台阶高低。
而后面的发展,才是两者最本质的区别。
一、科班程序员的优势
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,但不知道底层是如何实现的。
初中级程序员还好,一旦想成长为高级程序员,需要具备解决各种卡点问题,这个时候这些缺陷就会跳出来影响大家了。
所以即使是培训出来的程序员也需要打好计算机基础。
2.掌握优秀的解决问题的方法
计算机科班出身,必然需要具备良好的搜索技能和不错的英语能力。做了程序员之后,你才会知道搜索对解决问题有多么重要。
google+stackoverflow+程序员=超级程序员,而英语尤其是计算机英语是看懂官方文档和各种开源代码的基础条件。
科班出身的同学在完成学业的过程中会大量锻炼信息检索能力,比如各种课程作业和毕业论文。
信息检索的能力对程序员真的非常重要,万事不决先看官方文档,还不行问google,再搞不定上论坛。
关键字和搜索渠道,这两点搞定了基本问题就不大了,很多时候程序员很难记住知识点,但会搜索就解决了,很多时候让你痛不欲生的神奇bug,官方文档和各种论坛上早就安排明白了。
3.敬畏之心
科班出身的同学大多知道这个世界的计算机大师有多么厉害,无论之后自己在编程领域取得或大或小的成绩,都不会狂妄自大,自诩天才。
他们知道哪些问题是非常困难甚至无解的(比如NP难问题),大家千万别小看这一点,真正的技术大牛最大特点就是知道技术的边界在哪。
他们知道哪些计算机问题是已经被人解决的,不要试图去重新发明个方的轮子。要学会站在巨人的肩膀上,比如ECDHE-RSA算法的诞生,是由5个图灵奖获得者一起研究出来的,一上来就说要弄个新算法超越它,可能吗?
4.好奇心和探索欲
这甚至是大学教育精华中的精华,很多朋友会问:我全部能自学,读大学做什么?
那些浩如烟海的知识、那些博学多才的教授、那些出类拔萃的同学,都会激发你内心的好奇心和探索欲,而它们将驱动你在职场、在生活中,不断地更上一层楼,不断地精益求精。
5.计算机领域的人脉
科班出身的朋友,身边的同学大多从事计算机行业,在计算机领域随着工作时间的增加,人脉和资源会高速增长。而非科班出身的朋友,显然就没办法轻松拥有这些资源。
非计算机专业毕业的,想做优秀的程序员怎么办?
科班的这些优势都不是绝对的,只是相比起来会有一些优势,我身边就有不少非科班出身的大牛。
但请注意这些大牛也是花费了大量时间去弥补以上这些不足,他们会体系化地去学习计算机基础知识、他们会刻意地去扩展人脉和资源、他们会不断地训练自己的编码思维和结构化的能力。
是否科班出身只是决定了我们的起点,码农的道路从来都是一场马拉松赛跑,只有那些坚持不懈的人才能取得一点点成绩。