大家好,最近有小伙伴在后台问我,大一新生学校在教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...)}}

80%的学校还在给新生上C语言,它们OUT了吗?的更多相关文章

  1. 测试 __try, __finally, __except(被__finally捕获的异常, 还会被上一级的__except捕获。反之不行)

    C语言标准是没有 try-catch语法 的, M$家自己提供了一组. /// @file ClassroomExamples.c /// @brief 验证C语言的非标准try, catch #in ...

  2. 谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署

    谁还没遇上过NoClassDefFoundError咋地--浅谈字节码生成与热部署 前言 在Java程序员的世界里,NoClassDefFoundError是一类相当令人厌恶的错误,因为这类错误通常非 ...

  3. 清华教授谈人工智能:BAT还算不上伟大公司

  4. 005-循环结构(上)-C语言笔记

    005-循环结构(上)-C语言笔记 学习目标 1.[掌握]switch-case结构 2.[理解]case语句穿透 3.[理解]Xcode断点调试 4.[理解]while循环结构初体验 5.[掌握]w ...

  5. 真的懂了:TCP协议中的三次握手和四次挥手(关闭连接时, 当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了。相当于一开始还没接上话不要紧,后来接上话以后得让人把话讲完)

    一.TCP报文格式 下面是TCP报文格式图: (1) 序号, Seq(Sequence number), 占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2) 确 ...

  6. bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】

    连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...

  7. 项目目前展示图 有几个Activity页还没连上不能一次展示出来

  8. 棋盘覆盖(我们学校自己的UOJ上的变形题)

    题目 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> # ...

  9. [bzoj2055]80人环游世界[网络流,上下界网络流]

    手动画了整张图,,算是搞懂了吧,, #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; templat ...

随机推荐

  1. Alpha冲刺-第三次冲刺笔记

    Alpha冲刺-冲刺笔记 这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE2 这个作业要求在哪里 https://edu.cnblogs. ...

  2. kali查看本机ip

  3. opencv-python imread、imshow浏览目录下的图片文件

    ☞ ░ 前往老猿Python博文目录 ░ 一.几个知识点 1.1.使用Python查找目录下的文件 具体请参考<Python正则表达式re模块和os模块实现文件搜索模式匹配>. 1.2.o ...

  4. URLEncoder使用踩坑

    URLEncoder使用 背景介绍 今天需要传一些描述信息给前端,需要写在header里面,所以要先编码成utf-8的格式,再有前端解码获取. 工作过程 前提:我要传给前端的文字是我从中台那边拿到的. ...

  5. 将ACCESS 的数据库中的表的文件 导出了EXCEL格式

    将ACCESS 的数据库中的表的文件 导出了EXCEL格式 '''' '将ACCESS数据库中的某个表的信息 导出为EXCEL 文件格式 'srcfName ACCESS 数据库文件路径 'desfN ...

  6. WPF中Logical Tree和Visual Tree的区别

    The Logical TreeThe logical tree describes the relations between elements of the user interface. The ...

  7. 查找列表中的元素,移动空格 并查找以a或A 为开头 并以c 结尾的元素

    li = ['alec',' aric','Alex','Tony','rain']tu = ('alec',' aric','Alex','Tony','rain')dic = { 'k1':'al ...

  8. 情话爬虫工具[windows版]

    有没有在气氛暧昧的情况下想说点什么却又无话可说?女朋友有没有抱怨过你,只会写代码,一点都不懂情调?这次,是时候要改变她对你的看法了!一键爬取情话,情话全都躺在txt里面.想怎么玩就怎么玩!张口一句情话 ...

  9. 移动 WEB 开发的布局方式 ---- 响应式布局

    一.响应式简介 一个页面布局兼容了 PC端 ,iPad端 和 移动端 所谓的响应式就是页面中的布局会随着屏幕的大小变化发生了响应而做出不同的页面布局模型 特点: 响应式布局是不需要单独写移动端页面的 ...

  10. 用列表+for循环生成乘法口诀表

    1 # 结合一下列表生成, 准备设计乘法表 2 # numlist = [1,2,3,4,5] 3 # [pow(i,3) for i in numlist] 4 # ## [1, 8, 27, 64 ...