Why Everyone Is Fighting About CSS/UX and JS

Uli Troyo on February 02, 2019

TL;DR: There isn’t one. There’s no short way to say any of this, yet one of the reasons you keep fighting is because you misunderstand what the f... [Read Full]
markdown guide
 

I do have to say that topics like these (while they were excellent and revealing reads) fill me with a ton of anxiety. I'm about to graduate this semester with my BA in Comp Sci and just recently within the last few months got into exploring and learning about web development. It's been the most fun I've had programming in a long time during my university experience and I feel more inspired and passionate than I've ever been before. It felt amazing to finally have some direction and know what kind of career I believe I wanted.

But there's just SO MUCH to web development. Picking up vanilla JavaScript wasn't too bad because I already was taught good, basic programming fundamentals, but there's just SO MANY tools, SO MANY different libraries and frameworks, and SO MANY things about web dev that I didn't even know I didn't know (if that makes sense). Since getting a good handle on I've JS been learning Node, React, and good HTML/CSS fundamentals but I wish I had discovered how much I like web development sooner because I feel like the clocks ticking 'til the time I graduate and I'm filled with a lot of dread that when it comes time to getting interviews I'm going to be revealed as a fraud who doesn't really know anything, because to be honest that's kind of how I feel at the moment.

** Edit: Thanks to everyone who responded for all the encouragement. You've all calmed my anxiety about my future and I'm very grateful.

 
  1. Imposter system applies to people regardless of their experience. Your fear of being revealed as a fraud who doesn't really know anything puts you in the company of some amazing and skilled people.
  2. Libraries, frameworks, languages, tech in general - it's always changing and yesterday's new-hotness often becomes tomorrow's old-and-busted. Don't worry about not being an expert on the latest everything because it is impossible. And the people who expect otherwise? Those are the ones who actually don't know anything, with their job requirements of 10 years of experience with React or Docker.
  3. If you have good programming fundamentals and can learn new things then that's all you really need.
 

A lot of what you're seeing is incidental complexity. The fundamentals remain. Learn:

  • HTML, including image srcsets, flexbox, and grid layout
  • CSS
  • how to manipulate the DOM in vanilla JavaScript
  • enough HTTP to be able to put parse a request and send a response (probably HTTP 1.2, 2 and 3 are very different but the basic ideas remain).
  • how to expose an HTTP endpoint in some language (PHP, Python, Go, Node, whatever)
  • how SSL works and how to set it up
  • browser security, CSRF, etc.
  • web accessibility
  • how to structure a GUI application with MVC[1]

These are the highest value uses of your time. React and other frameworks can be useful, but they are ephemeral and they can't help if you don't know the fundamentals. They're distractions from the real stuff that is going to last.

[1]: Before someone starts chiming in about React or other things obsoleting this, they don't. React's flow is just inversion of control in MVC.

 

Frameworks aren't a replacement for fundamentals, and you'll never be able to even use something like React if you can't handle HTML, CSS, REST and all that. Accessibility, speed and other concerns are also taken into account if you know what you're doing, though speed through minification and uglyness usually takes priority over the developers' experience.

(I'm sorry but if you want to read React's code you can find it on GitHub.)

My React's usage is just a tool to get that HTML and CSS displayed on the browser and react to events, and it needs to adhere to the same qualities - regardless of what I've used to write it. I'll never use random classes, and I often still style the old fashioned way (with a single CSS, though I like SASS too).

The divide between UX and JS is pointless. I've been trained as a designer, I work as a JS developer that also does system design and product design, and I don't give a crap about the morals of doing harder or simpler stuff, I'll do the best I can for the project.

Also honestly it's a bit ironic that React is often the target of critics that prefer "the real deal", since all React does is render stuff either in the browser or on a server. It's not a framework either. It's just fancy JavaScript that produces simple HTML and keep tracks of it.

 

You'll be alright, just keep learning. Being curious is the best tool when it comes to being in the field of web development, and good employers should recognize that. Even after a couple years of doing web dev full time, once a day I learn something new and think to myself, "damn. How did I not know that?" But that's a good feeling if you're curious - keeps things interesting.

