Skip to content

Instantly share code, notes, and snippets.

@patrickt
Last active March 7, 2023 21:31
Show Gist options
  • Save patrickt/0692be11e205258e0e47f1bdff63d821 to your computer and use it in GitHub Desktop.
Save patrickt/0692be11e205258e0e47f1bdff63d821 to your computer and use it in GitHub Desktop.

Things You Should Know Before Your First Software Job

How do you teach yourself?

Take notes

You won’t refer to all of them, but the act of writing things down helps remember.

Set up backups/cloud syncing

You should ensure that if, tomorrow, your computer were to fail, you won’t lose any data.

Figure out what to memorize and what to keep in reference

You probably don’t need to memorize it… but if you do, you need to work at it.

Find communities

  • StackOverflow
  • Reddit r/programming
  • Mastodon
  • Discord

Googling

  • Advanced search

RSS feeds

Reading other people’s code

Build a ‘newspaper’

You should be able to open some site—GitHub, Reddit, Discord, Pinterest, whatever—and be exposed to new concepts, libraries, languages, algorithms, and data structures. You should check this every day.

Practice every day!

Practice lets you learn how to learn.

How to use a computer

Editing text with VS Code

  • Have it open all the time
  • Customize its appearance with settings
  • Save and sync your settings between computers
  • Use the built-in terminal
  • Learn how to use the command palette
  • Extend it with the extensions library

How can VS Code help you write your programs?

  • What is a language server?
  • What are snippets?

The terminal

  • What is a shell?
  • Basic commands: cd, ls, cat, cp, rm
  • Getting help with man(1) and man pages
  • What’s the deal with this (1) and (2) business
  • Where does my shell configuration live?
  • How can I customize it?
  • Why don’t we use the shell for everything?
  • How do you invoke other programming languages?
  • What is a compiler? What is an interpreter?
  • What is an environment variable?

What is a filesystem?

How are files and folders laid out on Unix systems?

Version control

GitHub

  • Why do we need GitHub?
  • What is a pull request?

Git

  • Cloning
  • Committing
  • Branching
  • Pushing
  • Logs
  • Merges
  • Tags
  • Rebases

Project management

What is a bug tracker?

What is the waterfall model?

What is Agile?

What do project managers do all day?

How do you keep your coworkers informed of what you’re doing?

How does a computer work?

How do we store information in a very small space?

Binary

Hexadecimal

The von Neumann architecture

  • The CPU
  • The instruction pipeline
  • What is the heap? What is the stack?

Operating systems

What does an OS do?

Why is Unix the most popular family?

How does it work?

  • What is a kernel?
  • What is PID 1?
  • What is a memory allocator?
  • Why does memory need to be allocated and freed?

How do you customize your OS to your own needs?

How do you ensure those customizations

Programming languages

History

  • Binary, assembly
  • FORTRAN/COBOL
  • Lisp, Pascal, PL/1
  • C
  • C++
  • Smalltalk
  • Java
  • Python/Ruby
  • JavaScript
  • TypeScript

What is a ‘scripting’ language?

What is a statement? What is an expression?

Features

  • Types
  • Execution model
  • Static/dynamic
  • Garbage collected/memory-tracked/memory-unsafe

Functions

Basics

  • What is a function?
  • What is an argument?
  • What does it mean to call a function?
  • What is iteration? What is recursion?
  • What is a closure?
  • What is a function literal/anonymous function/lambda?

Data types

Basics

  • What does it mean for something to be “typed”?
  • Why do computers need data types? Isn’t everything just binary?
  • What happens when types go wrong in different languages?

Universal data types

Numbers

  • What is an integer?
  • What is a signed integer? What is an unsigned integer?
  • What is a decimal number?
  • What is a floating-point number? What is a double-precision floating point number?
  • Why do we treat floating point differently from integers?
  • Why are floating-point computations inexact?

Strings

  • What are they?
  • How do you access one character of a string? A slice of the string?
  • How do you iterate over a string’s characters?
  • What is Unicode?
  • What is UTF-8? ASCII? What is UTF-16?
  • What is the difference between a byte, a character, and a Unicode codepoint?
  • What is a regular expression?

Containers

  • What are they?
  • How do you access and iterate over them?
  • How do you modify, append, flatten, etc. them?
  • What does it mean to map, filter, and reduce them?

Things to know

  • Linked lists
  • Arrays
  • Sets
  • Heaps
  • Queues

Dictionaries/hashes

  • What are they?
  • How do you make them?
  • How do they work?
  • What is a hashing algorithm?

Trees

  • How do trees perform differently from arrays?
  • When do you use an array vs. a tree?

Examples

  • Binary tree
  • Search tree
  • Syntax tree
  • DOM tree
  • Trie

Algorithms

Analysis

  • What is an algorithm?
  • What is big-O notation?
  • What does it mean for an algorithm to be linear? Exponential? Quadratic?

Sorting

  • Bubble sort
  • Insertion sort
  • Quicksort, heapsort, mergesort
  • Radix sort

Searching

  • Linear search
  • Binary search

Object-oriented programming

History

  • Xerox PARC and Smalltalk
  • C++ and Java
  • Python, Ruby, and JavaScript

Practice

Classes

  • What is a class?
  • What makes a class different from a standard data structure?
  • What is a method?
  • What makes a method different from a function?
  • What is a superclass?
  • What is a prototype class (in JavaScript)?

Principles

  • What is information hiding?
  • What is encapsulation?

Interfaces

  • What is an interface?
  • Why do we use them?
  • When should you prefer them?

Inheritance

  • What is single inheritance?
  • What is overriding?
  • What is multiple inheritance?
  • Why do people often avoid multiple inheritance?

Composition

  • What are the problems with inheritance?
  • How do we avoid them without going crazy?
  • What is a trait?

Delegation

HTTP and networks

Internet

  • How does it work?
  • What is DNS?
  • What is TCP? UDP?
  • What is HTTP?
  • What is the client/server model?
  • What is the lifecycle of a web request?

Displaying content

  • What is HTML?
  • What is CSS?
  • What is Markdown?

Web programming

  • What is a handler?
  • What are GET, POST, PUT, and DELETE?
  • What is a cookie?
  • What is MVC? MVVM?

Error codes

  • What is a 404?
  • What

Databases

Basics

  • What is a database?
  • Why do we use them?

Relational databases

  • History
  • SQL

SQL

  • Create, read, update, delete
  • Transactions
  • Injections

Document databases

Libraries

What is an API?

Where do I find new ones?

What is a package manager?

How do I install a new library?

Testing

Why do we do it?

What is code coverage?

What are unit tests?

What are integration tests?

Debugging

Printf debugging

Using a debugger

Reading a stacktrace

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment