Talk is cheap

Show me the code

悼念 2016

上一次写总结文,貌似还是大一上学期高数老师要求我们写学习总结的时候,可以抵一些平时分。不学无术的我当然不能放过这次机会,于是把自己如何被艺术团和学生会压榨统统抱怨了一番,还写了后来又是如何决定在实验室安家,反正无关痛痒的东西写了一千多字,最后学习总结和给老师的建议不到上面的一半,而且还是在 deadline 那天晚上熬夜写完的。不过老师还是认真看了下来,并邮件回复说“年轻不怕失败”。嗯,最重要的是期末考试还能低分飘过,想想也是够惊险了。下学期为了转专业也没有再选老师的课,并在大二开始时成功叛逃到了软工。不过现在想来,软工还真是辣鸡。这个后面再讲吧。

进入开源世界

16 年初,实验室掀起了一股安装 Ubuntu 的热潮,我当然要跟风了。于是在寨版上装了,无奈 WiFi 蓝牙驱动都没有。然后就拿着网卡型号在 Bing 上到处搜,硬着头皮看英文 README 跟着编译驱动,这或许是我第一次看英文文档吧。 WiFi 好了以后就勉强可以用了,说实话 UnityDE 的用户体验还真不错,从 Win 转过来也没有什么不适应,并觉得它的 Global Menu 挺实用的。然后就是各种 VSCode , JetBrains 全家桶,用着也挺舒服。后来又偶然在 WiFi 驱动的 Issue 区发现了对应的蓝牙驱动,并自我感觉“拥有了近乎完美的 Ubuntu 体验”。然而当时除了配置系统,几乎不会怎么进去,命令行操作也仅仅是一些 apt-getmvcprm 之类的东西。系统配置好以后就没有热情去使用它了,还是整天沉浸在 Win 的城墙里面。寒假期间重装了一次系统,只给 Ubuntu 划了 20GiB+ 的空间,但也是够用了。

据说刚刚使用 Linux 的人都会留念 QQ ,我也不例外。先是各种搜 Linux 中使用 QQ 的各种姿势,但大都是一些几年前的老文,大部分东西都被腾讯干掉了。后来自然少不了 wine 。当时的我觉得这个东西各种流弊啊,然后用上了 longone 团队的 wineQQ ,无奈不是版本太低,就是缺字体,不适配高分屏。之后又发现了 CrossOver ,用它的试用版居然可以无痛上 QQ ,又觉得这个 co 真是厉害,甚至起了买下授权的念头。之后,自然是回到 Win 下面,老老实实的用轻聊版去了。最后又发现了 Deepin 团队的定制版 CrossOver ,当然,这是后话了。这个阶段的我,仅仅是把 Ubuntu 当作一个可以用来折腾的玩具。

入坑前端

在实验室全干工程师大佬的忽悠下,我主动去学习了前端相关的东西,其实就是一些基础的 HTML , CSS 以及 JS 。寒假里趴在床上看网易云课堂的视频,也算是有一些收获了,至少学习了基本语法么。寒假结束后,大佬给我一个东西练手,给某高清大学的教务系统后台写样式,还正儿八经地开了 GitHub 项目,让我去 fork 他,而且还画了效果图。当然,图是我画的。当时用的用 Firefox 里面的 Stylish 自带的编辑器,暗色模式下语法高亮还挺漂亮的。大概是开学后的第三周左右吧,我在实验室里连着两个屏幕写样式,踩到了各种前端常见的坑,譬如 margin / padding 傻傻分不清,垂直/水平居中,相对于父元素的绝对布局之类的。后来为了解决反人类教务系统文字变成点号的问题,学习了伪元素的用法。这可以算作第一个拿得出手的项目了吧,之后还发布到了 userstyles.org 上面。从此我便掉在前端的坑中一去不复返了。

