我对C语言的理解

C 语言是值得学习的,即便现在有很多声音说 C 语言缺乏内存回收以及直接暴露指针的概念是很危险的,而且由于缺乏操作方便的操作符以及各种遍历的库导致写 C 程序很繁琐。从这些方面来说 C 当然是无法比拟 Python 、Java、C# 甚至 C++ 这些后起之秀。值得学习的原因在于几乎所有重要的基础软件都是用 C 写的,这些重要的软件包括操作系统、网络底层、编译器、数据库,几乎所有考虑性能第一的软件都会首选 C 或者 C++ 语言。云风和 Linus 都曾经表示过 C 比 C++ 少了很多心智负担,因而用来起来更加容易,毕竟写严肃的软件不是为了显示自己的智力多强大,KISS 原则依然是编程中的第一原则。

C 是一门以简约著称的通用语言,只拥有很少的特性,这些特性比其它的高级语言更加细粒度。这些特性仅仅包含必要的表达式、控制流和数据接口以及丰富的操作符。C 语言既不是抽象程度高的语言,也不是一门大语言,并且也没有被限制在特定的领域。而且由于 C 的指针的缘故使得它可以做很多别的语言做不了的事,指针的存在使得 C 语言几乎可以深入到机器的任何地方。《UNIX编程艺术》以及很多别的书籍都提到,C 语言是在机器底层上的一层非常薄的粘合剂,只拥有非常非常少的抽象,这导致其能力无限。C++ 试图在贴近机器以及高级抽象上做到完美导致了现在的复杂度。

随着对 C 语言的使用,会越来越认同 C 语言的哲学。

阅读全文 “我对C语言的理解”

GCC Basic

想学好编程C/C++应该是个避不开的,因为几乎所有重要的程序的底层都是用C/C++写的,而绝大多数的开源C/C++都是用GCC编译下 Linux 运行环境中,所以掌握 GCC 的用法是十分必要的,了解 GCC 在 Linux 下编译程序的步骤是非常有必要的。

GCC 是 GNU Compiler Collection 的缩写,这个编译器套件支持多种语言,最著名就是 C 和 C++ 了。别的一些语言像 Java 用的肯定就少了,但是它也支持,还支持 Fortan、Objcect-C、Ada 语言。除了 GCC 之外,GNU 定义一套 GNU Toolchain 来开发应用和操作系统,这些都是非常有必要去了解的,比如 Autotools 中的 Automake、Autoconf、Autohead 就在程序跨平台编译中起到重要作用,我观察在开源的项目中有不少应用到此工具。gdb(GNU Debugger)用来调试 C/C++ 程序非常有用,可以打断点、看到堆栈信息以及局部变量的值,跟在 IDE 中使用调试工具没什么两样,这样就在 print 的基础上多一个有力的工具。而 gdb 的用处还不仅仅在于此,gdb 可以看到 CoreDump 的堆栈信息,能够在程序崩溃时定位到具体的问题,我就因此受益了,前段时间我的棋牌服务器程序总是莫名宕机,通过 gdb 查看 CoreDump 文件的信息发现了是缓冲区溢出导致的。GNU Make 这个不用多说,几乎任何 Linux 下的项目都会手写或者生成一个 Makefile 文件,前面的 Automake 生成的也是 Makefile 文件。还有 GNU Binutils 包括链接(ld)、装载和汇编器这些重要工具。以及 GNU Bison 一个词法生成器,还有就是 m4 通用宏语言。

可以看出整个这一套工具围绕都是怎样编译程序最终生成一个可执行的文件,这套工具链构建了几乎整个 Linux 大厦,并且繁荣了 C/C++ 几十年之久。我很想学好 C/C++ 语言,投资这套东西绝对是有益的。

阅读全文 “GCC Basic”

PHP核心知识

这几篇都是从 PHP 的官方文档摘录过来的,省略了文档中晦涩的部分,如:heredoc,nowdoc 这些内容,类型间转换的一些内容也省略了。由于这几篇是最开始做的笔记,格式上显得有些简陋,不过核心的 PHP 知识都有涉及到。

  1. PHP变量类型
  2. PHP变量、常量、表达式、控制结构
  3. PHP函数
  4. PHP面向对象
  5. PHP名称空间
  6. PHP错误处理

阅读全文 “PHP核心知识”

Vim核心知识列表

这本书是在 Vim 官网上放出的 PDF 书,据官网的说法是这本书是第一本专门讲 Vim 的书。这本书不讲什么:不讲 Vimscript 的语法,不讲怎么制作一个 Vim 插件进行扩展。

这本书主要讲述的是 Vim 的基本用法和概念,看完这本书将了解关于 Vim 的绝大部分操作,理解寄存器、文本对象、宏、可视模式、Ex命令这些概念。同时知道 Vim 各种晦涩的选项的含义。随时随地用 :h 查找 Vim 的文档了解相关的内容,Vim 的文档是一个 Vim 自己定义的专有格式。

我在记录笔记时省略了 GUI 部分的内容,因为我自己在使用 Vim 时基本不会关注这块。如果希望学习 Vimscript 推荐 Learn Vimscript the Hard Way 网站。

  1. vimbook-OPL(1-4) 移动、搜索、标记、多文件
  2. vimbook-OPL(5-7) 窗口、缓冲、可视化模式、块列可视模式、缩进、定位标识符、man、Tags、make编译
  3. vimbook-OPL(8-10) 缩写、映射、排版选项、Ex命令
  4. vimbook-OPL(11-13) 文字排版、自动补全、自动命令
  5. vimbook-OPL(14-16) 命令行参数、备份恢复、挂起和返回
  6. vimbook-OPL(18-20) 文字对象、跳转、算术、改变大小写、正则表达式、寄存器、viminfo文件

阅读全文 “Vim核心知识列表”

Python核心知识列表

通过阅读以下文章将得到关于 Python 编程方面的大部分知识,完全可以开工写实际可用的代码,当然如果需要掌握 Python 的编程范式,还是勤加练习以及阅读更深入的书籍。

上半部分的内容属于零散内容,主要涉及的是对 Python 编程范式的思考,有利于写出更加 Python 的代码。下半部分取自书籍《核心Python》的主要内容,书本身略显繁琐和陈旧,我都对其进行了相应的缩减和更新,以符合最新的 Python2.x 版本内容。

在我写完这些文章之后,在日常的编程中的确会去查找对应的篇幅,但由于零散所以特意集中于此方便查找。当我下次真正需要写严肃的 Python 代码时可以快速把知识捡起来,这就是写笔记的好处所在。


  1. Python项目结构
  2. Python的面向对象
  3. python的模块
  4. PEP 263 Python源文件编码

阅读全文 “Python核心知识列表”