Pegasus' Blog
保持一颗好奇心

开了俩 vim 和 Python 的知乎专栏

First, solve the problem. Then, write the code. - John Johnson

很久没有更新自己的博客了(还是大学的时候接触 nodejs 用 hexo 搭的),最近编写和录制了一些 vim 和 python 的视频教程,感兴趣的可以看看,奉上链接。自己的博客看的人比较少,没有做过 SEO。放在专栏里看到的人会多一些。

Python 项目工程实践

动态语言一时爽,代码重构火葬场

随着公司产品周期迭代和业务发展,使用 python 这种动态语言开发慢慢也暴露出一些问题,比如性能低、易出错、难重构、难维护等。 网上大部分是技术相关文章,工程相关的比较少。笔者就之前几年写 python 和维护 python 后端项目的经验简单介绍下如何提升 python 项目工程质量。

《Fluent Python》杂记

Python is a language for consenting adults. —Alan Runyan

重新看了下 《Fluent Python》,依旧还是很多东西没能消化完。简单记录下吧

知乎是怎么运行 tornado web 服务的

You build it, you run it. - Werner Vogels

现在很多互联网公司采用了微服务架构,将业务拆分,保持代码仓库尽量精简。同时一个小团队负责开发和维护一个服务,提升了开发和部署效率(软件本身的组织结构与软件团队的组织结构式一致的,即康威定律)。 知乎很多业务后端采用了 python web 框架 tornado,都是开源的、成熟稳定的技术(虽然笔者更喜欢 flask 全家桶)

From Vim To Neovim [视频]

vim

Think more, type less. Aim for minimalism, fewer states, less mutability, and just enough code for the known, relevant parts of the problem.

最近一直忙着写公司业务代码(大家应该发现知乎可以上传和观看小视频啦^_^),很久没更新博客了。不过笔者最近从 vim 迁移到了 neovim,花了几个晚上的时间修改配置文件,现在已经可以全面在 neovim 下写 python 了,就简单介绍下 neovim 吧。以前使用 vim7.4 还是有一些比较X疼的地方的,比如复制粘贴问题,大文件卡顿,一些插件会导致 vim 被 freeze 等,切到 neovim 之后使用体验比以前好了很多,没白瞎我几个晚上修改配置(之前自定义了很多快捷键也安装了很多插件)。

编写简单的 python web 框架

Reinventing the wheel is great if your goal is to learn more about wheels.” – James Tauber

Python web 框架众多,大而全的 django,小巧的 flask,支持异步的 tornado 等,可能是因为用 python 实现个 web 框架太简单了吧,python 的框架层出不穷。 下边一步步介绍下一个 web 框架的基础组成,以及如何写个简单的 web 框架(使用 python3),从而了解下 web 框架的工作原理。

《The Art of Readable Code》

代码的写法应当使别人理解它所需的时间最小化。- 可读性基本定理

刚工作那会总喜欢追求一些代码语法糖,感觉有奇淫技巧的代码才是牛逼的。真正开始做项目后才发现代码可读性是如此重要,最近 code review 也因为一些命名问题修改过代码(英文词汇匮乏啊。。。)重新回顾下这本书,争取写出更易维护和可读性高的代码。

重读《代码大全》

软件构建的核心就是管理复杂度。 - 《Code Complete》

最近笔者加入新公司,又开始一段新的程序员之旅。每次最头疼的还是上手已有的很多代码仓库,看别人的代码一直是一件痛苦的事情(理解最初的编程意图是最难的问题),不过好处就是又学到了很多新东西,又了解到自己有多菜。最近又重新翻看了《代码大全》,摘抄了一点东西。如果说软件工程领域非得让我推荐一本书的话,无疑是这一本大而全的代码百科全书(虽然有点陈旧),汇集了很多编程技巧和工程领域的研究成果,很有启发,也正是这本书让我在编程上从野路子走向正规军。笔者一直感觉自己智商平庸,很想与高手程序员一起工作,看看别人是怎么解决问题的。我感觉高手和菜鸟最大的区别,除了智商、基础知识、自控能力以外,就是编程的习惯与思维方式的不同了。好在后面的特质都是可以学习和改善的,加入一个好团队就比较重要了。另外,对于团队而言,一个人的杰出能力往往不是那么重要的,开发流程和方法却会对产品质量产生很大影响。更反直觉的是,技术领域由于发展迅速过往经验有时候反倒是个阻碍。笔者现在写代码总有一种如履薄冰的感觉,生怕上线后出错跪了(在众多代码仓库中定位和修复 bug 也是个不小的挑战)。当然笔者也看到,很多厉害的技术老手也会犯一些低级错误,人的思维总是会有疏漏的,所以更要靠良好的习惯、规范和工作流程克服人的思维缺陷。工作的过程中也感觉到,自身的沟通能力、业务理解能力、主观能动性等还是有待提高啊。。。光会写点代码还是远远不够滴。

使用cookiecutter-flask快速生成python后端项目

Write code that writes code. Code generators increase your productivity and help avoid duplication.


天下武功,唯快不破

每当我们启动一个新项目的时候,总有很多重复性工作,创建后端app模板就是其中之一。如果是使用django还好,django提供了生成项目app的命令直接创建,不过貌似现在很多pythoner都倾向于用flask这种微框架。虽然很多成功的项目是基于django(Instagram,Disqus,Pinterest等)构建,不过笔者还是更喜欢flask这种微框架。flask的好处在于你可以随意替换插件(ORM,模板等),相比django更加灵活。缺点就是有时候会选择困难,不知道如何组织大型项目,而且需要学习各种flask的插件,实际上把flask一套插件都整明白也需要一定的学习成本。今天笔者介绍的这个Cookiecutter项目就是专门用来解决项目模板生成问题的,经过了python3.5.2生产环境的检验。

软件设计的一些基本原则

Everything Should Be Made as Simple as Possible, But Not Simpler. - Albert Einstein

我觉得编写软件的过程就是和和复杂度斗争的过程,无论是编写传统的pc软件还是web应用。对于python这种动态语言,很多问题是在运行时才暴露出来的,而且动态语言相对难以维护和重构。我一直感觉使用动态语言的时候要更加重视项目工程的管理,控制复杂度,防止代码仓库失控。了解一些常用原则降低复杂度还是有必要的。