今天,
天气晴朗,风和日丽;
我其实在说谎……
爱说谎其实是我的天性
上个礼拜四我就用景观三元论说了很多谎话,然后一头大象自己上吊了,
了不起的大象啊,盖茨比也要从坟墓里爬出来了吧,
陈年旧事,
紫露凝烟,
没有了盖茨比的坟墓依然是遗址公园,景观三元论如是说。
景观三元论问:盖茨比,你为何不用C++写代码?非要用ruby或者python这种运行很慢的语言呢?
盖茨比说:
老兄,你要求快,干脆直接用汇编语言去写吧。
举个例子吧,
你用C++写一个实现某个功能的程序,这个程序的运行速度确实很快,只要0.0001s即可,
而我用python或者ruby写同样一个程序,它的运行速度确实慢很多,需要0.01s,确实慢了很多很多倍。
但是,
你写那段C++的程序,你花了一天的时间,
而我用python或者ruby写这段同样的代码,只要10分钟,
而0.01s已经绰绰有余地满足了我的功能需求,它和0.0001s对我来说都是一眨眼的功夫。
所以人生苦短,我用python/ruby
接下来我就说python了
因为是散文,所以不会那么系统地说,
主要就点到为止地说说如何像一个pythonic一样去写python
a, b = b, a
在以前写排序代码的循环体内,经常会需要单独搞个中间变量,然后z=a,a=b,b=z
现在一句话优雅的搞定了,如上。
[ i*2 for i in xrange(3) ]
列表推导式式这类语法糖可谓凶器啊,不仅简单优雅,而且威力很大。(同样适用于元组、集合、字典)
>>> isinstance(1, (float, int)) True >>> isinstance(1.3, (float, int)) True >>> isinstance("1.3", (float, int)) False
请不要适用type(1.3)去看变量类型,这样不专业,用isinstance吧,isinstance(1.3, float),而且isinstance还可以接受类型的元组从而适用多个类型,很优雅吧。
>>> print "Hello %(name)s !" % {'name': 'James'} Hello James ! >>> print "I am years %(age)i years old" % {'age': 18} I am years 18 years old >>> print "Hello {name} !".format(name="James") Hello James !
带关键词的格式化。有点模板引擎的味道。
def add(x, y): return x + y lst1 = [1, 2, 3, 4, 5] lst2 = [6, 7, 8, 9, 10] lst_sum = map(add, lst1, lst2) # lst_sum == [7, 9, 11, 13, 15]
python对Haskell这种有趣的函数式编程语言的继承借鉴还是很多的,在此就点到为止地提一下filter(),reduce(),map(),lambda...因为是散文,就不说细了。。。。
写代码的习惯,排版上,空格上,注意一些,也很重要,虽说推荐似乎名叫pep8规则,但是我觉得基本上注意到一些这些细节就够了
看过一排how to use python as a pythonic,好像叫这个名字的网页。
其实我觉得最有用的就是注意括号中参数的空格,以及等于号前后加个空格,看起来舒服清爽点
注意即可
在此推荐一些关于python的好的参考网站:
https://pyzh.readthedocs.org/en/latest/
http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
不推荐多,就推荐者两个,一个中文的,一个英文的。
至于面向科学计算的,建议学numpy和scipy,忘了还推荐目前只有4个api的jerkpy,博客中的另一篇文章介绍了。
做图像识别 建议opencv,骨骼识别openNI
对于网络编程,建议用request取代urllib和urllib2
异步的twisted我还没看。
网络框架嘛,python的网络框架还是有很多的,比较白话开放,从plone、django(这个词的d不发音,读“江go”,但是在中国,入乡随俗也没问题)、flask、bottle、tornado
基本上都接触过,但是我最终选定了优雅的异步框架tornado
说说吧
django虽然很多人用,也很全,很快,但是太重、耦合性相对较高,不适合做大型网站,用来给普通公司做私活可以;
flask是个比较新的框架,也很轻,很新,社区也比较团结新锐,我本来也用这个,但是后来还是决定不用它,原因是综合的,一个是自身喜好吧,我其实挺喜欢flask的,但是还是似乎觉得他位于一个不轻不重的位置,虽然社区很不错,是牛B团队开发的,但是感觉稍微还是有那么一点乱,有种逐步从webpy的量级向django发展的趋势。
web.py是个不可逾越的轻量级鼻祖,虽然创始人挂了,但是这个经典的框架非常经典。不过似乎又太轻了,以及缺乏创始人维护。
做大型网站就应该松耦合,用轻量级的框架来干事,用密斯凡德罗的话,少即是多,以小打大。
bottle可谓一个玩具,上手很快,非常适合给小学生玩。也算经典吧。
tornado我最推崇,非常优雅的一个基于web.py发展而来的异步框架,即使不用他的异步,他也是一个值得推崇的东东,不仅仅是因为其能承受高并发、异步、安全cookie、防止xsrf攻击等,而更是因为这个框架的架构高明,优雅。 在此之前,我实践了ruby on rails,django, flask, web.py, nodejs ,虽然这些都是杰出的框架,但是自从我遇到了tornado,我已经决定tornado是我的归宿。一把利器啊,经过大半年的实践,我总结到centos+nginx+tornado+memercached+nosql+mysql+python,为何没人从一开始就告诉我这个,这样就不用走弯路了,所以天才都不是凭爹的,而是拼哥的,我真羡慕我堂弟有我这样一个哥哥,等他中考后就去教他这个,瞬间觉得自己高中三年,大学四年,研究生两年半真是糊里糊涂地走了好多弯路啊,被三元论这类。。。。其实三元论还不错,是一个不错的思想。但是如果称同济景观为中国最好的景观学,那太不够了,目前中国根本没有景观学专业,回过头,发现被骗了好多年啊。。。如果上天在给我一次机会,我会在高一后就退学,然后自行软硬兼修外加学规划设计;现在老了。。。。幸亏去年受到了松本行弘的思想的感染,让我断筋再续,虽然不用ruby了,但是这种思想已然扔不掉了。。。。
以前写的都是技术博客,今天写了一篇技术散文,
正所谓形散而神不散,松耦合,强内聚。我又说谎了,其实想到什么写什么吧,为所欲为。。。
python上手很快,未来每个人都必须会编程,而python和ruby是非常人性化的语言,所以会有大部分人都会python或者ruby的
python上手很快,但是代码质量以及把代码写得跟机器合二为一还是需要境界的,要充分《深入了解计算机系统》,其实讲简单点,不说套话,最基础的一个步骤就是充分利用cpu的运算能力,注意内存,异步的核心我原以为只是释放cpu资源,后来发现非阻塞不仅仅是释放cpu,也同时释放网络资源,说的比较土,原因很简单,没学过计算机系统那门课,那本书也没看完。。。。不过,换句话说点到为止,慢慢看完那本书足以,汇编语言真的没必要学了,compilers这种都是有追求的码农去学的,从一个景观设计师的角度来说如何像松本所说的那样从人的角度出发,如何让人更舒服地编码。——给码农捶背,让码农更舒服地编码。这当让是说笑,事实是前一段时间,从一个播客上听了一个腾讯的产品经理说他们团队的敏捷开发,本来看中了腾讯的产品经理的薪资高,但是还没听完那个产品经理的播客,我彻底失望了,打消了去腾讯的念头了——他妈的,就是个工头,当你与什么样的人共事,则意味着未来的高度,我宁愿与一群无业游民共事也不愿与一群号称敏捷开发的包工头共事,工头只知道工程,而不关心战略,也不关心产品,更不关心如何码农地死活与生活。松本行弘作为一个技术大牛的角度,他已经诠释了如何让程序员更舒服地编程,而我,作为一名“未知方面”的“自封大牛”也将要诠释如何让程序员更舒服地编码“?谷歌一样地舒服的环境,是物质基础,但是真正牛B的方法是少写代码,不写代码。谨慎需求提出,用心的架构设计,从产品设计层面就思考如何尽量少写代码,把时间花在精心设计一个api,让这个api精到可以考虑到后期的迭代开发。从产品设计层面就考虑到代码架构,从而花时间在画“草图”上,而不是直接拿着“cad来画草图”。虽然是景观与建筑设计的经验,但是这是通用的。
松本行弘,他让程序员更加舒服地编程。
弓长一苇,他让程序员更少乃至不用编程。
跳出圈圈看世界,无所谓你是码农,还是建筑师,无所谓你是vc还是cto,无所谓你是教授还是学生,
那些都不重要。
重要的是生活。
生活乃天赋人权,
所谓名利乃身外之物,
无法舍弃追求的不是名利,
而是那种自我的成就感,
但是,我时常提醒朕,
生死由命
富贵在天
人之生,
乃天赋人权,
我并非生来为了写论文,
我生来也并非为了写代码,
我生来也并非为了做设计画图,
这些不是必须的,
这些是没有必要的,
关键在于你是否有勇气去选择,
选择在于每个人的自己手中。
发现写的太直白了,
不能这样,
我应该写的高深一点,
清晨,我撞死一辆卡车。
可惜这首我的成名诗,失传了,可惜。。。我自己也忘了当年怎么写的。
散文说python半篇——景观三元论与盖茨比的对话,布布扣,bubuko.com