
The Hubris of Front-End Developers - allenc
http://allenc.com/2012/07/hubris-front-end-developers/
======
ajacksified
The negative comments about this post by others are interesting; perhaps it's
because I'm also a FE Engineer, but I thought much of what you said was spot-
on. I've managed to specialize in FE only because I can also do back-end work;
I have a hard time hiring other FEs because so many only know jQuery, and a
spot of html and css, and I simply don't have room on my small engineering
team unless they can supplement more or are very fast learners.

To be an effective FE, you need to understand the whole stack - not just how
to install a jQuery plugin, but also CSS, Javascript _the language_ , html,
where these technologies are going (html5, ecmascript 6), what the back end
stack looks like, how data gets from the database to the browser, how the
browser rendering engine works, pragmatic optimizations, functional and OO
concepts, version control, browser quirks, the TCP stack, and deployment. No,
you don't have to specialize in these things, but you need to be familiar or
willing to get familiar.

And you're right, most companies don't understand what FE engineers need or
what they should be.

~~~
Zimahl
_To be an effective FE, you need to understand the whole stack_

I completely disagree. There are a lot of organizations that completely
abstract the front end from the rest of the stack and have only UI developers
work on a very focused piece.

It doesn't help a UI developer to know the DB schema or the middle tier
components. They need to know where they can get the data they need and where
to send updates. That's about it. It can be helpful if they know business flow
(not necessarily logic).

~~~
ajacksified
They don't need to have the schema memorized, but they do need to know the
path the data takes from the database to the front-end to appropriately
optimize how the front end receives and displays the data; for example, to
properly implement Backbone, you want a RESTful API. Is this available (or
achievable if not)? You have to know your capabilities in order to
appropriately choose a pattern or framework.

You're involved- or should be involved- in coordinating with back-end
developers on the interface from the front-end and the back end. The
implementation of that interface depends on the structure of the underlying
system; different databases, such as document-based vs relational, can have
subtle differences in how your interfaces are implemented and effect the
flexibility of said interfaces.

~~~
Zimahl
You only need to coordinate inputs and outputs. If you need to coordinate more
than that you've probably got a very coupled system. Especially with web
services - REST, SOAP, etc. - who cares if the front end is connecting to a
Java application or a .Net application? Who cares if what the FE dev is
building is IOS, Android, JSF, Spring, Flex, etc.?

If it's done right, all the details can be (and should be) abstracted away
from the FE.

~~~
ajacksified
My entire point is - who defines this REST / SOAP / "who cares" layer? If it's
strictly back-end engineers, front-end interoperability is not represented. A
FE engineer involved in the development and maintenance of this API layer
ensures that concerns are effectively recognized - which requires an FE
engineer who knows the whole stack. Yes, these details should be abstracted
away from the strict implementation of the actual FE code, but that API has to
be created in concert.

~~~
Zimahl
_who defines this REST / SOAP / "who cares" layer_

Definition of an API isn't about knowing the 'entire stack'.

A front end dev will need to understand the structure of the API and present
needs to whoever is maintaining it but it doesn't matter what the API is coded
in since that is most likely abstracted away via the different service
interfaces.

Frankly, other than what they are developing the front end in, the only aspect
a dedicated front end developer needs access to is the document describing the
API so they can make changes there and get their needs to the API owner.

------
j_baker
I wish this post had a _little bit_ less dramatic headline. It makes this post
sound much more inflammatory than it actually is.

~~~
allenc
Yea, my fault; I had written something more inflammatory, but after a bunch of
edits I had moderated my tone once I realized I was just ranting against bad
FE candidates I had interviewed.

------
pdenya
HTML/CSS is a small piece of a stack that is fairly easy to pick up. There are
hardly ever reasons to hire someone who is FE only (at small companies) and I
often find that people who are FE only don't have the kind foundation that
would allow them to venture into complicated JS code.

The author seems to be implying that SEs given front end responsibilities will
struggle with them but that's only true in the way that they struggle with
anything else new (the struggle is short lived because we're talking about
markup with quirks).

