- 背景介绍
- 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++的开发场景下立足???