Also, one thing I found useful: be peripherally aware of the trends in the various fields of web dev, but pick up a couple tools to use as your primary tools. Otherwise you might find yourself always learning and never building instead of doing both.

 

Thank you for the kind words of encouragement, Grant. Focusing on a core set of tools and skills has definitely been my mindset thus far. I'm super grateful for all the amazing tutorials and learning materials that are available online for these tools.

This is nothing new. Before the web it was cross process communication, Data protocols and OS API stacks that one would need to explore and had little exposure to prior to graduation. Don't sweat it. You are hired as a junior engineer for a reason.

Yes I'm dating myself, but when I graduated, web devs (all encompassing) were barely a thing and "weren't really engineers". Forgive me, but these battles (not war) are trivial :). Try arguing that people who write code of any kind for the web are actually engineers. Thank those that fought the real war 20 years ago.

P.S. The last part needed a proper shake of the fist and a "Git off my lawn". :)

Are you going to -f those kids of your lawn?

 

Meh, nothing to be scared about. You are looking at entry-level with a thin portfolio. Employers are familiar with that. Build up that portfolio, gain confidence, and be adaptable.

 

Thanks for the good summary Uli! I think you left out, in your "class warfare" and "contempt culture" argument this important POV (read the thread):

but good summary nonetheless!

I would never define myself as a frontend developer as of today but I definitely lean towards "side A" than "side B".

As a person that's actively interested in WebAssembly you made think about this from a different side: WebAssembly is definitely closer to "side B" because it would be "opaque" and literally treat the browser just as a compilation target. Food for thought :)

 

Yeah, THAT was one of the most educational threads to come out of the whole tweet storm.

 

Exactly, an angle in the whole discussion I couldn't have foreseen and, I have to admit, I was sadly oblivious about.

 

If I had to choose a side, I’d be closer to what Chris labels a UX Engineer.

That said, none of this particularly concerns me.

I’ve been doing web dev for 25 years and coding for longer, and one trend has proven true over the years.

Tools & practices that have proven useful to the majority of client-side developers over a sustained period of time eventually get built into the core languages and are supported natively by the browsers. A couple quick examples: Bootstrap Grid -> CSS Grid (which is better than the original), JQuery Element Selectors -> Javascript getElementsByClassName, etc. Also, does anyone remember emulating border-radius by slicing a box into 9 sections for proper scaling?

The javascript engineering community is contributing by building tools that enable us to create great experiences. Will big companies be able to leverage them first? Sure, because resources. Will the useful tools and practices eventually become part of the core functionality for web languages and servers? History says yes. We just gotta let evolution do its work.

 

Aha, thanks for reminding me the border radius with 9 divs. I teach a Web Design and Development course in a CS department and this was one of my favourite examples ~10 years ago to demonstrate how you can get creative with CSS and unleash its awesomeness. I was pretty disappointed -and possibly the only person in the whole world feeling that way- when border-radius was introduced. Luckily they also invented this CSS animation thing and new CSS3 selectors so I was able to fill the gap in my lectures after saying farewell to manual border radius.

 

I've been working on web applications since Netscape 2 was supported in the mid 90s. I was a fan of JavaScript before the good parts book. I was even a fan of aspx for a while.

Today, there are times I'll push a simple page and plug in something like jQuery and Bootstrap to get something out.

That said, I prefer modern tooling with React and CSS in JS. I also feel it's useful to publish source maps. Hiding source is not security.

In the end I've been in all sides of these arguments. I've been labelled all of the titles discussed and it comes down to the person and roles in the company. I also worked with "UX Engineer" titled people who didn't write code at all.

The arguments all have some merit and are all mostly useless. I write code with an emphasis on discoverable and maintainability in a feature-component hierarchy. That doesn't mean conforming to a given framework or patterns specifically. It means being able to find the piece you are working on and the places where it's connected into a larger application.

