背景
老板:接下来要启动项目PC版本,你有没有兴趣参与?
我:之前没有做过PC项目,也没有使用过C/C++开发,做起来恐怕没有那么顺利?
老板:这个项目挺重要的,你对业务熟悉,且对新技术学习能力强,没有什么问题的。
我:这个项目做完之后呢?是一直做PC,还是继续做Android?
老板:做完PC后,可以继续做PC,也可以继续做Android,你愿意去做PC吗?
我:我仔细想一下,给我两天时间。
经过和老板初步沟通:(,这个PC项目是去做还是不去做呢?
疑问
当要离开自己熟悉的领域,去一个陌生的领域,内心多少是有点排斥的,而且一大堆问题马上充斥着脑袋:
- PC时代早就结束了,没有前景;
- 没有做过PC项目,也没有使用过C++语言开发,无从下手,困难重重;
- 要花费大量的时间去学习C++语言,周六周日恐怕休息不了;
- 要阅读项目老代码,熟悉项目,这吃力费劲,进度缓慢,过程难受;
- ...
用这几个问题问自己,马上就想回复老板,我还是不去做PC项目了。
在这之前,已经有过一次经历,那就是去做鸿蒙项目,但是做鸿蒙项目是:
- 公司所驱:公司投入金钱和时间支持;
- 环境所趋:热门应用支持鸿蒙,几乎所有应用都要支持鸿蒙;
- 自我挑战:新事物,新的技术栈,触摸和了解鸿蒙;
- ...
这次PC项目,第一感觉就是有坑,别往里面跳。
思考
虽然这些疑问,让人产生了排斥和反感的情绪,但是还是要理性分析一下。
做PC项目需要什么基础能力?
做PC项目需要什么基础能力?这个问题换个问法就是:C++开发发展路线是什么?作为一个新手,如果没有 roadmap,那么可能花费了大量的时间,却感觉什么也做不了,最后无从下手或走一步看一步。这是在做 Android 项目很多年后,才知道一开始就有 roadmap 的重要性(少走弯路),抬头看路远比低头干活重要。
从 roadmap.sh/cpp了解到C++开发发展路线为:
- 语言介绍:什么是C++,为什么使用C++,C和C++区别;
- 环境搭建:安装C++,安装IDE,运行 "Hello Wrold!";
- 运算符:算术运算符、逻辑运算符、位运算符;
- 控制流与语句:条件语句和循环语句;
- 函数:函数重载、运算符重载、Lambda 表达式;
- 数据类型:静态类型与动态类型,运行时类型识别(RTTI);
- 指针与引用:指针的概念与操作,引用的使用,智能指针(unique_ptr、shared_ptr、weak_ptr);
- 代码组织:作用域与命名空间,头文件与源文件的组织;
- 结构体与类:结构体与类的定义与使用,构造函数与析构函数。拷贝控制(拷贝构造、赋值运算符);
- 面向对象编程:继承与多态。虚函数与虚表机制。抽象类与接口;
- 异常处理:异常的抛出与捕获。标准异常类的使用。自定义异常类;
- 语言特性:自动类型推导(auto)。类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)。宏与预处理指令;
- 标准库与 STL(容器、迭代器):迭代器的使用。输入输出流(iostream)。常用算法(sort、find 等)。日期与时间处理;
- 调试工具:熟悉调试器的使用,如 GDB、LLDB、Visual Studio 调试器等;
- 内存管理:对象的生命周期。内存泄漏的检测与防范。智能指针的深入理解与应用;
看着这 C++ 开发发展路线,有种似曾相识的感觉,虽然与 Java 不同,但语法和思维方式是可以迁移的。如果把语言看作是工具,那么重要的是如何使用工具,也就是编程的思维方式,要让编程思维不要受制于编程工具。
有了 roadmap 后,跟着一步一步走,接下来入手就不是那么困难,心里有底。
为什么要做PC项目?
为什么要做PC项目,现在已经到了2025年,如果要选择PC作为以后的方向,那肯定是不符合当前时代的。所以抛开做PC项目外壳,其实是学习和掌握 C++语言。从这方面看,这是一次绝佳的机会,因为学了马上就能实践,这比自己单独再去搞C++的效率高很多。
对于C++,如果要选择它,那么还是要看它有没有技术生命力。继续参考左耳朵耗子在"如何选择技术"中提出的观点来考虑:
选择一项技术,以确定自己未来的发展方向,要考虑几个条件:
- 这项技术是否已被大公司使用?大公司是否投入时间和金钱来支持这项技术?
- 这项技术是否有"杀手级"应用?也就是说,用它开发的某个产品出类拔萃?
- 这项技术的社区是否有热度?不管它是开源还是闭源技术,其所在社区的发展势态如何?
- 是否有其他人为这项技术作出贡献?其他软件是否有与其兼容?对于该技术,是否有标准委员会?这些都说明了技术生存与发展的基础条件。
满足以上两个条件的技术,可选择;满足以上三个条件的技术一定会很火;如果以上四个条件都满足,那么这项技术就是未来。比如,Java 满足以上四个条件,技术社区十分火爆,Go 语言也类似。
毫无疑问,C++ 是有技术生命力的。
那么,为什么要做PC项目,主要是因为可以学习和掌握C++。这以后就能用C++去做一些没有做过的事。
做PC项目能获得什么?
做PC项目能获得什么?关注的应该是个人成长,而不是公司给予什么。如果不愿意做PC项目,公司又给予做PC项目高绩效,那么要去做吗?做完获得了高绩效,这也是短暂的,以后也不会做第二次,违背意愿被动去做,这过程有点难受。
做PC项目,期望能获得的能力:
- 学习和掌握 C++
- 能阅读 Android 或 Harmony Native 代码
- 可以做 Android Native 开发
- 可以做 Harmony Native 开发
- 可以做跨平台 KMP Kotlin/Native 开发
- ...
如果要去做PC项目,将带着这些目标去,并达成这些目标,否则就白做了。当然,首先还是能完成PC项目。
总结
是否要去做自己不熟悉的事情,首先不要为自己设置限制,理性分析,有理有据,掌握主动权。
去做PC项目和不去做PC项目,对于自己来说,其实都是没有损失的。
去做PC项目:
- 有# C++ Developer Roadmap,熟悉和掌握 C++,只是时间问题。
- 学了C++就能立马实践,高效率学习,并且 C++ 有技术生命力,以后可以在新的领域做没有做过的事情。
- 对于以后做 Android,Harmony,和 KMP 跨平台开发,能从 Native 出发,做一些底层的事情。
- 公司花费时间和金钱给你赋能 :)。
最后,预估这个ROI应该是大于1的。