Fast-paced & ever-changing environment
Like "real programmers", the environment web developers work in forces us to always be learning and follow the developments of an industry that is very fast paced.
I would argue that web technologies, including HTML and CSS, evolve even more rapidly than other programming languages or frameworks. So rapidly, in fact, that the simple fact of following what's going on and integrating it to your work can be a challenge in itself.
Contrary to programmers working on native platforms or with server side technologies, we never control the environments in which our code is running and, consequently, have to plan for a myriad of scenarios.
As Donald Rumsfeld would put it, when real programmers deal with "known knowns" and "known unknowns", web developers mainly deal with "unknown unknowns".
HTML & CSS
It is true that HTML and CSS are declarative languages and, at their core, have got very little to do with programming as we know it: control structures, functions, variables, etc.
Lately though, with tools such as CSS pre-processors, build tools and templating languages like Twig or Liquid, HTML and CSS themselves have been integrating more and more concepts that are traditionally related to "real programming".
In my humble opinion, it is becoming very difficult to be a good front-end developer today without programming notions and a good understanding of the command line.
- Working with Sass, you use variables, control structures, loops, maps, arrays, functions, etc. in order to write CSS. Have a look at Kitty Giraudel's Gists generated by SassMeister and tell me that's not programming.
- As people working with CMSes, front-end developers have to know a bit of PHP or get familiar with templating languages like Blade, Twig or Liquid in which variables, for loops, array manipulation and control structures are quite a common sight indeed.
- In the hands of people like Ana Tudor, the seemingly humble CSS transforms and animations can become very complex and involve hard core mathematical notions akin to programming.
On top of that, they typically write code keeping performance and browser inconsistencies in mind and follow best practices like progressive enhancement.