Skip to content

Commit fcd3537

Browse files
committed
Merge branch 'master' of github.com:PegasusWang/python-web-guide
2 parents bc1cade + 03507a0 commit fcd3537

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

base/basics.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Python入门相对容易又可以干很多事(网站,运维,数据,爬虫等)
1010
国外的Youtube,Instagram,Pinterest,Reddit,
1111
Quora等知名应用一开始都是基于Python构建,国内的豆瓣,知乎,果壳等也是Python应用的典型。这也给了国内Python开发者一阵强心剂,Python的生态环境可以支撑起重量级的
1212
产品。这里不想挑起语言之争,php,nodejs,java,ruby等都有丰富的生态环境。不过目前来看,技术选型用Python在招聘、学习、培训、敏捷开发等方面还是一个比较折中的选择(主要在于人,而不是语言)。
13+
python,ruby之类的语言优势在于其生产力,你能在极短时间内就搭建出原型从而赢得产品竞争。
1314
推荐一下几本个人认为比较好的Python书籍:
1415

1516
* `《python-guide》 <http://docs.python-guide.org/>`_ requests作者写的guide
@@ -71,9 +72,16 @@ Linux系统
7172
目前最流行的应该就是git了。版本控制工具是多人协作必不可少的工具,入门的程序员需要掌握基本的git命令,可以把github作为个人练习的工具。
7273

7374

75+
专业性
76+
----------
77+
公司做项目不是自己过家家,需要你具备写文档,注释,单元测试的能力。如果你现在还不了解一个正规python项目都有哪些组建构成,请去github克隆一份知名的代码仓库,花点时间仔细分析下它的项目结构和源代码。
78+
79+
7480
后端技术栈
7581
----------
7682
对于技能需求可以在拉勾上搜一下Python的职位,看看各个公司对Python的要求。或者你可以写个拉勾网的爬虫,对数据做一个简单的统计,笔者当初找工作就是这么干的。
83+
另外,真正做项目还需要你熟悉python的各种库和框架,比如django/flask/tornado/requests/sqlalchemy/unittest/celery等等,掌握了合适的工具才能快速上手做东西,公司恨不得你第一天入职第二天就能写项目。
84+
所以,在你入了门以后请尽快熟悉python web的技术栈。公司不管你会什么算法,只在乎你的生产力。
7785
推荐一些文章供参考:
7886

7987

codingstyle/codingstyle.rst

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
- 动态语言的变量命名尽量可以从名称就知道其类型,比如url_list, info_dict_list,降低阅读和理解的难度。(我的感觉就是动态语言易编写,写不好后期更难维护)
2626
- 风格上衡量不了请参考知名开源项目的做法。以可读性和维护性作为标准。
2727

28+
* `《Python 工匠:善用变量来改善代码质量》 <http://www.zlovezl.cn/articles/python-using-variables-well/>`_ 动态语言命名尽量可以表达出类型,否则不好维护
2829

2930
编程范式
3031
--------------------------------------
@@ -94,6 +95,7 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
9495
编码的时候想着如何测试它,甚至都可以改善设计。对于动态语言,一直有『动态语言一时爽,代码重构火葬场』这种说法,说明动态语言如果没有良好的设计和测试,以后是会埋下不少隐患的。
9596
当你发现debug的时间甚至比写代码长很多的时候,当你发现总是返工对代码修修补补的时候,或者可尝试下TDD。
9697
你可以学习使用下python的unittest或者pytest等进行单元测试,以保证代码质量。个人工作经验也表明,难以测试的代码往往是设计不太好的代码。
98+
update: 经验表明,TDD未必是必要的,但是单元测试是很必要的。如果是新项目建议为所有的复杂函数写单元测试,为项目质量保证。
9799
下边是一些参考书籍:
98100

99101

@@ -112,14 +114,17 @@ Python有一些语法上的坑,比如默认参数只计算一次,不要使
112114

