前言
起因是想清理一下github的仓库,没错是清理,之前fork了很多仓库学习代码,还有自己随便上传的一些代码,因为感觉没有留着的必要,博客多少可以review,这些早期写的代码,如洪水猛兽,估计也不会有人看了(包括自己)。但是看自己的仓库,发现了很多陌生而熟悉的东西,一个个仓库实际也印记这自己专业学习的过程,特此回顾两年半的专业学习经历。
正文
github用的最多的时间应该是大二寒假到大二下学期结束的一段时间。寒假的时候,导师让我做一个嵌入式的小项目,这个项目我命名为SCloud,意为稳定的云台(steady cloud),放在github上,以此锻炼我,当时是用arduino的板子配合舵机(大约30r一个)做了一个手机云台,一开始我以为是做自稳云台,后来导师说做一个有两个自由度,通过手机控制的就行。做自稳必须要闭环,相比开环难度还是增加了很多。
即使如此, 我还是做的很煎熬因为什么都不会。首先是结构设计,学了creo, 看b站视频,工业设计软件还是相当复杂的,设计上也有比较复杂的逻辑,而且我看3D的东西会目眩头晕,难受的是自己又想设计一些带曲面比较带有美感的结构,最后只搞了一个华而不实的底座,云台的舵机相关的结构件在淘宝上买了。单片机部分主要是蓝牙通信和控制舵机,前者直接使用一块蓝牙芯片HC-05,不需要代码开发,后者看舵机的使用文档,通信其实还有命令解析,就是发送过来一个string,如何解析它,这个我参考了天才少年稚晖君10年前的一个项目。
这段时间我看了很多稚晖君的作品,他是一个十分才华横溢且乐于分享的人,是非常可怕的“全栈”工程师,野生钢铁侠。后来Android部分的蓝牙app也是fork了他的作品,这个项目我年前回顾了一下写成博客。
蓝牙开发其实Android的官方文档写得非常清楚,从这个时间点我意识到了,博客很多时候只是经验的分享,开发基本上是看official document,你可以通过博客、文章去猎奇,去学习经验,但是在开发上要做事,基本上是看文档,调用api的过程,这个东西的作者肯定比其他人了解他的东西。很多error除了报错,也会给出一个官方的error shortcuts,或者formus,资深程序员们肯定选择在作者最有可能看见的地方提出问题。Stack Overflow这种网站一般是比较常见的问题,问题范围更加广泛,有时反而不易于对症下药。这个体会在寒假我用树莓派做一些项目时又进一步加深了,比如安装homeassitant我是直接看的官方的guideline,解决问题也是上官方的渠道去搜索。如果项目在github上的话去看issue,提issue,就是这个道理。
后来大二下学期,和同学组队搞oppo杯,Android开发也用到了这个项目。当时我们想的是做一款音乐软件,最核心的功能是捕捉肢体动作转化为音乐,4个人,我负责Android端,一个后端,一个算法,还有一个始终没有参与进来。
这里插一个关于团队的疑惑,感觉在网络上有很多志同道合的社群,比如几个人拉起袖子一年搞一个作品,看到知乎一个大佬分享,他和几个同学一起搞了一个异形机器人,他本身也是CS专业的,机电的知识也是要自学,后来他去CMU了,%%%
我也是CS做机器人,但是没有什么一起奋斗的伙伴,是性格原因,有时候不太想和人讲话,还是所处的环境不好。感觉很多时候和同学讲一些想法,只是饭后茶谈,并没有契机让我们为相同的一件事情而肝到始终,大家都觉得自己的想法才是最好的。还搞过数学建模和acm,组队,只是竞赛模式的需要,和理想的团队模式相差甚远。
这里再递归讲一下对学校课程安排的看法,过于繁重且冗余的学业,也是我们无法将oppo杯项目完成的原因(或者其他被扼杀在摇篮里的事物)。搞oppo杯的是在大二下学期,当时有一个程序设计,计网,计算机组成原理,数据结构课程课设还有英语课还有不记得名字的一些课。数据结构课,我个人感觉不如直接学STL源码,主要是很多时候自己写了一堆乐色,也不过是提高了造乐色的能力,助教问个问题走走形式,大家相互打听助教问什么问题,答不对就扣分,很没意思。大二上学期的专业课还有数据库,数据库,计网,计组这些专业课基本是蜻蜓点水,还不如把学分设在实习,竞赛上。数据库课设最后做了个web应用就离谱,学了django,数据库相关的安装了mysql,调用api连sql都不用写。