2008年3月31日星期一

一封回信

多希望能给十几年前的自己,也抄送一份……

在08-3-31,... <...> 写道:
- 隐藏引用文字 -
我是大一新生,半学期的大学生活,迷茫了。
现在学校学的是C++可是我以后希望能在嵌入式或者是linux下有所发展,
请问我现在该学些什么呢?
最近C++方面在看primer
还在看清华出的begining unix
下一步准备看APUE
不过还是希望您能给我点建议谢谢了。。。。该怎么发展。。。该怎么学习。请指点下。谢谢了。


从我的经验讲一点吧,个人体验,不一定就准确,希望能对你有些帮助
:)。
我想,数学是要好好学的。其实程序语言的语法,不拘哪一种教育背景的人,都是可以学会的。像我现在在ACCP做讲师,我的同事有个观点,只要能看懂冒泡排序的,就能做程序员。这个起点不可谓不低。未来的职业生涯,你可以倚之超越同侪的,首先就是数学功底。更重要的是,这种功力只有在教室中才有机会系统的学习。一旦你离开校园,被生活所累,几乎再无机会去增长数学知识。未来人生路远,只要你有成就,大把时间用来学习前卫的编程技术,享受电子游戏、体育竞技、甚至那些贵族化的娱乐。然而决定你未来能否卓而不群的这一基本功,却没有什么机会再来。
其次,课业中的数据结构、算法、组成原理等基础课,确是枯燥。但是不妨规矩的学一学,至少应该在中等以上。以上这些知识,包括数学,也许以后都不会直接用到。然而,要知道,一来书到用时方恨少,现学是来不及的,技多不压身,机会永远只留给有准备的人;二来,它们的潜作用是非常大的,基本功好与不好,直接决定未来的升值潜力。这方面我推荐机械工业出版社的一本老书《编码的奥秘》,绝对是本有趣有智,深入浅出的绝佳读物。
编程语言,不妨从简单的学起。C++是个好东西,不过只学它,可能会陷入困局。为语法束缚。可以学一学纯C,对C++的学习不无启发。C++解决了哪些C的问题?带来了什么新的问题?学习中如何取舍?两厢比对,会有很大收获。另外一些C的代码,历经时间考验,绝对是提升水平的上等教材。比如Apache或Python的源码、或Linux内核,或BSD内核。Bjarne有云,真正的OO高手,写纯C代码也能有良好的OO,这里面有些东西并不是非常深奥的。我自问并非C/C++高手,然而Python的内核代码一样让我受益良多。推荐你读一下Robert Chen的《Python源码剖析》。他的Blog上有,可以Google到。这个教程今年就要出版,不妨买一本细读。
另外,对于C++程序员,候捷先生编写的一系列有关C++,特别是泛型方面的书,很值得一读。当然书海无边,所费又颇高,可以与同学交错购买,交换阅读。不一定要遍阅。如有时间,不妨多写些代码。
对于初学者,我想最大的挫折莫过于成就感,重型编程语言,特别是没有IDE支撑的重型编程语言,往往要花费大量精力于编写重复的辅助性代码。这是非常折磨人的。所以我推荐学习一两门轻量的脚本语言,做为平时辅助思考,编写原型,甚至用来实操。
这方面,我个人推荐Python为首选。首先它非常易学,上手极快,然而又有比较完整的模型,更难得是与C良好的结合,可称C程序的良伴。在掌握一些类似SWIG的桥接工具后,C+Python发挥出的威力,并不弱于C++。再加上现在国内对它的关注日重,资源非常丰富,以后用来找工作,也是非常好的。而且它严格的编码排版要求,正是初学者养成良好编码风格与美感的力助。
我自己目前在学Perl,但是Perl应该说还是有一定门槛的,等到你大量编写*nix Shell或文本处理,再来学习不迟,不过Perl的很多思想,都极为精巧,有很高价值。如果在易学方面,Ruby和LUA,甚至JS,我都是很推荐的。如有精力,不妨学习一下Lisp语言,不必深入,花上一两周,用来开拓眼界就好。
可以预期的未来,嵌入式领域无非C/C++/Java,其它技术会有多种令人惊喜的发展,但是五年内,恐怕这三种语言的地位仍难被动摇。故如果想要在嵌入式领域深入,C是一定要学好的。多写些代码。或者不妨找一些Java环境,如Google的ADT工具,学习一下实用程序的开发。会对应用需求的把握有很大帮助。
工欲善其事,必先利其器,我推荐你读些专门介绍VI/Emacs使用的书籍(O'Reilly的就很好),这些工具的价值,绝非商业IDE可比。等你熟悉这些高度可扩展的编辑器,再学习IDE和RAD工具,会觉得了然于心,得心应手。
要学会用编程解决日常问题,学会超越Framework的束缚,快速直接的表达思想,学会优雅友好的代码风格。而在这种时候,快速轻量的脚本语言,它们的价值就体现出来。另外脚本语言的动态对象模型,也有助于我们跨过过度设计的障碍,理解设计与编码的本意
不知不觉说了很多,都是一个并不成功的过来人,所经历和感受到的,如果能使你的职业道路轻松一些,不胜荣幸。

没有评论: