先自报家门,我本科专业是软件工程。
我们经常戏称自己是“语言学家”,是因为编程更多的学的是逻辑、思想,语言只是实现工具,而不同语言有不同的优势和局限,在不同的项目(不同的课上)中需要使用到的语言可能不一样。打一个不太恰当的比方,写文章,可以用不同国家的语言写出来,但是文章写作的逻辑、思路等,核心是一样的,只是为适应不同语言的语法或特点,具体的表达多少会有差异。
———————————————————————————————
首先是入门,在我小学的时候我的入门语言是pascal (pascal最初出现就是为了教学使用)和Visual Basic,现在用的已经很少了,但如果你能找到相关材料,不失为入门的一条康庄大道,但是注意,仅限于学习,对你以后做项目、找工作基本没什么用了。之后就是基本上大家都会提到的C语言,大部分高校的计算机相关专业,都会以C语言入门,而在我们学校,所有工科专业都要学习C语言(其他高校不清楚,不过现在编程语言的应用范围确实已经很广了)。在我看来,相对简单的C语言确实适合新手,而且除了逻辑和思想,C语言很多语法后期也有用,特别是在C++中。
其次是其他关联学科,其中有一些与编程语言本身关联可能不大,但对编程能力特别是项目的实现能力有莫大助益,数据库,算法,数据结构,离散数学,线性代数等等。其中算法、数据结构与编程密不可分,在学习算法和数据结构的时候,一般会与某一种编程语言绑定(这样更有助于理解和进阶,就好像不能不先学中文而直接学写律诗绝句),但实际上算法和数据结构的知识基本上是通用的,而且很重要。数据库也是作为程序员一定要学的,做项目必备技能,有其他编程语言基础的话学习SQL并不难,而且不往DBA方向发展的话,不需要学得太深。
而数学的话,则是见仁见智,在学习算法的过程中,我发现很多典型的案例其实在以前刷过的奥数题中出现过(没错,奥林匹克数学竞赛题),虽然部分例题的算法和数学解题思路并不一致,但殊途同归,其实就是用简便方法高效解决问题。诚然,如很多人所说,数学与计算机科学是两门独立学科,但确实没必要彼此划清界限。不学好数学能不能成为好的程序员?当然是可以的。而学好数学是否对编程有帮助,我个人认为也是肯定的,作用大小因人而异,恕我直言,数学的确是一门需要天赋的学科。概率论、离散数学对于逻辑思维和算法的学习有一定帮助,而数据结构中的数组(有序数列)、矩阵等其实也与线性代数有许多类比之处,而实际上这些也都是在学校里我们专业的必修课。
——————————————————————————————
最后,编程最初也是从模仿开始的,要学会写代码,必定要学会读代码,起步阶段不妨多学习高人的代码逻辑和风格,养成良好习惯;就好像要写出好文章,先得博览群书,打好基础。另外,在C语言入门之后,可以学习C++和JAVA进阶,之后可以学习PHP,python,Swift等等,就看个人职业选择了,在此之上还有框架、中间件、架构等等知识。
总而言之,程序员就是一个不断学习的玩命职业,你需要拥有恒心,耐得住寂寞,对新事物有敏锐触觉及良好的学习能力,面对难题要有不怕死的决心,还有,一个好肝。