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:
A quality chair
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!) http://www.joelonsoftware.com
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!
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. http://philip.greenspun.com/ancient-history/managing-software-engineers
A boss who would ask this question.
give them responsibilities and some degree of freedom.
make them feel like they are developing something for themselves, with passion
Casual dress (for voting)
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:
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?"
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.
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.
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.
Programmers need vacation. Lots of it. Four weeks a year to start. Minimum.
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. http://en.wikipedia.org/wiki/Virtual%5Fprivate%5Fserver
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. http://www.joelonsoftware.com/articles/fog0000000050.html
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.)
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.
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. http://safari.oreilly.com/
Mentors: Single greatest asset i was given. Someone who showed me the ropes, listened to me, took me aside when i messed up, explain why (not how) things were done. Someone who had knowledge of the product (not a HR/PR person), or could distill something in ten minutes or less. Sometimes new people are afraid to ask questions.
Goals & Salary: When your programmers start, have them write down three goals they'd like to achieve in three months. They don't need to be "climb mount Everest", "write a compiler" type goals. But They must measurable. It's a great tool to find motivated people.
Fitness Bonus Where i work, if you can accumulate 500+ km in one year biking to work, the company will write you a check for $500, just like that. It's great way to encourage this whole "being green" thing and helps relieve stress and saves money.
The Best Tools Provide programmers with the best tools. I can't tell you how much resentment I felt was I was told that VS2003 was too expensive, but all the sales staff had blackberries. It made me feel undervalued and i eventually quit.
Perk time Allow your coders 20% of there time to work on their own projects. It's a great way to spur ideas, and helps keep people motivated.
The opportunity to work alongside experienced programmers.
And also the possibility of learn from them.
Good PTO Program
Fun & Exciting Technology/Toys
Relaxed Work Atmosphere
A great idea would be to let all your devs design their own workspaces. Different people need different environments to be productive.
Give them the choice of tools as far as possible. I know it's not always possible, but I guess there is nothing more demotivating than forcing a Linux guy to use Windows, a MAC Guy to use Windows, or a Windows Guy to use Linux.
Of course that's not always possible, but also what about favourite email clients? Some love thunderbird, others outlook and others mutt.
In my opinion this will be great perks for new programmers. Though it would also be awesome things to have for any programmer. :)
On top of that there is an extra big plus for passing the Joel Test .
I am not too keen myself to give/have an own office. Mostly because lots of programmers are very sociable people, and it would be good to have some interaction during the day. However, that might just be a personal choice. http://www.joelonsoftware.com/articles/fog0000000043.html
Apart from the hard stuff like offices, tools, gear, food and snack I'd like to add something that makes me feel special:
Let your developers in on decisions!
If you're getting new tools for them, or moving or starting a new project or even hiring new people -let your developers in on those decisions. It's only fair you get a say in who your new coworker is or what the next big thing you are going to work for a few years on.
One way to do this is to conduct meetings in a round table fashion where you specifically ask every attending person for their opinion, not just let them speak up if they wish.
I can't get past the fact that new programmers should be paying us until they've learned enough to make themselves useful.
In medieval times, you had to beg and bribe your way into an apprenticeship at a guild, and then you had to haul firewood on your back for 30 years before the Master would even let you look at an anvil.
Overpaying junior programmers makes as much sense as small-market NBA teams drafting high school players. The money gives them an ego which blinds them to their lack of knowledge, and by the time they figure out how to be useful, they declare free agency and they're gone.
I think the biggest perk for a new programmer is when they first join the company they have a plan and know exactly what there career "road map" is.
When I first started my current job I was given some interesting work right from the start and I knew exactly what was expected of me. Other fresh graduates were left to school themselves up which ultimately helped them to loose interest in the work completely.
Other gimmicks like a big screen etc are great but they don't make a boring job any better!
There are a number of things that come to mind, and not even for junior people.
Good hardware (for voting)
These are all personal :-).
I don't care about:
Being a college student who would go for job in a few short years, I'd say it's definitely
Casual dress code
-- why does my dress matter when I can program good enough?
Mentoring -- some older, wiser programmers to guide you. I'd just have been out of college, used to having a professor around the corner or a TA to throw questions at.
-- I'd like to have people who will discuss codes after their job and not make me go to really stupid meetings that don't get things done.
Boss that understands programming
-- I've been surrounded by all CS people who think in similar ways and understand me. I'd want to have a boss to be similar.
Gym/Fitness membership... -- It just helps to vent off pressue of programming..
Some resources to work on own projects
-- I would want to do some of my own things, even after office hours if required.. I'd be glad to use to company resources.
Please please, root on my PC.. or admin
-- I know what I do, please give me rights..
One of these  would get me interested:
In my opinion, the best perk a new programmer can have is a good mentor who is extremely knowledgeable and understanding.
Be flexible with office hours. If a programmer gets his best work done between 1:00pm and 10:00pm, or he has other classes or some other reason to need flexible hours, why force him to work 9:00-5:00? Naturally you may need programmers in the office at certain times for mentoring/training/code review/important meetings, etc. But most programmers appreciate flexibility where it can be found.
The chance to devote time to learning. Give them the chance to spend longer than expected for a task so that they can pore through books and search across the net to learn the best way to do things. Give them O'Reilly books. Encourage them to spend time reading them. Encourage them to make connections online and become familiar with sites such as this one where they can learn the habit of trying to program well instead of trying to program just to get done.
Yes, that's a perk. For them as well as for you. :)
Good project management - with minimal BS and meetings under control
Good technical mentoring
Book reimbursement, resources, tools
And I take issue with the "aside from cash"
I think cash isn't really ranked up that high unless the environment is so poor - that's why they call it compensation.
Working with people who can explain why they do things the way they do.
There were lots of good suggestions already. I did a quick search on the all the response I can't find these so I'm including these 1. Good health insurance coverage from the employer. 2. Paid time off. it really helps to re-boost employees.
Speaking as an actual college student (senior), here's some things I'd like:
A degree of direction (tell me what you need done)
A degree of autonomy (trust me to get it done)
I'm probably unusual among my peers in that I prefer professionalism. As a general rule of thumb, I think casual dress would be very helpful, though it wouldn't be a huge issue for me personally.
But really, the big thing is trust, and letting me do what you're paying me to do. If I think I'm going to be stuck attending constant meetings and always worrying about office politics, that's a big strike against you. Competence is also very important... I don't know if I could work for a manager who knew nothing about programming. I understand that it's entirely likely a great manager might not even be as good a programmer as I am, but they should at least know enough to know what's feasible and what's not.
Oh, and probably the biggest thing for me: Long term prospects. I hate job hunting, and I'd tolerate an otherwise-mildly intolerable job if I knew that I wasn't likely to be laid off, out-sourced, etc.
I think having good challenges and learning opportunities is critical. That's true when you're above the junior level too.
I personally like the office my company gave me.
Training is by far the #1 thing. It was when I was starting out.
I think private offices are overated, especially for junior developers. OTH managers must understand that every time a developer is distracted by noise, people walking around them, or being in a huge bullpen or a sea of cheap cubes that it costs the firm money in the near term.
Good work areas, especially good chairs and monitors, make a huge difference.
Any kind of dress code beyond 'naughty bits must be covered' is insane when applied to developers. Having non-flexible work hours is insane when applied to developers. In general what is known in management theory as ' Taylorism ' is a good way to drive away the best developers.
All developers, especially junior developers, appreciate formal training opportunities. http://en.wikipedia.org/wiki/Scientific_management
Perks that I have liked:
1) a book budget to get technical books related and unrelated to the job
2) assigned mentor - someone more senior to help show me the ropes and tell me about the culture
3) pop/snack area with minimal (better is no cost) to staff
4) notebook,wifi and lounge where you can be more relaxed when you arent coding hard but still working on things like email. our company has 4 of them than you can pick up in the lounge and curl up on the couch and read mail etc during lunch or during an unwind time
5) budget for movie tickets, dinner out etc. to give to staff after they have done a grinder or delivered a key element on time - anything to make them feel special and remembered for hard work
Don't throw them in with the general population. Give them a place with some degree of privacy, where they can concentrate and not be constantly distracted by phones, business conversations and foot traffic.
Try to give them specified projects with finite, tangible requirements. Give them goals to achieve, instead of open-ended projects that leave them at the mercy of business types who refuse to ever commit to a specification.
Have and enforce a change request policy. Have and enforce a clearly defined chain of command that requests have to flow through.
Make sure they have more experienced programmers to aspire to and seek advice from.
I would take these things over foosball tables and free soda any day.
The option to install whatever software you need to get the job done. Notepad++, Pownce or whatever.
And MOST importantly other people their age to work with.
When you are 22-23 years old it is really hard to relate to your coworkers when they are all talking about their kids/families.
I just entered the job market and landed with a company where the hours (with the exception of occasional deadlines) are 9-5, 3 weeks vacation to start, and free lunch monday - thursday from different restaurants. This beat the other places that essentially said they would treat me like dirt and have me work long hours. The hours and benefits allow me to maintain a very healthy work/life balance, and this makes me more productive at work.
Oh yeah, and dual monitors rock.
When I was just starting out, I benefited greatly from the mentoring of others in the office. It helped a lot, and I viewed it as a serious perk -- I was often quoted as, "I'm getting paid to learn!"
There are all the trivialities (games in the office, DVDs, etc.) -- I think that while they make for a great interview carrot, they're not a reason said programmers will stay. Indeed, once their work ramps up, they'll probably realize they have little time for those "perks" and wonder why the company even bothers.
As a junior, learning from someone who respects you, is able to teach you and is able to lead you is very enticing long-term. It may not have the interview sex appeal that the others do, but it's something I think all serious developers did appreciate (or would have appreciated, if they didn't get it).
Sponsor a corporate-wide subscription to Safari. Allow a junior dev to take 2 or 3 hours a day learning. Make him feel valued. Let him contribute.
(BTW, my use of "him" is not meant to be sexist; it's just a shorthand. Please expand it to "him/her" mentally.)
Casual dress code Free pop (This was one that I really liked back in the dot-com days and miss it sooo much) Flextime and telecommuting Configure there own machine w/dual monitors and a budget Benefits like health care, dental and vision - Some of us like being able to get a discount on glasses or having our teeth checked.
I would also suggest making sure there is a clear process for how work will be done as junior programmers may not necessarily be aware of all the best practices and what kind of environment you want to give them.
I am a recent graduate. In my opinion, the most appealing perk for me is having an interesting project to work on. I don't want to be writing simple in-house enterprise applications all day. This may be someone else's idea of fun. However, it is not mine.
Smart people and cool projects would attract the best programmers. IMO, if you rely only on monetary incentives, you'll most likely attract the wrong crowd.
Freedom to make mistakes and learn
Knowledgable and tolerant team members
Great hardware and a single widescreen monitor
interesting work. When I started programming many years ago, you got lumped with the crap work as no one else wanted to do it.
A chance to be part of a successful team.
A decent manager, good training, and good motivation would be nice. In all of my past jobs, the training sucked, the managers didn't care, and they ended up "motivating" me right into a new job.
Treat your employees well, and the perks will matter less. (But free food never hurts, either :))
One thing that would be very appealing is if an employer offered to sponsor one non-work interest for each employee. This could be something simple, like paying for karate classes or offering a small scholarship for those who are taking night classes for a graduate degree. I think that contributing to making an employee a more well-rounded person will actually pay dividends for the employer in the end.
Team outings are fun, help bring people together and act as much-needed breaks when projects get intense. Offering even bi-monthly events could be a nice incentive.
In addition to what has been said, make sure you have them work on stuff that has impact on the business. If they feel that you value their work as a core part of your business, they might become much more engaged in their projects. If they do, that's the kind of developers you want full time.
The best equipment:
Matching 401k (the higher the match, the better)
Freedom to pursue creative outlets related to work projects (i.e., 20% time).
Update: after reading other answers, I think I'd also say:
I'm a new programmer myself. Things I found useful at my last internship are dual monitors (or a really wide one, good to look up things AND look at code at the same time), admin rights on my own box, flexible hours (really important one, put me at ease not having to worry about emergencies/appointments/talking to manager for those and the like). I also loved how my manager/supervisor would never look over my shoulder...feels easier to code that way. Also, our tools server had some free and tested (for our particular environment) programs like folder diff, tool to view method signatures in assemblies, etc. They help everyone but are especially handy to new developers.
Experience with experienced programmers. Games, free food, free massages, are just gimmicks (cough google cough)
The Joel Test  has some good ideas, although you might not consider them "perks". http://www.joelonsoftware.com/articles/fog0000000043.html
One nice perq we have here (beyond training, great environment, and the rest) is subsidized gym membership.
I would suggest that working from should not be the norm for junior hires - they need face to face contact in order to become part of the team. It's good if they have the facilities to work from in order to do out of hours work, or have occasional home days.
Some of these have been mentioned before, while others seem to have been skipped over...
And if you wanted to throw in a couple of nice personal perks:
casual dress will have to be up on the list for me.
i used to work for an employer who would on occasion stock our department mini fridge with caffine (in our senerio it was Mountain Dew).
the most important thing to me was chemistry. having coworkers that were intellegent enough to bounce ideas off of but social enough where we could invite each other to bar bq's.
finally, i think being comfortable. i think the casual dress is a small preface to this, however, good chairs, good screens, performing machines, lowest stress conditions possible. being a developer deadlines are already enough to stress out about.
Simply follow Jeff Atwood's (PBUH) Programmer's Bill of Rights  and they will come.
It doesn't hurt to provide abundant caffeination infrastructure as well :) http://www.codinghorror.com/blog/archives/000666.html
Well, working on challenging and interesting projects, being respected and not being ignored (some junior developers are just forgotten in a corner of the office) can be better than throwing them games and gadgets.
I'm a current college student, graduating in about a year, and the only thing that matters is respect. Money, hours, aeron chairs, multiple moniters, admin rights to your own computer, private office, telecommuting rights, these all represent the same thing: the employer views you as a real employee. Clock ins, lowball offers, drug tests, cubicle farms, folding chairs, ect., these all represent the opposite: the employer views you as a stupid little kid.
The most intelligent and hardworking graduates are probably not as interested in the free soft drinks and game lounges as they are in the idea that they will be viewed as important contributors, both to your company and the field of software engineering at large.
All this would be grt for them , And would think twice before leaving as they would feel suck would place would not be available elsewhere.
In a few words, I'd say room for growth.
I'm not the great hacker that most of the people on this site probably are (at least the ones with over 10k rep - I have yet to successfully answer a question after being here for a year). So for me, when I was starting out, I knew that college was, effectively, nothing. And I needed to do all my learning in the real world. Sure I got my CS degree, but I was way behind all the other CS majors because I didn't play with computers when I was young. I had hardly ANY experience with FILE SYSTEMS, for God's sake, before I got to college.
So, how do you create room for growth? To me, I think you have to create a professional, fun, AND academic environment. Professional meaning the usual things you read about in a business-type book (respect, clear expectations, blah blah).
Fun meaning, aside from games, putting together a group of people who can sit in a room together and just shoot the breeze and be mostly laughing.
Academic meaning an environment where everyone is a student and everyone is a teacher. This is probably the most difficult to foster in my opinion for any number of reasons.
Here's something: Don't leave them in the dark when they are just starting. They will be very uncomfortable if they have no direction when they start. Make sure they have very, very clearly defined tasks with measurable deliverables. When I first started, I was throw into a mess of a product with no direction and told to fix bugs that made absolutely no sense to me. Find somewhere appropriate for them to work and make sure you give them what they need to contribute positively. Otherwise you're just going to have a bunch of college kids surfing the web on your dime.
The best perks for new programmers are too offensive to most people.
There is nothing like the company of an experienced fellow programmer guiding the new programmer. I am always thankful to my very first mentor when I entered into software development. (Thanks Chris!)
I would argue against private offices, I would promote more of an open office concept with "war rooms" so that the the newb's can quickly ask a more experienced person quickly & easily. But keep the rooms smaller, five or less people. Also, dual or triple monitors is a must.
Shower on the premises, so that employees can jog/cycle to work.
Two words: Starting salary. It determines how much money you will make for the majority of your career.
Besides money, the greatest attraction for a new developer would be an experience that will allow him/her to build his career on strong footings. A developer can get this experience by working in an environment that will allow him to learn, improve, strive to achieve challenges, where 'quality' (of code, documents, etc) has some value, where best practices are followed, where people look for a better solution and most important point is - No internal politics.
Having worked at some &#!t jobs I have found that one of the nicest things is a training program. Just expecting somebody to pick up the job and be swimming in the first week can be exceptionally frustrating. If you set aside X amount of time and have them up to speed as to how things are done in the work place they feel a lot less out of place when they have to tackle the real issues.
Trust, it might not sound like much but when your just starting out in the field the notion that you take them and their skills seriously, and are going to provide useful feedback can be enormously satisfying.
Training & Certification is a huge plus, it can often make Jr. Programmers feel likes your investing in them. It also helps weed out folks that view programming more as a hobby or something they feel into as opposed to a career.
I really liked the idea of building my own system on a budget above. Its an interesting idea and I think it would attract people, it certainly would me.
Lay out the metrics by which their work will be evaluated.
Then, let them know that they have time and geographical flexibility where they may opt to work from home several days a week (with prior approval of the lead programmer).
As a college student hoping to enter the programming field I would really love to find a place that would offer me a chance to grow. So here is what I would love to see:
1) A great chair. I like supportive, comfortable chairs. However, nothing too comfortable like a La-z-boy chair.
2) A mentor or hero who could lend me advice when I need it, hugs and praise when I've earned it, and a gentle push when I am falling behind.
3) Food. Eating a proper meal and being as healthy as I can would be really nice if it fit into work.
4) Schwag. Company shirts, logos, bumper-stickers, etc.
Good working environment, competitive compensation, and the ability to do research and development.
I suggest reading these excellent articles from "Joel on Software" blog:
http://www.joelonsoftware.com/articles/fog0000000043.html - 12 Steps to Better Code
http://www.joelonsoftware.com/articles/BionicOffice.html - Bionic Office
http://www.joelonsoftware.com/articles/fog0000000040.html - How do You Compensate Programmers?
http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html - Finding Great Developers
There are more by Joel, very specific to office layout and working conditions for developers, anyone knows?
Offices and fancy chairs are overrated. Responsibility, visibility and the opportunity to work on something cool and learn are critical to getting and retaining young developers to a non-established company. Fresh out of school, working on something impressive or world-changing was way more important than almost anything else.
Making work feel like college will help keep them in the office more hours, but it won't keep a young hot-shot developer working on dialog boxes for an internal insurance company application.
Also, money, lots of money, never hurts.
I think instead of thinking of them as perks, they should be thought of as the norm.
In no order of preference, the top 5 for me would be,
flex time 2 monitors good chair. allow headphones and an xbox360 in the break room.
I started about 3 1/2 years ago.
I was hired at the first place that interviewed me which I was thrilled about. It was a great first job because we got to use bleeding edge technology.
Problem was, my manager was rather disrespectful. I don't know why but it made me leave the company after a 1 1/2 year. I know my manager's manager wasn't too happy with my [ex-]manager. I had hoped to work there longer...
I have graduated 3 years age and I remember how I felt when I was looking for a job.
First, thing that I remember after reading many job postings, is the realization of how little I knew about specific technologies and understanding that I would have to do a lot of learning to become successful in the field. So I applied for positions where they emphasized regular training.
Other thing, that I remember is being worried about being put in a position where I don't get to do much programming. I wanted a position that would have the least amount of repetitive task, because if I am not "creating" I am bored.
Things like private offices, corporate culture and even the pay did not concern me as much. It was my first real job, after having to work everywhere just to keep my tank and stomach full during college, so I basically had little understanding how it works. In fact dress code was the least of my concern; I actually wore tie/slacks to interview, orientation and first 3-4 days of work. In fact I thought it would be nice to work in good clothes. (I guess I am more fashion aware, than most fellow programmers.) Now I wear khakis most of the time and like it.
As I said, this is how I felt when looking for my first job, so this is purely subjective.
WHen I was a young programmer right out of school (its been a while now) the thing that I lucked into were 1) Open Internet connection, no blocked sites except the nasty stuff 2) The ability to advance 3) Challenging work 4) Good hardware, it sucks when the build takes 2 hrs 5) A beer fridge (hard to maintain as the organization grows) 6) great Senior Developers 7) Flexible working hours
As these things became less of a priority at the company I was at, I left too!
Hey, well, I'm still in university, so I guess I might be qualified to answer! I can tell you what would attract me personally to a job, but I can't really speak in general terms. For me, the most important thing is interesting work. I don't want to maintain a 40 year-old accounting system. I do want to do something challenging and fun. Maybe that's a bit much to ask for, but I would expect others to ask for it as well. I think this leads a lot of programmers into the game development industry, and apparently they get burned out there, so that's not cool-- but that doesn't mean other development can't be fun. It would depend, obviously, on the person involved. I'd love to do things like image manipulation and simulations (and, yes, game development), but I haven't gone deep into other areas. The number one pulling me into a job would really be the "fun" aspect-- cheap things like a dedicated wii room and comfortable clothes do help, but neither will make me want to take a job fixing the remaining y2k bugs, or whatever else needs doing.
Educate them. Give them the opportunity to work on their skill set.
My own cool job that is at an Insurance investment company came with the following perks: fully stocked kitchen with soda, coffee, snacks. beer for afterhours, srsly! 'Free lunch fridays' where the entire company has lunch brought in (we have about 30 people). triple 19' flatscreen monitors for development. Large screen HD TVs a good pay and casual work environemnt works well too :)
In my humble oppinion the following is good incentive for new programmers:
Quality headphones. Music always helps...
To add to the list: snacks, and not sugar stuff, but actual energy food, fruits, oats, cheese, salad, sandwiches. May be a pain to set up, but if I had that, I'd be spending more time at work :)
From my perspective the most important thing the job has to enable the employee is the personal growth. Find time to discuss about work and if possible provide them a mentor.
Help them to research all the time in the research interest's of technology leading corporations and new technologies to help them acquire a good knowledge about breakthroughs, discoveries, new tools, etc, and be more creative about their work, just don't make them feel like they don't learn innovative stuff in their environment. Also give them the liberty to finish their programming tasks without restricting them to sit for 8 hours in front of a computer every day. Lockheed Martin gives their employees the liberty to work any time they want if they complete their 40 hours a week.
(it says my answer is too short!)
Scott Adams, who talent was not so much just being funny as being seriously insightful and making us laugh about it, named the OA4 concept. He suggested that companies truly serious about their employees would be OA4 Companies and throw their employees Out At 4pm.
I'm into my 13th year of professional programming now, finally working for myself, doing only what I want with exactly the tools I choose, and getting OA4 is almost impossible. OA2am is currently more like it. But the truth of all-nighters and suchlike 'dedication', (and I pulled a 24 hour special only last week for a client deadline), is that it's just like credit card spending; sooner or later you have to pay it back.
The reward isn't in the perks, it's in the job. Help people do their job well - not compulsively, obsessively, heroically or with guilt. I'm not a better person for busting a gut whatever my feelings suggest; I'm a better person for starting at the same time every day; finishing at the same time every afternoon; and getting plenty of breaks away from the desk. Sometimes you do good work; sometimes you don't. If you follow a healthy routine, you'll do more good work more often. A good company as Adams suggests, would be one that encourages us to be better people.
Hey, anyone want to write some Cocoa with me? I'll let you Out At 4pm! :-)
Fast computer (not like mine)
more than 1 big monitors (not like mine)
In any environment in which programmers don't maintain their own equipment and IT does, making sure that IT helps rather than hinders the programmer. Either a group of IT admins that support programmers as their main responsibility, or a dedicated admin for programmers.
Few things can be more frustrating than having to wait hours or days for simple tech tasks to be completed.
(Of course, it should go without saying that programmers must have root/local admin privileges on their own workstations.)
Another thing: make the day 1 setup for a new programmer a thorough thing. Not something where it takes a day to get their account set up, another day for e-mail to be created, etc. Ideally, everything is set up for them (and tested to work!) so they can then plunge in, start reading source code, start receiving training from their mentors, etc.
Subscription to Safari Library Books Online. Unlimited access to all their books and those of partner publishers, never goes out of date, searchable, training videos, and notes you make are kept forever, even through subscription lapses.
By the way, not all fresh-out-of-college programmers are young, nor are they male. Most are, I grant; but not all. :)
Substantial times of uninterrupted peace and quiet to get into that highly productive state of "flow" while programming. A noisy office drives productivity down at least 50%.
Free headphones (good around-the-ear phones from Sennheiser or even Bose, maybe even noise-canceling ones)!
Anything with caffene in it should be free. Coffee, lattee, candy bars, soda (especially Mountain Dew) etc.
Seriously though, ask anyone who has worked in a place like Microsoft where they have great break rooms close by and they will tell you that they can be a godsend when working late etc.
If I were to pick a few perks (as a junior developer) that would make me switch companies:
I won't claim this is the most important perk, but I know of a company that has season tickets to all the local sports teams, and employees can use the tickets for free on a rotating basis. It's pretty popular.
Casual dress is huge. I work for a large corporation (150K+ employees). When I started we were allowed casual dress and now are not. That is one main reason I am out looking again a year out of college
Well, remembering back to my days of interviewing for that first big job:
1) Actually hiring me!
Sorry... bad at interviews I guess.
Big favorites for me are a flexible work schedule and casual dress code.
An office kitchen
Adjustable-height desks, I bet they are very nice. Sometimes I would love to write code while standing. I took the idea from here: http://www.joelonsoftware.com/items/2008/09/10.html
However a cool and comfortable chair will rock also. Something puffy or fancy, like those chairs that look like a hand. So I can stand for a while, then sit if I get tired and so on.
Merit based rewards are important; Developers generally despise politics and people being rewarded or promoted over someone who has done better work.
Definately flexible working hours and lots of training/conferences. Free drinks and video games just seems too trivial.
This may seem a bit contentious but in my first programming job I really struggled for the first month because I had no money. Commuting, even just paying for lunch was a problem and it just made life harder. I couldn't enjoy the job. So maybe a small short-term loan to paid back over the next few months out of the pay-packet might help. Or maybe a one month agreement to pay expenses on production of tickets/receipts.
Budget for Books / Mount a library
Good desktop tower with lots of RAM and a fast hard drive
Check what you will demand because that is what the programmer will care about
We have a ping-pong table.
But mostly you want to find out what their co-ops and internships didn't get them that they wanted, and give them that. I didn't like big companies because I wanted a real voice in the way things were done. I've been with my small company since undergrad.
Lunches out - on the company, of course...with beers. After work beers on Fridays. Beer is the key.
Give junior developers what they need to be productive on their tasks, within the bounds of company policy of course, then if possible, grant them what they want, in order to be even more productive. Though this is relative to individual tastes, just reading from the comments above is a good starting point.
atleast one good / cool guy in the team they can learn from - say you have Linus or stallman coming in once a while - the entire college would be running behind you for getting hired
no dress code
powerful laptop + paid home access
good food and snacks
a good blog that talks about your company like what Joel does to fill his outfit with smart grads
not much process but newbies might not be knowledgeable enough to appreciate it. (Your blog could help there)
Some flexibility with regards to buying things.
TP add ons. Amazon books, technical magazine subscriptions.
They made me more comfortable and feel more valued.
Software and hardware for personal use. Like a nice notebook computer packed with development and productivity tools that you can use for both work related projects and personal projects.
only two things:
1) they must realise that they know nothing
2) they should listen to what more experienced people say and try to improve themselves
how simple :)