Python 学习开发的两年后的反思

  • 背景介绍

    • pyqt 客户端方案
    • C 和python 混合编程方案
    • 纯python服务器解决方案
        • 由于对服务器开发熟悉程度不高暂时未想到应用程序服务器的开发应用求指点
    • 网络快速测试方案
    • 学术研究
      • 技术规划
  • 反思
  • 问题

背景介绍

三年的C++ windows 客户端的开发经验, 接触python也快有两年了。 记得最开始会选择接触python的原因是因为李开复老师的强烈推荐。 接触以后一直对python简洁的编程风格所倾倒。自己的C++ 编程风格和设计思路上受到python 的影响很大,因为这个原因,一直以来都会花费一定的时间在python上。

虽说兴趣是最好的老师。, interests (兴趣)和interests(利益)不能挂钩,再强烈的兴趣最终都可能因为失去生长的土壤会枯萎。学习python 的本身也是为了更好的应用python到工作或者生活中去解决问题。

备注:

这里说的利益,不是指狭义的金钱利益。而是指广义的收获,或提高开发效率,或解决原有解决不了的难题,或者改善编程体验。

目前工作中主要使用C++ 从事windows MFC 客户端编程,部分涉及服务器网络开发编程和底层开发

在python熟悉了将近两年之后,总在思考一个问题。

使用Python 能够为我带来什么改变? 我能用Python 做些什么呢?

但是现在在Python技术上却感觉未能取得一点点值得欣慰的成就。也并未在工作效率上,或者解决方案上有所突破。 这给我未来的技术方向敲醒了警钟。一直有一个信念:

编程是为了解决帮助别人或者自己去解决问题

很显然,平时投入大量的时间和精力在python上却并未达到预期的要求。感觉很多技术都是用则强,不用则废。Python 虽然学习了很多相关方面的知识,但是却感觉自己一直找不到应用开发场景。这个问题让我陷入了沉思。所以写下一些文字好好反思一下,和大家分享一下自己失败的教训,过来人能够指点迷津



衡量开发效率参考标准:

熟悉程度 IDE 的熟悉 开发语言的熟悉 开发库的熟悉 项目架构功能的熟悉
C++ ★★★★★ ★★★★ ★★★ ★★★★
Python ★★★ ★★★

这四者的熟练程度很大程度上决定了一个项目的开发效率。

  • python优势:语言开发高效友好, 支持类库庞大。
  • python劣势: 执行效率不高
  • C++ 优势 : 机器效率高,和C 语言兼容好
  • C++ 劣势: 开发库不全面,学习成本较高

pyqt 客户端方案

概述: 通过使用pyqt 快速绘制界面, 使用python作为开发。实现快速开发的目的。

- 优点: python语法简单, (熟悉pyqt 界面库的前提下)开发速度快

- 缺点:鉴于pyqt 的亲妈qt 在windows 平台下都难以有所作为和发展的情况。 pyqt 面对企业级应用开发可能更是力不从心。pyqt 依赖于一整套较大的界面库,学习成本较大。pyqt 被团队 和市场认可度不高,难以实现正规化发展和应用

适用场景: pyqt 开发仅适合轻量级的应用程序开发(轻前台重后天的场景)

结论: 而对于企业级应用程序开发,被市场和开发团队认可度较低。且技术可实现度不明朗,缺乏论坛的支持,可发展前景极低。 在熟悉MFC 的基础上, pyqt客户端的开发效率几乎没有任何优势。 无法获得认可。

在windows 平台下 , python可表现的机会并不多,因为即使是QT,Java 这些历史悠久的解决方案都没有什么起色。 其主要的实力发挥可能更多集中在领域逻辑层(复杂逻辑处理)数据层(网络,数据库)


C++ 和python 混合编程方案

优点: 实现对于 C++ 的库的拓展支持, 利用python 快速高效的脚本语言, 处理复杂的事务逻辑, 有着得天独厚的优势。 C++ 负责效率, python 负责逻辑处理,参考 lua + C++ 开发的模式

