Skip to content

Commit a0101f7

Browse files
committed
add coding tools
1 parent 9f24531 commit a0101f7

File tree

4 files changed

+45
-7
lines changed

4 files changed

+45
-7
lines changed

base/basics.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
--------------------------------------
99
Python入门相对容易又可以干很多事(网站,运维,数据,爬虫等),是一门方便的工具语言。2016年TIOBE排名显示Python已经名列第四,成为脚本语言之首。
1010
国外的Youtube,Instagram,Pinterest,Reddit,
11-
Quora等知名应用一开始都是基于Python构建,国内的豆瓣,知乎等也是Python应用的典型。这也给了国内Python开发者一阵强心剂,Python的生态环境可以支撑起重量级的
11+
Quora等知名应用一开始都是基于Python构建,国内的豆瓣,知乎,果壳等也是Python应用的典型。这也给了国内Python开发者一阵强心剂,Python的生态环境可以支撑起重量级的
1212
产品。这里不想挑起语言之争,php,nodejs,java,ruby等都有丰富的生态环境。不过目前来看,技术选型用Python在招聘、学习、培训、敏捷开发等方面还是一个比较折中的选择(主要在于人,而不是语言)。
1313
推荐一下几本个人认为比较好的Python书籍:
1414

codingstyle/codingstyle.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
108108

109109
一些常见原则
110110
----------------------------
111-
对于什么是好代码,什么是坏代码我现在还没有太多经验,但是最近工作接手别人的代码感觉困难重重,还是too naive啊。每个人实力不同,风格不同,一起协作的时候确实会遇到很多问题和分歧。感觉code review啥的还是很有必要的,可以让菜鸟学习下老鸟的经验,也可以让老鸟指导下菜鸟的失误,同时避免过于个人化的糟糕风格(比如让人想立马离职的高达成百上千行的复杂函数,比如上来一堆不知道干啥的幻数,比如上来就 `form shit import *` 导致俺的编辑工具找不到定义,比如整个项目没有一行测试代码,比如不知道用logger,全用print+眼珠子瞅,一个bug找半天,比如没有pep8检测导致你的环境打开别人的代码彪了一堆警告......)。说好的规范呢,说好的设计模式呢,说好的高内聚低耦合呢?说好的KISS原则呢?说好的DYR原则呢?其实俺只是想多活几年,至少不要到三十岁头发掉光。啥设计模式的可以不用,能干活的代码就行,牢记几个原则,没事的时候对复杂的东西重构下,代码不能自解释的搞搞文档,不被队友坑同时不坑队友,俺就心满意足了。最后还是列举一下常用原则、思想和注意事项吧
111+
对于什么是好代码,什么是坏代码我现在还没有太多经验,但是最近工作接手别人的代码感觉困难重重,还是too naive啊。每个人实力不同,风格不同,一起协作的时候确实会遇到很多问题和分歧。感觉code review啥的还是很有必要的,可以让菜鸟学习下老鸟的经验,也可以让老鸟指导下菜鸟的失误,同时避免过于个人化的糟糕风格(比如让人想立马离职的高达成百上千行的复杂函数,比如上来一堆不知道干啥的幻数,比如上来就 `form shit import *` 导致俺的编辑工具找不到定义,比如整个项目没有一行测试代码,比如不知道用logger,全用print+眼珠子瞅,一个bug找半天,比如没有pep8检测导致你的环境打开别人的代码彪了一堆警告......)。说好的规范呢,说好的设计模式呢,说好的高内聚低耦合呢?说好的KISS原则呢?说好的DYR原则呢?其实俺只是想多活几年,至少不要到三十岁头发掉光。啥设计模式的可以不用,能干活的代码就行,牢记几个原则,没事的时候对复杂的东西重构下,代码不能自解释的搞搞文档,不被队友坑同时不坑队友,俺就心满意足了。最后还是列举一下常用原则、思想和注意事项吧(最好import this看看python之禅,很多思想是通用的):
112112

