嵌入式程序员的成长道路

时间:2022-01-01 01:31:49
C/C++程序员成长之路(初稿)


  
  好了,这章来回顾一下一个嵌入式程序员的成长道路吧。为后面的开发经验介绍定下一个基调。
  
  算上大学开始的编码工作,我写程序有十多年历史了,现在呢,也靠这个吃饭。据说十年磨一剑,我也希望我这十多年的编程经验对大家有所帮助。
  
  第一阶段:C语言的学习
  C语言是我的第二门编程语言功课。当时的大学课程设置可能和现在不同,入学会学习一门程序设计语言,根据专业不同,PASCAL啦,FORTRAN啦,BASIC啦……都有。而且上机是在一个小型机的终端上进行。虽然高中时代摸过一点苹果机,不过,聊胜于无。等这门课快结束的时候,刚刚有点感觉,但就考试了,这门课就结束了。基本上,啥也没有学到,就知道用键盘敲入字母字符了。
  真正的C语言学习是大三的这门C语言课程。而且学校的机房,也开始流行PC机了,每台电脑上都有Turbo C。基本上上一节课就会抽空去机房,呆一两个小时,调试一点程序。现在还记得第一个程序,有个字母打错了,半天找不到原因,编译提示的英文每个单词都认识,合起来的意思还看不懂。自己还觉得和书上的一模一样啊,找了一个同学来看,哦,少了一个字母。刚起步的时候,够笨吧。
  这个时候,只能说熟悉一下电脑的用法,那个时候还是DOS,还要记忆各种命令的。然后就是把书上的代码敲入到Turbo C中,一一验证这些语法。感谢学校的一个规定,当时C语言考试,上机要占部分成绩。不然,以我对课程的态度,肯定只上课,不上机了。当然,那个时候,不知道将来要靠C语言为生,只是把它当成一门课程来学习吧了。
  还好,那个时候,基本上学校风气不错,大家都说,不会应用计算机,将来危险,对我们这个专业来说,会应用计算机,当然标准就是会利用计算机开发需要的程序了。
  总结一下,第一个阶段,只是通过上机验证C语言的语法。真的是笨办法啊,只不过不断地编写一些程序,熟能生巧吧了。后来问过很多同事,都说有这个阶段。只不过他们有些人当时就很爱干这个,做起来兴致勃勃,我属于中间,感觉还不错,既不特别喜欢,也不像有些同学,对计算机畏惧。当时要知道熟练掌握C/C++,可以让我的工资快速double,我就肯定不是上课才去机房了,我有空就去,把C语言练习得比老师还熟。
  
  第二个阶段:课程设计和毕业设计
  感谢学校,当时教学改革,给我们这个专业开了一门叫做软件开发基础的课程。现在明白了,就是计算机专业的数据结构,操作系统和软件工程的三合一。浓缩的都是精华啊,我一直想感谢我们的老师,说回学校请老师吃饭,可一直没有空回母校,因为我现在的工作,50%用到这门课的内容。我当时只是一个想争取奖学金的学生,不爱看课外书,知识面不广,如果不是这么课,我想可能都不会进入嵌入式开发这个行业吧。
  数据结构这么课大家都知道,就是一些链表啊,树啊之类的,老师要求我们用C语言实现,特别是课程设计,开始人生第一个超过1000行的代码。
  以前的学习,最多不过是200行的代码,当代码规模扩大后,你就感觉不一样了,你慢慢的经验也不一样了。现在看来,熟悉了基本语法之后,就是给自己题目,让自己编写越来越大的代码就可以了。
  当时没有这个认识啊,幸好还有两门课程的课程设计,给了我们编写更大程序的机会,一门是复变函数吧,老师让抄袭书上的一个算法用C语言实现了,一门是信号与系统,很难也很有意思的课程,有个算法,难得很,我都没有搞懂,只是到图书馆抄了一个代码来实现,慢慢的搞懂了。
  说到这里,数字电路和微机原理的两门课程设计,其实同样精彩,后来硬件上能这么熟悉,全靠这两个课程设计打基础了。
  然后就是毕业设计了。我的系统比较简单。但好像代码也有万多行,第一次编写这么大的项目,而且还要和别的同学衔接。真的有飞跃的感觉。当然,现在回头来看,这个代码也简单得很,而且幼稚,其中很多代码都是简单重复。比如两个文件,实现的功能都差不多,程序逻辑页差不多。对自己训练不多。只不过,当时这个阶段,也许就是需要不断的重复达到一个熟练的程度吧。
  总结一下,这个阶段,才是真正的接触程序编码的阶段,虽然简单,但毕竟代码都是自己去想,自己去写的,即使抄袭,也是读懂了的,相比只是验证语法的第一阶段。其实是一个飞跃。
  
  第三阶段:硬件开发和学习C++
  毕业的前两年,其实我很少用C语言开发东西,这个时候,全是用单片机去实现这个,实现那个。有段时间,还去管了一下智能仪器的现场生产。当然,后来没有想到,这些经历居然也是财富。
  编了几个项目,都是汇编语言,自己再笨,也发现了一点规律,其实这些系统,都是一个输入:传感器;一个输出:LED;CPU或者说微处理器的功能就是根据输入计算和控制,然后控制输出。其实看穿了都很简单。
  然后开始想转型,向朝软件开发方面发展,大学没有学习过C++。就买了两本书来自学。教育的目的不是教会你什么,而是教会你自己学习。当然,这个时候学习和读书不一样,不是为了分数,而是为了自己的合理知识结构。
  很快就用上了C++的知识了。有个项目,就是血压计的项目。原理很简单,就是传感器测试出一个人的血压,得到一个电压,我们把这个电压显示出来,当然,这个电压就变成了我们人能理解的血压了。系统里面的代码很简单,用汇编简单就编写出来了。
  而这个项目对我的体验是,查了无数医学文献,和专利文档,形成算法的过程。因为人和人不同的,特别是胖子和瘦子是不同的。这些数据汇总形成算法,C++就排上用场了,当然,用C语言也能实现,只不过,当时C++平台行已经有了很多库,用起来效率高很多。
  呵呵,只不过,C++我是不求甚解了。会用就可以,我买的书里面,C++范围之广,语法之多,让人叹为观止,我不用的部分,我这辈子是精通不了了。
  总结一下,这个阶段,主要是和硬件打交道了。日子其实比较苦闷。但也积累了不少硬件方面的东西,没想到后来,这成了我的一个优势,大多数开发人员不像我这么有硬件背景,大多数硬件开发人员,又不像我这么有软件开发背景。特别是电子设备生产现场经验,有经验的人,有没有开发经验。我就成了那个互相沟通的人。
  
  第四阶段:中型项目开发经验
  其实前面我碰到的项目都很小,想嘛,居然是用汇编实现。后来机会来了,我想转型,就换了一份工作。我居然获得了一个开发一个独立项目的机会,这个项目开发的时候,挺紧张的,还好是开卷考试啊,可以查书。
  这个项目,更明白了核心算法的重要性,还有学习能力的重要。普通的代码,到一定的阶段大家都会编写。这个项目要用到一些新设备,很快掌握它们的功能和应用,学习能力显得尤为重要,项目时间要求很紧啊。而这个项目的搭建,还有核心算法的确立,成为这个项目的另外两个关键。而因为我的硬件经验,获得了第一次搭建整体项目的机会,这个体验,十分难得。而老大给我的核心算法的讲解,让我学习到了不少东西。
  这个项目,基本上来说,还只是一个前后台系统,还算简单。而后面一个项目用到了操作系统,从此,我经历的项目,都是用嵌入式操作系统实现的大系统了。又进入了一个新的阶段。
  总结一下这个阶段,学习能力,系统整体框架的搭建能力,核心算法的编写能力。慢慢显示出优势来。但实际上,痛苦往往在于调试,调试,我慢慢体会到啥叫工程师了,其实原理你都明白,但是,有时候显示的结果就是不正确,然后你就到处找原因吧。
  这个阶段,倒是积累了很多调试工具的使用经验,也是难得。
  
  第五阶段:大型项目开发经验
  后来慢慢有了机会参与一些大型项目的开发,当然,我个人只是参与其中很小的一部分。本来这个阶段想积累一些项目管理的经验,不过尝试了几次,看来自己不是这块材料,还是朝资深工程师这条路上走吧。
  
  总结学习成长的道路
  现在回头看看,当年自己多傻啊,只不过简单的语法,都要编写一个程序去验证验证。不过,这也说明了学习和成长是一个加速度的过程。
  现在反而后悔那个时候,没有多多的训练,打好更好的基础呢。我可能比别人笨,别人一周上机一次就够了,我多上机两次行不行。
  时间久了,点滴的积累,成就了今天的熟练。当然,技术这个东西,水很深,懂得越多,接触未知领域就越多。
  我个人经历有限,见识也有限。
  只是读大学的时候,完全不知道那些课程将来有用,哪些课程将来无用。
  我希望我的图书,能帮大家把这些东西串一串,给大家一个比较清晰的认识。加上你们自己的上机自我训练,希望,你们能找到满意的工作。