但是,回顾那个时候的课程设置,却都是合理的,并没有什么不足,但是又为什么会现在才意识到它们之间的联系。最终的结果是,学了很多门课,很多门孤立的课。不知道它们之间有什么联系。那个时候,又有着要多做比赛,增加实践经验的想法。于是很多时间,放在实验室。
真正对于课程的深入思考就更少了,课堂上明显的疑惑还会问问老师,更深入的估计是根本就没有想到。而是想怎么能将单片机程序调出来,会了几块单片机,会用了什么液晶,会用了什么传感器,等等会用了什么模块,最后等于都在调试怎么使用模块。以及做了多少块PCB。
可能算深入一些的就是,电路中的电容为什么这样使用。看了些高速电路设计,了解了些东西。读了高质量程序设计,明白了些同学不明白的东西。但是没有深入进去。也没有看到课程与课程之间的关系。
那个时候,虽然明白C很重要,但是具体什么个重要法,不清楚。也没见到过什么优秀的C程序,以为自己已经见到的就是很不错了。(那个时候,没有了解Linux,没有分析uCOS,也没有分析过什么C的代码)以为,单片机上也就那么多东西,再加上中断。现在想来当时,想的真是简单。应该说是,连中断都没有真正明白过。只不过比周围的同学,有些概念而已。
以至于虽然有学习C的心思,但是却又不知道自己到底缺什么,应该怎样去补充。
前段时间一个同学,写了篇关于学习方法的,感觉写的挺好的。里边也是感慨,在需要学习的时候,找不到灯塔,在暴风雨中挣扎了四年,终于看到了一线光亮的时候,大学毕业了。我们的大学就像是一叶在黑暗中前行的孤帆,迷失在汪洋之中。
以至于把大量的时间,放在所谓的比赛上,在实验室调试电路,调试程序。却没有更深入的一步思考。以至于,虽然有有大量的时间,但是却真正没有什么效率。现在看来,如果当时安下心来,好好看几本运算放大器的书,看看CSAPP,分析分析优秀的C代码。很多地方是不需要在实验室花费那么多的时间的。
但是,我的那位同学是很想学些东西,研究些东西。但是在四年就在找寻中度过了。
当我们专业在大四毕业时,拿同学的话说,我们专业会使用C编程的,拿两只手的手指都能数的过来。能够搭电路的,画出可以的PCB的,一个手的手指都能数过来。
如果说是少数同学对于专业不感冒,学生难辞其咎;但是当95%的学生对于专业不感冒的时候,这又怎么说呢?
这里诚然,有很多地方是我们自己做的不够好,没有深入思考什么;但是反过来,作为老师就没有需要思考的吗?
Steve Senturia教授:Engineering is the purposeful use of science. 工程就是对于科学进行有目的性的运用。
当自己大四在公司实习时,下载了MIT的一个公开课视频电子电路学(6.002)由Anant Agarwal教授主讲,这是他们EECS系学生都要学习的一门必修课。以美国对于软件的分类,MIT这样做应该是属于偏硬件类的。当时看了第一集,就发现,自己疑惑了三年的电子信息课程中的联系,在这一节课中得到了解答。
于是下载了全套视频,断断续续也只看了20集。但是确实理清了很多,以前没有想明白的问题,突然清楚了很多。也或许是问题,积累的太久了,有这个导火索,一下子引爆了很多。
毕业后,看了几本书,系统程序员成长计划,CSAPP,Unix环境高级编程,人有人的用处,运算放大器权威指南,信号完整性与PCB设计。
聆听了黄敬群先生的一堂讲座。分析追踪了uCOS的部分源码;分析了Contiki的几篇论文,了解系统运行机制及通信机制,追踪了部分代码。
查看了Linux下,C程序的内存分布,内存使用,堆栈的情况;调试了指针的一些情况。
关注了电子工程专辑上凤舞天,武华卿,张进东,模拟电子技术等一些热门博客。在这个过程中,发现大学课程中的联系越来越清晰。更感觉自己的大学时间利用效率何其之低。理清思路,按照大学的课程设置来说。
首先,大学的高数,和线性代数,电路计算与分析常用的是微分方程,线性代数也会用到。当然,在上高数的时候,我们的高数老师——牛大田老师,经常跟我们说,信号分析中会用到哪些,经常提醒我们学好微积分,学好傅里叶变换,虽然没有提到在电路中的应用,但是估计很难找到这样的高数老师了。
线性代数(同济版)当时就是行列式变换,具体怎么应用,不知道。后来看到一本Steven J.Leon教授的线性代数,发现上边关于在各个学科的应用都有表明。那个时候,都快给变吐的行列式,在这本书中就是,我们电路中应该怎么来分析电路,怎么应用在编码中。悔不当初。我承认,当时对于线性代数理解感觉有些吃力,我自认为还算是努力的,但是还是不行。这点或许要承认,自己的抽象能力不行。当我们的大学扩招后,是不是我们的教材,不要那么抽象。本来就不好学的课程,我们的教材再恐吓几下。等真的学到电路(大二上),学到纠错编码(大三下)的时候,估计还记得当时行列式的法则的估计没有几个人了,考研的同学估计在这里也不清楚到底应该怎样理解。
C语言,早在第一学期,带着电子部学长的建议,在最后的两个月,在每天下晚自习后,在实验室用VC敲了两个月例程。自认为对于C理解很多了。开学的C二级考的都还可以,当时想再看看C深入的书籍。但是不知道该看什么了,周围的学长也没有更好的建议。在课堂上,教材上的东西,确实弥补了很多以前不注意的地方。虽然自己感觉挺好,但是很多同学对老师反应很强烈。而自己也错失了,大好的提升C语言的机会。不知道,该找什么书看。其实这个时候,如果看看《系统程序员成长计划》,《C专家编程》,《CSAPP》,《C陷阱与缺陷》,看看黄静群先生的《深入浅出Hello world》会很好的。
理解了C语言的深入的东西,大学以后几年就没有那么多烦恼了。单片机没有那么神秘了,也不会说uCOS的邮箱机制只能传送一个变量而没有什么用了。使用黄敬群先生说的方法,分析一个操作系统,就会很快明白一个操作系统的大体脉络。也会明白,C程序在单片机和操作系统下运行的异同。不会纠结裸机编程,与系统编程了。
如果深入看了CSAPP,可能发现数字电路,FPGA的概念这个时候就都有了。
电路原理,数字电路,模拟电路,在MIT6.002中这三个都属于电路电子学,一起讲授。不会发生,学了电路原理,不会分析模拟电路;电路中最重要的零极点,在学模拟的时候没有一点印象。有印象的是信号与系统中的零极点,但是此时模拟和信号与系统,联系上估计很难,更想不到在模拟中会有。模拟中的反馈,和信号与系统的反馈,虽然字一样,但是也还想不到它们有什么联系。当然,这个时候分析的数字电路是低频的,模拟电路是理想的,以至于以后学习电磁场与电磁波时,根本就想不到,其实当数字电路频率高了,模拟电路频率高了,就是用他们来分析的。以至于学校图书管里,信号完整新分析是在通信分类中,而不是在电路分类中。不知道零极点,不知道导纳圆图,不知道阻抗匹配,不知道信号完整性,不知道传输线。印象最深的是,在6.002中,Anant Agarwal教授随堂做的一些实验,爆炸的电容,电锯,吹风机这些实际的干扰源对于数字和模拟电路的影响,反馈在电路中的最用地位。虽然,在学习这些的时候,实验自己认为做的还算是认真的,都是自己搭的电路,分析的实验结果。也分析,实验没有一次成功的原因。也在数字实验箱上插过几百根线的仿真验证。但是,除了这些,真的不知道为什么反馈使电路更稳定,什么样的干扰对于电路会产生什么样的影响。
《运算放大器权威指南》,《信号完整性分析》,《晶体管电路设计》,《高速电路设计与实践》应该是基本不错的书。
微机原理,单片机,EDA,感觉这三个,前两个在看CSAPP的时候,能解决一大部分了。剩下的就是硬件的连接,这些属于数字电路的范畴。EDA应该也属于数字电路里边的。
通信电子电路,模拟电路的升级版,外加调制,解调。
通信原理,应该说是自己大学没学好的一门课。当时准备Freescale比赛,没有好好学。现在想来,是很重要的一门课。信息的概念,信道的概念,传输速率,调制,解调,纠错编码。应该是对大学期间,学习的这些的一个理论上的总结。现在只能有一些印象,可能有些内容连印象都没有了。
数据通信与网络,如果说它没有一点用,看看我们现在用的是什么,就知道有没有用了。基本的互联网,以后的物联网,虽然,它的确没讲多少,至少给我们开了扇门。要比我们,以后继续在黑夜中行走要好得多。
当然这里所列的,对于信号的处理涉及的并不多,因为自己主要偏向于应用。对于信号处理,着力就不多。随机信号分析,数字信号处理,图像信号处理,语音信号处理,这些了解不多。
一个纠结了几年的问题,反馈问题,在参加Freescale比赛的时候,使用到PID控制,隐约感到这里的反馈,与电路中的反馈有什么联系。电路中有正反馈,负反馈。和信号与系统中的反馈有些联系,也与控制原理中的反馈有联系。但是只是猜测。后来不知道在哪看到维纳的《控制论》评论说是,控制方面的开山作。虽然崇拜,但是买不到,据说也不好读,里边很多公式。于是乎找到了维纳的另一本书《人有人的用处》,据说是《控制论》的科普版。饶是如此,看的时候依然有些困难。因为翻译的比较早,总感觉理解起来,得琢磨一会。但是,里边确实将反馈提到系统里边来说明。只要是一个系统,就存在反馈。而且负反馈导致系统稳定。于是乎,就想起来了,当年的信号与系统,电路系统,控制系统,应该说他们的反馈机制都是一样的。后来在《运算放大器权威指南》中看到,里边将电路的反馈和控制原理的反馈比较分析,发现形式一模一样,只是由原来的控制原理的术语,换成了电压电流。至此纠结了几年的问题,彻底解决了。
在凤舞天的一个博客中看到说,国内的环境注定了,我们不能把东西都掌握了再去做东西,那样黄花菜都凉了。但是如果没有掌握理论,做出来的东西也就只能在国内卖。这个值得思考一下。