我也是跨专业的爱好者。我觉得吧,爱好者一般直接从某一热门语言入手学习,自己做各种小项目,也可能做出些大的东西,但基本上关注的只是语言层面的东西。而计算机专业的学习,虽然也会涉及语言的学习,比如大一也会教C或Java。但是,第一,他们学语言主要是学编程的一般思想,比如递归、抽象、面向对象设计等等。第二他们还会学习更为基础性的知识:比如计算机组成原理(冯诺依曼模型、实现计算功能的基本电路、基础的汇编语言知识、信息在计算机中的表示)、编译原理(高级语言如Java的源代码是怎么转换为低级的目标代码)、操作系统(程序是怎么运行的,进程、线程、管道、虚拟内存、文件系统、IO操作)、数据结构和算法、计算机网络、数据库。这些基础性知识是程序员的内功,爱好者在编程过程中也会遇到这些问题,但他们通常是用到了才现学现卖,不系统,不扎实。
当然,借助现在发达的互联网,爱好者和专业学生之间的鸿沟是可以缩小的。首先,网络上有丰富的学习资源。计算机专业的课程,网络上基本都能找到大量学习资料,特别知名大学的公开课。这种学习可能依然比不上脱产的专业学习,但打下良好基础是完全没问题的。其次,网络为爱好者提供了非职场的参与专业编程的机会。典型代表就是各种开源项目。任何人都可以参与开源项目,做出自己的贡献;你也可以发布自己的项目,让别人知道你的能力。像github这类网站可以完整保存你参与的经历,如果你足够优秀,这些记录就是一份出色的简历。
|