缺点: **接口设计麻烦, 混合编程复杂度增加。 联合调试困难, 对于团队合作不利。 客户端的混合编程。需要打包python相关组件。

适用场景: 服务器领域开发, 业务逻辑复杂度较高,对性能要求较高的产品**

结论: 在处理较为复杂的业务逻辑,而且在服务器领域开发拥有一定优势,但是可等待的机会不多。 目前本人已经实现python 和C++ 混合编程的初级阶段和混合编程的打包处理技术


纯python服务器解决方案

twisted 应用服务器 ,web 服务器开发

优点: python 中存在大量优秀的 web 服务器库可供选择

缺点: 公司目前的客户端程序暂时不支持webkit 开发,http 响应速度较慢,更多的网络通信是走底层的 tcp/udp 通信或者封装后的通信协议

备注:

由于对服务器开发熟悉程度不高,暂时未想到应用程序服务器的开发应用,求指点!!!


网络快速测试方案

描述: 为解决基于 udp/tcp http 网络通信开发中的

优点:利用 twisted 库高效灵活的优势,可用较为简单的方式快速开发配置 较为复杂的网络通信测试方案,确定网络通信过程中存在的问题

缺点:无法实现 C /S 两端 代码风格复用。 需要重写代码

使用场合: 适用于网络通信较为复杂的通信过程

结论: 目前为止唯一想到的可辅助工作应用的场合,自动测试


学术研究

使用python 做一些 前沿技术探索,学术研究,类库接口设计学习等方面的研究

优点: 积累一些黑魔法,黑科技,实现快速上手的目的

缺点: 适合学校和学术机构,不适合商业领域


技术规划

PC客户端(C++)—服务器(python , Java, C++)—android的发展规划(Java, C++)

虽然很喜欢Python的开发方式,但是苦于两年时间依旧没有能够找到一个能够实现Python 自我造血方式。 如果仅仅是凭借着兴趣,在每天下班之后的几个小时学习应用Python,再强烈的兴趣最终都可能失去生长的土壤而枯萎。 因为用的场景少,导致熟悉度一直无法提高,最终的结果是使用Python 开发效率不高。在选择开发方案的时候, Python始终无缘选择项。

反思

最近在接触java语言时候,让我想起java起家流行的原因。使用Python 进行界面开发的尝试,或许是一个比较愚蠢的决定,仅仅是当时因为热情,因为喜欢,头也不回的学习使用了。

如上图所示,Python 和C++ 的关联性,相似度不是那么大。想要实现两者1+1> 2的难度,相比于Java 就不那么容易了。

Java 曾经走过路,或许才是是python 应该走的,基于网络服务器的方案来更加高效的解决问题


问题

俗话说:当局者迷旁观者清。 一门技术,一种解决方案的兴起发展,往往与其有着更高的开发效率,实现手段,强大的功能有着紧密的关系。想请教经验人士一个问题:

在我当前的工作环境下,应该选择什么样的python技术方案或者路线,才能在C++的开发场景下立足???

时间: 2024-08-06 11:56:39

Python 学习开发的两年后的反思的相关文章

python学习之“切片操作从入门到精通”

