大家好,最近有小伙伴在后台问我,大一新生学校在教C语言,是不是已经过时了?第一门语言应该学什么比较好?大学期间什么课程对于毕业之后的从业帮助比较大呢?

今天这篇文章就和大家简单聊聊这个问题。

关于我

最后给大家讲讲我自己的一些情况吧,掐指一算才发现,从我初学编程至今已经超过十年了。

我是高中的时候学习编程的,那时候我们学的是Pascal。大家没听说过是很正常的,这是一门非常古老的语言。这门语言古老到什么程度呢?古老到它的IDE都是蓝屏的,看起来就像是死机了一样。大概长这样,当时我们在机房里写代码的时候,一片蓝光,跟进了鬼片现场似的。

当时学Pascal也是浅尝辄止,只是学了一些基础的用法,连结构体我都不太会用。很多人都说Pascal是一门非常适合新手入门的语言,不知道是不是我太菜了,我至今也没get到。从那之后我又陆续学过很多语言,比如C/C++,Java、Python、JS还有最近学的Go。十年前学的Pascal的语法早已忘得精光,当时的编程习惯也都很挫,基本上也改得差不多了。

如果非要说学了Pascal对我现在有什么帮助的话,唯一的帮助应该是它让我学C语言的过程变得非常简单。基本上只是简单看了一下C的语法,做了一些练习就掌握了。其实这也是大多数人学习的第一门语言的意义,不是为了学到了就能上手做事情,更多的是为以后学习其他的内容打基础

所以严格说起来C语言是我第二门学习的语言,但是我第一门掌握得比较完善的语言。

C语言适合入门吗

关于这个问题我是有过翻转的,我曾经有一段时间觉得是不合适的。因为学习C语言的过程就是面对一个黑框框写各种数学题的过程,挺枯燥和无聊的,很多人都是这样被劝退的。如果是Python、JS等语言的话,则可以做的事情就很多,学习者会有极大的热情继续学习下去,这样入门的门槛可能会低一些。

我想很多人也是这么觉得的,因为学习了C语言会有一种无处施展的感觉。我们花了很大精力学了编程这么黑科技的东西,搞半天居然除了对着黑框框做题什么也做不了,这太不炫酷了。你看看Python,学会了之后又可以爬图片又可以处理文档,难道不香吗?还有些人可能也不太懂,就觉得Python、Java这些新兴语言要比老旧的C语言厉害一点。

最近几年我的看法又再次翻转了回来,我现在觉得C语言其实挺适合初学者入门的,它也是有很多其他语言没有的好处的。同样Python、Java这些看起来浓眉大眼魅力十足的语言,其实也是有很多缺陷的。

C语言最大的好处是什么?我个人觉得有两点,第一点是它的语法很干净,C语言当中基本的语法几乎都能在其他所有语言当中找到。这一点在Go语言上同样有所体现,精简到极值,多余的一点也没有。也就是说你在C语言上积累的编程功底换了其他的语言基本上都能用上,但像是Python这样的语言可能就不是如此。Python当中的新特性非常多,换一门语言可能就玩不转了。

第二点是C语言区分了引用和指针,了解这点对于初学者而言非常重要。引用和指针直接关系到传参以及函数内的变量处理逻辑,但很多语言这两者只涉及一个,比如Java当中就只有引用,Go语言当中就只有指针。如果搞不清楚引用和指针的区别会埋下很多隐患,比如参数传递的时候写错了逻辑,再比如完全没有内存使用的概念,写出来的代码内存泄漏严重。

当然C语言存在的问题也不少,比如应用场景太少,库函数也不多,写起代码来非常费劲。但这不妨碍它非常适合培养编程思想以及良好的编程习惯,对于初学者而言,拥有一个好的习惯和意识,其实要比具体学到的内容更加重要,从这点上来说,大一新生的第一门语言课上C语言其实是没有问题的。

语言的选择

当然,也有一些学校给大一新生开设Python或者是Java的(比如MIT和斯坦福),难道这些学校就错了吗?

其实也没有,这是一个取舍问题。比如Python学起来可能比较有趣,对于有些学院而言可能更加看重学生的兴趣。再比如Java一切面向对象,从Java开始可能更加有利于之后面向对象的学习。还有些大牛是从JS入门的,因为会比较方便之后从事前端。这些其实都没有问题,并没有一条规定的所谓正确路线。语言本身并没有高下之分,有的只有适用的范围不同。