I think jsx, redux/graphql and jss are better fits than most other options. If it's mostly content delivery, then a good server platform is often better.

I also tend to reach for JS/node first on the server. No, it is not the best at anything server side. But it is good enough for almost everything with a lot of flexibility and less disconnect to the front end than pretty much everything else.

 

You had me until you mentioned node :). Call me crazy, but it feels like the only reason node is a thing is because JS devs didn't want to learn a new language :). Sorry, must just be in a 'stir the pot' mood tonight.

 

Node is definitely not the only thing I use. That said, in Windows Linux and Mac, when UI development is happening, node is there.. that means I can write scripts for tasks and orchestration that will work on all three platforms with minimal issue and without more complicated tooling.

It's more a matter of convenience. There's also bash generally, which I also used a lot, but the implications in Windows are different.

Compiled languages are fine for server only applications and backend servers, but there's less wait for a quick change on a script.

I also have been meaning more heavily on docker lately as well.. again to minimize my own impact across platforms. Docker desktop on Windows and Mac are close enough with a couple gotchas, but generally minimizes the disconnect on differing systems

 

Node is pretty useful and has its reasons to exist, and nowadays people are picking up dialects of JavaScript that are compiled to JavaScript, so they're not being bothered by learning a new language. I recently picked up C#, and that's not really that big of a distance from Typescript.

 

That's a reason that node became a thing, but taking advantage of the JS event loop was also a (good) reason.

 

People always gonna argue about something.

  • CSS in JS is bad
  • Uglification is pretty bad
  • Frameworks are unnecessary for 95% of projects
  • People that put people before the code always win (whether it be a11y, perf, readability, usability, etc)
  • I don't know how this was such a big debate
  • Web dev isn't actually that complicated if you don't make it complicated
 

I think Simpson (getify) is right about lack of empathy being a factor, but I'd say the real root cause is that humans feel a strong need to be perceived as right (and, more primally, powerful). Coupled with the other common human trait of insecurity, we unfortunately go to great lengths to justify our positions and our choices... even when we have an inkling that we could be at least partially wrong.

You can pick pretty much any subject and end up with these debates-that-become-wars. I've seen some disagreements turn into vicious flaming on... wait for it... Guinea pig forums. :-D

I just wish people accepted that there's room for many approaches, and different apps built by different teams have different needs.

 

It was worth the wait. By it I mean the Guine pig forums. :) Human beings are wonderful creatures for being able to attach meaning to a mostly unmeaningful universe.

 

I'll throw in my two cents, from someone who remembers when JavaScript was first available.

UX engineer vs JS engineer: "engineer" has become a term of exaltation or oppression in software because its core meaning is missing. The core of engineering is legal. If a layman stands up in court and says, "The building that I checked that fell over and killed a bunch of people did not do so because of the design that I checked," the burden of proof is entirely on them to prove that proposition. If an engineer stands up in court and says that, the burden of proof is on the opposition to disprove it. Everyone wanting to claim that title needs to think about how it's going to go when the lawsuits start flying and they show up in court.

As for salaries, two things determine salary: scarcity of people with the skills and value produced. If you can make use of the skills of an X to make another $500,000, then you certainly aren't going to pay more than that. On the other hand, if X's are prevalent and there's not enough work to go around, their price is going to go down. From that point of view it is entirely possible for someone with a good grasp of UX and CSS to be bother scarcer and able to provide more value than someone who has a good grasp of React and webpack. The converse is also true.

The other side I see is parochialism. "This is what I build on the web" becomes "This is the web" in people's minds. The web is an enormous commons, so large that it's easy to not see what is outside of your neighborhood.

 

I'm not web developer/engineer/designer etc... However, your post did pique my interest. Regarding the job title nomenclature and what that entails, I believe if everyone simply accepted that they are all "skilled tradespeople" and have the same goals in mind, then maybe you can move past that. It seems really silly to get caught up in a title like that.