在python学习开发的过程中,我们总是不断的要对List(列表),Tuple(元组)有取值操作:假如我们有一个列表List1现在想取出1其中的前5个元素,改怎么操作呢? 1 >>> List1 = ['zhangxueyou','liuyifei','liudehua','huyidao','haodada','wumengda','zhouxingchi','chenglong','Jack','linzhilin'] 2 >>> List1 3 ['zhangxu

Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结构. 支持事务.分片.主从复之.支持RDB(内存数据保存的文件)和AOF(类似于MySQL的binlog)两种持久化方式.3.0加入订阅分发.Lua脚本.集群等特性. 命令参考:http://doc.redisfans.com 中文官网:http://www.redis.net.cn 安装(都大同小

python web 开发学习路线

自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,<python简明教程>,这两本书很适合小白入门(像我一样长期徘徊在编程门外的人)2.python进阶推荐<python学习手册>,python学习手册的前半部分与在入门教程中的基础部分相重复,后面部分对python的介绍更细致,比如面向对象的这部分对于小白理解相对容易.还有一本<python

Python学习资料整理以及书籍、开发工具推荐

我不知道大家学习Python的时候是不是和我一样感觉很无助,不知道在入门或者进阶的时候应该掌握哪些知识点,下面我就梳理下我自己学习Python开 发的过程及资料分享给大家,这些方法资料可能并不适合所有人,仅供大家参考.具体需要掌握哪些知识,我就不详解介绍了,我分享出来的资料都有具体的讲解的 哈. 入门阶段:1.HTML+css基础入门(HTML的语法.基本结构.标记.css样式等等)2.Javascript基础知识(掌握javascript的变量.数据类型.隐式转换.表达式.运算符等等)3.Jq

Python 学习笔记(二)开发环境的搭建

安装Python windows 下安装: 下载地址:https://www.python.org/downloads Python的版本 3.x 是趋势 2.x 还在被大量使用 至于使用2.x 还是3.x ,我觉得两者没有太大的区别,学会了2.x 也会使用3.x的,只要开始学习就好了 当前我使用的Python2.7.14 选择 Windows x86-64 MSI installer  msi 64位安装 windows 下设置环境变量 两种方式 1.Win+R   输入cmd   在命令提示

Python学习教程:WEB开发——Python WSGI协议详解

Web应用程序开发 Web应用程序的本质是什么 简单描述Web应用程序的本质,就是我们通过浏览器访问互联网上指定的网页文件展示到浏览器上. 流程如下图: 从更深层次一点的技术角度来看,由以下几个步骤: 浏览器,将要请求的内容按照HTTP协议发送服务端 服务端,根据请求内容找到指定的HTML页面 浏览器,解析请求到的HTML内容展示出来 HTTP协议的全称是HyperText Transfer Protocol(超文本传输协议) HTTP协议是我们常用的五层协议中的应用层(5层从上到下是应用层,传

【学院官方整理】Python学习路线图-适合自学者从入门到项目开发(视频+文档) 干货提炼

亲爱的学员们: 您好!51CTO学院为梦想增值,诚邀您的关注!51CTO学院致力于让专家分享技术并让技术变现,让广大技术爱好者便捷.实惠的获取优质学习资源. 为了方便大家的学习,我们特别整理了Python学习路线图-适合自学者从入门到项目开发(视频+文档) 干货提炼,点击查看更多>> Python学习路线图-适合自学者从入门到项目开发(视频+文档) 干货提炼 本专题涵盖了Python基础.网络编程.WEB开发基础.WEB框架.分布式监控开发.审计堡垒机.FTP服务器.CMDB.主机批量管理.W

Python学习笔记_Chapter 7web开发

1.web应用元素 a.成员: web浏览器 web服务器 b.行为: web请求: 请求内容: 静态内容:如html文件,图像. 动态内容:需服务器运行一个程序进而做出响应. 网关接口&CGI脚本:标准化的生成动态内容的过程__网关接口,符合网关接口标准的程序__CGI脚本. web响应: 2.web应用:MVC模式 好的web应用应遵循MVC模式. Python学习笔记_Chapter 7web开发

python学习之路(一):开发环境搭建

最近python非常的火,所以我决定开始学习python,学习的第一步就是搭建开发环境,下面是详细的搭建步骤. 1.下载python 登录python官网https://www.python.org/downloads/选择3.6.4版本下载 2.安装 双击python-3.6.4.exe点击install now开始安装,下面一行路径是安装路径.记住这个路径后面会用到. 3.环境变量配置 右键"我的电脑"然后点击"高级系统设置" 选择"高级"选