113113
* KISS原则,Keep It Simple, Stupid。能简单的绝对不要复杂,不要炫耀代码技巧,简单可读最重要,后人会感谢你的。
114114
* DRY原则。就算咱不懂设计模式,只要代码复杂重复了就及时抽取出来,至少不会碰到大问题。
115115
* 一次只做一件事。尽量避免复杂度过高的逻辑,尽量做到代码简单,意图明确。
116116
* 高内聚,低耦合。写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
117117
* 代码应当易于理解。 《代码大全》、《编写可读代码的艺术》、《代码整洁之道》啥的都是告诉你代码最好自解释,好理解。记住代码首先是给人看的,其次才是让机器执行的,不要过度设计。
118-
* 不要过早优化。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
119-
* 不要炫技。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。
118+
* 不要过早优化,最小可用原则。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
119+
* 不要炫技,可读性最重要。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。
120120
* Think about future, design with flexibility, but only implement for production. 尽量设计良好,避免繁杂和冗余。好的架构和设计都是不断演进的。
121121
* 文档化。哪些东西该文档化,哪些该注释需要做好,以便新手可以尽快上手。尽量做到代码即文档,tornado的文档和代码就是典范。
122122
* 不要放过任何错误和异常,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
@@ -134,7 +134,7 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
134134
* 单一职责原则(Single-Responsibility Principle)
135135

136136

137-
python代码坏味道
137+
python代码坏味道(新手经常犯的错误)
138138
--------------------------------------
139139

140140
- 不pythonic,写得很业余,真就信了半天学会python
@@ -164,7 +164,7 @@ python代码坏味道
164164

165165
注释
166166
--------------------------------------
167-
有经验的人都知道看别人的代码是一件很痛苦的事情,尤其是没有任何注释的代码(看别人的代码总有一种想艹他祖宗的感觉)。代码除了完成需求外,最重要的就是维护和协作,除非你觉得你做的项目活不过仨月(或你自己玩玩的项目随便你怎么艹),否则就一定要重视代码质量,防止代码腐化(破窗)以至难以协作和维护。有时候比写注释更难的是知道何时写,写什么注释?python里有规范的docstring用来给类和函数进行注释,除了说明功能外,关于github,stackoverflow链接、复杂的传入传出参数(比如嵌套字典作为参数这种你都不注释就很不合适了),类型说明、需求文档和bug的jira地址等都可以注释。凡是你回头看代码一眼看不出来干啥的,都应该有适当的注释,方便自己也方便别人。当然,最重要的是代码清晰易读,好的命名和编写风格的代码往往是自解释的,看代码大致就可以看出功能。建议就是给所有的模块、类和函数都加上注释,除非一眼能看出来这个东西干啥,否则都应该简洁注释下,让别人不用一行行看你的代码就大概知道你这个东西是干啥的。最后注意的就是一旦函数更改及时更新注释。qiniu的sdk写得就不错,可以去github看看。总之,"Explicit is better than implicit.", 代码里不要有隐晦的东西,一时偷懒将来可能会付出几倍的维护代价,请对将来的自己和他人负责。
167+
有经验的人都知道看别人的代码是一件很痛苦的事情,尤其是没有任何注释的代码。代码除了完成需求外,最重要的就是维护和协作,除非你觉得你做的项目活不过仨月(或你自己玩玩的项目随便你怎么艹),否则就一定要重视代码质量,防止代码腐化(破窗)以至难以协作和维护。有时候比写注释更难的是知道何时写,写什么注释?python里有规范的docstring用来给类和函数进行注释,除了说明功能外,关于github,stackoverflow链接、复杂的传入传出参数(比如嵌套字典作为参数这种你都不注释就很不合适了),类型说明、需求文档和bug的jira地址等都可以注释。凡是你回头看代码一眼看不出来干啥的,都应该有适当的注释,方便自己也方便别人。当然,最重要的是代码清晰易读,好的命名和编写风格的代码往往是自解释的,看代码大致就可以看出功能。建议就是给所有的模块、类和函数都加上注释,除非一眼能看出来这个东西干啥,否则都应该简洁注释下,让别人不用一行行看你的代码就大概知道你这个东西是干啥的。最后注意的就是一旦函数更改及时更新注释。qiniu的sdk写得就不错,可以去github看看。总之,"Explicit is better than implicit.", 代码里不要有隐晦的东西,一时偷懒将来可能会付出几倍的维护代价,请对将来的自己和他人负责。
168168

