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
realNewBee
V2EX  ›  Python

Python 做后端,相对于 Java 或者 go 来说,到底差在哪?

  •  
  •   realNewBee · 2023-08-18 15:32:57 +08:00 · 11620 次点击
    这是一个创建于 464 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 V 站这看了很多文章,都说 py 做后端怎么怎么差,都劝这转 java 和 go ,那 py 到底差在哪呢?本人就是干 py 的,5 、6 年了,也还没意识到差到哪去呀

    第 1 条附言  ·  2023-10-13 11:21:36 +08:00
    对于基础开发(比如网关、调度系统等基础服务),确实是没什么好说的,py 相对于前两者来说确实没啥优势;但是我这说的是业务开发(数据的 CURD),无非就是量的问题(QPS),对于小公司,能有多大的量?人家大公司的量就摆在那,不用 py 那是可以理解的。所以,到底是语言的问题?还是公司业务的问题?
    105 条回复    2023-08-29 13:58:00 +08:00
    1  2  
    Lockeysama
        1
    Lockeysama  
       2023-08-18 15:38:44 +08:00
    语言本质问题,导致性能差点吧,没必要太纠结,合适的业务规模用合适的语言,需要快速不要求并发,Python 就是很好的选择,需要高并发,服务器资源又比较紧张的,选个内存占用低点,性能好点的语言就是更好的选择了
    GeekGao
        2
    GeekGao  
       2023-08-18 15:43:32 +08:00   ❤️ 1
    这都 2023 年了,还在讨论上个世纪的话题。
    一句话:性能与易用性不可兼得。强调性能弱的人,大多是可以接受降低开发效率并无所谓学习难度的人。

    抬杠的说:要性能,手撸汇编、C++去啊。
    中立的说:难道不想早点写完代码摸鱼或下班吗,何必因为学习、开发曲线,大肆增熵难为自己咯。
    ModiKa2022
        3
    ModiKa2022  
       2023-08-18 15:57:49 +08:00   ❤️ 1
    一切以业务需求为准, 并考虑开发速度.
    django 开发速度快, 业务能满足, 可以继续用
    HyperionX
        4
    HyperionX  
       2023-08-18 16:02:42 +08:00
    相对于 go 缺点:部署烦,跨平台烦,依赖安装一坨,异步编程极度痛苦,看同事 py 代码很痛苦
    相对于 go 优点:灵活,可靠的第三方库多,很多语法糖相当舒适
    araraloren
        5
    araraloren  
       2023-08-18 16:02:44 +08:00   ❤️ 1
    Performance is lower than jawa/go.
    Dynamic type is hard to maintain in large project.
    chaleaochexist
        6
    chaleaochexist  
       2023-08-18 16:05:07 +08:00
    动态类型和性能带进来的问题.
    你当然可以说 python 有对应的解决方案
    譬如
    typehint 和 coroutine
    但是引入 typehint 和 coroutine 的同时也引入了复杂性,门槛.和开发效率降低等问题.
    实际上还不如直接用 golang 来开发了.
    chaleaochexist
        7
    chaleaochexist  
       2023-08-18 16:06:47 +08:00
    感慨一下, 我仿佛看到了五六年前的自己...
    chaleaochexist
        8
    chaleaochexist  
       2023-08-18 16:07:04 +08:00
    2017 年 小红书 python 转 java 我也困惑了好一段时间.
    8355
        9
    8355  
       2023-08-18 16:07:54 +08:00
    ggdsn
        10
    ggdsn  
       2023-08-18 16:12:32 +08:00
    我倒觉得性能是次要的,工程复杂了之后 Python 难以维护更难受
    bequt
        11
    bequt  
       2023-08-18 16:13:58 +08:00
    小型项目 python 还行,大或者复杂,python 就开始麻烦了。。。
    转 java 吧,标准化。
    Nich0la5
        12
    Nich0la5  
       2023-08-18 16:25:59 +08:00
    性能差倒是可以扩容,主要问题还是代码风格难以统一,cr 做的不好代码质量更难保证,对于项目把控难度会大很多
    realNewBee
        13
    realNewBee  
    OP
       2023-08-18 16:26:35 +08:00
    这里统一总结一下,并统一回复
    目前也没觉得 py 差到哪去。做业务开发无非就是 CURD ,其实大部分时候通过联表等减少 IO 就能让性能得到保障了。至于并发,对于单机确实没什么优势,但是可以通过 k8s 堆 pod 来弥补,同样能解决并发问题。对于大型项目,应该用微服务来进行分割,也同样能解决。所以,到底差在哪?
    realNewBee
        14
    realNewBee  
    OP
       2023-08-18 16:30:48 +08:00
    @ggdsn 工程复杂导致的难维护,其实主要的问题还是代码分层有问题,然后就是团队没有统一风格导致的吧。跟语言问题导不大呀
    woodfizky
        15
    woodfizky  
       2023-08-18 16:37:29 +08:00
    除了语言本身,招聘也是一个因素吧。搞 python web 的人不算多,招 python 搞 web 的岗位也少。
    PTLin
        16
    PTLin  
       2023-08-18 16:44:09 +08:00
    可能这就是技术之外的原因了。
    提到 java 就是生态丰富,spring 全家桶东西多,大企业都在用,有成熟的解决方案。
    提到 go 就是 goroutine 并发能力强,生成的可执行文件小,谷歌背书,适合做中间件,适合容器化,适合微服务等等。
    提到 python 大家首先会想到的标签肯定还是机器学习,数据分析,简单的脚本语言,动态类型不适合大项目开发。
    实际上一般的项目用什么作为后端可能区别没那么大,语言主流框架的每秒请求数不那么重要,占用内存也不那么重要,要是这些真的至关重要的话早就换成 cpp 或者 rs 来写后端了,反正不管什么当后端不都是连接数据库 redis kafka 这些东西。这样的话从被贴满标签的三个语言里选就很好选了。
    yazinnnn
        17
    yazinnnn  
       2023-08-18 16:47:37 +08:00
    岗位少

    招聘岗位少 -> 用 python 写后端的少 -> 招聘岗位更少 -> ...

    恶性循环了
    Yc1992
        18
    Yc1992  
       2023-08-18 16:47:43 +08:00
    你去写两年 golang 和 Java 就明白了
    realNewBee
        19
    realNewBee  
    OP
       2023-08-18 16:55:06 +08:00
    @Yc1992 java 确实没写过,golang 倒写过,做 web 的话,go 跟 py 确实没太多感受
    Alias4ck
        20
    Alias4ck  
       2023-08-18 17:02:10 +08:00
    在 python 这个区关于语言的争论
    让我想到了一位游戏开发作者 Jonathan_Blow (他是 braid 和 the witness 的作者
    他为了解决 c++开发游戏中的复杂性,开发了一门编程语言 jai
    性能和开发速度 有的时候你真的很难抉择
    另外我有个问题,v2ex 是用什么语言开发的?
    Yc1992
        21
    Yc1992  
       2023-08-18 17:03:08 +08:00
    @yisonchen #19 如果仅仅是 web 领域,代码一万行以内的项目,那确实没啥区别

    至于其他,楼上很多资料,我就不赘述了
    gxm44
        22
    gxm44  
       2023-08-18 17:04:15 +08:00
    动态一时爽。。。。
    dobelee
        23
    dobelee  
       2023-08-18 17:06:48 +08:00   ❤️ 2
    个人喜好。
    经验上来说,强类型出 BUG 的概率会比动态解释型语言低很多。当然代价就是开发效率降低。
    Orenoid
        24
    Orenoid  
       2023-08-18 17:07:00 +08:00
    复杂度上来后,可维护性真的是个大问题
    coderxy
        25
    coderxy  
       2023-08-18 17:10:23 +08:00
    动态语言在长期维护的项目上就是个坑,还有就是没有大厂背书,造成整个从业市场不太行,再者本身性能也确实不太行,py 的协程框架坑也很多。 其实做技术的没必要死磕技术的高低优劣, 后端都差不多,哪一种语言好就业、工资高就选哪个, 何必死磕某一个语言,搞得跟教徒试的。
    tracymcladdy
        26
    tracymcladdy  
       2023-08-18 17:12:29 +08:00
    Java 搭好脚手架可以大把用🐖队友,python 你试试。
    walpurgis
        27
    walpurgis  
       2023-08-18 17:13:48 +08:00
    可维护性就是开发效率,代码量上来后,静态类型只会比动态类型成本低
    SleepyRaven
        28
    SleepyRaven  
       2023-08-18 17:17:10 +08:00   ❤️ 2
    您是否在找:《为什么前端需要 Typescript 》
    realNewBee
        29
    realNewBee  
    OP
       2023-08-18 17:22:02 +08:00
    @coderxy 对,就是这个意思。语言就是个工具,就很奇怪老是有人说这个语言怎么怎么样,哪个语言怎么怎么样。当然,仅仅只针对后端开发
    Maerd
        30
    Maerd  
       2023-08-18 17:24:43 +08:00
    python 、go 、java 都用过,其实写起来,python 是最爽的,但是用起来,性能是真的差,仅仅为纯文本的情况下,fastapi 单核只有 1000 多并发,8 个进程也才 8k ,而 go 、java 简直轻松破万。。。。
    Mithril
        31
    Mithril  
       2023-08-18 17:27:30 +08:00   ❤️ 1
    做技术选型是个很复杂的工作,并不完全能简化成某种技术“好”或者“坏”。

    比如你公司要你作为技术负责人,新开个 web 项目马上要上线。但公司都是拿.NET Framework 做 WinForm 和 WPF 桌面程序的码农。那你最好的选择不是 Java ,而是.NET Core 或者新的 6+。至于说 Java 生态好,但你的 Web 项目本身就不至于用到大规模的微服务,那它给你带来的好处,就比不上熟悉业务的同事。

    同时也要考虑以后招人的难度,万一招到不靠谱的人对你项目的破坏程度等等。比如前端都在逐渐转向 TypeScript ,说明简单自由的脚本给你带来的便利,在项目规模增加,开发时间拉长,团队人员不断更新的情况下,比不上限制严格的语言带来的可维护性提高。但如果你这项目就是个外包,几个月开发完卖掉就不管了,那自然随便什么都行,熟悉 Python 就拿 Python 写。

    所以你既然觉得不差,那可能是你没遇到过别人遇到的这些问题。导致 Python 就是最适合你现有条件的编程语言,那自然也完全没必要跟着别人的建议跑。
    CodeCodeStudy
        32
    CodeCodeStudy  
       2023-08-18 17:28:15 +08:00   ❤️ 3
    @Maerd #30 叫老板加机器。最重要的不是性能,人力成本比机器还贵,最重要的是项目做大了后,动态类型语言更容易隐藏潜在的 BUG ,而静态语言就能在编写代码、编译代码的时候发现。
    dearmymy
        33
    dearmymy  
       2023-08-18 17:30:02 +08:00
    我写 django 。我之前写 c++,对于 python 我认为很多人是 java c++ 转过去随便写写。不了解 python 语言的美。导致下限很高。之前写 c++风格的 python 很别扭。
    python 写大项目。主要问题还是人员下限太高。我自己写自己小项目。django 爽的一批
    thinkershare
        34
    thinkershare  
       2023-08-18 17:34:37 +08:00
    只有一个核心原因:python 这种动态语言存在天然的可维护性问题,而且无法简单的规避。这就是为啥微软要开发 TypeScript , 如果不是因为前端只有 JavaScript 可选,我早换其它语言了。
    ZX576
        35
    ZX576  
       2023-08-18 17:46:13 +08:00   ❤️ 8
    7 年 Python 开发,个人觉得说 Py 不如 Java 、Go 的就是 Py 太自由了,你可以轻易写出能跑但是没几个人看得懂同时维护起来及其困难的代码,Java 不知道,Go 就一种写法,在规划好功能模块之后,从语言层面就规定了谁来写都是差不多的样子,但 Py 不行,要做到写一样的代码对 team 的要求非常高,一是有这个执行力的团队少之又少,二是 Py 的卖点就是容易上手,导致来写 Py 的人平均水平是差于其他 cpp/rs/go 开发者(个人观点),三是很多开发者把 Py 当脚本看不当工程做,见过司内非 Py 其他组写的 Py 代码,真是一言难尽,于是就陷入了恶性循环。


    说性能不行的,请问贵司有几个接口 qps 过百了的?
    coderxy
        36
    coderxy  
       2023-08-18 17:48:51 +08:00
    @yisonchen 现在后端领域主力就是 java 跟 go 了,py 趁早转, 我 16 年刚毕业开始写 node ,写了 4 年,20 年也直接转了, 不光 py 跟 node php ruby .net 等其它小众后端语言这几年都在萎缩,已经陷入恶性循环了。 我转 go 看了一周开始动手写,1 个月左右能熟练 curd ,基本上没啥成本,后面再找工作选择面也大一点,何乐而不为呢?
    chimission
        37
    chimission  
       2023-08-18 17:49:10 +08:00
    是的,做 web 语言本身性能是最不重要的, 你即使是用 C 写的后端, 一个 sql 慢查询还能比 python 块吗。。。。
    virusdefender
        38
    virusdefender  
       2023-08-18 17:51:01 +08:00
    类型问题,大规模工程难以维护
    adoal
        39
    adoal  
       2023-08-18 17:51:46 +08:00   ❤️ 1
    @yisonchen k8s 和微服务是架构层面的事,不是用来解决“动态类型容易有潜伏的初级 bug ,随着项目规模变大会更不可控”这种具体 coding 的问题。当然如果你对 type system 的意义确实是怎么都无法理解,也不介意语言的差别带来的影响,那别人就更没法跟你讲了。不过话说回来,认为什么语言都一样的人,我见过的大多数……当然是去选生态更好的 Java 啦。
    llwwbb7
        40
    llwwbb7  
       2023-08-18 17:51:47 +08:00
    最近开始写 python ,最大的感受就是哪怕我自己写的代码,写完都不敢保证正确,要改的话更是提心吊胆

    go 的话写完能编译过,基本就不会有什么问题
    molika
        41
    molika  
       2023-08-18 17:59:37 +08:00
    如果你是自己做项目 我觉得无所谓 clojure go java py rust 啥的都过上线的项目.
    如果你说关于就业好坏,这个要看环境和市场需要 不评论
    如果你说的是关于语言本身, 咱在个人角度来说那个能够更加高效完成要的目标是最重要的.
    如果是团队 并且人多技术上限下限参差不齐,那最好用 java 之类的.
    如果是小团队 战斗力报表 我觉得没有区别.

    如果你说的程序的运行效率问题, 个人项目随便选, 公司项目要咱在实际角度考虑[成本/维护/性能]

    另外本人维护了一个 py 项目两年多了,已经赚了 40w+,目前依旧没有遇到所谓的性能瓶颈,而且目前维护没有任何压力.所以这个问题可能因人而异.因情况而异. 人要有自己的判断.
    [Imgur]( https://imgur.com/QFKcCiQ.png)
    winglight2016
        42
    winglight2016  
       2023-08-18 18:06:51 +08:00
    @yisonchen #13 我司就是靠 k8s 上堆 pod 数解决 django 性能问题,但是也已经受不了了,之后不是转 sanic 就是转 java 了
    lasuar
        43
    lasuar  
       2023-08-18 18:09:45 +08:00   ❤️ 1
    就 2 点。
    1. 动态类型是“原罪”,导致大项目难以维护
    2. 性能(虽然大部分项目并不会很快遇到性能瓶颈)
    echo1937
        44
    echo1937  
       2023-08-18 18:15:22 +08:00 via iPhone   ❤️ 3
    @yisonchen 不要说语言就是工具这种话,普通人家厨房里菜刀都不止一把呢,适用性完全就是不一样的。
    joApioVVx4M4X6Rf
        45
    joApioVVx4M4X6Rf  
       2023-08-18 18:17:29 +08:00
    我都被 V 站的劝退了打算学 go 了
    shyangs
        46
    shyangs  
       2023-08-18 19:04:32 +08:00   ❤️ 1
    要玩魔法為什麼不選 Ruby 或 JavaScript ,都跑得比 Python 快.

    不玩魔法,要靜態語言為什麼不選 Java 或 TypeScript ,都跑得比 Python 快.

    要便宜招人,員工開發速度快,為什麼不選 PHP ,還是跑得比 Python 快.
    dode
        47
    dode  
       2023-08-18 20:43:36 +08:00
    3.10 之前都没有并行程序
    Stevenv
        48
    Stevenv  
       2023-08-18 20:47:28 +08:00
    Python web 在生态上完全不如 PHP 。
    seliote
        49
    seliote  
       2023-08-18 21:33:14 +08:00
    这玩意是性能的原因吗???不该是生态和没法维护的问题吗
    dddd1919
        50
    dddd1919  
       2023-08-18 22:38:13 +08:00   ❤️ 2
    Java:构建企业级应用
    Go:下一代高性能编程语言
    python:微信广告“学会了十分钟处理一周的 excel 报表,限时 9.9 元“

    语言本身没差,差在给人讲故事
    JonyFish
        51
    JonyFish  
       2023-08-18 22:45:27 +08:00 via Android
    成功了说什么都是对的
    dayeye2006199
        52
    dayeye2006199  
       2023-08-18 23:24:14 +08:00
    当你还在纠结百万并发的时候,很多人和公司已经操着 python php ruby 把该赚的钱先赚到手了。
    wizardyhnr
        53
    wizardyhnr  
       2023-08-19 02:22:15 +08:00
    Python 一开始是个人作品,没有大公司支持。这两年慢慢有大公司赞助可以雇佣专职核心开发者。
    一开始 Python 开发的目标是替代 ABC 语言的脚本语言。并不是主打高性能编程。因为有足够多的拥护者,慢慢向其他领域扩展。用 Python 做 web 打不过其他也不奇怪。因为 Python 并没有大公司支持的团队开发出类 V8 引擎。
    Python 部分接受 no gil PEP 的前提就是 META 提供 2 人/年的专职开发者来帮助。以后的 Python 版本会向性能优化和去除 gil 的方向发展。
    Mojo 如果能搞起来的话,你也不用纠结性能的问题。
    归根到底还是钱的问题。
    james122333
        54
    james122333  
       2023-08-19 06:27:10 +08:00 via Android
    个人不用的原因就是基础的东西不够精美 储存空间占用太大 更别说装额外的 module
    外加系统通常不内置 以及相比其它也很重量级的语言没有效能优势
    要嘛很迷你写写工具(工具并非不能做大事情)
    要嘛跟其它语言一样臃肿
    至于楼上一堆人说什么生态问题那就不是了
    语言本身也都不是问题 都可以自己写东西处理
    james122333
        55
    james122333  
       2023-08-19 06:31:37 +08:00 via Android
    至于有些人讲拿来写小网站 但你设施就不小
    kiwi95
        56
    kiwi95  
       2023-08-19 08:28:59 +08:00 via Android
    在前公司重构过一个 py2 项目,python 魔法太多导致写起来舒服但看起来难受,看到一些奇怪写法无法明确到底为什么要这么写,以及这么写的明确结果得跑一下试一下才知道,调试个问题更是麻烦。并且重构到 go 后,一个大概需要 12 台 4c16g 实例的服务变成了 3 台 2c4g 实例并且响应更快负载更低。当然老项目有历史包袱,重构后轻量了很多。
    ClericPy
        57
    ClericPy  
       2023-08-19 08:35:18 +08:00
    语言的差距远没有人的差距大...
    zachlhb
        58
    zachlhb  
       2023-08-19 08:38:28 +08:00 via Android   ❤️ 1
    我们一直用 python 做后端,并没有觉得差在哪,语言没有贵贱,只有程序员有,就算 java ,程序员水平不行写出来的也和屎一样的
    ospider
        59
    ospider  
       2023-08-19 09:03:56 +08:00   ❤️ 5
    政治和生态罢了。

    你项目再牛逼,有 instagram 和 openai 大?人家用 Python 跑得挺好。扯什么性能、语法的没必要,主要就是生态和惯性而已。国外用 Debian 系多,国内 Centos 多,国外 React 多,国内 Vue 多,国外 Postgres 多,国内 MySQL 多,请问这几个是因为后者更牛逼吗?

    Go 恰逢国内移动互联网浪潮,吃掉了 PHP 的市场,用 Go 重构上位,多少也会涉及到公司内的政治斗争。自己熟悉哪个语言就觉得那个最牛逼,见不得别人说,真挺可悲的。
    dayeye2006199
        60
    dayeye2006199  
       2023-08-19 09:37:27 +08:00 via Android
    大部分软件的规模和性能还达不到 Python 的天花板,好多时候大家人云亦云罢了
    arischow
        61
    arischow  
       2023-08-19 09:39:22 +08:00 via iPhone
    反正我从来不用加班
    davehandong
        62
    davehandong  
       2023-08-19 09:40:01 +08:00
    运行机制不一样,所以使用场景也不一样。

    Java 是解释型语言,运行需要 JVM 。
    GoLang 是编译型语言。
    cbdyzj
        63
    cbdyzj  
       2023-08-19 09:46:33 +08:00   ❤️ 1
    性能差、标准差,主要没有好爸爸
    bitmin
        64
    bitmin  
       2023-08-19 09:50:35 +08:00 via iPhone   ❤️ 1
    每个语言有自己适用的场景,大部分时候没有绝对的最好谁坏吧


    公司有些人还只会 python ,我怕他们会被裁,新开了一个项目用 python 写接口

    大部分业务还没做大就没了,这个新项目我不担心性能和工程复杂的问题

    如果用 python 能快速完成业务需求,并且语言对程序员友好没啥反对的理由

    至于说 python 写的代码不容易维护,就多上心看看代码让同事写好点


    等到业务发展起来了,财大气粗想用啥都行,招些人用 rust 给项目优化部分业务都可以


    对于个人找工作来说确实 python 后端的工作少多了,说实话要不是因为公司里还有人用 python ,新项目没考虑过用 python 写后端
    iorilu
        65
    iorilu  
       2023-08-19 09:51:16 +08:00
    主要还是人的问题

    你可能觉得自己技术没问题

    但事实上, 至少在国内, 写出同样合格的代码, 用 java 肯定难度远比 python 低

    所以从公司角度, 无法找到大量的合格 python 开发是主要原因
    AS4694lAS4808
        66
    AS4694lAS4808  
       2023-08-19 11:26:04 +08:00 via Android
    以前是 java 后端,现在用 python 搞 AI ,感觉还是要看场景。大规模工程化的项目肯定 java ,review 了几十个人写的代码,以及各种库的源码,风格不会差的太远,易懂且格式化,常用的开源库也标准。python 适合搞各种 demo 和 poc 项目,以及科学运算,开发效率真的是比 java 快太多,各种奇奇怪怪的库也很多,甚至有 gradio 这种比 swing 强 N 倍的 UI 库,搭一个简单的项目框架和环境也就不到 10 分钟,但是内部项目因为都不大没有特意规范代码风格,review 的时候发现写法上一千个人有一千个哈姆雷特,开源库的源码也是,量多但是质不确定。不过纯 python 后端的大项目没有经验,按说 fb 以前这么用,多花点精力工程化的能力还是可以肯定的?
    zlstone
        67
    zlstone  
       2023-08-19 13:18:49 +08:00
    都说堆机器,但是今年很多企业都要控制成本,能用一台跑的就绝不开两台,甚至本来好几台的,现在都在想办法降下来。已经不是以前堆机器的时候了。
    zlstone
        68
    zlstone  
       2023-08-19 13:20:21 +08:00
    @AS4694lAS4808 #66 这点确实,Python 库多,但是质量普遍很差,人人都能上手,但是人人写的都不一样,接手别人的代码太痛苦了
    tomczhen
        69
    tomczhen  
       2023-08-19 14:13:48 +08:00 via Android
    PHP:我就喜欢你们看不起我又干不掉我的样子。
    Python:楼上说得对。
    AS4694lAS4808
        70
    AS4694lAS4808  
       2023-08-19 15:12:24 +08:00 via Android
    @zlstone 再遇上写 sdk 但是不用 typing 的人
    james122333
        71
    james122333  
       2023-08-19 21:13:17 +08:00 via Android
    @dayeye2006199

    性能不是大问题 但肥肿性能又不好就是问题
    nonduality
        72
    nonduality  
       2023-08-19 23:31:10 +08:00
    @AS4694lAS4808 Facebook 旗下的 Instagram 服务后端就是基于 Django ,一堆工具链也都基于 Python 。Instagram 这么多年坚守 Python 平台,针对 Python 的不足做了很多优化,有不少成果反馈到 CPython 项目本身,Py3.8 的一个新特性就是他家贡献的,至于即将推出的 No-GIL 也是 Instagram 的员工搞出来的。
    tianzi123
        73
    tianzi123  
       2023-08-20 04:56:02 +08:00
    这个就跟前端 js 都上 ts 一样了,为了规范化和可维护,宁肯损失灵活性
    mmdsun
        74
    mmdsun  
       2023-08-20 23:54:08 +08:00 via iPhone   ❤️ 1
    @davehandong
    Java 既不是纯粹的编译型语言,也不是纯粹的解释型语言,而是一种半编译半解释的语言。
    ecloud
        75
    ecloud  
       2023-08-21 05:48:30 +08:00 via iPhone
    @realNewBee 就是跟语言关系很大。python 写法太自由。20 来人的小团队还好说,大了的话根本无法统一
    ecloud
        76
    ecloud  
       2023-08-21 06:04:11 +08:00 via iPhone
    @ospider ig 这种程度的,在业务角度讲还就是个小程序。随便一个中等机关的 OA 都比它复杂。更不用说啥 ERP, CRM 的了。不过我还真用 put 做了个 CRM😂
    chaleaochexist
        77
    chaleaochexist  
       2023-08-21 09:52:25 +08:00
    真的是叫不醒装睡的人.

    多做几个垃圾项目, 多遇到一些垃圾战友, 多看看屎山代码就明白 java/go 的好处了.
    chaleaochexist
        78
    chaleaochexist  
       2023-08-21 09:53:15 +08:00
    包括所谓的开源项目 譬如 django 的源码

    譬如 django orm 和 gorm 的对比. 就能感觉出来这二者的区别了.
    v2taylor
        79
    v2taylor  
       2023-08-21 10:00:19 +08:00
    python 后端实现太灵活,下限低,没有默认规范,强制要求规范严格执行,能好点
    realNewBee
        80
    realNewBee  
    OP
       2023-08-21 10:07:29 +08:00
    @chaleaochexist 你怎么知道我没做过垃圾项目,没遇到垃圾战友,没碰过屎山代码?现在就是因为可以通过团队规范的管理能力来避免屎山,我才问出这个问题。
    Alias4ck
        81
    Alias4ck  
       2023-08-21 10:30:01 +08:00
    @chaleaochexist 开团了什么叫所谓的开源项目,django 本来就是开源的,您的意思它是不开源的? https://github.com/django/django
    chaleaochexist
        82
    chaleaochexist  
       2023-08-21 10:31:34 +08:00
    @realNewBee #79
    我相信你所在团队的管理能力.

    但你相信所有团队都有这个能力嘛?
    chaleaochexist
        83
    chaleaochexist  
       2023-08-21 10:33:14 +08:00
    @Alias4ck #80 我想表达 django 的源码 不易读 一个类 我不知道有哪些属性, 这些属性指不定在哪里发生变化.
    在不下断点的情况下.
    chaleaochexist
        84
    chaleaochexist  
       2023-08-21 10:35:21 +08:00
    还有就是, 如果一个可以通过团队管理解决, 一个不需要团队管理解决我为什么一定要选需要团队管理的语言?
    在譬如成本.
    可以通过扩展硬件来弥补低性能, 但是我为什么不用 golang/java 来解决这个问题呢?
    为什么一定要头铁选 python 哪怕要付出额外的成本?
    chaleaochexist
        85
    chaleaochexist  
       2023-08-21 10:36:25 +08:00
    另外统一风格也要看统一到什么程度 如果把规范写成一本书, 所有人都要按照那个规范来做的话, 本身时间成本就很高, python 最大的优势也没有了.
    x2ve
        86
    x2ve  
       2023-08-21 10:36:53 +08:00
    我的饭碗不允许我随便选择语言 哈哈 大部分人应该都一样吧
    chaleaochexist
        87
    chaleaochexist  
       2023-08-21 10:45:34 +08:00
    其实 我本人就是 python web 后端, 从个人情感上不应该反对 python.
    我们选择 python 的原因是我所在项目偏运维开发, 而运维很多都熟悉 python, 很多开发工程师都是运维转过去的, 慢慢的就以 python 开发为主了.

    但是针对互联网项目, 我给你举几个例子
    知乎 python-->go
    小红书 python --> java
    饿了么 python --> java

    有哪家公司 * --> python?
    realNewBee
        88
    realNewBee  
    OP
       2023-08-21 10:49:11 +08:00
    @chaleaochexist 对啊,那就是人的问题了呀。只是不同在于一个通过语言特性来做,一个是人来做。但不能说这是一门语言的缺点呀,只是用这门语言的人滥用特性所导致的问题而已呀。我之所以问 py 较于 go/java 到底差在哪这个问题,背景是: 因为我们公司之前就是要转 go ,但是写了几个 go 业务项目后发现,除了接口性能提升了几十 ms 外,几乎没有什么区别,而工作量之于之前是有所增加的,而这几十 ms 的差别对于用户来说却是几乎无感的。那 py 跟 go 比真就这么不堪吗?
    chaleaochexist
        89
    chaleaochexist  
       2023-08-21 11:35:35 +08:00
    @realNewBee
    就是人的问题, 但是人的问题也是问题.

    举个例子.
    西方人肥胖率比日本人高.
    所以 如果你是生产衬衫, 这两个国家投放的大码衬衫的比例应该是一样的, 因为 衬衫是没有缺点的, 差别是人.

    我之前也估算过, 同样一个功能, golang 开发时间 == python * 3

    这就是一个技术方案的取舍问题了.
    没有十全十美.楼上很多人说的很清楚了.

    python 的缺点有两个
    1. 性能问题 -- 你的回复是性能提升不高
    2. 动态类型 -- 你的回复是通过团队管理解决

    好的, 那么请继续使用 python 吧.
    但是对于性能要求高/提升高的或无法通过团队管理解决的公司, 这些就都是问题了.
    chaleaochexist
        90
    chaleaochexist  
       2023-08-21 11:47:23 +08:00   ❤️ 1
    关于提升性能的例子
    https://zhuanlan.zhihu.com/p/48039838
    chaleaochexist
        91
    chaleaochexist  
       2023-08-21 11:49:12 +08:00
    ```
    1. 节约了超过 80% 的服务器资源。由于我们的部署系统采用蓝绿部署,所以之前占用服务器资源最高的几个业务会因为容器资源原因无法同时部署,需要排队依次部署。重构后,服务器资源得到优化,服务器资源问题得到了有效解决。
    多人开发和项目维护成本大幅下降。
    2. 想必大家维护大型 Python 项目都有经常需要里三层、外三层确认一个函数的参数类型和返回值。而 Golang 里,大家都面向接口定义,然后根据接口来实现,这使得编码过程更加安全,很多 Python 代码运行时才能发现的问题可以在编译时即可发现。
    ```
    1 对应性能
    2 对应动态类型
    chaleaochexist
        92
    chaleaochexist  
       2023-08-21 11:53:21 +08:00
    >>> 但不能说这是一门语言的缺点呀,只是用这门语言的人滥用特性所导致的问题而已呀

    这其实就是缺点,
    1. 因为可能导致滥用
    2. 针对于 web 后端领域

    你要说 AI 这些 就不是缺点是优点. 因为易用.

    但是你标题说了是 做后端.
    Philippa
        93
    Philippa  
       2023-08-21 12:17:16 +08:00 via iPhone
    Python 做 web 一般不是强项了,其实微服务还行,毕竟项目都比较 mini 。但涉及分析研究机器学习等,做 web 方便对接是大优势。

    维护大项目简直灾难。但我不同意它比 Node 差,Node 的性能也没好到哪,单纯用 web 这个太窄了,后端涉及还是很大的,Python 在这方面有很多好的框架和拓展,从数据到 web 到机器学习,不是 Node 能比的。
    PVXLL
        94
    PVXLL  
       2023-08-21 12:24:11 +08:00 via iPhone
    别的语言变成屎山大概要两年,py 的只用半年,遥遥领先
    macha
        95
    macha  
       2023-08-21 13:40:23 +08:00
    无他,一个只有跑起来才知道里面有什么数据的语言,重构真是灾难。
    troywinter
        96
    troywinter  
       2023-08-21 14:04:16 +08:00
    语言本身的生态更重要,在国内 java 开发后端有大把的中文资料和从业人员,本身就处于优势地位,语言本身的优劣并不重要
    raycool
        97
    raycool  
       2023-08-21 14:53:57 +08:00
    差距在人而非语言
    dif
        98
    dif  
       2023-08-21 15:25:12 +08:00
    接手了一个 python 屎山代码,我直接想吐。java 虽然也是屎山,多少拉的都规矩点。另外个别库 python 还安装不到 windows ,只能用 wsl ,结果也是一坨屎,每次重新打开项目,上一次配置的 interpreter 就会有些问题(目前我发现是只用 wsl+conda 偶尔会出现,wsl+pyenv 还算正常)。
    mightybruce
        99
    mightybruce  
       2023-08-21 16:28:28 +08:00   ❤️ 1
    看了大多数评论,都没有说的比较好的,语言不是关键,而是语言绑定的技术生态。
    这年头不是只有 web , 后端也不是只有 web.
    java 适合各种复杂业务,尤其是金融业务架构的,各种工作流架构。
    go 那就是云原生, 中间件.
    python 没有什么合适的,上升空间有限,不要拿什么机器学习,深度学习来说,这些根本不是学个语言就能进入的领域。
    有人说性能不是关键,那是你做的业务开发一方面快递迭代根本不需要什么性能,另外其他性能因素都被中间件解决了。
    再告诉你个更加接地气的回答
    那就是在国内很多技术评审还有国企里,语言就是不平等的。用不同的语言来做连报价都不一样。
    python, php 只能被用来做中小项目 (比如学校系统)报价很少的。
    国企,和给国企做项目的公司 要服务成熟稳定,要求必须 java.
    另外,用 java 好提高成本和服务,多申请钱,因为 java 比 go, python 吃了多了去的内存。
    至于互联网公司,这年头有几个能活过十几年,能折腾几年没什么问题。
    大的互联网能请到能人想怎么玩都有,还有优化 python 虚拟机,用 pypy 或 numba 各种写法来加速的。
    bigjack
        100
    bigjack  
       2023-08-21 17:30:18 +08:00
    python 脚本语言,对开发者的要求比较高,最好是有完整的单元测试,否则和容易出问题,编译型语言可能不是很需要完整的单元测试吧,没有什么绝对的,Twitter 不就是用的 python 吗? python 性能问题用 c 语言也可以基本解决,适合自己就好
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   915 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:35 · PVG 06:35 · LAX 14:35 · JFK 17:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.