点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

四年 C++ 老炮,转攻 Python 实践分享

  • 2019-01-23
  • 本文字数:1658 字

    阅读完需:约 5 分钟

四年C++老炮,转攻Python实践分享

C++已经学不动了,现在换 Python 还来得及吗?一位四年工作经验的 C++程序员亲述转型历程,这不仅仅是语言上的转变,而是代码思维甚至工作环境的转变。


通常,程序员会认为 Python 编码比较简单,即便是在校学生也可轻松入门,这是大多数转型 Python 程序员的最初想法。当然,Python 程序员现在的社会需求更大,薪资也相对更高一些。随着 C++的日益增负,不少程序员都抱怨“希望 C++别再加了,实在是学不动了”,本文讲述了一名具备四年工作经验的 C++程序员转行学习 Python 的心路历程。

由深入浅

最近几年,从 C++转型 Python 的程序员不在少数,毕竟由深入浅易,由浅入深难。学习 C ++感觉就像在海里深潜,潜的越深,景色越美,但需要付出更多时间和精力。总的来说,最终所覆盖的距离并不会很大。Python 有点像浮潜,很容易触碰,如果可以持续投入学习,很快就可以有所领悟。从这儿可以清楚看出,每种语言都应该在正确的地点和时间使用。

C ++语法更严格,Python 库更丰富

C ++语法更加严格,一旦出现编码错误,基本会连带发生很严重的后果。C++程序员通常需要深入了解计算机、编译器和编程语言语法。当深入了解时,我们可以看到并被一些事物所吸引,比如编译过程和内存管理。


作为 C ++程序员,大部分人往往更关心语法调整和场景用例,注重内存分配及释放。程序更加独立,编程人员往往清楚知道代码会发生什么,同时认为其他人写的代码不太可靠,更容易出错,并且可能会破坏内存用量。


C++程序员的主要日常工具是 Vim,有许多用于编写代码的插件,用于调试的 GDB 和用于分析内存使用和错误的 Valgrind,可能用 g++编译并编写 Makefile。此时,作者并不认为 IDE 会让其受益,反而非常依赖编译器来查找错误类型。

转型 Python,要学会放手

转换 Python 需要学习的第一件事就是放手,程序员不必再了解底层发生了什么,内存是否被分配或释放,这些都没有关系。因为 Python 可以使用其他人编写的代码,这些代码被打包成库,程序员可直接在代码中调用,可以节省时间并帮助更快地编写代码。这并不意味着编码速度变慢,或者依赖未维护和无功能的库,但重点肯定是不同的。


当作者开始用 Python 编写代码时,首先用 Python 编写了 C ++代码,虽然这也可以生成最终运行效果,但并没有从 Python 语言中获益。只有以更“Pythonic”的方式编写并使用库以及更高级的概念(如生成器,装饰器和上下文)时,Python 编码才得到改进。


作为一名 Python 开发人员,倾向于首先考虑能解决手头问题的库。Python 拥有丰富的库生态系统和支持社区,几乎可以完成任何事情。目前比较常用的库是,NumPy 用于数值计算,OpenCV 用于计算机视觉,json 用于读取 json 文件,SciPy 用于科学计算,sqlite3 用于数据库。


目前,作者使用的日常工具是带有 IdeaVim 插件的 PyCharm(一个 IDE),一个功能强大的调试器,比默认的 Python 调试器 pdb 更友好,也会使用 pip 来安装需要的库。除非真的需要,否则不会再监视内存使用情况。


实用技巧


如果是 C ++开发人员,并且考虑开始使用 Python 编写代码,以下是作者的建议:


  • 摆脱旧习惯。停止使用 C ++编译器作为调试器,不过度优化内存使用情况。避免编写类似 C ++的代码,尽量不依赖类型。

  • 培养新习惯。开始使用库写 Pythonic 代码(但不要过度)。

  • 保持可读性。使用更复杂的概念,例如生成器、装饰器、上下文等,可以试试 PyCharm。

  • 使用 C ++和 Python 公共库。某些 C ++库(如 OpenCV 和 QT)具有 Python 接口,程序员很容易在 Python 中使用相同的库,而不是从头开始学习新库。

  • 不要忘记二者的本质区别。Python 有时太慢或不适合任务,这就到了运用 C ++知识的时候了。在 Python 中使用 C ++代码的方法有很多,比如 SIP、ctypes 等。

结语

当转换到一种新的编程语言,尤其是与个人习惯完全不同的语言时,需要花费大量时间学习、挖掘、发现,最重要的是要明白不仅语言应该改变,编码风格和工作方法也要改变,因此需要提前做好大量准备工作。


参考链接:https://medium.freecodecamp.org/how-i-went-from-c-to-python-a-conceptual-change-8bf29d059428


2019-01-23 10:398903
用户头像
赵钰莹 InfoQ 主编

发布了 827 篇内容, 共 538.9 次阅读, 收获喜欢 2613 次。

关注

评论

发布
暂无评论
发现更多内容

Block 的分类

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

SDL图像显示

柒号华仔

7月月更

软核微处理器

贾献华

7月月更

还在为处理事务烦恼吗,要不试试Spring是如何处理业务的

Java学术趴

7月月更

Android ANR和OOM

沃德

android 程序员 7月月更

jQuery 操作元素

Jason199

jquery js 7月月更

初学者如何快速的上手Linux命令,这34条新手必会的命令一定得会!

wljslmz

Linux 7月月更

关于目前流行的 Redis 可视化管理工具的详细评测

宁在春

redis 7月月更 Redis 可视化工具

函数初认识-上

芒果酱

C语言 7月月更

【LeetCode】滑动窗口的平均值Java题解

Albert

LeetCode 7月月更

解读《深入理解计算机系统(CSAPP)》第12章并发编程

小明Java问道之路

Java 后端 并发 csapp 7月月更

LeetCode 242:有效的字母异位词

武师叔

7月月更

Flutter开发:运行flutter upgrade命令报错Exception:Flutter failed to create a directory at…解决方法

三掌柜

7月月更

JavaScript DOM编程艺术笔记

程序员海军

前端 DOM 7月月更

通过Dao投票STI的销毁,SeekTiger真正做到由社区驱动

股市老人

常见链表题及其 Go 实现

宇宙之一粟

链表 7月月更

mysql数据表查询

乌龟哥哥

7月月更

分库分表

ES_her0

7月月更

Android热更新调研汇总

沃德

android 程序员 7月月更

zookeeper-认识watcher

zarmnosaj

7月月更

深度学习-多维数据和tensor

AIWeker

7月月更 多维数据

队列的链式表示和实现

秋名山码民

算法 7月月更

【萌新解题】三数之和

面试官问

面试 LeetCode

通过Dao投票STI的销毁,SeekTiger真正做到由社区驱动

威廉META

通过Dao投票STI的销毁,SeekTiger真正做到由社区驱动

鳄鱼视界

mysql进阶(六)模糊查询的四种常见用法介绍

No Silver Bullet

MySQL 7月月更 模糊查询

SAP Fiori 的附件处理(Attachment handling)

Jerry Wang

SAP Fiori SAP UI5 ui5 7月月更

jQuery 的节点操作

Jason199

jquery js 7月月更

【Docker 那些事儿】容器网络(上篇)

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

Pyodide 中实现网络请求的 3 种方法

OpenHacker

Python pyodide

Android实现无序树形结构图,类似思维导图和级联分层图(无序,随机位置)

芝麻粒儿

android 7月月更

四年C++老炮,转攻Python实践分享_语言 & 开发_赵钰莹_InfoQ精选文章