15年11月19日,我打开了一个不常用的邮箱,看到了2天前编辑给我发的邮件,问我想不想写本python相关的书。
那个时候正是我的黑暗期,一个专注写代码几年的人开始做一些管理工作,一方面要学习,要转换思想,一方面心情也不好,每天就是在处理各种杂事,别说是技术进步了,哪怕把事情考虑周全的时间都没有。每天 一个人当成2个人来用,心情也不好。
对于我这种写代码的,甚至都不善于逗小孩笑的程序员,总想给女儿点不一样的礼物。我希望我带给她很多精神上的帮助。看到邮件的一岁建,我就想象女儿长大之后,对其他人说:喏,那是我爸写的书,给我做生日礼物…
就是这2个理由。我决定写这本书。
12月4日,我提交的大纲顺利通过审核。
12月6日,CODE真的开源了,喜大普奔。我靠着情怀坚持做完了。CODE那段时间上了Github Trending,我很欣慰,虽然一切都太晚了。
接下来的20来天里面,我正忙着弄CODE开源的事情,只是在构思这本书都要有什么内容,并没有下笔。我天真的觉得同时可以把2件事做好,但是后来发现时间完全是不够的,所以我停止的CODE的进一步的迭代。K其他的原因是豆瓣已经决定迁移到Github企业版,我一个人并无力改变什么,如果公司自己都不用,那开源的就没有意义了。再则我也受到了厂内很多质疑和嘲讽,心碎。
一些写书的介绍可以看这篇专栏《 写一本技术书籍 》,并建议大家关注这个专栏,近期将有一大波文章要发呢。
专栏有些结论先发出来:
开始写书是在圣诞节左右,结束时间是8月15日。也就是差不多240天。 写这本书能让我挣2W多,嗯,时薪23块钱。现在开始介绍这本书。
谁应该看本书看书名可知这是一本Web开发相关的书,但事实上里面有大概一半的内容其实是Python工程师都能用到的。我对书的受众的理解是:
Web开发者 运维开发 想提高Python技能的开发者 其他想了解Python Web开发的其他开发者需要注意,阅读本书需要有一定的Python基础,因为书中没有基础语法教程,如果你之前没用Python写过程序阅读起来可能会受到影响。
为什么值得看我阅读过大量和Python有关的纸质书和开源图书,渐渐学到了很多控制自己“剁手”买书的方法。我来分析一下为什么你值得拥有本书。:)
为什么要买书来看?我认为不外乎两个原因:有趣和能学到东西。技术书肯定不会太有趣,那么最重要的就是能学到东西。市面上Python相关的书相当多,但是有些内容陈旧或者不符合国情,经常能看到并非开发第一线的人写或者翻译的书,这些书显然价值就要低一些;其次是同质化和向入门级别靠拢,我个人认为市面上关于Python入门或者教授语法知识的书不少,而再深入一点的就很匮乏了。
本书有几个特点: 第一,使用了当前主流和前瞻性的技术,如Docker、Ubuntu 16.04 LTS、Cython、CFFI、Py.test、asyncio、IPython 5.0 LTS等,书中一部分内容是在Python 3下完成的。本书中全部工具都使用当前最新版,能保证在相当长的时间内书中的内容都不会过时。 第二,笔者在国内应用Python最大的豆瓣网做产品开发,一直在第一线写代码,大量例子和经验都是根据实际经验出发的。 第三,笔者非常关注Github和Python社区,会第一时间了解到新的趋势和思想,并在书中体现。举个例子,代码检查工具pep8已经在Guido van Rossum的要求下改名为pycodestyle了。
叔本华在《人生的智慧》中说过一段话,大意是人要么庸俗,要么孤独。笔者认为这个道理在阅读上面也成立:读什么样的书,就会逐渐成为什么样的人。本书提供了很多笔者在其他书中没有看到过的思考方式和Python的用法,这也是本书存在的意义。
本书涵盖的内容 第一章.「初识Python Web开发」将回答Python工程师关心的如下3个问题:
为什么应该选择Python作为Web开发语言? 在Python 2和Python 3之间如何选择? 在这么多的Python Web框架中哪些是主流的,它们的特点是什么,该如何选择? 第二章. 「Web开发前的准备」 环境的准备,以便读者能够使用Vagrant或者Docker提供的Ubuntu环境运行书中的例子。 介绍包管理工具pip及一些高级用法。 实现PYPI的缓存代理和完全镜像。 使用virtualenv及其扩展实现虚拟环境管理。 第三章. 「Flask Web开发」 通过多个应用例子了解Flask框架使用的一些精髓。 介绍目前最流行的模板引擎Jinja2和Mako的使用,以及实践总结和做选择时的建议。 通过一些例子让读者熟悉mysqldb的使用,并演示如何和Flask应用集成。 通过源码帮助读者理解Flask的上下文设计,并演示大型应用中使用上下文钩子的例子。 通过一个真实的案例学以致用。先分析需求,接着从零开始实现一个文件托管应用。 第四章. 「Flask 开发进阶」 Flask的信号机制。利用信号可以实现一部分的业务解耦。 Flask的一些常用、主流的扩展,如Flask-Script、Flask-DebugToolbar、Flask-Migrate、Flask-WTF、Flask-Security、Flask-RESTful、Flask-Admin和Flask-Assets。每个扩展都包含至少一个完整的真实例子。 Flask的依赖库Werkzeug的使用。 第五章. 「REST和Ajax」 帮助读者理解REST。 学习如何设计一个合理、好用、符合标准的API。 使用jQuery和fetch分别完成一个前后端交互的Ajax应用。 第六章. 「网站架构」 了解WSGI协议。 主流的Python应用服务器的特点和使用方法。 使用Nginx和Python应用服务器部署Flask应用。 介绍豆瓣开源的Libmc和豆瓣常用的缓存使用方式。 举例说明Redis的几个应用场景,包含使用MessagePack进行序列化和反序列化工作。 介绍使用NoSQL的原因和场景。 使用pymongo,并用Mongoengine重构文件托管服务的模型。 MongoDB索引、高可用和分片的经验。 以豆瓣的基础架构为原型,展示主流大型网站的架构模式,并详细介绍相关重要模式,以及Web前端的性能优化经验。 第七章. 「系统管理」 使用Supervisor管理进程。 使用Fabric进行应用部署。 通过部署Redis了解配置管理工具SaltStack和Ansible。 使用Psutil获取系统CPU、内存、硬盘和网络等信息。 配图演示Sentry的安装和收集错误信息的效果。 使用StatsD、Graphite、Diamond和Grafana搭建Web监控,并介绍常见的运维监控工具及其主要应用场景。 第八章. 「测试和持续集成」 介绍和使用Python内置测试模块unittest和doctest。 介绍和使用第三方测试工具py.test和mock。 深入持续集成,并通过Buildbot实际地对一个Github项目进行集成。 第九章. 「消息队列和Celery」 使用Beanstalkd。 解释AMQP,深入理解RabbitMQ,介绍RabbitMQ插件系统,RabbitMQ集群的故障转移方法等。 介绍Celery的架构,运行起一个真实的应用,在Flask应用中使用Celery等功能。 深入Celery,介绍Celery的依赖及独立用法、Worker管理、监控等高级功能。 笔者总结的一些Celery实践经验。 第十章. 「服务化」 为什么需要服务化。 使用Thrift对文件托管服务改造。 介绍豆瓣服务化实践――PIDL的起因、基本原理和基本架构。 第十一章. 「数据处理」 使用纯Python代码实现MapReduce功能。 配置DPark环境,深入了解DPark,演示如何用DPark对业务日志进行PV和UV的分析。 通过发送带有样式和附件的邮件,创建包含带样式和Sparkline图表的xlsx文件,以及创建包含多工作表和4. 图表的xlsx文件这三个有用的例子,展示笔者对数据报表的理解和运用。 基于数据报表中的数据,用Pandas进行分析和展示。 第十二章. 「帮助工具」 解释为什么应该使用IPython,配置IPython、调试复杂代码、并行计算等。 介绍Jupyter Notebook的用途,配置Jupyter Notebook,在Notebook里使用Echarts、自定义javascript和CSS样式等高级功能。 介绍常用的获得linux服务器相关情况的工具。 介绍性能测试工具Boom和tcpcopy,并演示如何搭建一个tcpcopy环境。 介绍分析Python程序性能瓶颈的工具。 演示如何定制基于IPython的交互解释环境。 演示豆瓣东西在2014年双十一进行的Jupyter Notebook实践。 第十三章. 「Python并发编程」使用多线程、多进程、Gevent、Future和asyncio这五种方式实现一个爬取微信公众号的抓取。其中还揭秘了一些写爬虫的经验。尤其是告诉读者如何选择并发方式。
第十四章. 「Python进阶」 介绍errno、subprocess、contextlib、glob、operator、functools、collections模块的使用方法。 笔者对《Python之禅》的理解。 笔者总结的一些Python实践经验,并列举了两篇最佳实践的文章。 介绍一些Python 3的有用功能,并移植到Python 2。 通过真实的例子演示如何使用CFFI/Cython编写Python扩展,并对比二者的执行效率。 演示使用PyObjC发送通知的例子,让开发者收到的通知更有针对性。 第十五章. 「Web开发项目实践」 介绍笔者的Web项目开发流程和经验。 介绍开源的代码质量保证工具,以及豆瓣的一些质量保证实践。 使用AST对真实的业务逻辑做静态检查,实现业务流程的检查。 谈谈代码评审的意义和实际经验。PS: 本书还有其他惊喜,我就不打广告了。感谢大家支持,也希望通过本书能让你有所收获。