status

校对

ZoomQuiet

完成度~101%; 根据其它章节增补而修订微小文字

行者箴言

光说不练徦把式, 光练不说傻把式! ~ 所以,汇集散落在书中各处的行者"箴言"细说来由;-)

少学,多用!

Enjoy it! don't Learnning

背景
解说
  • 这是本书的核心本愿!
  • 在 CPyUG ~ Chinese Python User Group(中文Python用户组)的邮件列表长期维护过程中笔者们发现:
    • "怎么可以学好Python ?" 是初学者最经常和反复提到的一个问题!
  • 这个问题,怎么回答,其实不是简单的学习经验的分享,而是怎么传达 Pythonic 精神和自信的哲学性问题;
  • 通过 Limodou 的倡议,大家最终确认了这一学习原则:用之,不学!

  • 为学习Python 而学习,是最不可取和南辕北辙的;因为, Python 本来就是为了快速解决常见问题而创造出来的,不是为了印证什么编程理论或是模式;所以, "在战斗中学习战斗",是Python 学习的最合适态度,而且也只有在面对实际问题时,才可以真正感受到Python 的简便/友好/直觉!如果拉开架式,为了写出漂亮的面向对象的或是吻合什么模式的代码而去研究Python,那就失去了用Python快捷解决问题的爽快体验了!

脚注::
CPyUG的主力邮件列表地址是:
http://groups-beta.google.com/group/python-cn
精巧地址: http://bit.ly/3895ZW
啄木鸟自由软件社区,则是另外一个中国Pythoner 聚集地;
和CPyUG 的关系可以参考:
http://wiki.woodpecker.org.cn/moin/WoodpeckerAbt
精巧地址: http://bit.ly/4DHYa0

寻之,弗造!

Searching at first,Don't try creat!

变之!守之!

Keep evolution,never foget the start idea!

发布,持续!

Keep realese,Keep publish!

一个人如果力求完善自己, 他就会看到, 为此也必须同时完善他人. 
一个人如果不关心别人的完善, 自己便不可能完善. 

这是因为, 人要充分发展自己的天性, 必须充分发展他的人际关系, 也就是在社会之中. 

这就回到了孔子、孟子的传统, 人要想完善自己, 必须实行忠恕、仁义, 这就包含了帮助别人. 
人要想完善自己, 就必须充分发展上苍的天性, 帮助别人就是参与天地化育万物的工作. 
一个人如果真正懂得了这一切, 他就与天地合参, 成为一体了. 

《中庸》所讲的"明", 便是这个意思:人做到与天地合参, 便是完美. 

在《中庸》里, 至善被称为"诚"(真诚、纯真)和"明"是连在一起的. 
《中庸》第二十一章说:"
自诚明, 谓之性. 
自明诚, 谓之教. 
诚则明矣, 明则诚矣. "一个人如果把他所领会的都付诸实践, 他也就是圣人了. 

人只有在自己的实践中, 才能懂得这些普通、寻常事的真正意义;也只有真正懂得它们的意义, 才能做得完美. 

从中可以体验到分享是暗含帮助他人从而令自己完善的致理的!

解说
  • 在 WEB2.0 时代,各SNS网站都开始号称永远的beta 版本,也就是持续发布和改进;

  • 豆瓣网就是其中的实例,在不断的和用户交互沟通过程中,不断的增/删/改网站功能,令网站服务在使用中,不断的及时的影响用户的需求,成为好用的,人们喜欢用的系统;
  • 再小的程序开发也应该一样,软件开发的本质目标是解决问题,而程序员写程序,就应该永远想着自个儿的代码可以长久的应用下去,可以在所有相似的情景中快速得到复用!
  • 这就要求对代码要在运行过程中不断的根据新要求/新目标/新情况,持续修订/重构,令代码逐渐变的凝练,稳固!同时,代码本身也应该是简单明晰的,借助简略恰当的注释,甚至于不用注释,任何人都可以快速理解代码的设计思路,执行脉络,实现结构,可以立即加入到其它应用中,稳定的支撑起新的软件来!
  • 所以,发布一直以来就应该是对内对外的双重发布:
    1. 对内: 为自己,通过发布和整理,以及注释更新,令开发者自身,加深对代码的理解,并及时进行再次重构迭代;
    2. 对外: 为公众,通过发布和宣传,让其它人获知软件的状态,令有缘人可以及时得到我们的代码,并通过清晰易懂的代码建立起沟通渠道,可以就相似问题域的解决进行互通有无,令好代码传播出去,延长生命周期的同时,也因为及时丰富的使用反馈,令自个儿的代码可以进一步得到增补!