Regarding stacks, that is not isolated to the web (As I'm sure everyone who reads this post are aware of.).

 

I completely agree. The specific title of “engineer” has been one of the most contested things about my post, and really I only defend it because of the implied “eww, design” attitude that some developers get.

You know what it remind me of? Did you watch that episode of the Office where Dwight was fighting about the difference in prestige between “Assistant Manager” and “Assistant to the Manager”?

 

lol I hadn't seen that episode. I'll make a note to check that out.

Usability and design in a lot of ways (in my opinion) adhere to the same principals as engineering. Each choice must go through the same rigor as any complex backend system.

Reminds of the "full-stack" thing from years past (That still a thing?).

 

Engineering in my country is a field that is disciplined by laws. You can't even call yourself an engineer if you don't pass a specific exam and graduate in engineering. They're also not inherently more worth than a designer, which everyone considers a bad word but a designer is simply someone who is trained in culture and not only a very specific tech.

 

I understand that in Canada and European countries you need a engineering certification to have the title. In that regard, I understand it. If a software engineer is writing software that monitors your heart rate, you want assurances that it will work and if something should go wrong, you can hold the organization or person accountable who created it. That's how it works here (US) for other engineering disciplines.

However, in the US this isn't the case. The term "software engineer" is thrown around a lot and it's in a way commingled with "developer" or "programmer". In some cases we say the word as to not offend the individual. Again reiterating that other engineering disciplines are required to be certified. Just not the software variety.

In light of all that, by me expressing that design follows the same kind of "rigor" as engineering does not mean that i'm taking a side in that regard (Seriously, I don't care. Call yourself whatever you want.). I was merely speaking to the kind of philosophies good UX/UI professionals do (In my experiences.). They are held accountable for the products that they produce at least on a organizational and product level.

Hope that explains my initial posts.

 

Thanks for summarizing what went on and your insights. Your links were pretty helpful too. I especially appreciate your bringing up the Semantic Web angel. I agree that is way more important in the long term for every one of us in the webdev spectrum than these kind of tribal fights.

Just 2-3 years ago there were only a handful people who were advocating for more ethical machine learning practices and pointing out the problems. Nowadays how to fight inherent bias in ML algorithms, how to make their inferences more interpretable are active research areas and industry also took notice. I brought this example to find encouragement for discussing things you mentioned even if they are not the hottest topics currently. Eventually more sensible people will join the discussion and we'll find new ways. We always did in the dev world when it really matters and enough people became convinced that it matters. So I am optimistic.

 

For whom who wants the "right" way to do CSS thing:

  • If in the beginning, there's only CSS-in-JS, i'm sure noone wants CSS things.

Why ?

  • Everything is Javascript makes you productive, because if CSS is non-existing in the beginning, we probably don't need webpack thing neither.

CSS is the bad guy here. It made the dev tooling more complicated than it should be.

The correct way in future is : Just put everything in JS !

 

Ha, no; sorry. Who wants to open and step through a debugger to figure out why the BG color on a button is incorrect. Nobody, ever. They are separated for a reason. JS frameworks made the tooling a nightmare fwiw. Tooling didn't really exist before npm and JS frameworks.

 

You can most definitely use sane CSS with toolings and JavaScript. Just keep using it as you've always done, maybe change how you handle your files. Tools can handle splitting bundles and make it even better, or you can handle it yourself and use something like SASS. People who think you need to pair something called React-something to React or something.js to JavaScript don't know what they're talking about.

 

Interestingly, desktop toolkits started out this way and consistently went the opposite direction, creating theming languages and other equivalents of CSS to remove the visual layout from the code.

So based on the history of the field, CSS-in-JS will be a fad for a couple of years, and then fade into history for the same reasons that visual styling was factored out on the desktop.

 

Can I just say that I love this article? :D

I'm not going to argue for any sides, I'm just arguing for a healthy discussion and this is a very informative addition to it 👍

 

Some related observations/thoughts I don't know where else to put:

The Misunderstanding

React/Angular/...-Dev: "CSS in JS!"
"Classic"-static-page-Dev: "No! How would we.. It makes no sense!"
React/Angular/...-Dev: "Yes, it's so much better! Just shove it in your components"
"Classic"-static-page-Dev: "In my what? But Cascade!"

