[Education] The Missing Semester of My CS Education

less than 1 minute read

Published:


从学校到公司,那些我缺失的知识

我其实在发现The Missing Semester of Your CS Education这门课之前,就感受到了一些学校(研究院)和公司在这些技术知识上的利用程度差异。虽然这些知识在CS的大类课程中都或多或少的有所提及,但是绝大多数人对于这些工具或者技能的掌握都是通过长年的有意识的经验积累下来的。对于交叉学科出身的同学,多数是薄弱甚至缺乏的。如果没有课程中的一些指引和启蒙,基本上只能“现搜现用”,成为一个不那么专业的“程序员”。以下是我结合这两个月在公司所见所做,和对比之前在学校/研究院时的情况,进行一些思考和建议。

Git版本控制

公司的源代码托管在Git仓库,如果参与项目版本的迭代,就需要灵活使用Git进行代码的拉取,提交和推送(无论是命令行还是IDE),多方进行协作完成项目的合并更新。而在之前学习和研究的经历里,只知道从Github利用git clone进行代码拉取,也从无代码协作和版本控制的概念,这也就导致了项目的协作冲突和不可回溯。(小组leader轻声问我『你之前没在公司待过是吧?』)。所以,建议要提及Git版本控制的概念和基本逻辑,具体实践还是得在实际的项目开发中(可以在小组的team project中进行实践)。

Demo集成

关于Demo的集成,在公司里与非技术部门进行算法效果沟通的时候,往往需要提供一些直观的可视化或交互界面(因为对于非技术人员或用户来说只能理解或者倾向看到直观的结果)。但是,我们不希望把大量的时间花在项目的UI设计和开发上面,所以需要利用一些Demo集成的工具库快速完成Demo的开发,进行用例测试。目前多数主流的AI/ML交互的Demo工具是Gradio Demo,轻量级代码和直观的UI(Coursera的AI课程中也推出了Gradio的课程)。还有之前在Open Source Tools的课程中推荐过的可视化工具(Far more than Visualization)——Plotly,可以很好的进行可视化呈现和交互响应,并且提供了很多优质的模版。在一些有实践项目要求的课程中,有的项目做得很出彩,但是往往以传统的图表和文字呈现,难以展现和传播。所以,建议可以提供这类的工具库,让大家把自己的项目都集成起来,有一个更加直观和优质的呈现(我认为这样一是可以让同学们更有成就感,二是可以把项目Demo供别人体验,促进项目更好的传播和落地)。

SSH/Linux env/Docker

时至今日,利用「连接远程服务器-配置Linux环境-Sftp进行文件传输」这一套流程进行项目开发已经两年多,但实际操作全靠经验累积。而对于没有使用过这套流程,只在PC上进行项目开发的同学,要搞懂这一套就很难(无论是用JupyerNoteBook/VSCode/Pycharm/Command中的任意方式),而随着深度学习的数据需求/算力需求越来越大,绝大多数情况需要利用服务器进行项目开发和模型训练。所以,建议在第一课教学python环境配置的时候,加入一些这些流程的指引。另外,对于Docker的使用,学校DGX新服务器会采用个人Docker的模式,公司在涉及算法与后端对接的时候有时也会采用Docker,所以,学习一些基本的概念和操作还是有必要的。

AI部署

随着越来越多的AI应用落地,AI模型部署岗位的需求也越来越多。虽然这类工作更偏工程方向,但算法工程师也有必要学习这一块的知识(除非是纯算法研究)。现在我正在学习的一些知识包括TensorRT部署框架,onnx2trt模型转化等(这块知识非常薄,还在从零开始学)。需要专门做AI部署的另一个原因是想使模型在线上(GPU)服务器的效率更高,而我们平常对于性能这一块的关注和了解都太少(这也导致了一部分的工程思维的欠缺)。所以,建议给大家开一个这方面的口子,提供一些引导,让致力于工业界AI应用的同学可以意识到这一部分的存在,有意识的去关注到AI领域除了算法以外的东西。