能用,再修!

Run! before Enhancement

以动手实践为荣 , 以只看不练为耻;
以打印日志为荣 , 以单步跟踪为耻;
以空格缩进为荣 , 以制表缩进为耻;
以单元测试为荣 , 以人工测试为耻;

以模块复用为荣 , 以复制粘贴为耻;
以多态应用为荣 , 以分支判断为耻;
以Pythonic为荣, 以冗余拖沓为耻;
以总结分享为荣 , 以跪求其解为耻;

   1 def formatCDinfo(root,dirs,files):
   2     export = "\n"+root+"\n"
   3     for d in dirs:
   4         export+= "-d "+root+_smartcode(d)+"\n"
   5     for f in files:
   6         export+= "-f %s %s \n" % (root,_smartcode(f))
   7     export+= "="*70
   8     return export

其中的函式声明,for 循环体等语法结构的划分,就是使用 :配合缩进完成的,这比其它主流语言使用{以及}来标识,要科学和人性的多!因为这样一来:

#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
}'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
  :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

注意,这是正确可运行的C代码哪, 而且世界上有专门的网站(http://www.ioccc.org),每年评选出最令人尖叫的正确代码!

感到不爽,自个儿尝试相应工具解决了,并及时分享出来,是态度0!
感到不爽,自个儿尝试找到解决方案了,并及时分享出来,是态度1!
感到不爽,自个儿尝试修订代码搞定了,并及时分享出来,是态度2!
感到不爽,自个儿未经尝试直接出来吼,期望行者来解决,是最不靠谱态度!

网站.软件.

Site is Software!

背景
  • SaaS(Software as a Service,软件作为服务, 或称为软件即服务)是应用软件的一种销售方式, 客户按使用时间或使用量付费. 这些应用软件通常是在企业管理软件领域, 并通过互联网来使用.
  • 它是目前一种新型软件服务形式, 是从 ASP(ApplicationServiceProvider, 应用服务提供商)模式演变而来, 是一种通过Internet提供软件的模式. 用户不用再购买软件, 而改用向提供商租用基于Web的软件, 来管理企业经营活动, 且无需对软件进行维护, 服务提供商会全权管理和维护软件.

  • 对企业来说, SaaS的优点在于:
  • 从技术方面来看:企业无需再配备IT方面的专业技术人员, 同时又能得到最新的技术应用, 满足企业对信息管理的需求.
  • 从投资方面来看:企业只以相对低廉的"月费"方式投资, 不用一次性投资到位, 不占用过多的营运资金, 从而缓解企业资金不足的压力;不用考虑成本折旧问题, 并能及时获得最新硬件平台及最佳解决方案.
  • 从维护和管理方面来看:由于企业采取租用的方式来进行物流业务管理, 不需要专门的维护和管理人员, 也不需要为维护和管理人员支付额外费用. 很大程度上缓解企业在人力、财力上的压力, 使其能够集中资金对核心业务进行有效的运营.
解说
  • GUI~图形用户界面 (Graphic User Interface)的简称;也指代所有工作在各种图形化操作系统中,通过各种图形化窗口控件和用户交互的软件; 这类软件必然的依赖操作系统提供的图形控制接口,以便实时绘制,采集用户反馈等等;
  • 当然的Python 也可以开发这类软件的,而且可以使用的图形接口和框架也不少,这方面推荐 前面"Eurasia ~ 关注高性能的原创框架" 一节的作者沈崴的文章:Python 史书·GUI 部

  • 不过,现在的趋势是:"网站软件化",从Google桌面搜索(http://desktop.google.com)开始利用本地网页当搜索引擎的交互和控制界面,到Yahoo!mail 也使用Ajax 技术将邮箱作的象outlook;进一步的,百度的安全中心,更是利用网页安装杀毒引擎到用户桌面,但通过本地的Web服务,使用网页作为查杀病毒的控制界面!

  • 因为,人们越来越多的将时间化在网络中,通过浏览器,在网页中写作/沟通/购物/工作/学习/游戏,,,网页作为操纵信息的界面,人家已经非常非常习惯和熟练了;
  • 而且,网页,基于简单的HTML设计和解析,比使用操作系统的图形接口来绘制用户界面要轻松的多的多!
  • 所以,行者也建议,能愉懒使用网页作为GUI时,千万不要客气!

王道:简洁!

Kingcraft means simple!

背景
  • KISS = Keep It Simple, Stupid! = 保持简单,傻瓜化! ~= Simple is better

  • 定义在:What is KISS Principle?(什么是KISS原理?)
  • 访问地址: http://searchcio-midmarket.techtarget.com/sDefinition/0,,sid183_gci521694,00.html

  • 精巧地址: http://bit.ly/11ApDO

  • 保持简单是敏捷开发中非常重要的一项实践, 但是这条原则说起来简单却做起来难. 因为每个程序员其实都是一个有完美主义的艺术家, 所做软件其实都是一件自己的艺术品, 同时受到许多关于设计方面的资料的影响, 所以在做设计的时候会情不自禁的加上许多"优雅特性"和"灵活性". 另一个很重要的原因在于, 在产品推出后又不得不疲于应付客户频繁提出的许多新增加的需求的时候, 会自然而然的想到:当时要是在做软件的时候能考虑到这些需求该多好啊, 现在来改实在是太麻烦了. 要是当初改的话, 也只用添加几条代码就可以了,,,
  • 其实,这两种原因都能归结为一个:程序员总希望自己所设计的系统能最大范围内适应变化!

  • 这种想法的出发点是非常好的, 可是在实际中却往往不是降低了工作量, 反而增加了巨大的工作量. 根本原因就在于:用户需求是无限量的, 你永远也无法预测客户的需求变化. 

  • 所以, Python 倡导简单即是美 ~ 大道至简! 简单直白的代码,好理解易维护,实在不成,堆倒重新写一点也不心痛;) 对永远在变化的需求, 心态上要拥抱变化,不能预防变化,简单稳固的小功能函式,其实是非常容易组合在一起,支持另外一个需求的,这种代码实现方式,永远比用一个理应精致细巧智能有前瞻性的模块来支持现有的简单需求,要舒服和可控的多!

解说
  • 此箴言是相关软件设计的,基于的理论是:"少即是多" ~ 由建筑大师密斯·凡德罗(Ludwig Mies van der Rohe 1886-1969)提出的:"少即是多(Less is more).", 被广泛引用于各个领域;
  • 与之交相辉映的是由14世纪逻辑学家、圣方济各会修士 奥卡姆的威廉(William of Occam)提出的一个原理,即,"奥卡姆剃刀原理"(Occam’s razor),通常的应用理解如下:
    • 如果你有两个原理,它们都能解释观测到的事实,那么你应该使用简单的那个,直到发现更多的证据。
    • 对于现象最简单的解释往往比较复杂的解释更正确。
    • 如果你有两个类似的解决方案,选择最简单的。
    • 需要最少假设的解释最有可能是正确的
  • 这个原理最早至少能追溯到亚里士多德的"自然界选择最短的道路";甚至于爱因斯坦,他本身也是一位格言大师,曾警告说: "万事万物应该尽量简单,而不是更简单."
  • 在软件行业,Pythonic 秉承了以上的思想:让代码保持简单!
  • 因此, Python 语言本身,已经为简单的完成功能,预先内置了丰富的模块--Batteries Included~电池内置就是出于此目标; 另外,极少的关键字设计,通过排版来划分语法结构的设定,无一不是为了令Python 代码更加象自然语言的表述,鼓励大家将软件都设计的很直白小巧,模块功能单一,函式不超过50行(即,一屏的高度),如此这般,就会发觉,自个儿的代码是越写越少,多数情况下都是复制自个儿以前的某份代码过来小修订一下就立即可用了,到最后用的最多按键将是:delete ;-)

