It's actually two questions in one:
What is the right attitude for a programmer?
How do you (or would you) look for one when interviewing or during hiring process?
Please note this question is not about personality or traits of a candidate, it is about their attitude towards what they do for living. This is also not about reverse of programmers pet peeves.
The question has been made community wiki, since I am interested in a good answer rather than reputation. I disagree that the question is purely subjective and just a matter of opinion: clearly some attitudes make a better programmer than others. Consecutively, there might quite possibly exist an attitude that is common to the most of the better programmers.
Update:
After some deliberation I came up with the following attitude measurement scales:
identifies themselves with the job ↔ fully detached
perceives code as a collection of concepts ↔ sees code as a sequence of steps
thinks of creating software as an art ↔ takes 100% rational approach to design and development
Answers that include some sort of a comment on the appropriateness of these scales are greatly appreciated.
Definition of "attitude" [1]: a complex mental state involving beliefs and feelings and values and dispositions to act in certain ways; "he had the attitude that work was fun"
The question came as a result of some reflection on the top voted answer [2] to " How do you ensure code quality [3]?" here on Stack Overflow.
In general:
Number 1 with a bullet: The candidate has realized that learning is a life-long pursuit and they've chosen software development as the thing they're going to learn.
People with the above traits generally make the best coders. People you want to avoid:
I would look for someone who would challenge me when I make an obvious mistake, but not be a complete jerk to work with. I guess that would be called Confidence without Arrogance. Software development is no place for yes-men.
Aside form that, somebody who has the technical skills and does not appear burnt out or irredeemably contaminated by office politics.
I find that people who take pride in their work are better developers. They will take the time to get it right, and respond to constructive criticism appropriately.
Obviously, you want someone that is passionate about programming and not just doing it to earn a paycheck as well
Smart and Gets Things Done [1]
[1] http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.htmlMy boss always says: "Hire for fit, train for skills". What you have to keep in mind is the fit with your current team. Look at them, find what they have in common, what is missing. Learning a new API isn't a big deal for someone with motivation.
The scales you propose are interesting to evaluate your people but they won't tell you which one is better than the other. In the end, different types of problems requires different kind of people. Build your team with diversity, without having people on the extreme (to avoid personality conflicts).
Always look for passion, don't be afraid to ask non-work related questions. Especially if the candidate has a blog in which you identified some particular interests. An exemple, in my own interview, we talked for 15 minutes about Batman vs. Spider-man, obviously this didn't have much to do with the job I was appling for, but sure was useful to test my personality vs. my future team.
Having a good RH on board will help you identify "healthy attitude" programmer (or someone who will look at the attitude while someone else focus on the technical side). Stay away from big ego and depressed programmer.
Hates PHP but uses it when appropriate.
The right attitude for a programmer is one where:
you realize that there isn't a silver bullet language or tool
you look for the answer yourself before you ask someone else
you understand that it may be cool to be buzzword compliant, sometimes things need to be quick and dirty
you understand the concept of necessary complexity
you try to hear out the business owner's problem before you start figuring out the solution
Well, here's what I said [1] in response to What are the traits that you look for in a software developer? [2]
The short form:
1. About attitude The thing with attitudes is that it can change over time. But I think the most important attitudes I look for in a co-worker is curiosty and wanting to become better at what they do.
2. About what I look for in interviews Personally I look for passion for coding when I interview. It don't need to be fullblow passion but a hint. And with passion I mean showing an effort to learn more becomming better at what they do, a tell tale is that the have hobbies including coding. I also look for crossfunctionallty not beeing afraid to step in and do work in other areas.
I think one should be careful when speculating about these matters.
I have only recently realised my own career desires fully. I have only just evolved a plan for putting them into action that I think stands a chance of succeeding.
The plan and career choice are nothing to do with software development.
I'm still a competent and valued member of my current organisation and just because I know my future lies elsewhere does not mean that I don't appreciate what my employers have done for me.
I like my workplace, am dedicated to my employers and produce good code. I came in on a pre-booked holiday to fix a glitch because leaving them with workarounds was unacceptable to me. I didn't begrudge the service, even though I took an hour out of my day and the problem was fixed in six minutes (I am the sole developer here).
Attitude while many employers might be worried that I don't consider myself a developer, just someone who could develop until he discovered what he wanted to do. I have known extremely enthusiastic and dedicated professionals, however, who do not provide anything like my service level.
Regardless of what job I am doing I have an attitude to work, what is generally called a "work ethic". I think that this is the level at which you should gauge a potential candidate. Not in some more granular aspect of specific job enthusiasm.
Someone might well love coding, they might just think you and your organisation suck, or they may think their personal projects are more important than the ones you give them, they may be well meaning but essentially have problems with communication or perspective. None of the suggestions I see here allow for someone who is technically competent with a passion for computing who nevertheless has a "work ethic" that is not compatible with your organisation.
I'm a service oriented employee. I perceive myself as offering an essential contracted service to my employers and it's a point of personal pride that I deliver that service and maybe a little more to the contracted level regardless of circumstance.
I imagine there are thousands of more skilled and experienced programmers with a much deeper love for software development than me. Despite this I am still motivated but by my own sense of identity, not by any abstract love of my discipline.
Finding someone who takes pride in their work regardless of what that work may be should, IMHO be the number one priority of any employer.
I like Eric Sink's post saying he wants developers not programmers [1]
[1] http://www.ericsink.com/No%5FProgrammers.htmlBeauty is in the eye of the beholder.
"Right attitude" either means fitting in well with the company platform, goals, and people, and being excited about the work, projects and company direction.
Or, "right attitude" means really wanting to be where the company is going, having the brains and talent, but maybe not everything on the technology list.
For me, "right attitude" generally never means someone so good in what they know, and so confident in it, that there is little room for compromise.
See What’s your favorite “programmer ignorance” pet peeve? [1] for a list of things that you want people to not be. The inverse of that list is approximately what you want people to be.
[1] http://stackoverflow.com/questions/423823/whats-your-favorite-programmer-ignorance-pet-peeveCan-do, admit mistakes and reasonable.
Love the job with relevant experiences.
Unless you have a specific personality requirement for your team, I don't think you can judge any programmer's proficiency by their personality or attitude.
Most programmers are optimists, it takes a good sense of humor and an ability to see the bright side of things in a world where anything is possible and anything can go wrong.
Positivity is good. But there is no right attitude. Some programmers code in dark closets wearing headphones and never have to talk to people for weeks.
Done and Gets things Smart [1]
[1] http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.htmlI think you want someone who is a little cocky, but openly knows and admits they suck.
Generally the people with this attitude are great programmers, they know the fundamentals, but they know there is always room for improvement because they have the experience which has taught them that.
Ask what books they read. Particularly in an age where fewer people read books, someone who goes out of their way to read books like "Code Complete" and "Pragmatic Programmer" is more likely to be someone who cares about the quality of their work and the effect it has on the project and other programmers. Granted, this is better for flagging good candidates than ruling out bad ones. Maybe also check out the Programmer Competency Matrix [1]
[1] http://www.indiangeek.net/programmer-competency-matrix/your bullets in OP are good, but make sure you don't have a negative connotation on either end of the scale - neither attitude is correct, and the type of attitude you want to hire is almost certainly dependent on the position and domain.
Regarding the right attitude for a programmer: Like they said about pornography -- I know it when I see it.
Look for evidence of the three virtue of a programmer: Laziness, Impatience, and Hubris [1]
- Laziness - The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer. Also hence, this book. See also impatience and hubris.
- Impatience - The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer. See also laziness and hubris.
- Hubris - Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer. See also laziness and impatience.
Good Signs: Loves coding, but has a laundry list of complaints about the limitations of current tools. Wants to auto-generate almost everything. Develops useful portions of the code as re-usable modules, even if they won't be re-used any time soon. Spends time on problems like fixing the build process/deployment process/database connection setup/etc, because he's just so sick of it.
[1] http://en.wikipedia.org/wiki/Larry%5FWall#Virtues%5Fof%5Fa%5FprogrammerRight attitudes for a programmer could be:
-Having diplomatic authority.
-Passion for programming.
-Being a teamplayer.
The guy that's going to piss you off by insisting you do something in LISP instead of Python, and then please you by getting it done faster than you'd expected?
Just to address the 3 scales:
identifies themselves with the job ↔ fully detached
This can be useful in terms of how much of their self-identity is their job and how do they interpret the job, e.g. code monkey or problem solver or some other vision. While each extreme is bad, I'd likely want someone who has some pride in their work and can identify the bounds of the job.
perceives code as a collection of concepts ↔ sees code as a sequence of steps
What if one sees code as a set of classes with methods? I may have done so much OO work that I'm drowning in that paradigm, but it is another perspective to my mind. Thus there are steps within concepts as I see it.
thinks of creating software as an art ↔ takes 100% rational approach to design and development
I'd think the flip side of art is that there is a systemic and straightforward approach rather than waiting for inspiration. There is some art and some science in developing software to my mind. The art comes from being able to look overall at the code and have a bit of a picture of how does the software model the world, while the science is more of a, "Does this work?" answer.
Why wouldn't the answer to this be the same for any job where the manager wanted to hire a good worker?
Well, there are already 26 answers to this, so mine may not be seen at all. But, before I became a developer, I managed a support team, and later a Quality Assurance team. One of the things I could not STAND to hear from a developer is "You want what? No.. We can't do that..."..
IMHO, the developer is the CREATOR, so there is no such thing as "can't". A developer can do ANYTHING.. They are the creator! Now, some things might cost more money, take longer, etc, but NOTHING IS IMPOSSIBLE when it comes to software development.
If I were looking for a developer, perhaps I would present him with a VERY difficult situation, and see how they respond to it. Is it a "Oh, that can't be done...", or a "Well, it can be done.. Nothing is impossible, but it might take a long time, and impact the overall schedule of the project. If it's cleared by management, then sure, I'd do [this]..." Listen to his/her answer, to find out of it's real, or just an answer given to sound good during the interview...
IMHO....
Someone who identifies with the job is excellent manager material but if your looking for a person to write code you might want someone in between. - Code is a logical series of steps which embodies a theory or concept. - There is room for art in coding but a program is should above all be logical and efficient.
The attitude of "what can I do to solve the problem" instead of "who could be so nice to do everything for me while I'm having coffee".
Number one for me is passion for coding and technology. In my team (some of whom I've hired) this is the one thing that all the programmers have in common whilst there is a diversity of actual skills. This presents me with an environment where I can match work to skills fairly easily and be confident that each programmer will get stuck in straight away and will stick out difficult problems to the end.
A solutions based attitude is also really important where the programmers will have to solve business problems as well as churning out code. I have asked "non technical" problem questions in interviews to get an insight into how people solve problems and just watching how people respond to these types of questions gives you a good insight into how they will react in the "real world". If they ask a few (up to about 5 or so) pertinent questions and then sketch out their solution and deliver it back to you within a reasonable period of time it's a good indicator of a problem solving mindset as well as attitude and passion. It also gives you good clues on how they will perform in the job (in my place they need to be able to solve problems, write code & talk confidently to the business).
So, to answer the question: Passion for coding & technology and a solutions based mindset.
For me, the most important thing is passion. I don't hire people who don't program in their spare time as a hobby.
Edited to add: this is not an exclusive list. I also count "not a douche" as an important thing in a hire.
Additionally, I agree that there are amazing programmers who do not program on their own time, but it's a strong enough indicator of passion that I'm willing to risk not hiring a great programmer who doesn't code in return for a great programmer who does.
Passion. I like to hire people who are passionate [1] about the things that they do.
[1] http://www.atalasoft.com/cs/blogs/stevehawley/archive/2008/11/19/hiring-with-passion.aspxI see in the answer "right attitude", I think that is subjective, because that depends on what they are looking for. I normally try to find out some information about the company and they objectives, that can help you to do a perfil of what they are looking for.
We ask 'What sort of computers do you have at home?'. The answer should be long and involved. I should note that we develop on a lot of different platforms and that people use many different platforms at home is a key indicator of the competencies for which we're looking.
Ask him "what is the biggest programming mistake you've ever made?". Most of the times this will expose "hidden" aspects of the candidate's personality. Look for the good stuff :)
the biggest challenge with hiring is the time commitment
but if youre a fan of manager tools podcast, they say theres no skimping on time when it comes to hiring good staff - it takes as long as it takes
to me the theories/patterns on good hiring practices are well established, the trick than becomes streamlining the interview process
as a basic run down, the hiring process i use is like this:
i have an article called Hiring Programming Staff (Part 1) [1]. since writing this, i a few new ideas, so i will be writing an update in the near future
--LM
[1] http://pm4web.blogspot.com/2008/08/hiring-programming-staff-part-1.htmlNot exactly answering your question, but this is what I wrote as a guide to my company's HR on how to filter resumes, before forwarding them to me:
One of these will be considered a sign of sexyness in resume of software engineers for the first impression:
+5 has programmed as a hobby at least once
+5 a sign of wide interest in a large number of engineering topics (electronics, mechanics)
+4 background in exact sciences (physics or math, but not CS)
+6 cleverness prizes (IOI, IPhO, IMO, IMC)
+4 strong early experience (making money from eng job at high school)
+3 academic studies during high school
+4 other achievements at infant age
+4 significant contribution to an open source project
+3 driving adoption of a technology at work place, challenging status quo
+3 signs of perfectionizm
+3 attention to world standards
+5 a will to rewrite world from scratch to make it fit
+3 interest in modern technology (follows C++0x standard +8, boost +5, etc)
+2 nerdy hobbies (astronomy, photography, aeronautics, music, board games, lojban)
+2 resume in plain text
+2 any other sign of severe brilliance
+2 startup raising attempts
+2 military background (aham, aram, maha - good, matzov - bad)
+2 experience outside Israel
+1 is female, or other discriminated group (new immigrant, jewish, etc)
+2 a link to wikipedia entry about you or your product
-10 if violates NPR
These signs Pavel doesn't like in a resume of an engineer:
-2 english spelling misteaks
-6 spelling mistake in a name of a technology
-1 tpyos or writes poor syntax
-2 wrong punctuation
-2 mentioning experience prior to skills
-2 mentioning education before experience
-7 intermixing skills of different magnitude or value, example: "good at C++ and HTML"
-2 mentions the C++ course he attended at Sela
-10 stating a tool as a "language" in experience (ex. "Visual C++")
-3 dumb sentenses with no meaning ("I have used Design Patterns. Period."). And I also know 'windows internals'. Daresay which??
-4 long (months) dysfunctional vacations and trips ever during lifetime
-2 academic studies of dubios disciplines (ex. musicology. psychology, phylosophy)
-4 extra high (overinvested) psychometry or other misachievements (or misgoals). Above 760 is usually a bad sign.
-3 a resume in Microsoft Word format
-1 a resume in hebrew or other local language (sorry)
-1 non-ISO8601 date format in a resume
-2 crappy facebook profile
-8 any sign of dumbness
-1 for every page of the resume
-1 is older than myself
Passion for programming.
Passion for learning new things.