2008年,《钢铁侠》在内地上映,那时的我即将升入高三,整个电影给了我极大的震撼,我觉得这就是科技应该有的样子。Tony Stark在一个破山洞里,打造出了一套钢铁战衣,让我一直不停回想:要是以后我也能这么厉害就好了。
后来我结束了高考,大学选专业的时候,一心只想学机械,以后要做机器人。其实我也不知道,机械工程到底学的是啥,于是高等数学、线性代数、概率论来了,然后数电模电来了,机械设计、装备工艺、热加工与材料来了。学了两三年,多数时候除了一些基础的课程,打交道的都是些运动机构、公差配合、加工工艺。读完了整个大学,我也不知道到底要怎么搞出来一套钢铁战衣。
好在,读大学的时候也不算太堕落,虽然也和舍友们打dota,不过始终没有脱离AI水准。倒是参与了两个创新基金,一个是做双足步行机器人的,不过只是参与了结构装配和步态之类的零星工作,还有一个是我自己申请的灵巧指,但是这个结构最后做出来只是个摆设,没能动起来,基本上都是结构设计,才开始迷迷糊糊知道机器人是个啥,顺带看着身边有些个同学研究一个叫ARM的东西(PS:我们那个时候大学里教的89C51单片机还是用汇编的,学的C++也完全没有入门)。稀里糊涂混到了保研,最后毅然决然的选了个我们学院最弱的专业之一————机械电子工程。没办法,人家搞机械制造的根本不研究机器人啊~
进了专业我才发现,机器人简直是鬼一样,知道的人多,见过的人少。但凡能替代人类劳动的,都叫机器人,真的能做到“人”的,貌似还没生出来。我逐渐产生了一种认识,机器人的思想还是要取决于代码啊,然后转而开始学习程序开发。一个人闭门造车是痛苦的,刚进教研室的时候,有一套师兄留下的S3C2440开发板,或许做过嵌入式linux开发的同学会有了解。师兄留下了一张开发板光盘,我看着里面讲linux,完全没有概念,混了大半个月,才开始明白有个bootloader,然后还要用两根线才能烧录一个程序。然后研究生正式开学了,我也开始上课,这个开发板又进入了角落开始积灰。
我开始混迹一些论坛,学了一手三脚猫的C语言,到了研一结束,老板说,有一合作公司找人一起做一个东西,有一个画硬件的,缺一写代码的。我觉得是个机会,便主动要求去了。其实这个事情倒是不难,拿了一些参考程序,进行了一堆小修小补,把几个传感器和设备的驱动给调通了,然后做硬件的做完,我们把驱动放上去调试,又是一通研究,俩研究生都是新手,驱动倒是还能在别的开发板上验证,硬件问题还颇多,好在公司招聘了一个熟悉硬件的工程师。我们一通研究拼凑,期间还把一段解方程的代码,翻了一本参考书,从matlab上翻译为C语言,完成了一个裸奔的原型机。
这个时候,我以为,我已经大概能驾驭嵌入式开发了吧。其实,我这个时候既不会linux,操作系统上的编程,也不知道数据结构和算法,我都不知道我的盲目自信从哪里来,大概就是无知者无畏把。这个时候我已经草草翻了一下《C Primer Plus》。原型机完成后,算是简单的一个阶段结束,我又回到教研室做一些简单的理论探索,然后我还鬼使神差地跑去网上跟着一个java教程,完成了一个70%的俄罗斯方块,这个时候我都觉得自己蛮厉害了。时间一晃到了研二下学期,我想去找个实习,正好GE来,我在简历上吹了一通,那个筛简历的人问我,去做结构还是做软件,我犹豫了一下,选择了软件。
一通面试,才让我真的认识到自己有多菜。第一个问我java的垃圾回收机制,我就愣了,完全没概念,我怎么从来没有知道垃圾回收是个什么鬼。然后好像是反射,这个我跟着教程里面有写到过,可是我不知道怎么说出来,憋得脸都红了,也没说出个所以然来,就说到了把信息存在xml里面,读取解析,后面的就不记得了。后来转到C语言,又问垃圾回收,我那个时候虽然知道malloc(),free(),也并不明白垃圾回收是个什么概念。最后面试官摇摇头,说写个链表来看看吧,我大概知道,因为在《C Primer Plus》上搂了一眼,写出来感觉像那么回事。最后结果大家肯定都明白,当然是再也没有然后了。
受到了这个打击,我才开始思考,我之前学的到底是个什么鬼。正好对门教研室有个关系还不错的同学开始学编程。一通吹牛,让我知道了不少东西。我开始上知乎看一些编程的提问,像干的海绵开始吸水,我恨不得把所有编程的问题看了个遍,从萧井陌看到温兆伦,又从知乎上跟到了微博,一通关注,后来看到了Fenng、Tinyfool,最后又看到了池建强,混迹于各大论坛,我的百度网盘也是各类书籍教程。
最近读的《MacTalk 人生元编程》,给我很多启发,我想我会去买本正版收藏。
其实学习编程,说难也难,说容易也容易。要会hello world,或许正常人顶多半天,一顿安装配置,键盘上手指翻飞,一运行。一个大写的hello world跃然屏幕上,你就觉得自己会了。其实,这才是一万步的第一步。
即使是学习编程,各种语言,分门别类,各种技术纷繁芜杂,能做出一个好的选择,并不容易。我学了过C,C++,有个不算入门的java了解,还知道点html之类的,最近又开始试水python。今天我再也不敢说自己会编程了,充满了敬畏啊~
当然,经过了面试的羞辱,我还是知耻后勇的。我真正看了一下C语言,然后了解我们使用C语言,最可信赖的的工具————标准库,以及C语言产生————Unix。我也装上了Ubuntu,学会了简单的管理Linux,试过了很多指令,知道了Apache、MySQL,能用GCC,GDB,用了一下makefile,shell。最近我做了一点基于国产开源操作系统RT-Thread上的编程。了解了线程、线程间通信的基本方法。图形库是什么,怎么从驱动到最后的完成显示。 我也了解了基本的数据结构,做了编程实践。算法有点涉猎,但还没有很深入。我也了解C、java、python的差异。静态语言,动态语言差异是什么,都适合干啥。知道了前端后台,移动应用各自的技术路线。开始了给自己的技术路线做一个规划。
这一通忙活,我已经从一个三脚猫,变成了一个全面的三脚猫。我甚至把修电脑也顺便学会了,现在包揽了我们整个教研室的修电脑业务(后面我会写个修电脑系列,实在有太多故事)。这半年,感觉学到的东西,甚至超过了大学四年,从来都没有这么自己驱动自己去学习。我对于自己的发展,我大概有了个认识,并且,计划从事软件开发这个行业。当然,今年秋招,我也面了不少,虽然也不全会,但是大概知道面试官问的是什么了,再也没有过之前的那种无地自容的感觉。
读书就是站在别人的肩膀上。
我还是蛮喜欢读书的,涉猎还很杂,甚至连《本草纲目》、《皇帝内经》这类的书籍,我都看过一些。关于编程,我也翻了一些。最近看的池建强老师的书,获益很多。
书里讲的东西很多,从科技到人文,从自身到他人,从工具到技术,又自己的感悟,也有引述的观点。我站在他的肩膀上,看到了很多东西。就像一个叔叔在讲故事,态度很温和,也很谨慎,有一种匠心。
我也看过很技术人写的博客,就像王垠的博客,总是指点江山,有种居高临下的感觉;tinyfool,经常有的当头棒喝的感觉,“两点之间直线最短,不要找捷径”,总是直截了当,直中要害,这个要一边成长,一边感悟,就像家长苦口婆心,小孩子有时候顽劣,也未必能听进去;Fenng的“小道消息”,讲了很多行业现状,也很有意思,发人深省,着眼很大,已经不是细微的东西了;其他还有很多人,比如知乎轮子哥,他们都是个性鲜明,立场明确。
看池建强的书,更像是看杂谈,看故事,有时候书主动地,更多时候,显得客观,有一些发自内心的感悟,细细揣摩,会有感慨。
虽然我至今依旧没有一台属于自己的mac,不过我想会有的。虽然我至今还没有一个属于自己的博客。我想也会有的,每当自己有感悟的时候,写下来,这应该是好的。我们站在别人的肩膀上,感觉到收获,当有一天别人站在我肩膀上,也能发出类似的感慨,我觉得那个时候,我应该是会心一笑的。
我现在仍然是个在学习编程的人。我会努力学好的。我最近也在研究如何搭建自己的个人博客,我觉得这很有意思,这篇小文章也算是我学markdown的一个尝试吧。
就算没有博客,能写点东西,依旧是好的,也欢迎所有人拍砖,虽说是《MacTalk》读后感,其实都是自己絮絮叨叨。也欢迎大家各抒己见~