Ask HN: What is the minimum level of experience needed for a web developer?

11 points by ruswick ↗ HN
Hi HN. I've been doing web development for a while now, and consider myself to have a moderate amount of skill. However, after months of looking for an internship, I had very little luck, and was turned down for every paid and most every unpaid internship I applied for. I can't imagine how difficult it must be to get an actual job in web development. The problem is that most listings provide very little in the way of requirements, and look for "ninjas" or "rockstars" and want "a background" in certain things, but hese terms are ambiguous and hard to interpret, and I often don't know what they expect. When you are hiring web developers or interns, what do you look for and what are your minimum requirements of their skill set?

22 comments

[ 5.5 ms ] story [ 57.3 ms ] thread
I'm in the same place as you. I've been trying to break into web development for over a decade. The only thing that worked was to accidentally walk through the wrong door and have a chat with people who, it turns out, were looking for a web developer. After finishing the project and coming away with a good reference, I still don't have enough experience to get into the few entry-level web development positions that exist, let alone the more common senior positions. There are too few openings and too many competitors.

Putting myself in the position of a recruiter, I would expect any web developer to know the names of the five major browsers, how to use the w3c validator and why, when to use different image formats and how to optimize them, some CSS, how CGI works, enough jquery to select an element, and a server-side scripting language, and to have once sniffed an HTTP connection to see what was happening. The better class of web developers at the entry level might know why to use SCP instead of FTP, common web security concerns, how to build a page that uses Javascript but does not require it, shell scripting, system administration, web server administration, what a SQL join does, how HTTPS works, how DNS works, how TCP/IP works, and a development framework or two.

I think you need to know a little more technical stuff to get a job now in days.

I think that an entry level developer should know a language and framework well. Enough RoR to build produce a few sample websites, pretty easy thanks to places like Heroku. Maybe a few python programs each a coupe of hundred lines long to show that you can structure large programs and know how to integrate various libraries. The kind of programming projects that take 100+ man hours.

I don't mean to be rude, but in my opinion, your second paragraph describes a "power user" or "web hobbyist" rather than a developer. It's one thing to know "how things work" (reading wikipedia can teach you that much), and another to make things work (experience).

Most businesses look for people who can deliver a product (technical skills), work in a team (human skills), and improve over time (potential). I think your application should be able to show you got those points covered:

1- Deliver a product:

Easiest way is to use previous experience at a different jobs. If you don't have that, it's as valuable to show personal projects you brought to completion.

2- Work in a team:

They'll usually get a feeling for that in person, just be cool, respectful, and communicate well ^^

3- Potential:

Show passion, you do what you do because you love it. You learn new technologies, try out new frameworks/patterns/ideas out of pure curiosity. The industry is moving and changing very fast, you need to show that you can keep up with it. In a way, personal projects can help point 1 and 3).

If you have those elements already, make sure you're selling yourself properly to recruiters. If you don't, fill in the gaps :P Hope that helps.

I'm not trying to be rude, or condescending, but if you've been trying to break into web development for over a decade you're doing something wrong. It could be that you haven't learned how to get hired.

I am convinced, I could take someone with no experience, but could pass the test mentioned here[1] and give them assignments every week and in six months they could get a decent programming job.

[1]http://www.codinghorror.com/blog/2006/07/separating-programm...

If you aren't really good in the interview and you don't have a lot of experience on paper then it is really immaterial how skilled you are because nobody is going to actually test that.
maybe tell us what your skills are, so someone can point you in the right direction.
Most of what I've learned has been out of necessity because I'm building something. My strongest suits are CSS3, HTML, JS. My current internship is working exclusively with these. I know JQuery to a moderate extent, but I tend not to use it if at all possible: most of it is more easily replicable in CSS or is less efficient than pure JS. I haven't had a reason to learn Rails yet. I took a brief look at it, but the whole thing looks monolithic and seems like overkill in many cases. I use Sinatra for most of my web apps. I've use Redis and Mongo for dbs, and am trying to take a stab at learning Postgres. I also know Ruby. My knowledge of system administration extends to deploying a Rack app on Heroku.
If I undestood well what you are trying to say, your comment about jquery and css is a bit worrying, because it implies you think jquery is a visual effects library, while it's much more than that and by avoiding it you are probably just missing the point of using it. DOM manipulation fax exceeds stuff that is considered a cool effect you can replicate with css3. Maybe you just worded it badly, but even if, it still doesn't look good.

