Coding career self-study guide

Bion
6 min readAug 29, 2019

--

This guide is a follow up to the post on preparing for and selecting a coding bootcamp.

Below is a guide with topics, questions, and links to resources meant to provide you with an outline of the skills and knowledge you’ll need to be a successful entry-level developer. I’ve yet to come across a boot camp that adequately prepares students in each of these areas on its own, though Ada Developers Academy does better than anywhere else in my experience. Don’t feel like you need to master every topic I bring up before selecting and applying to a first job — that would likely take years. You should, however, spend enough time exploring these topics so that none are total mysteries to you. Even passing familiarity can be the difference between struggling and thriving in beginning a long-term tech career.

Fundamental skills

Learn your tools!

Start using the command line on macOS or linux. Read this book on the linux command line. It’s 90% relevant to macOS as well because both are POSIX-oriented operating systems.

Start using a text editor and get to know it. Make sticky notes to remember handy shortcuts and commands. A couple of good editors for beginners and professionals alike are Sublime Text and Visual Studio Code. Which editor you use isn’t much of a big deal when you’re starting out, but later on I recommend going deep with something like Vim, Emacs, or an IntelliJ-family IDE. Developers who are adroit with their editors can afford to explore multiple solutions to a problem in the time it takes others to just get one working.

Learn git. Few things will have a bigger impact on your productivity than good use of source control. There are a lot of getting started sites out there. It’s fine to use a GUI instead of purely relying on the command line as you get started. Get in the habit of writing really quick small programs to check your understanding of what you’re learning, and use git to manage the files for them. Dedicate regular time to learning how git works and improving your ability to work with it.

Learn the basics of public key cryptography. Nearly every secure connection on the internet uses it. Here’s a video that introduces the concept.

Foundational computer science

Learn the basics of what an operating system is responsible for.

  • What does a cpu do?
  • What is memory?
  • What is a memory address?
  • Why are memory addresses typically notated in hexadecimal?
  • What is the operating system kernel?
  • What can cause a program to run slowly?
  • What is a system call?
  • What is a device driver?
  • What are unix file permissions?
  • What is a process?
  • What is a thread?
  • What is the difference between a process and a thread?
  • What is Von Neumann Architecture? Describe its basic components.
  • What is a call stack?
  • What is a stack trace?
  • Why do most computer programming languages feature a failure mode that presents a stack trace?

Learn about how numbers are represented with a computer.

  • What’s the difference between a float and an integer (i.e. floating point vs fixed point arithmetic)?
  • How are the numbers 0 through 32 written in binary? In hexadecimal?
  • Why is hexadecimal notation useful when working with computers?
  • Why, in Ruby (and other common languages like Python and JavaScript), does this happen (in irb, the Ruby repl)?

0.3–0.2

=> 0.09999999999999998

Learn about the most common data structures and how they are implemented, particularly the ones you often use directly such as arrays and hash tables. Learning about linked lists, binary trees, and graphs can also be helpful but you’re less likely to use them in day-to-day programming. Write a binary search function that takes an array of sorted numbers along with a query number, and finds the closest number in the array to the query number.

Read about how text is represented in a computer. You don’t need to understand everything in the linked article right now, but read it and use Wikipedia and whatever other means to get a basic idea of what’s going on with text files.

Deep understanding and complete answers to these questions isn’t necessary while getting started, but a general awareness of these things will help provide a basis for understanding the practical skills you learn later on. Without this knowledge, new devs tend to think of the programming language they’re learning as how the computer works as opposed to thinking about what the computer is actually doing as a result of the code they’ve written.

Web development fundamentals

App development, usually on the web, is a common route for folks who are beginning a career in software engineering with a non-traditional educational background.

Feel free to ignore this section if you plan to work on mobile apps or avoid application development altogether.

Learn the basics of computer networking.

  • What is the OSI model?
  • What is a network protocol?
  • What is an IP address?
  • What is TCP?
  • What is a web server?
  • Why do browsers use TCP instead of UDP for communicating with web servers?
  • What is HTTP?
  • How is it browsers use both TCP and HTTP at the same time?
  • What is generally indicated by HTTP status codes in the 100s? 200s? 300s? 400s? 500s?
  • What is REST?
  • What are the RESTful HTTP verbs and what are each of them generally used for?
  • What is an Ajax request?
  • What is XML?
  • What is JSON?
  • What is a single page web application?
  • How does DNS work?
  • What is a DNS A record? CNAME record? NS record? MX record?
  • What are the different components of a URL?

Learn about the history of the web and web browsers, particularly around security and JavaScript. The systems that make up the internet are a haphazard collection of protocols and standards that have been slowly cobbled together by competing interests. Often things that appear to have a logical technical explanation also end up having a compelling historical explanation. Here is a good book for this topic.

Know the common security vulnerabilities for web applications and how to guard against them. Compromising the security of a computer system often involves a different level of understanding than building or using the system, defending against those attacks even more so.

  • What is an SQL injection attack and how is it avoided?
  • What is a Cross Site Scripting (XSS) attack and how is it avoided?
  • What is a Cross Site Request Forgery attack and how is it avoided?
  • What is Cross Origin Resource Sharing (CORS)?

Find out what it takes to make a website usable for people who require accessibility accommodations. Take this class on web accessibility and ensure your project is accessible to users with disabilities. Often glossed over by boot camps, the ability to meet web accessibility standards is a crucially important distinction between a hobbyist and professional web developer.

Learn the fundamentals of web design and usability. Read this book on common patterns and best practices. What does it mean to be ‘mobile first’? With your project, implement a responsive user interface that accommodates both desktop and mobile users.

Read a bit about what databases are and what their limitations are. Take this online class on databases.

  • Why do most software systems use databases instead of just writing files directly to the file system to store data?
  • What is a database lock?
  • What is an ORM?
  • What is the CAP Theorem?

Find a popular ORM for the language you are learning and use it to store data in an SQL database for a feature in your project.

JavaScript is ubiquitous on the web these days. Whether you are writing it directly or writing in a language that compiles to JavaScript (e.g. TypeScript, ES6), any code you write for the browser will be running in a JavaScript interpreter. Make sure you understand JavaScript’s concurrency model i.e. the JavaScript event loop.

Give it time

One major issue with boot camps is how much they try to teach in a short period of time. They have to take a cram-for-the-test approach because moving students through the program quickly is how they make money. Developing software is a big, multifaceted discipline. Learning to do it well will be an ongoing process over years of your life. Give yourself the time to explore with curiosity as opposed to trying to cram as much into your head as you can over a few months. Some things take a while to sink in, and giving yourself space for that to happen is going to lead to deeper and more durable understanding.

--

--

Bion

This is my blog for software engineering and career type stuff. I write code for google.com, previously boundless.com, citizencode.io, and substantial.com