想象;无垠!

Imagine Unlimited!

背景
解说
  • 在Python 世界中很多时候作起来比想象中要来的容易!
  • 因为从教育学角度的研究,人在同一时间内可以关注和处理的事儿只有7~9个,再多就有些顾此失彼了; 然而一个再小的软件涉及到的方方面面很容易就超过这个心理容量,而且在头脑中推演数据处理流程时,人脑的堆栈深度是非常浅的(不是所有人都可以作到象棋/围棋运动员那样儿可以在头脑中对弈的!)-- 所以,在想象中,就非常有可能越想越乱,越想越不敢动手作了;

  • 反而,先不管3721,趁着念头还鲜活,先将可以完成的部分快速变成可以运行的代码,一时无法想通的,变成空函式,伪类等等可以执行通过但是没有实际行为,仅仅标识出想法的有效代码来! 这样,下次的尝试,永远有可用的代码基础,每次我们就可以仅仅关注没有完成的部分,有可用的代码打底儿,每次尝试,都令我们真实的向目标进行了一步! 没有比这样由成就感累积而成的开发体验最舒服的了! 而且一直有真实不虚的代码可以运行和测试,比在头脑里空想要靠谱的多,安心的多;-)
  • Pythnoic 的感觉/体验/自信,就是鼓励大家不要顾虑自己是否对问题域有足够的知识积累己达到成竹在胸游刃有余的程度,直接去尝试! Python 脚本是轻松可得的,放弃,重构,从头再来,都不是难事儿;
  • 如果总是期待自个儿非得达到一个完美的积累状态再去动手实际开发,结果可能就是一直陷入积累的状态无法自拔. 其实,技术的发展已不是日新月异的级别了,可以说是每时每刻都有新的技术/框架/模块/思想的出现,想积累到一定程度再动手,可能积累的东西已经过时了,要抢在自个儿的想法没有过时之前变成代码,可用的软件,释放出来,抢占先机,才可能在这一过程中,及时发现最新技术/代码/思想 同步应用进来,令自个儿永不过期 ;-)

  • 所以,在Python 中,如何作? -- 不应该是个山门~ Python 隐密的规则/技巧/陷井 相比C++/C#/JAVA 等等主流语言来说,实在太少了,而且知道与否对于我们完成系统,几乎没有影响; 作什么? -- 这才是不同Pythoner 间的最大差异,这就取决于想象力,观察力,对周围事物的敏感程度,是否"足够懒惰","没有耐心" 随时都想着将人工反复作的事儿,利用Python 形成工具来帮助自个儿完成 -- 进而形成爽快的工具/系统,成为其它有类似需求的人们的最爱

