问题

今天和大家聊个很有意思的话题,大一新生学校在教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管理系统有含金量得多,而且这样的系统也算是和算法相关,既可以面算法的岗位,也可以面工程的岗位,可以说是一举两得。

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

C语言过时了吗?不,我们需要的是一份个人成长相关推荐

  1. C语言过时了?扯淡!

    01 为什么C语言不会过时 评价任何一门编程语言,都是招人骂的.永远是这样.就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:"傻逼!"这个在 ...

  2. C语言过时了?你在做梦?

    为什么要使用C语言? 在过去的四十年里,C语言已经成为世界上最流行.最重要的一种编程语言. C是一种融合了控制特性的现代语言,而我们已发现在计算机科学的理论和实践中,控制特性是很重要的.其设计使得用户 ...

  3. C语言从来都没有过时,你大爷终究是你大爷

    直到今天,有人在喊C语言过时的语言,还有什么值得学习的,现在看Python,PHP等语言现在都很容易用,谁还在学习老C语言,其实这是真的吗?作者下载了两种语言的源代码作为下载器.由于空间的限制,我们没 ...

  4. 重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言

    如果微软的 Excel 中支持了人生苦短的 Python,你还会喜欢那个直接且易上手的 VBA 编程吗? 近日,据国外媒体 BLEEPINGCOMPUTER 报道,微软正考虑添加 Python 为官方 ...

  5. 什么是动态语言(转)

    可以简单的理解为直接被解释执行的语言称为动态语言.而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言. 当前静态语言有:Java.C/C++.C#.Delphi.VB等. 动态语言有:ASP ...

  6. 为什么要学C语言及C语言存在的意义,新手经常犹豫学不学C语言

    有同学问过我,我们现在为什么还要学习C语言,C语言不是过时了吗?我相信这些同学是属于对计算机比较感兴趣的,他们会从各个途径去关注计算机语言的发展.不错,C语言的的确确有点过时.我相信当你们其中的持C语 ...

  7. 一定要好好学习C语言

    提到 C 语言,很多人的第一反应是:C 语言,不都过时了?还有必要研究吗? 当然有必要.用一个词来形容:C 生万物. 大量重量级软件都是C写的,比如 操作系统:Linux,UNIX,IOS内核,win ...

  8. 这是我的C语言入门笔记。

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

  9. TIOBE 6月编程语言榜单:C语言继续占据第一

    不知道各位朋友有没有发现,公众号改版了,现在的推送规则已经不一定是按照时间顺序了,有一些小伙伴甚至几天收不到消息,要点进去公众号主页才能看到. 所以,为了账号不会从您的订阅表里面消失,请各位朋友将公众 ...

最新文章

  1. 东南亚智能金融决策平台Silot完成A 轮融资,SBI 领投...
  2. Android开发--详解SAX解析XML文件
  3. POJ 1651 Multiplication Puzzle 区间dp(水
  4. beta分布_常用概率分布总结(2)
  5. 一个特牛的日期时间判断正则表达式
  6. ASP.NET CORE的H5上传
  7. 伯努利贝叶斯分类算法
  8. 微信小程序开发者工具打不开的问题
  9. 虚拟服务器 被劫持,服务器DNS被劫持,服务器dns被劫持怎么解决?
  10. 汽车云智能采集服务 八爪鱼采集器在汽车行业网站的应用
  11. 解决问题:使用cv2.imshow/plt.imshow显示图片正常,但保存下来的图片不正常或者全黑
  12. C++ 多种定义的getline函数使用
  13. 为什么放弃Vim而选择Neovim?
  14. 独立同分布(I.I.D.)是什么?(转载)
  15. JAVA跨考_考研人的2019——一战跨考清华计算机的血泪史
  16. android p 荣耀v10,荣耀V10和V9哪个好 区别对比分析告诉你
  17. 天圆地方· 围棋界的盲棋天才 -- 鲍云
  18. Kali最新版下载安装教程(2022.3),虚拟机VirtualBox
  19. 新手劝退!为什么学3D建模建议先3dsmax,而不是Maya
  20. c语言设计黑红梅方四种图案,8h9btf

热门文章

  1. 光纤收发器有什么用?光纤收发器的作用是什么?
  2. PoE交换机的4种连接方法
  3. 【渝粤教育】国家开放大学2018年春季 0014-21T秘书学(一) 参考试题
  4. [渝粤教育] 西南科技大学 西方经济学 在线考试复习资料
  5. 国家开放大学2021春1378管理英语3题目
  6. 【渝粤题库】国家开放大学2021春1020国际私法题目
  7. 物联网对石油燃气行业的作用
  8. Java集合(8)--集合工具类Collections
  9. boost安装_Centos安装MySQL
  10. Python 基础函数