169169
* `《python docstring》 <http://bwanamarko.alwaysdata.net/napoleon/format_exception.html>`_
170170

@@ -176,7 +176,7 @@ Code Review
176176
日志与异常记录
177177
--------------------------------------
178178
一定要有良好的日志记录习惯。良好的日志对于记录问题至关重要。python有方便的日志模块帮助我们记录,日志输出的代价是比较小的,python的日志模块尽量做到对函数功能没有性能影响,可以在线上和开发环境设置不同的log等级,方便开发调试。注意别再日志语句里引入了bug或异常。
179-
对于异常,一定『不要吞掉任何异常』,常有新手上来就try/except,也不区分非退出异常,也没有日志记录(坑啊......)。请先阅读python文档的异常机制,可以使用sentry等工具记录异常。同时发生异常时候的时间,调用点,栈调用信息,locals()变量等要注意记录,给排查错误带来便利。有些错误的复现是比较困难的,这时候日志和异常的作用就凸显出来了。
179+
对于异常,一定『不要吞掉任何异常』,常有新手上来就try/except,也不区分非退出异常,也没有日志记录(坑啊......)。请先阅读python文档的异常机制,可以使用Sentry等工具记录异常。同时发生异常时候的时间,调用点,栈调用信息,locals()变量等要注意记录,给排查错误带来便利。有些错误的复现是比较困难的,这时候日志和异常的作用就凸显出来了。
180180

181181

182182
调试

codingtools/codingtools.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
.. _codingstyle:
2+
3+
开发和编程工具
4+
=====================================================================
5+
6+
7+
开发工具(很多只列举个名字,具体使用请自行google)
8+
-------------------------------------- -----------
9+
10+
- Pycharm。专业的python ide,功能很强大,特别喜欢它的代码merge工具,不想被编辑器折腾死的推荐直接使用。
11+
- vim。本人比较喜欢,配上各种插件编辑效率很高。http://vimawesome.com/ 可以到这个上面安装排名靠前的那些插件,能够大大提高编辑效率,替代IDE。其他编辑器sublime,atom,vscode,emacs等不熟,根据个人喜好来吧。(在google搜索python awesome等可以在github上搜索到一些awesome项目,总结了该语言很多技术工具)
12+
- tmux。比screen好用,可以用来分屏等,ubuntu下基本就不用使用terminator之类的分屏工具了
13+
- zsh。替代原生的bash shell,提供了好多方便的特性。linux/mac下vim+tmux+zsh简直是绝配,甚至可以直接在服务器上方便地撸代码。
14+
- item2(mac)。替代原生的终端。
15+
- brew(mac)。类似ubuntu下的apt-get,可以方便安转各种软件和工具。
16+
17+
18+
日志收集工具
19+
--------------------------------------
20+
21+
- Sentry.
22+
- Fluentd
23+
24+
25+
管理及运维工具
26+
--------------------------------------
27+
- Supervisor.进程管理
28+
- Fabric.应用部署
29+
- docker.最近比较火的容器技术
30+
- SaltStack和Ansible. 配置管理
31+
- StatsD\Graphite等web监控
32+
33+
调试工具
34+
--------------------------------------
35+
- curl
36+
- http
37+
- postman

index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
base/*
1010
codingstyle/*
11+
codingtools/*
1112
idiom/*
1213
codingguide/index
1314
team/*

0 commit comments

Comments
 (0)