陈颂光
全栈工程师,承接从编译器到网站的各类软件开发与咨询,也可以聊历史哲学。
关注我的 GitHub

CSS概览

css web

CSS(层叠样式表)用于指定外观,最常用于指定网页的外观,但也可用于指定图形用户界面的外观(如Java FX)等等。

Git版本控制系统概览

git 版本控制

Git是近年比较流行的分布式版本管理系统。

Emacs编辑器概览

emacs 编辑器

Emacs和vi应该是unix中最负盛名的编辑器了。编辑器之神Vi自然名不虚传,vi用户能做到眼球扫到哪光标就同步到哪的境界,vi有模式且使用大量单字母快捷键,可以飞快地录入。不过,vi的用法与现在流行的GUI编辑器差别太大,初用时往往搞不清处于什么模式,还有就是必须记住一些快捷键才能用。相比之下,emacs的学习曲线比较平缓,你击键的速度可能不及用vi时,但Emacs的一个键往往可完成更复杂的工作。emacs最为强大的地方在于可扩展性,通过Emacs lisp脚本几乎可定制Emacs的的每个方面,现在已经很多现成的包可用。

m4宏语言概览

m4 unix 编程语言

m4是一个宏处理器,虽然你可能没听过它,但你很可能无意地用过它,例如autoconf工具就依赖这种宏。

JSON概览

json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。很多现在与服务器交互的api者基于JSON。

Scheme概览

Scheme 程序设计语言

Scheme语言是一种追求一致性的语言,拥有极简的语法,精晰的语义。Scheme语言和其它Lisp家族语言一样最初被用于人工智能领域,自1975年由Guy Lewis Steele Jr.与Gerald Jay Sussman发明以来,除用作教学和研究外,还被用作扩展语言(类似Microsoft Office中的宏),GNU项目正打算用Scheme作为各子项目的扩展语言并为此开发了一个解释器guile。Harold Abelson, Gerald Jay, Julie Sussman的《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs)长期在许多家大学被作为本科生第一门课的教材,低起点但深刻而全面,是一切编程教材的典范,极力推荐所有读者读读这本书。我仍然坚持,如果没有要立即投入工作的迫切性,Scheme是第一门语言的首选,因为它简单易学,可以集中于程序设计本身而不被次要的细节干扰。关于scheme的更多资源见http://www.schemers.org/,可找到各种标准、教材、软件等等。Scheme也有一些方言,以下我们介绍R7RS小语言标准。

TeX排版概览

tex latex bibtex 排版

TeX是Knuth, Donald Ervin(高德纳)为排版《计算机程序设计的艺术》而设计和实现的一种排版系统,用于排版书籍——特别是包含很多数学公式的书籍。TeX有着优秀的出版级排版算法和强大的可扩展性,熟练的用户可以轻自动化各种编号、交叉引用、目录、索引、注释等等,但也不时为迷惑用户。

用Graphviz自动布局各种图

graphviz

dot是一种高层的画图语言,用dot画图只用给出结点和边,就像图论中描述图一样,然后由程序自动对结点和边进行布局,不用像在低层的画图语言(如Troff与TeX常用的子语言)那样要具体到指定坐标。graphviz极大地节省了画图所需的时间,而且自动布局的效果往往比人手更好(特别是与我这种不会画画的人比)。如果能推广它,将鼓励人们更愿意用图表达思想,使世界更美好。关于dot的更多信息见http://www.graphviz.org/

Bison解析器生成器概览

unix yacc bison

Bison是GNU的一个LALR(1)(实际上甚至支持任何每个串只有有限种的解析方式的上下文无关语法)解析器生成器,与yacc兼容。只要写出语法和,Bison支持生成C/C++/Java的解析器代码。

正则表达式概览

unix java 正则表达式

一个正则表达式是一个描述了一个字符串集合的模式,在文本处理中是极为重要的工具。

Markdown概览

markdown html 排版

