当前位置: 首页 > 科技观察

为什么有些高级开发人员不喜欢Python

时间:2023-03-16 15:19:32 科技观察

许多高级开发人员说他们发现使用动态类型语言很头疼。下面的回应收集了大部分掌声。“请问,什么?动态类型语言比静态类型语言更容易出错吗?抱歉,但我21年的软件开发经验不是这样。”—RasmusSchultz根据这个答案,我决定总结让高级开发人员避免使用动态类型语言的主要原因,并在此处列出它们以消除误解。为了更好地解决这个问题,我们将以Python作为发展迅速的动态类型语言为例。动态打字是打字与击键无关的地方。这个词来源于数据类型。在编程方面,强类型、鸭子类型等多种类型的类都可以发挥作用。但是,我们将自己限制在最常见的类型上:动态类型静态类型动态类型是在运行时标记类型错误的情况。也就是说,数据类型不必像在Python、Ruby和JavaScript中那样显式声明。与动态类型相反,静态类型是在编译期间报告类型错误和显式声明数据类型。C、C++和Java就是这种情况。Python和一般编程语言的有趣之处在于它们的一些优点和缺点。设置动态类型是为了通过隐式数据类型声明删除一些代码行来简化编码过程。然而,这个特性有一个很大的缺陷。为了让您明白,请考虑以下Python代码示例:max_number=12my_list=[]foriinrange(1,5):max_number=2*(max_number*i)my_list.append(max_number)print(my_list)输出:[12,12,12,12]在上面的示例中,我们要对变量max_number执行计算并将结果存储在列表中。但是,我们可以看到这一切都没有发生,结果是错误的。这是因为在for循环中,我们拼错了max_number,导致创建了另一个名为max_number的变量。任何人都可能犯此类错误,尤其是当他们的工作压力很大时。现在假设您正在编写大量代码。您将需要更加注意您的手指接下来应该点击哪些键。否则,跟踪代码中的错误可能会变成一场噩梦,导致可维护性问题。但是,在像C++这样的静态类型语言中,变量必须在使用前声明。而且你绝对应该做一个执行前分析来确保你的变量类型是一致的。这最终提高了安全性,因为可以更好地控制变量。静态类型重要性的一个例子是2009年与三位Twitter开发人员的对话,内容涉及公司为何决定采用静态类型语言Scala。高级开发人员会对性能感到惊讶。与处理几行代码的初级人员不同,维护和编写健壮的生产代码(通常是数百或数千行代码)是由经验丰富的开发人员承担的。因此,拥有一种高效的编程语言可能变得不可能。也就是说,全局解释器锁(GIL)是Python和MRIRuby等编程语言的性能瓶颈,因为它禁止充分利用计算机资源。被GIL破坏的资源是CPU线程。然而,不使用GIL的编程语言充分利用了CPU的能力。因此,众所周知,它们支持并行计算。并行计算无非是让所有线程同时运行。由于需要处理的天文数据量巨大,因此这种类型的计算现在比以往任何时候都更加重要。下图是并行计算的示例:>所有CPU线程运行的示例。作者在diagram.net创建的图可以合理地假设在相同的CPU时钟速度下,计算机拥有的线程越多,程序运行速度越快。然而,GIL的出现终结了并行计算。GIL是一把锁,一次只允许一个线程使用GIL。线程的选择遵循排队的方法。这意味着当具有最高优先级的线程正在使用GIL时,其他线程将等待直到GIL被释放。最重要的是,用户无法控制线程选择。相反,操作系统负责线程优先级排序。下图最好地说明了这是如何发生的:>GIL对线程的影响。作者在diagram.net中创建的图表为了解决这个问题,许多程序员,或者至少是聪明的程序员,尝试使用例如线程模块手动拆分线程之间的进程,以期获得更好的性能。他们最终的表现更差。尽管结果看起来很奇怪,但这是计算机科学,而不是计算机推测。如果您更深入地研究这个问题,一切都会水到渠成。尽管Python的核心开发团队完全意识到这个问题,但很难摆脱GIL,因为它是Python的许多细节的支柱,例如内存管理和C扩展(仅举几例)。Python的官方作者GuidovanRossum表示,他并不完全相信Python会支持并行计算,因为这最终是语言的设计方式。但是,C++等静态类型语言不受GIL的限制。这使它们在比较中更有效率。空格敏感度使用一种标记由于错位和缺失空格而导致的错误的编程语言可能不是每个人的功劳。这些空格是空格、制表符、换行符、回车符或换页符。例如,与C不同,Python确实对空格敏感。我们将通过以下C和Python代码之间的比较来证明这一点。Python版本:i=50ifi%2==0:print("insideifstatement")print("iiseven")输出:print("insideifstatement")print("iiseven")^SyntaxError:语法无效C版本:#includeintmain(void){inti=50;if(i%2==0){printf("insideifstatement\n");printf("iiseven\n");}}输出:~/$./test1insideifstatementiisevenwithresist与打乱代码结构并最终得到正确输出的C版本不同,Python生成的语法错误最初是由语句放置错误引起的。所以有人会说Python不像C++或原始C那样健壮。具有讽刺意味的是,虽然许多专业程序员发现空格敏感度很烦人,但许多Pythonista认为处理空格比最后的列追逐更好。最后,在处理大型代码块时,空格敏感性问题很烦人。但是,如果在团队中灌输良好的编码习惯,就可以轻松解决空白敏感问题。向后兼容性不支持向后兼容性意味着来自旧版本Python的代码可能无法在新版本下运行。换句话说,绝对有必要寻找新版本中发生的语法更改,并相应地重写其代码。向后兼容性成为严重问题的一个很好的例子是从Python2到3的第一次转换。Python核心开发团队认为人们将Python2代码转换为Python3没有问题。但他们错了。Python的作者自己在发言时也承认了这一点:“我们低估了有多少人写了很多Python代码,然后基本上忘记了它是如何工作的。因此,他们不太擅长升级它。我们意识到有一个问题。”关于这个问题的结论是Python2.7的生命周期已经延长。总结编程语言永远是热门话题,所以不能说是对还是错。他们更喜欢另一种语言至少有一些原因。一般来说,每种通用编程语言都适合特定的人群。Python的官方作者说:“学习用Python编程比学习用Java或Swift编程要容易得多。Java和Swift是专业软件开发人员学习计算机科学的绝佳编程语言。然后开始为软件公司开发。”公司工作。但是Python可以教给中学生。”除此之外,拥有一种结合了C++和Python优点的编程语言将是理想的选择。原文链接:https://medium.com/better-programming/why-some-senior-developers-dont-like-python-974c5361fff2