最开始的样子
如果要回头说说我是怎么走到今天这一步的,我想答案并不复杂:我最开始是从 C++ 开始的。
那时候的我,对编程的理解其实很朴素。最吸引我的,不是某个看起来很厉害的框架,也不是一套多么复杂的工程化方案,而是“代码真的能把想法变成结果”这件事。按下运行键之后,屏幕上出现的输出、程序跑通时的成就感、调试过程中一点点把问题找出来的过程,都让我第一次感受到,计算机科学不是只停留在书本里的知识,它是可以被验证、被实现、被反复推翻和修正的。
从 C++ 开始:先把基础打实
我选择 C++,一方面是因为它足够贴近底层,另一方面也是因为它对基础能力的要求很高。变量、指针、引用、内存管理、类与对象、模板、STL,这些内容刚开始学的时候并不轻松,甚至可以说有些“硬”。但也正是这种硬,让我在最初阶段就建立起了一种很重要的意识:程序不是背出来的,而是理解出来的。
在学 C++ 的过程中,我慢慢明白了几件事。
第一,语法只是入口,真正重要的是数据是怎么流动的,程序是怎么执行的,内存是怎么变化的。很多问题表面上是“语法不会”,本质上其实是没有搞清楚底层逻辑。
第二,写代码不能只追求“能跑”,还要追求“为什么能跑”。比如同样是一段循环、一个容器、一次对象拷贝,背后可能涉及复杂度、资源管理和设计取舍。只要开始习惯追问这些问题,学习就不再是机械记忆,而是不断建立知识之间的联系。
第三,C++ 训练了我面对问题时的耐心。一个小错误,可能是类型不匹配,可能是边界条件没处理好,也可能是对对象生命周期理解不够。很多次调试下来,我逐渐接受了一个现实:真正的能力,不是一次写对,而是能在出错之后快速定位、修正、总结。
学算法:把“会写”变成“会想”
在 C++ 之后,我开始系统地接触算法。对我来说,算法学习并不是为了单纯刷题,而是为了训练自己的思维方式。因为写项目和做题看起来不同,但底层都绕不开几个核心问题:怎么组织数据,怎么减少重复工作,怎么在有限资源下得到更好的结果。
刚开始学算法的时候,最明显的感受就是“思路比代码更难”。有些题目不是不会实现,而是不知道从哪里下手。后来我慢慢意识到,算法题真正训练的是拆解问题的能力:
- 先把问题抽象出来,弄清楚输入、输出和限制条件。
- 再观察数据规模,判断是暴力、递归、搜索、贪心、动态规划,还是图论、字符串、二分这些方向。
- 最后才是落到代码实现,并且在实现过程中不断验证边界情况。
算法学习给我带来的最大变化,不是做出了多少题,而是我开始更敏感地看待“复杂度”和“结构”。以前我写代码更多是在想“怎么做出来”,后来会自然多想一步:“这个方案是不是最稳妥?有没有更清晰的表达方式?如果数据量变大,性能会不会掉得很厉害?”
这段经历也让我明白,算法并不是项目开发之外的一块独立知识,它其实是在帮我建立更好的工程直觉。一个人如果理解了常见的数据结构和经典算法,就更容易在项目里做出合理的设计判断,比如什么时候该用哈希,什么时候该排序,什么时候该分治,什么时候该把逻辑拆成多层处理。
转向 Java:从“个人能力”走向“项目能力”
在打了一段时间基础之后,我开始学习 Java,并且真正把重点放到做项目上。和 C++、算法阶段相比,Java 带给我的感受很不一样。前者更像是在锻炼“基本功”,后者则更像是在训练“工程能力”。
如果说 C++ 让我理解了程序怎么运行,算法让我学会了怎么思考,那 Java 项目则让我开始理解一套完整系统应该怎么搭起来。
在做 Java 项目的时候,我开始接触更多以前不会主动关注的东西,比如:
- 分层设计,知道 Controller、Service、DAO 之间该怎么配合。
- 接口和实现的拆分,理解为什么业务代码不能全部堆在一起。
- 异常处理和日志记录,明白系统不是只要“跑通”就够了,还要能排查问题。
- 数据库交互、事务控制、参数校验这些实际开发中绕不开的细节。
- 后端接口的设计规范,知道什么是清晰、稳定、可维护的接口。
这些内容一开始看起来很琐碎,但真正做起来以后,我才发现它们构成了软件开发里最重要的部分。项目不是把功能一项项拼出来就结束了,而是要考虑可维护性、可扩展性、代码复用、边界清晰和后续迭代成本。
我也在这个阶段意识到,项目开发和刷题最大的不同,在于它更接近真实世界的问题。真实项目里没有标准答案,更多时候是在约束中做取舍:功能要尽快上线,代码要便于维护,性能不能太差,团队协作还要顺畅。这样的训练让我慢慢从“会写代码的人”转向“能参与解决实际问题的人”。
我真正打下的,不只是技术
回头看,我觉得这条路线最重要的收获,其实不只是掌握了 C++、算法和 Java,而是建立了一种更稳的学习方式。
我开始明白,基础不是一种抽象的口号,而是遇到新东西时的底气。很多人会急着追框架、追热点、追看起来更高级的技术,但如果底层能力没有打牢,学得越快,遗忘得也越快。相反,当你真的对数据结构、程序逻辑、工程组织这些东西有了感觉,再去接触新技术时,会明显轻松很多。
我也慢慢形成了自己的学习习惯:
- 先理解原理,再追求熟练。
- 先做小闭环,再扩展复杂度。
- 先把问题吃透,再去优化表达。
- 遇到错误不逃避,而是把它当作理解系统的一次机会。
这些习惯看起来不算特别“炫”,但对我来说,它们真的决定了我后面能走多远。
最开始的样子,就是现在的底色
很多时候,人们会问“你是怎么开始的”。但对我来说,这个问题的答案并不是某一个瞬间,而是一段很长的积累:从 C++ 里摸索出对程序运行的理解,从算法里训练出对问题的抽象能力,再到 Java 项目里把这些能力真正用到工程实践中。
所以如果要给“最开始的样子”下一个定义,我想那就是:不急着证明自己多强,先把基础一点点扎实;不急着跳过难点,先把每一步走稳。
而我现在之所以还愿意继续往前走,也正是因为我知道,今天的我,是从那个最开始认真学 C++、认真琢磨算法、认真做 Java 项目的自己,一点点走过来的。
这就是我的开始。很朴素,但很重要。