这个PC项目是去做还是不去做?

背景

老板:接下来要启动项目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++开发发展路线为:

  1. 语言介绍:什么是C++,为什么使用C++,C和C++区别;
  2. 环境搭建:安装C++,安装IDE,运行 "Hello Wrold!";
  3. 运算符:算术运算符、逻辑运算符、位运算符;
  4. 控制流与语句:条件语句和循环语句;
  5. 函数:函数重载、运算符重载、Lambda 表达式;
  6. 数据类型:静态类型与动态类型,运行时类型识别(RTTI);
  7. 指针与引用:指针的概念与操作,引用的使用,智能指针(unique_ptr、shared_ptr、weak_ptr);
  8. 代码组织:作用域与命名空间,头文件与源文件的组织;
  9. 结构体与类:结构体与类的定义与使用,构造函数与析构函数。拷贝控制(拷贝构造、赋值运算符);
  10. 面向对象编程:继承与多态。虚函数与虚表机制。抽象类与接口;
  11. 异常处理:异常的抛出与捕获。标准异常类的使用。自定义异常类;
  12. 语言特性:自动类型推导(auto)。类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)。宏与预处理指令;
  13. 标准库与 STL(容器、迭代器):迭代器的使用。输入输出流(iostream)。常用算法(sort、find 等)。日期与时间处理;
  14. 调试工具:熟悉调试器的使用,如 GDB、LLDB、Visual Studio 调试器等;
  15. 内存管理:对象的生命周期。内存泄漏的检测与防范。智能指针的深入理解与应用;

看着这 C++ 开发发展路线,有种似曾相识的感觉,虽然与 Java 不同,但语法和思维方式是可以迁移的。如果把语言看作是工具,那么重要的是如何使用工具,也就是编程的思维方式,要让编程思维不要受制于编程工具。

有了 roadmap 后,跟着一步一步走,接下来入手就不是那么困难,心里有底。

为什么要做PC项目?

为什么要做PC项目,现在已经到了2025年,如果要选择PC作为以后的方向,那肯定是不符合当前时代的。所以抛开做PC项目外壳,其实是学习和掌握 C++语言。从这方面看,这是一次绝佳的机会,因为学了马上就能实践,这比自己单独再去搞C++的效率高很多。

对于C++,如果要选择它,那么还是要看它有没有技术生命力。继续参考左耳朵耗子在"如何选择技术"中提出的观点来考虑:

选择一项技术,以确定自己未来的发展方向,要考虑几个条件:

  1. 这项技术是否已被大公司使用?大公司是否投入时间和金钱来支持这项技术?
  2. 这项技术是否有"杀手级"应用?也就是说,用它开发的某个产品出类拔萃?
  3. 这项技术的社区是否有热度?不管它是开源还是闭源技术,其所在社区的发展势态如何?
  4. 是否有其他人为这项技术作出贡献?其他软件是否有与其兼容?对于该技术,是否有标准委员会?这些都说明了技术生存与发展的基础条件。

满足以上两个条件的技术,可选择;满足以上三个条件的技术一定会很火;如果以上四个条件都满足,那么这项技术就是未来。比如,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项目:

  1. # C++ Developer Roadmap,熟悉和掌握 C++,只是时间问题。
  2. 学了C++就能立马实践,高效率学习,并且 C++ 有技术生命力,以后可以在新的领域做没有做过的事情。
  3. 对于以后做 Android,Harmony,和 KMP 跨平台开发,能从 Native 出发,做一些底层的事情。
  4. 公司花费时间和金钱给你赋能 :)。

最后,预估这个ROI应该是大于1的。

相关推荐
yxc_inspire14 分钟前
基于Qt的app开发第七天
开发语言·c++·qt·app
周Echo周28 分钟前
20、map和set、unordered_map、un_ordered_set的复现
c语言·开发语言·数据结构·c++·算法·leetcode·list
沙振宇32 分钟前
【HarmonyOS】ArkTS开发应用的横竖屏切换
android·华为·harmonyos
☆平常心☆1 小时前
UE5通过C++实现TcpSocket连接
c++·ue5
dot to one2 小时前
Qt 中 QWidget涉及的常用核心属性介绍
开发语言·c++·qt
橙子199110162 小时前
Kotlin 中的作用域函数
android·开发语言·kotlin
zimoyin2 小时前
Kotlin 懒初始化值
android·开发语言·kotlin
二年级程序员2 小时前
C++的历史与发展
c++
迷茫不知归路3 小时前
操作系统实验习题解析 上篇
c++·算法·操作系统·实验课设
一个尚在学习的计算机小白3 小时前
文件相关操作
c++