2018年读书计划

又到了新的一年,新的读书计划也要规划起来了。

C++

基础知识方面的书,主要是《C++ Primer》和《深入探索C++对象模型》,提高的书籍就是《Effective Modern C++》了。这三本书都看完了,但是觉得目前还都是理论知识丰富,实战经验比较少。新的一年要多加强项目经验。另外在2018年想要看完的书包括《C++ Concurrency in Action》和《Linux多线程服务端编程》,加强一下多线程编程方面的知识。我看现在大多数库都支持多线程了。另外还有异步编程的概念,现在也逐渐流行起来,微软在C#里面也早早的在2012年就加入了async和await关键字。

还有一个我觉得自己非常欠缺的是对于STL的了解,想要把Bjarne Strostrup的《C++程序设计语言》第二部的STL库讲解再好好学习一下,还有侯捷的《STL源码剖析》也可以作为参考,不过他这本书都是基于c++98编写的,没有移动语义和lambda表达式什么的,有些落后了只能作为参考。

机器学习

虽然说看完了《数字图像处理》这本书,机器学习相关的书籍还没有怎么看。不过我觉得机器学习应该也只是一阵热潮罢了,我也不是太感兴趣,我已经不想投入时间进去了。图像处理方面,还是要加强一下OpenCV的学习。

操作系统

看完了《UNIX环境高级编程》,只能说是囫囵吞枣似的看完了,了解UNIX的系统调用大概是怎么回事,系统调用遵从的POSIX和SUSv4规范是怎么回事。可以找个时间再把整个知识链再梳理一下,把一些关键的知识点比如poll和epoll牢记在心。不过我觉得对于这么庞杂的一千多个系统调用,没有长时间的项目经验,还是蛮难掌握的。我打算2018年把《Linux设备驱动开发详解:基于最新的Linux 4.0内核》这本书看完,这对于嵌入式设备开发很有帮助,我自己还是很想做一个驱动工程师的,软硬件都懂一些。

网络

现在对于网络方面的知识特别感兴趣,因为现在是一个网络无处不在的世界。网络方面最有名的,就是《TCP/IP Illustrated》这本书了,主要是讲的TCP/IP协议栈,就是其中的每个具体的协议都剖析一遍,然后把整个互联网所用到的基础设施都讲解一遍。这些应该是关于互联网的最底层最基础的知识了,打牢基础才能去创造更多新东西,去做更多新东西。

另外还有《UNIX网络编程》这本书,告诉你UNIX是如何进行通信的,这个可以再《TCP/IP Illustrated》这本书看完以后再看。然后是掌握一下microsoft/cpprestsdk库,目前我已经可以用这个库做一个简单的http服务器了,还想用这个库看能不能对公司的网络进行爬虫一下作为项目经验,哈哈。

游戏

2018年又是大作年,今年4月的战神,还有秋季的Red Dead Redemption 2都是必玩之作,今年还能期待一下Bethesda是否会公布下一作The Elder Scroll呀。当然除了玩游戏,今年还想把好几年前就像看的《Game Engine Architecture》看完,了解一下游戏引擎到底是由哪些部件组成的。

历史

想要把《The Cambridge History of China》的第12、13、14卷看完,讲的是1912年中华民国成立到1982年改革开放的历史。了解历史可以知道国家是如何一步一步发展过来的,目前到达了什么样的状况,宪政发展如何,市场经济如何。还想要把南京大学历史系教授高华写的《红太阳是如何升起的》看完,讲述了中共的各种整风运动的源头在哪里,包括现在的监察委也算是新时代整风运动下的产物,免不了以后还是要整风的,怎么整都还是当你年延安的那些方法。

其他

目前对于工具链方面,我已经没有什么障碍了。我自己半年前也写了一篇博文总结一下自己的工具链方面的知识。目前写CMakeLists.txt还是得心应手的,用VIM也用得很自然了。正像别人说的,当你学会了VIM,你再任何文本编辑环境下,都想用VIM的编辑环境,因为实在是太方便太省时间了。

更新

2018/07/02更新:最近半年收获颇丰,做了个基于NI的DAQmx的数采,在浏览器中用Three.js渲染模型,然后用数采得到的数据,驱动模型运动的小demo。掌握了下如何构建服务器和Websocket协议的通信。其中看完了《图解TCP/IP》了解了TCP/IP协议栈里每个协议的作用,再看《图解网络硬件》加深每一层次的交换机是如何工作的,路由器的工作机制。接下来还是想要把《Computer Architecture: A Quantitative Approach》这本书读完,理解目前的芯片发展情况和未来计算机架构的趋势,对于程序设计也很有指导意义。《Linux设备驱动开发详解》看完了,感觉主要就是个模型的问题,设备、总线和驱动三者之间的关系,都有相应的函数关联了起来,感觉掌握了模型难度就不是太大。

2018/11/23更新:前天到参加GTC China听了Jensen Huang的主题演讲,突然又对机器学习有了热情。传统的编程是给定数据和规则输出结果,而机器学习是给定数据和结果输出规则,因为这个世界上有很多东西太复杂,即使作为工程众多工程师的参与,也是很难给出精确的解决方案的,比如图像语音识别,不可能针对每个图像做一个特定的程序,给出100%的分类。机器学习产生的规则,被利用进行推理时产生的结果是概率的,因为规则不是特定针对每个具体案例的。这是计算机系和统计系两个互相瞧不起的系别的统一,真是很有意思。

结束语

总的来说来说,想看的书就是下面这些:

  • C++ Concurrency in Action
  • Linux多线程服务端编程
  • Linux设备驱动开发详解
  • TCP/IP Illustrated
  • UNIX环境高级编程
  • Game Engine Architecture
  • The Cambridge History of China
  • Computer Architecture: A Quantitative Approach