What technologies should I learn?

Joël Quenneville

“What technologies should I learn?” is a common question we hear. Context makes a huge difference here so let’s establish a persona for whom we can answer the question more concretely.

Persona

The advice below is targeted to an early career teammate at thoughtbot, say a bootcamp graduate or recently promoted apprentice. They’ve gotten over the initial hurdle of starting a new job and are wondering what to focus on during their investment time.

Core language or framework

For someone about a year in, I’d caution against learning another language. Many newcomers to the industry flit from one language to another but don’t master any of them and stay stuck with a shallow skill set. Instead I’d suggest focusing on getting better at your primary language/framework as well as some patterns for that language’s paradigm.

For an object-oriented language like Ruby/Rails, “patterns” means learning how to compose objects, how to break down a problem into a series of objects, a few basic design patterns (e.g. decorator, adapter), some refactoring patterns (e.g. extract method, extract class).

Evergreen Skills

Additionally, there are some evergreen skills that will help you throughout a career in web development regardless of what languages come and go. These can be learned gradually over time and don’t have to be mastered to a deep level the first time around. You will be coming back to these skills again and again.

The list below is pretty large. If I were giving advice in person, I wouldn’t dump the whole list on them (that’s intimidating!). Instead I’d make one or two recommendations based on what I know of their personal context.

  1. Understand the basics of HTTP (URLs, verbs, headers, status codes, form vs JSON bodies, cookies, using the browser’s network tab)
  2. Get better at relational databases (SQL, table design, normalization, indexes, N+1 queries)
  3. Get better at Git (branching, rebasing, cherry-picking, HEAD)
  4. Semantic HTML
  5. Basic security (SQL injection, XSS, CSRF, password management)
  6. Get better at test-driven development (testing outside-in, testing in isolation, testing 3rd party integrations, stubbing)
  7. Get a better understanding of the browser as a platform and what can and can’t be done there (forms, DOM, XHR/fetch, CORS, file system access, various platform APIs)
  8. Basic shell familiarity ($PATH, shebang, permissions, navigating and exploring a directory structure, a few common utilities like grep and sed, getting help with man or the --help flag)

Interests

Finally, I’d encourage someone to follow their interests. Those are the topics that you will learn the fastest. For myself, this was domain modeling and object-oriented design when I was 1-2 years into my career.