(spoiler-alert: both are right)

The Twitter/HN-Bubble

I would take popular tech-twitter with a truckload of salt.
Lots of them are marketing-folks (advocates, evangelists) so they are biased towards whatever their company does.
Lots of them are really smart, but in the end are only human, and can be victims to fallacies like all of us.
Most front-end-devs I talk to outside conferences never even heard about any of the folks mentioned in the article.
Not to mention the differences between Silicon-Valley and the rest of the world.

The web-dev-spectrum

My hypothesis: Everybody has their line where it becomes uncomfortable for them, on both sides, if you assume a web-dev-spectrum like (sorry for the simplification):

Concept/IA <-> Graphic Design <-> HTML/CSS <-> Style-JS (Anims, jQuery) <-> Techie-JS (TS, Ng, React) <-> THE API <-> Server-Side Dev. / Ops / OS/Systems-Dev

Even though I'm interested in all of those fields, my "home" is from HTML to Techie-JS.
I assume it's a bit different for everybody, especially as this spectrum gets finer grained, the bigger the company/team/project gets. But I also would say, that i.e. Systems-Devs with typography-skills are the exception to the rule.

CSS is hard

Most "CSS is hard"-rants which got my attention come from the tech-side of the spectrum. Are most issues with CSS really deficits in design-skill? Would they have the same issues with Sketch or Photoshop?
What makes them think CSS is easy? Do some years of full-time CSS and it won't be that hard anymore.

 

I agree with everything you mention!

  • About the misunderstanding: I saw a response (here or on Twitter, not sure) that said that what matters is what's right for each team, as far as which angle to take, and I think that's both sensible and real.
  • About the Twitter bubble: yeah, I feel you; I enjoy the drama but I was made aware that some people, upon being faced by the negativity, actually get discouraged to enter the industry. My biggest regret from this writeup.

And in general, I like your use of headings to separate points, lol. Sorry, I enjoy formatting :D

 

UX. User Experience. If the user's experience is bad, you failed. Nothing else matters on this point.

Pure JS. You've artificially restricted your ability to architect a good product.

I think I have a new phone interview filter! Do you prefer Pure JS or HTML/CSS/JS? I have to assume that if they answer Pure JS, they must be lacking in some foundational web knowledge.

 

Aren't discussions like these about who is "better" or deserves to be paid more or whatever just total nonsense? Building better teams, that's what really matters.

 

My concern with this is that the discussion revolves around effects and not causes. If we're unable to meet on a common ground then we're unable to work together to evaluate solutions.

Certainly things are changing, and it sounds like some UX engineers weren't in the loop on that. No one sane is discounting the importance of UX. I've seen a surge in interest in design systems lately and I consider that the industry's response to a need for restructuring. That might not be good enough, we'll see.

 

UX engineers are in the loop, they just don't agree with the direction things are going. That's a valid position, and not a statement of ignorance.

That said, the picture isn't all bleak. I'd say if JS frameworks are able to adequately meet important accessibility concerns, there's not really a huge problem. Until that's addressed, though, especially in a way that accounts for the lack of expertise of new developers juxtaposed with the required cognitive load of these technologies, then it is a pretty big problem.

 

Poor choice of words. "Out of the loop" meaning UX dev concerns weren't impactful in the larger conversation's process.

Material Design Components for the Web has done an amazing job with accessibility, but unfortunately development progress has lagged significantly behind framework-specific libraries like MaterialUI, Vuetify, etc.

I haven't worked with Storybook so can't speak to the developer experience, but that was one of the first solutions for a new front-end engineering framework workflow. I've gotten up close with Vue Design System, which isn't too bad. I'd like to hear about other' solutions and their experiences with them.

I would too! Navigating the wealth of tech out there isn't easy; I'm sure there are better solutions that just the one's I've heard about. That's a big reason why I'd like this to be a broader conversation.

 

