V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sudayly
V2EX  ›  Python

[OT]使用python开发的缺陷

  •  
  •   sudayly · 2013-06-08 10:40:50 +08:00 · 9428 次点击
    这是一个创建于 3269 天前的主题,其中的信息可能已经有所发展或是发生改变。
    断断续续地用了python已经有4年了,尽管python的本意是pythonic,但事实证明,python的确是够烂的。举证如下:
    1. python的动态类型系统使得开发稍微大点的程序就是个灾难,编译期间没错误,而运行期间崩溃的情形到处都是;
    2. python使用空白控制程序结构,非常不便于各种编辑器处理,如vim,虽然可以通过安装插件解决,但不是每台服务器主机都安装有插件的;
    3. python的list处理完全是个不合格的设计,如a[a.rfind(/)]的返回结果在a有/与没有/时不一致;
    4. python支持函数式编程,也支持面向对象编程,也支持XXX编程,导致编程风格完全统一不起来,当要合并其它人开发的代码时,真是头疼。
    第 1 条附言  ·  2013-06-13 00:22:40 +08:00
    看到这么多回复,有以下两点体会:
    一、当我说python某个缺点时,往往会有人反驳说,楼主写过单元测试吗,楼主会用svn吗?对于这类问题,我想说的是,一是我写过很多单元测试,二是svn我每天也都在用;我讨论的问题是python语言的问题,工具能够一定程度上帮助人们解决这些问题,但这些问题并不会因为工具而完全消除;
    二、我抛出的题目,根本就不具攻击性,也不具侮辱性,仅仅个人在使用python过程中的体会,但硬生生的被某些人理解为攻击性,具有侮辱性。
    55 条回复    1970-01-01 08:00:00 +08:00
    yakczh
        1
    yakczh  
       2013-06-08 10:47:46 +08:00
    参考 /t/61449
    micyng
        2
    micyng  
       2013-06-08 10:49:23 +08:00
    动态类型的问题只要是动态语言都会有,assert多用?
    用空格区分逻辑块的确很讨厌
    SErHo
        3
    SErHo  
       2013-06-08 10:53:25 +08:00   ❤️ 5
    如果举四个例子就能说明某个语言是个烂语言,我估计没有一个语言不是烂语言。
    xiaket
        4
    xiaket  
       2013-06-08 11:01:27 +08:00
    2是流程问题, 不应该在服务器上修改代码.
    leiz
        5
    leiz  
       2013-06-08 11:04:50 +08:00
    3. python的list处理完全是个不合格的设计,如a[a.rfind(/)]的返回结果在a有/与没有/时不一致;

    这个说明白点?
    hit9
        6
    hit9  
       2013-06-08 11:05:41 +08:00
    看楼下怎么喷
    thedevil5032
        7
    thedevil5032  
       2013-06-08 11:10:21 +08:00 via iPad
    1,没有 Python 大型开发经验。但因为类型不对运行时崩溃,真的是语言的问题吗?不懂。
    3,rfind 貌似是 str 的方法吧?和 list 有关系吗?
    4,编程风格不是团队写代码之前定好的吗?不统一也可以怪语言?

    你说的1和4实际是一个问题,“因为语言太自由,所以不好。”

    ps 坐等楼主被喷。
    keakon
        8
    keakon  
       2013-06-08 11:15:12 +08:00
    楼主肯定是来赚金币的,用了 4 年 Python 还弄错大小写的真奇葩。

    1. 我从来没遇到 Python 崩溃过。倒是 C 系的软件遇到过段错误、内存不可读/写之类的问题,当然编译时没问题。
    2. 自己的电脑/虚拟机肯定会做相应的配置,生产系统上不该直接改代码。让你麻烦点就是为了不让你碰代码=。=
    3. 这句话可以理解为「可口可乐不能喝啊,因为百事可乐有毒」。你喷的是 list 还是 str 啊?想要异常的话,a[a.rindex('/')] 可以满足你;不想要的话写成 '/' if a.rfind('/') > 0 else None。好像除了 Lisp,没有更优雅的写法了。
    4. 风格不一致的都开除呗。据我所知,一切图灵完备的编程语言,都支持这些编程。也没有任何一门语言,能限制使用者的风格,包括汉语。
    swulling
        9
    swulling  
       2013-06-08 11:18:54 +08:00
    2. python使用空白控制程序结构,非常不便于各种编辑器处理,如vim,虽然可以通过安装插件解决,但不是每台服务器主机都安装有插件的;

    这个需要装插件,难道不是直接一行
    au FileType python set shiftround expandtab softtabstop=4 tabstop=4 shiftwidth=4 textwidth=79
    yuelang85
        10
    yuelang85  
       2013-06-08 11:38:34 +08:00
    不相信楼主用过4年python,用了四年python还是这个水平,楼主,下面的话自己想象吧。。。。


    1. python的动态类型系统使得开发稍微大点的程序就是个灾难,编译期间没错误,而运行期间崩溃的情形到处都是;

    楼主可知道什么叫单元测试?什么叫解释性语言?什么叫靠谱的程序员?楼主确定写程序之前学过python?


    2. python使用空白控制程序结构,非常不便于各种编辑器处理,如vim,虽然可以通过安装插件解决,但不是每台服务器主机都安装有插件的;

    楼主不会用vim,vim中:help vi:

    范例:# vi:set ts=8 sts=4 sw=4:


    3. python的list处理完全是个不合格的设计,如a[a.rfind(/)]的返回结果在a有/与没有/时不一致;
    >>> ['1'].rfind()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'list' object has no attribute 'rfind'

    还有,请学习下'/'的含义。


    4. python支持函数式编程,也支持面向对象编程,也支持XXX编程,导致编程风格完全统一不起来,当要合并其它人开发的代码时,真是头疼。

    组内没做过培训?没做过编程规范?楼主的同事都是我行我素的自由人士,完全没有团队合作意识?



    断断续续地用了python已经有4年了,尽管python的本意是pythonic,但事实证明,python的确是够烂的。

    四个例子说明楼主连 "google pythonic"都没做过。“4年python经验”,提出这四个问题,可以知道楼主真正动脑写python可能不到k行。

    总结:

    楼主不会用python,不会用vim,楼主是来骗钱的,楼主不是合格程序员。
    Golevka
        11
    Golevka  
       2013-06-08 12:09:31 +08:00
    只同意第二条, 我也讨厌layout syntax.
    1: dynamic typed language都不要活好了, 统统烧死算了
    3: 你确认str.rfind是list处理么?
    4: multi-paradigm是大趋势, 你居然认为python在FP上做得太多了? 我倒认为就这一问题perl都能爆python. python半残废的lambda我就不吐槽了
    aisk
        12
    aisk  
       2013-06-08 12:12:51 +08:00
    看了这么多语言之争,最后发现问题的来源还是不同开发人员有不同背景。
    对于一个搞多年XX企业级应用,需要很多不同水平的人员合作的开发人员,是很难理解动态语言的好处的。
    对于一个搞web多年的人,同样也很难理解c语言为嘛这么难用。
    undozen
        13
    undozen  
       2013-06-08 12:23:49 +08:00
    @aisk 接你的话题,想到最近流行的那篇《如果用招聘程序员的方式招聘木匠…》 http://jianshu.io/p/jRRz5u
    Ricepig
        14
    Ricepig  
       2013-06-08 12:39:39 +08:00 via iPhone
    关于编码规范的问题,还有灵活的问题

    实际上,如果语言本身不能帮一点儿忙的话,就需要额外的工作来保证了。

    规范阿,措施阿,都需要检查才有效,问题是这种检查是由谁来做
    davepkxxx
        15
    davepkxxx  
       2013-06-08 12:47:20 +08:00   ❤️ 1
    我比较认可的就是动态类型有很多不可预料的错误,这是在开发期间无法想到的,测试也很难测出来,当然经验可以帮你避免一些就是了。

    还有个人认为用缩进控制程序结构的确是很反人类的事情,当然我每遇到过这种问题,因为我是个人开发。

    团队开发的话,人越多遇到上面两个问题的几率就越频繁。
    hooluupog
        16
    hooluupog  
       2013-06-08 12:49:30 +08:00
    不多说什么了,我只是反感用python做界面的,尤其是ubuntu和gnome那俩,桑不起~~!
    undozen
        17
    undozen  
       2013-06-08 12:53:44 +08:00 via iPhone
    @Golevka 哈哈,老爹还有过拿掉 lambda 的念头呢
    swulling
        18
    swulling  
       2013-06-08 12:55:22 +08:00
    @hooluupog Ubuntu和GNOME用Python做界面?搞笑。。
    hooluupog
        19
    hooluupog  
       2013-06-08 12:57:20 +08:00
    @ swulling 慢慢笑吧。
    skydark
        20
    skydark  
       2013-06-08 13:00:04 +08:00
    一个月 * 48 也是四年……
    目测lz只是在跳槽 Java 前顺势骗分的[good][like][so what]
    kuphrer
        21
    kuphrer  
       2013-06-08 13:06:12 +08:00 via iPad
    Troll到处都有啊
    yuelang85
        22
    yuelang85  
       2013-06-08 13:27:40 +08:00
    @davepkxxx 缩进这个绝对是人的问题。缩进带来的好处,就是代码视觉上统一,极大提高了阅读效率。

    团队中搞不定缩进,我不相信这样的团队能搞定什么。。。。
    lyoe
        23
    lyoe  
       2013-06-08 13:27:47 +08:00
    LZ在哪家公司上班啊?居然让你们到服务器直接修改代码。
    目测LZ是来骗分的
    sudayly
        24
    sudayly  
    OP
       2013-06-08 14:09:29 +08:00
    统一回复吧。
    我是做离线数据处理的,使用map reduce编程框架对数据进行处理。

    现在的情况是job用c++开发,但组织job的输入输出还有配置内容的脚本是用python写的,在写这些脚本的时候碰到的这些问题。

    至于我个人,平时主要用c++和java,python的确不怎么用,不过在学校里曾用其作过实验自动化与画数据图等。

    这个帖子主要有两个目的,一是图謿,二是骗分。
    lemayi
        25
    lemayi  
       2013-06-08 15:02:11 +08:00   ❤️ 1
    我来问下OT是个什么东西?
    reorx
        26
    reorx  
       2013-06-08 15:07:33 +08:00 via Android   ❤️ 1
    @lemayi Off Topic 的缩写,一般用在邮件列表里。楼主是来钓金币的,鉴定完毕。
    swulling
        27
    swulling  
       2013-06-08 15:22:31 +08:00
    @hooluupog unity是python写的?gnome3是python写的?gtk2是python写的?gtk3是python写的?你随便找个unity/gnome源码统计下是c++多还是python多还是javascript多
    hooluupog
        28
    hooluupog  
       2013-06-08 16:02:58 +08:00
    @ swulling GUI APP,GUI tookit
    wodemyworld
        29
    wodemyworld  
       2013-06-08 19:39:56 +08:00
    1,需要类型验证的地方居然还用原生的基本类型?那就是你自己的问题了吧,输入变量怎么可以是原始类型呢,你可以自己定义类啊,真是晕死
    2,在服务器上编程,你太搞笑了吧,真服了,3流的自虐程序员么
    4,这跟python有个jb关系,java、.net都可以有函数式编程,风格不统一这是人的问题,你让他们统一啊,不统一就直接开了,这种屁事也能算到python头上来
    bhuztez
        30
    bhuztez  
       2013-06-08 19:42:27 +08:00
    +1

    Static analysis of C code is useful, but if you are thinking of starting a new project, choose a sensible language! Don't start new projects in C or C++, or dynamic languages like Perl and Python which leave errors in code for customers to find.

    http://people.redhat.com/~rjones/cil-analysis-of-libvirt/
    zjxubinbin
        31
    zjxubinbin  
       2013-06-08 21:53:15 +08:00
    楼主教会了我怎么获得论坛金币啊::::制造一个被喷的话题....
    ipconfiger
        32
    ipconfiger  
       2013-06-08 22:05:38 +08:00
    虎躯一震,送五分走人。

    1.世界上没有无坑的语言,只有掉坑里的程序猿。
    2.目测坡主是个java程序员,或者csharp的
    lddhbu
        33
    lddhbu  
       2013-06-08 22:29:09 +08:00
    楼主在服务器上修改代码?是否懂什么叫流程管理、版本管理
    Hyperion
        34
    Hyperion  
       2013-06-08 22:32:46 +08:00
    建议LZ到cpyug邮件列表里发一帖, 效果会比在这里跟好!~
    metaclass
        35
    metaclass  
       2013-06-08 22:45:32 +08:00
    目测“断断续续地用了python已经有4年了” == “断断续续地用了python已经有4天了”,每天发现一个问题,正好4个,然后上来吐槽
    nil
        36
    nil  
       2013-06-09 00:11:57 +08:00
    求解释:
    为啥方法有显性self参数
    为啥len()不是方法是函数
    为啥没有len()方法
    为啥lambda这么残疾
    为啥python能火起来。。。
    jjx
        37
    jjx  
       2013-06-09 04:10:27 +08:00
    这个就像找女朋友一下

    不适合你,就不要用了, 像俺,经历了 近10种语言后,才发现python是最爱
    metaclass
        38
    metaclass  
       2013-06-09 08:14:42 +08:00
    @nil

    为啥方法有显性self参数 —— 你是做Java的(或者你看下Python 3)
    为啥len()不是方法是函数 —— 你是做Java的
    为啥没有len()方法 —— 你是做Java的
    为啥lambda这么残疾 —— 你是做Java的(8也要有lambda了)
    为啥python能火起来。。。 —— 你是做Java的

    总结:你就是做Java的
    nil
        39
    nil  
       2013-06-09 16:01:32 +08:00
    @metaclass python文档里面说,为啥python的对象模型没有信息隐藏?因为pythonic。。。
    断言式大忽悠,洗脑专用~
    真没做过java,不过python的设计和我做什么有关?
    feihu
        40
    feihu  
       2013-06-09 16:11:51 +08:00
    传说douban工程师也比较喜欢服务器上改代码,求辟谣。
    piniing
        41
    piniing  
       2013-06-09 16:26:59 +08:00
    哈哈,楼主来搞笑的,大家不要太认真
    sudayly
        42
    sudayly  
    OP
       2013-06-09 18:34:25 +08:00
    @piniing 哈哈,很多真理都是在笑话中说出来的。
    sudayly
        43
    sudayly  
    OP
       2013-06-09 18:36:40 +08:00
    @feihu 非豆瓣。因为开发代码都是在集群的一台机器上开发的,测试可能又会到另外一个集群上跑,而不是每台机器上都有对应的vim插件的。
    greatghoul
        44
    greatghoul  
       2013-06-09 18:41:53 +08:00
    楼主太二了,必定是 Java 社区过来的。
    sudayly
        45
    sudayly  
    OP
       2013-06-09 18:44:42 +08:00
    @greatghoul
    一、 搞java的根本就不2;
    二、 我是写过一段时间的java代码,但还是以C++为主;

    你是觉得写Python代码就”高等程序员“了吗?
    est
        46
    est  
       2013-06-09 18:50:58 +08:00
    @nil 有self 还不好么。如果你觉得类太麻烦。别人类的方法直接拿过来就用。。。

    otherClass.method(myInstance, param)

    > 为啥len()不是方法是函数 为啥没有len()方法

    这个是你自己学艺不精吧? obj.__len__() 不是你想要的是啥?


    我个人是比较讨厌 .NET 和 Javascript 里边遍地的 .toString() 恶心死了。
    greatghoul
        47
    greatghoul  
       2013-06-09 21:59:33 +08:00
    @sudayly 哥们你太会误解了。

    首先,我觉得楼主的确有些二,并非 java 比较二。

    在社区中发布这样观点鲜明,并具有一定攻击性的话题难道不二吗?当然也可以想挣些金币。
    你列举的这几点与以往争论中一些 Java 腐的观点相当一致,因此有些结论。

    其实我觉得 C++ 程序员似乎应该和 Python 更亲切才是。。。

    1. 运行时崩溃这种事,和静态编译什么的真心关系不大,如果是一个没有什么水准的开发人员,即便有静态检查,代码跑起来也是各种坑,动态语言让你把精力集中到业务上,而不是去检查语法。
    2. 使用 Vim 无需安装任何插件也可以方便的编写 Python 代码吧,完全不存在空白符混乱的问题,楼主显示 Vim 中毒不深。
    3. 这些动态语言的 list 再美不过了
    4. 所以这才叫动态语言,而且 Python 的强制缩进已经使代码可读性好很多了,再加上一些格式约定,代码风格完全不是问题。

    5 块钱送上,楼主收好快走。
    greatghoul
        48
    greatghoul  
       2013-06-09 22:04:15 +08:00
    @sudayly 因为开发代码都是在集群的一台机器上开发的,测试可能又会到另外一个集群上跑,而不是每台机器上都有对应的vim插件的。

    其实我觉得你们运行期程序各种崩溃就是因为你们这样乱改代码才导致的。

    - 既然是很大的项目,代码肯定是要通过各种测试来保证质量的
    - 修改流程必定是本地修改,跑完测试才能提交的吧,服务器上肯定是通过更新的吧
    或者你们有 CI,哪里可能需要到服务器上手工改代码

    你们没有用版本控制吗?
    nil
        49
    nil  
       2013-06-09 22:55:20 +08:00   ❤️ 2
    python社区看起来也是诸多脑残粉,楼主亮出几个观点,懂的说出反对意见,不懂的也不用人身攻击吧~ 有用的没提,又是二xx的,又是java程序员的大帽子猛劲扣。另外用什么语言至于搞出来那么大优越感么~ 囧rz。。。一个个的装13

    python说起来也就是也就是一门全面平庸的语言,强制缩进语法毁誉参半,逼格不见得高到哪去吧;值得称道的就是一堆库,庞大的社区,不过看楼上几位的德行。。。

    丫的,不应该乱说实话的
    unionx
        50
    unionx  
       2013-06-10 05:25:22 +08:00
    叫你们用Lisp你们又不用,哼
    raptor
        51
    raptor  
       2013-06-13 11:35:53 +08:00
    就我用过的主流程序语言来说(像汇编一类的非主流就不提了)……
    1. C/C++/JAVA编译没错,运行崩溃的情形到处都是,碰上菜鸟留个野指针(C/C++),连错误都不知道上哪找去。
    2. 自从我写程序开始,就从来不用tab字符(默认配置IDE或编辑器为一个tab等于4个空格,别说你不会配置vim,这种简单的事情不需要插件),缩进一律用空格,从来没有因此碰到问题……BTW:即使是写C/C++/JAVA,我也习惯整齐缩进。
    3. 再好的设计也挡不住错误的使用,如果list对负索引丢出异常,你是不是又要怪它编译时不出错,运行时崩溃了呢?
    4. 你一定没有用过C++……python的风格很统一,那就是pythonic,只是再好的风格也挡不住有人乱用,JAVA风格够严格了,一样会有人写出来惨不忍睹的代码。
    zzcflying
        52
    zzcflying  
       2013-06-13 17:38:11 +08:00
    很怀疑楼主是4年python developer。就第三点就看出来了。麻烦以后看完文档再出来吐槽。
    ivenvd
        53
    ivenvd  
       2013-06-14 13:13:24 +08:00
    楼主说不依赖于工具,却又依赖于编译器进行错误检查,不是自相矛盾么?

    5 铜拿去。
    Hyperion
        54
    Hyperion  
       2013-06-14 13:38:13 +08:00
    @nil @sudayly 写一门爱一门有错吗? 往别人头上套装13的帽子, 先看看自己发的帖吧... 每个人都有自己的喜好别人就不能说了? 别人与你素不相识, 猜测一下有错吗?

    不喜欢? 换! 不习惯? 换! 讨厌? 换! 换工作换工种还是换语言, 这我就没办法说了.

    顺带一提我自己的喜好, 强制缩进真心好, 对付不喜欢缩进的人一枪一个准. java就说了, 反正我讨厌.

    语言放在那里, 发这种抱怨帖, 意义? 语法会因这帖子改变? 我感觉, 说白了就是不会...

    其实本身就是个没营养的题目, 自然让他沉下去是最好的办法.

    最近发奇怪帖子的人, 都是不设头像的家伙啊. 5铜拿去, block, 不送!
    Hyperion
        55
    Hyperion  
       2013-06-14 13:40:26 +08:00
    @Hyperion "java就说了" => "java就不说了"
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2510 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:46 · PVG 10:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.