本文转载自微信公众号“TechFlow”,作者梁堂。转载请联系TechFlow公众号。大家好,最近有朋友在后台问我,大一学校教的C语言,过时了吗?应该首先学习什么语言?大学期间学什么课程对毕业后的就业更有帮助??今天的文章就和大家简单聊聊这个问题。关于我,先说说我自己的一些情况,我才发现,从我第一次学习编程到现在,已经有十几年了。我在高中学习编程,那时我们正在学习Pascal。你没听说过它很正常,它是一种非常古老的语言。这门语言有多古老?太老了,IDE蓝屏了,一副死了的样子。大概是这样子的,我们在机房写代码的时候,一个蓝光跟着鬼片的场景。那时候学Pascal只是尝尝鲜,只是学了一些基本的用法,连结构体怎么用都不知道。很多人说Pascal是一门非常适合初学者入门的语言。我不知道我是否太擅长了,但我还没有得到它。从那以后,我学习了很多语言,比如C/C++、Java、Python、JS和最近的Go。十年前学的Pascal的语法我早就忘记了,那时候的编程习惯也很挫败,基本上改的差不多了。如果非要说学习Pascal对我现在有什么帮助的话,唯一的帮助就是它让我学习C语言的过程变得非常简单。基本上,我只是简单地看了一下C的语法,做一些练习就掌握了。其实这也是大多数人学习的第一语言的意思。不是为了学做事,而是为了以后学习其他内容打下基础。所以严格来说,C语言是我学习的第二门语言,但是我掌握得比较好的第一门语言。C语言适合入门吗?这个问题我反了,一时觉得不妥。因为学习C语言的过程就是面对一个黑盒子写各种数学题的过程,相当枯燥乏味,很多人就是这样被劝退的。如果是Python、JS等语言,可以做的事情很多,学习者继续学习的积极性会很大,入门门槛可能会低一些。我想很多人都有同感,因为学了C语言之后,会有一种没地方用的感觉。编程这样的黑科技我们花了很大的精力去学习,时间一长,除了在黑框前回答问题,什么也做不了。这不酷。看看蟒蛇。学好后可以抓取图片,处理文档。不好吃吗?有些人可能不太理解,觉得Python、Java等新语言比老C语言好。近年来,我的观点又发生了逆转。我现在觉得C语言其实还是挺适合初学者的,它也有很多其他语言没有的好处。同样,看起来浓眉大眼魅力十足的Python和Java,其实也有很多缺陷。C语言最大的优点是什么?我个人认为有两点。第一点是它的语法非常干净。C语言的基本语法几乎在所有其他语言中都有。这一点在Go语言中也有所体现,精简到了极致,没有一点多余的地方。换句话说,你在C语言中积累的编程技巧,在其他语言中基本上是可以用的,但是对于Python这样的语言就未必如此了。Python中的新特性太多了,你可能无法使用其他语言来玩转它。第二点是C语言区分了引用和指针,这点对于初学者理解非常重要。引用和指针与函数中的参数传递和变量处理逻辑直接相关,但很多语言只涉及两者之一。比如Java中只有引用,Go中只有指针。如果不理解引用和指针的区别,就会埋下很多隐患,比如传递参数时逻辑错误,或者根本没有内存使用的概念,写出来的代码存在严重的内存泄漏。当然C语言也有很多问题,比如应用场景太少,库函数不多,写代码很费力。但这并不妨碍它非常适合培养编程思想和良好的编程习惯。对于初学者来说,有一个好的习惯和意识其实比具体学到的内容更重要。从这点来看,大一新生其实第一节语言课上C语言是没有问题的。语言的选择当然,也有一些学校为新生提供Python或Java(如麻省理工学院和斯坦福大学)。这些学校有错吗?实际上,没有这样的事情。这是一个选择的问题。比如Python可能学起来比较有趣,对于一些高校来说,学生的兴趣可能更重要。又比如Java是全面向对象的。从Java开始可能更有利于以后面向对象的学习。也有一些大牛是从JS起家的,因为以后做前端会比较方便。这些其实都没有问题,也没有所谓的正确路线。语言本身没有区别,有的只是适用范围不同。所以,其实我们选择的不是语言,而是方向。比如你以后想搞算法,那么Python显然是必须的,不仅需要学习还需要更深入。比如你想做开发,那么Java比较推荐。入门门槛较低,就业差距较大。学得好,找工作就不愁了。比如你要做前端,那么显然Python和Java是不行的,HTML+CSS+JS三件套才是王道。换句话说,语言与我们的方向有关。如果我们想成为任何领域的工程师,我们都需要在那个领域进行相应的学习和研究。严格来说,没有一种语言是通用的,任何方向的工程师都需要掌握它。还有一点,后期学习一门语言远没有大家想象的那么费劲。其实,在熟悉了编程的核心逻辑之后,语言之间基本上就只有语法上的差异了。打个比方,刚进公司时为了完成入职测试,3天学会了go语言,从零开始用go语言写了一个简单的后台程序。3天学会一门语言听起来有点夸张,但事实并非如此。我只是阅读了基本语法并开始学习它。这不是我的特长,其实大部分的新人都做到了这一点。第一门课程的语言选择很重要,但并不是那么关键。关键是你以后能不能找对方向。说到成长路线的方向,估计很多人听到都会头疼,尤其是学生党。很多人可能不知道以后要做什么,也不知道这些岗位的能力要求。这其实很正常,因为学校教育缺少培养工程师的部分。只负责教学,不负责培养工程师,这是造成这个问题的核心原因。那我们该怎么办呢?我想你一定很想知道答案,但很遗憾,每个人都需要找到自己的成长道路,没有人知道你适合做什么。但话虽如此,还是有办法比较万事通的。学完C/C++不知道学什么,就学Java吧。学完Java,用Java踏踏实实做两个项目,提升项目能力。无论职位如何,工程技能都是必须的。而有了这两个项目的经验,其实也是有保障的。至少毕业以后,找份Java后端的工作基本没问题。而完成这两个项目后,你会对自己有更清晰的认识,像这样写代码调试程序找问题的工作是不是自己喜欢的。还有一个做项目的小技巧。我们不盲目做项目。项目之间有高点和低点。越接近公司实际业务,面试时项目越有吸引力。比如你自己搭建了一个推荐系统和搜索系统,即使很简陋,也勉强能用。这样的项目在面试的时候也是非常非常有价值的。比搭建一个XX管理系统有价值多了,而且这样的系统还跟算法有关。既可以用于算法岗位,也可以用于工程岗位,可以说是一箭双雕。其实个人成长的逻辑和写文章是一样的。首先要有主线,然后才是好的开始。之后需要结合主线适当发散,该覆盖的点都要覆盖。当然,在写文章的时候,我们在写作之前就有了主线,而成长之路一开始可能就是一个寻找主线的过程,找到主线其实是没有问题的。对于学生来说,年纪还小,青春很多,做一些工程项目试水是没有问题的。即使以后选择了算法或者其他方向,当初的努力和努力还是有用的。
