原标题:Python曾是程序员的“瑞士军刀”,而如今正被慢慢取代

全文共 1902字,预计学习时长 5分钟

上世纪90年代初,Python面世了。近30年来,关于它的“炒作”一直没有少过。当然,编程界花了至少20年的时间才认识到它,但自那以后,它的流行程度远远超过了C、C#、Java甚至Java。

尽管Python目前在数据科学和机器学习领域,以及某些程度上在科学和数学计算领域占据着主导地位,但与Julia,Swift和Java等新语言相比,它确实有其劣势。

是什么让Python如此受欢迎?

Python迅速发展的主要原因是易于学习和功能强大。这使得它对初学者,包括那些由于C、C++等语言语法艰涩且陌生而对其望而却步的人,都非常有吸引力。

该语言从根本上广泛强调代码的可读性。凭借其简洁而富有表现力的语法,它允许开发人员在不编写大量代码的情况下表达想法和概念(例如在C或Java等低级语言)。Python非常简单,可以与其他编程语言无缝集成(例如将CPU密集型任务卸载到C / C ++),这对多语言开发人员来说是一个加分项。

Python用途广泛的另一个原因是大型企业(包括FAANG)以及无数小型企业对其的大量使用。如今,Python包里几乎包含了可以想到的任何东西——用于科学计算的Numpy,用于机器学习的Sklearn和用于计算机视觉的Caer。

Python也有缺点

它运行很慢,非常慢

显而易见,在未来很长一段时间里,速度都是开发人员的主要关注点之一。

Python之所以“慢”,实际上有两个原因——Python被解释为与编译相反,最终导致执行速度较慢;以及它是动态类型的(Python在执行过程中自动推断变量的数据类型)。

事实上,“Python很慢”这一说法对初学者影响很大。这是真的,但只是部分事实。以Python中可用的机器学习库TensorFlow为例,这些库其实是用C++编写的,并可以在Python中使用,某种程度上构成了围绕C++实现的Python“装饰器”。Numpy,甚至Caer,在一定程度上也是如此。

它有一个GIL(I)

Python速度缓慢的主要原因之一是存在GIL(全局解释器锁),它一次只能执行一个线程。虽然这可以提高单线程的性能,但它限制了并行性,开发人员必须实现多处理程序而非多线程程序来提高速度。

不是内存密集型任务的最优解

当对象超出范围时,Python会自动进行垃圾回收。它旨在消除C和C++在内存管理方面的所涉及的许多复杂问题。由于指定数据类型的灵活性(或缺乏灵活性),Python消耗的内存量可能会迅速爆炸增长。此外,运行时可能会弹出Python未关注的错误,最终减缓开发过程。

移动计算中的弱存在

随着台式机到智能手机的巨大转变,很明显,我们需要更强大的语言来构建手机软件。尽管Python在台式机和服务器平台上具有很强的代表性,但是由于缺乏强大的移动计算处理能力,Python往往会在移动开发上失败。

近年来,这一领域有了很大进步,但是这些新添加的库与Kotlin,Swift和Java等强大的竞争对手相比仍有差距。

其他语言的兴起

最近,Julia,Rust和Swift等较新的语言强势入局。它们借鉴了Python,C/C ++和Java的许多优秀设计概念——Rust基本保证了运行时的内存安全性和并行性,并提供与WebAssembly的一流互操作性;由于支持LLVM编译器工具链,Swift几乎与C一样快;而Julia为I/O密集型任务提供了异步I/O,并且速度非常快。

Python从来就不是最好的编程语言,它从来没有超越C/C++和Java。它是一种通用的编程语言,强调人类可读的、以英语为中心的语法,允许程序和应用程序的快速开发。

归根结底,Python和其他语言一样,是一种工具。有时候,它是最好的工具。有时候不是。大多数情况下,只是 “还不错”。

Python作为一种编程语言会消亡吗?笔者不这么认为。

那么,它的魅力正在消失吗?也许有一点,但只是一点点。

提供300分钟视频讲解,教学大纲、课件、教案、习题答案、程序源码等配套资源。

扫码,优惠购书

凡是在京东购书的用户,可以将订单信息和评价发到itbook8@163.com,将会获取超值大礼包(包括案例源码,超多的视频教程,数据集等资源)

