今天猫哥给大家推荐一本非常有名的开源书籍:《500 Lines or Less》。
在开始正题之前楼宇自控图形化编程,先介绍一下它所属的系列。 该系列名为AOSA,是“The of Open”的缩写,即“The of Open ”。 目前有四本书,本期主角是最新一本(2016年7月12日出版)。
本系列的初衷是:研究那些优秀的开源项目,从中吸取实践经验的精髓。
前三本书中,研究对象多达50个,其中不乏知名度很高的,如,Git,nginx,Pypy等。
每一章的作者都是开源软件的核心参与者,介绍了项目是如何设计的,为什么这样设计,有哪些主要组件,各个模块如何交互,开发中有哪些突出的成就……
这些书拆解了开源世界中的明星项目。 通过阅读,你可以了解开源作者的思维方式,了解各种疑难问题的解决方案,学会使用现成的轮子。 所谓见多识广,吸取经验,有望“站在巨人的肩膀上”。
然而,这些书主要侧重于建筑和工程。 项目代码量基本都在几万行,对于初级程序员来说实用性不够,理解透彻难度太大。
针对这个问题,该系列发布了一本新书《500 行或更少》,主要关注代码在 500 行或更少的小项目。
专注于编写代码时做出的设计决策和权衡:
简而言之,本书关注一些相对较小但具有代表性的主题,并用不到 500 行代码实现了它们。
书中写了22个项目,下面一一介绍:
1.:A(可视化编程工具包)
使用语言:HTML、CSS、
该项目基于开源工具,提供可视化操作界面,通过简单直观的交互方式实现图形化编程。
2.A(持续集成系统)
使用的语言:2
CI是软件开发中重要的持续集成系统,它保证了新功能的稳定实现。 这个项目介绍了 CI 系统是如何工作的,并尝试构建你自己的 CI 系统,实现一个监听器、一个测试调度器和一个测试运行器。
3. by(分布式系统)
使用的语言:
了解如何为可靠的分布式计算实施网络协议。 为了解决共识问题,使用了Paxos算法的衍生物Multi-Paxos。 通过研究这个项目,你可以接触到很多分布式的知识。
4.: A Fully Build (动态构建系统)
使用的语言:
构建系统(build)用于将源代码生成为用户可用的目标(如库、可执行文件、脚本等),常见的有GNU Make、CMake、Ant等。其中的一种是也是一种构建系统。 该项目实现了一个构建系统,并试图提出解决“动态交叉引用”问题的方法。
5.A Web With(使用协程实现的爬虫)
使用的语言:
其中一位作者是父亲(Guido van),使用标准库实现了一个异步网络爬虫。 (学爬虫的必看)
6.: an in-graph(内存中的图数据库)
使用的语言:
图数据库是一种 NoSQL 数据库,它使用图论来存储实体之间的关系。 本项目介绍图数据库要解决的几个问题,然后实现。
7. DBDB:Dog Bed(狗床数据库)
使用的语言:
用于实现一个简单的键值对存储数据库(key/value),其特点是即使在计算机死机或程序失败时也能保证数据安全。 通过学习本项目,你可以掌握数据库的一些核心特性,如原子性()、一致性()、独立性()和持久性()。
8. An Event-Web(事件驱动的Web框架)
使用语言:Lisp
使用 HTTP 作为通信协议构建一个事件驱动的 Web 框架。
9.A Flow Shop(流水车间调度器)
使用的语言:2
流水车间调度问题是一类寻找最优解的问题。 本项目实现了基于本地搜索(local)方法的流水车间调度器。
10. An - (考古学启发数据库)
使用的语言:
主流数据库是面向空间编程(place-),即在更新数据时,新数据会占用旧数据的空间。 这个项目开辟了一个脑洞,从考古学家的角度设计了数据库,记录了数据的所有变化,更新数据的时候没有删除旧数据。 最终的实现代码只有360行,作者调用了这个数据库。
11.你自己的形象(图片过滤器)
语言:Java
它是一个用Java构建的开发环境。 本项目介绍了它的特点和配置,最终实现了自己的滤镜APP。 功能比较简单,但是实现过程涉及到很多图像处理。
12. A in(翻译)
使用的语言:
它的结构类似于解释器,作者为它命名。 解释器的工作原理在文章中有详细的解释,跟着读起来会很有帮助。
13.A 3D(3D建模)
使用的语言:
3D图形编程,用于渲染图形。
14.A Model(对象模型)
使用的语言:
当今最主流的编程范式仍然是面向对象编程,其核心是对象模型。 编写一些简单的对象模型可以让你更好地理解现有语言的内部工作原理,以及洞察面向对象语言的设计哲学。
15.(OCR,光学字符识别)
使用语言:,, HTML
设计了一个基于人工神经网络 (ANN) 和 Web 客户端的简单 OCR 系统。
16. A in the Real World(真实计步器)
语言:红宝石
计步器的设计依据是什么,如何在现实世界中实施? 本文回答了这个问题,同时也设计了一个友好的Web界面。
17. Same-(同源策略)
使用语言:合金
同源策略(SOP)是当今浏览器中安全机制的重要组成部分,用于控制浏览器中脚本之间的通信。 在本文中,Alloy(一种用于建模和分析软件设计的语言)用于构建可执行的 SOP 模型。
18. A(采样器)
使用的语言:
“抽样”是指从一些概率分布中产生随机数。 本文介绍如何从非标准概率分布中抽样,以及如何计算分布中样本对应的概率。
19. 网络(网络电子表格)
使用语言:HTML、CSS、JS
电子表格是办公软件的必备,其中大家最熟悉的就是 Excel。 本文利用该框架实现了一个简单的Web电子表格,所用代码仅99行。 效果可以看这里:
20、(静态分析)
使用语言:朱莉娅
“静态分析”是指在不运行的情况下检查代码(类型、格式、编码约定等),这通常由各种 IDE 编辑器完成。 本项目使用Julia实现了一些基本的静态分析功能。
21.A(模板引擎)
使用的语言:
“模板引擎”是Web开发中非常重要的一个东西。 它支持用户界面和实际业务数据的分离,可以通过它生成标准的HTML文档。 本文中使用的模板引擎语法是基于仅 262 行的总代码大小。
22. Web(Web 服务器)
语言:HTML
实现了一个简单的网络服务器,主要使用标准库。 此外,它还引入了CGI( )协议,使服务器能够运行外部程序。
所有项目介绍。 可以看到,22个项目中有13个被使用,占比60%。 难怪网上有些不明真相的同学称其为“神书”。
有些项目乍一看,你很难想象不到500行代码就能实现,但经过必要的问题剪裁,并使用合适的现成轮子(开源库、工具、框架、等),可以得到简单的结果。
相比之下,不要认为 500 行以下的项目很容易。 每个项目的作者都有很多背景(连父亲都亲身参战过),文中写的技术背景、实现原理、设计思路都值得仔细研究(很多可能看不懂)理解)。
本书是开源的,可以在官网免费阅读。 还配备了仓库,里面存放了完整的项目代码,目前已经获得了20000多个star。
有中文翻译计划,但翻译人员很少,只翻译了十几篇,翻译质量不敢恭维。
不管怎么说,如此优质有诚意的开源书籍,强烈推荐! 也很适合作为我们猫咪推荐系列的第八期。
最后,附上本书的开篇寄语:
我们希望本书中的内容能帮助您走出自己的领域。
我们希望本书作者的经验能帮助您在自己的编程实践中成长。
相关链接:
预定官网:
英国:
中间: