Today, Rebecca Murphey wrote a post called "A Baseline for Front-End Developers". The post had some good advice, it was well written, and it was well received, judging from the comments.
Something about it really didn't sit right with me though. I was very uneasy about it, and I didn't know why until I thought about it on my bike ride home from work.
Here's the essence of the problem: THEY STOLE OUR WORD!!!!
What is a "Front-End Developer"? #
Frankly, I thought I already knew. After all, the terms front end and back end have been bandied about for at least a couple decades now. To make sure I wasn't deluding myself, I turned to Wikipedia:
"In software architecture there may be many layers between the hardware and end user. Each can be spoken of as having a front end and a back end. The front is an abstraction, simplifying the underlying component by providing a user-friendly interface."
"In Web content management systems the terms front end and back end may refer to the end-user facing views of the CMS and the administrative views respectively."
"For major computer subsystems, a graphical file manager is a front end to the computer's file system, and a shell interfaces the operating system — the front end faces the user and the back end launches the programs of the operating system in response."
When I read the various definitions, one thing seemed very clear to me: a front end is any user-facing view. It is the layer of software that a human must go through to use a larger software or hardware system.
So, by definition, a front-end developer must be someone who develops, scripts, programs, or codes a user interface. which is a pretty broad job description. By contrast, Rebecca gives a pretty narrow list of technologies and skills that a front-end developer must possess.
Guess what, though? There is nothing on her list but web technologies. More specifically, it's all about HTML, CSS, and Javascript. Maybe I'm right, maybe I'm wrong, but more to the point, we're talking about a very specific, though popular, subset of HTML usage. Rebecca isn't alone, she just seems to have encapsulated very well what I'm seeing in blogs, job postings, and more about the role of Front-End Developers. Honestly, I'd call what she defined as Front-End Developers (for lack of a better word), boutique web developers.
The boutique web is a subset of smallish-scale sites that are quite attractively designed and use the latest HTML5 fantasticness. Its developers are striving for pixel perfect designs and may have some sexy animated jQuery widgets. Lots of money is being poured into this area right now given that people are running away from Flash . . . you know, the technology that we used to do boutique websites with.
I might be pigeonholing front enders by calling them boutiquers, but think about the following types of sites:
- Wikipedia - Awesome site, but not very attractive. If you're using your pixel perfect CSS skills or a CSS preprocesser and you work on this site, you're probably just extremely bored with your job. The interesting and fun work here is probably on the back end, dealing with big data.
- Any newspaper site - A horrible mess. I'm not so sure these people don't just copy and paste code in there and hope it works.
- Games - There's a wealth of specialized knowledge in this area. Does a game developer need to worry about stylesheets at all? No. Collision detection, physics, game theory? Yes.
- Video - We worry about the video tag, encoding specs, ad networks, reporting networks, etc. Javascript is king here. Who cares so much about CSS and HTML?
- Enterprise applications - There's a whole other level of abstraction here. A number of large-scale applications are built with Java with GWT and compiled down.
Do many of these skills overlap with Front-End Development? Sure. But we're talking definitions here. Developers are awesome and adaptable, so I can't pigeonhole them, but I can try to pigeonhole the term front-end developer. I think the baseline for front-end developers is geared towards boutique sites and only those that use HTML, CSS, or Javascript . . . and probably Ruby on Rails.
Again, the people with these skills and passions are awesome, but it's a little confusing for people like me who have been developing old-school front ends since the late 90s. I really thought I could include myself in the front-end cool kids club, but I don't care about semantic markup or CSS preprocessors.
The Other Front Ends #
There are TONS of other things I consider to be front end. There's Flash, Corona, Android, iOS, OSX, Windows, 3D games . . . the list goes on and on. Even inside the HTML/CSS/Javascript stack, there are other front ends I mentioned like games, video, and enterprise applications.
What do you call those developers? Well, lots of folks say, "I'm an Android developer", "I'm a C# developer", or "I'm a Corona developer." I find those to be a little narrow in scope, though. I definitely got burned calling myself a Flash developer when Flashageddon went down last November. I don't want to make that mistake again, tying my professional identity to a specific technology. Technology changes, evolves, and falls out of favor; unless you feel like rebranding yourself every few years, it might be wise to come up with a broader term for what you do.
Before reading Rebecca's post, I thought front-end developer was a pretty decent broad term! I felt I could associate myself with it. After all, I really enjoy pushing graphics around and making users happy. But it turns out I can't, or rather, I don't really want to. If I'm reading Rebecca's post right, a front-end developer is more of the same. You're tying yourself to a specific technology, or rather, three of them. Yes, it's totally the hotness now, and it's been around for a while. You'll probably have a place in the world for the next 15 to 20 years if it's all you do and you keep up with the trends. But new hotnesses will inevitably come along, and HTML, CSS, and Javascript might get a little stale even if they're still relevant.
If I don't identify as a front-end developer, what can I identify as?
The Creative Developer #
So creative developer is a term that I came up with on my own, only to find out it wasn't original in the least.
I occasionally listen to the Creative Coding Podcast. Both of the hosts, Seb Lee Delisle and Ian Lob, identify as creative coders. I have a feeling they dumb it down a little to be more approachable, but the perception I get from them is that creative coders sort of copy and paste code and tweak it by trial and error until it meets their needs. There are also folks calling themselves creative technologists. The impression I get from these folks is that they might be all sorts of brilliant but don't necessarily code at all.
I work with a bunch of people that call themselves software engineers. BORING. It evokes the right tone of capability, but I just don't prefer huge projects where I take data, manipulate it, and move it around. I like a little more razzle dazzle. I like getting in front of users, creating nifty things that people can see in front of their faces. I like doing things that make noncoders go "WOW!"
So I took the creative part, since I like making creative applications, and I put something after it that evokes a little more confidence in building a software solution. Hence creative developer. But again, after I coined the term, I saw blogs and job postings for creative developers. Cool! But what IS a creative developer? What is our baseline, as Rebecca outlined for front-end developers?
A Baseline for Creative Developers #
I think that a baseline for our type of developer isn't so easy. You should probably know a lot, or at least not be afraid to learn a lot. Get to know a lot of different techs. Here are my suggestions:
Front-End Developers Are in Demand
What Rebecca said? Yeah, learn most of that. You should probably be a competent front-end developer because that is what's going on right now. Personally, I don't know in what universe I'd think CSS preprocessors are useful for my daily work. But whatever tech you don't learn on Rebecca's list, you should be able to talk intelligently about.
Get Linux
The biggest realization I had last year was that if you use Windows, you're at a disadvantage. It's not something you can't overcome, but make things easier for yourself -- dual boot Linux. If you want to make Jesus cry, fine, get an Apple. The only thing making me wish I had OSX right now is that I need to switch OSs just to boot up Photoshop or Illustrator.
Do the Mobile Thing
You should also do some mobile, of course. Phonegap is taking the easy way out. Useful yes, but learn some native development. Objective C and Java have their quirks, but they don't seem too bad.
Don't Forget Flash
Flash, on a technical level, is pretty awesome. AIR + Flash, like Phonegap, is taking the easy way out, but it's still awesome. I feel very fortunate that I already know Flash, because I don't want anything more to do with it voluntarily. Taking development advice from Adobe is like taking religious advice from Heaven's Gate. But there will be work in Flash for years to come. Who knows if the doomsayers are right and it's dying -- but it's still useful today.
The Server Can Be Creative
I was so resistant to server-side tech for the longest time. After all, I'm a creative developer; I need some cool stuff on the screen to keep me occupied. I can do heavy lifting in the client -- it saves me from scaling my back-end architecture if people are doing something computationally expensive. Yes, clientside tech is slower, but it forces me to do some problem solving.
I was wrong and resistant for no reason. I dabbled a little with PHP just to get the job done, but it really wasn't fun. What's fun? Node.js is a freaking blast. People are so excited over it, and if you're not a server-side guru, everything in Node.js is new so there are no experts right now, just people having fun and getting awesome things done. It also has some very good conceptual parallels to other technologies like Python and Ruby. You know how the Node Package Manager works? Good, then you know conceptually how Ruby Gems and the Python Cheese Shop works.
Speaking of Python, learn it! Or learn Ruby . . . but I'm seriously turned off by Ruby developers claiming they are god's gift. I hope those that do are the loud minority, but it's really off-putting. If I were a real creative developer, though, I would probably just get over it.
Why is the server creative? Collaboration! Multiplayer games! Live video encoding! It's another tool in your arsenal. Also, the environment is a lot more mature than the clientside environment. People use languages in it that we really don't use on the clientside today. It will expand your horizons - - BELIEVE IT!
Learn C++
What is C++ good for? Everything. Remember what I said about learning the server because the client side is slower? You'll run into that less with C++. Chrome is leading the charge so you can run C++ in your browser. If you use Flash, you can use Alchemy (don't get me started on the Flash Premium feature debacle. Again, Adobe = Heaven's Gate). C++ will work on your Android phone, in your iOS application, everywhere. Bonus: You can learn leading creative coding frameworks like Cinder or Open Frameworks. A good basis in C++ will let you do some very cool, but very processor-intensive things.
Users Aren't Everything
With Flash and Javascript, I was stuck in such a rut. It felt like if I couldn't put it on the Web and let my legions of fans adore my work, it wasn't worth anything. Guess what? I don't have legions of adoring fans, and if I did, I should just freaking Vimeo or YouTube a shaky cam of my masterpiece.
This mind-set prevented me from doing some cool things with some very cool technologies. Why use OpenFrameworks if I can't run it on the Web? Tacocopters are cool, but I can't give tacos to everyone who visits my site!
Play around with stuff; you'll have fun and get some ideas. If you do anything cool, your fans will adore you with a YouTube video instead of a working demo in your browser.
The Physical Side
So there's the client side, the server side, and the PHYSICAL side! This is probably another term I'm coining that's in widespread use. Not everything you do has to be on a screen. If it does have to be on a screen, why not use a few projectors and a Microsoft Kinect? The Kinect is awesome, but explore Arduino as well.You can make some damn cool things if you don't constrain yourself to the screen and the Web. Remember, users aren't everything -- just put your masterpiece on YouTube.
Talk Big. Do Half of It.
There are so many cool things to learn. A few of the above items are a to-do list for myself. I'm getting into native Android development, iOS development, Node.js, Python, and lots of Javascript. I've been meaning to do C++, Open Frameworks, Arduino, and creative installations for some time. I hope to have time and opportunity to explore these techs, but it might not happen. That's OK; there are just too many cool things to learn. Try to get to at least half the ones on your list.
Sure I Can Geek Out, But Will I Get Hired? #
Short answer: Nobody knows! By all means, be a front-end developer and reach Rebecca's baseline. You'll look good to HR people and be better able to answer the standard front end interview questions. You'll be good for several years, I'm sure. But for me, those skills ares only part of my passion. Frankly, I'd rather creatively develop.
(note: the link above is a replacement link to another link that died. Someone representing html.com contacted me to offer a guide on their site. Normally I leave 5 year old posts alone...but they were polite, insistent, and their link seems to offer decent advice)
The fact is, we're seeing more smaller companies and startups bypass HR and recruiters. There are too many technologies to count -- if you don't know technology A, that's OK, you'll learn. The important thing is that you're passionate, driven, play well with others, and are proficient in something to prove you can be proficient in something else.
Also, there's a developer shortage. You'll probably be juuuuuuust fine.