Also, OP, if you read this, your footnotes link to the original text but it's
covered by your huge fixed header.

~~~
allenc
Ah, thanks - I guess I should just get rid of the fixed header...

But to your first point, I don't think it's just learning HTML and CSS syntax.
For example, I've never seen a SE break out XScope and measure the exact
pixels between two elements, obsess about the opacity of a drop shadow, or
spend a few hours to tweak the bezier curve of an animation. It's like saying
that SEs will just struggle with design initially.

------
fghh45sdfhr3
I could not continue reading after the author started apologizing for the
_computer-science-heavy interview_. Simply put, if computer science heavy
questions bother you, you are not an A player.

~~~
Zimahl
_Simply put, if computer science heavy questions bother you, you are not an A
player._

And herein lies the problem - the hubris of a SW Dev. So often the more
artistic-leaning FE Dev is interviewed by the more pragmatic-leaning SW Dev.
The software dev starts asking questions about recursion and collections and
then labels the FE as a terrible developer.

What you have to understand is that FE Devs don't care about that stuff. They
aren't trained in it, they aren't interested in it. They have a completely
different domain knowledge than the SW Dev and that's fine. It's not worse,
it's just different.

It doesn't make them a non-'A player'. They could very well be an A player in
their particular domain. Watching a good FE Dev sling HTML/CSS/JS is a thing
of beauty. It's not as easy as a lot of SW Devs think it is.

~~~
fghh45sdfhr3
_It's not worse, it's just different._

Many SW Devs are great at creative front end work. Many FE Devs used to be
amazing back end Devs. Many Devs don't care what end or language they work in.
Those are A players.

If you've just never worked with a single particular technology, that's fine.
If on the other hand you have never touched a lot of technologies.... probably
not an A player. If you don't know anything about recursion, you are
definitely not an A player.

Frankly, I find saying that FE Devs shouldn't care about recursion insulting
to FE Devs.

 _Watching a good FE Dev sling HTML/CSS/JS is a thing of beauty. It's not as
easy as a lot of SW Devs think it is._

If they mess up fundamental computer science concepts while slinging JS
around, it's gong to be painful rather than beautiful to watch. And I make no
claim it is easy. JS in particular is lovely programing language liked by many
SW Devs.

~~~
Zimahl
You're saying that just because someone doesn't have a specific set of domain
knowledge they can't be an 'A player' in the domain they do have knowledge in.
This simply isn't true.

Using an analogy, even though Tiger Woods and Michael Jordan play golf,
Michael Jordan can't be an 'A player' in basketball even though that's his
domain, not golf.

Are backend developers that have only a cursory domain knowledge of the front
end not 'A players'?

~~~
fghh45sdfhr3
_Are backend developers that have only a cursory domain knowledge of the front
end not 'A players'?_

I would say that if have no interest in what is literally half of the
internet, it does not matter how good you are at the back end, you are not an
A player.

And computer science isn't just another domain. We're not talking php vs
python here. This is about the fundamental nature of the work you do. Yes,
even as a JS slinger, you still have the exact same computing fundamentals to
deal with.

It's not like basketball and golf, it's like basic athleticism. No you can't
be an A basketball player if you don't have a minimum of athleticism. And the
same is true for almost all sports.

The fundamentals of computer science are to developers like cardio is to
athletes.

~~~
Zimahl
_I would say that if have no interest in what is literally half of the
internet, it does not matter how good you are at the back end, you are not an
A player._

There are very few people who could have enough knowledge of all the domains
of CS to be an 'A player' in your definition.

 _This is about the fundamental nature of the work you do. Yes, even as a JS
slinger, you still have the exact same computing fundamentals to deal with._

Not sure if you are literally targeting me, but I am a backend developer who
does a fair share of UI. I frankly despise JS but live with it nonetheless.

------
dredmorbius
In the "irony is ironic" department, we have a site with a low-contrast
text/background combination. Readability Redux FTFW.

Which is more about Web design than FE, but still.

------
ehosca
what was the point of this article? Where's the hubris? Bunch of incoherent
sentences strung together meandering around a non existent point that is never
made.

