• 散文说python半篇——景观三元论与盖茨比的对话


    今天,

    天气晴朗,风和日丽;

    我事实上在说谎……

    爱说谎事实上是我的天性

    上个礼拜四我就用景观三元论说了非常多谎话。然后一头大象自己上吊了。

    了不起的大象啊,盖茨比也要从坟墓里爬出来了吧,

    陈年旧事,

    紫露凝烟,

    没有了盖茨比的坟墓依旧是遗址公园。景观三元论如是说。


    景观三元论问:盖茨比,你为何不用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,也同一时候释放网络资源,说的比較土,原因非常easy,没学过计算机系统那门课。那本书也没看完。。

    只是,换句话说点到为止,慢慢看完那本书足以,汇编语言真的不是必需学了,compilers这样的都是有追求的码农去学的,从一个景观设计师的角度来说怎样像松本所说的那样从人的角度出发,怎样让人更舒服地编码。——给码农捶背,让码农更舒服地编码。这当让是说笑。事实是前一段时间,从一个播客上听了一个腾讯的产品经理说他们团队的敏捷开发,本来看中了腾讯的产品经理的薪资高,可是还没听完那个产品经理的播客。我彻底失望了。打消了去腾讯的念头了——他妈的。就是个工头,当你与什么样的人共事,则意味着未来的高度,我宁愿与一群无业游民共事也不愿与一群号称敏捷开发的包工头共事,工头仅仅知道project,而不关心战略。也不关心产品,更不关心怎样码农地死活与生活。松本行弘作为一个技术大牛的角度,他已经诠释了怎样让程序猿更舒服地编程,而我,作为一名“未知方面”的“自封大牛”也将要诠释怎样让程序猿更舒服地编码“?谷歌一样地舒服的环境,是物质基础。可是真正牛B的方法是少写代码,不写代码。慎重需求提出,用心的架构设计,从产品设计层面就思考怎样尽量少写代码。把时间花在精心设计一个api,让这个api精到能够考虑到后期的迭代开发。

    从产品设计层面就考虑到代码架构,从而花时间在画“草图”上,而不是直接拿着“cad来画草图”。尽管是景观与建筑设计的经验,可是这是通用的。


    松本行弘,他让程序猿更加舒服地编程。

    弓长一苇,他让程序猿更少乃至不用编程。


    跳出圈圈看世界。无所谓你是码农。还是建筑师。无所谓你是vc还是cto,无所谓你是教授还是学生,

    那些都不重要。

    重要的是生活。

    生活乃天赋人权。

    所谓名利乃身外之物,

    无法舍弃追求的不是名利,

    而是那种自我的成就感,

    可是,我时常提醒朕,

    生死由命

    富贵在天


    人之生,

    乃天赋人权。

    我并不是生来为了写论文,

    我生来也并不是为了写代码,

    我生来也并不是为了做设计绘图。

    这些不是必须的,

    这些是没有必要的,

    关键在于你是否有勇气去选择。

    选择在于每一个人的自己手中。


    发现写的太直白了,

    不能这样。

    我应该写的高深一点。

    清晨,我撞死一辆卡车。


    可惜这首我的成名诗,失传了,可惜。。

    我自己也忘了当年怎么写的。




  • 相关阅读:
    牛客代码测试栈深度
    "Coding Interview Guide" -- 在行列都排好序的矩阵中找数
    "Coding Interview Guide" -- 括号字符串的有效性和最长有效长度
    "Coding Interview Guide" -- 将正方形矩阵顺时针转动90°
    "Coding Interview Guide" -- 按照左右半区的方式重新组合单链表
    "Coding Interview Guide" -- 先序、中序和后序数组两两结合重构二叉树
    "Coding Interview Guide" -- 只用位运算不用算术运算实现整数的加减乘除运算
    "Coding Interview Guide" -- 从N个数中等概率打印M个数
    "Coding Interview Guide" -- 判断字符数组中是否所有的字符都只出现过一次
    "Coding Interview Guide" -- 字符串的统计字符串
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5094285.html
Copyright © 2020-2023  润新知