The above can be one reason why you probably missed some internships, but nothing is lost. If you want to progress you should refocus a bit on acquiring more general knowledge about, well, how sausage is made, and from there take a path towards the stuff you really want to do. I'm not implying you don't know any of this, just saying that "My strongest suits are CSS3, HTML, JS" isn't a great selling point for a hire, and from my personal experience with people I had to work with on projects, coders that market themselves as 'html/css guys' aren't really that great at actually helping me build websites. Why, you ask? Because working strictly on decorating front-end doesn't give you the experience of how products are developped in the long term, and it really narrows your point of view on about what you should expect to happen in the process (I'd have some horror stories to share, but that's not the point right now). Second, if I asked you why you used mongo or redis, and why you don't know sql, would you know how to answer so I don't think you just grabbed the latest tech of the week popularity contest winner? Maybe you would, but you should get my point by now - your description of the stuff you can do is weak.

You will have more success when you'll be able to convince with certain truthfulness that you know the basics of how web software works, how certain technologies interact with each other, that you have experience with tools, and that you'll be a helpful pair of hands willing to learn and not an obstacle - selling as a css magician just doesn't do that. To get experience, you probably need that awesome internship, but to get that internship, you have to convince your employee that you have done your homework.

Before you are a rails-sinatra-ruby-mongo-redis-jquery programmer who prefers tech A over tech B because X and Y, you are a programmer. Are you? If yes, tell it. If not, start working on being one.

> My current internship is working exclusively with these

Tell them you'd like to expand your experience. Ask them to move you to work a bit closer to the backend guys if it's possible. Even if it doesn't happen right now, they will know you want to progress and not just sit there.

Many smaller shops will hire you based on what you have done, not your years of experience or eduction - build something with a database, admin area, front end.

It doesn't have to be beautiful but it should be functional. If you can have done this, you can find a job. We've been hiring for six months in Minneapolis and I've lost track of the number of candidates who don't understand SQL injection, password hashing, MVC and other web development basics. I've even had two who couldn't write the simplest of programs (think FizzBuzz. Actually I gave one of them, literally, FizzBuzz. )

I can't speak to interns but I expect web developers, even entry level ones to be able to:

    * Slice a PSD into HTML/CSS 
    * Build a site with a MVC framework
    * Write SQL without an ORM.  
    * Write SQL with an ORM.
    * Be able to implement pre-written jQuery plug-ins
    * Be able to write custom jQuery plug-ins
If they can write javascript without a framework, thats a bonus. If they understand design patterns, thats a bigger bonus.
When doing hiring I want to see evidence that you are a web developer. Acronym soups on a resume are irrelevant by themselves since everyone does that. Quite simply you need to have a portfolio that substantiates your list of acronyms. You can bet I will do a view source and view network traffic on it.

What is important to me is also that developers communicate well. In an interview I put them in front of the whiteboard to explain something they claim to know well from their resume, looking at the communication.

You could do that sort of thing in advance by writing a series of blog postings, for example showing how you came up with the top level design and implemented one of your portfolio items.

Attention to detail also matters and is a strong signalling mechanism. For example your text above has a spelling error that is picked up in Firefox and Chrome.

To what error are you referring?
Here is the typo to which I believe he is referring:

"but hese terms are ambiguous and hard to interpret"

It happens to everyone...

Honestly, if a spelling error picked up by a browser casts a negative shadow, or reflects an inability to pay attention to detail... sigh.
Why sigh? Spell check is free and ubiquitous in this day and age. If someone is writing to a potential employer and overlooks that squiggly red line telling them something is potentially wrong, why should I believe they won't also misspell a variable, use = instead of ==, or overlook important compiler warnings?
Not to mention this example is in your face. For most attention to detail issues there isn't an obvious red squiggly - instead you actually have to pay attention to detail.
1. Information Architecture

2. Developing Modular or Social Code (OOP techniques for a wide range of tech stacks/languages, SCM; git, SASS, LESS, e-mail inliner tools, etc.)

3. Execution of a Design [markup thinking (HTML, etc.), presentation organisation (CSS)]

4. Frameworks [etc.]

5. Optimization and Browsers [JS, SPDY, HTTP, etc.]

6. Documentation and Authorship of... [take a logic class]

7. Research [finding the right tools, knowing which tools are relevant]