在那之后,我跟大佬合作了一个小项目,是关于学校里班级预定教材的,就叫它“书单”吧。大佬设计数据库,后台 API ,我就只画画设计图,写点样式,调个 API 什么的。当然第一版做得很粗糙,那时我们几乎整天泡在实验室里,写代码,修 bug ,再修修完 bug 后出现的新 bug ,写代码...上线内测之前的那一天,从中午一直肝到晚上 8 点,写完之后跑去吃饭,如释重负的感觉。第一版的系统很简易,前端的工作不多,路由什么的都是后台来搞,我就只管写个静态页面,甚至连响应式都没有。不过这也总能算是我做过的第一个项目吧,从需求分析,设计数据库,原型图,效果图,到最后部署上线。虽然自己真正参与的步骤并不多,但也是感受到了这个东西的复杂性。后面重构的时候,看那耦合严重的 jQ 代码,还是不忍直视...

后来,实验室迎来了一个小型的 “可膨胀” 外包项目,代号 “DC”。起初只是说,写几个手机端静态页面就好,就由着我随便写了一下。然后说是要做成可以上线的网站,后台也要一起包了,还有短信验证之类乱七八遭的东西。最后居然说要做成 APP ,还要跨 Android 和 iOS 双平台。???黑人问号.jpg。最后当然是要用 Web 打包了,要不然这种东西我们怎么能写的出来...最坑的不过于需求变来变去了,而且他自己的设计图还特别屎。有次说编辑界面上的东西要根支付宝一样,如何如何,人家交互多好之类的。那就改吧,也没什么办法。

支付宝————引领跨平台交互设计一百年

结果最气的事情出现了。第二天支付鸨升级了!我们的交互又跟它不一样了。于是客户:

昨天不是说要根支付宝一样吗?怎么现在又不一样了?

我们只能在心里默默骂他,然而又干不掉他。这学期之后的暑假的大部分时间就都耗在这上面了。虽然这个项目之后,我拿到了人生的“第一桶金”,但不管怎么说,这个项目,就是个大坑。哦不,至少让我们了解了,在实际开始写代码之前,要让客户在需求确认书上签字画押。

初识 Node.js

暑假里面,其实是要重构之前的“书单”项目的。这一时间段看了廖雪峰老师的 JS 教程,尤其是高阶函数那一段,感觉自己白写一学期 JS ,原来什么都不会啊。然后开始慢慢学习 ES6,知道了函数式编程这个东西。在那个坑爹项目做完之后,一边划水,一边学习,然后想办法重构,也没有做成单页应用,只是加一些响应式,模态框之类的东西,去掉后端路由,完全前后端分离。

在这期间,我试着了解了 Node.js,发现这东西真不错,加上 Electron ,简直前端拯救世界啊对不对。除了体积大点,启动慢点,完全跨平台,开发还这么简单,简直神器。于是开始自学Node.js,然后有了现在这个博客。有一些写代码以及处理问题的心得写在了博客园上,不过写博客这个东西可真的是挺累的,基本上花一上午写代码,就要用几乎一天的时间来把自己的思路整理成文。但这时候也邻近暑假尾声了,我才只写了4篇,感觉这个坑差不多要弃掉了(才不)。开学后我想的是,先写代码,等“闲下来”再写博客。不过自然,没有什么“闲”的时间。功能完善了一些,但代码质量越来越差,因为老是想着自己造轮子。这毛病可真要改了,重复造轮害死人。再加上设计模式糟糕,恐怕要彻底重构才能解决了。

投身开源世界

暑假学习 Node.js 的时候,要用命令行跑程序,当时我用的是 GitBash , Win 下的 cmd 大家都知道有多难用。因为寨板在 Win 下会在充电的时候锁频 0.8GHz,在 VSCode 里面打字都会卡顿,而且用了一段时间 GitBash 觉得还不错,就又起了转向 Ubuntu 的念头。这时驱动已经齐全,而且偶然找到了 Deepin 提取的 QQ 安装包,于是无痛迁移到了 Ubuntu 。虽然现在实验室里团队协作主要用 BearyChat ,但本着“我可以不用,但你不能没有”的原则,还是装上了 QQ 。但后来的事实证明我一个星期并不会打开几次。

