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
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.
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. :)
- Smarter and more experienced developers from whom you can learn from
- Good software engineering practices that is used throughout the company
- Exciting projects (though this might just come along after you find that the developer is fit for the job at interview time)
- A friendly and supportive environment
- Dual monitors
- A comfortable chair (since you will be spending most of your day sitting down), and ergonomic keyboard/mouse
- A programming books library, and the chance to request more books to add to the collection
- Lunch time or after work gaming sessions
- Clean kitchen with a decent coffee machine
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.
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.
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.
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!
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.
- 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.
One of these would get me interested:
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. :)
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.
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..
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 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.
- 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.
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.
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.