个人推荐的编程学习路径¶
Abstract
该推荐主要面向信息学院的同学,按照学习的先后顺序排列。如果只是想了解编程,那么学 Python 来玩就够了。
英语
没有英语基础的话学什么都会感觉有些困难 因为你可能需要查看很多英文文档 与世界上的其他人使用英语交流 推荐有良好的英语基础 当然边学知识边学英语也是好的科学上网
Google搜索
科学上网和 Google 能让你获取互联网上绝大部分的有用的资源Stack Overflow
Google 找不到的问题可以在 SO 搜索 没搜到则可以直接在 SO 提问- 在进行任何提问前请仔细阅读《提问的智慧》
操作系统
初步操作系统历史与现状
从大家熟悉的桌面操作系统切入,了解操作系统这一世界级的大工程Linux
命令行程序
shell
了解 Linux 这一开源的操作系统 熟练使用shell与计算机进行交互
Python
入门编程
从C语言学起有些劝退... 可以先从 Python 着手学习基本的编程思想日常编程
熟悉包管理 学会调包 Python 能帮助你将日常工作中的很多繁琐重复的事情简化脚本
取代 shell 脚本科学计算
numpy
计算matplot
绘图 以取代 MATLAB
处理器基础
数字逻辑
数字电路
CPU电路设计
有了数字电路的基础 你才会知道计算机到底是怎么进行计算的指令集
汇编语言
CPU和内存的关系
知道指令集为软件和硬件设计的分界线 了解CPU寄存器 了解汇编语言函数调用的思想
为学习编程语言的函数打基础
C
C语言语法
C 与计算机底层资源紧密结合 作为最早且最简洁的编程语言 值得每个入门编程的人了解并熟练掌握数据结构与算法设计
初步- 熟练掌握常用开发工具:详见MIT missing-semester
- 重点熟悉
Git
GitHub
make
gdb
/lldb
VS Code
Markdown
- 重点熟悉
C++
C++语言语法
面向对象的经典语言 代码执行效率高- 相比现代的编程语言较难掌握 但现实大多实际工程都在使用 C++ 构建 学习编程无法绕过
- (我个人极其不推荐学 C++ 但是历史原因真的没办法 我更推荐这个阶段直接入门 Rust)
数据结构与算法设计
进阶
操作系统
深入特权机制
内存分页
进程线程
文件系统
等操作系统设计原理 了解这些原理能够帮助你编写更高效的程序高级编程
如多线程 网络编程 系统编程等
- 任何你喜欢的技术
其他编程语言
Rust
其是有着现代设计的新语言 与底层开发联系较紧密 相信在未来会大放光彩
深度学习
深度学习近年来发展迅速 应用广泛 只是了解的话并不困难 总感觉学了 Python 但是不了解 PyTorch 有点可惜计算机网络
没有网络 我们可能已经寸步难行 互联网的设计做到了让这个世界互联前后端技术
现在很多应用都离不开网络
应用程序开发
Windows/macOS/Linux/iOS/Android 平台开发 有了编程基础你很容易就能创建出你自己的 App音视频编码
我们听到的音乐和看到的视频都是 01 的编码串 编码建立起从人的感知到计算机存储的桥梁计算机图形学
你能看到的 GUI 界面 3D 游戏 背后都是计算机在做渲染编译汇编
操作系统底层的重要技术之一- ......
做程序员需要知道的 10 件事:
- 小城市码农圈子也小,尤其是 C/C++ 这种稀缺人数的,不要想着公司上司针对你就搞事情,大概率传开了没法在这个城市混下去;
- 去好公司不如跟好领导;
- 别想着资历混上去就能躺着赚钱了,分分钟 PIP(Performance Improvement Plan) 开给你;
- 问问自己还爱 Coding 吗?当初的梦想跟黑客一样,结果现在天天加班不如自己家里养的狗;
- 不要着急,想着自己好多技术不会,好多经验没有。这些都是随着时间增长的,没谁能一蹴而就;
- 程序员这一行,你的付出很容易得到回报。现在为了钱写代码的迟早会被你甩到身后去。每一个问题的一探究竟,每一个技术的认真学习总会成为你将来发展的一块垫脚石;
- 敢于问为什么,该怎么做,还能怎样优化。不要把自己当作写代码的一个工具,程序员是一个创造性的职业而不是 ChatGPT 或者 Copilot;
- 程序员仍是需要情商和沟通能力的,毕竟一个软件一个系统不是一个人就能写出来的,要分工,就要有沟通和合作。技术能力只占一个程序员总能力的一部分。甚至后期基本不需要去写代码,作为 Leader 大部分时间在于沟通和思考;
- 不要被公司高级工程师吓到,说不准他比你还水。多向下探索,寻找属于自己的答案;
- 无论自己多少岁,都要热爱 Coding。虽然要天天加班累成狗,每天写的代码都能扔到垃圾桶里,但是始终别忘了,自己是创造者。偶尔写写属于自己的小玩意有助于维持这份热情。