风行python_Python曾是程序员的“瑞士军刀”,而如今正被慢慢取代相关推荐

  1. 维密超模也来学编程?你想象得到吗,这些明星也曾是程序员!

    "人人都应该学习编程". 这更像是一句赞扬编程魅力的话. 在大家的感觉里,编程好像是个很专业的事情.那些编程大牛,可能要么在阿里和腾讯这样的大公司当工程师,要么自己做出了非凡的互联 ...

  2. 技术一般的程序员找工作,如今真的一年比一年难...

    坐标深圳,2018年6月毕业开启了社畜的模式,深圳某大型互联网码农集散基地(非大厂)学历背景:二本. 第一份工作在深圳的一个80人左右规模的小公司做软件测试.年初离职后,最近刚刚跳槽成功. 做测试是从 ...

  3. 程序员都要学学任正非的坚强!这个老头,在逆境中崛起!

    点赞再看,养成习惯,微信搜一搜[findyi]关注这个喜欢写情怀的程序员. 回复[1]获得程序员职场晋升PPT一份 2019年的最后一天,罗胖在跨年演讲中引用了何帆老师的一句话:用一个人的长期主义,对 ...

  4. 别被“选择大于努力”骗了!曾经我最成功的事是选了程序员做职业,如今却一败涂地。...

    01  一次短视的选择,把我打回原形 我的好朋友小可,985研究生毕业进入外企做程序员,起薪2w,工作轻松.当时,他身边收入到这个水平的人还不多.他对我说,其实我也没什么本事,代码都写不了几行,只是选 ...

  5. 2019程序员新春对联,满满的正能量!

    西雅图IT圈:seattleit [今日作者]宇直 宇宙第一直男 1 运维版 2 bug 版 3 大神版 - 1.0 4 大神版 - 2.0 5 现实版 6 苦逼版 7 给经理版 8 给 PM 版 9 ...

  6. 如何提高程序员的生产率 (1)

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由韩伟原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/communit ...

  7. 未来的程序员面临着怎样的职业变化

    作为程序员,我们总是身处于如万花筒般变化无常的技术世界里.我们可能也是那群能够最早感知到科技变化所带来巨大影响的人.然而,面对这一波又一波向我们袭来的技术变革,我们是否也能从中窥见一丝规律,从而使自己 ...

  8. 你知道自己适合做程序员吗?

    哪有什么适不适合?编码本来就不是一件复杂的事情,日常工作不就是敲码.找Bug. 跟产品经理吵架.终于下班了.回家改BUG吗? 今天看到了最奇葩的辞职理由: 我觉得我数学不好,我不想做编程 我坐不住,我 ...

  9. 天才程序员的传奇人生:项目被总统抢走,在瞄准镜下写完代码后被捕入狱

    作者 | Nathaniel Popper ,Ana Vanessa Herrero 译者 | 核子可乐 编辑 | Tina 委内瑞拉的石油币,原本只是一位程序员的创业项目.2017 年,27 岁的程 ...

  10. 程序员该如在低代码和无代码开发中抉择?

    [CSDN编者按]"低代码开发"旨在开发人员可以通过编写少量代码就可以快速生成应用程序的一种方法. "无代码"开发平台是为那些不知道也不需要知道任何实际的编程语 ...

最新文章

  1. 用NVIDIA A100 GPUs提高计算机视觉
  2. linux 脚本 符号,Shell脚本 入门 —— 符号篇
  3. 设置Android设备在睡眠期间始终保持WLAN开启的代码实现
  4. LED音乐频谱之输出数据处理
  5. 网站推广专员浅析网站推广期间如何防止关键词出现下降情况?
  6. 如何判断塑料制品可不可以装热水
  7. 我所经历的字节跳动面试
  8. mysql optimization
  9. Linux下编译安装openssl
  10. 【数据结构与算法】双链表的Java实现
  11. Ubuntu终极指南
  12. java基础—FileWriter 的使用
  13. Python知识整理_1
  14. Java 四种线程池
  15. iOS 开发 - 绘制辉光效果
  16. Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题
  17. 400毫米降水线每年150公里北移
  18. netbeans linux 安装教程,linux下安装NetBeans 6.0
  19. 三星schi779 android版本更新,SCH-I779
  20. 人工智能期末考试复习(贲可荣 张彦铎)

热门文章

  1. 英语3500词(十一)entertainment主题(2022.1.23)
  2. Pycharm下载pytorch
  3. 全栈必备 存储基础
  4. Codeforces Round #612 (Div. 2) C. Garland题解
  5. ORACLE中的INTERVAL
  6. 学习并掌握结构化写作方法,提高写作能力 ——结构化写作学习笔记(1)
  7. Android之底部菜单栏的实现
  8. 读书笔记:结构思考力的基本特点和操作步骤
  9. 去哪下载python项目_Python 项目实践二(下载数据)第三篇
  10. 2022全新Java学习路线图动力节点(四)Javaweb前端与后端