Yihulee's world!

========>易燃又美味!

2015年下半年总结

1 读过的一些书

这半年,恰好有一些空闲的时间,恶补了一些东西,读了下面的一些书,书不多,大概30来本。

类别 书籍
c/c++ <泛型编程与stl> <stl源码剖析> <C++标准程序库> <apue>
编程 <The practice of programming> <htdp> <sicp> <The Little schemer> <算法导论>
网络 <tcp/ip卷详解一> <unp> <计算机网络 自顶向下方法>
计算机系统 <csapp> <编码的奥秘>
数据库 <数据库系统概念> <Mysql技术内幕 innodb存储引擎> <数据库设计step by step> <Mysql必知必会>
python <python简明教程> <python源码剖析>
技术 <git教程> <Head First HTML与CSS> <正则表达式必知必会> <跟我一起写makefile>
杂书 <浪潮之巅> <黑客与画家>

还有一些杂七杂八的书,有的只看了一部分,懒得列出来了。其实这些东西,本科的时候就应该弄完,不难,但是非常有必要读。

看完了这些书,突然觉得,其实读一本好书,是学习知识的最快最好的方式,相比较而言,看视频倒是要慢上不少。这学期的理论堆积得倒是挺多的,实践的方面倒是要少了不少。下学期的话,没事的话,开始弄编译器了。

2 眼界的一些变化

这半年,自己的视野也随着读书的增多而变得宽广了起来。随便举几个例子。

2.1 编程语言之争

大学四年用的多的是C/C++,然后自己狭隘地认为,C/C++优于其他的一些语言,特别是JAVA,不知道为什么,编C++的人总看不起写JAVA的,我承认,之前我也有点,原因嘛,JAVA貌似太弱了,泛型搞不过C++,效率搞不过C++,JAVA存在的意义嘛,就是降低编程的难度,拉低编程的准入门槛。

我想广大的C/C++程序员或许对JAVA都有一点莫名的高贵感吧。C++语言才是高手的语言,其他语言,你们都弱爆了。这半年,我逐渐认识到,有这种思想的人,大概是中了固步自封的毒了。以偏概全,眼界狭窄,是这种观点的错误之处。我在大学四年压根就不知道有lisp,hsakell之类的语言,压根不知道还有所谓的函数式编程,甚至连动态语言这个东西也仅仅停留在概念阶段,在我的眼里,所有的编程语言应该都和C长得差不多的样子,事实上,在本科阶段我所见识到的东西里,这个观点绝对正确。你们可以看到,我本科接受到的教育有多么狭隘。

你用什么语言不重要,重要的是你的思想。

我以前一直将这句话奉为圭臬,可是我发现,这句话存在着一些问题。用什么语言真的不重要吗?那你为什么不用机器码呢?不用汇编呢?我想说的是,使用什么语言很重要,因为这些语言会影响到你思维的方式。一个很简单的例子,在汇编中压根就没有递归的概念,你能想象在C中不使用递归能编程?同时,在lisp之类的语言中,一个函数可以很轻易地根据输入参数的不同而返回不同的函数,你用习惯了这些特性之后,你能忍受C中函数不能动态产生的事实?

另外还有一点,在C++之类特别复杂的语言之中,即使是表达及其简单的思想,新手也往往会由于过度复杂的特性而淹死在语法的深海里,所以C++就一定不是一门入门的语言。而JAVA,python之类的语言是非常时候入门的。Scheme也不错,国外的书htdp和sicp用的都是scheme,有兴趣的读者真的可以去学一学scheme,虽然在工作中,你几乎没有可能用到这个东西。

很久以前,我看见过这么一句话。

底层很重要,汇编语言要学好。

这句话本身没有什么错误,但是只是对于一部分人来说的,准确地来说,是对于底层的人来说的。如果你作为一个应用开发人员,你不会汇编问题也不会很大。计算机几十年的发展实在是太快了,人们很难做到从底至上,每一层都精通。这样耗费的精力是十分巨大的。

对于底层,上层的开发人员只需要了解一些即可,不需精通,我们要感谢那些构建抽象的人们,他们从底层不断抽象,最终形成了我们现在好用的上层。先辈们做的工作,就是为后来者奠基,屏蔽了底层,上层直接使用下层的服务。抽象带来效率的巨大提升。

2.2 关于课程

其实网上还是有很多的优质的课程视频的,很多讲得比自己大学里的老师讲得还好(总之,我对大学里的课程水平表示很担忧,可能是我读的学校差吧,上课什么的,我某一天发现还不如自己去看书呢,在这里,一门操作性很强的课程往往到了最后会因为考试的缘故变成一门文科课程,在这里,多半的时间我在自学),关键是自由,什么时候听课,什么时候不听,自由随意。

慕课,coursera都是不错的选择,有些大学甚至会有免费的公开课,推荐的是国外的课程,所以英语很重要。

Comments