8. Interaction and Games [I mean really, we're already talking about hooking up links to events in games like WOW. So, yes, even a designer needs to understand why he or she is providing error message alternatives in mock-up.]

9. Working with Humans [Humans often are not within cognitive or linguistic capacity to express sincerely what they want when it comes to complex interactions between data or programmatic objects. It takes serious effort to develop actionable content from phone calls or meetings, which can be incredibly impromptu. Social setting, dispositional factors, intentful listening, dialectics, etc. should be considered.]

Should me examples of your own work that you're passionate about. Simple as that.
Insofar as you are speaking as someone who does hiring, it might help people if you give an idea of your 'grading rubric' for work someone is passionate about.

I am personally interested in what you really mean by 'passionate.' This is one of those words which is used very vaguely...

Being self taught, and now being in my second full-time position which has only been a progression upwards (in terms of skills gained/used and salary), I guess I could tell you what worked for me as a front-end developer.

I was fortunate in that my first job came to me, but that was only because I had a portfolio online and I had put it out there on linkedin, Twitter, various job sites, etc. My second job was posted on Google Groups, and I reached out to them to apply for the position. I got the job, and I'm happy where I am ever since.

Have evidence of your skills -- be it an online portfolio, some code examples that you can explain/demonstrate, or evidence of contributions to projects and a working knowledge of the technologies you need.

Have evidence that you're able to deliver -- it's okay to be working on your own website on and off for six months, but in the 'real world' there are deadlines. Have some evidence that you're able to work to deadlines.

Be passionate about the kind of work you're wanting to get in to. -- If you're not working on your own projects outside of work, you're not passionate. This isn't just a job to pay the bills.

Specialise - There's no benefit to being 'okay' across the board, nobody will take that seriously. Any good company/startup with an idea for the position they're trying to fill will want a specific set of skills. I went from being a 'web designer' in my previous job (which was a broad term that encompassed anything from creating HTML emails, resizing images, writing jQuery, fixing cross-browser bugs, writing batch scripts to parse xml/xslt with saxon, writing bespoke PHP/MySQL applications, etc.) to being a 'front-end developer' in my current job (which means I'm focussing more on css/html/javascript, championing these areas in the application/website the company is building, being the 'go to' guy for queries regarding these areas, working with designs designed by a designer, and working with a back-end/processes put together by our back-end developers).

Be able to demonstrate or put across that you're able to work well, and work well within a team.

Besides that, I'd say some basic skills for a front-end developer are:

- able to craft valid HTML

- know your way around CSS quirks and how to fix them, especially cross-browser quirks.

- write well-formatted code

- be familiar with CMS/templating engines. If you're familiar with variables, condition statements and for-loops in one language, you should be able to pick up most templating engines.

- know your software and be able to justify your reasons for using it over other software

- know the major browsers.

A lot of teams these days are using Agile/Scrum methodology for development, so having some understanding or working experience of using Agile might be useful depending on the job you're going in to.

Don't worry if you don't have all of the skills necessary for a job, in many cases not understanding a specific library/language isn't an issue providing you have some equivalent understanding of another language and are able to learn. Some personal examples:

- in previous job I hadn't used XSLT at all before starting there, but I had an extensive knowledge of PHP/Wordpress templating, so getting used to the syntax of XSLT wasn't very hard, and I picked it up in a week.

- in current job, I had no prior experience with Django but again using similar templating languages in the past helped and I've had no problems. (Also for some side projects such as my personal blog, I use Jekyll which uses liquid-tags similar to Django templates, so that skill has improved/carried over)

Folks looking for web development work in the U.S., and are willing to move, should do some job searches in the Washington, DC area. There is a major demand in particular for Drupal developers, as more and more cabinet agencies and trade associations are switching to that CMS. But in general open-source web dev is booming. It seems like almost every large dev shop and PR agency I've talked to (and I talk to lots of them) are hiring developers right now.
Learn by doing. Make a profile on something like Elance, convince 1 person to pay you (dirt-cheap, will take 20+ bids) to build a basic site. Start with wordpress and move up, gradually increasing you skills, prices, and clients.
When I interview potential co-workers, I usually have a few criteria. In order of importance:

First is personality/culture fit. We don't have to be BFFs, but I need to know that you can get along with the rest of the team. If I hire you, I'm going to have to work with you for the next few years. My ideal team member is smart, respectful, and can take a joke. Can you disagree with people respectfully? Can you admit when you're wrong? Even more importantly, can you tell me when I'm wrong?

Second is willingness to learn. In a given year we might start out building a Rails app, switch to another project building an Ember app, write a backend service in Java, then finish off the year with an iOS app. I don't expect you to know how to do all of those things, but I need you to be willing (and excited) to learn a new technology when the need arises.

Third, and this is a somewhat distant third, is all the stuff I told you I needed in the job listing. Most of the stuff that I claimed to need is actually negotiable, even if it didn't sound negotiable in the ad. I'd sooner hire someone a bit more junior than I'd like if they surpass expectations on the first two criteria.

Don't worry too much about the job listing. Get in there and scedule an interview. What's the worst thing that can happen? It's not like they're going to stab you because they wanted someone with more experience.

Your best bet is to make some friends in the software development community. Find out where the nearest user group or meetup is taking place. Chat with some people, make a few friends. A lot of them will have leads on a job, whether you're looking for contract work or full-time. Maybe their company is hiring, or they've got a friend who needs a junior developer. Maybe they're fully booked with consulting work and they can toss you a contract from their backlog.

I've gotten more jobs given to me by friends and past co-workers than I can even begin to recall. Just remember to return the favor. When a job offer comes in that you don't have the capacity to handle, pass it on to a friend.