找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5656|回复: 20

C++ 转 Python 这三年,我都经历了什么?

  [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1355

回帖

2万

积分

管理员

积分
21304
发表于 2019-3-19 20:38:45 | 显示全部楼层 |阅读模式
作者 | asya f,计算机视觉专家,编程语言铁粉。
译者 | 安翔,责编 | 沭七
出品 | CSDN(ID:CSDNnews)
很多人都说用 Python 编程十分简单,即便是 6 岁的小孩也可轻松学会。我自己最开始使用 Python 编程时也这样认为。那时我作为全职软件开发人员已有 4 年时间,主要在 Linux 平台上基于 QT 库进行 C++ 编程。但是,我最初使用 Python 时编写了很多糟糕的代码。
如今,我已经从 C++ 转到 Python 三年了,我觉得自己有必要总结一下这段时间取得的进展。回顾这段经历,不仅是我的主要编程语言发生了变化,此外,我的工作环境以及我对代码的思考方式也发生了变化。
在本文中,我将主要分享自己的经验,而不会详细描述 C++ 和 Python 之间的细节和差异,因为网上已经有了许多它们的对比文章。我希望这篇文章对于像我一样有着类似经历的人有所帮助。

C++ 像深潜,Python 像浮潜

使用 C++ 就像深浅一样,你可以潜入大海深处探索其神奇的奥秘和美丽,但这需要大量的学习和练习,但总的来说,你所覆盖的面积不会太大。
而Python 则更像浮潜,你只需把头伸进水里,就可以看到美丽的景色,但你无法继续深入。你只能继续在浅水区游动,可以轻而易举地游很远,覆盖很大的海面。从这个描述可以清楚地看出,每种语言都应该在正确的地点和时间使用。
  • 深入 C++

C++ 非常严格,它会对你的错误进行严厉的惩罚。在你的编码过程中,几乎很难避免段错误。因此,使用 C++ 编程需要开发者深入了解计算机、编译器和编程语言。随着学习过程的深入,你可以看到很多美好的东西,比如编译过程和内存管理。
作为一名 C++ 程序员,我需要密切关注各种语法。我需要对内存的分配和释放了如指掌。程序的依赖性更少,因为我喜欢对自己所写代码内部发生的事情有所了解。如果使用太多其他人的库,可能会不太可靠,出错之后很麻烦,并且可能会破坏你的内存使用量。
我习惯使用 Vim 来编程,此外会搭配很多插件,比如用于调试的 GDB 和用于分析程序内存使用情况和错误的 Valgrind。我自己编写 Makefile 然后用 g++ 编译代码。
那时的自己并不觉得 IDE 益处很大,我宁可放慢速度也不会让自己失去对代码的掌控。现在回想起来,我确实非常依赖编译器来查找类型错误。
  • 在 Python 中浅泳

从 C++ 切换到 Python 时,你需要学习的第一件事就是要学会放手:在 Python 中你很难知道程序的内部机制,不知道内存如何被分配和释放。你还会经常使用其他人编写的代码,这些代码将打包到库中,因为它们可以节省你的时间并帮助你更快地编写代码。这并不意味着你需要编写速度慢且依赖于未维护和非功能库的代码,但重点肯定是不同的。
当我开始用 Python 编写代码时,我首先按照 C++ 的思路来编程 Python 代码。这当然可行,但我并没有发挥出 Python 的优势。当我开始以更 “Pythonic” 的方式编程并开始使用库以及更高级的概念(比如生成器、装饰器和上下文)时,我的 Python 编程技能才得到显著的提升。
作为一名 Python 开发人员,我遇到问题时首先会看看有没有现成的库可以解决该问题。Python 拥有丰富的库生态系统及其社区。这些丰富和庞大的库几乎涵盖了所有领域。我经常使用的库有:用于数值计算的 NumPy、计算机视觉库 OpenCV、用来读取 JSON 文件的 JSON、用于科学计算的 SciPy以及 SQLite3 数据库。
我最常使用的 IDE 是带有 IdeaVim 插件的 PyCharm。这是一款功能非常强大的调试器,它比默认的 Python 调试器 pdb 更好用。我使用 pip 来安装我所需要的库。除非我真的需要,否则我不再监视我程序的内存使用情况。

一些实用的技巧

如果你是一名 C++ 开发人员,并且考虑开始使用 Python 编程,以下是我的一下小建议:
  • 改掉旧习惯

不要把 C++ 编译器当调试器用。不要过度优化内存使用情况。避免编写类似 C++ 风格的代码。无论如何,尽量不要依赖类型。
  • 培养新习惯

善用 Python 库。编写 Pythonic 代码(但不要过度)。保持可读性。使用更复杂的概念,比如生成器、装饰器、上下文。试试 PyCharm。
  • 使用 C++ 和 Python 公共库

某些 C++ 库(如 OpenCV 和 QT)具有 Python 接口。很容易在 Python 中使用相同的库,而不是从头开始学习新的库。
  • 根据应用场景选择恰当的编程语言

有时 Python 太慢或者不适合某类任务。此时就该 C++ 出马了。在 Python 中使用 C++ 代码的方法很多,有 SIP、ctypes 等方式。

总结

不管其他人怎么说,实际上,从一种语言切换到另一种编程语言并不容易,尤其是新的语言与你习惯使用的语言区别很大时。你需要花很多时间学习、深入、探索。但最重要的是,要明白不仅语言应该改变,而且你的编码风格和工作方法也要改变。
英文:How I went from C++ to Python: a conceptual change
本文为 CSDN 翻译,如需转载,请注明来源出处。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
工控课堂 www.gkket.com

0

主题

116

回帖

366

积分

注册会员

积分
366
发表于 2019-3-19 20:38:45 | 显示全部楼层
绝对干货,楼主给力,支持了!!!
工控课堂 www.gkket.com

0

主题

144

回帖

336

积分

注册会员

积分
336
发表于 2019-3-19 20:49:27 | 显示全部楼层
我顶,我顶,我顶顶顶
工控课堂 www.gkket.com

0

主题

133

回帖

306

积分

注册会员

积分
306
发表于 2019-3-19 20:51:33 | 显示全部楼层
在遇到你之前我对人世间是否有技术大佬保有怀疑,现在我是彻底被你征服了
工控课堂 www.gkket.com

0

主题

178

回帖

424

积分

注册会员

积分
424
发表于 2019-3-19 21:04:28 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

181

回帖

526

积分

中级会员

积分
526
发表于 2019-3-19 21:20:06 | 显示全部楼层
在遇到你之前我对人世间是否有技术大佬保有怀疑,现在我是彻底被你征服了
工控课堂 www.gkket.com

0

主题

339

回帖

2540

积分

高级会员

积分
2540
发表于 2019-3-19 22:10:39 | 显示全部楼层
看完楼主的帖子,我的心情竟是久久不能平息,受教了
工控课堂 www.gkket.com

0

主题

408

回帖

2802

积分

高级会员

积分
2802
发表于 2019-3-24 10:22:11 | 显示全部楼层
激动人心,无法言表!
工控课堂 www.gkket.com

0

主题

435

回帖

2361

积分

高级会员

积分
2361
发表于 2019-3-31 15:19:46 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

10

主题

377

回帖

2757

积分

高级会员

积分
2757
发表于 2019-4-18 12:26:48 | 显示全部楼层
楼主加油,我们都看好你哦。
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 21:08 , Processed in 0.164198 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表