所以说,其实我们选的不是语言,而是方向。比如你想要以后从事算法,那么Python显然是必学的,不仅需要学还需要比较深入。比如你想要做开发,那么就比较推荐Java,入门的门槛相对较低,并且岗位缺口很大,学得好不愁找不到工作。比如想要做前端,那么显然Python、Java这些都用不上,HTML+CSS+JS三件套才是王道。

也就是说语言是和我们方向挂钩的,我们想要成为什么领域的工程师,就需要相应地进行该领域内的学习和钻研。严格来说并没有一门语言是普适的,是不管什么方向的工程师都需要掌握的。

另外一点是到了后期学习一门语言远远不像大家想的那么费劲,其实熟悉了编程的核心逻辑之后,语言之间基本上只有语法的差异。打个比方来说好了,我在刚入职的时候为了完成入职测验,在3天内学习了go语言,并且从无到有用go语言写了一个简单的后台程序。说起来好像3天学完一门语言很夸张,其实不然,我只是看了基础的语法就开始上手了,边看边查而已。这并不是我的特殊能力,实际上大部分入职的新人都做到了这一点。

第一门的语言选择重要,但也没那么关键,关键还是以后能不能找准方向。

成长路线

说到方向估计很多人一听到就头疼,尤其是学生党,很多人可能完全不知道之后要做什么,也不知道这些岗位有哪些能力要求。这其实也很正常,因为学校的教育少了工程师培养的部分。它只负责授课,并不负责工程师的培养,这是这个问题的核心原因。

那我们怎么办呢?

我想你们一定很想知道答案,但很遗憾的是,每个人的成长路线需要自己找,谁也不知道你究竟适合做什么。不过话虽如此,但还是有一些比较万金油的方法的。

如果你学了C/C++之后不知道学什么,那就学Java就好了。学了Java之后用Java踏踏实实做两个项目,提升一下项目能力。不管是什么岗位,工程能力都是必须的。而且有了这两个项目经验之后,其实也算是一个保底,最起码毕业了以后找个Java后端的工作基本没问题了。并且这两个项目做下来,你会对自己有一个比较清晰的认知,这样写代码、调试程序寻找问题的工作究竟是不是你喜欢的。

而且关于做项目还有一个小技巧,我们做项目也不是盲目做,项目之间是有高低之分的,和公司实际业务越接近的项目面试的时候吸引力越大。比如你亲自做过一个推荐系统、搜索系统,即使做得很简陋,只是勉强能用,这样的项目在面试的时候一样是非常非常具有价值的。要比做XX管理系统有含金量得多,而且这样的系统也算是和算法相关,既可以面算法的岗位,也可以面工程的岗位,可以说是一举两得。

其实个人成长这件事和写文章的逻辑是一样的,首先要有一个主线,然后一个好的开头。之后呢,需要结合主线适当地发散,该覆盖的点都要覆盖到。当然写文章的时候,我们是在写之前就有了主线,而成长的路途中可能一开始的时候一直是一个寻找主线的过程,寻找主线其实并没有问题。对于学生来说,还年轻,拥有大把的青春,做一些工程项目进行适当性的试水完全没有问题。即使以后选了算法或者其他的方向,当初的付出和努力也一样是有用的。

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

{{uploading-image-618507.png(uploading...)}}

最新文章

  1. 正则提取 html 里<input> 标记的value 值
  2. Android 软件开发之如何使用Eclipse Debug调试程序详解及Eclipse常用快捷键(转)
  3. 第三篇 Integration Services:增量加载-Adding Rows
  4. LeetCode: JumpGame 1 and 2
  5. 新手必看的jQuery优化笔记十则
  6. adb shell 命令
  7. 【Java基础】对象的具体创建过程
  8. Python之路-shell&计划任务
  9. 译-what is cmdlet
  10. threejs - uv 映射 简要
  11. 看完这篇Linux基本的操作就会了
  12. 解决ubuntu下firefox无法在线播放音频和视频的问题
  13. waitGroup的使用
  14. python:实例化configparser模块读写配置文件
  15. Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
  16. vue后台项目记录
  17. PID控制本版一 (M100可用)
  18. 读取Properties文件以及中文乱码问题
  19. Ubuntu 下wifi掉线
  20. .NET Core开发日志——RequestDelegate

热门文章

  1. CentOS下设置ipmi
  2. mysql事务原理以及锁
  3. 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南
  4. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题
  5. requests的再次学习
  6. PHP代码审计分段讲解(2)
  7. 索引优化之Explain 及慢查询日志
  8. 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
  9. 【题解】AcWing 389. 直径
  10. AcWing 199. 余数之和