本文是前三篇文章的外篇,主要讲讲我从C到C的编程语言之路,从上层应用到较底层开发,目前主攻C语言嵌入式开发。本文本来预想是两个星期前写的,但由于热身赛临近,需要投入大量的时间,所以迟迟抽不出时间来,加上熬夜太多,一直咳嗽,今天算是有时间结束《简单谈谈编程语言》系列了。
第一篇适合刚接触多种语言的程序员,第二篇适合已经一定的框架、应用开发经验的程序员,第三篇适合有较多开发经验、并且还没做出选择的程序员,这一篇,纯属闲聊,一篇流水账。
时间回到大学刚开始的C语言学习,当时只能非常绝望地对着一个小黑框,写着简单的小学数学题,当时还不懂得在网站直接找教程学习,只会死板地看着教材,虽然就一开始听了一两节课,但由于一直认真写作业,加上接触的第一门编程语言是C语言,所以,心里一直觉得C语言是我最熟悉的,唯一讨厌的是那个小黑框。第二学期学JAVA也差不多,SWING大概是我见过的最不喜欢的写界面的了,也可能是我当时太菜。也是因为我那时候不懂得自己上网找学习视频,所以当时就按部就班。因此时间特别多,加上对自己的定位了,找到、享受自己的兴趣爱好,因此大一算是最幸福的了。
其实学完JAVA后,我就开始发现很多共性了,只是一直理解不了面向对象,当时觉得C语言库可以做到的东西,干嘛弄个类、搞个面向对象?大一临近结束时,我开始定位大二,当时有师兄跟我说过要专精一门语言比较好,但是我心理就是不踏实,然后有了后面的很多尝试。
后来,加入校内一个校级组织的部门后,慢慢开始对学习有了新的见解,从事的是网页前端开发,HTML+CSS+JAVASCRIPT,那时候开始对计算机充满了更大的兴趣,因为自己可以弄出很好看的界面,甚至看起来已经和自己浏览的很多网页差不多,甚至有一些更好看,开始接触一些框架,比如bootstrap,jQuery(库)等等,觉得框架好多,用起来好方便,但是竟然有这么多框架,有点吃惊,框架到底是个什么东西?在这段时间内,我开始通过看视频来学习了,加上自己很厉害折腾课外的东西,更重要的是大二的定位是寻找专业爱好,因此学的东西还是挺多的。当时接触了sublime text这个文本编辑器,有种打开新世界大门的感觉,打开速度超快,并且知道了插件的存在,尤其是快捷键的习惯(我目前大部分的快捷键的习惯都源于sublime,接触每一款新的IDE、文本编辑器我都会改成sublime式的快捷键,个人习惯),因此开始了能不用鼠标就不用鼠标的习惯,这些快捷键、插件技巧大大提高了开发速度。
后面接触了当时超级火的微信小程序(其实也可以把小程序的编写看成是一个框架),然后发现了与HTML惊人的相似。与此同时接触的C++游戏引擎虚幻4(UE4)的蓝图(其实就是调用库函数),开始慢慢觉得只会写界面好像也拿不出手,加上手头上有一个网页项目(校级的),还没开工,就开始从PHP入手。当时部门同学推荐用JetBrains PhpStorm编写,我觉得界面不喜欢,然后字体显示奇怪,即使换成了习惯的sublime经典皮肤也不舒服,然后抛弃了这个,用sublime,后来觉得vscode也挺方便的,就开始用vscode编写PHP。这时候已经开始慢慢觉得文本编辑器好了,IDE启动太慢,并且繁琐,想改点东西也要等好几秒才能打开,相对于sublime的秒开(notepad++也有同样速度,但是长得不好看),vscode两秒开(没想到很好的词,哈哈哈),还是算了(纯属个人偏见)。
这个时候的我,看PHP就觉得PHP好奇怪,弄个$在变量前面,竟然还有一群人这么喜欢它?(好吧,到现在我还是挺不喜欢PHP的$,虽然已经明白为啥这样)。但是看到class就明显觉得是JAVA的近亲,略微感动了一下,然后对面向对象那些就相对舒服了点。后来接触了THINKPHP5.1框架,开始对框架有了新的见解,慢慢意识到框架其实就是一个半成品,自己按照规则去弄就好。
暑假跟着部门的人做前端实习,那份工作就是不断让我用同样的技术不停地做静态页面,一开始还是有点不适应,觉得有点挑战,做完第一份后,后面的就很快做完了,因为基本没用到新的知识。我惊讶地觉得,没有技术,真的只能做重复单调的工作,然后在完成公司任务后,我开始继续研究服务器,写PHP,折腾一下js,当然这是白天的工作,大概是7月底/8月初这样,晚上回到学校就在实验室学习嵌入式。也是那时,我开始正式从实验室的游戏开发转向嵌入式开发,原因很多,核心是我对上一年比赛结果不满意(我算是一直划水了,在实验室,游戏,emm...算了不谈这个),我不服气。然后,就开始了漫长的嵌入式入门之旅,其实在没看比赛之前我自己觉得自己肯定不做硬件编程的,打脸了。
大三第一学期,用PHP作为后端把网站搞好了,慢慢开始有意向偏嵌入式了,并且开始发现了超多编程语言的共性。但是自己内心还是慌,专业方向选了安卓,接触了xml,后来看了一些kotlin,python,go,做了一些简单的东西。内心酝酿已久的问题,开始强烈冲击自己的内心了,什么是编程语言?为什么有那么多编程语言?为什么还不停出现那么多编程语言?框架、API等等这些又是什么?等等,大量的问题出现。问了老师,师兄师姐,他们确实给出了看法,却不是我想要的答案,但给了我思路。当时的嵌入式课,老师讲了很多底层的东西,以ARM为例,从汇编层面去看待问题,也更深入地讲c语言,为我解答编程语言问题做了很大的基础铺垫(我大三开始决定开始听课,因为觉得考前自学课内知识有点累,并且入门嵌入式让我意识到基础知识的重要性)。赵老师讲的真的很好,让我多次觉得豁然开朗,因此我现在选了他作为了我的指导老师。
经历了重重奇奇怪怪的概念考验,我和机械那边首次做了自己的第一个机器人作品,顿时对嵌入式的兴趣倍增。在寒假的时候,我用C++和QT写了一个串口调试助手,惊奇地发现自己的自学能力提高了很多,开发周期比我预想要短,上手很快(虽然还有bug没改好)。C++的类我真的不喜欢,长得奇怪,但比较裸露,然而我却顿时明白了,类原本是什么一个东西,结构体、指针,顿时释然,我开始从底层往上去解释编程语言,知道实现原理,再从历史去解释为什么要这样做。
第二学期初,我开始接手一个“看起来很容易”的机器人,实际上这个机器人让我不断怀疑自己是否适合做嵌入式。我开始去深入学习C语言,学习一些使用技巧,模块化思想(这个还没能搞得很清楚),因为代码量已经较为庞大了,开始深切感觉到了面向对象的优势了,往后可能也会写几篇相关的文章。这时候的我,因为已经理解了编程语言了,找到了自己的答案了,所以,我就在那一瞬间决定,继续做挺好玩的嵌入式,专精C语言,然后断断续续写了那三篇文章。
为什么现在的我心不慌了呢?因为已经看透了这些表层的编程语言的区别,已经有自信无论之后的工作,使用哪种编程语言,我也有把握迅速上手,心自然踏实了。而现在更踏实了,就是因为那个“看起来很容易”的机器人,我踏很多坑,因为团队内没有这方面的基础,然后已经从关注底层配置,到直接应用逻辑开发了。热身赛出现的种种意外,让我充分体会到经验和解决问题思路的重要性,大一大二甚至大三一开始我都不承认bug这个词的,但这个机器人让我承认了。不能觉得自己太菜而自卑,也不能自信而出现大量bug出现,心态,也很重要。
啰嗦了这么多,就一句话,越学习越谦虚,根本没有机会自负,计算机需要学的太多厉害的人太多。这便是,我从应用层到底层,然后现在开始从底层慢慢爬向应用层的故事了,或者说是从C到C的故事。
后记:
篇幅限制,就不直接在上一篇那里接着写下去了,决定写一篇独立的文章结束对编程语言的讲述,当做尾声。第一第二篇从编程语言的角度的讲述,第三篇从程序员的角度,并且已经将我目前对程序员的历程的见解都融入进去了,正确与否我也不清楚,需要经过时间的推敲。第一篇已经讲明了我为什么选择写这几篇文章,或者说包括接下来的文章,像现在很多文章站在过高层面去描述问题其实是很好的,毕竟那样的文章,无论处于多高的水平都起着作用。但是对于初学者并不见得是这样,过于深入去讲述一些问题,反而会让初学者望而却步,看不懂,所以,就想趁自己水平还比较一般的时候,写一些适合这个阶段的文章,希望能达到效果。现在越学,越觉得自己菜,要学的东西太多,而自己的精力却很有限。
不定时更新文章,尽可能坚持下去,转载请注明出处。