我对编程的想法

大半年没有写任何东西了,这段时间发生了很多事情,对编程的想法也在发生着改变。以前是怕编程,怀疑自己不是编程的那块料,毕竟我从来没有做出过任何值得称道的项目。内心深处因为大学没有扎扎实实学过任何一门编程的课,总有那么一个障碍。看到这些复杂的项目觉得自己肯定写不出来,也搞不定。

改变是从学习完 C++ 基本的内容开始的。在学习 C++ 之前,我觉得这个东西极其的神圣,学会了肯定就什么都会了,对于会 C++ 的人有一种发自内心的觉得不可超越。直到学习完之后才发现,这东西并不是不可为,并不是学不会。而且由于我极其认真地几乎将整本《C++ primer》都翻译成了中文,去掉了其中解释性的句子,只保留了最简单的描述以及复杂点的解释。说实话,C++ 语言的各种用法确实太多了,而且需要注意的坑也太多了,即便是这样学完了之后,如果要真的写点东西的话还是有非常多地方需要深思,免不了要多翻一下自己的笔记。

然而我已经知道 C++ 是怎么回事了。虽然肯定达不到精通的地步,但想要继续深入的话也是完

阅读全文 “我对编程的想法”

摆脱肤浅的学习

学习必然是一件苦差事,没有捷径可走,不要妄想在非常短的时间内有非常大的提升,学习必然是一点一点积累起来的,唯独勤奋可以达成目的。

想要达到专家水平需要非常长的时间,预计是十年,而且这十年的学习不是简单的重复而是刻意练习(deliberative practice)。刻意练习的关键在于:不仅仅是一遍遍重复去做,而是用刚好超出你当前水平的任务来挑战你自己,尝试它,在做的过程中和做完之后分析你自己的表现,然而修正错误。这样重复,然后再重复,直到生命的尽头。这其中并没有什么捷径。

真正的专业是需要一生的努力,想要在任何领域做的出色只能通过一辈子的劳作;没有更低的代价。在绝大多数领域即便是最有天赋的人也需要非常多的时间来达到最高水平的表现。

具体到编程领域

  • 对编程感兴趣,做这件事是因为乐趣,确保这件事足够有趣以至于我们愿意花10年的时间来做这件事;
  • 真正地去编程:学习最好的方式是做中学(learning by doing),只有精心设计的努力才能提供一个人的技能水平,最有效的

阅读全文 “摆脱肤浅的学习”

C++ Primer CH19 大型工程的工具和技术

19.1 控制内存分配

当对内存分配有特别需求的时候可以重载 new 和 delete 操作符来控制内存分配。

19.1.1 重载 new 和 delete

重载 new 和 delete 操作符的方式与重载其它操作符的方式有非常大的不同。当使用 new 表达式时会依次发生三件事:1. 调用库函数 operator new 或者 operator new[] 来分配足够的裸的没有类型的内存以存储对象或数组。2. 调用构造函数构造对象。3. 返回指向这个新分配构建的对象的指针。

当使用 delete 表达式时将发生两件事。1. 调用析构函数进行析构;2. 编译器调用库函数 operator delete 或者 operator delete[] 来释放内存。

定义自己的 operator new 和 operator delete 函数可以 hook 掉内存分配过程。即便是库中已经包含了这些函数的定义,我们依然可以定义自己的版本,而编译器并不会抱怨说重复定义。反而,编

阅读全文 “C++ Primer CH19 大型工程的工具和技术”

C++ Primer CH18 异常、名称空间和多重继承

C++ 可以处理的问题的范围十分广泛,从只需要一个程序员在几个小时内就能解决的小问题,到需要涉及到多个系统协作,有着百万行级别的代码量,并且需要几百个程序员在多年时间内参与的大问题(如:操作系统)。本书前面章节介绍的内容同时适合于所有这些跨度的问题。

语言还包括一些针对大的复杂系统而设计的特性。这些特性包括:异常处理(exception handling),名称空间(namespaces)和多重继承(multiple inheritance),这是本章将阐述的内容。

大型规模编程(Large-scale programming)对语言的要求要远高于小团队开发的系统对语言的要求。这些要求包括:

  • 在独立开发的多个子系统间处理错误;
  • 使用独立开发的库而不产生名称冲突;
  • 对更加复杂的应用概念进行建模;

本章将讲述针对以上需求而设计的语言特性:异常、名称空间和多重继承。

18.1 异常处理

异常处理(Exception handling)允许独立开发的程序部分可以在运行

阅读全文 “C++ Primer CH18 异常、名称空间和多重继承”