你已经是个成熟的985大学了,请不要在大一教 C 语言( 三 )


然后 , 时间应该很快来到了大二、大三 , 这时候你应该学习系统编程 , 什么是系统编程呢 , 其实就是 CSAPP 这本书上所讲授的内容 。
系统编程其实就是学习如何用 C 语言编写出真正可用的软件 , 比如像 http server、redis 这种 , 会涉及到:

  • 如何在 Linux 环境下编程
  • 系统级接口(system-level interface)究竟是什么
  • Linux 内核和 C 标准库提供了哪些能力
  • Linux 的系统调用是怎样实现的
  • 都有哪些系统调用 , 如何使用
  • 其它诸如mutex、signal、select、epoll、ipc、socket、thread、process(fork)等等
当然 , 还有一些同学会选择继续学习 Java 这种 , 比如 JVM、多线程、Java Web 等等 , 这也是没问题的 。
但是 , 相信我 , 就算你以后不会用到 C 去编程 , 利用大学大把的时间去深入学习一些底层的知识 。
也是对深入学习 Java 有好处的 , 比如你学 Netty、 Java 的 NIO 最终都要回到 Linux 系统的 epoll、select 上 。
系统编程推荐《深入理解计算机系统》、《Unix网络编程》、《Unix高级环境编程》 , Windows 下的我基本没学过 , 所以就不推荐了 。
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
虚拟机之下的世界
这就是 Java、Python 之下的世界 , 相信 Javaer 都学习过 JVM 的原理 , 了解过 GC、类加载机制、运行时数据区等知识 。
但实际上 , JVM 也只是介于操作系统之间的一个中间层 。
很多时候 JVM、Python 解释器等本身都是需要 Native 本地方法栈去和 OS 打交道的 , 去和系统调用接口交互 。
所以 Linux 系统编程对于深入学习编程一定是绕不开(因为很多服务端程序都是运行在Linux上的 , 所以忽略了Win/Mac
而这是 C 语言的世界:
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
C
所以 C 的重要性不需要的多说了吧~
不少 Java、C#、PHP、Python 程序员工作几年后会遇到瓶颈 , 有些会回来学习 C 语言 , 重拾底层概念 , 寻求新的突破 。
这里不是在否定其它非 C 程序员就没技术 , 实际上我本身也不写 C , 我只是想表达如果你想学习底层机制、操作系统等 , 请学习 C 语言 。
编程学到一定的时候 , 你就需要了解底层系统的机制 , 否则 , 知其然不知所以然 。
真正的高手往往都是有很强的系统性基础知识的 , 表面的东西永远是肤浅的 。
所以利用大学的时间恰恰是打好这些基础的关键时间 , 等到工作了 , 大家都是更倾向于学习快速上手业务的技能 。
所以 , 在大学里先学什么语言不重要 , 你可以先学 Python、Java , 但是无论如何 , 如果你想学好 Computer Science , C 语言一定绕不开 。
也许以后实际工作中你完全没有机会去写 C , 但是这并没关系 , 打好了基础 , 学其它也会学得很快、很透彻 。
对于计算机专业的同学 , 还是建议学好 C 语言 , 与其它课程相结合 , 多懂一点程序背后的实现原理 。
最后上两张图 , 什么叫真正的技术啊(战术后仰
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
培训班
还教微服务 , 这种不是玩概念么?
不去公司上手真正的微服务项目 , 在学校、培训班搭微服务?
这种东西学习下概念和思想就好了 , 这些东西根本就是应用层的东西 , 学习起来根本不费劲的好吧 。
我敢保证 , 没有一个 985 会教微服务这种东西 , 分布式理论倒是可能会单独开一门课 。
不过我相信上面图片里的这个分布式一定不会教CAP、Raft、Paxos 这些东西 , 大概率是用 Springboot + Dubbo + Zookeeper 在几台机器搭建一个服务 。。。
你已经是个成熟的985大学了,请不要在大一教 C 语言文章插图
科班
而这是科班的学习路线 , 先不说这些课程有多少是学过就忘了的 , 但至少你需要用到的时候知道去哪捡起来 , 怎么捡 。
不过讲道理两张图片 , 殊途同归 , 最后都是码农 , 只不过大概率决定了你在哪里敲代码 。
总结一下 , BB 了这么多 , 就想表达一个意思 , C 语言很重要 , 如果你正在大学学 C , 一定要掌握好 , 不要怀疑学 C 有没有用 。