跳转至

在macOS上用VSCode写C++代码 9 其他

课程制作目标和个人概述

课程制作目标(old version, written on 201010)

〇 补充清华电子系大一程序设计课程没有讲到但是对编程来说很重要的东西

电子系大一的程设课共有32个学时,其中前两个学时讲了程序设计的绪论。这个章节很重要,让同学们对机器语言,低级语言和高级语言有了认识,让同学们对编写程序的流程和数据的类型有了简单的认识。同时老师还推荐了课程需要用到的编辑器Visual Studio 2008。第二章则进入了C/C++语言的具体语法。

尽管存在2学时的绪论,但是笔者仍然认为这样的课程设计不能满足电子系学生的需求。在没经过仔细数据调查的情况下,我可以说,电子系新生能够灵活使用电脑的人数占比不会高于50%,即便老师告诉大家用编辑器可以运行代码得到可执行文件,编译存在releasedebug两种模式,但是我想即使32学时的课程结束,甚至到了第二个学期还有很大一部分通许并不知道这其中的本质。

有位学长给我推荐过一门MIT的课程,计算机教育中缺失的一课 The Missing Semester of Your CS Education 中文版,这门课程的绪论说的很好

大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,而对于如何精通工具这一主题则往往会留给学生自行探索。 学生在他们受教育阶段会和这些工具朝夕相处(在他们的职业生涯中更是这样)……因此,花时间打磨使用这些工具的能力并能够最终熟练地、流畅地使用它们是非常有必要的。

我想,确实应该在程设课之前添加一些课程设置,对刚刚结束高考对电脑还不是很了解的同学、对上了程设课但是还不知道代码究竟在编辑器里面怎么变成了可执行文件的同学进行一个小的讲座。

〇 推广跨平台的轻量编辑器VS Code,让同学们的编程更加顺手

全平台意味着即使同学以后更换了系统,只要继续使用VS Code,也可以很快入手开发,而不需要做很多的环境适配。另外,如果之后同学们要学习更多种语言,那么只使用一款全能的编辑器VS Code,降低了同学以后还要学习和适应新语言新编辑器的时间。另外,VS Code也有很多很有意思插件,可以让同学们把注意力更多的放在敲代码和思考这两件事情上,提高同学们的编程效率,同时有趣的插件也让编程变得有意思而并不死板。

〇 让使用Mac的同学可以愉快的在Mac上进行开发

使用苹果电脑的同学在清华园只是很小的一个群体。由于苹果系统可能并不是很好的兼容性,在Mac上写C/C++代码是挺困难的一件事情,往往同学们会通过装虚拟机/做双系统或者用Xcode(苹果的官方编辑器)来编程。用VS Code配置环境是一个大问题。

但是这份教程可以让使用Mac的同学很舒服的在Mac上进行编程的学习,学习效果与Windows上无差。让本来就很好的苹果系统体验更好一些。

我的情况(written on 201010)

我在2019年秋学习了电子系大一的程设课程,当时老师在课堂上只花了十多分钟提了Visual Studio 2008怎么用,同时还推荐同学们用这款编辑器进行编辑。

由于笔者对编程的兴趣浓厚,便很喜欢研究与编程相关的东西。不过,我的个人电脑是Mac,搭载着苹果的电脑系统macOS,很多事情老师都是在Windows上演示然而我则一脸懵逼完全不知道发生了什么。甚至,我在进入大学之前就没有怎么用过电脑,配置环境、命令行、文件目录、编译,这些名词在上完了一学期的程设课后也是一知半解。

为了克服这样的问题,我在Mac上装了双系统,由于双系统要重启才能切换很麻烦我又安装了虚拟机,但是我的电脑磁盘空间并不是很大虚拟机包放不下我又买了外置SSD。一番折腾,我终于可以在虚拟机里进行“程序设计”了。

可是,直到程设第二学期结束,我还是感觉心里很不踏实。我在VS Code里面点F5到底发生了什么?我在VS Code里面如何release?那些配置文件都是什么啊?

大一暑假,很幸运,我加入了电子系科协软件部网站组,网站组负责维护电子系网站(比如清华大学电子工程系学生科协官网),举办/组织一些赛事,可以说一个比较硬核但是又不少社工的组织。因为硬核所以软件部在暑假有培训,经过这次培训,我才逐渐对计算机的软件层有了更深的一些认识。在这其中,一位学长推荐的课程计算机教育中缺失的一课 The Missing Semester of Your CS Education 中文版让我受益匪浅。

是啊,在开始编程之前,有很多事情要做。

