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
I think having good challenges and learning opportunities is critical. That's true when you're above the junior level too.
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.
Two flat-screen monitors, an optical mouse -- two things I don't currently have -- and each their own whiteboard with a few markers.
Flexible Schedule
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.
The opportunity to work alongside experienced programmers.
And also the possibility of learn from them.
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.
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.
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.
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!"
One nice perq we have here (beyond training, great environment, and the rest) is subsidized gym membership.
give them responsibilities and some degree of freedom.
make them feel like they are developing something for themselves, with passion
Being able to work remotely + flexible hours, Tech books give-a-way, and lots of love!
Lets them, on company time, do some private projects (things that could be useful for the company, but things they get to pick)
The Joel Test has some good ideas, although you might not consider them "perks".
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.
There are a number of things that come to mind, and not even for junior people.
- Training packages for use with conferences, certifications, or something similar. Showing a dedication to future growth in the field
- Provide flexiable starting times especially to those just getting out of college and not used to working a "day job"
- if In an environment where they must work from home, help them out a bit there, subsidize internet service, and/or company cell phone. If you must have access to them, giving them a way to do it helps.
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.
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. :)
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.
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.
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.
Also, some productivity tools, for Visual Studio, such as CodeRush/Refactor Pro or Resharper
Quality Coffee in-house.
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.
Which is another biggie: Make him feel like part of the team, and give him projects which not only interest him, but also challenge him. Too often, the junior dev gets the jobs like "move control X to the lower right corner," or "write all the property routines" (or getters/setters in Java/Obj-C/et al), or "add javascript validation." Give him something to do which makes him feel useful, like a real contributor. He'll appreciate that, too -- and probably become more passionate about your firm and your practices.
(BTW, my use of "him" is not meant to be sexist; it's just a shorthand. Please expand it to "him/her" mentally.)
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.
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.
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.
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.
- 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!)
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'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)
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?"
;-)
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.
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.
The best equipment:
- chair
- monitors
- modern workstation (e.g., nothing older than 2 years)
- ergonomic keyboard
Matching 401k (the higher the match, the better)
Good mentoring.
Freedom to pursue creative outlets related to work projects (i.e., 20% time).
Update: after reading other answers, I think I'd also say:
- private office
- individual book/training budget
- HDHP with the amount of the deductible given at the beginning of the year in the form of an HSA
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.
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.
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
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 :))
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.
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.
Merit based rewards are important; Developers generally despise politics and people being rewarded or promoted over someone who has done better work.
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.)
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.
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!
Working with people who can explain why they do things the way they do.
interesting work. When I started programming many years ago, you got lumped with the crap work as no one else wanted to do it.
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.
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.
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!)
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.
cool project
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
flexible timings
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
trainings
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 :)
Programmers need vacation. Lots of it. Four weeks a year to start. Minimum.
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!
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 :)
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.
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.
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...
Regards, Frank
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.
Training is by far the #1 thing. It was when I was starting out.
- Company funding for books and/or conferences.
- Time to work on projects that might not directly be a product but can help in advancing skills (and could possibly turn into a product).
- Time with Senior level developers/mentors.
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.
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,
- Either offer for free or help them with what excites and interests them related to work. For example, free conference passes, books, learning courses etc.
- Definitely a good working environment like equipment, chairs and desk.
- Give them the freedom to work "above their role". Credit them for thinking out of the box and encourage them when they don't.
- Set goals and make sure you measure them. Fresh graduates and young programmers usually have trouble (mostly) setting and realising objectives.
- Don't make Rules and Regulations up "just because"
flex time 2 monitors good chair. allow headphones and an xbox360 in the break room.
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.
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
Perks?
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.
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.
In my opinion, the best perk a new programmer can have is a good mentor who is extremely knowledgeable and understanding.
Two words: Starting salary. It determines how much money you will make for the majority of your career.
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.
Shower on the premises, so that employees can jog/cycle to work.
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 luck.
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).
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.
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.
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.
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.
Friendly/productive atmosphere
-- 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..
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.
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 :)
These are all personal :-).
- Free coffee. I have solved countless problems while waiting for my coffee to finish, or even walking to the coffee vending machine.
- Laptops. I don't care about fancy dual monitor setups everyone keeps mentioning because I usually end up working on only one of them anyway. However, having a laptop and being able to work from any part of the company more valuable to me. I can just take my problem with me and it makes it easier for me do demonstrate what is going on to a college.
- Smoking area. I smoke, and although I don't smoke that much, it's really nice to actually spend five minutes somewhere else. The most interesting discussions I have with peers are usually while smoking.
- Open office. I don't like to sit in an office, by myself, for a prolonged length of time because it makes me feel like a machine. To me, interaction with peers is a huge motivation to go to work.
- Whiteboard and artistic people around. If there are any webdesigners, 3d modelers, sound guys or whatever type of artsy people you can find; put them in the same room as the programming / tech guys. This too makes the job seem less mechanical.
- No dress code. I'll quit the day someone will try to make me wear a suit. They honestly don't make me feel comfortable, besides that, I probably wouldn't fit in such a formal culture anyway. Besides that, I'm a pierced up coding 'goth' that delivers the best work when I don't have to worry about something other than code. That include clothing.
- Learning opportunity. Doesn't matter what, it could be seminars, peer reviews, book, 'research time', anything goes.
- If the job requires concurrent programming: a dual core machine at least.
- A stash of ritalin, lol.
I don't care about:
- Dual monitor setups. As stated previously; they distract me so, I tend to prefer widescreens.
- Fast hardware; it hard these days to actually get slow hardware these days.
- Gadgets.
- Free internet at home, or a cell phone. I already have those.
- The editor, IDE or OS I have to use as long as I can figure out how to work with it in an hour or two (it usually takes less time though).
- Huge paychecks. Give me a pleasant working environment where I'm happy to be for the biggest part of the week and I'm happier than when I have a huge pile of money stashed away at the bank. Use that cash to improve the office conditions.
- Game rooms, guitars, pooltables, foosball or airhockey tables et cetera.
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. :)
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.
- Independence , and a feeling that their Inputs matter
- Work From Home
- Allow for Personal work at Office (initially there might be lot of wasteage of time , Slowly it will come down automatically)
- Casual Dress code
- Laptops and Not workstations
- Creative projects
- Allow them to Work on Other things not limited by Work Profile (Like a new programmer wold cherish the idea of having the liberty to directly interact with the Clients and Understand / Solve Problems)
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.
- Gym Membership
- Video Games
- Dual Monitors
- 4 weeks+ of vacation
- Flexible starting hour
- If no private office then noise cancelling headphones.
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.
Matthew 7:12
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.
Mohammed
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.
- bright colleagues
- interesting challenges
- flexitime
- freedom to fail (if you never fail, you're not being challenged enough)
- freedom to innovate (i.e. an organisation that doesn't stonewall ideas from juniors)
- Google-style 20% time -- or something similar
- the sense that attending conferences and education is encouraged, not merely allowed
- casual dress code
- dining facilities on site or very nearby
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.
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.
If I were to pick a few perks (as a junior developer) that would make me switch companies:
- Games in the lunchroom, so you can play a bit during morning and afternoon breaks
- Comfortable chair instead of "whatever the leasing company gives us"
- Fridge stocked with beverages
- Getting to order whatever programming books I need
- Non-tolerance for incompetent developers
- Company-sponsored team activities like paintball, lasertag, etc.
- Getting to be around good developers my own age
- Sponsored gym membership
- Flexible starting hours
Some of these have been mentioned before, while others seem to have been skipped over...
- A bluetooth headset - preferably one that multi-pairs with my desk phone and my cell phone and lets me listen to music in stereo. Less is more, right? I don't want to have to keep switching headsets to answer different phones or listen to my music, and I definitely don't want to have to hold the receiver while I try and continue my daily work - and I don't want half a dozen gadgets cluttering up my desk, the fewer the better.
- O'Reilly Subscription - I think this costs me $40 a month which I'd rather not pay for myself, but I refuse to live without it, so I do.
- MSDN License - The one with all the nifty stuff like Expression Studio, Visual Studio Team Edition etc. This currently costs me a small fortune, it would be nice if it came as a perk of my job!
- Software - Don't give me hassle about purchasing software that will make me more productive when I ask - XmlSpy, Icon Workshop, Resharper/CodeRush just buy it and bring it to me when it arrives, the small amount of $$$ it costs, by the time you've wasted a half hour of my time having me write up justification and you've wasted another 10 minutes reading it, we've just spent more than the cost of the software.
- Flex Time/Telecommuting - If I arrive late, chances are I didn't leave until late last night, don't quiz me like a five year old where I was at 8:30 when everyone else arrived! Where were you and everyone else at 2am when I left?
- Give me leeway to be myself. Putting my feet on my own desk is perfectly acceptable behaviour, as is listening to music, eating, having pop on my desk etc. As long as I'm not disturbing anyone else's workflow and I'm meeting all my deadlines/objectives, that's all that matters.
- Home internet connection and VPN privileges - for those work from home days.
- Time to think - without questioning what I'm doing "instead of working" - we're programmers, thinking is working, what's more, that's what you pay us for.
- Bookshelf - for all my books
- Books - to put on said bookshelf.
- No micromanaging - I'm an adult, I don't need micromanaging! Give me a task and some kind of idea of the direction you want me to take and leave me to do what you hired me for. If you wanted to do the job yourself, be my guest I can always find something else to do. If I need help, I'll ask.
- A forum for answering questions/learning
- Training/Seminars/Further Education (i.e. Masters Degrees, PHd's etc)
- Life Insurance Policy
- Stock Options
- RRSP/401K
- Occasional Team Building Days - Sailing, War Games, Paintball, whatever you like
And if you wanted to throw in a couple of nice personal perks:
- Gym Membership
- Golf Club Membership
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.
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.
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%.
- Quality chairs. A developer spends a lot of time during the day sitting. While a good quality adjustable chair may seem expensive, it's cheaper than having a developer miss work because their back is injured from sitting in an Office Depot $79 special.
- In office catering. It doesn't have to be covered by the company, but having a secretary make a lunch run for the office is a great benefit. Not only does it enable the developer to work through their lunch, if they need/ want to, but it helps cut down on that time lost before lunch where everyone tries to coordinate about who's going where.
- Dual monitors, or one large(30"+) high resolution widescreen format LCD. The productivity gain from having multiple monitors is amazing. Imagine a secretary having to work in an office with only a single file cabinet with just one drawer. That's what development on a single 17" 4:3 aspect ratio monitor is like.
- Quiet. Even if you can't afford private offices for the developers, providing the developers with a space separate from marketing and people whose jobs are to talk to your customer base, or the sales team is very important to a developer. A developer has chosen to work with computers, and not people, because they are likely not an extrovert. Therefore, keeping them sheltered from the sales team's pep-talks and team building exercises will be very valuable. If you have to have a giant open floor plan for the entire business, look at getting some banners or sound dampening to hang from the ceiling.
- Respect. Your developers are building the tools that your company uses to be more profitable. They may be making the software you sell, or the software that gives your company the advantage you need to be competitive, treat them with respect.
- Books. Developers need knowledge like plants need water. If a developer isn't given an outlet to learn new techniques and practices, they will search for it themselves. Give your developers a quarterly library fund, or have a company library they can get books from, and request new books be added to. You can create an internal website which the developers can vote for new additions to the library with, and buy them once a quarter. A subscription to an online library resource like Safaribooks.com
- A sense of being appreciated. You chose to hire these particular developers for a reason. Make them feel like they are special in some way. Have a quarterly/ monthly guest speaker, as you can afford it. If you can't afford a guest speaker, send some of them to conferences and workshops. Rotate your developers through conferences, so that everyone has the opportunity to go.
- Managers who understand what is involved in developing software. Developing software is not the same thing as digging a ditch or laying bricks. A developer will not spend 8/8 hours writing code. Plenty of time will be spent on research, whether requirements gathering/ clarification, or on the right approach to solve a particular problem. In physical engineering, prototypes and stepwise refinement are part of the iterative development of a product. The same is true in software. Just because the final check-in for a task is only a few text files, doesn't mean that the developer didn't spend a lot of effort refining that feature or bug fix.
- Guidance. As a recent college grad, your new developers are going to need someone who's been around to guide them to the correct technologies and practices to use to increase their value, both for the company and for themselves.
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.
Beside this:
- flexible schedule
- drink
- food
- pleasant working environment
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.
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)