113115
* KISS原则,Keep It Simple, Stupid。能简单的绝对不要复杂,不要炫耀代码技巧,简单可读最重要,后人会感谢你的。
114116
* DRY原则。就算咱不懂设计模式,只要代码复杂重复了就及时抽取出来,至少不会碰到大问题。
117+
* YAGNI(You Aren't Gonna Need It),不要猜测性编码。
118+
* 快速失败,灵活使用断言。契约式编程(先验条件和后置条件)
119+
* 及时清理技术债务,防止『破窗』。
115120
* 一次只做一件事。尽量避免复杂度过高的逻辑,尽量做到代码简单,意图明确。
116-
* 高内聚,低耦合。写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
121+
* 高内聚,低耦合。意义相近的东西应该放到同一个地方。写代码的时候想着怎么测试它就能避免过度复杂,耦合严重的代码。
117122
* 代码应当易于理解。 《代码大全》、《编写可读代码的艺术》、《代码整洁之道》啥的都是告诉你代码最好自解释,好理解。记住代码首先是给人看的,其次才是让机器执行的,不要过度设计。
118-
* 不要过早优化,最小可用原则。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
123+
* 不要过早优化,最小可用原则。先测量,后优化。根据二八定律,大部分性能瓶颈只在20%的部分,这些才是真正需要优化的地方。
119124
* 不要炫技,可读性最重要。合适的地方使用合适的技巧,不要过度炫耀语法糖导致维护和理解困难。
120125
* Think about future, design with flexibility, but only implement for production. 尽量设计良好,避免繁杂和冗余。好的架构和设计都是不断演进的。
121126
* 文档化。哪些东西该文档化,哪些该注释需要做好,以便新手可以尽快上手。尽量做到代码即文档,tornado的文档和代码就是典范。
122-
* 不要放过任何错误和异常,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
127+
* 不要直接吞掉任何错误和异常,一定要做好记录。血泪教训,使用Sentry或其他工具记录好异常发生的信息,为定位bug提供便利,web端的bug一般不好复现。
123128
* ......还有的大家可以自己补充
124129

125130

@@ -150,7 +155,7 @@ python代码坏味道(新手经常犯的错误)
150155
- 没注意可变类型和非可变类型,传入可变类型并在函数里修改了参数,坑。。。
151156
- 没有逻辑分块,没有美感(这个就算了),就算不限制一行超过80列,也不能写一行写几百列吧,左右转头脑瓜子疼
152157

153-
嗯,一开始就开启pep8和pylint检测能显著提升代码质量。咱写不了诗一样的代码,也不能写shǐ 一样的代码。
158+
嗯,一开始就开启pep8和pylint检测能显著提升代码质量(各种错误警告逼着你写出高智力代码)。咱写不了诗一样的代码,也不能写shǐ 一样的代码。
154159
可能很多东西对老鸟来说都是显而易见的,不过菜鸟和高级菜鸟们还是需要多多练习积累经验。慢慢摸索吧骚年。。。。。。
155160

156161

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

186+
* `《每个 Python 程序员都要知道的日志实践》 <http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652564362&idx=1&sn=f33910af004f276bbef7ae52e0757bcb&chksm=8464c3c0b3134ad617bcffd865894344367fdd2995a0d5ff9c4da30e0c158b3d02b3d616f615&mpshare=1&scene=23&srcid=1124K7Ht1FP2A1Fnvi3HTBE5#rd>`_
181187

182188
调试
183189
--------------------------------------

codingtools/codingtools.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
- zsh。替代原生的bash shell,提供了好多方便的特性。linux/mac下vim+tmux+zsh简直是绝配,甚至可以直接在服务器上方便地撸代码。
1414
- item2(mac)。替代原生的终端。
1515
- brew(mac)。类似ubuntu下的apt-get,可以方便安转各种软件和工具。
16-
- autojump。方便在命令行里来回跳转。
16+
- autojump。方便在命令行里来回跳转。
1717

18+
* `《使用vim+tmux+zsh+autojump高效工作》 <http://ningning.today/2016/11/09/tools/vim-tmux-zsh-autojump/>`_
1819

1920
日志收集工具
2021
--------------------------------------

memo/memo.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ Tmux
157157
158158
tmux rename -t oriname newname
159159
tmux att -t name -d # -d 不同窗口全屏
160+
# 如果手贱在本机tmux里又ssh到服务器又进入服务器的tmux怎么办
161+
c-b c-b d
160162
161163
162164
Git
@@ -199,7 +201,7 @@ Git
199201
# 指定文件类型diff
200202
git diff master -- '*.c' '*.h'
201203
# 带有上下文的diff
202-
git diff master --no-prefix -U1000
204+
j git diff master --no-prefix -U999
203205
204206
205207
@@ -215,6 +217,9 @@ Git
215217
slideshow install deck.js
216218
sudo pip install https://github.com/joh/when-changed/archive/master.zip
217219
when-changed rest.md slideshow build rest.md -t deck.js
220+
# mac: brew install fswatch, http://stackoverflow.com/questions/1515730/is-there-a-command-like-watch-or-inotifywait-on-the-mac
221+
jfswatch -o ~/path/to/watch | xargs -n1 ~/script/to/run/when/files/change.sh
222+
fswatch -o ./*.py | xargs -n1 ./runtest.sh # 比如写单元测试的时候修改后就让测试执行
218223
219224
220225
* `《Linux工具快速教程》 <https://linuxtools-rst.readthedocs.io/zh_CN/latest/>`_

0 commit comments

Comments
 (0)