Continuing your learning as a post-beginner programmer (part 2)

Read part one here

Read part three here

In part one of this series, I talked about a few different things you can do to continue your learning as a post-beginner programmer. In this part, I’ll be talking about a few more strategies to help your learning, and what to do when you’re stuck.

What should I build?

In part one, I suggested picking a standard app to build every time you learn something new, or creating a project to iterate on when you learn new things. If that’s not your cup of tea, I have a few more suggestions for you.

Make Art!

A year ago, I despised javascript. At Dev Academy, where I was building my programming skills, we had a week known as ‘Javascript Week’. It was five weeks into an intense course, most of which had been Ruby-based. On day two of Javascript Week, I spent most of the day crying. I hated looking at Javascript — it was ugly and indecipherable. There were too many parentheses and semi-colons. I hated writing it. I struggled to complete basic tasks. I felt like a complete idiot.

Luckily, I had a great teacher who started teaching us Javascript by making art. One lunch time, inspired, I created Rainbows (obviously it was optimised for my 13-inch macbook screen, don’t judge me 😉 ). It was the first time I has written javascript without hating everything about it. I also learned a lot about event handling in the process.

So, if you’re struggling, try doing something creative! It doesn’t have to be complex — it can just be pretty, or weird. You could even try making the ugliest thing you can think of. Anything to get you programming! And for the record, I love javascript now.

Make something you need!

A while ago, I was going through some mental health issues, so was journalling every day as a way to organise my thoughts. I was using The Internet Typewriter, which was great…except for one thing. While it allows you to use markdown syntax, it doesn’t actually render the markdown right there inline for you.

So, I decided to clone the Internet Typewriter, except that my version would render markdown inline. I used that project as a tool to improve my Node.js skills, my React skills, and to solidify my understanding of Redux. Plus I made a tool that I actually use! Bonus!

Try making something that you want to use, even if it already exists. Perhaps you want an app to track your guitar-playing progress, or an app to plan your family’s meals for the week. Make it, learn, and use it!

What to do when it all turns to 💩

You know the feeling — you’re bashing your head against the wall, everything is terrible, you don’t understand the error message, and you’re sure that you’ve done everything right, it’s just not working.

First, take a break. Go and eat some food and go for a walk. Full disclosure, I am terrible at recognising when I need to do this, but it always works well if I do. If I keep bashing my head against the wall and getting nowhere, the shame spiral starts. I’m sure this will be familiar to some of you:

Oh my god I suck. I am a terrible developer. Why can’t I get this to work? I don’t even understand what’s gone wrong. Why do they pay me to do this? I should go back to being an English teacher, I’m clearly not meant for this.

If you can, try to stop these thoughts in their tracks. It’s unproductive, demotivating, and certainly not good for your self-esteem. In my experience, taking a break to eat, drink some water, walk, blob in front of Gilmore Girls, or play with the cats, almost always works. I come back to my problem refreshed, and often fix it fairly soon.

If you’re still stuck, ask for help. Ask your programmer friends. Ask people at a local meetup. Ask programmers on Slack, or Reddit, or StackOverflow. Be considerate — do your best to describe your bug, and the steps you’ve taken to solve it. Or, if you have a question about, say, architecture, be as specific as you can. Not just “How do you structure a messaging app?”, but “I want to create a messaging app with features A, B, and C. Do you think that it would be best to organise my code like This, or like That?” Be considerate of whomever you’re asking for help, and don’t forget to thank them!

In part 3, I’ll be offering some ideas on what to do when you read an answer on StackOverflow and understand almost none of it (ugh), and how to reflect on your progress. If you missed part one, here it is again.

Why are we still saving gifs like cavepeople?

It’s 2015 and my world is dominated by the web. I spend most of my work day creating the web (sounds more impressive than it is), and a significant chunk of spare time consuming the web. I’m a complete nerd about web tools (ask me about Pocket, Trello, Evernote, and Ermagerhd Sterff). Yet, whenever I come across an amusing gif, I right-click and save it to a folder on my hard drive named ‘Gifs’ — like some sort of cavewoman. So does everyone else I know.

There’s got to be a better way!

So I’m working on Gifery. Gifery is a Rails app and Chrome extension (Firefox support planned for when I can be bothered) that will allow users to save and tag gifs to their personal gif library.

Through the Chrome extension, users will be able to search through their gif library and automatically insert their chosen gif into their Facebook status, Reddit post, etc.

It’s basically Pocket for gifs.

Now, to be quite honest, if there’s something similar out there, I don’t want to know about it. Okay, there is something similar out there (in fact, it’s identical to what I want to do. Fuck). But that’s beside the point.

Building Gifery is mainly a learning exercise for me. It’s not that long ago that I had no idea what an API was. This year I’ve learned to build simple APIs, create Rails apps, and make very simple Chrome extensions, but I’m not extremely confident in my abilities, and I want try out different ways of doing things, new design patterns, and get stuck into API authentication. I’d also like to build a more complex Chrome extension and (obviously) improve my javascript in the process.

Where is Gifery at the moment? Well, it kinda-sorta works. I can browse the web, right-click any Gif, and save it to my library. But…I’m yet to implement tagging, and frankly I’m avoiding the whole authentication thing until I can dedicate a few good hours to it. I’d also like to create some views for the Chrome extension (similar to Evernote’s web clipper) that will allow full access to Gifery without leaving the tab you’re on.

The greater challenge here really isn’t the code — it’s all basic, bread-and-butter sort of stuff that I’m writing. The challenge is motivating myself to work on a personal project outside of work, figuring out what to work on next, and exploring ideas.

The even greater challenge is overcoming my own insecurities and putting my code, and my ideas out there in the world. You’ll often hear me refer to Gifery as ‘a silly project’. I’ll call my code ‘crap’, and I’ll emphatically tell you that it’s nothing that people haven’t done before. I should probably stop doing all of those things. Whenever I feel like that, I should probably refer back to the immense wisdom of Ira Glass:

 

All of us who do creative work, we get into it because we have good taste. But it’s like there is this gap. For the first couple years that you’re making stuff, what you’re making isn’t so good. It’s not that great. It’s trying to be good, it has ambition to be good, but it’s not that good.

But your taste, the thing that got you into the game, is still killer. And your taste is good enough that you can tell that what you’re making is kind of a disappointment to you. A lot of people never get past that phase. They quit.

 

All of those insecurities, ultimately, don’t matter. The point is, I’m working on something, and it kinda works. I’m learning, which is the best feeling in the world. And the stuff that I’m learning is making me better at my job, a better developer, and a more productive person all round.