Ask HN: What is the minimum level of experience needed for a web developer?
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 ] threadPutting 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 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.
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 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...
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.
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:
If they can write javascript without a framework, thats a bonus. If they understand design patterns, thats a bigger bonus.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.
"but hese terms are ambiguous and hard to interpret"
It happens to everyone...
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.]
I am personally interested in what you really mean by 'passionate.' This is one of those words which is used very vaguely...
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)
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.