前言
大家好,我是程序员洋洋。
一个正在努力成长的大二女程序员。
最近这段时间,我一直在系统学习 Java,也在持续整理自己的学习笔记。
学数组、学方法、学面向对象、敲代码、记笔记……
每天好像都在接触新的知识。
但是学了一段时间以后,我慢慢发现了一件事情:
对于刚开始学编程的人来说,最难的可能并不是“代码看不懂”,而是如何真正把学过的东西变成自己的能力。
尤其是作为一个计算机专业的大二学生,有时候会觉得自己学了不少东西,但真正坐到电脑前准备独立写代码的时候,还是会突然卡住。
所以今天这篇不写 Java 具体知识点。
想记录一下我最近学习编程的一些真实感受,也算是对自己目前学习状态的一次阶段性复盘。
一、看懂代码,不代表自己会写代码
这是我最近特别明显的一个感受。
平时看老师讲代码的时候,经常会出现一种感觉:
“这个我懂。”
比如看到一段 Java 代码:
public class Test {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
}
看到这段代码的时候,基本都能理解:
定义一个变量 sum,然后使用 for 循环,把 1 到 100 累加起来。
看起来确实不难。
但是如果把代码关掉,只给自己一个题目:
使用 Java 求 1 到 100 的和。
有时候反而会停顿几秒。
应该定义什么变量?
循环怎么写?
循环条件是什么?
什么时候累加?
这些问题明明刚才看的时候都懂,但是自己真正开始写的时候,大脑却需要重新组织一遍。
后来我发现:
“看懂代码”和“独立写代码”其实是两个完全不同的阶段。
前者更多是在理解别人已经整理好的思路。
后者则要求自己从零开始分析问题、拆解逻辑,再把逻辑转换成代码。
而真正的编程能力,显然更接近后者。
二、学编程最容易出现的错觉:我好像已经会了
刚开始学习 Java 的时候,我经常会有一种错觉。
比如今天学了:
-
if 判断
-
for 循环
-
数组
-
方法
-
面向对象
听课的时候觉得都能听懂。
笔记也记了很多。
于是很容易产生一种感觉:
今天学会了很多东西。
但过几天再回头看,就可能会发现:
“这个语法怎么写来着?”
“数组初始化有哪几种方式?”
“方法参数到底怎么传?”
这其实很正常。
因为学习编程并不是:
看一遍 → 记住 → 永远会
更接近:
第一次理解 → 第一次遗忘 → 再复习 → 再实践 → 再理解
很多知识并不是第一次看到就真正掌握了。
而是在不断使用的过程中,慢慢形成记忆。
所以现在我也开始调整自己的学习方式。
不再单纯追求:
“今天学了多少章节。”
而是更关注:
“今天真正掌握了几个知识点。”
三、真正难的是把知识点连接起来
单独学习 Java 基础知识的时候,每一个知识点其实都不算特别复杂。
比如:
变量负责保存数据。
if 负责条件判断。
for 负责循环。
数组负责保存多个数据。
方法负责封装一段功能。
类和对象负责描述现实世界中的事物。
但是当这些知识点放在一起的时候,难度马上就会上升。
例如:
编写一个学生成绩管理程序。
看到这个需求以后,就可能需要思考:
学生信息使用什么保存?
成绩使用数组还是对象?
怎么录入数据?
怎么遍历?
怎么计算平均分?
怎么判断最高分?
哪些代码应该封装成方法?
如果以后学习了集合,又应该怎么修改?
这个时候你会发现:
真正的编程,并不是单独知道每一个语法。
而是要知道:
什么时候应该使用哪个知识点。
这也是我现在觉得自己最需要提升的地方。
四、计算机专业学生很容易陷入“什么都想学”
还有一个很真实的问题。
就是计算机专业能学的东西真的太多了。
随便刷一下学习路线,就能看到:
Java
Python
C++
数据结构与算法
MySQL
Linux
计算机网络
操作系统
Spring
Spring Boot
Redis
Docker
前端
Git
GitHub
AI
……
刚开始的时候,很容易产生焦虑。
看到别人学 Python:
“我要不要学 Python?”
看到别人做前端项目:
“我要不要顺便学一下 Vue?”
看到别人刷算法:
“我是不是应该马上刷 LeetCode?”
看到别人已经在学 Spring Boot:
“我 Java 基础是不是学得太慢了?”
最后的结果很可能就是:
每一个都看了一点。
但每一个都没有真正学扎实。
所以我最近给自己的原则是:
先走完一条主线,再慢慢扩展。
现阶段我的主线还是 Java。
先把 Java 基础真正学明白。
然后逐渐学习:
Java 基础 → 面向对象 → 集合 → MySQL → JDBC → Java Web → Spring → Spring Boot
其他内容可以了解,但是暂时不让它们打乱自己的主线。
我觉得对于刚开始学习编程的人来说:
知道自己暂时不学什么,有时候和知道自己要学什么一样重要。
五、写学习笔记,其实是在逼自己重新理解一遍
我开始写《程序员洋洋的 Java 学习笔记》之后,也慢慢发现了一件事情。
如果只是自己听课,有时候会觉得:
“差不多懂了。”
但是当我真正准备写成一篇文章的时候,就会遇到很多问题:
这个概念到底应该怎么解释?
为什么要这样写?
初学者哪里最容易理解错?
这个例子能不能再简单一点?
有没有什么常见错误?
这个时候才会发现:
有些知识其实只是“听懂了”。
并没有真正理解。
为了把它写出来,我必须重新去整理。
有时候甚至需要重新写一次代码。
所以现在我越来越觉得:
输出,其实是一种非常好的学习方式。
因为当你试图向别人解释一个知识点的时候,你也在逼自己把这个知识点重新梳理一遍。
这也是我为什么想继续更新学习笔记。
一方面是方便以后自己复习。
另一方面也是记录自己从一个计算机专业学生,慢慢成长为程序员的过程。
六、现在的我,不再追求“学得快”
刚开始学习编程的时候,我会比较关注进度。
今天别人学到哪里了。
别人已经开始做项目了吗。
别人是不是已经学 Spring Boot 了。
后来慢慢发现:
每个人开始学习的时间不同。
每天能投入的时间不同。
理解速度也不同。
如果一直和别人比较学习进度,很容易让自己陷入焦虑。
所以现在我更关注一件事情:
今天的自己有没有比昨天多理解一点。
哪怕今天只真正搞懂了一个知识点。
只独立写出了一道题。
只解决了一个之前不会的 Bug。
只写了一篇学习笔记。
其实都是在进步。
编程学习不是短跑。
它更像是一个不断积累的过程。
七、我现在给自己的学习方法
经过最近这一段时间的学习,我目前比较认可的学习方式是:
1. 先理解知识点
第一次接触一个知识点的时候,不要求马上全部记住。
先理解:
它是什么。
为什么会出现。
解决什么问题。
2. 自己敲一遍代码
尽量不要只看老师写。
看懂之后,把代码关掉。
自己重新写一次。
如果写不出来,就说明还没有真正掌握。
3. 做几个简单练习
不需要一开始就挑战特别复杂的项目。
先使用当前知识点解决一些小问题。
例如学完循环,可以写:
// 输出 1~100
// 求 1~100 的和
// 输出偶数
// 打印九九乘法表
目的不是刷题数量。
而是熟悉知识点。
4. 写学习笔记
把今天学到的内容重新用自己的语言整理一遍。
如果某个地方完全不知道怎么解释,就回去重新学习。
5. 定期复习
编程知识忘记很正常。
真正危险的不是忘记。
而是忘记之后从来没有再复习。
所以以后我也准备定期回顾之前写过的 Java 学习笔记。
看看以前掌握得不牢的地方。
八、作为一个大二计算机学生,我还有很长的路要走
现在的我还只是一个正在学习中的大二学生。
Java 也还在继续学习。
项目经验不算丰富。
算法能力也需要继续提高。
计算机基础还有很多内容没有真正学透。
但相比刚开始的时候,我现在至少开始越来越清楚:
编程学习真正重要的不是收藏多少教程。
也不是一天看多少小时视频。
而是:
理解。
实践。
复习。
输出。
然后继续坚持。
我现在越来越相信一件事情:
程序员不是某一天突然“学成”的。
而是在一次次敲代码、报错、调 Bug、学习新知识的过程中,慢慢成长出来的。
总结
今天这篇没有写具体的 Java 技术知识。
只是想记录一下自己现阶段学习编程的一些真实感受。
目前我最大的几个体会是:
看懂代码不等于会写代码。
学过不等于真正掌握。
编程真正难的是知识点之间的组合。
初学阶段不要同时铺太多学习路线。
输出学习笔记,本身也是学习过程。
不用过度和别人比较学习进度。
持续学习,比短期冲刺更重要。
作为一个大二女程序员,我现在还在成长的路上。
后面我也会继续更新自己的 Java 学习笔记、编程学习记录以及计算机专业成长经历。
如果你也是计算机专业学生,或者刚开始学习 Java,希望我们都可以慢一点,但不要停下来。
我是程序员洋洋。
一个正在努力成长的大二女程序员。
继续学习。
继续敲代码。
也继续记录自己的程序员成长路线。



