最近看到知乎一个热门话题
在传统的计算机科学课程中,从操作系统、编程语言到机器学习,这些高大上课程和主题已经非常多了。然而有一个至关重要的主题却很少被专门讲授,而是留给学生们自己去探索。这部分内容就是:精通工具。
这些年,我们在麻省理工学院参与了许多课程的助教活动,过程当中愈发意识到很多学生对于工具的了解知之甚少。计算机设计的初衷就是任务自动化,然而学生们却常常陷在大量的重复任务中,或者无法完全发挥出诸如 版本控制、文本编辑器等工具的强大作用。效率低下和浪费时间还是其次,更糟糕的是,这还可能导致数据丢失或 无法完成某些特定任务。
这些主题不是大学课程的一部分:学生一直都不知道如何使用这些工具,或者说,至少是不知道如何高效 地使用,因此浪费了时间和精力在本来可以更简单的任务上。标准的计算机科学课程缺少了这门能让计算 变得更简捷的关键课程,工欲善其事,必先利其器,要做好一件事,工具也是非常重要。
大家不要小看这些东西(工具),可能你的工作时间大部分都是这些工具不熟练导致的,一个编译问题可能要花费你几天的时间,数周的挫折感甚至会打击大部分新人信心。
命令行与 shell 工具
如何使用别名、脚本和构建系统来自动化执行通用重复的任务。不再总是从文档中拷贝粘贴命令,不要再“你忘了执行这个命令”、“你忘了传那个参数”,学习makefile的语法,熟悉gcc常见命令,学习常见的shell命令和编程,可以帮助自己提高工作效率。
版本控制
如何正确地使用版本控制git或者svn,利用它避免尴尬的情况发生,记录自己每一次修改,防止丢失劳动成果,与他人协作,并且能够快速定位有问题的提交不再大量注释代码。不再为解决 bug而找遍所有代码。不再“我去,刚才是删了有用的代码?!”。
文本编辑
不论是本地还是远程,如何通过命令行高效地编辑文件,并且充分利用编辑器特性。不再来回复制 文件。不再重复编辑文件。我们可以用vim/Emacs这种经典专业文本编辑工具,也可以用有名集成开发环境:vscode ,Eclipse, IntelliJ IDEA等。初学者可以用集成开发环境,如果是Linux后台开发,我建议还是用Linux上开发工具比较好。
远程服务器
使用 SSH 密钥连接远程机器进行工作时如何保持连接,并且让终端能够复用。不再为了仅执行个别命令总是打开许多命令行终端。不再每次连接都总输入密码。不再因为网络断开或必须重启笔记本时就丢失全部上下文。我们可以tmux
来保持远程服务器的会话存在,并使用mosh
来支持网络漫游和断开连接。
查找文件
如何快速查找你需要的文件。不再挨个点击项目中的文件,直到找到你所需的代码。我们可以通过find快速查找文件,通过rg
找代码片段。我们也用到了fasd
快速cd
并vim
最近/常用的文件/文件夹。
数据处理
如何通过命令行直接轻松快速地修改、查看、解析、绘制和计算数据和文件。不再从日志文件拷贝粘贴。不再手动统计数据。不再用电子表格画图。学会grep,awk,sed,tr等常见文本处理命令的常见用法。
虚拟机
如何使用虚拟机尝试新操作系统,隔离无关的项目,并且保持宿主机整洁。不再因为做安全实验而意外损坏你的计算机,保证环境干净独立,不再有大量随机安装的不同版本软件包。
安全
如何在不泄露隐私的情况下畅游互联网。不再抓破脑袋想符合自己疯狂规则的密码。不再连接不安全的开放 WiFi 网络。不再传输未加密的信息。
结论
如果学校没有专门课程,或者已经工作了, 我建议大家多实践,在做demo,实验,工作时候,遇到了就多花时间学习一下,多尝试用工具进行自动化,优化自己开发效率。
这里我推荐麻省理工学院的一个免费课程,涵盖各项对成为高效率程序员至关重要的主题。这个课程实用且具有很强的实践性,提供了各种能够立即广泛应用解决问题的趁手工具指导,提供了全部课程的录制视频与相关资料。
https://missing.csail.mit.edu/2019/
中文版本:
https://missing-semester-cn.github.io/
精通这些工具不仅可以帮助您更快的使用工具完成任务,并且可以帮助您解决在之前看来似乎无比复杂的问题。
欢迎加入极客星球圈子,分享多年工作经验和基础技术深度理解,内核,软硬结合,高性能编程,性能优化,后台开发核心技术,扩展视野,直播分享,面试问题,项目训练和指导,问题答疑,可以帮助想进各类大厂(芯片,自动驾驶,嵌入式,互联网等)制定学习路线和学习帮助, 可以分享各种不同公司宝贵的职场工作经验, 项目经验,普升经验,希望少走弯路,做得更好。
详细点击查看-> 极客星球。
看完一键三连在看,转发,点赞
是对文章最大的赞赏,极客重生感谢你
推荐阅读
感谢一键三连在看,转发,点赞
点个 在看展示你的技术态度