Are You Actually Good at CSS?

Updated Aug 16, 2021#css#career#reflections

According to State of CSS 2020, at least 61% developers rated themselves as CSS experts as following proficiency scales:

  • None: Virtually no knowledge of CSS.
  • Beginner: Using CSS frameworks and tweaking existing styles.
  • Intermediate: Knowing specificity rules, being able to create layouts.
  • Advanced: Mastering animations, interactions, transitions, etc.
  • Expert: Able to style an entire front-end from scratch following a consistent methodology.

Are you actually expert at CSS after years of styling websites? Developers tend to assess themselves good at something after years using it because the illusion of equalizing experience with knowledge.

I used to interview many developers for my company and I was shocked when modern developers rarely learn anything inside-out or read a book from cover to cover. They need something, they search it, read some tutorials, follow the instructions, finish the tasks, and call it a day.

Many popular tech twitters often tweet like “After [x] years of doing [y] I’m still searching [z]” or “It’s all about knowing how to figure it out and look it up.” to lower the expectation. Popularity doesn’t mean expert, but the followers often expect so.

You’ll be amazed by the fact that CSS is actually easy to pick up but hard to master. Same with Git and Bash. The reason behind all of this is we learn and use different language categories in different ways:

  • General purpose programming languages (Java, JavaScript, Python, etc.): They are used to solve problems in many domains by allowing users writing arbitrary logics using common concepts (types, operators, loops, functions, classes, etc.) Learning one language will translate very well to another even they have different syntax but most likely share above common concepts.

  • Domain specific programming languages (HTML, CSS, SQL, etc): They expressively solve specific goals mostly by combining constructs (rules, keywords, APIs, shorthands, etc.). The more features they want to support, the more constructs they add.

There are jokes around writing domain specific programming languages is not programming. People do respect a general purpose language like Javascript more to learn it inside-out, and consider CSS as ignorable already-working-just-fine stuff.

A domain-specific language like CSS is easy-to-learn and straightforward to get started, you only need a small set of its constructs to be productive on daily basis. Imagine how many times in a year you actually do following CSS stuff:

  • Manually write fancy animations, transitions, or transforms
  • Manually calculate selector specificity
  • Manually write fancy hover effects
  • Manually write fancy border styles
  • Manually debug broken styles on devtools

Majority of the time of writing CSS, you often just write basic layouts and styles. Anything more complicated than that you’ll use libraries, frameworks, or copy some code snippets elsewhere.

CSS syntax is simple and there are only a few key CSS concepts. The hard part is memorizing hundreds of CSS properties/values and using them properly. Even if you try to remember tons of them, you’ll forget eventually.

There is no official CSS documentation for public users, the best you can find are tons of module specifications written for browser vendors and some online learning resources here and there.

Will you ever be actually expert at CSS? I think 99% frontend developer will be at intermediate-level for life without ever wanted or needed to push forward pass that level unless you’re doing heavy tasks like developing CSS related libraries, frameworks, books, browsers, or fancy animations.