V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wanmyj
V2EX  ›  程序员

会写代码但是缺乏工程能力,该怎么补

  •  
  •   wanmyj · 108 天前 · 4619 次点击
    这是一个创建于 108 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写 C++五年了,一直流连于各大厂拧螺丝,每个项目里都是上百号人写了十几年以上的代码,在里面修各种离奇古怪的 bug 。

    今天被同事请教一个 MFC 的界面问题,很小的一个 GUI 程序,以为 3 分钟搞定,结果彻底蒙圈了,完全不了解界面那一套,文档都要从绪论开始开。

    感觉自己的代码之路走偏了,完全沦为了大厂打工仔,让我设计开发一款新的桌面应用,该怎么设计框架,设计模块,脑子就一片空白。学那么多 C++的八股知识,看似学到了,实际上无非就是茴字的四种写法。不知道有没有人跟我有同样的困扰,想请问大家该怎么破这个局。

    30 条回复    2024-08-09 09:44:24 +08:00
    flyhelan
        1
    flyhelan  
       108 天前
    你不是一个人。
    tool2dx
        2
    tool2dx  
       108 天前
    C++开源工程很多啊,多看看老外怎么写的,多抄抄不就可以了。

    比如 unreal ,比如 webkit ,比如 chrome ,编译一次都够久了,都是巨无霸。
    ajaxgoldfish
        3
    ajaxgoldfish  
       108 天前
    我算不算是相反的,主 cpp ,副 Java ,react ,vue 。cpp 只用框架,能不造轮子就不造,现在导致代码的功底很薄弱,很少有一次编过,经常犯低级错误将 cpp 的内存机制和 Java 的那一套混淆,导致代码很不规范,之前埋的坑经常爆发。
    liprais
        4
    liprais  
       108 天前
    隔行如隔山,这有啥奇怪的
    jjx
        5
    jjx  
       108 天前   ❤️ 8
    没啥
    有了工程能力
    你又会感叹没有设计能力的

    有了设计能力,可能又没有销售能力

    人不到全才和完美
    wanmyj
        6
    wanmyj  
    OP
       108 天前
    @ajaxgoldfish 真的是完全相反。我现在修的 C++的 bug ,基本都是对象没有正确释放,参数类型强转出错,数据计算精度错误,环境变量错误,反正都是很细节的东西。我倒是很羡慕你的状态,能自己独立挑起来项目大梁,修 bug 改代码就招一两个我这种老学究就完事了
    AoEiuV020JP
        7
    AoEiuV020JP  
       108 天前   ❤️ 1
    也是, 想自己写点小东西就各种纠结,框架搭不起来,总觉得这样也不好那样也不好,找找教程或者其他开源项目吧,也套不上, 自以为这点小东西实现起来还是没问题的, 实际上纠结半天一行代码都没写,
    szboy
        8
    szboy  
       108 天前
    深度和广度都需要发展
    liuzhedash
        9
    liuzhedash  
       108 天前   ❤️ 1
    正常,因为之前你关注的点都是细节的,具体的问题,而没有从 0 开始做一个完整应用的经验
    好比之前你是个小兵,打了几年仗会用 ak47 和火箭筒了,现在让你当连长指挥几个排,武器经验仍然有用,但是更重要的是思考怎么把各个作战单位组织起来,打赢一场战斗
    其实,这也是各个大厂最希望员工达到的状态,完美的标准螺丝钉,不但随时可以替换,而且你离开现在的岗位技能就没用了

    破局的方法也不复杂,就是开始从 0 开始制作一个应用,比如从空白工程开始写一个 Windows 窗口程序
    mcfog
        10
    mcfog  
       108 天前
    这不是正常的吗,你找个平均的 spring boot 搬砖师傅来请教个安卓 GUI 问题,也是懵逼的啊

    工作这么多年还觉得用同一个语言就是同一个工种,这才是大问题吧
    jufeng
        11
    jufeng  
       108 天前 via Android
    1. 软考证书考试走一遍,可以补全理论知识
    2. 主动申请承接项目的各个环节的工作参与,即使是讨论群组,会议旁听也可以
    3. 主动跟踪支撑项目全流程从需求端到交付全流程,这个很费精力,还得领导能给机会
    jufeng
        12
    jufeng  
       108 天前 via Android   ❤️ 1
    这两年最大的体会,就是软件工程首先是个工程,最终目的就是输出一个交付出去,受用户受众认可的软件产品。软件和土木其实没啥区别,只是实现手段和产品形态不一样。
    xing7673
        13
    xing7673  
       108 天前
    直接点说,放弃 c++,多接触其他语言框架。
    c++做工程个人单打独斗就是时间黑洞。
    用其他语言做跳板多接触业内主流技术框架开拓视野,渐渐就能用这些积木搭建你想要的玩具了。

    当然不是说你主业放弃,因为按照你的描述来看,你主业的 c++在企业里还挺有含金量。
    业余时间平均每天有 1 个小时左右就行
    iOCZS
        14
    iOCZS  
       108 天前
    MFC 本就是有点年头的东西了,设计理念跟 WPF 就差很多了
    MrVito
        15
    MrVito  
       108 天前
    问题关键在于,MFC 这玩意和你平时用的 C++,完全就是两个东西呀。就像 10 楼回复的那样,同一个语言,本来就可能差距很大。java 框架更多,你让平时用 A 框架的人去修复 B 框架的问题,肯定不可能的。
    levelworm
        16
    levelworm  
       108 天前 via Android
    得自己写项目。另外 MFC 这种东西,可能 ChatGPT 会有帮助。
    xuelang
        17
    xuelang  
       108 天前   ❤️ 2
    这时候需要 ChatGPT 或者 Claude 了,哈哈,本后台写 c++的,用 Claude 快速撸了一个 nextjs 的 web 站 https://gallery.selfboot.cn/

    有算法演示,web 游戏,和工具,代码开源。 看 ai 写,慢慢迭代,也就慢慢懂点前端了
    jones2000
        18
    jones2000  
       107 天前
    c++ 5 年,只能算刚刚入门。MFC 可以看<深入浅出 MFC>侯捷写的, 看完自己用 win32 写一套类似的 MFC 框架,写完基本就懂了。 少用开源,尽量都自己写。
    GrayXu
        19
    GrayXu  
       107 天前
    不懂 MFC 这种古董不是很正常嘛。。
    xuanwu
        20
    xuanwu  
       107 天前
    可以在 gitee 创立一个开源项目,解决工作生活中碰到的一个小问题。
    然后用悬赏功能新建任务,锻炼项目规划、与新开发者交流、任务进度管理、测试验收、预算编排等等能力。
    vitovan
        21
    vitovan  
       107 天前
    很羡慕楼主啊,现在我写个 C 的字符串拼接都要去查文档,最后还整溢出了。
    MozzieW
        22
    MozzieW  
       107 天前
    最近杂活干多了,也感觉自己不会写代码了(从头设计、实现一个功能系统),翻出了《代码大全》,常看常新。

    我理解这是一个思维的问题,Bug 改多了,脑子里多解决问题的思路都是找到问题点,然后思考怎么调整代码逻辑,最后解决。

    但是要搭建一个新的,第一步是要了解需求,分解模块,逐步实现,这些也是要思考的。平时看代码很容易看出模块,但是的确太久没主动思考怎么根据需求划分模块了。
    zsc8917zsc
        23
    zsc8917zsc  
       107 天前
    打开 gpt 让他从创建一个项目开始一步一步的教你
    originals
        24
    originals  
       107 天前   ❤️ 1
    同 c++五年,一开始也是修 bug ,然后到后面自己负责项目就开始设计架构模块啥的,不过这种机会感觉大厂很少吧,毕竟分工太细人也多,我朋友也是大厂拧螺丝,不过给的钱是真的多哈哈哈
    lxh1983
        25
    lxh1983  
       107 天前 via iPhone
    你现在这就是标准的码农啊,要想做工头,就看看工头是咋干活的呗
    LwZiye
        26
    LwZiye  
       107 天前
    多看,多思考,多重构
    magiclx
        27
    magiclx  
       107 天前   ❤️ 1
    MFC 是对 Win32 API / Windows SDK 的封装,目的是让你更方便使用 API ,里面用了一些宏和注释的约定,得按它设计思路填写代码。GUI 的东西还不太复杂,复杂的是一些稍微复杂的东西和操作系统设计搅到一起,比如消息机制、事件循环、进程、内存、线程、异常处理,所以现在除非必要,否则界面都用类 Web 的 HTML 或 XML 来表达了,MFC 是微软自己也放弃的,很少场景一定要用这个老古董,大家用的多的不都是 DirectUI 或一些第三方控件吗。你说到的工程能力,不知是不是指一个项目从头开始搭建工程,我想这里的难度分为两部分,一是 GUI 你不熟,其次是从需求到设计你不会转化。对于前者,可以先了解现在主流的 GUI ,然后选择一种满足需求的主流框架,可以询问 AI ,多问几轮,也就能了解了;而从需求到设计是从技术视角到业务视角的转化,本身还是一件事,只不过角度不同。前者吃学习能力,你都辗转大厂了,应该很强,后者吃经验,只能多看多思考,事上练得,急不来。能快速提升功力的,那就找行业内的人指导指导,说不定一点就通。
    qiyilai
        28
    qiyilai  
       107 天前
    所有框架,特别是大而全那种,都是屏蔽了很多实现过程和细节,一开始只能按照它的规则去填充,后面接触多了,像一些多年的项目也是一样的,短期也搞不清全部流程,大多数情况下一个框架明白了其他都是类似的
    LuckyPocketWatch
        29
    LuckyPocketWatch  
       107 天前
    初学 C++,看完<c++ primer plus>,后觉得自己只会基本语法,于是学了 Qt

    学完 Qt 。发现算法基本不会,于是学了<算法导论>和<数据结构>
    学完算法。发现对实现不了解,于是学了<STL 码源解析>
    学完 STL 实现。发现不会设计,于是学了<设计模式>
    学完了设计模式,发现对编译一无所知,于是学了<编译原理>
    学完了编译原理,发现缺乏数据库至少,于是学了<数据库原理>
    学完了数据库,发现缺少源代码阅读,于是阅读 levelDB 的源代码
    学完了源代码,发现 C++标准以及到了 C++20 甚至 c++23 了,于是赶紧开始学习 C++20 标准,特别四大组件
    .......
    以上仅限 C++

    但回过头来,我现在就靠 c++基本语法和 Qt 吃饭,就目前而言,能用到的也就 C++语法和 Qt 了

    能用到 == (工作用到 || 面试被问到)
    wanmyj
        30
    wanmyj  
    OP
       106 天前
    @LuckyPocketWatch 敢问兄台的工龄几何?这里面好几本书我都看了个大概,都没能耐心看完
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:00 · PVG 22:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.