Re: [讨论] 怎样算是一个合格的junior cpp programme

楼主: tinlans ( )   2022-08-20 20:26:42
※ 引述《musashi023 (太阳鱼)》之铭言:
: 诸位资工大神好,我本身是EE背景的
: 因为想脱离design house的生活
: 一直有在刷题+补充Cpp, oop 相关知识
: 之前有幸找到一份junior写Cpp的工作
: 想了解对各位来说,有没有一个对于qualified cpp programmer的具体标准
: 我的理解:
: Junior:
: 1. 熟练STL, 能解决被交付的工作
STL 之外 boost (https://www.boost.org/) 也要会用一点,
有余裕的话这两个也稍微看一下:
https://abseil.io/
https://github.com/facebook/folly
如果确定公司偏好用哪一套的话可以指向性学习。
不需要盲目去学整套,至少要有从里面选东西来解决问题的能力即可。
: 2. 熟练应用资料结构
: 3. 熟练使用template (之类的
你能把 STL 用得熟其实就包含这两者了。
所谓 template 的使用其实有区分,一个是像使用 STL 那样人家写好的来用,
一个是用 template 设计函式库,后者不是一定需要,实际上常用不太到。
: 4. oop
这对于写出容易交接、容易合作、容易让人看得懂的程式码有帮助。
也有公司完全不用 OOP 在写 C++,这很看你进的公司是干嘛的。
总之先学好不是坏事,确定上面有 seinor 带你的话可以进去边被骂边学。
这个脸皮可能需要厚一点乖乖被骂,每个人都有这时期,有人带比自己乱学得好。
另外我觉得最重要的还有几个:
5. 编译、连结错误的讯息要看得懂,连这个都卡住还要问人的话很容易变累赘
6. 懂得使用除错工具,以 Linux 环境来说就 gdb、valgrind、address sanitizer 等。
包括程式不小心掉进无穷循环,你要知道怎么让除错工具拦截下来看到底在干嘛。
7. 特定作业系统的开发工具组,我知道要写 C++ 的有不少是 Linux 环境开发,
如果连基础 Linux 指令都不会下,g++ 和 clang++ 指令都还要问人的话就有点惨
8. 写出让别人容易看懂的程式,不要炫技,写每一行之前都先考虑别人看不看得懂
9. 会用 git 之类的版本控制软件
: Senior:
: 1. 能设计软件架构
如果上面没有系统分析师或系统设计师也没架构师在,这两个也不能说不对。
只是这跟 C++ 比较没有关系,它比较偏跨语言的泛用知识。
把 C++ 学得超级好也未必能修得这类技能,这技能树的起点和 C++ 算是平行。
: 2. 活用design pattern
先假设你指的是物件导向的 design patterns,
如果你的想法是 C++ 先学好,然后就直接跑去学 design patterns 并灵活运用,
那么我要以一个写 25 年 OOP 程式的过来人告诉你:此路不通。
还好不像十年前一样,现在讲这个已经有网络文章能参考了,可以读一下这两篇:
先学物件导向还是先学设计模式?
http://teddy-chen-tw.blogspot.com/2014/03/blog-post_26.html
Top-down和Bottom-up设计方法
http://teddy-chen-tw.blogspot.com/2014/03/top-downbottom-up.html
更精确来说,物件导向整个领域除了 OOP 之外还有 OOA 跟 OOD。
传统软件开发流程一定会看到的就是需求、分析、设计、实作几个阶段,
design patterns 是 OOD 阶段的函式库,你光会套用函式库和你会设计是两码子事。
如果你压根不知道软件开发是怎么从需求走到设计,
design patterns 直接啃下去然后拿来用,几乎可以说 100% 会出大事。
就像有人 20 年前用 Borland C++ Builder 写得一手好 GUI 软件,
VCL 元件库没有一个他不知道怎么用的,
但是他 C++ 底子可能烂到不堪入目,
连自己实际上在写什么东西都不知道。
程式不但很难读懂,别人接手他的程式码每个都会想砍掉重练。
话题有点扯远了,比起上面的两个能力,我会比较注重这些:
1. 程式码重构能力 (refactoring),比起预先设计,我更喜欢先照直觉写再重构
2. 懂测试驱动开发 (test-driven development),尽量以测试程式代替死版的技术文件。
这个和程式码重构通常是搭配在一起的东西,能确保你每次重构都没改坏。
测试框架如 Boost.Test 或 Google Test 等等的能熟悉一两种最好。
3. 有办法 review junior 的程式码并给予正确指导,人带不好你一个人写还比较快。
公司有引入 Phabricator 或 Gerrit 的话,要熟悉怎么善用它。
4. 完备的 OOP 知识,有少许 OOA 和 OOD 概念,写出的程式可以应对需求快速变化,
不要遇到需求改来改去就只会想着揍主管、揍客户或是辞职把锅甩给别人
5. 完备的多执行绪和异步程式开发能力,并知道如何除错
6. 广泛涉猎各种框架和函式库,如 Qt、C++ REST SDK、redis-cpp 等等,
当然允许混用不同程式语言开发的话,可以在非效能关键部分结合别的语言,
然后搭配 SWIG、gRPC 等工具把不同语言开发出来的程式连接起来
7. 能快速评估第三方函式库是否适用于自己的专案,有办法 trace、修正问题并扩充
8. 随时跟上 C++ 最新标准,最近十几年 C++ 标准也开始飙车了,不要轻易被甩下车
9. git flow、github flow、gitlab flow 这些也要熟悉到一个程度,能指导 junior
在 4. 我并不强调 design patterns,有兴趣碰自然是更好,但相关基础先打稳再说。
如果你团队里 senior 之上就没有人统筹规划架构,那可以再进阶以图自立自强。
这颗技能树完全长在跟 C++ 不同地方,不是你 C++ 学到极致就能跨过去。
你要点亮它的话可能要先知道怎么从需求走到 OOA,然后再从 OOA 走到 OOD。
这部分有个概观就好了,后续是搭配现代的各种敏捷开发法一起使用。
上面给的连结也会告诉你就是需要混合 bottom-up 和 top-down 东戳一点西戳一点,
硬用线性学习法你只会觉得自己像在读国文课本一样,很难靠自己吸收到真髓。
所以与其说它是技能树,实际上是可以跳着点的,没有先练好什么才能练什么这种事。
C++ 也是同理,整个学习方式几乎都是先零散学习最后才连起来。
这语言复杂归复杂,实际上不用全学好还是能拿来工作,等全学完再上你都变老人了。
: 因为一直担心自己刷题或是学习的方式太零碎, 侷限
: 故认真发问
: 欢迎各种补充
作者: holebro (穴弟弟)   2022-08-20 21:01:00
推推
作者: t64141 (榕树)   2022-08-20 21:02:00
重构这件事要考虑公司是否允许上版后才重构,如果不允许那要尽量在上版前就整理好
作者: notBeing (read and be read)   2022-08-20 22:11:00
Agree. 谨记在绝大时候写code 是engineering 而非science.
作者: musashi023 (EE等身大海葵SoC)   2022-08-20 23:03:00
Thx. 受益良多
作者: viper9709 (阿达)   2022-08-20 23:34:00
推这篇
作者: nicetw20xx (哇爱台湾)   2022-08-21 00:12:00
推大大分享
作者: jerry0715no1 (jerry0715no14)   2022-08-21 01:08:00
作者: shibin (喜饼)   2022-08-21 01:31:00
推,需求到设计,我也是学习中
作者: a210s02 (虫虫)   2022-08-21 05:22:00
推,感谢分享
作者: e12518166339 (耐纶)   2022-08-21 08:36:00
几霸分
作者: whyhsu (whyhsu)   2022-08-21 09:02:00
作者: steak5566 (牛排56)   2022-08-21 10:36:00
有些人连compile error都要问 看到这种真的脸猫
作者: wk415937 (wk4)   2022-08-21 13:02:00
作者: ronald0000 (ron)   2022-08-21 13:06:00
作者: terry8575 (豪哥)   2022-08-21 15:40:00
推 收获很多
作者: Segundus (赛冈督)   2022-08-23 03:07:00
不想让 doc 过时可以用 asciidoctor ,他可以让说明文字下的 example block 指向 testing code
作者: hutdris   2022-08-23 12:11:00
赞!
作者: chicagoparis (chicago2paris)   2022-08-24 01:09:00
好文 推 每次讲C++似乎都可以钓到大大
作者: kuosos520 (kkk)   2022-08-24 17:02:00
我最近遇到一个障碍,前人写的C++太过艰涩难懂我时常解一个小小的bug就要花数倍于前人的时间有时候追code追一天,90%的时间都在骂脏话如果不能重构,我实在是已经快hold不住现在只期待我可以撑到有人接走
作者: RadiationXen (Xen)   2022-08-25 19:33:00
推个
作者: chchwy (mat)   2022-08-30 22:50:00
推这个

Links booklink

Contact Us: admin [ a t ] ucptt.com