我们有很多基于纯文件的排版语言,从Roff、TeX、HTML到各种wiki(如dokuwiki和mediawiki)。Markdown和各种wiki语言比较类似,都用于自动生成HTML网页,并让排版前的源文件保持一定的可读性。近年,由于Github、Gitlab和一些博客等网站把markdown作为首选的排版语言,markdown有一定的流行度。

BASH概览

bash shell unix 程序设计语言

BASH(GNU Bourne-Again SHell)是一个与 sh 兼容的命令解释程序,可以执行从标准输入或者文件中读取的命令。 Bash 也整合了 Korn 和 C Shell (ksh 和 csh) 中的优秀特性。现在很多GNU/Linux都用Bash作为默认的shell,因而在系统管理方面bash脚本仍很常用。

Groff排版概览

groff troff 排版

groff是roff排版系统现在最常用的实现,其它实现有troff、nroff、ditroff等等。尽管历史悠久,roff当前还在广泛使用中,例如,UNIX系统的man手册页、很多软件书籍和标准是用roff来写的。一个 roff 排版系统包含一个可扩展的文本格式化语言和一系列程序用以打印和转换为其他文本格式。 传统上,它是Unix的主要文本处理系统;现在,每个类Unix操作系统仍然附带一个roff系统作为核心软件包。roff在文本设备上的输出效果仍然是无可比拟的,并且,与其他自由的排版系统相比,它的图形输出也不差,甚至强于很多商业的系统。groff支持html、pdf、ps、dvi等输出格式,也可以通过X11查看器在屏幕渲染。

GAWK概览

unix gawk

AWK语言是一种介于sed与perl之间的语言,同样是文本处理的有力工具。与sed比,AWK有丰富的控制结构,因此易用一些但没有那么紧凑。与perl比,AWK的功能和库都较缺乏,只针对表格式文本,适用面较小。

了解GNU/Linux系统

gnu linux 操作系统

我们讨论的是GNU/Linux系统,而不只是Linux内核。

Linux下常用命令概览

gnu linux 操作系统

命令是类Unix系统的一个重要接口(C函数是更低层次的一个,但命令通常是第一选择,Unix传统认为一行shell胜万行C),使用Unix应当了解一些命令,以便把它们组合起来用。Unix有很多命令,不用一一记住,但应该知道什么样的任务有命令可用。Unix命令的用法大都是规则的(有点经验一般能大致猜到),同时Unix有方便的帮助系统,需要时查阅即可。

sed概览

unix sed

sed是一个流编辑器,只过输入一遍,用于过滤和转换文本。

Prolog概览

Prolog 程序设计语言

Prolog作为一种逻辑型编程语言,对于大多数程序员而言大概是最异类的语言。Prolog被奉“写做什么而非怎么做”的所谓的第四代语言(声明式语言)而曾获寄予厚望,Prolog曾与Lisp并列为两大人工智能语言,有美Lisp欧Prolog的说法。虽然人工智能在上世纪八十年代后淡出加上Prolog自身的硬伤而随之失色。今天,Prolog的影响还远不如Lisp,不仅未能像Lisp在其它领域杀出血路,而且除SQL(和Erlang一点点)外对其它语言影响甚微。然而,Prolog在某些试验性场合仍有其方便之处,而且了解Prolog对开阔眼界大有好处。

Tcl概览

tcl 程序设计语言

Tcl的设计理念与shell类语言很接近,都是基于文本的动态语言,甚至比bash之类语法更简单。除了字符串和文件处理方面的shell传统强项外,Tcl的事件机制又方便了打造图形用户界面和网络应用。Tcl适合用于快速原型开发、测试、包装界面和粘合,还有嵌入式系统的应用。

理解可用性

可用性 方法论

一个优秀的软件不仅要有用户需要的功能,还要让用户能用上它,否则只是徒劳。正如对于混乱的代码应该重写成干净代码,而不是加上大段注释一样。用户界面也应力求容易使用,最好是看一下就知道怎么用,功能都放在找到的地方,每个操作均应有适当的反馈让用户知道后果(但反馈应当是非模态的以免妨碍用户工作),而不是加上厚厚的使用手册或使人打瞌睡的培训课程。