This week I was working again at Museum in a Box, coding various behind-the-scenes web things required to help their magical little boxes to function. That’s all the work on that project for now.
I’m usually hard on myself, but I am occasionally pleased to notice moments when it feels like I’ve got better at something, like getting things working in Django. A lot of this is down to familiarity over the years, I think, rather than being a better programmer. It got me thinking about the different kinds of improvement one can make in programming and I came up with this list of areas in which one can improve:
- General programming knowledge, independent of any language.
- Knowledge of the language you’re using.
- Familiarity with the particular frameworks, modules, packages, etc. that you use.
- Knowing how to search the web or books for what you need.
I’m not sure it’s quite right. That last almost sounds like a joke but I think there’s a difference between being entirely stuck at a problem and knowing how to find or ask for an answer and then learn from that.
Some people — I assume, Computer Science-trained programmers — will come to a particular task having started at number 1, more or less. It’s the foundation of all they do, enabling them to more easily branch off into using different languages, then frameworks etc. for different projects.
But someone who knows very little about development, and is attempting to fumble their way through from scratch, is going to start at number 4. I’m often amazed at the ambition of people who post questions on Stack Overflow or Reddit, making their first steps with Django (for example) having done no programming or web development before. I can hardly imagine that kind of cliff face. I was fortunate enough to start learning when there was less to know; there was a limit to how complex a website could be. These ambitious people are starting with point 4 and, if they stick with it, they may get the kind of familiarity 3 provides. And then, one day, maybe more of 2. Maybe even 1 if they get that interested. But I think big improvements at 1 and 2 require study — you can only improve at them a certain amount, a certain speed, through picking things up as you go along. I know my learning-on-the-job knowledge tends to start at the bottom and peter out somwhere during 2.
Anyway. I also think a large part of my feeling of occasionally getting better is being able to simply copy code I’ve written before. “I need to fetch a huge video file and save it to S3, then write tests for that? I can copy that code I used before that took a day to figure out first time round!”
But there are always new problems. This week I was having difficulty with sets of forms nested in other sets of forms, eventually finding a single blog post containing the solution. After confirming it all worked in practice, this weekend I answered my own Stack Overflow question and, going a bit over-the-top, I put the code into a Django project on GitHub, in case that helps anyone figure out how this works.
Back in the world… I saw Lady Bird this week and loved it. All the parts were pretty good but it somehow all came together to make a whole that’s much better than pretty good. A few bits of plot felt a little clichéd, which was a shame, but the characters of Lady Bird and her mother were great examples of infuriating but also likeable people with more than one dimension. Would see again.