我自学编程的故事

这几天忙着改稿子等一些琐事,一直没有更新专栏文章,今天就回忆一下自己学编程的以往经历,权且充个数。

七八年前的时候我曾经跟 @不是假棋 等小伙伴在计算机软硬件啊路由器刷机方面玩耍过,但在写代码方面,我一直是门外汉,水平止步于本科层次非计算机专业的 C++选修课。真正开始认真对待编程学习,还是从读研以后。


再学代码,穷生上课用电脑;频遭冷眼,同侪纷纷看稀奇

2013 年,我回学校读书了,当时学校要求非计算机专业的研究生从 C++ 和 VB 两门课里面二选一,我当然选了 C++,这里不引战了,就不多说理由了。当时学校的 C++ 课程授课地点是综合楼一层阶梯教室,里面根本没有学生用的电脑,只有老师站在前面讲,学生在底下听。

我这个人死脑筋,选了一门课就想着一定要让自己花的学费值了,要学会才行,所以就伙同好基友一起购买了龙芯 8089d 笔记本电脑,更换成为 Debian 操作系统,安装了 Nano 和 GCC,在课堂上老师一边讲课的同时,我们一边用手上的电脑来运行老师在讲解的代码。

选择龙芯,一个主要原因是因为这机器性能实在拙计很难看视频玩游戏,而且 MIPS 架构下也没有什么太容易分散注意力的应用。当然实际上真实的原因是那时候我们都穷,每个月连现在的 600 元补助都没有,而龙芯笔记本当时团购只要 279元,使我们唯一买得起的设备。

当时我们认识的很多其他同学都视我俩为奇葩,后来基友也就放弃了,只有我一个人带着龙芯笔记本上课了。

虽然我比较笨,但用这种一边听一遍运行测试的方法,居然还也大概都理解了老师讲授的内容。所以在期末的时候,我开始给一些感到吃力的同学就课上讲的内容进行辅导。

我还清晰地记得,当时还是有相当一部分同学依然认为我的这些行为都是很奇葩很脑残的,他们普遍认为计算机相关的课程应付过去就可以,没有任何用处。


身患疾病,庸人从此无用处;机缘巧合,外行沉迷学编程

后来我患上了代谢疾病,并且还诊断出了良性肿瘤,虽然不至于有太大危险,但是行走很不方便,基本告别了野外地质工作。那段时间,整个人非常消沉,不知道活下去还有什么用处。

人总是要找个什么兴趣爱好作为精神寄托或者突破点的,然而我手指关节已经很不灵活,吉他已拿不起来玩耍了。所以就还是玩耍一下计算机。想起来曾经跟人吹牛胡侃说要写一个地质学用途的软件,解决各种日常问题,于是就开始搜索该如何具体去做。

2014 年初,我看了唐大仕老师的 Java 视频公开课,就借机学了几句 Java,一周之后写了个 Android 小应用,但那时也谈不上入门,因为脑袋里面都还是混乱的,都是东一处西一处照着拼凑四处临摹来拼凑起来的,而且可能因为我太懒又太笨,由于语法等原因对 Java 始终没有爱。后来因为交学费缺钱,小应用也都卖掉给合伙的朋友了。

但是对编程的兴趣,倒是一点没减弱,只是觉得自己应该换一个对自己来说学习效率更高的语言。


闲来无事,翻译资料成乐趣;开设专栏,由此结识众英雄

这样到了 2015 年初,我开始学习 Python,才算真正开始算自学编程了,希望能自己写出自己需要的应用软件。

开始时看 codeacademy、http://zetcode.com、 http://fenby.com 的资料教程,当时都让我觉得还挺难的,可能还是由于本身智力导致的。

偶然间听人推荐了 ThinkPython,就买了一个疗程试试看, 抱歉,跑偏了,是就下载了原版试试看,感觉很赞,读起来很顺畅,就顺便翻译了一下,开始的时候就是自己翻译着玩,后来整理成了一个中英双语的,发到了 github 上面:cycleuser/ThinkPython-en-cn 。

然后我想做 GUI 界面的应用,又想跨平台,想起来有朋友给推荐的 Kivy,于是又看 Kivy 的官方文档,也顺路翻译了一个:Kivy-CN/Kivy-CN

对 Kivy 文档的翻译,也是产生这个专栏的最初原因,我当时想着应该放到一个人气多一点的地方,以便聚集更多志同道合有相关爱好的小伙伴。

再接下来就是对机器学习突然有了兴趣,于是开始翻译 Stanford-CS-229-CN 和 Duke-STA-663-CN。这个过程中又结识了很多很有趣的小伙伴,比如 @飞龙、 @路人甲 、 @霍开拓@霍华德 等等。

学了个马虎眼之后,我发现 Kivy 的稳定性其实一般,于是改用了 PyQt,又开始看 http://zetcode.com。偶然地又发现了 @我想飞 的专栏 PyQt5图形界面编程 里面的教程做得很棒很直观,也学习了一下。


初成拙作,劫后整理先前事;前途尚远,余生不计身后名

2016 年末,我做完了第一次手术,躺在床上,想了想也算大概学了点皮毛,于是就开始将早先写的一些脚本汇总整理起来,做成了一个图形界面的简单的小应用:GeoPython

我自学的过程是很散漫的,随着兴趣和需求随时变换选用的工具。

如果是科班出身的人来做同样的事情,恐怕用不来一两天甚至几个小时就能做出来,而且还会做得更高效更美观更完善,因为他们往往很清楚各个部分需要用什么模块来实现,用哪些方法来实现最优。

不过我还会继续做这些,因为这已经从最开始的吹牛,到后来的兴趣爱好,变成了现在的一种寄托。我发现在做这些事情的时候,我还是有点用的,还能为一些人提供一点点帮助,起码也算不枉此生。

回想起来,当年那些一起上课的同学,已经各自前途远大,都成了专业领域的精英人物。我资质愚钝又性格乖僻,肯定不足与他们相提并论,就只是做一些自己想做的事情,开心一下了。

Category
Tagcloud
Photo Lesson IDE Xcode DIY Moon Lens Communicate Data Raspbian Linux CUDA Translation Hate Python Radio Mac Telescope Game Memory Programming Book University NAS Junck Science Video Visualization Mount&Blade MayaVi QT Hackintosh VTK VirtualBox RTL-SDR Conda Scholar Hardware Disease Camera GeoPython Story Server Kivy Pyenv Geology Library Discuss GlumPy Poem Hack Chat VisPy ChromeBook RaspberryPi Microscope Software Download