为啥很多人觉得编程难学?

看到推特上网友菜脯写的一条推文:

菜脯:我大概知道,为啥很多人觉得编程难学了。
因为对我来说,编程过程就是 看资料——开始写——遇到问题——查资料——解决问题——继续写——继续遇问题——继续查资料........
这个循环似乎会一直持续下去,不像有些工作,难度会逐步收敛,要一直一直动脑子,太难了 😂
不知道是我菜,还是大佬们也会这样。

看起来你是在写程序,其实你做的是产品,那就不是简简单单的编程,无法像刷 Leetcode 那样,刷一刷就熟了,而是要面对软件工程中的各种问题。

所以你面临的问题一直在变,大部分时候你不是在解决代码的问题,是在解决类似于:

  • 我怎么把需求抽象成设计?
  • 我该选择哪个技术方案?怎么找到最佳实践?
  • 这个技术、框架我没用过,怎么快速用它实现我要的功能?
  • 这个 Bug 我该如何定位和修复?
  • 这个 Bug 是解决了,但是这段代码我怎么重构才能避免问题?

这里面其实最容易的反而是代码问题,要实现一个函数,搜索一下可能别人已经写好了,要解决一个 Bug,用错误信息搜索一下可能 StackOverflow 已经有人解决过。

难的是你怎么把这些代码放在一起能满足你的需求,还能运行的高效,还要好维护,这些事不是 ChatGPT 或者 AI 短时间能替代的了的,需要很多年的积累。

其实也没啥捷径,只能是投入时间去不断地学习优秀的代码,不断地实践,比如实现功能,重构代码。

所以有人说三年才能成为一个领域的专家,说的没错,但是对于软件开发领域,有无数小的领域,就拿前端来说,也许三年你能成为 JavaScript 专家,但是你还要学会 CSS、HTML,还要会打包工具,还要 React 或者 Vue,还要状态管理。

除了这些基础的知识,再往上还要涉及系统设计、面向对象、设计模式这些。如果有团队了,还要学习一些项目管理和团队管理的知识,就算天纵奇才,并行学,三五年可能也是过于乐观的。这也是为啥上次 Grey Brockman 说学习 ML 比学软件开发快多了!

要想提升一点学习速度,也不是没有办法,我的经验就是尽可能早的构建自己的知识树,把某一个领域当成自己知识树的主干,主干不断长大长粗,并且在其他知识领域添枝加叶。

因为当你有了一棵自己的知识树,那么你就能有一个地图,知道该往哪发展,该补哪部分知识,会更有目标;另外当你有一个粗的主干,那么你可以借用主干的知识来学习枝干的知识,效率会高很多!

如果没有主干,就像有些人懂很多领域知识,但又只懂点皮毛,什么都不精,那样不是知识树,而是知识的灌木。

当你的知识树逐步成型,这样才能真正做到难度逐步收敛。