Where Self-taught Developers Miss The Mark

Things Self-taught Developers Must Learn To Be Taken Seriously

TECH NEWBIESTECHNICAL LEARNINGBECOMING A SWE

1/15/20243 min read

where self taught developers miss the mark
where self taught developers miss the mark

One of the main reasons people avoid the self-taught developer route, and a key reason why hiring managers will steer away from self-taught developers, is due to this perceived notion that they have bigger knowledge gaps compared to those with a Computer Science (CS) degree.

Whilst I personally think that the knowledge gap is exaggerated, it can be easier to overlook fundamentals as a self-taught dev. A lot of coding courses and boot camps will solely teach 'shiny', popular programming languages but overlook the less glamourous nitty-gritty of computer science and engineering.

Knowing lots of programming languages is great, but what makes a developer great is their core computational knowledge and algorithmic thinking.

So...what fundamentals should I learn?

Jargon

When I was first interviewing for tech jobs, I got asked 'What is object-orientated programming'. I knew what it was, I could code a Python application using it. I knew the properties of OOP, but I couldn't verbalise it. Safe to say I did not get the job (which was probably a good thing as the company wasn't a good fit for me anyways), but it did highlight the need to have the appropriate language to articulate technical concepts. So I decided to spend less time typing on my keyboard coding these concepts, and instead, practised reading about them and regurgitating what I had learnt.

Algorithmic thinking

Many CS degrees will include some sort of calculus module (i'm guessing that this is where the myth that you need maths for SWE comes from). Whilst math is not a necessity, being able to break down a large problem into a smaller one and solve it algorithmically can be exercised by solving math problems. Many self-taught developers focus on building rather than solving. This can easily be overcome by regularly studying common algorithms (sorting, searching) and completing hacker rank / leetcode-like questions regularly.

Big-O Notation

Big-O notation describes the performance and complexity of an algorithm in terms of the worst-case scenario. Knowledge of this is the reason why you don't have to wait 10 minutes for a web page to load each time (well...hopefully). You need to understand the implications of a certain complexity and how to enhance the performance of an application based on this.

Data structures

Chances are, in your day-to-day job, you won't be asked to reverse a linked list or traverse through a binary tree. However, why is it important to know these data structures and how to work with them? A big part of programming is taking data from one place to another. To do this, you need to identify the most efficient and productive way to do so. Choosing a suitable data structure, or even being able to appreciate how an existing data structure holding existing data in your application behaves, will enable you to process it correctly and more efficiently. Learn about different data structures (e.g. Trees, Graphs, Hashes, Linked-lists etc.) and scenarios we'd use them in.

In addition to your learning route, don’t neglect the following. (If you want links to suggested resources you can use to learn these concepts, you can find the link below):

  • Learn about Operating systems: what processes are, what threading is, how memory is managed, etc.

  • Learn how to design an algorithm, what pseudocode is, etc.

  • Learn about functional programming and how it differs from OOP.

  • Learn about how to write clean code.

  • Understand programming principles such as DRY, SOLID, and KISS (this is not an exhaustive list; I encourage you to do self-research and find more).

  • Understand recursion

  • Understand the process used to debug code.

  • Understand the different types of tests: unit tests, integration tests, end to end tests. How to implement each and why we use them.

  • Be familiar with system design, networks, etc.

  • Understand how to build and manage databases.

  • Look into the ethics and laws of technology.

  • Learn the tools used by developers: Git, Github, Jira, IDEs, etc.

  • Be familiar with bash commands.

The great thing about the internet is that knowledge gaps no longer have to be a limitation. Everything is available to learn. You just need to know what to learn and have the discipline to do so.

Here is a link to the document with all the resources you can use to learn these concepts.

Check out this post on how you should structure your learning pathway to avoid getting overwhelmed here.

Happy learning!,

Ruth