“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.
- Understand the basics of HTTP (URLs, verbs, headers, status codes, form vs JSON bodies, cookies, using the browser’s network tab)
- Get better at relational databases (SQL, table design, normalization, indexes, N+1 queries)
- Get better at Git (branching, rebasing, cherry-picking, HEAD)
- Semantic HTML
- Basic security (SQL injection, XSS, CSRF, password management)
- Get better at test-driven development (testing outside-in, testing in isolation, testing 3rd party integrations, stubbing)
- 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)
- Basic shell familiarity (
$PATH
, shebang, permissions, navigating and exploring a directory structure, a few common utilities likegrep
andsed
, getting help withman
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.