箴言凝练

上述箴言,是中国Python 行者们的部分最佳体验,总结而成的; 但是!其实!一切早已包含在Python自言中:

蠎之禅

图 atta1-2 Python 内置的哲学诗文

atta1-2.png

美丽好过丑陋,
浅显好过隐晦,
简单好过复合,
复合好过复杂,
扁平好过嵌套,
稀疏好过密集,
可读性最重要,
即使祭出实用性为理由,特例也不可违背这些规则.

不应默认包容所有错误,得由人明确的让它闭嘴!

面对太多的可能,不要尝试猜测;应该有一个(而且是唯一)直白的解决方法;
当然,找到这个方法不是件容易的事~谁叫你不是荷兰人呢?
但是!现在就做永远比不做要好;

若实现方案很难解释,那么它就不是一个好方案;反之也成立!

名称空间是个绝妙想法.

--立马来共同体验和增进这些吧!

-- by Tim Peters
汉译集注
  • 访问地址: http://wiki.woodpecker.org.cn/moin/PythonZen

  • 精巧地址: http://bit.ly/2h4f5T

  • 这一内置在 Python 语言内部的小诗,集中的隽永的,将 Pythonic 思想,具象的表述了出来;但是影射太多的实践体验,不是所有人一时间都有感应能够理解的; 不过,可以确信,通过 Guido 老爹的认可,编译包含进Python 内核的东西,准没错!努力去体验吧!

附:我们的奋起宣言

每日至少抽一刻钟,解答邮件列表中初学者的问题, 
每周至少抽两小时,整理新学知识将体验发表/分享出去, 
    通过Blog/Wiki/MaiList/个人网站……
每旬至少抽四个小时, 来翻译自个儿喜爱的自由软件的文档, 
每月至少抽八小时, 快乐的编程, 推进自个儿的项目, 
每年至少参加一次, 自由软件的活动, 传播自由软件思想, 
    发展一名"自由人"……

只要我们每个人都坚持下去……
10年!就足以改变中国软件的整体风貌!


::-- ZoomQuiet [2007-11-03 11:46:56] <<PageComment2>>

ObpLovelyPython/LpyAttach1motto (last edited 2013-04-07 03:05:48 by ZoomQuiet)