Andrei Maxim

June 4, 2024

Learn the Web Fundamentals

I got my first job as a software developer was back in 2005 when I was 21. I used to hang around the Microsoft Lab at my university as they had a wealth of programming books and through them I got an interview for a junior ASP.NET developer position at a small company. I think I got the job mostly due to my knowledge of HTML and CSS, since I was building (simple) websites since high-school.

Two years later I moved to Ruby on Rails as a full stack developer (minus the JavaScript bits, which never really appealed to me) until roughly 2016. I've been a backend developer ever since, building exclusively JSON APIs.

Meanwhile, I had been asked a number of times what advice I would have for somebody looking to start a career in software and every single time I recommended starting with web development as the entry barrier felt lower and, more specifically, with HTML and CSS, since they provide a solid foundation for everything that's coming next. Every single time I was surprised by the negative reaction of the audience and I never understood why.

Until I started looking into Hotwire and realizing that I have to re-learn HTML and CSS.

I was disappointed to see that most of the resources for junior web developers are pushing you towards React and other frontend JavaScript frameworks, which may be very useful for experienced developers, but extremely complex for newcomers (good luck explaining why you need Promises to somebody whose entire programming career has been about editing Excel functions or writing some basic C!)

I was about to dismiss my concerns as being "an old man shouting at the clouds" kind of reaction, but then I read Rachel Andrew's excellent article "HTML, CSS and our vanishing industry entry points":

Whether front or backend, many of us without a computer science background are here because of the ease of starting to write HTML and CSS. The magic of seeing our code do stuff on a real live webpage! We have already lost many of the entry points that we had. We don’t have the forums of parents teaching each other HTML and CSS, in order to make a family album. Those people now use Facebook, or perhaps run a blog on wordpress.com or SquareSpace with a standard template. We don’t have people customising their MySpace profile, or learning HTML via Neopets. We don’t have the people, usually women, entering the industry because they needed to learn HTML during that period when an organisation’s website was deemed part of the duties of the administrator.

[...]

There is something remarkable about the fact that, with everything we have created in the past 20 years or so, I can still take a complete beginner and teach them to build a simple webpage with HTML and CSS, in a day. We don’t need to talk about tools or frameworks, learn how to make a pull request or drag vast amounts of code onto our computer via npm to make that start. We just need a text editor and a few hours. This is how we make things show up on a webpage.

Targeting HTML and CSS is useful not just for beginners, but also for employers: junior web developers with solid web foundations will be much more productive from the first day on the job than those that solved hundreds of Leetcode questions, while the onboarding process can be optimized since it will assume the same set of prerequisites. Also, more advanced topics, and this is something that Rachel Andrew also points out, like React or the company's full-stack framework will be much easier to learn once you know what HTML and CSS you need to generate and send to the browser.

I think that now, more than ever, having strong fundamentals in any programming domain will be a huge advantage in the long term for the junior developer.

If you want a career as a web developer, there are some excellent resources to help you to a great start like Google's HTML and CSS free online courses, FrontendMaster's free Front-End Development Bootcamp, books like Form Design Patterns or Every Layout, or Kevin Powell's channel.

About Andrei Maxim

Professional Ruby guy.