Tips From a Self-Taught Dev

Over five years ago, working as an archivist as the University of Canterbury, my manager linked me to the coding-tutorial website codecademy with a vague comment of “you might like this”. I still remember the homepage – a sign-up form with an embedded terminal next to it and a message employing me to write my first line of code: print ‘hello world’. Quickly I typed those three words, hit enter, and watched the terminal dutifully spit out my message:

hello world

I was hooked.

In the months that followed it became increasingly clear to me that I wanted to make software my job. Whenever I worked with code – whether that making my way through a tutorial, building a little project, or hacking things my team used – I lost all awareness of time. Hours passed by like minutes, lunch breaks were missed, I found it hard to go home at the end of the day, sure that the solution to whatever problem I was working on was right around the corner. My job no longer felt like work. I loved what I was doing.

Over the next few years I managed to morph my archive job into a technical role but it wasn’t until 2017 that I was able to make the leap from an English grad with some technical skills to a real-life bona fide software engineer. Often I think about those times, about the things I wish I had known that would have speed up the process of becoming a dev. Overtime I have curated and polished this list into something resembling tips for self-taught developers. I hope that these will be useful for other people looking to make the same journey.

Use the same tools as devs

If you’ve spent anytime around developers you will know that we love talking about tools. Like a painter knows their paint brushes, and a chef knows their knives, so too does a developer know their code editor, version control software, and database manager. Understanding these tools and how to discuss things about them goes a long way in an interview.

Obviously if you are not a developer you might not know what tools developers even use so I will be more specific with my recommendations:

  • Learn how to use git to store code locally and remotely on a hosting service such as github or bitbucket

    For the most part, all you need to know to get started is how to add, commit, and push code to a repository. But if possible I would also recommend learning how to resolve merge conflicts (when two people edit the same line of code and a decision has to be made about what changes should be kept). If necessary, checkout your code in two different places and resolve conflicts you have deliberately created so you can see how the merge conflict works.

    When you are self-taught, Github is like a business card for you, since you don't have work experience to backup your skills. Store your best work on there and direct people to it. That way they can see that you can code.

  • Use a code editor such as VS Code with debugging, syntax highlighting, and git support. Better yet, try out a number of different editors and find which you prefer. Not only will it make writing code so much easier, it will also give you something to talk about in your interviews. For bonus points, try out vim and add some basic customisation

  • Learn how to use the terminal for basic tasks such as changing directory, searching for files, and renaming or moving files. As a developer, the terminal is one of your most powerful tools and at times the only access you may have to a machine. I highly recommend this website.

  • Play around with the developer settings and tools on your phone and web browser. Setup developer accounts on Facebook and Twitter and see what they will let you do. Part of being a developer is poking around. Don't worry if you don't get anywhere with it. It's about familiarising yourself with data and how it is structured, as well as the tools that are available to manipulate it.

The language you pick doesn't matter too much

A common question I get from people thinking about transitioning into software is “what language should I learn?”. C, JavaScript, Java, Python, Ruby - there are so many languages to choose from so I understand the question. It seems that if you pick the wrong one you might be relegated to one area of software development and miss-out working on something you really love.

While some languages do align well with different kinds of development (mobile developers tend to use Java and game designers often use C++) this doesn’t necessarily mean you need to learn this language to work in this area. Many places will happily take on a developer with experience in a different language from the one they use so long as they show a thirst to learn. You can also start by learning JavaScript and Python and move onto Java later when you are more confident. Most developers have fluency in a few languages and knowing a little of one can help you understand the limitations and benefits of another. What’s more, since most languages use similar building blocks and concepts, you knowledge of one language will almost certainly help you pick up your second.

My advice to new developers is always to pick a loosely-typed, syntax-light language like Python or Ruby first. From there, you could move into Java or C++ if you are interested in working in mobile or hardware/games. Of course, by all means jump into any other language that interests you. What’s important to realise is that languages are merely tools that engineers use - they do not define us. Being able to pick up and learn new languages and tools will make you much more successful as a dev than any specific language you know.

Get to know other devs

The best thing you can do as a self-taught dev is to get to know other devs working in the industry. They will not only provide you a looking glass into the world of the dev (what tools they use, what their day looks like, what kinds of businesses and products exist) but if you’re lucky they may mentor you, or in future, even give you a job.

When I was learning to code, I spent a lot of time on my own nutting out problems that could have been solved in minutes if I had asked an experienced dev. In some ways I’m glad for the resilience this gave me and the deep understanding of the tools, but I also feel I could have learned so much faster if I had been less afraid to ask for help.

Luckily one of my close friends lived with a developer who I would talk from time to time. He took an active interest in my learning and would often give me little tidbits of knowledge that helped me along the way. In particular our conversations helped me to build the language of a dev. I began to find help online more successfully since I now knew the terminology that other devs used. Eventually, he recruited me into the company he worked for and we worked alongside each other for years. Getting to know him was definitely the best thing that happened for my career.

If you don’t know any devs, then search for a meetup in your local area. There’s usually a number of groups in each city covering a range of different interests. People are always happy for new-comers, even if they have no experience in the subject. If you follow what interest you then you and bring passion and enthusiasm to what you do, then the people you meet will be more than happy to help you along the way.

Embrace the confusion

Learning a new language, framework, or tool is often extremely difficult and confusing and when you are doing it without support of a structured programme or teacher it can be hard to know whether you’ll ever understand. From my experience, what makes a person successful is the ability to sit in that feeling of confusion for as long as they need to figure things out.

I used to work with a woman who was incredibly smart. She easily had the ability to pick up the tools and languages that I had taught myself. But she was used to being the top of the class and every time she tried something new she expected to be good at it straight away. If she didn’t understand it she would become flustered, fearing - I think - that she would reveal an underlying secret that she was not good enough. We all know what that’s like, and I think self-taught devs are always going to deal with impostor syndrome from time to time.

But remember: this stuff is hard. It takes very intelligent people years to master it and many of those who seem like they can do it with ease have been learning since they were children. Feeling confused by something is not proof that you are stupid but that you are challenging yourself. And how do we get better at things? By never being afraid to take on our next challenge.

So embrace the confusion. Tell yourself that you are brave. Remind yourself of times when you found the things you now know difficult to understand. Because the confusion will never go. You will always be taking on new challenges if you want to work in software.

And there you have it, my four tips to becoming a self-taught dev. There will probably be more things I will think of in future but for now I think that these cover the basics pretty well. I wish you luck on your journey and hope that you will write a similar post for other self-taught devs one day.