Hey Uli, I don't think web designers (UX Eng.) should be compared to UX Designers in that case, as UX is not simply drawing interfaces but planning the whole user experiencie and flow of a service exposed by your application. Writting UIs with html+css+js is less UX than participating in the planning of the project and prototyping workflows.

 

As a user with accessibility needs I've been getting more and more frustrated at the state of the web because of all of the sites that use Angular or whatever for everything and just completely throw out all of the stuff that made the web useful in the first place. I wrote a rant about that from my perspective over yonder: beesbuzz.biz/blog/7456-Modern-web-...

 

Holy moly! That’s awful! Thanks for your input; I’m going to redouble my efforts.

 

See "UX developer" named everywhere, but never "UI". Is it one or the other, or both? When strictly talking about code, I would think we would be talking about UI developer.

 

I'll be honest, I get confused by UX/UI in that respect; I'm not sure either way. I mean, user interactivity seems synonymous with user experience... so is the difference in the context of focus? I like user experience more for this reason: it seems to prioritize the focus rather than the... process? I dunno.

Honestly, I got called out for "engineer" too, and I'm not sure about that one either. "Engineer" seems to carry certain baggage of context. I like "developer" better for that reason. Or "producer", for that matter, but it's confusing enough that term is used two completely different ways in music and in movies, lol. But I'd love to say I'm a "web producer".

 

User Interface is the structure of the layout. The presentation layer. The look and feel.

User Experience is a summation of "the entire process of acquiring and integrating a product, including aspects of branding, design, usability, and it's function" for the end-user.

Here's a good article usertesting.com/blog/ui-vs-ux/

Ah, nice. Thanks for the clarification!

 

I think there's a certain amount of privledge in being a tech leader, or self employed developer.

What the author calls "extreme side B", is what most of us go in to work and have to do every day. Everything you do has to be attached to business value.

It's sad the web becomes less learnable every day, but telling people not to use frameworks and push pixels around, is out of touch, and pretty much impossible for most of us.

 

Fair enough, although I don't think the argument is whether one should push pixels or use a framework. Modern CSS is very good at dealing with responsive layouts in a way that doesn't have one manually moving components around. Neither did I mean to imply that a developer shouldn't care about the business value of their work, but rather, that the discussion is around whether this can be done without removing the parts that make the web accessible. "No" is a valid answer, but it's an attitude as extreme as my own of "everything should be accessible", in the sense that these attitudes describe polar opposites, and most people would compromise somewhere along the middle (though most would lean one way or the other).

 

soo, this is a thing, huh.

quite depressing to read for someone new to web development,

got me thinking if this will be an 'atmosphere' to expect if i ever do get a job someday

 

I guess it bears to point out that whatever people are fighting about on Twitter and in blogs doesn’t necessarily map 1-to-1 with the real world, thankfully. On the web, we let our interests and outlooks get loud, but in the real world, we’re generally nicer to each other. I’ve yet to be verbally assaulted irl for any of the things he I get yelled at in comment sections! :)

 

It's not really the atmosphere. The degree of certainty and ideology on debates like this correlates with the inexperience of the developer. In a healthy engineering culture, a senior engineer responds to blanket assertions like this with, "That's an interesting idea. What about X?" where X is some scenario where it makes no sense, and successively leads them Socratically to a deeper understanding.

 

Don't worry. It's not all like this. You don't have to engage nor take sides.

 
 

Yeah, I mention that toward the end. But if you’re bringing it up because you also wrongly think it’ll be a drop-in replacement for JS, you should probably watch Kyle Simpson’s talk.

 
 

Followed. Thank you for capturing my frustration with just about every "What's the difference between s and s" post I see online.

 

UX or JS both mostly aren't programmers but designers. Seven years ago guy who did design in Photoshop also chop it in layouts and mix JS. So, NodeJS was an attempt to move that design guys to fullstack developers cuz these days industry was needed for a new hands. Not sure what are you discussing about?

 

I’m not sure either. Definitely don’t read the post to find out, though.

code of conduct - report abuse