开了俩 vim 和 Python 的知乎专栏
First, solve the problem. Then, write the code. - John Johnson
很久没有更新自己的博客了(还是大学的时候接触 nodejs 用 hexo 搭的),最近编写和录制了一些 vim 和 python 的视频教程,感兴趣的可以看看,奉上链接。自己的博客看的人比较少,没有做过 SEO。放在专栏里看到的人会多一些。
First, solve the problem. Then, write the code. - John Johnson
很久没有更新自己的博客了(还是大学的时候接触 nodejs 用 hexo 搭的),最近编写和录制了一些 vim 和 python 的视频教程,感兴趣的可以看看,奉上链接。自己的博客看的人比较少,没有做过 SEO。放在专栏里看到的人会多一些。
动态语言一时爽,代码重构火葬场
随着公司产品周期迭代和业务发展,使用 python 这种动态语言开发慢慢也暴露出一些问题,比如性能低、易出错、难重构、难维护等。 网上大部分是技术相关文章,工程相关的比较少。笔者就之前几年写 python 和维护 python 后端项目的经验简单介绍下如何提升 python 项目工程质量。
Python is a language for consenting adults. —Alan Runyan
重新看了下 《Fluent Python》,依旧还是很多东西没能消化完。简单记录下吧
You build it, you run it. - Werner Vogels
现在很多互联网公司采用了微服务架构,将业务拆分,保持代码仓库尽量精简。同时一个小团队负责开发和维护一个服务,提升了开发和部署效率(软件本身的组织结构与软件团队的组织结构式一致的,即康威定律)。 知乎很多业务后端采用了 python web 框架 tornado,都是开源的、成熟稳定的技术(虽然笔者更喜欢 flask 全家桶)
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 之后使用体验比以前好了很多,没白瞎我几个晚上修改配置(之前自定义了很多快捷键也安装了很多插件)。
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 框架的工作原理。
代码的写法应当使别人理解它所需的时间最小化。- 可读性基本定理
刚工作那会总喜欢追求一些代码语法糖,感觉有奇淫技巧的代码才是牛逼的。真正开始做项目后才发现代码可读性是如此重要,最近 code review 也因为一些命名问题修改过代码(英文词汇匮乏啊。。。)重新回顾下这本书,争取写出更易维护和可读性高的代码。
软件构建的核心就是管理复杂度。 - 《Code Complete》
最近笔者加入新公司,又开始一段新的程序员之旅。每次最头疼的还是上手已有的很多代码仓库,看别人的代码一直是一件痛苦的事情(理解最初的编程意图是最难的问题),不过好处就是又学到了很多新东西,又了解到自己有多菜。最近又重新翻看了《代码大全》,摘抄了一点东西。如果说软件工程领域非得让我推荐一本书的话,无疑是这一本大而全的代码百科全书(虽然有点陈旧),汇集了很多编程技巧和工程领域的研究成果,很有启发,也正是这本书让我在编程上从野路子走向正规军。笔者一直感觉自己智商平庸,很想与高手程序员一起工作,看看别人是怎么解决问题的。我感觉高手和菜鸟最大的区别,除了智商、基础知识、自控能力以外,就是编程的习惯与思维方式的不同了。好在后面的特质都是可以学习和改善的,加入一个好团队就比较重要了。另外,对于团队而言,一个人的杰出能力往往不是那么重要的,开发流程和方法却会对产品质量产生很大影响。更反直觉的是,技术领域由于发展迅速过往经验有时候反倒是个阻碍。笔者现在写代码总有一种如履薄冰的感觉,生怕上线后出错跪了(在众多代码仓库中定位和修复 bug 也是个不小的挑战)。当然笔者也看到,很多厉害的技术老手也会犯一些低级错误,人的思维总是会有疏漏的,所以更要靠良好的习惯、规范和工作流程克服人的思维缺陷。工作的过程中也感觉到,自身的沟通能力、业务理解能力、主观能动性等还是有待提高啊。。。光会写点代码还是远远不够滴。
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这种动态语言,很多问题是在运行时才暴露出来的,而且动态语言相对难以维护和重构。我一直感觉使用动态语言的时候要更加重视项目工程的管理,控制复杂度,防止代码仓库失控。了解一些常用原则降低复杂度还是有必要的。