在大型项目上,Python 是个烂语言吗?
后端营业很多是 Python 写的,根基每个微处事代码量都起码是几万行的范围。各个项目加起来没有百万行也起码是几十万行的范围。此刻根基上 java,go,Python 都有。
有同事对比仇恨静态措辞的,觉得保护起来心累。之前有学术研究专门统计过github上不合措辞项目标掉落足率,结论就是静态措辞切当更不轻易掉落足,保护性更好。静态措辞就需要优胜的工程实际来节制,不过活络性更高,表达才调更强。假定真的是超大年夜大年夜型单体项目,静态措辞切当是个更优的选择,这个是有统计结果作为撑持的。
脚本措辞是在互联网期间才逐步风行的,并且互联网公司很常常利用单体架构了,一个处事代码量过大年夜大年夜关于项目保护,开辟,安插,上线都是灾害,很多都是微处事架构了。微处事架构下很多措辞都能胜任,的确都有贸易项目标成功案例,乃至很多静态措辞快速构建原型反而更有优势,即便将来碰着了瓶颈重构一个处事也不会太难。
下边是一些驰名Python 项目标代码量统计,今朝最大年夜大年夜的Python 项目该当是openstack了,达到了百万行,不过大年夜大年夜局部大年夜大年夜项目最多也就是几十万行。假定是贸易项目,今朝不太可以或许呈现一个项目百万行的状况。国际今朝很多用Python 的照样中小公司,只可以或许有大年夜大年夜的处事,大年夜大年夜的网站,不太可以或许呈现一个超大年夜大年夜的单体项目。假定项目组的人员不架空写Python ,Python 是可以用在很多项目上的,并且在爬虫,网站,数据分解等范围Python 都有对比成熟的措置经营,一末尾真的没需要过于纠结技能选型,可以或许工程节制,代码质量反而对比首要。
易用、活络、高效,一门编程措辞最多只能同时具有两项。
易用包含:
1. 繁复,易读、易知道、易写;
2. 不合性好,易协作,易接办保护;
3. 根基布局紧凑;
4. 尽可以或许自包含,具有丰富的类库和软件包撑持;
5. 可移植,对实施状况的假定越少越好;
6. 从编写到实施,全数过程触及的对象越少越好,法度典型易安插;
7. 手册可顺手取用。
活络包含:
1. 伸缩性好,删除依托性与参与依托性一样简单;
2. 许可在不合层次上笼统(含DSL);
3. 撑持多种编程范式;
4. 尽可以或许合用于更多的范围;
5. 可定制措辞子集(方言);
6. 可编译实施,也可诠释实施。
高效包含:
1. 编写快,越快越好(揣摩对象撑持与纯手写);
2. 编译快,越快越好;
3. 除错快,越快越好;
4. 实施快,越快越好。
还有一些特点没有列举出来。细心揣摩一下,上述各特点不乏彼此同一的,若何获得均衡,完全视应用状况而定。这些特点考量将与设计哲学彼此影响,终究决定一门编程措辞的编写风格与应用编制。
但事实成果,一门编程措辞被设计出来的首要目标,是在本钱最小化的根基上,尽可以或许好地措置某些结果。
别的,不从架构角度揣摩开辟与运维、用户操作的关系,做出来的器械必定到外都是坑,且很难继续。不要随便看不起一门编程措辞,它被发现出来必定有其用处。在得当的机会用得当的措辞措置精确的结果比甚么都首要。
写过几年Python,也写过几年CPP,写过几年CS,Python做大年夜大年夜项目没甚么结果,不会比其它主流措辞更差,项目标可控范围多大年夜大年夜,首要照样取决于人,不是措辞——措辞当然有差别,然则没有鼓吹的那么大年夜大年夜。至于开辟对象的结果,高程度的开辟人员根基不会依托开辟对象。并且,Python本身不是那种异常依托代码补全等功用的技能,习惯的组合是emacs+ipython+python-mode,用doctesting做TDD,效能很高。比来一段用sublime text对比多,也没觉得分隔习惯的状况就做不下去。
至于缺点在运转时,这就看主动化测试的程度了。Python项目呈现的bug不会比CPP或Java更高。
假定用不好,甚么都是烂措辞。这是个相当便宜的立场。
用 Boost 去做实践开辟?没被编译器坑过的人是幸福的。
能用 std:: 的处所用 C Style 的轮子?没被 std::string 效能结果坑过的人是幸福的。
Python 超越 1k 行就是灾害?这些对语法精确性端赖(即时)编译提示缺点的人写甚么 1k 行的代码啊。最好的软件工程对象都是措辞有关的:Unit testing,design by contract。除很少的出格措辞(Eiffel,AspectJ),根基都是靠库和法度典型员手工实际的。
一个公司能像 Google 一样招人,他们用甚么措辞都可以。假定不克不及,尽早对峙 C++,修不盈新手挖的坑,扶不正白叟搭的庙。
至于机能结果……没有到 Google 这个规范上,机能结果从不需要从全局方面去措置。找到热点,用适合的对象局部互换,这才是工程上有可行性的经营。何况 Python 是知名的易于用 C 扩大的措辞。
Perl, Python, Go,乃至算上 Java……这些措辞的结果都是,他们历来不是弗成被互换的。他们都在措置异常具体的结果,是以当有一个新的措辞在今后措辞框架以外措置了一个新的具体结果时辰,旧措辞就会损掉落一批用户。Go 的 coroutine,Python 的语法清楚和简单,Perl 的字符串措置效能和随时运转,Java 的库和 GC,从左往右就是这么一个后浪推前浪的关系罢了。在适合的处所用适合的对象措置精确的结果是每个法度典型员和架构师该当会去做的任务。
1 机能有那么首要吗?
此刻仿佛除超大年夜大年夜型互联网公司需要静态措辞来省电以外,没有传闻过若干因为措辞速度慢而呈现的软件结果。何况此刻慢的法度典型,此后未必就慢了。可是法度典型员的速度,可是一贯很难提起来。没有银弹啊。
2 法度典型范围变大年夜大年夜此后,真的那么需要编译期的静态检讨来排错吗?
不管多么峻厉的检讨都没法禁止法度典型员写出残余来。C的检讨比C++弱,然则它在TIOBE上排得比C++要靠前。里奇信赖法度典型员可以或许做好本身的任务所以没有做出过量的假定,C++看起来峻厉遵循了很多编程范式,其实过于复杂,直到明天,C++的编译器也不克不及大白地措置它最复杂的内存泄漏结果,这个检讨有等于没有。
没有静态编译而扩大成大年夜大年夜型工程,请看PHP。请看RoR。更不消说保罗格兰汉姆之前用Lisp曾开过一个作坊似的公司做出了世界第一流的大年夜大年夜型软件。这就是法度典型优胜的风格比甚么都首要的一个好例子。静态措辞看起来丢弃了静态的类型检讨,然则获得了活络的类型机制,有得有掉落,在此刻看来,是一个很好的趋势。用过静态措辞再归去看某些静态类型措辞,看多了眼睛流血,写多了手流血。
3 措辞必定要依托于开辟对象吗?
不知道真实的措辞开辟对象指的是甚么。抱负上除PHP,此刻各大年夜大年夜脚本措辞的开辟对象都只是势均力敌,Python照样个中发展最快的了。觉得好的措辞其实不该该依托于技能系统,此刻MIT里照样朝圣一样应用Lisp和emacs。emacs很好排错吗?emacs很便当安插吗?emacs很便当作机能基准测试吗?这会影响到Lisp这门措辞烂不烂吗?
C++倒是甚么对象都有,这让它变好了吗? 对象其实都在其次,一切垂垂都邑好起来的。
每门措辞的设计,都有它的衡量。事实它是设计者若何的愿景,其实像我多么的低手是很难弄大白的。然则假定它让师长教师们第一印象很好,那就是一门很棒的措辞,毫不会烂。
说两个就近的题外话:
1 猎奇号宇宙飞船的两百五十万行的代码,大年夜大年夜局部都是用Python生成C的编制写出来的。不知道这算不算一个超越十万行的项目?
2 MIT的计较机第一门课一贯在灌注灌注贯注两个事理:计较机法度典型是写给人看的,正好可以或许运转。软件设计其实就是关于笼统复杂度的节制。这两个不雅不雅念完全与机能、静态检讨和开辟对象有关。这门课很多年一贯用scheme教,前两年俄然换Python了。
想学习的同学可以加群找我要,里面还有很多资料
Django版本:1.11
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ:3407883927
或私聊我