发表日期:2019-05-22 原创
为什么 Python 程序员有必要学习一下 C++?
—— “免得他们整天xjb造轮子,一点 common sense 都没有”…… 这只是原因之一
作者:欧剃
在如今这个时代,计算机领域中,各种技术瞬息万变,不断更新迭代。随着人工智能、机器学习等先进技术的兴起,近年来,Python 程序员的数量已经大大超过 C++ 程序员。然而,正如之前提到过的,你永远都不应该在编程语言上“从一而终”,你必须了解一门第二,甚至第三语言。因为只有你了解了不同工具的特性,以及它们擅长解决的问题,你才能更高效地在日常工作中运用它们。为问题选择正确的语言/工具/解决方案,将能大大减少解决问题所需的工作量。
此外,它还可以扩展你的视野,让你置身于舒适区之外,保持不断汲取新知识的动力。学习更多语言的另一个原因是,这能训练你习惯跳出一种语言或范式的框架来思考问题。一旦你习惯于跳出特定语言的框架之外来思考编程问题,你将不再受限于它。
那么,为什么非得是 C++?
不,不是这个原因,虽然我觉得博主说的有道理(图片来源:新浪微博)
Python 和 C++ 相对互补
有人说,Python 就像是浮潜,你只要戴好面罩,把脑袋扎进水里,就能看到清澈明亮的海底。你能轻松地涉猎许多不同的方向,也不太容易捅出什么大娄子——甚至就算万一把事情搞砸了,你也能快速搞清问题所在,不至于把小命送掉(笑)。但只依靠 Python,你很难再潜入更深的底层。
从这种意义上说,使用 C++ 就像是深潜,它会带你进入编程那神秘而梦幻的魔法海洋——那里隐藏着宝藏,也潜伏着危机。你需要更多的知识、不断的练习才能达成目标,并最终将丰厚的回报收入囊中。
因此,如果你已经掌握了 python,我强烈建议你学习 C++。
再学 C++ 到底有什么好处呢?
1. 熟悉计算机底层原理
相对 Python 而言,C/C++ 是一种更加“机器层面”的语言。因此,C++ 对程序员的要求更加严格,它需要你对计算机、编译器和编程语言有更深入的了解,它也会对你的错误报以更严厉的惩罚。
但这种严格是有回报的。
首先,许多其他的编程语言实际上是用 C 来实现的,比如 Python 最常用的解释器就是 Cpython。所以,学习 C++ 的过程,你将会学到更多程序运行机制方面的知识,让你今后学习其他语言的时候更容易理解。
其次,在真正成为专业程序员之前,先学习用 C++ 编程,就像在成为正式执业医生之前,得先理解基本解剖学一样。如果你想成为一名真正的专家,你就必须了解计算机系统和软件是如何协同工作的。
(图片来源:pixabay.com)
2. 培养良好的编码习惯
学习 C++ 是一种富有启发性的体验,它将带来许多有益的附加作用,让你懂得如何编写出更有效率的代码。
在学习使用 C++ 的过程中,你需要更关心代码语法的细微调整,和一些特殊案例的细节。比如,你必须保证自己总是知道该在哪里分配内存,以及何时释放内存。此外,你还得操心指针、别名、生命周期等一堆大大小小的问题。
在这种情况下,你将迫使自己培养出良好的编码习惯,遵循良好的风格指南,来规避许多奇奇怪怪的错误——说到底,如果你没有见过几次“段错误”,并从中学到教训,就根本不算学过 C++。
连POS机都会 Segmentation fault 呢(图片来源:维基百科)
3. 增加对业务链上下游的熟悉
诚然,Python 在许多大公司中占有举足轻重的地位,但它并不总能覆盖到 100% 的业务链。
目前,C# 被广泛用于 .NET 平台上的企业级应用开发,它同时也是 Unity 3D 的主要语言,而 Unity 3D 是一个非常流行的独立游戏、VR游戏开发引擎。另一方面,C++ 通常被用于性能密集型桌面应用程序(也包括许多游戏大作)中。它也被微软,甲骨文和 Adobe 等公司用于构建许多大型软件系统。
此外,就算在人工智能、机器学习方面炙手可热的 Python,在遇到无人驾驶、机器人开发等方面,也需要 C++ 出马,把算法移植到底层硬件上,操作传感器等。
无人驾驶汽车上的各种硬件设备(图片来源:e-sciencecentral.org)
4. 加速你的 Python 代码
众所周知,作为解释型语言的 Python 可不是什么超级快速的语言[来源请求],但它确实非常好用,开发调试起来都更加方便。那么,当你需要快速调用某些算法来处理数据的时候,该怎么办呢?
学习 C++,让你能更好地发挥 Python “胶水语言”的作用。你可以把许多常用的函数和计算模块用 C++ 编写,,然后将 C++ 的方法包装起来,以便能在 Python 代码中调用这个方法。这样一来,你可以获得 C++ 代码的高速度优势,又保持 Python 调用的便捷性与可读性,是不是很赞呢?
5. 增强个人竞争力
根据国际电气电子工程师学会(IEEE)的统计,Python 与 C++ 都是近几年 IEEE Spectrum 的头牌语言,占据了前两把交椅。而对应的职位数量来看,C/C++ 也仅次于 Java。
IEEE Spectrum 2018 综合趋势排行 Top 5(图片来源:spectrum.ieee.org)
IEEE Spectrum 2018 就业岗位排行 Top 5(图片来源:spectrum.ieee.org)
所以,不管是备战算法面试,还是进军无人驾驶和机器人开发等新兴领域,C++ 都必然能助你一臂之力,帮助你进一步拓展职业发展方向,增强个人竞争力,迈入顶尖开发者的行列。
那我什么时候开始学最好?
当然是“现在”。
如果你希望给自己更美好的未来,你现在唯一要做的,就是立刻开始行动。给自己一个机会,试一下,踏出你的第一步。
对于没有时间脱产学习,但又希望能有专业导师的指导、督促和代码审阅的同学,我个人强烈推荐优达学城的 C++ 程序设计纳米学位课程。你能在相对自由的时间安排下(每周安排10小时左右),学习到最前沿的硅谷课程,可以在网络教室里和相同学习进度的同学交流,并有真人导师帮你答疑,跟踪你的学习进度,逐行审阅你的代码并提出反馈建议。最棒的是,在课程中你能挑战完成 5 个真实的 C++ 行业应用,充实你的作品集,为个人晋升打下坚实的基础。
别再犹豫啦,让我们在教室里见!
(本文已投稿给 “优达学城”, 作者:欧剃 转载请保留此信息)
标签:Udacity、Python、C++