ghgh456 发表于 2023-10-9 01:14:01

为什么软件公司很少用python开发web?

前几天我遇到一个使用python的架构师,他跟我说python的性能并不慢,而且,相对于网络来说,语言中的性能显得微不足道。但是,python的开发效率可以达到java的数倍。如果真的是这样,为什么国内大部分的软件公司都不用python作为后端的语言呢?如果可以大大减少开发成本,何乐而不为。
PS:据说知乎后端的语言就是python,我们都没感觉慢。

海底捞 发表于 2023-10-9 01:14:16

python3.11之后,我对python做后端骨架,是多了一些信任与希望的。
python一直都拿来做内部服务,做好后rest出一些接口,然后内部调用。拿Django做后端骨架的凤毛麟角,
您信不信,说不定比ruby还少…
真的做后端骨架的话,Django系列和Spring系列,差距有那么点大……
性能是一方面,维护是另一方面。
主要问题还是性能上,
我觉得在得知py4永远不会到来的今天,开发一套py骨架会让人觉得没啥干劲,
不过在python3.12的一些解读,一些人也慢慢读出了“python会逐步加速”的味道,
这给cpy转型成能开发正式稳定后端框架的语言,带来了一些希望。
据说py的团队把开发计划版本定到了3.33,
在到这里之前,只要有了足够稳定的高速版本,
就可能会有团队着手开始做“Spring for python”之类的东西。
<hr/>我做个预言,就是py4迟早会来,不过,会有多个分支。
某个分支会极度高效、稳定,但是对py2高度不兼容(特指一些库),py3.8之后的勉强兼容。这里是因为我认为一些语法会变成py4这个分支的标配。
py4,应该是应用场景极大丰富、高速易用的语言。
<hr/>然后我说一下,现在的py后端也不是一无是处,看的是场景,你拿来做百万并发微服务,那爷们折腾不起。
做交互量小的业务,信手拈来,开发速度也不差。
做特殊计算需求,然后后端只暴露接口的话,py还是这个垂直场景的王。

supersmart 发表于 2023-10-9 01:14:23

python的优势是啥?是节省开发时间,因为语法简洁直观,各种现成轮子很丰富,所以很容易把业务逻辑、思路转成代码,这也是为啥刷算法题用python多的原因(哪怕平时主要生产力语言并不是python)
但是在中国这不是优势。为啥呢?因为中国码农贱啊。他们的时间并不值钱。小时工资低的可怜。他们的工作时间可以从1天10小时立刻扩容到20小时,而公司并不需要增加任何成本。特别小厂和外包公司,反正就是实现一些业务需求,不需要太多创新。需求少就是一天干8小时,如果需求激增就007,还有大把应届、培训班刚毕业的低价学徒码农可以迅速扩充队伍,工资低还可以实习期免费试用期打折,没需要了就挂掉试用期,代价很低。比如上海这个例子。
因试用期遭劝退,一男子为发泄情绪删光自己在职期间所写系统代码被判刑十个月,如何看待这一审判结果?再说说python相对于主流的JAVA作为web后端的劣势。
首先,环境麻烦。Java很长一段时间的最重要优势是“一次编译到处执行”。10年前,我刚工作,正是互联网化热潮的时候。典型的web后端码农一般拿win7笔记本上拿eclipse写JAVA6,本地开发好后,打包后传到Linux服务器上部署。而当时python开发者还在讨论py2还是py3的问题,一些库只有py2,有些明确说未来不支持py2;虚拟环境管理工具都不太好用,按配置文件下载依赖的时候可能被墙干扰(国家的或公司的,因为服务器上网络环境和本地不一样);开源库可能不在win系统上测试,不保证能用。这些问题放现在都不是问题了,特别是docker流行起来后,但即使今天还有大把大把的开发人员不喜欢或者不会用容器部署。
其次,python对开发者要求更高,特别是大点的项目。python的设计理念就是语法方便,但是需要用户遵从一定规范。动态类型语言的很多问题无法在编译时发现。如果,用type hint可以在执行前发现方法返回类型和预期不一致的问题。再比如,自觉设计和添加好的单元测试,防止运行时一些奇怪输入导致出意外,而大部分人觉得这是一种负担。在国内这种需求随便改、项目管理靠领导pua,开发者总是超负荷工作的环境下,很难让人去考虑着些东西。
因为以上原因又导致了python做后端的人才少,进一步导致了公司不用python。如果我用java做一个创业项目。我可以根据项目难度和资金多少。从十几年经验的大神,到只能搬砖的1-2年经验的菜鸟可以随意选,组合一只高中低价位都有的队伍,还可以很容易找外包公司来扩充人力。而且啥样的人匹配多少钱都有很成熟的市场匹配机制了。而选python的话就没有这么容易了。python的高手很难找,有大型项目维护经验的更少,价格也不好说,一般很贵。恶性循环。

