为什么大学c语言课不顺便教一下Linux,Makefile,git,gdb等配套工具链呢?-Cv大法代码酱
答案其实很残酷,但又很真实:因为大学教育和职业培训,本质上是两条道上跑的车。而那个叫做“自学能力”的东西,才是把你从学校那条道变轨到职场这条道上的道岔。
咱们今天就不整那些虚头巴脑的教育体制分析,也不谈什么宏观大义,我就从一个写代码写到头秃、调参调到手软的从业者角度,给你把这事儿揉碎了讲讲。
这中间我会穿插一些我认为真正能救命的资源,信我一句,把这些资源啃透了,你比你那个只会考90分的同学强出得有五条街。
大多数人对大学计算机教育有个误解,觉得这就是个职业培训所,交了学费,四年后出来就该是个熟练的码农。错。大错特错。
大学的计算机专业,全称通常是“计算机科学与技术”。注意那个词,科学。C语言课在教学大纲里的定位,从来就不是为了让你去写一个能跑在Linux服务器上的高并发Nginx模块,也不是为了让你去给Linux内核提交Patch。它的定位极其单纯:让你理解什么是计算机程序,什么是控制流,什么是数据结构,最重要的是,什么是内存。
很多老师自己可能也就是在Windows下用个Dev-C++或者老掉牙的VC6.0讲课。你让他教Makefile?他可能自己这辈子都没写过一个复杂的Makefile。这不是贬低老师,而是术业有专攻。学术圈的关注点在算法复杂度、在理论模型、在论文发表。工程圈的关注点在鲁棒性、在协作效率、在自动化部署。
咱们来复盘一下,如果真把这些工具链塞进C语言课里,会发生什么。
大一新生,刚从高中的题海里爬出来,连变量和常量的区别还没搞利索,连那个该死的指针为什么能指飞都还没弄明白。这时候,你告诉他:“同学,我们不要用鼠标点那个绿色的运行箭头了,来,打开黑框框,输入vim main.c,进入插入模式,写代码,按Esc,输入冒号wq保存,然后敲gcc -o main main.c,如果有错,请看那个长得像天书一样的报错信息。”
大概率,这门课的挂科率会从20%飙升到80%。
工具链这东西,门槛极高。Linux的文件权限、Shell的环境变量、Make的依赖规则、GDB的堆栈回溯,每一个单拎出来都是一门课。C语言本身就已经够劝退了,再加这一堆“工程杂音”,这课就没法上了。
但是,我不否认你的观点。作为从业者,我看得很清楚:只会写C语法,不懂工具链,在工业界约等于文盲。
我在面试的时候,经常遇到这种学生:LeetCode刷了两三百道,算法题写得飞快,动态规划张口就来。但我让他把这代码在Linux下编译跑一下,或者问他如果程序崩溃了怎么定位,他傻眼了。他说他只会在LeetCode的网页编辑器里写,或者只会在IDE里按F5。
这就很尴尬。因为公司招你进来,不是让你做题的,是让你在一个几百万行代码的仓库里干活的。
这里我要强烈推荐一份资源,这玩意儿在国外火得一塌糊涂,国内这几年也开始有人推了,就是MIT的《The Missing Semester of Your CS Education》(计算机教育中缺失的一课)。
这就完美回答了你的问题。这门课专门讲Shell、Vim、Git、Tmux这些大学不教但工作中要命的工具。你去B站搜,有中文字幕。别光看,跟着敲。这门课哪怕你只学了一半,你处理问题的效率能提升十倍。
咱们展开说说这些工具为什么大学不教,但你必须得会。
先说Linux。
大学机房清一色Windows,装个还原卡。老师讲课也是PPT演示。但现实世界里,除了开发桌面应用和游戏(部分),几乎所有的后端服务、嵌入式设备、高性能计算集群,跑的都是Linux。
我不止一次看到新来的实习生,在服务器上写代码,居然是用FTP把文件下载到本地Windows,改完了再传上去编译。出了错,再下载下来改。这种操作看得我血压升高。
你不懂Linux,你就理解不了什么是“一切皆文件”。你不懂Shell,你就不知道原来一行命令能干Java写一百行代码干的事。比如你要处理一个几G的日志文件,找出现现频率最高的IP地址,懂Shell的人,cat、awk、sort、uniq一套组合拳,几十秒搞定。不懂的人,在那哼哧哼哧写Python脚本,还没跑完内存先爆了。
再来说Makefile和CMake。
在学校里写代码,通常就是一个main.c,撑死加个func.c和func.h。点一下IDE的编译,IDE帮你把复杂的链接过程屏蔽了。
到了公司,一个项目几千个源文件,依赖几十个第三方库(OpenCV, Boost, Protobuf等等)。你不可能一个个手动敲gcc命令。你需要构建系统。
Makefile是基础,但说实话,手写Makefile确实反人类。所以后来有了CMake。CMake是构建系统的构建系统。它让你用更高级的语言描述项目结构,然后生成Makefile。
我不要求你精通CMake的所有指令,但你至少得看懂CMakeLists.txt吧?知道什么是include_directories,什么是link_libraries。否则源码给你,你连环境都搭不起来。
接着聊Git。
这绝对是重灾区。大学交作业,通常是打个压缩包:大作业_最终版.zip,大作业_最终版_真的不改了.zip,大作业_打死也不改了.zip。
这种习惯带到工作里就是灾难。
Git不仅仅是备份工具,它是协作工具,更是后悔药。
我有过一个惨痛经历。一个新来的小伙子,不懂Git的rebase和merge的区别,在自己的分支上闷头开发了一个月,也没有拉取主分支的代码。等上线前要合并的时候,冲突多达几百个。他一慌,强制推送(force push)了一下,把同事修了一周的Bug的代码覆盖了。那天晚上,我们全组陪着他通宵回滚数据,一行行对代码。
Git的核心在于理解分支管理(Branching Model)。你得知道什么是Git Flow,怎么提Pull Request,怎么做Code Review。这些东西,学校不教,因为学校里就没有多人协作写大工程的场景。
市面上很多教程非常繁杂,动辄几十个小时,我这里总结了一套Git初学者操作手册,以一线大厂的工业实战实操标准为例,结合了大厂协作流程和真实事故案例写成。
这套方法,覆盖一个开发者在公司里 90% 以上的 Git 操作场景。里面不光有命令大全,更重要的是,把这些命令串起来,告诉你什么场景下该用什么组合拳。比官方文档好懂,比碎片化的博客系统更高效。为了方便大家下载学习,所有操作都汇集成册。按需下载:Git零基础实战手册.pdf
不求你成为 Git 布道师,只求你在团队协作中游刃有余,不坑队友,还能在关键时刻秀一把操作,解决别人解决不了的问题。
再谈谈GDB。
调试代码,大多数学生只会一种方法:printf大法。哪里不对就在哪里打印一下变量。
这方法在写小作业时管用。但在多线程环境下,在并发量极高的情况下,甚至在程序已经Coredump(崩溃转储)只剩下一个尸体文件的时候,printf是没用的。
你需要GDB。你需要挂载到正在运行的进程上,查看当前堆栈,查看寄存器值,查看内存里的字节。甚至你需要修改内存里的值来验证你的猜想。
了解GDB,你才能真正理解程序的运行时状态。
说到运行时,这就牵扯到你提到的“底层原理”了。
为什么C语言课不教底层原理?其实教了,但教得很浅。
比如堆和栈。老师会告诉你,局部变量在栈上,malloc的在堆上。但老师不会告诉你,栈的大小是有限制的(通常几MB),如果你在栈上开个大数组,直接Stack Overflow。老师也不会告诉你,堆内存如果不释放会泄露,而现在的操作系统和glibc里的malloc实现(ptmalloc)是有碎片整理机制的,但用不好依然会碎片化。
再比如ABI(应用程序二进制接口)。为什么有的库在CentOS 6上编译的,扔到CentOS 7上能跑,有的就不行?为什么C++的动态库兼容性那么差,要用extern "C"?这些都是坑,都是踩过才能懂的坑。
强烈推荐大家看看《深入理解计算机系统》(CS:APP), 这就是神书。CMU的镇校之宝。如果你大学四年只读一本书,那就读这本。
它把硬件、系统、编译器、操作系统串起来讲。读完它,你就知道从汇编指令到高级语言是怎么映射的,虚拟内存是怎么骗过应用程序的,流水线和缓存是怎么影响性能的。读这本书特别痛苦,但读通了,你就打通任督二脉了。
那么,回到你的问题。既然这些东西这么重要,为什么学校就是不改?
除了我开头说的“定位不同”和“师资限制”,还有一个很隐晦的原因:筛选机制。
计算机行业,尤其是像你说的需要懂底层原理的岗位(系统开发、后端架构、高性能计算),是有门槛的。
大学教育提供的是底座。而这些工具链、工程能力、底层洞察,就像是底座上的高楼。
那些只会跟着老师节奏走,老师教什么学什么,老师不教就不看的学生,最后大概率去做了一些对技术深度要求不高的工作,或者转行了。
而那些在知乎上问出你这个问题,并且自己去折腾Linux,去翻GitHub,去啃英文文档的学生,才是行业真正想要的人。
这种“不教之教”,其实是一种天然的过滤器。
我看过太多优秀的简历,他们的共同点不是绩点4.0,而是他们的GitHub是一片绿。他们的个人博客里记录了怎么给Vim配置插件,怎么用GDB分析死锁,怎么用CMake管理跨平台项目。这些东西,都是他们利用课余时间,在无数次报错和崩溃中摸索出来的。
你可能会觉得这不公平,凭什么要我自己学?
兄弟,这一行本来就是终身学习。技术更新迭代这么快,学校的教材出版都要走个两三年流程,等教材印出来讲Docker的时候,外面都在玩K8s了;等讲K8s的时候,Serverless又火了。
指望学校把工具链教全,是不现实的。
而且,工具是死的,人是活的。
GDB好用,但现在也有更现代的调试器。Vim好用,但JetBrains的全家桶或者VS Code也是生产力工具。重点不在于你背下了多少快捷键,而在于你是否理解了“自动化”、“版本控制”、“调试方法论”这些核心思想。
我给你举个实际的场景。
我现在带的一个项目,涉及大规模的数据处理。代码是C++写的,跑在几十台Linux机器上。
有一天,服务突然变慢了,每秒处理请求数跌了一半。
如果是学校里的思维,可能就会去查代码逻辑,看看是不是哪个循环写多了。
但具备工程素养的思路是这样的:
- Shell/Linux工具链介入 :先上机器,用
top看CPU和内存,用iostat看磁盘IO,用netstat看网络连接数。发现CPU占用不高,但IO等待很高。 - 底层原理介入 :怀疑是写日志卡住了。去查日志系统的配置。
- GDB/Perf工具介入 :用
perf抓取热点函数,或者用pstack看进程卡在哪里。发现大量线程卡在锁的竞争上。 - Git介入 :用
git blame查看这段代码是谁最近改的。发现是一个新来的同事为了线程安全,加了一把全局大锁。 - 解决 :优化锁的粒度,或者改用无锁队列。
你看,在这个过程中,C语言本身的语法只占了很小一部分。更多的是对操作系统、对工具、对性能分析的理解。
所以,千万不要等到毕业了才去补这些课。
既然你已经意识到了这个问题,那你已经领先了绝大多数人。
我现在给你的建议是:
不要指望学校改大纲。你要做的是,在完成学校作业的基础上,强迫自己“脱离舒适区”。
下次写数据结构作业,别用Windows。装个Ubuntu虚拟机,或者买个便宜的云服务器。
别用IDE。强迫自己用Vim或者VS Code的Remote模式。
别手动编译。强迫自己写个简单的Makefile。
遇到Bug,别只会加printf。强迫自己用GDB打个断点,看个bt(backtrace)。
代码别存U盘。强迫自己建个GitHub仓库,哪怕只有你一个人写,也假装你有队友,规范提交信息。
刚开始会很痛苦。真的,你会觉得自己是个残废,连复制粘贴都不会了。但坚持一个月,你会发现你对计算机的理解上了一个层次。
你会明白为什么Linux的设计哲学是“组合小工具完成大任务”。
你会明白为什么代码规范和版本控制比写出一段骚操作的代码更重要。
你会明白计算机底层那个冰冷而又精密的逻辑世界。
总而言之,大学C语言课不教这些,是遗憾,也是常态。不要抱怨环境,要利用环境。
在IT这行,学历是敲门砖,但真正能让你走得远、爬得高的,是你解决问题的能力,是你对工具的驾驭能力,是你对底层原理的敬畏之心。
别做那个只会写main函数的学生。做个能驾驭代码、驾驭系统的工程师。
当你有一天熟练地在黑底绿字的终端里敲下make && ./run,看着程序在后台稳定运行,日志疯狂刷新的时候,你会感受到一种前所未有的掌控感。
那种感觉,才叫真正的编程。
评论区
醉卧红尘: 好多大学老师,都不会这些,或者根本就没听过,怎么教学生!完全与社会脱节[捂脸][捂脸][捂脸] 👍🏽11 💭广东 🕐2025-11-21 08:31:43
│ └── zeke: 你真的认真看过这个回答了么? 👍🏽5 💭辽宁 🕐2025-11-21 15:20:11
│ └── IT落幕参与者: 大学老师自己也不会。再者大学是专业扫盲,四年能把扫盲吃透和自学养成不错了。天天教工程技术,你没扫盲知识打底,说个专业名词都是知识盲区 👍🏽0 💭湖北 🕐2025-11-23 09:44:54
诗叔(poecle): 读书的时候再专注这个,学不过来,基础也掌握不好,其实这些东西都是小trick,基础牢固,工作一个月就弄好了。 👍🏽7 💭黑龙江 🕐2025-11-21 02:13:59
│ └── 屠狗肉伙计: 讲得好像大学其他东西就紧跟前沿一样 👍🏽1 💭江苏 🕐2025-11-21 09:16:34
│ └── rodhos: 数学几百年没变,你学清楚没有?AI够前沿,神经网络上个世纪六十年代就已经成体系,也是建立在数学基础之上。 👍🏽3 💭福建 🕐2025-11-21 12:10:23
│ └── 屠狗肉伙计: 几百年前的数学你以为和我们现在学的长的一样吗? 👍🏽0 💭江苏 🕐2025-11-21 17:02:41
│ └── 屠狗肉伙计: 如果说是建立在数学基础上,为什么神经网络会被称为黑盒? 👍🏽0 💭江苏 🕐2025-11-21 17:03:41
│ └── rodhos: 这么说神经网络不用数学基础知识?你不看看你的逻辑性在哪里?就你这样学数学,能学会才怪,还夸夸其谈前沿 👍🏽0 💭福建 🕐2025-11-21 17:11:56
│ └── 屠狗肉伙计: 用了数学基础知识不代表核心就是数学,不然做手抓饼难道也是线性代数吗 👍🏽0 💭江苏 🕐2025-11-21 21:39:41
│ └── rodhos: 刚才讲AI,现在讲手抓饼,就你这样还夸夸其谈数学和前沿没有数学功底就是玩不转AI,摆迟 👍🏽1 💭福建 🕐2025-11-22 01:37:03
│ └── 屠狗肉伙计: AI用到最多的基础数学就是矩阵,或者说是线性代数,一切蕴含加法的结构都能定义成线性代数,你连手抓饼也是线性代数的老梗都不知道吗[捂脸] 👍🏽0 💭江苏 🕐2025-11-22 11:06:58
│ └── rodhos: 春菜,连滤波器都不知道,还夸夸其谈AI 👍🏽0 💭福建 🕐2025-11-22 12:30:35
│ │ └── 屠狗肉伙计: 看得出来,滤波器是您所了解的最接近ai的东西了 👍🏽0 💭江苏 🕐2025-11-22 13:20:09
│ └── rodhos: 把运算当做AI的基本原理也是醉了,谁告诉AI中用得最多的基础数学是矩阵,用得最多的数学基础是小学学的加减乘除运算。把运算当做AI的实现原理,你读个数学读了个寂寞。计算机是不认得矩阵,基础电路只有加法器乘法器之类,凡是要用到运算都必须用到加法器乘法器之类,好好学习下逻辑代数及其电路实现再来扯淡。 👍🏽0 💭福建 🕐2025-11-22 16:26:24
部言: 语言规则 数据结构 不会 那是学校的责任 工具链自己都闹不明白 那是自己的责任 👍🏽7 💭江苏 🕐2025-11-21 09:23:50
百折不挠的豌豆: 又tm见了一个“鲁棒性”!我都服了,能不能好好翻译了! 👍🏽3 💭北京 🕐2025-11-21 19:04:17
唐先森: 学校重点教的是自行车原理与设计,不是教自行车维修 👍🏽2 💭江苏 🕐2025-11-22 11:19:33
BetaCat: 说实话,这个问题因人而异。好的大学学生我猜测有能力去消化和应用,但不是所有大学学生都能信手拈来。动手是学生面前第一座大山,C语言不合理地被分配在了作者说的大一上学期。正如笔者所言,代码都还在用二指禅,你让他黑框打字!!这些东西在银行后台天天干,教书的时候很想多教一些,大多数以为c语言对学生而言只难在指针?大错特错,循环就给你卡死了,再到函数,最后才到指针,还只是指针的基本概念和理解应用,一个学期54课时就过去了。只能怪鄙人才疏学浅,哪能怪还不知大学是个什么玩意的大一新生呢[大笑] 👍🏽2 💭云南 🕐2025-11-21 19:28:22
黑照: 既要讲工具,又不能专门讲工具,比如讲了VIM,是不是还有另外一个操作系统级编译器。讲了git,万一公司用SVN怎么办?讲了VS CODE,万一企业就是要用eclipse怎么办?[doge]工程链确实太复杂了。 👍🏽2 💭湖北 🕐2025-11-21 10:12:35
│ └── 9029: 就算公司也用git,不同公司的用法也天差地别。 👍🏽3 💭浙江 🕐2025-11-21 10:30:52
│ └── 琉璃香: 那倒不至于手残到这种程度,举一反三的能力一般人还是有的,你用zip提交作业,那肯定对git两眼一抹黑,但是你学了git,再接触svn就没那么晕了 👍🏽0 💭北京 🕐2025-11-21 16:26:20
路上的行者: 我高中大学(2000)那会,我和几个要好的同学,对各种计算机技术的认知就是:拿一本《xx从入门到精通》看一遍,不就能搞起来了。 👍🏽2 💭江苏 🕐2025-11-21 09:27:35
│ └── 乙八: [思考]那年我拿起了一本 tcpip详解 👍🏽1 💭河南 🕐2025-11-21 09:56:12
yuua: 很好[酷] 👍🏽2 💭江西 🕐2025-11-21 00:05:56
心海岛主86: VC6不比linux gcc差,有个ide,效率比linux原始社会强太多。 👍🏽1 💭上海 🕐2025-11-22 22:36:00
懒洋洋的乐曲: 因为这些又难考试麻烦,而且他们也不一定会 👍🏽1 💭北京 🕐2025-11-21 22:03:00
Pour Marx: 讲的太好了[感谢] 👍🏽1 💭山东 🕐2025-11-21 11:21:32
云飞扬: 程序员如果没有自学能力,基本上就废了。 👍🏽1 💭内蒙古 🕐2025-11-22 06:25:02
洛都瑶: 学校只能讲理论 工程方面的工具链还得自己琢磨 👍🏽1 💭广东 🕐2025-11-28 10:28:58
Alex: 应该是课程设计有问题。本科可以偏重工程,研究生可以偏重理论! 👍🏽1 💭美国 🕐2025-11-21 13:07:59
DaDa: 说的很中肯 那个自学能力才是关键 我在培训机构带过课 就是以C语言为线将linux部署安装 shell vim makefile gcc gdb一套讲的 👍🏽1 💭江苏 🕐2025-11-23 14:34:27
闲来无事: 真要讲这几个项目,一门都可以讲一个学期,也就讲个皮毛。 👍🏽1 💭浙江 🕐2025-11-21 10:34:15
禾夭: 从技术精进的角度来看,似乎没有问题,但如果只是混口饭吃的话,就是另外个情境了。国内的头部大厂就那么多,社招的时候,92及一本以上的本硕博,加海外的基本上把坑填完了,中部也少得可怜,就业池子更多的是庞大的底部的小微企业,是没那么复杂的业务需求的。硬件的发展已经拉平了一些领域和行业中win和linux在服务端的差距,因为win的后续维护成本真的要低很多,你不必需要开发部门和运维部门都有熟悉linux的人在,找替换的人也方便,svn也不是不能用,然后,一大批的服务和产品用的是java,傻大黑粗狂堆硬件就是了,到了需要考虑性能瓶颈的时候相信你司已经有大量的资金来干这个活了。总之,考虑清楚你是把它当终身事业,还是搞钱混口饭吃,毕竟,35岁后,多数都是it行业查无此人的。而且,近来行业里的多次p0级别的事故,愈发表明,这个世界真的就是一个巨大的草台班子,凑合过呗,[doge] 👍🏽2 💭湖北 🕐2025-11-21 11:29:34
夏雨雪: 主要原因就是大学只想让你看清楚自己适不适合这一行,其实就是在变相劝退。老师教会学生,但你没有进取心想混吃等死不是变相的浪费社会集体资源。说句难听的他与你非亲非故,凭什么教你。况且当前国内很多资源都可以在网上找到,自学不难,难的是能不能长久。放在古代我们大多数人,连碰书的资格都没有,想学都难。要是在国外几百块的书,动辄十几万的一学期学费,还有一堆不稳定因素,没钱能“活”吗?别真把学校、社会当自己家了。其实现代大学已经在教我们社会的第一课了,如果你没本事,没有人会惯着你。自己的才是自己的,别人教的永远学不会。 👍🏽2 💭浙江 🕐2025-11-21 11:33:03
Vortex: 其实没必要大学期间就急着搞这些,工作了这些一个月就学会了,大学还是要打好基础,多看看优秀的代码,搞个自己满意的项目,github上多拿几个星才是要紧的事[捂脸] 👍🏽2 💭湖南 🕐2025-11-21 10:39:52
素质张老师: 大学应用讲的太多了,主要是因为小镇做题家和艺术家太多了 👍🏽1 💭北京 🕐2025-11-21 09:24:32
快捷键: 老师自己什么都不会[流泪] 👍🏽1 💭英国 🕐2025-11-21 17:52:22
timifuture: 虽然说的没啥问题,但是对于老师而言,人多,保证正常基础的教学就已经足够了。然后躺平了之后,也不愿折腾,所以大部分不会整这些。年轻老师会慢慢推动改变的,至少我个人是这么觉得的。因为我刚入职,对于这种现象,我也会努力尽我所能,为后来学习的同学们减少一些弯路。 👍🏽1 💭辽宁 🕐2025-11-21 18:52:51
王zd: 这是大高手!我以前也痛苦过,最后放弃了。 👍🏽1 💭广东 🕐2025-11-21 09:08:11
火星walle: 大把就业培训班可以直接上岗,为什么非要上大学呢 👍🏽1 💭安徽 🕐2025-11-27 07:18:48
小小枫叶: 确实,我参加工作的技能全是自学的 👍🏽1 💭湖南 🕐2025-11-21 11:15:27
liangquan: 大学的其他专业也有这样的情况 👍🏽1 💭辽宁 🕐2025-11-22 07:26:24
友人: 因为老师不会。 👍🏽1 💭山西 🕐2025-11-25 16:07:23
呜呜呜: 教啊,我们老师会教的,makefile 汇编啥的,git 和gdb太稀碎了 开不了一门课 👍🏽1 💭陕西 🕐2025-11-25 10:12:22
唐先森: make && make install 👍🏽1 💭江苏 🕐2025-11-22 11:18:38
安西都护府: 毕业后在大企业里干了两年,发现答主说的全是干货,真真没有一句废话,如果我早点看到这篇文章该多好[小情绪] 👍🏽1 💭山东 🕐2025-11-21 23:24:19
夏知秋: 大学不应该教这个,不过确实需要一些工业届的人告诉大学生,有这些工具。基础不扎实,工具也用不明白。但你要说你工具用不明白,怪学校没教,那就是本末倒置了。 👍🏽1 💭上海 🕐2025-11-22 14:06:55
深星光: 很多学生上大学之前真的没接触过编程,理解循环和指针都有困难需要花时间理解,在3个月的C语言课程里塞入这么多东西,对大部分学生而言是有困难的。 👍🏽1 💭江苏 🕐2025-11-21 23:00:09
毋意毋必毋固毋我: 其实就是理论脱离实践。 👍🏽1 💭北京 🕐2025-11-21 15:27:02
兔八哥: 学校教的原理,原理又不能干活 👍🏽1 💭广东 🕐2025-11-21 12:09:51
移动中联通: 培训班的同学,仔细看看作者发言,搞清楚科研和工程的差别,专心搞工程。。。。[大笑]。。。。科班出来的,你一天内还没能看完一项技术白皮书文档,说明你不适合搞科研,专心转码农去吧[大笑]。。。。 👍🏽2 💭上海 🕐2025-11-21 07:58:20
子矜: 忽悠没工作的学生行,忽悠不了我这种老油条。Vim早就跟不上时代了,真用到的时候了解一下,会i,a,wq就行,真觉得vim天下第一先去吵赢emacs用户再说。shell命令懂几个常用的就行了,别问出问题怎么办,我是开发又不是运维。git会add,commit, pull, push基本没啥问题,剩下的需要用到的时候再学。别问复杂分支怎么办,因为我用p4v。linux环境没什么特别的,除非你是开发操作系统的,否则你就一调别人接口的,能完成任务交差就行。makefile看懂别人写的,会改就行了,复杂需求找领导,自己管好自己那一摊事儿就行。数据结构作业用自己最舒服的方式写就行,没必要搞linux环境+vim+makefile,搞了也理解不了多人协作中会碰到哪些难题,就像调试bug首先需要一个bug一样,先有bug才有解bug的方法,而不是没有bug假装在解bug,除了增加熟练度外没有任何作用。 👍🏽3 💭河南 🕐2025-11-21 11:38:22
│ └── oldSlave: 重要的是,人在不常用的情况下,会大量遗忘。大学学这类东西,知道有就行了,没必要专门去搞它[抱抱]。 👍🏽0 💭广东 🕐2025-11-21 12:19:36
│ └── 蓝色理想: 同意你说的,答主有点危言耸听了。干了10多年,vim基本上只在远程服务器上改一改nginx.conf 时有点用,后来都用vscode了,再后来nginx换成traefik,所有组件都以docker形式运行,vim用的就更少了。像cat、tail、grep这些查看日志的命令,上ELK之后也用的不多了。至于实习生把git搞乱的事,纯粹是管理的锅,master和dev分支都是有保护的,合并前还得审核,一般人想故意搞乱也没权限。makefile花半小时看看基础规则,然后能看懂什么意思就行,高级语言也用不着这玩意,实际上也没见过谁家的业务系统是用 C/C++开发的。 👍🏽1 💭山东 🕐2025-11-21 17:04:35
云万: 大哥,作为这么推崇工具链的人,你是怎么允许新来的人有force push权限的? 👍🏽1 💭北京 🕐2025-11-21 07:39:21
│ └── CodeCrafter: 工具链解决的是效率问题,但权限管理是信任和流程问题。我们给新人这个权限,是因为有代码审查和实时备份兜底,出问题也能秒回滚 👍🏽1 💭河北 🕐2025-11-21 09:01:36
│ └── 云万: 新人都有force push权限了,你的代码审查还有什么意义?按你举的例子来看,涉事代码审查了没有?难道审查的人能直接批准一堆冲突的代码force push?你这种管理模式,说不定还真不如大作业-最终打死不改版。最起码回退到大作业-打死不改版不用解决几百冲突。 👍🏽1 💭北京 🕐2025-11-21 09:19:57
嘟嘟: [赞同][赞同][赞同][赞同][赞同]讲的太好了,把我这几年好多问题,都说过去了我前两年写代码的时候,就是给文件 1.0 2.0 这种命名,每次新建一个文件夹。后面听说 git 好 就开始用 git 管理我那一堆 1.0 2.0 的这种文件夹,提交信息全写 0。现在我自己的项目,也会尽可能写比较清楚的提交信息,对调试修改的作用很大关于调试的问题,我以前也是无脑 print,但自从我首次把程序干到大几百行,还带 gui,我就发现 print 力不从心了,根本调不了。然后我就在 vscode 里面用调试,在感觉可能出错的地方打断点,查看修改变量,这对我的帮助也很大我也是好奇心比较重,很早就玩过 linux,现在用 linux 救起来一个老旧的电脑,玩的挺熟,所以部署服务器的时候,也没遇到什么困难(当然,最重要的还是我的程序够简单) 👍🏽1 💭甘肃 🕐2025-11-22 01:40:47
Vincent Martin: ?原来国内大学不讲这些啊。。。[发呆]我们大二就讲的,而且作业都是用git交,有的章节专门考shell、git、makefile[发呆] 👍🏽13 💭加拿大 🕐2025-11-21 05:39:06
│ └── Sureing: 国内跟国际脱轨的,跟朝鲜一样,没并入国际互联网哪知道外面的世界是怎么样 👍🏽7 💭广东 🕐2025-11-21 08:44:26
│ │ └── wangjianyuan10: 你这个头像很符合你的认知 👍🏽1 💭上海 🕐2025-11-21 10:39:46
│ └── yyy: 国内大学学费一年5000,绝大部分老师没把上课当回事。 👍🏽1 💭江苏 🕐2025-11-21 10:24:19
│ └── 天线宝宝死于谋杀: ip太对了[捂脸][捂脸] 👍🏽0 💭四川 🕐2025-11-21 11:29:56
│ └── 越陌度阡: 我印象中好像也不交,但是大二大三的实验课作业也都是git提交的了 👍🏽0 💭浙江 🕐2025-11-21 12:05:52
│ └── 大橘路上不追兔: git shell 之类在大学学了也没用,都是皮毛.面试也基本不会问.问也只是加分项而不是决定项.真进了公司还是要回炉再造.当然,你要是算法好,基础扎实,公司都会抢着要.哪怕是跨语言,甚至要用的语言你一点都不会,都不会是大问题. 👍🏽0 💭山东 🕐2025-11-21 15:06:34
│ │ └── Vincent Martin: 确实皮毛[酷]工作不知道,做项目的时候反正遇到问题还是总要chatgpt问一下解决方法和具体的command 👍🏽0 💭加拿大 🕐2025-11-23 10:33:53
│ └── sherry: 都是工作中用到了查一查直接用,学校不教这些。 👍🏽0 💭北京 🕐2025-11-21 23:52:05
落灯花: 答主,你说的这些我们老师都教,机房也是Linux,但是我是真学不会,大一新生已经想放弃c++了[大哭] 👍🏽0 💭广东 🕐2025-11-22 09:59:04
│ └── 星空: c是比别的大部分语言复杂难懂一些,但是网上都在说学好c之后再学习其他语言就会稍微简单点,c的作用主要体现在帮助你理解代码的内涵吧应该是,我们现在大二也是c作为主要教学语言,但看招聘软件上好像很多岗位还是要求java,python等语言,c++的岗位是比较少的,但是确是很重要的,加油兄弟[感谢][赞] 👍🏽0 💭北京 🕐2025-11-22 20:59:34
张先生: 科学家和工程师是两个物种,能像钱老那样通吃两边的,极少。大学是培养科学家的,你用工程师标准去衡量,岂不搞笑乎? 👍🏽0 💭河北 🕐2025-11-22 09:45:44
│ └── 星空: 但是大学生毕业后成为科学家的数量远小于成为工程师的数量,大部分大学毕业生也只是想在it行业混口饭吃,真正成为科学家的也只是少部分而已[思考] 👍🏽0 💭北京 🕐2025-11-22 20:54:37