A reader of Mastering Software Technique emailed me to ask:
You mentioned it’s important to find a source of feedback while learning. I am just starting out with programming, so any suggestions on where to get such feedback would be great.
It’s a great question! Here’s what I told him, plus a little expansion and punctuation.
As far as sources of feedback, the first thing I’d do is think about what you want to get better at, because that’s going to affect your sources of feedback a lot. You don’t have to stick with the same thing forever. But knowing what you’re doing right now is important, even if it changes over time.
Just starting out, I’d begin by trying for simple functionality: just get a thing working, and then build on it.
A lot of more abstract technique is going to be harder until you’ve made a lot of basic mistakes and have a feel for what they are and what they look like. But if you build a thing and you use it (e.g. build your own blog, or some kind of JS-based browser tool, or a chatbot) then you’re going to get some experience with mistakes in building and designing your software.
Even just that much can take you a long way.
But it also depends a lot what you’re trying to do. Do you want to build useful software? Or impress other programmers? Or get a high-paying job? These are similar but different goals, and suggest similar but different exercises. The 40-Year Programmer is very focused on the-work-is-the-point, like being an artist. If that’s your goal, it’s a forgiving one. The order of work isn’t very important, but keep working. The style of work isn’t important, just keep working. And so on.
That isn’t to say that has to be your goal. But it’s one possible goal.
Once you have some basic competence, it gets easier to learn the way artists do: by comparing your work to others, and stealing shamelessly from the ones you like most :-)
I have two projects in mind that I would like to build, one is a personal blog as you mentioned. However, I would like to incorporate a markdown editor embedded within it where I can write drafts and see previews. I know this might be “re-inventing the wheel” but there is a certain outcome and I am looking to achieve. The other one is a developer job board for Middle East, where I currently reside.
Reinventing the wheel is fine. Really good, in fact, as a rule.
My book Rebuilding Rails prides itself on reinventing the wheel ;-)
An embedded editor is a huge task… But even doing a little bit will teach you something useful. And having a big project that will take you a long time is not a bad thing.
And even a simple one will teach you a lot by using it and improving it.
The developer job board is a fine task. Just keep in mind that it leads into a lot of non-software work to support it, if you’re serious about it. You’ll need to decide if that’s how you want to spend your time. But that, too, will teach you a lot of interesting things if you run with it.
The embedded editor will be a larger and more complex software task. The job board is a larger social task. So: much like Yo Yo Ma and classical-vs-popular, you’re picking skills to focus on. And as with him, both choices will teach you something good.
Early on in your career, I often recommend choosing by motivation — which one do you think you, specifically, will be more motivated by? That’s part of what makes it easy to keep doing the work. And the big stumbling block for most developers is “I stopped doing the work.”
But yes, both of those sound like great tasks.
So if you’re not sure, pick one however you like. Neither sounds bad.
Tackling both at the same time wouldn’t be such a good idea, would it?
Nope. Those are both huge projects.
At least, if you do them right :-)
You are FAR better off picking a project that is “too small” than too big. A small project is one you can do excellently, declare success and move on. But as a developer, you will be looking at projects that are far too big. You should be trying to pick things to do that feel insultingly small and simple — and you still won’t always finish them.
Ironically I am reading a book called Finish what you start at the moment, so your advice is spot on!
Also, keep a portfolio. Take screenshots and things while you do whichever project you pick.