这次我是完全投入了开源世界,把 Win 上的 D 盘都分给了 Ubuntu ,重装了一个干干净净的 16.04.1 LTS。果然,锁频现象没有了,软件运行都很流畅,系统对高 DPI 的适配也比较完善,就算是两个屏幕 DPI 不同也不会出现窗口变糊的情况。完全呆在开源世界不想出来了。

之前看过一张黑各种 Linux 发行版的图(据说是 SUSE 社区做的),红帽有一句话是“我为社区作贡献,社区让我赚大钱”。虽然没有“赚大钱”这么高远的志向,但我也为 GitHub 上的一些开源项目贡献过一些代码。第一个就是 Electronic-Wechat。第一次给别人提 PR ,然后 Review 过之后被 Merge ,成就感还是挺高的。

另外一个,我们实验室想要做一个可以检测实验室门是否已经开了的“物联网”设备,然后搞个 QQ 机器人跟他通信,大家只要在群里 @ 一下机器人,就可以知道们是不是开了。我自告奋勇揽下了这个大锅,当然,只有软件部分...子所以那么有底气,是因为之前在 GitHub 上看见过一个 Node 写的 QQ 机器人,感觉调用起来不会很麻烦。于是把代码克隆下来重构一番,(似乎)修掉了一些 bug ,而且原作者也接受了我的 PR 。后来硬件(一块加了超声波测距的 STM32 核心板)准备就绪之后,开始着手解决通信问题,然后就开始打树梅派的主意。在上面装了 Arch Linux,离开源更近了。折腾这个东西的同时,提高了关于 Linux 方面的姿势水平,但不妙的是好像快要期末考试了。

神坑软工大作业

软工的课程虽然比较多,但(在我看来)好像还是比较水的,不像高数那种。但最折腾人的是各种大作业,又是文档,还要答辩那种。多半是做一个 XX 管理系统了事,但偏偏这学期 Web 老师是副院长,各种创新教学,又是翻转课堂又是项目驱动式学习之流,搞得我们很疲惫。然而她自己又不讲什么,仗着自己不用参加教师评价就敢胡来,神之上课不去,还找大三学长来给我们答疑。不过也没什么大不了的,她教的东西我们也不会去用就是了。我们实验室非常熟悉的还是 MVC 和前后端分离的那一套理论,不知道比什么 WebForms 高到哪里去了。还有那个 Vue,终于可以摆脱 DOM 操作了。虽然我们最后的项目没有完成,但班里也没有完成了的,好歹我们算是完成度比较高的一组了。然后就是期待老师能给多少分了吧。

要说这学期最坑的一门课,可以说是数据结构了。之前有同学传言,他让我们的作业里面每句加注释,是因为自己看不懂 cpp 代码...虽然我后来不太信,但他在最后大作业验收的时候确实是问了一些让人大跌眼镜的问题,比如:

“这个 vetcor 是什么?这个 push_back 是什么?你自己写的还是自带的?”

嗯,我就不作评价了。反正这一个学期下来,是没学到什么东西,还不如实验室大一的时候四五个人一起看慕课来得实在一些。哦,还要吐槽一句,我们用的数据结构课本还是 20 年前的款式,课本的编者貌似是谭浩强老婆,代码风格如出一辙。诡异的换行,不加声明直接引用的变量,谜一样的 swap 运算符(a <--> b),还有那放荡不羁,别具一格,印刷代码的时候英文等宽字体和中文全角字符混用的编辑。此书的前言还自夸说:

本书使用了与 C 语言类似的 “类 C” 风格代码,忽律语法细节,让读者可以专心研习算法。

这种话也能说的出来...伪代码就伪代码吧,还把自己说得这么飘逸,简直了。

待续

弃坑(((