In a recent issue of Smashing Magazine’s Web Development Reading List, Anselm Hannemann laments the ignorance of web development fundamentals in developers applying for front-end dev positions. According to Hannemann, most of the applicants didn’t have a clear idea what a clearfix is used for, what ARIA roles are, or the basics of HTML and CSS. They did, however, know high-level frameworks like React and Angular.
At first blush, this looks like a serious problem. The web is built on HTML and CSS. Without a detailed knowledge of those languages, how can a developer hope to solve problems and build products that make the most of modern web technology?
I’m not so sure it’s as simple as all that. I don’t doubt that knowledge of the basics makes for more flexible developers, but the same can be said of C developers and assembly language, or PHP developers and C. There’s always a level of abstraction beneath the level we happen to be working. In fact, abstraction is one of the fundamental principles of computer science: if an abstraction is more expressive, less error prone, and reduces the time it takes to create a good product, then abstraction is good.
It’s not unreasonable to argue that CSS and HTML are low-level languages and developers benefit from abstractions built on top of them. Hardly anyone would argue that HTML and CSS are the ideal languages for building web pages, but they’re the languages we have for various social, historical, and technological reasons. If developers can build tools like React at a higher level of abstraction that make building interactive sites easier, then why not use them?
A consequence of focusing on the higher level tools will be a degradation in knowledge about the lower-levels; developers trust SASS, React, or whatever to do the right thing so that they don’t have to.
In an excellent article, Max Lynch argues that the web is too low-level for developers building web applications that function as well as native applications:
“Mobile web developers have to build or find high quality components for everything from side menus, to tab UIs, to image sliders, to buttons and tap/gesture events. They have to build navigation concepts that are not found in a traditional browser environment (for example, the way history is nested in an iOS tabs-based app). They have to respond to different kinds of input events and have UIs that respond to complicated touch gestures.”
The solution is frameworks and components that provide tried-and-tested solutions to the problems mobile web developers face. A developer shouldn’t have to implement a slide-out hamburger menu from scratch, and their having to do so is why many hamburger menus have terrible performance.
Almost every other development platform operates at a higher level than the web:
“Web developers constantly hear how the web stack “sucks” in comparison to native. What we don’t realize is that native developers on any platform (desktop, mobile, xbox, desktop linux, etc.) are building apps at a higher level of abstraction than web developers.”