Size: 604
Comment:
|
Size: 20478
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
#pragma section-numbers on | #pragma section-numbers off |
Line 4: | Line 4: |
||'''status'''|| 草稿 || ZoomQuiet || 完成度~10%;初始化内容结构,期待Limodou 上架跟进 || | ||'''status'''|| 校对 || ZoomQuiet || 完成度~60%;|| |
Line 9: | Line 10: |
= 箴言 = | ##startInc = 行者箴言 = |
Line 11: | Line 14: |
''' 光说不练徦把式,光练不说傻把式! ''' == 章标题1 == === 小节标题1 === |
''' 光说不练徦把式,光练不说傻把式! '''~ 所以,汇集散落在书中各处的行者"箴言"细说来由;-) * 每节使用固定的述说模式: 1. 给出E文定义 1. 给出实例故事的出处 1. 讲述产生的背景 1. 展开解说相关的体验,给出进一步的阅读资料 == 用之,不学! == `Enjoy it! don't Learnning` * 来自 [:ObpLovelyPython/CDay-5:CDay -5 Python初体验和原始需求] 背景:: '''"[编程杂谈]做个项目吧" ''' * 访问地址: http://blog.donews.com/limodou/archive/2004/12/10/199174.aspx * 精巧地址: http://bit.ly/YOdMc * 来自中国Python 著名行者 Limodou 的Blog,是他维护着 UliPad(当时还叫 NewEdit) 这一轻便实用纯Python 实现的编辑器项目 * UliPad工程网站: http://code.google.com/p/ulipad/ * 在文中 Limodou 倡导在项目开发的实际应用中学习相关知识 解说:: 这是本书的核心本愿! * 在 CPyUG ~ China 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!` * '''寻找吧!不要先想着创造--Python 是自足的''' * 来自 [:ObpLovelyPython/CDay-4:CDay -4 可用的首个Python脚本] * '''你能够碰到的问题,99%的情况下其它人已经遇到过了,所以,最佳的解决方式就是找到那段别人解决相似问题的代码!''' * 来自 [:ObpLovelyPython/CDay-1:CDay -1 中文处理完成功能的实用化] 背景:: 图 atta1-1 漫画电池内置 * attachment:atta1-1.jpg * `Batteries Included`~'''电池内置''' 是Python 的哲学之一! * 详细说明: http://www.uselesspython.com/BatteriesIncluded.html * 精巧地址: http://bit.ly/2vPE15 * 意思是python语言本身,已经天然内置了足够多的实用模块,可以完成大多数常见任务的! * 成功故事之一: * EZTrip.com 选择Python 进行企业整合的故事: http://www.python.org/about/success/eztrip/ * 精巧地址: http://bit.ly/4TrC2 * 另外相关Blog一篇: '''"[编程杂谈]开始读源码吧"''' * 访问地址: http://blog.donews.com/limodou/archive/2005/04/26/352565.aspx * 精巧地址: http://bit.ly/nS0rE * 同样来自 Limodou 的体验分享,文中指出,想写出好代码,就要多看其它优秀作品的源代码;这不仅仅要提取出对自个儿用有的代码,同时也是学习他人的思路和工程设计/组织经验; 解说:: 有自由/开源软件的世界里,解决问题的最快捷途径绝对不是自个儿堆代码解决! * 嗯嗯嗯,当然的出于"程序员"的自尊,以及关键性的经济条件,一般也不允许去买软件来解决问题;-) * Python 使用开源许可证: * 全文访问: http://www.python.org/download/releases/2.4.2/license/ * 精巧地址: http://bit.ly/1xTbla * 所以,各种基于Python 的项目一般都乐于公开源代码; * 加之,Python 因为有丰富的C语言接口,实际上也是种方便的胶水语言--可以平滑的直接或是通过接口模块和各种开发语言協同完成任务! * 故而,用Python 来解决问题,基本上不用自个儿冥思苦想整出代码来,只要用心先搜索一下根据问题域的解决方案设想,广泛调研一下,基本都可以找到一个以上的支持模块或是软件--当然是Python 写的,下载来,稍微配置或是定制/修改一下就好! 作为Pythoner ,应该有这种自觉和自信! * 不过,Python 的各种支持模块/软件都是各行其是的分散在网络中,并没有象Perl 的CPAN 那样形成统一聚集地; * 当前,比较集中的 Python 作品索引中心有: * Python Package Index * 访问地址: http://pypi.python.org/pypi * 精巧地址: http://bit.ly/2QQiMz * Python 官方网络组织的模块包索引,和 setuotools 工具协同,可以自动下载和升级各种己注册模块; * The Vaults of Parnassus: Python Resources * 访问地址: http://py.vaults.ca/apyllo.py * 精巧地址: http://bit.ly/10KY2U * 以问题域为分类,长期收集有大量的软件包信息 * Python Starship * 访问地址: http://starship.python.net/crew/index.html * 精巧地址: http://bit.ly/eMW11 CPAN:: attachment:cpan.jpg * 访问地址: http://www.cpan.org/ * 即: Comprehensive Perl Archive Network ~ Perl 综合典藏网 * 它是一个巨大的Perl软件收藏库,收集了大量有用的Perl模块(modules)及其相关的文件。由于CPAN的收藏丰富,使用者甚多,在世界各地都有许多CPAN的镜站(mirror site)存在。 * CPAN亦是一支Perl程式的名字,其作用是让使用者容易从CPAN下载、安装、更新及管理其他在CPAN上的Perl程式,日常使用类似:{{{ ~$ perl -MCPAN -e shell #第一次进入CPAN时,CPAN将会进行一次配置(configuration)。当配置完成后,就可以利用CPAN来查询CPAN内的Perl模块,并且进行安装。一般操作如下: CPAN> d /bioperl/ 查询有关bioperl的模块 CPAN> install modulename 安装指定的模块 }}} * CPAN的成功引来很多其他编程语言社群的模仿。CTAN(Comprehensive TeX Archive Network,TeX综合典藏网)和CSAN(Comprehensive Scheme Archive Network,Scheme综合典藏网)都参考了CPAN的命名方式。另外PEAR(PHP Extension and Application Repository)也是类似CPAN的PHP程式网站! * 8卦一下: 在Perl 6 之后,因全新设计的Parrot引擎,支持其它语言的解析和字节码编译,故而,Python 有望直接使用CPN! == 否之!守之! == `Keep evolution,never foget the start idea!` * '''不断的否定自己,但是要坚持最初的妄想'''^ --不论战术上如何变化,千万不要忘记战略目标^ * 来自 [:ObpLovelyPython/CDay-3:CDay -3 通过函式进行功能化] 背景:: '''"[编程杂谈]编程就象练书法"''' * 访问地址: http://blog.donews.com/limodou/archive/2006/04/02/808281.aspx * 精巧地址: http://bit.ly/3TGsCt * 还是来自 Limodou 的体验分享,文中指出:编程应该象练毛笔字--只求耕耘,不求收获;在不断的反复修订中积累经验和思路,才会有那么一天一切豁然开朗的! 解说:: 这是 Pythonic 重构心态的劝戒; * 在[:ObpLovelyPython/PCS404:PCS404 代码重构浅说] 中有相关的简介; * 这里特别指出的: 很多时候最初那一瞬间的设想/构思/概念 可能就是整个软件/项目/工程的最核心亮点,千万不要在代码展开编写后,逐渐被各种意外问题所迷惑,忘记了最初那个自个儿真正想完成的功能! * 不断的否定自己,意思是否定自个儿现在的代码实现方式,而不是功能,并且,在重构/增补代码/功能时,有一个基础指标要守住 -- 确保现有所有功能是运行正常的,是可用的,通过测试的! == 发布,持续! == `Keep realese,Keep publish!` * '''发布!为了全人类!'''因为'''一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。一个人如果不关心别人的完善,自己便不可能完善。''' * 发布好象不是通告一嗓子就好的事儿 ~ '''分分分!学生的命根! 文档,文档,文档!软件的颜面!''' * 来自 [:ObpLovelyPython/CDay0:CDay 0 感受软件工程进行发布的准备] 背景:: '''一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。一个人如果不关心别人的完善,自己便不可能完善。''' 源自 庄秀丽老师(任教于北京师范大学 教育技术学院)曾经的一篇Blog: * ''读书摘要——拔高一个层次看分享与协作''{{{ 一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。 一个人如果不关心别人的完善,自己便不可能完善。 这是因为,人要充分发展自己的天性,必须充分发展他的人际关系,也就是在社会之中。 这就回到了孔子、孟子的传统,人要想完善自己,必须实行忠恕、仁义,这就包含了帮助别人。 人要想完善自己,就必须充分发展上苍的天性,帮助别人就是参与天地化育万物的工作。 一个人如果真正懂得了这一切,他就与天地合参,成为一体了。 《中庸》所讲的“明”,便是这个意思:人做到与天地合参,便是完美。 在《中庸》里,至善被称为“诚”(真诚、纯真)和“明”是连在一起的。 《中庸》第二十一章说:“ 自诚明,谓之性。 自明诚,谓之教。 诚则明矣,明则诚矣。”一个人如果把他所领会的都付诸实践,他也就是圣人了。 人只有在自己的实践中,才能懂得这些普通、寻常事的真正意义;也只有真正懂得它们的意义,才能做得完美。 }}} 从中可以体验到分享是暗含帮助他人从而令自己完善的致理的! * 另外一篇Blog:'''"[编程杂谈]写写Blog吧"''' * 访问地址: http://blog.donews.com/limodou/archive/2004/12/14/202590.aspx * 精巧地址: http://bit.ly/49NSOE * 依然来自 Limodou 的分享文章,文中指出:"分享你的心得吧",从中不仅仅可以通过文字的形成,将自个儿的想法和设计真正厘清,同时也是获得越来越多同道中人关注和相互激发的好途径! 解说:: * 在 WEB2.0 时代,各SNS网站都开始号称`永远的beta 版本`,也就是持续发布和改进; * 豆瓣网就是其中的实例,在不断的和资深用户交互沟通过程中,不断的增/删/改网站功能,令网站服务在使用中,不断的及时的影响用户的需求,成为好用的,人们喜欢用的系统; * 再小的程序开发也应该一样,软件开发的本质目标是解决问题,而程序员写程序,就应该永远想着自个儿的代码可以长久的应用下去,可以在所有相似的情景中快速得到复用! * 这就要求对代码要在运行过程中不断的根据新要求/新目标/新情况,持续修订/重构,令代码逐渐变的凝练,稳固!同时,代码本身也应该是简单明晰的,借助简略恰当的注释,甚至于不用注释,任何人都可以快速理解代码的设计思路,执行淤积,实现结构,可以立即加入到其它应用中,稳定的支撑起新的软件来! * 所以,发布一直以来就应该是对内对外的双重发布: 1. 对内: 为自己,通过发布和整理,以及注释更新,令开发者自身,加深对代码的理解,并及时进行再次重构迭代; 1. 对外: 为公众,通过发布和宣传,让其它人获知软件的状态,令有缘人可以及时得到我们的代码,并通过清晰易懂的代码建立起沟通渠道,可以就相似问题域的解决进行互通有无,令好代码传播出去,延长生命周期的同时,也因为及时丰富的使用反馈,令自个儿的代码可以进一步得到增补! == 先用,再修, == `Run! before Enhancement` * '''没有完美的软件!够用并且容易使用的软件已经算是完美的了''' * 来自 [:ObpLovelyPython/CDay-2:CDay -2 利用文本文件完成核心功能] * '''没有最好,只有更合理!''' * 来自 [:ObpLovelyPython/CDay1:CDay +1 首次重构优化数据结构] 背景:: '''"东拉西扯:谁需要更复杂的软件 - 对牛乱弹琴" ''' * 访问地址: http://blog.donews.com/keso/archive/2005/11/18/630753.aspx * 精巧地址: http://bit.ly/4d8BSN * 来自著名博客 keso(洪波),文中从办公软件的对比说开去,就软件本身的品质/功能/易用性等等方面提出了尖锐的诘问; * 从中笔者提纯出的概念是:"当软件或是系统再也没有任何可以放弃的功能时,软件或是系统才处于最佳状态!" * 软件或是系统,并不是越大越复杂就越好的! 因为组成软件的代码,当多到一定程度时,其维护代价会突变,变成完全陌生的怪兽般无法控制! 所以,很早,在软件的远古时代先贤们就提出了好软件的艺术规范: 1. 让每个程序就做好一件事; 1. 假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的; 1. 尽可能早地将设计和编译的软件投入试用,对拙劣的代码别犹豫,扔掉重写; * GNU体系中灿若繁星的优秀软件,就是充分运用以上原则创造出来的;进一步的推荐图书: 图 atta1-2 Unix编程艺术 attachment:unix-art.jpg * 豆瓣推荐: http://www.douban.com/subject/1467587/ * 精巧地址: http://bit.ly/1xsinL 解说:: 以上持续修改的思想,被行者们精炼成了:` Python 八荣八耻 ` * 访问地址: http://wiki.woodpecker.org.cn/moin/Py8Rong8Chi * 精巧地址: http://bit.ly/4e7L5C |
Line 18: | Line 207: |
#!python Python code }}} == 小结 == ## 总体语法等等叙述,注意给出相关知识的阅读指导 |
以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 , 以单步跟踪为耻; 以空格缩进为荣 , 以制表缩进为耻; 以单元测试为荣 , 以人工测试为耻; 以模块复用为荣 , 以复制粘贴为耻; 以多态应用为荣 , 以分支判断为耻; 以Pythonic为荣, 以冗余拖沓为耻; 以总结分享为荣 , 以跪求其解为耻; }}} * 这其中有很多Python的方言性经验,如果没有使用过Python 的读者,可能无从想象,笔者特此对其中一个要点进行简述,其它的就得读者自行在实践中印证进而和鸣了:-) * `以空格缩进为荣 , 以制表缩进为耻;` ~ 这是因为Python 是世界上唯一成功的将代码排版和语法结构融合的语言!例如:{{{#!python def formatCDinfo(root,dirs,files): export = "\n"+root+"\n" for d in dirs: export+= "-d "+root+_smartcode(d)+"\n" for f in files: export+= "-f %s %s \n" % (root,_smartcode(f)) export+= "="*70 return export }}} 其中的函式声明,for 循环体等语法结构的划分,就是使用 `:`配合缩进完成的,这比其它主流语言使用`{`以及`}`来标识,要科学和人性的多!因为这样一来: * 任何人写的Python 脚本有统一的排版,方便他人理解程序思路; * 禁止了任何人写出极其丑恶的非人性代码来!比如说:{{{ #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),每年评选出最令人尖叫的正确代码! * 但是,Python 这一精心设计,在使用中,有不小的阻力,因为大家心爱的编辑环境各不相同,养成的缩进习惯也不一样,经常造成别人的代码,到自个儿这儿打开一看缩进非常的大(因为TAB~制表符在不同的编辑器中自动处理后表现出来的空格数目是不同的)!又或是将另外的代码复制过来就出错~因为TAB和空格混用时,Python 就无法正确的判定出语法结构了! * 所以,行者们建议,使用四个空格来代替所有的TAB(当然的好的编辑器是可以配置成TAB是自动替换成4个空格的!) == 网站?软件! == `Site is Software!` * '''网站软件化绝对不是空话!''' 来自 [:ObpLovelyPython/CDay2:CDay2] 背景:: SaaS 概念 * 解说:: 如果看待GUI ? * 有关桌面软件开发趋势体验 == 王道?简洁! == `Kingcraft means simple!` * '''KISS 才是王道!'''来自 [:ObpLovelyPython/CDay3:CDay3] 背景:: * KISS 概念 解说:: * 有关软件设计经验 * 所谓:"少即是多" == 想象;无垠! == `Imagine Unlimited!` * '''想象力才是 Pythoner 的唯一界限''' 来自 [:ObpLovelyPython/CDayN:CDay +N]日故事 背景:: * Python的动态性真是让人吃惊 * 访问地址: http://hi.baidu.com/limodou/blog/item/83f4b21937ed174043a9adb5.html * 快速访问: http://tinyurl.com/43teuz * 优雅型修饰 * 访问地址: http://wiki.woodpecker.org.cn/moin/MiscItems/2008-04-17 * 快速访问: http://tinyurl.com/4urfmx 解说:: * 有关资源深度利用经验~ 社区,交流,搜索,知识管理策略 ... 感到不爽,自个儿尝试相应工具解决了,并及时分享出来,是态度0! 感到不爽,自个儿尝试找到解决方案了,并及时分享出来,是态度1! 感到不爽,自个儿尝试修订代码搞定了,并及时分享出来,是态度2! 感到不爽,自个儿未经尝试直接出来吼,期望行者来解决,是最不靠谱态度! = 箴言凝练 = 一切尽在自言中: == 蠎之禅 == 图 atta1-2 Python 内置的哲学诗文 attachment:atta1-2.png 在线的汉化版本收集: * 访问地址: http://wiki.woodpecker.org.cn/moin/PythonZen * 精巧地址: http://bit.ly/2h4f5T {{{ 美丽好过丑陋; 浅显好过隐晦; 简单好过复合; 复合好过复杂; 扁平好过嵌套; 稀疏好过密集; 可读性最重要; 即便实用性比纯度重要, 但是!特殊案例不可特殊到打破规则; 错误从来不会默默消失, 得由人明确的让它闭嘴! 面对模糊,拒绝猜测的诱惑; 应该有一个(宁愿只有一个)显而易见的解决方法; 尽管刚开始方法不会是很明显,即使永远不做比"立刻"做要"聪明", 但是!现在就做永远比不做要好; 只要实现很难解释,那么它就不是一个好主意; 只要实现很容易解释,那么这就是一个好主意; 名称空间是个绝妙想法. --大家一起来实践这些规则吧! -- by Tim Peters }}} == 我们的奋起宣言 == {{{ 每日至少抽一刻钟,解答邮件列表中初学者的问题, 每周至少抽两小时,整理新学知识将体验发表/分享出去, 通过Blog/Wiki/MaiList/个人网站…… 每旬至少抽四个小时, 来翻译自个儿喜爱的自由软件的文档, 每月至少抽八小时, 快乐的编程,推进自个儿的项目, 每年至少参加一次, 自由软件的活动,传播自由软件思想, 发展一名“自由人”…… 只要我们每个人都坚持下去…… 10年!就足以改变中国软件的整体风貌! }}} * 访问地址: http://wiki.woodpecker.org.cn/moin/RouseChina * 精巧地址: http://bit.ly/DSYYt ##endInc |
status |
校对 |
完成度~60%; |
行者箴言
光说不练徦把式,光练不说傻把式! ~ 所以,汇集散落在书中各处的行者"箴言"细说来由;-)
- 每节使用固定的述说模式:
- 给出E文定义
- 给出实例故事的出处
- 讲述产生的背景
- 展开解说相关的体验,给出进一步的阅读资料
用之,不学!
Enjoy it! don't Learnning
- 来自 [:ObpLovelyPython/CDay-5:CDay -5 Python初体验和原始需求]
- 背景
- 解说
- 这是本书的核心本愿!
- 在 CPyUG ~ China 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!
寻找吧!不要先想着创造--Python 是自足的
- 来自 [:ObpLovelyPython/CDay-4:CDay -4 可用的首个Python脚本]
你能够碰到的问题,99%的情况下其它人已经遇到过了,所以,最佳的解决方式就是找到那段别人解决相似问题的代码!
- 来自 [:ObpLovelyPython/CDay-1:CDay -1 中文处理完成功能的实用化]
- 背景
- 图 atta1-1 漫画电池内置
- attachment:atta1-1.jpg
Batteries Included~电池内置 是Python 的哲学之一!
- 意思是python语言本身,已经天然内置了足够多的实用模块,可以完成大多数常见任务的!
- 成功故事之一:
EZTrip.com 选择Python 进行企业整合的故事: http://www.python.org/about/success/eztrip/
精巧地址: http://bit.ly/4TrC2
另外相关Blog一篇: "[编程杂谈]开始读源码吧"
访问地址: http://blog.donews.com/limodou/archive/2005/04/26/352565.aspx
精巧地址: http://bit.ly/nS0rE
- 同样来自 Limodou 的体验分享,文中指出,想写出好代码,就要多看其它优秀作品的源代码;这不仅仅要提取出对自个儿用有的代码,同时也是学习他人的思路和工程设计/组织经验;
- 解说
- 有自由/开源软件的世界里,解决问题的最快捷途径绝对不是自个儿堆代码解决!
- 嗯嗯嗯,当然的出于"程序员"的自尊,以及关键性的经济条件,一般也不允许去买软件来解决问题;-)
- Python 使用开源许可证:
- 所以,各种基于Python 的项目一般都乐于公开源代码;
- 加之,Python 因为有丰富的C语言接口,实际上也是种方便的胶水语言--可以平滑的直接或是通过接口模块和各种开发语言協同完成任务!
- 故而,用Python 来解决问题,基本上不用自个儿冥思苦想整出代码来,只要用心先搜索一下根据问题域的解决方案设想,广泛调研一下,基本都可以找到一个以上的支持模块或是软件--当然是Python 写的,下载来,稍微配置或是定制/修改一下就好! 作为Pythoner ,应该有这种自觉和自信!
- 不过,Python 的各种支持模块/软件都是各行其是的分散在网络中,并没有象Perl 的CPAN 那样形成统一聚集地;
- 当前,比较集中的 Python 作品索引中心有:
- Python Package Index
精巧地址: http://bit.ly/2QQiMz
- Python 官方网络组织的模块包索引,和 setuotools 工具协同,可以自动下载和升级各种己注册模块;
- The Vaults of Parnassus: Python Resources
精巧地址: http://bit.ly/10KY2U
- 以问题域为分类,长期收集有大量的软件包信息
- Python Starship
- Python Package Index
- CPAN
- attachment:cpan.jpg
访问地址: http://www.cpan.org/
- 即: Comprehensive Perl Archive Network ~ Perl 综合典藏网
- 它是一个巨大的Perl软件收藏库,收集了大量有用的Perl模块(modules)及其相关的文件。由于CPAN的收藏丰富,使用者甚多,在世界各地都有许多CPAN的镜站(mirror site)存在。
CPAN亦是一支Perl程式的名字,其作用是让使用者容易从CPAN下载、安装、更新及管理其他在CPAN上的Perl程式,日常使用类似:
~$ perl -MCPAN -e shell #第一次进入CPAN时,CPAN将会进行一次配置(configuration)。当配置完成后,就可以利用CPAN来查询CPAN内的Perl模块,并且进行安装。一般操作如下: CPAN> d /bioperl/ 查询有关bioperl的模块 CPAN> install modulename 安装指定的模块
- CPAN的成功引来很多其他编程语言社群的模仿。CTAN(Comprehensive TeX Archive Network,TeX综合典藏网)和CSAN(Comprehensive Scheme Archive Network,Scheme综合典藏网)都参考了CPAN的命名方式。另外PEAR(PHP Extension and Application Repository)也是类似CPAN的PHP程式网站!
- 8卦一下: 在Perl 6 之后,因全新设计的Parrot引擎,支持其它语言的解析和字节码编译,故而,Python 有望直接使用CPN!
否之!守之!
Keep evolution,never foget the start idea!
不断的否定自己,但是要坚持最初的妄想 --不论战术上如何变化,千万不要忘记战略目标
- 来自 [:ObpLovelyPython/CDay-3:CDay -3 通过函式进行功能化]
- 背景
"[编程杂谈]编程就象练书法"
访问地址: http://blog.donews.com/limodou/archive/2006/04/02/808281.aspx
精巧地址: http://bit.ly/3TGsCt
- 还是来自 Limodou 的体验分享,文中指出:编程应该象练毛笔字--只求耕耘,不求收获;在不断的反复修订中积累经验和思路,才会有那么一天一切豁然开朗的!
- 解说
- 这是 Pythonic 重构心态的劝戒;
- 在[:ObpLovelyPython/PCS404:PCS404 代码重构浅说] 中有相关的简介;
- 这里特别指出的: 很多时候最初那一瞬间的设想/构思/概念 可能就是整个软件/项目/工程的最核心亮点,千万不要在代码展开编写后,逐渐被各种意外问题所迷惑,忘记了最初那个自个儿真正想完成的功能!
- 不断的否定自己,意思是否定自个儿现在的代码实现方式,而不是功能,并且,在重构/增补代码/功能时,有一个基础指标要守住 -- 确保现有所有功能是运行正常的,是可用的,通过测试的!
发布,持续!
Keep realese,Keep publish!
发布!为了全人类!因为一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。一个人如果不关心别人的完善,自己便不可能完善。
发布好象不是通告一嗓子就好的事儿 ~ 分分分!学生的命根! 文档,文档,文档!软件的颜面!
- 来自 [:ObpLovelyPython/CDay0:CDay 0 感受软件工程进行发布的准备]
- 背景
一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。一个人如果不关心别人的完善,自己便不可能完善。 源自 庄秀丽老师(任教于北京师范大学 教育技术学院)曾经的一篇Blog:
读书摘要——拔高一个层次看分享与协作
一个人如果力求完善自己,他就会看到,为此也必须同时完善他人。 一个人如果不关心别人的完善,自己便不可能完善。 这是因为,人要充分发展自己的天性,必须充分发展他的人际关系,也就是在社会之中。 这就回到了孔子、孟子的传统,人要想完善自己,必须实行忠恕、仁义,这就包含了帮助别人。 人要想完善自己,就必须充分发展上苍的天性,帮助别人就是参与天地化育万物的工作。 一个人如果真正懂得了这一切,他就与天地合参,成为一体了。 《中庸》所讲的“明”,便是这个意思:人做到与天地合参,便是完美。 在《中庸》里,至善被称为“诚”(真诚、纯真)和“明”是连在一起的。 《中庸》第二十一章说:“ 自诚明,谓之性。 自明诚,谓之教。 诚则明矣,明则诚矣。”一个人如果把他所领会的都付诸实践,他也就是圣人了。 人只有在自己的实践中,才能懂得这些普通、寻常事的真正意义;也只有真正懂得它们的意义,才能做得完美。
从中可以体验到分享是暗含帮助他人从而令自己完善的致理的!另外一篇Blog:"[编程杂谈]写写Blog吧"
访问地址: http://blog.donews.com/limodou/archive/2004/12/14/202590.aspx
精巧地址: http://bit.ly/49NSOE
- 依然来自 Limodou 的分享文章,文中指出:"分享你的心得吧",从中不仅仅可以通过文字的形成,将自个儿的想法和设计真正厘清,同时也是获得越来越多同道中人关注和相互激发的好途径!
- 解说
在 WEB2.0 时代,各SNS网站都开始号称永远的beta 版本,也就是持续发布和改进;
- 豆瓣网就是其中的实例,在不断的和资深用户交互沟通过程中,不断的增/删/改网站功能,令网站服务在使用中,不断的及时的影响用户的需求,成为好用的,人们喜欢用的系统;
- 再小的程序开发也应该一样,软件开发的本质目标是解决问题,而程序员写程序,就应该永远想着自个儿的代码可以长久的应用下去,可以在所有相似的情景中快速得到复用!
- 这就要求对代码要在运行过程中不断的根据新要求/新目标/新情况,持续修订/重构,令代码逐渐变的凝练,稳固!同时,代码本身也应该是简单明晰的,借助简略恰当的注释,甚至于不用注释,任何人都可以快速理解代码的设计思路,执行淤积,实现结构,可以立即加入到其它应用中,稳定的支撑起新的软件来!
- 所以,发布一直以来就应该是对内对外的双重发布:
- 对内: 为自己,通过发布和整理,以及注释更新,令开发者自身,加深对代码的理解,并及时进行再次重构迭代;
- 对外: 为公众,通过发布和宣传,让其它人获知软件的状态,令有缘人可以及时得到我们的代码,并通过清晰易懂的代码建立起沟通渠道,可以就相似问题域的解决进行互通有无,令好代码传播出去,延长生命周期的同时,也因为及时丰富的使用反馈,令自个儿的代码可以进一步得到增补!
先用,再修,
Run! before Enhancement
没有完美的软件!够用并且容易使用的软件已经算是完美的了
- 来自 [:ObpLovelyPython/CDay-2:CDay -2 利用文本文件完成核心功能]
没有最好,只有更合理!
- 来自 [:ObpLovelyPython/CDay1:CDay +1 首次重构优化数据结构]
- 背景
"东拉西扯:谁需要更复杂的软件 - 对牛乱弹琴"
访问地址: http://blog.donews.com/keso/archive/2005/11/18/630753.aspx
精巧地址: http://bit.ly/4d8BSN
- 来自著名博客 keso(洪波),文中从办公软件的对比说开去,就软件本身的品质/功能/易用性等等方面提出了尖锐的诘问;
- 从中笔者提纯出的概念是:"当软件或是系统再也没有任何可以放弃的功能时,软件或是系统才处于最佳状态!"
- 软件或是系统,并不是越大越复杂就越好的! 因为组成软件的代码,当多到一定程度时,其维护代价会突变,变成完全陌生的怪兽般无法控制! 所以,很早,在软件的远古时代先贤们就提出了好软件的艺术规范:
- 让每个程序就做好一件事;
- 假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的;
- 尽可能早地将设计和编译的软件投入试用,对拙劣的代码别犹豫,扔掉重写;
- GNU体系中灿若繁星的优秀软件,就是充分运用以上原则创造出来的;进一步的推荐图书: 图 atta1-2 Unix编程艺术 attachment:unix-art.jpg
- 解说
以上持续修改的思想,被行者们精炼成了: Python 八荣八耻
精巧地址: http://bit.ly/4e7L5C
以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 , 以单步跟踪为耻; 以空格缩进为荣 , 以制表缩进为耻; 以单元测试为荣 , 以人工测试为耻; 以模块复用为荣 , 以复制粘贴为耻; 以多态应用为荣 , 以分支判断为耻; 以Pythonic为荣, 以冗余拖沓为耻; 以总结分享为荣 , 以跪求其解为耻;
- 这其中有很多Python的方言性经验,如果没有使用过Python 的读者,可能无从想象,笔者特此对其中一个要点进行简述,其它的就得读者自行在实践中印证进而和鸣了:-)
以空格缩进为荣 , 以制表缩进为耻; ~ 这是因为Python 是世界上唯一成功的将代码排版和语法结构融合的语言!例如:
其中的函式声明,for 循环体等语法结构的划分,就是使用 :配合缩进完成的,这比其它主流语言使用{以及}来标识,要科学和人性的多!因为这样一来:
- 任何人写的Python 脚本有统一的排版,方便他人理解程序思路;
禁止了任何人写出极其丑恶的非人性代码来!比如说:
#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),每年评选出最令人尖叫的正确代码!
- 但是,Python 这一精心设计,在使用中,有不小的阻力,因为大家心爱的编辑环境各不相同,养成的缩进习惯也不一样,经常造成别人的代码,到自个儿这儿打开一看缩进非常的大(因为TAB~制表符在不同的编辑器中自动处理后表现出来的空格数目是不同的)!又或是将另外的代码复制过来就出错~因为TAB和空格混用时,Python 就无法正确的判定出语法结构了!
- 所以,行者们建议,使用四个空格来代替所有的TAB(当然的好的编辑器是可以配置成TAB是自动替换成4个空格的!)
网站?软件!
Site is Software!
网站软件化绝对不是空话! 来自 [:ObpLovelyPython/CDay2:CDay2]
- 背景
- SaaS 概念
- 解说
- 如果看待GUI ?
- 有关桌面软件开发趋势体验
王道?简洁!
Kingcraft means simple!
KISS 才是王道!来自 [:ObpLovelyPython/CDay3:CDay3]
- 背景
- 有关软件设计经验
- 所谓:"少即是多"
想象;无垠!
Imagine Unlimited!
想象力才是 Pythoner 的唯一界限 来自 [:ObpLovelyPython/CDayN:CDay +N]日故事
- 背景
- 有关资源深度利用经验~ 社区,交流,搜索,知识管理策略 ...
感到不爽,自个儿尝试相应工具解决了,并及时分享出来,是态度0! 感到不爽,自个儿尝试找到解决方案了,并及时分享出来,是态度1! 感到不爽,自个儿尝试修订代码搞定了,并及时分享出来,是态度2! 感到不爽,自个儿未经尝试直接出来吼,期望行者来解决,是最不靠谱态度!
箴言凝练
一切尽在自言中:
蠎之禅
图 atta1-2 Python 内置的哲学诗文
attachment:atta1-2.png
- 在线的汉化版本收集:
美丽好过丑陋; 浅显好过隐晦; 简单好过复合; 复合好过复杂; 扁平好过嵌套; 稀疏好过密集; 可读性最重要; 即便实用性比纯度重要, 但是!特殊案例不可特殊到打破规则; 错误从来不会默默消失, 得由人明确的让它闭嘴! 面对模糊,拒绝猜测的诱惑; 应该有一个(宁愿只有一个)显而易见的解决方法; 尽管刚开始方法不会是很明显,即使永远不做比"立刻"做要"聪明", 但是!现在就做永远比不做要好; 只要实现很难解释,那么它就不是一个好主意; 只要实现很容易解释,那么这就是一个好主意; 名称空间是个绝妙想法. --大家一起来实践这些规则吧! -- by Tim Peters
我们的奋起宣言
每日至少抽一刻钟,解答邮件列表中初学者的问题, 每周至少抽两小时,整理新学知识将体验发表/分享出去, 通过Blog/Wiki/MaiList/个人网站…… 每旬至少抽四个小时, 来翻译自个儿喜爱的自由软件的文档, 每月至少抽八小时, 快乐的编程,推进自个儿的项目, 每年至少参加一次, 自由软件的活动,传播自由软件思想, 发展一名“自由人”…… 只要我们每个人都坚持下去…… 10年!就足以改变中国软件的整体风貌!
::-- ZoomQuiet [DateTime(2007-11-03T11:46:56Z)] PageComment2