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

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


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

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

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

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

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

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

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

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

做好以上 3 点,早晚成为大佬。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/885762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX