游戏、历史、电子

0%

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

C++

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

阅读全文 »

工欲善其事必先利其器。在理解了操作系统、编译原理等知识之后,选择自己的代码编辑器以及掌握构建工具、shell脚本、编译器、调试器、性能分析器等工具就是重中之重了。我选择了以vim为基本编辑器,以CMake为构建工具,然后在不同的平台上选择不同的shell脚本和编译器。

之所以有这样的选择,主要是因为在服务器端编程,很多情况下你没有办法物理上接触到服务器的,只能通过ssh方式连接到服务器。这也包括Windows服务器,在Windows10之后有了openssh支持方便了很多。所以后续阅读中请以ssh连接为背景来理解这些工具。

vim

关于vim的使用方法,我就不着重介绍了,网络上有很多的资源。我主要介绍一下自己的配置方法。

我这里只想提下如果你的vimrc配置文件写错了,在进入vim时候会出现一片空白通知你配置文件错误,但是又没有详细说明。这时候用vim -D进入开发者debug模式,可以逐行运行配置文件中的语句,对于查错非常有帮助。还有提醒一点是ssh连接到Windows 10后,默认cmd的编码方式不是utf-8,要通过命令chcp 65001切换,这对于后续工具使用非常重要。

阅读全文 »

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

C++

我已经看完了《C++ Primer》,看得很艰辛。面向对象编程的概念虽然很简单,但是里面的细节太多了,而Primer这本书过于讲究所有的细节,所以书看得特别慢。我觉得新手应该先看《A tour of C++》这样的讲究全局的书,然后在看《C++ Primer》这种事无巨细的百科全书。也看完了《深入探索C++对象模型》,这本书虽然是1996年的,但是将C++中的对象在内存中的分布,构造函数和析构函数,各种继承方式的实现,还有最重要的多态实现方法都给读者剖析出来了。其实这些东西本质上来说,就是学习具体C++编译器的过程,所以我想在新的一年里,将《程序员的自我修养》和《深入理解计算机系统》两本书好好读一下。这两本书,将的都是编译原理和操作系统的书,而且将两者结合起来看,让你明白从你手敲的代码到最后的二进制,到程序如何加载到内存,都给你剖析出来。我觉得要做到这个份上,才能够熟练地使用C++。

阅读全文 »

总结一下常用的一些库,会不定期更新下去。这些库可以通过github下载,然后自行编译。也可以通过一些包管理器的方式安装,尤其是推荐微软推出的vcpkg能够下载源代码自行编译,对于大多数库的配置来说还是非常的方便的。有一些很不错的小技巧也总结在这里便于自己查找。

阅读全文 »

C++的学习曲线是漫长的,不仅仅是因为其支持的范式多,知识点较多。还有一个很重要的原因是陷阱比较多,由于机制复杂导致了机制之间会有相互制约。最近半个月又重新浏览了一遍C++ Primer,把自己没有掌握好的一些知识点重新复习了一下,收货颇丰。这篇文章我会一直更新下去,直到我认为我对C++的理解很全面了。

技术之外,想多谈谈一些其他问题。学习C++的初衷不仅仅是因为兴趣,也是想要自己有一门技术不容易失业。我觉得推动C++发展的一个是九十年代如日中天的微软,这样有影响力的公司的重视,依托于Windows上MFC,COM技术发展,工业界的需求使得C++快速发展;另一个是2000年以后互联网的发展要求高性能的服务器,对C++也有了更多的需求。而学习C++之于我自己,可以更好的面对工作,多一个窗口多一份视野;在工作之中,我也看到了工业界对于计算机处理的大量需求,这也可以让自己与别人相比,更突出一些。

然而要对计算机有更深层次的理解,绝不会是对于具体语言或者语言之上的各种高大上的框架的认识。而是在于计算理论,状态机,CPU架构,操作系统等的认识;我自己也很想在学好C++能写出一些满足工作需求的软件之后,更加注重对于计算本质的理解,这是生而为人对于世界最原始的好奇。世界之复杂,技术之外别有洞天;也要去多看看,多理解技术之外的各种社会现象。(2018/03/30更新)

组成结构

C++是兼容C语言的,强类型的高性能编译性语言。我觉得编程语言可以由类,函数,表达式,语句和高级特性五个部分组成。高级特性包括比如模板,lambda表达式之类的。

内置数据类型

内置数据类型是整个C++语言的基石,内置的int,short,long,double,float,char,bool其实是对于内存的一种映射过程,是构成其他任何类的最底层抽象。

阅读全文 »