I intend on hiring 2-3 junior programmers right out of college. Aside from cash, what is the most important perk for a young programmer? Is it games at work? I want to be creative... I want some good ideas
In my experience, good programmers want to program with as few distractions as possible. Some of these are more relevant to big companies, and I'm not sure where you work, but here are some examples:
- Casual dress code: Young programmers in particular will have a tough time avoiding resentment of a strict dress code. "I'm just going to sit at my desk all day--why do I need to wear slacks/polos/other uncomfortable business clothes?" In my opinion, this is half rebellion and half honest productivity-seeking: It really is much easier to program in jeans and a t-shirt than slacks and a formal button-down. The question you probably need to ask yourself is if the potential productivity gain and morale boost is worth the potential loss of "professional" atmosphere. It all depends on your situation... there are startups and Fortune 500 companies out there which allow jeans & t-shirts.
- Few meetings: Almost nothing is more distracting than a constant stream of meetings. Try to avoid team-wide "status meetings" that could be carried out via individual e-mails or conversations. Programmers like it when their employer lets them program.
- Experienced coworkers: Good programmers want to improve. If any of your other employees have contributed to big open source projects, or have worked individually on some particularly successful internal projects, let your prospectives know!
- Private offices: This is rarely practical anywhere but venture-capitalized startups, but if you can offer candidates their own offices, they'll leave the interview with hearts in their eyes. Programming is so much easier when you aren't distracted by foot traffic and people singing happy-birthday one cube over.
- Cool stuff: If you can afford it, subsidize games for lunch breaks and post-work hang out sessions.
- Best practices: This will ensnare good programmers and intimidate less experienced ones: Show that your candidates will be working with reliable, sane version control, and that there are coding standards about unit tests or inheritance or anything. Organization is important.
- Don't nickel-and-dime: If you can be flexible with hours, do it! No one likes having to clock out every time they go to the restroom; it feels like you're not being valued as an employee.
- Dual monitors: Instant win for almost any programmer who's worked with dual monitors before.
- Admin rights to their PCs
- An internet connection that's not gimped by bizzaro proxy rules
- Dual Monitors
- Work from home privileges
A soda fountain (not a drinking fountain that dispenses soda instead of water ala Brawndo, but like you'd use at the Taco Bell to refill your drink)
The opportunity to work alongside experienced programmers.
I always love going to conferences and training and consider that a perk. Not all companies pay to have their devs continue to learn. There's always more to learn. You benefit because they are learning more. They benefit from that too, but also have fun and get away from things for a couple of days and get to mingle with other devs.
Give them each a budget and let them configure their own computer setup. Make them submit a plan for what they intend to purchase. Talk over the plan with them. It will be a great way to kick things off.
Give them a budget for a cell phone and unlimited plan that the company will pay for.
Pay for their home Internet service.
Little things like these they will show their friends to the response of, "Cool - I wish my company did that!"
The type of people you'd like to hire tends to be a first-order concern when deciding what sort of perks to offer. For the programmer who's thinking about or in the process of raising a family, paternity leave, company matching of adoption funds up to $X/year, flexible vacation and working hours, and a sense of job security may be much more attractive than a soda machine and free Segways for all. You mention that you're looking for "junior" or "young" programmers, but many young folks do still fall into this category.
I sense, however, that by "young", you might mean "too young to be into that whole 'work-life balance' thing". Let's call this 'The Google Strategy'. The idea here is to make it so it just doesn't make sense to their analytical minds to ever leave work. Have on-site services like free food, drink, and laundry, provide gathering places for informal conversations. Make them feel like they're the rock stars of the company, and they'll repay you with long hours and hard work. The good news for you is that these types of perks don't cost you much at all relative to the increased hours they'll be willing to put in. The bad news is that this model tends not to be sustainable, and this dot-com era "irrational exuberance" no longer satisfies your programmers when they start to want to take vacations, get married and go on a long honeymoon, have kids, and so forth. At that point, they want flexibility, more vacation time, a 401k, etc. Besides the first one, these all cost significant coin.
Here's the most important point though: if you'd like to hire the absolute brightest people you can find, don't try to outsmart them. Odds are, the really sharp ones will be a little less interested in the size of the Free Red Bull Fridge and the number of air hockey tables at their disposal, than whether you'll value them as an asset to the company and as an individual (both in terms of compensation and employer/employee relations in general), whether you have a sustainable business model/plan, whether your work really excites them, and whether your work really excites you. I'd suggest reading a couple essays on Joel On Software, he treats the subject of hiring good programmers in a fair amount of detail ("Smart, and Gets Things Done", I think, is the name of one of the essays).
While your question certainly isn't without merit, and providing a work environment with some of the same perks as your competitors will make your sales pitch somewhat easier, the only people that will be truly swayed by these kinds of things are not the people you want the success of your small company to depend on. Good developers want to feel like they're making a contribution to something that matters, like their skills are valued and put to good use, like they are responsible to their peers and to themselves. Focus on having a truly great, dynamic company that does great work, and that treats its technical people with respect (things like private offices help here, too), and you'll really attract the type of people you're looking for.
(Thanks to Thomas Kammeyer for a tip on the last paragraph!)
Two flat-screen monitors, an optical mouse -- two things I don't currently have -- and each their own whiteboard with a few markers.
Being able to work remotely + flexible hours, Tech books give-a-way, and lots of love!
A boss who would ask this question.
Philip Greenspun wrote about this once. He suggested making the office a better place to be than home, which is easier for young programmers. For example, domestic hardware that someone living alone cannot justify: expensive coffee machine, pool table, huge TV with DVDs to watch.
Make the office more sociable: put beer in the fridge and have a drink together at the end of the day. Provide better food (easy for people who can't cook): get deli deliveries or a caterer.
Casual dress (for voting)
give them responsibilities and some degree of freedom.
make them feel like they are developing something for themselves, with passion
Work from home. (for voting)
Private offices (for voting)
be flexible about the starting hour.
I'm currently slightly experienced but I still call myself junior. Here is what I appreciate of my employer:
- Buys me books. I have a diverse taste from C# to perl to C to Asm to database design to tsql etc. Book prices vary from $20 to $50. This usually requires a PO and approval and such.
- Allows me to critique current projects. I've re-written a few project to be MUCH cleaner through the experience I gain. Each time I document why I made those changes. Every now and then I re-write my re-writes. It's amazing to see how much you change. I do this one on my own. I initiated it.
- A fast computer and a 24" monitor. This actually helps a lot, but for any developer. Less frustration and more code on the screen. Monitor also rotates for those kinds of days.
This is a sort of negative answer.
Don't give the office more entertainment than home. No TV, video games or beer. The office is for work and that is why I go to the office. I go home for video games and TV.
Don't bother with team outings. It's not relaxing. It's just more work. If I wanted to go somewhere to have fun, I'd go there with my own family or friends. Or I would stay home and sleep late. No doubt some people believe everyone else in the office wants to be friends and spend all their time hanging out. It isn't true. Sorry.
The same is true about company meals. I like to go out and away from the office for lunch and dinner. If there is a lunch meeting at the office, I will be making plans to leave work an hour early (with exceptions for crunch time, which had better not last more than a month or two out of each year.)
I'm surprised the cynics amongst us haven't said 'non brain-dead leadership'!
Attracting young people with toys is a bit patronising, better to say:
"Yeah so we could offer you lots of new shiny toys, but how about we guarantee you no PHBs instead?"
Invite your whole team to the restaurant of their choice every Friday for lunch. A former boss of mine used to do just that and it really helped team bonding.
If budget doesn't allow it, you can do it once every two weeks or once a month. But think of the value of having closer team members.
Programmers need vacation. Lots of it. Four weeks a year to start. Minimum.
Therefore all things whatsoever ye would that men should do to you, do ye even so to them: for this is the law and the prophets.
The most righteous of men is the one who is glad that men should have what is pleasing to himself, and who dislikes for them what is for him disagreeable
Confucius - Analects XV.24
Never impose on others what you would not choose for yourself.
A career path. Not that they necessarily have to follow it, but give them the thought that they don't have to be a junior forever, and show them that there are opportunities in the company. Give them an idea of what it takes to advance.
Good hardware: I'd be very interested if I was told that I would get a desktop system (WinXP is still my system of choice) and a Linux server box. Something I have root on and can run services on (local at a minimum, world visible would be nice.) A Virtual private server in the company data center instead of dedicated hardware would also work.
Another thing that would be nice would be access to good references: "We will buy you any books that are apropos to your job!" same with software to some point, "if it's under $60, we will just get it."
Edit: large screenS on pivot stands, good chairs, white boards, etc.
Lets them, on company time, do some private projects (things that could be useful for the company, but things they get to pick)
Actually, Joel Spolsky has a really good article on this subject that I refer to from time to time:
EDIT: I read Joel's book on hiring devs, Smart and Gets Things Done. In the book, he says that this article is an embarassing bubble-era relic and he has learned a lot since then. I don't think the blog post is all bad, but it's true that the book is a lot more sophisticated.
Treat them as peers
The access to training and mentors. The things that Junior developers want is pretty much what every programmer that I know wants. They want to work in a relaxed and flexible environment with people who are at least as smart as them if not smarter. They want to feel like they are a part of something. They want to constantly be learning.
Make sure that you have a training/book budget. Make sure that they are always learning and always have something interesting to work on. Make sure that you do team building or some kind of thing like that on a fairly regular bases. Lunch and learns are an increasingly popular tool these days.
One thing that Junior Developers might like more than more Senior developers is the use of cutting edge or even bleeding edge technology. Be careful about this one, cause it can byte you in the butt, but it always helps.
- Casual dress code and office environment
- Flexible hours
- Allow listening to music while working (earphones allowed)
- Multi-monitor/powerful workstations
- Skilled/experienced co-workers/bosses
- Code reviews done by those co-workers/bosses
- Being able to work on creative projects that they come up with, and having them reviewed by those skilled co-workers/bosses (Most valuable perk!)
My company has purchased an O'Reilly Safari Online account for each of our developers. I have access to thousands of books online at any time.
We also have training videos available at online from CBT Nuggets but I find their content limited.
Quality Coffee in-house.