---
title: What technologies should I learn?
teaser: What technologies do we recommend to early career web developers?
tags: web,ruby
author: Joël Quenneville
published_on: 2021-11-18
---

"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].

[investment time]: https://thoughtbot.com/blog/investment-time
[apprentice]: https://thoughtbot.com/playbook/our-company/apprenticeship

## 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][ruby science] (e.g. extract method, extract class).

[break down a problem]: https://thoughtbot.com/blog/reusable-oo-composition
[ruby science]: https://books.thoughtbot.com/books/ruby-science.html
[decorator]: https://thoughtbot.com/blog/evaluating-alternative-decorator-implementations-in

## 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**][http] (URLs, verbs, headers, status codes,
   form vs JSON bodies, [cookies], using the browser's network tab)
1. Get better at **relational databases** ([SQL], table design, normalization,
   [indexes], N+1 queries)
1. Get better at **Git** (branching, [rebasing], cherry-picking, HEAD)
1. **Semantic HTML**
1. Basic **security** (SQL injection, XSS, CSRF, password management)
1. Get better at **test-driven development** ([testing outside-in], testing in
   isolation, [testing 3rd party integrations], stubbing)
1. 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)
1. 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)

[http]: https://thoughtbot.com/blog/back-to-basics-http-requests
[cookies]: https://thoughtbot.com/blog/lucky-cookies
[SQL]: https://thoughtbot.com/blog/back-to-basics-sql
[indexes]: https://thoughtbot.com/blog/a-grand-piano-for-your-violin
[rebasing]: https://thoughtbot.com/blog/git-interactive-rebase-squash-amend-rewriting-history
[testing outside-in]: https://thoughtbot.com/blog/testing-from-the-outsidein
[testing 3rd party integrations]: https://thoughtbot.com/blog/testing-third-party-interactions
[`$PATH`]: https://thoughtbot.com/blog/following-the-path
[`sed`]: https://thoughtbot.com/blog/sed-102-replace-in-place

## 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.

[learn the fastest]: https://danluu.com/learn-what/
