V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kerrspace
V2EX  ›  程序员

如何跨越 coding 菜鸟到老手的鸿沟

  •  
  •   kerrspace · 2022-10-10 12:16:31 +08:00 · 4640 次点击
    这是一个创建于 806 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟我是刚毕业的新码畜 最近我有一点特别疑惑的就是 在学校里学的和自己掌握的基本都是一些比较基础的语法特性( c++) 但是工作中和自己私下学习接触的开源代码很多都是高度工业化的 就拿 c++举例,我的水平大概就是一个功能能用 c++写出来,但是工业代码里面很多设计和特性是为了譬如说批量化生产代码(大量的模版),譬如说为了追求极限速度(各种 ‘=delete’ 各种内联),譬如说为了考虑多线程。这里的问题是,很多时候你缺乏那个基础,你就算看到了开源源码里面一个设计,你也根本不知道他为什么要这么做(这样做为什么好),就更别说学习吸收了。


    想请教一下各位大佬,你们是怎么解决“没有经验,所以看见复杂的好代码也不知道他为什么要这么做(好在哪里);因为看不懂设计好在哪里,所以经验增长慢”这个问题的?
    32 条回复    2022-10-11 14:02:50 +08:00
    whywaoxaks
        1
    whywaoxaks  
       2022-10-10 12:51:53 +08:00   ❤️ 6
    唯有岁月,可以抚平这道鸿沟。
    kerrspace
        2
    kerrspace  
    OP
       2022-10-10 12:56:56 +08:00
    @whywaoxaks 但是这个东西我感觉必须积极主动的去提高 如果不主动就会陷入低水平重复 低水平的代码写的再多也很难主动提升到高水平的 最后就是 crud boy 35 被优化
    exmario
        3
    exmario  
       2022-10-10 13:14:16 +08:00
    刻意练习+即时反馈,leetcode!
    elechi
        4
    elechi  
       2022-10-10 13:34:29 +08:00
    多看多写代码
    king888
        5
    king888  
       2022-10-10 13:40:06 +08:00   ❤️ 1
    直接看开源项目源码,看逻辑,别人为什么这样写,自己尝试能否优化,是否有更好得写法,这是最直接升级方法
    king888
        6
    king888  
       2022-10-10 13:42:35 +08:00
    如果没得优化说明已经是当前实现里面不错得方法,那你看了,思考过了,所以就已经成功吸收了别人优质思想
    king888
        7
    king888  
       2022-10-10 13:43:30 +08:00
    如果还有的优化,说明你是棒棒的,那成就感也挺不错的
    egen
        8
    egen  
       2022-10-10 13:55:07 +08:00
    有两个方向吧,一个是在实际工作中接触到足够复杂的场景,就比如模版,如果一个类型只需要写两三次或者十来次,那就是手写比较快,但是如果需要写 100 次,你就会想用模版等方法来做
    其次是对于其他基础技术的研究,比如操作系统,硬件,网络等,为什么内联可以更快,这个就涉及到对各种基础原理的学习

    这些学习都需要时间,就像 #1 说的,唯有岁月,可以抚平这道鸿沟。
    lidongyooo
        9
    lidongyooo  
       2022-10-10 14:18:13 +08:00
    多看多写多思考。
    dx3759
        10
    dx3759  
       2022-10-10 15:38:22 +08:00   ❤️ 3
    首先,第一条: 小弟我是刚毕业的新码畜
    不要把自己当成畜生,你是工程师、工程师、工程师!!!
    哪怕行业不把你当人看,你也要明白,这是沟渠,早晚要脱离。
    dsggnbsp
        11
    dsggnbsp  
       2022-10-10 15:40:39 +08:00
    首先不要贬低自己,然后看到就学,慢慢积累,你想速成的话可以去找个培训班?
    HugoChao
        12
    HugoChao  
       2022-10-10 15:41:35 +08:00
    不要执着给自己打 tag ,比如菜鸟老手,保持好奇,坚持学习,就好了
    zoyua
        13
    zoyua  
       2022-10-10 15:46:01 +08:00
    keep learning
    BUHeF254Lpd1MH06
        14
    BUHeF254Lpd1MH06  
       2022-10-10 16:47:33 +08:00
    无他 唯手熟尔
    god7d
        15
    god7d  
       2022-10-10 17:23:54 +08:00   ❤️ 2
    尝试自己去造一些轮子,你会发现各种高级语法、设计模式、多线程还有数据结构等基础知识都是必不可少的知识储备,同时也会理解很多编程思想。

    我可以提供两个案例,比如:

    1.我需要自己造一个 ORM 框架的轮子,支持 Mysql 、SqlServer 、Oracle 起码三种以上的数据库,怎么完成呢?

    2.我需要在同一个项目中处理多种通讯协议,该怎么做到自动判断通讯协议,怎么处理不同的报文,乃至于考虑到将来有更多的协议加入进来的时候,必须使现有代码具备良好的扩展性?

    诸如此类,希望可以帮到你。
    crstudio
        16
    crstudio  
       2022-10-10 17:48:13 +08:00   ❤️ 1
    我现在虽然不是一个老手,但是我想提出以下三点建议:
    1. 基础知识的理解和贯通。根据你的语言应用,需要了解相对应的基础知识,比如网络,编译,操作系统,数据结构等。
    2. 流行项目的源码阅读。好项目的源码,绝对是值得你借鉴和学习的,要知道作者为什么这么些,这么写的好处是什么。
    3. 大项目从头到尾的经验。看再多,不经历也无法将知识转化为自己的,而软件项目随着“规模”的增大,不光代码量变多,而是技术栈会越来越多和越来越深。
    所以,光靠时间的基类是不行的。共同勉励。
    Phariel
        17
    Phariel  
       2022-10-10 17:57:12 +08:00
    多看 多用 多练 唯手熟尔
    ksco
        18
    ksco  
       2022-10-10 18:28:30 +08:00
    主动参与开源项目,尤其是基础设施的开发。绝大部分的公司提供的岗位没办法让你掌握这些东西,只靠一楼说的岁月,等退休了也抚不平这道鸿沟。
    ihciah
        19
    ihciah  
       2022-10-10 18:31:26 +08:00
    好代码是语义明确的,而不是某种只有内行人听得懂的黑话;好的代码往往有注释或者自己就是注释,不需要太费劲去解读;对于较大的工程项目,我觉得好不好主要体现在其结构上,比如能不能用抽象层将代码解耦成功能明确的子模块等。
    我觉得你这个例子本身就不符合“复杂的好代码”。你说的那些 cpp 的语法问题我觉得更像是由于历史原因不得已而为之的糟粕(狗头保命),来用 rust 吧!
    documentzhangx66
        20
    documentzhangx66  
       2022-10-10 18:34:13 +08:00
    1.打好基础:
    大学数学 -> 概率与统计 -> 大学物理 -> 模拟电路 -> 数字电路 -> 计算机组成原理 -> 汇编 -> C/C++ -> Java/C#/PHP/Python -> 操作系统 / 计算机网络 / *多媒体 -> 数据库 -> 分布式。

    2.利用好时间:
    工作日的晚上、双休、各种节假日、除夕夜、春节,都拿来学习。

    3.多交流、多沟通、多上论坛多加群。

    做好以上 3 点,早晚成为大佬。
    GP1
        21
    GP1  
       2022-10-10 18:56:27 +08:00
    练级打怪
    jones2000
        22
    jones2000  
       2022-10-10 19:55:41 +08:00
    代码写的多了, 项目做的多了, 就会了。 光看书或代码没有什么用,就只能应付应付面试。 写代码是为了解决问题,只要能解决问题就行,高效,可读性都是锦上添花的东西, 问题都解决不了要那么多技巧干什么用。
    levelworm
        23
    levelworm  
       2022-10-10 20:15:11 +08:00 via Android
    只有找更好的工作接触更好的人才行。就连大神卡马克都需要和人交流才能进步的更快。
    NilXuan
        24
    NilXuan  
       2022-10-10 20:59:58 +08:00
    1. 遇到自己能看懂的->好的,原来 xxx 也这样写;
    2. 遇到自己看不懂的->自己努把力能不能看懂一部分?
    如果能,就把它搞定,然后总结下为什么最开始看不懂,搞定后有什么收获?
    如果不能,可以问问自己为什么不能?解决完该问题的答案后,再看看能不能看懂,如果还是看不懂,不妨先放下,看看其他部分。随着解锁的细节越来越多,回过头再看看哪些不懂的,如果还是看不懂,可能就得求助他人了;或者就继续先放下,继续解锁其他部分(记得回头看,如果仅放下,但是不回头看,那可能就永远搞不懂了)
    YYYeung
        25
    YYYeung  
       2022-10-11 00:11:41 +08:00
    只有老老实实花时间吧

    幻想:弯道超车
    现实:坑渠翻车
    chasb
        26
    chasb  
       2022-10-11 00:15:31 +08:00
    这就是活生的例子证明弯道超车绝对是屁话
    kerrspace
        27
    kerrspace  
    OP
       2022-10-11 01:11:09 +08:00
    @chasb 从时间上看未必。。。因为我现在每天可以说除了睡 4 个小时在全方位努力工作学习,也没有家庭拖累。我感觉是可以追上一些佛系的高手。但是这是从时间的角度衡量。从你为了达到那个水平要经过的训练来讲是肯定没有超车这种说法的,该踩的坑都要踩
    kerrspace
        28
    kerrspace  
    OP
       2022-10-11 01:11:47 +08:00
    @NilXuan 说的太好了,这个方法论讲的非常好。感谢大佬
    yule111222
        29
    yule111222  
       2022-10-11 08:52:37 +08:00
    看不懂就不是好代码,C++的历史包袱而已
    nicebird
        30
    nicebird  
       2022-10-11 10:51:09 +08:00
    慢慢提高:
    - 第一步能写好几百行的模块,快速实现
    - 第二步某一年能够大量输出几万行代码
    - 第三步 开始刻意练习,学习各种开源库、学习自己项目库
    jinsongzhao
        31
    jinsongzhao  
       2022-10-11 11:16:38 +08:00
    先确定你能避免外界的浮躁,潜心下来,并且喜欢研究代码,勇于不断学习新框架。最后跨越这条鸿沟的人,差不多只剩下 1%,加油吧
    Twnysta
        32
    Twnysta  
       2022-10-11 14:02:50 +08:00
    你是不是需要一个 ide ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.