顶礼文殊智慧勇士!


在悉大读了一年半的软件攻城了,自以为目前学了三个物超所值的课程:

INFO1103  Introduction to Programming

COMP2129  Operating System and Machine Principle

PHIL2659  Computation and Logic


INFO1103是头一年第一个学期学的关于编程的课程,和国内的风格不同的是,第一门编程语言课不是教C语言,而是讲JAVA并且着重介绍了泛型、继承、多态等内容。然后COMP2129这个第二年的课程才开始学C语言。细细想来这样的安排还真是挺合理的。因为我感觉对于一个新入IT大坑的人而言,最先开始要了解的,不一定是弄明白计算机原理是什么、内存管理怎么玩。而是对于如何使用编程工具/思想来解决问题,产生一种初步而扎实的认知。比如学完这门课之后,虽然我还不太清楚pass by value和pass by reference的差别,堆和栈是何方神圣,但JAVA它自身功能的丰富性,能让我专心地去思考如何构架自己的代码,体会用程序方法来解决实际问题要做哪些抽象转换,而且也为后面学习C语言打好了编程思维和编程习惯的基础。


COMP2129讲三个内容,C、UNIX、并行编程(Parallel Programming),一门课学下来感觉学了很多新东西感觉不是一般的充实。。简直充得要爆掉了。。我个人感觉Faculty敢这么自信地安排这样的课程给学生,有一个原因是因为在之前的一个课程ELEC1601中已经教了相当的计算机底层知识 (汇编都写过了还怕指针这厮么!),所以就算教授一个半月就横扫到多线程,个人感觉还能在接受范围之内。但是听说修这门课的人有的是第一次接触编程课,对于此类同鞋我深深钦佩其勇气。。。。。


PHIL2650是一门锻炼内功的课,其所诠释的,远比指针或者堆栈之类的内容更加接近于计算机的根本理论。它思考什么是机械计算、为什么人类的脑洞最终发展到了需要设计出一种能解决问题的计算机这一步,由此又阐述了一切满足冯诺依曼结构的计算机的祖师爷级原型机 ---- 图灵机,由此而来的则是关于计算复杂性的思考、P NP问题等等。。。 虽然正如大一大二其他所有课程出发点类似,这门课也是旨在于给予Introductory level的知识,但因为横扫面积甚广且内在逻辑关联性很强,所以学的时候有时感觉也颇具挑战,但更多的是逻辑思考带来的趣味。

Nick Smith的PHIL2650讲记放在国内的话,我相信会是一篇很恰到好处又严密易懂的计算理论入门读本,因此学完后很想有时间的话把他的NOTES整理翻译放到博客上。这对自己而言是非常有意思的锻炼吧。


顺便记录下这些好文/好书:

康托尔、哥德尔、图灵——永恒的金色对角线:

http://mindhacks.cn/2006/10/15/cantor-godel-turing-an-eternal-golden-diagonal/

图灵机杂思:

http://blog.csdn.net/pongba/article/details/621723

什么是P问题、NP问题和NPC问题

http://www.matrix67.com/blog/archives/105

Compubility and Logic(2650的读本,可惜一直没有读完。。):

http://sistemas.fciencias.unam.mx/~lokylog/p_w_picpaths/stories/Alexandria/Articulos%20Pendiente%20REVISION/Computability%20and%20Logic.pdf 

Notes for Boolos & Jeffrey, Computability and Logic (很遗憾考试前复习阶段才找到有这个)
http://tedsider.org/teaching/510/notes.pdf

证明NPC (也是复习时找到的。。)

http://www.cs.mun.ca/~kol/courses/6743-f07/lec10.pdf 

方弦:计算的极限系列

http://songshuhui.net/archives/70194