到了9月份,在大二学期已经开始之后,我有一门还需要用C/C++进行编程的课程——数据与算法。某一天,我突然觉得拖着个SSD开着WindowsMac上写代码真的不是一件很优雅的事情,尽管SSD真的很轻,但是开虚拟机电脑就很耗电,很烫,而且我想,我们网站组的开发都可以在WindowsmacOS上同步开发,为什么C/C++编程都不能跨平台呢?前面说到我对编程和编程相关的事情很感兴趣,这时我开始了探索。

Mac自带的Xcode开始,到VS Code,到配置文件,到命令行……突然一个下午,我搞懂了g++,我知道了这是个什么东西。突然,所有之前的困惑都烟消云散。啊,原来是这样。

上面的过程大概花了我一周时间,用课余时间去探索。

之后我就想,为什么不出一期教程呢?话说真的,在电子系写程设的一年里面,没有哪位老师哪个助教哪个同学告诉我怎么用VS Code配置环境,没有人告诉我g++是什么,甚至头文件怎么包含自己写的函数怎么在其他文件里面调用都没有人告诉我细节。我原来一直在用结论。这样做的弊端就是,你在写代码的时候很不踏实,你根本不知道在编辑器中、在系统中发生了什么。

当我做出这个决定之后,我在pyq发了一条消息(posted on 200930):

抑制不住心中的欣喜。搞明白了我本该一年前搞清楚的C/C++编译的知识,知道了VS Code里面Code Runnertasks.json里面写的代码到底是什么意思。这些东西真的不难,但是它们的联系很难搞清;而这又是开始写代码之前非常重要的一步,不懂这一步去写代码真的很不踏实。一年前,因为不知道如何写tasks.json launch.json文件我放弃了VS Code on macOS,现在又可以重新拾起来了。大概从上个周末开始捣鼓XcodeVS Code,查了很多资料,踩了很多坑,很多资料都是有问题的,not work for me;但我想现在我可以把这些这些资料中有用的部分融合起来,出一份很好的教程--至少我会让一年前的我看到这份教程可以少走很多弯路。虽然因为搞清楚这件事儿花了很多时间(还会花不少时间),但是我相信这是值得的。

我希望我能抽空在这学期完成这一份教程,让它带给更多同学对于程序清晰的认识。如果有时间,我想我也会在Windows系统上重新录制这份教程,让这份教程能让更多的同学看到。

至于我能否很好的完成这份教程,我只能说,我觉得这件事情很有意义,因此我想认真去做。但是个人能力毕竟有限,我会在出这份教程的过程中仔细考量,遇到可能会讲错的地方多和老师、助教、身边的牛人进行交流,让这份教程的质量达到最好。如果在教程发布后,有些东西需要得到修订,那我也会进行修改,或修改讲稿,或重新录制视频。

希望大家能支持我!

发现学期内无法做出教程后发的朋友圈(posted on 201029)

之前说我要出一个VS Codecpp的教程,如果朋友圈有同学还记得这件事情并且很希望在这学期内看到的话,那么实在抱歉!很想回应这份期待,但我打算把这件事儿放到寒假。

我是非常想把这个教程做好的,因为在受学长推荐看了MIT的公开课missing courses in CS之后,我觉得工具使用是很重要的一件事情;但是身边不少老师,同学对工具是并不重视的。最开始只是想介绍清楚用来设置的settings.json和用来调试的tasks.jsonlaunch.json,结果发现如果只讲这些根本理解不了里面每行是在干什么,那达不到看完教程“能踏踏实实”编程的地步。那就得讲g++了,我相信很多同学是不很清楚命令行的,那又要加上讲终端,shell,命令,程序;而这些要讲清大概还得扯一点文件系统和环境变量。这样差不多就可以了。

不过还有不少细枝末节的东西,VS Code的插件介绍,快捷键设置,更改设置等使用技巧;VS Code优缺点介绍等等。这些可以单独出来讲但是我又会想这些加在教程里面直接说会不会更好。(其实还有很多坑我已经踩过去了,这些经历需要需要出现在教程中也是需要考虑的。)

于是最后就变成了,很多东西想讲,你要不断调顺序(简而言之,备课好困难)。有的时候有空我就会去想想什么逻辑讲下来最顺;很多想法我都记在to-dos里面,然后发现那个to-dos越来越长(笑)。在这个过程中,我也在不断学习,发现很多东西我了解的也不是很深入,很多文档我还没看过,还没看懂。之前也试录过一个快速版,但是过了两周到现在发现可以修改的地方太多了。

虽然这学期选的学分不多,自己空闲时间也有一些,但是还是觉得不太可能在学期内做出来一个完整,逻辑自洽,问题不太多的教程,因此还是打算寒假继续做这件事情,出一份能让自己满意的教程。