I received an interesting question from a reader recently. He wanted to know how you can tell if you’re making progress as a programmer.
It’s a great question, and it’s a tough one to answer. Improvement at a skill like programming is hard to quantify, as this reader rightly acknowledged. Problems can take hours, days, and even weeks to solve. Building an application can also be a lengthy process. Technologies take time to learn.
这是一个很好的问题，也是一个很难回答的问题。 正如该读者正确地认识到的那样，编程等技能的提高很难量化。 解决问题可能需要数小时，数天甚至数周的时间。 构建应用程序也可能是一个漫长的过程。 技术需要时间来学习。
Measuring your programming process is different than trying to become a faster runner. The time it takes you to run a lap around the track is either decreasing or it’s not. Measuring your progress as a programmer is less clear-cut. But it’s not impossible.
衡量编程过程与尝试成为更快的跑步者不同。 您在赛道上跑一圈所花费的时间正在减少，或者没有减少。 衡量您作为程序员的进度不太明确。 但这并非不可能。
If you want to see whether you’re getting better then read on. Here are a few tactics to try.
每日追踪 (Daily Tracking)
I rely on daily and longer-term tactics to gauge my progress. Let’s start with daily tracking.
Monitoring your progress each day helps to ensure that the work is getting done and focuses your attention on the small improvements, which add up over time. Here are two approaches to try.
有一个编程目标 (Have a Programming Objective)
Have an objective each time you sit down to program. Here are some examples:
- Add CSS to the index page. 将CSS添加到索引页面。
- Fix the bug in “x” program. 修复“ x”程序中的错误。
- Write “y” number of tests and get them to pass. 写下“ y”个测试，然后通过。
An objective is concrete and specific. It’s a particular outcome you want. The best way to find your objective is to work backwards and ask yourself this question: what do I want done two hours from now?
目标是具体而具体的。 这是您想要的特定结果。 找到目标的最好方法是倒退，问自己一个问题：从现在起两个小时后我想做什么？
This specific target will focus your time and attention. So two hours later you’ll feel like you really accomplished something. Even if you miss the mark, it’s likely you still made progress toward your goal.
这个特定的目标将集中您的时间和精力。 所以两个小时后，您会觉得自己真的完成了一些事情。 即使您错过了成绩，也有可能朝着目标前进。
使用编程日记 (Use a Programming Journal)
Each evening before bed I pull out my programming training journal and jot down a few notes about my programming work from the day.
I’ve written previously about keeping a programming journal. Since then, I’ve added something to it. Now I note my “stats” from the day before I start writing. My stats are the core buckets I track — programming, writing, reading, math, and exercise — and how much time I spent on each bucket.
The idea stems from a similar practice that author Jim Collins uses: he keeps a spreadsheet to track the number of creative hours he logs each day. He admits that the habit was inspired by his mentor Peter Drucker, who championed: “what gets measured gets managed.”
这个想法源于作者Jim Collins使用的类似做法：他保留一个电子表格以跟踪他每天记录的创意小时数。 他承认这种习惯是由他的导师彼得·德鲁克(Peter Drucker)启发的，他倡导：“可以衡量的东西可以得到管理。”
Likewise, my stats are a concrete reminder of where I spend my time. They not only hold me accountable, but they also ensure that my time is spent on the right things.
Once my “stats” are out of the way, I write about my programming work from the day. What went well. Where I got stuck. What I learned. What I want to learn. It’s an informal process. But there’s an important question I like to ask myself.
一旦我的“统计数据”消失了，我就开始写我的编程工作。 一切顺利。 我被困在那里。 我学到的是。 我想学什么。 这是一个非正式的过程。 但是我有一个重要的问题要问自己。
The question is: “Am I better now than I was this morning?”
Then, I write a few words to answer it.
I’ll note if a concept that I’ve been struggling with finally makes sense, for example. Or a bug that I fixed. These are small wins, to be sure. But they matter — a lot.
我会指出，例如，我一直在努力的一个概念最终是否有意义。 还是我修复的错误。 可以肯定，这些都是小小的胜利。 但是它们很重要-很多。
Building a skill is a marathon, not a sprint. Taking a few minutes to reflect on your programming work will remind you of positive things you’re doing each day, no matter how big or small. It’s a reminder that you are making progress. These small wins add up over time and propel you forward.
培养技能是一场马拉松，而不是短跑。 花几分钟的时间来思考您的编程工作，无论大小，都会使您想起每天所做的积极工作。 这提醒您您正在进步。 这些小小的胜利随着时间的流逝加在一起，并推动您前进。
长期追踪 (Longer-Term Tracking)
To see the fruits of those accumulated small wins you’ve been chronicling, there are two approaches to try.
每周现场演练 (The Weekly Spot Drill)
The “ weekly spot drill “ is one the best ways to gauge your longer-term progress. Not only will this learning tactic help keep your skills sharp.
“ 每周一次的演习 ”是评估您的长期进度的最佳方法之一。 这种学习策略不仅可以帮助您保持技巧的精明。
But it’ll also help you see the progress you’re making over the long-term. I briefly point this out in my article on the topic, but it’s worth exploring more deeply here. The weekly spot drill is a fantastic way to see whether or not you’re making progress.
但这也可以帮助您了解长期的进展。 我在有关该主题的文章中简要指出了这一点，但值得在此进行更深入的探讨。 每周一次的现场演练是查看您是否正在取得进步的绝佳方法。
Each week I do two spot drills: one for web development and one for problem-solving. For web development, I pick a technology or topic that I’ve already learned about, and work on a project related to it. The technology or topic I choose is one that I haven’t touched in a while.
每周我都会进行两次现场练习：一次用于Web开发，一次用于解决问题。 对于Web开发，我选择一个已经了解的技术或主题，并从事与之相关的项目。 我选择的技术或主题是我一段时间没有接触过的技术或主题。
This process certainly helps solidify my knowledge. But it’s also a clear indication of whether or not I’m making progress: if I find the project or problem a bit easier, then I’m making progress.
The first few times I implemented the weekly spot drill on CSS, for example, I struggled — a lot. I had more work to do, and progress was very slow. But over time things began to change.
例如，最初的几次我在CSS上执行每周一次的现场演练，我挣扎了很多。 我还有很多工作要做，进度很慢。 但是随着时间的流逝，事情开始发生变化。
Eventually, I intuitively knew what to do and what to reach for. I got stuck less frequently, and when I did get stuck I could get myself unstuck a bit quicker. Overall, the process got smoother. I was making progress.
最终，我凭直觉知道该做什么和可以达到什么。 我被卡住的频率降低了，当我被卡住时，我可以更快地将自己解开。 总体而言，该过程变得更加顺利。 我正在进步。
回收编程问题 (Recycle a Programming Problem)
Recycling programming problems is another great way to see your improvement over time.
Here’s how it works. Solve a problem today and try re-solving it three or four months from now. Let plenty of time pass to completely forget the problem and its solution. You know if you’re improving when something that’s hard right now becomes a bit easier several months from now.
运作方式如下。 立即解决问题，然后尝试从现在开始的三四个月重新解决。 请花费大量时间完全忘记问题及其解决方案。 您知道您是否正在改进，现在困难的事情会在几个月后变得容易一些。
Earlier today, I pulled up a problem I solved earlier this year and re-solved it. Afterwards, I compared the solutions. My original program was lengthy. The code was complex. I remember feeling really stuck when I wrote it.
今天早些时候，我提出了一个今年早些时候解决的问题，然后重新解决了。 之后，我比较了解决方案。 我原来的程序很长。 代码很复杂。 我记得当我写的时候感觉真的被卡住了。
But a lot has changed. This time I knew what to do nearly immediately and intuitively. My variable names were meaningful. My code was shorter and clearer.
但是发生了很多变化。 这次，我几乎立即且直观地知道该怎么办。 我的变量名很有意义。 我的代码更短，更清晰。
I have more tools in my programming toolbelt now than I did earlier this year. The better approaches coupled with better writing and designing resulted in a much better program. They were also signs of improvement.
与今年早些时候相比，现在我的编程工具带中的工具更多。 更好的方法以及更好的编写和设计导致了更好的程序。 它们也是进步的迹象。
Can I do better even still? Most definitely.
So I’ll circle back again in a few more months to see if I can re-solve this same problem with a better approach and a better-designed program.
看到劳动成果 (See the Fruits of Your Labor)
We need ways to measure our progress. That’s the key point. Monitoring programming progress is more like an art than a science. Have a system in place to gauge what you’re doing, to guide your efforts, and ultimately get you where you want to go.
我们需要一些方法来衡量我们的进度。 这就是关键。 监视编程进度更像是一门艺术，而不是一门科学。 拥有一个系统来评估您的工作，指导您的工作并最终使您到达想要去的地方。