AKAE(亚嵌教育)学习总结
-2006.9.3 Liyang
转眼间在AKAE的学习即将结束了,回忆二个月前一个刚迈出校园的我,和现在的我,可以说已经完全的改变。
自己接触电脑应该是在小学,第一次在妈妈工作的地方,看到了DOS,现在还记得在那个黑黑的屏幕下编出第一个批处理程序的喜悦而且并在为什么这个机器竟然会做这么人性化的事情上困惑了很多年,有可能现在才真的知道为什么吧。不过在那时就有了以后要成为一个电脑高手的想法(当然,当时肯定不知道黑客这个词了)。原来在大学,在同学里自认为已经是个高手了,可以帮人家解决一下WINDOWS上的一下小问题,帮同学免费的在网吧上网,在院里可以和老师一块做项目。但是真正发觉自己只是在电脑业余爱好者的行列中的时候是在大四时,参加了计算机那些科班出身的人的一个项目。做完项目后,大家都在找工作了,我心里非常明确的告诉自己不能做一个肤浅的“高级程序员”。自己想了解更多电脑背后那些神秘的东西,当时知道LINUX给了我一个机会,自己又是一个自动化出身的学生,所以当时看到了AKAE,心中一亮,更坚定了自己不去加入那些盲目去招聘会的大军里了。终于在七月份,我毕业了,也如愿的来到了由中国一些开源项目领头羊们带领的AKAE(亚嵌教育)。
下面进入了第一周的学习,是LINUX的一些入门操作,这周对我最大的改变是,现在我感觉如果用鼠标去右键新建一个东西好麻烦,好慢。如果偶尔在WIN下,写些东西,经常不由的ESC->:->w,而不是CTRL+S了。我知道,我已经对WIN上的很多东西陌生了,对LINUX又已经是爱不释手了。
第二周的学习,是一些C语言的编程。看看现在自己编的CODE,又看了看在学校自己编过的一些程序,一个.c叫一个程序,最惨的还有一个.c+一个main叫一个程序。又看看在AKAE编的code,一个程序,不,应该说是一个小项目吧,有一个或多个文件夹,里面有README,加了(#ifndef,#define,#endif)的头文件,和规范的编码风格的.c,里面还有一些#ifdef DEBUG等语句的代码。现在还有点不敢相信二个月的我的变化了。
第三周,是对自己编程的升华了,都知道UNIX和C的关系,那么UNIX环境的编程无疑是对C语言的深入理解。在这周里,我学到了一直非常想得到的但书本上不会讲的东西。例如,一个a.out的形成一步一步是怎么过来的,它在运行时的堆栈的样子,在内存中的布局是什么样子。站在了这种角度再去编程,再去debug,爽的感觉可能只有自己能够体会的到吧。
真正对思想的改变还是对UNIX编程的学习,IO编程,进程,信号量,线程,还有网络的编程中,我学到了很多操作系统级的知识,和网络协议的知识。当然更重要的是,在AKAE众多武林高手的指点下,自己也有勇气并可以看懂一些传说中的葵花宝典级的书了。
增加内功后,自己知道了UNIX编程的名言“尽量提供机制,而不提供策略”。自己编程是站在用户态呢,还是内核态。当在用户态编程时,我的程序的进程上下文是什么样的,自己调用的一些标准库函数和系统调用时,他们是如何陷入内核态执行的。现在编程时脑子里就会有这么一个立体的画面,爽。(谁都喜欢知道自己到底在做什么,自己做得事情后面真正在发生什么。)
UNIX编程的另一大特点莫过于同步了,想一想在同一时刻,你的程序在同时做着很多不同的事情,即使只有一个处理器,也可以让你感觉到一种并发的效果,这样有很多问题会得到简化,很多程序更加高效合理。(例如像交互这种“慢”系统调用) 当自己真的可以真正的理解和考虑到同步的精髓时,自己可能又会小骄傲一下吧。现在只是知道在多进程,线程(LINUX里好像线程也是用进程实现的吧)编程时,如何通过信号量来同步每个进程,如何用锁的机制来保护共享资源。加锁的顺序和技巧,避免死锁。当然信号更是个很广很有用的概念,以后要通过实践继续总结。
|