yym110 发表于 2023-10-9 01:15:13

我在用,我这个项目组都在用。
Flask + sqlalchemy。
数据库用Postgresql。
我没觉得慢,不过我们都是小项目,最高并发数没有超过100的。(大多数是在10-20并发左右徘徊——你能指望政务内网项目能有多大的并发?又不是每个项目都跑互联网那种千万级用户的)
另外,项目中各种中间件不要太好用,说Python慢,轮得到他么?数据库优化、redis、队列,哪个不能提速?
再说了,要真遇上计算密集型的高密度代码迭代,我用Rust的PyO3写个算法插件就打完了,多大的事?
说重构什么的……有问题大块大块的代码重写,也就是几小时到几天的问题,多大事?
所有在我们这种项目里面,开发语言本身的缺点几乎忽略不计,但是其优点被无限放大了,如下:
1、项目里面,有部分统计学和数据分析的工作,Python直接调包,根本不需要你干嘛(我做GIS的,一个学术型的项目,里面要对一些城市指标做莫兰指数分析……请你用Java手写一个给我看看……更别说还有一堆堆各种什么logistic回归、泊松回归、聚类模型……)
2、前端大屏要做空间专题图,有些数据需要进行特殊断点的划分,比如自然断点法,虽然写起来算法很简单,但是总是要人写的吧。
3、里面还有网络分析模拟,Python里面直接就上networkx库了,其他的语言,来来来,跑一个我看看。
所以,有的同学说,我用其他的语言也能写,在下人送外号:码农界的拉格朗日……but你这手写三个月,优化六个月之后的结果,未必比得上我一句import numpy或者import sicpy……
好吧,这种项目有些偏科,重点不在web也不在软件逻辑上,而在于科学计算和数据分析上——所以,正如我说的,在这种情况下用Python的优势被无限放大了。
恩,不具备普适性。
web 项目,CURD包打天下的,还是Java的天下啊……不过要是CURD了,Python也不弱啊。
仁者见仁智者见智吧。
不过我下一个项目,如果还是由我主导的话,必须还是选Python……虽然我现在很多精力都转到Rust上面去了,但是Rust破这玩意儿目前基本上找不到人会,不能CURD这种体力活也得老夫亲自来写吧……反过来,你要是用Python写,遇上了语言性能瓶颈,Rust写个库还可以无缝无开销集成,真是居家旅行杀人放火必备良药……
所以,Python依然是我的首选,招Python最大的好处,就是一卷卷死一条街,收一次简历卖废纸都能卖出一杯椰云拿铁(不含优惠券)那种……
恩,有人问为什么不用Java?我曾经也是Java码农入行,虽然好多年不写了,但是俗话说:由奢入俭难……真心回不到过去了……
最后,招Python,招算法,需求:
1、爱好高性能开发与研发(我就不写精通了)……主要是空间算法,
例如面与面相交(1对1,10对10,1对1000万,1000万对1000万不同情况下的intersect)
又或者如何快速计算两个面之间的最近距离,求两个面之间的最近点(st_geometry中的ClosestPoint)
2、Python的模拟计算研究,如有限元、cellular automata、Agent-based modeling相关算法的研究。
3、Python后台服务编写,例如多线程、多进程、GRPC、Restful一类的开发爱好者(我也就不写精通熟悉字样了,怕你说你精通,我出道题,然后你说我故意为难你,话说敢说精通的,应该有很多把刷子么)
3、我招传统意义上的算法,所以不要深度学习的调参高手和炼丹专家(ps:如果精通类似遗传算法的参数优化另说)

ysz 发表于 2023-10-9 01:16:12

因为会Python的人太少了,很多人写的代码简直是辣眼睛。
1. 文档都不先过几遍就上手写
2. 迷之自信不加注释,风格还很差
3. 标准库都有的东西非要自己造破轮子
4. 相同功能东西有n个人的实现
5. 不知道项目结构这种东西,什么东西写在哪里完全靠感觉
6. 不能做到经常小步重构代码,演进
7. 都2021年了还有人不知道typing是个什么鬼
8. 总以为python比java容易,写出来的项目代码和脚本一模一样

当你的团队多招聘一些这样的人,你会觉得还不如让他们写个java,springboot 随便autowire。最起码那个重构起来还有ide能帮忙,python这样的项目最后只能换语言重写了。

sdwgw 发表于 2023-10-9 01:16:37

知乎应该算python做web的反面教材
页: [1]
查看完整版本: 为什么软件公司很少用python开发web?