views:

761

answers:

12

Inspired by "What are the top three most important skills new software development graduates tend to be missing?, here's a similar question but with a twist.

What are the top three most important skills companies tend to ignore? As in, what qualities and skills, related to software development mind you, that you've noticed some companies ignore?

+19  A: 
  1. The ability to complete things and not just be interested in new things.
  2. The ability to work with someone else's code without feeling the need to rewrite everything.
  3. The ability to work within set coding standards and methodologies.
rein
I would give this +10 if I could, great comment. Their's too much emphasis on "rockstar" coders and not enough on people who can actually ship a damn product.
drewh
I believe you just provided the list that companies tend to focus on.
Ty
-1, these aren't the top three things companies ignore, but exactly what they want most.
Adriano Varoli Piazza
I don't find these ignored in companies at all. On the contrary, they're pretty much the rule.
Greg D
@Adriano - typically companies want to know how well you know x programming language, how much experience you have and how you work under pressure. I've never been asked if I can ship a product.
rein
+1 to this, even though I suffer from #2 as a programmer. I just can't read some people's indent styles.
Zan Lynx
I think you're thinking about the interviews. I'm thinking of stuff that gets you fired afterwards.
Adriano Varoli Piazza
@Zan: http://en.wikipedia.org/wiki/Allman_style#Horstmann_style Horstmann style indenters should be fired. WITH FIRE.
Adriano Varoli Piazza
+19  A: 

Three things most employers ignore:

  1. Talent (Gets work done, the right way)
  2. Innovation (Brings forth valuable ideas, improving the team and the project)
  3. Passion (Motivates other team members for their work and their craft)

Reasons why:

Talent is difficult to quantify without working beside the person. Years of experience is so much more friendly to managers and easier for everybody to measure. Though talent is usually what employers are looking for, they have no easy way for non-engineers to measure it. Hence, years of experience is used instead.

Innovation is difficult to foster while under the popular hierarchical leadership where promotion and prestige are provided to individuals who get it done and don't rock the boat for the other team members. It is essentially promoting conformity, which stifles new ideas and techniques. This also ties into the next point...

Passion is easily attributed to other things, negative other things. To quote the other popular answer,

The ability to complete things and not just be interested in new things.

Although that sentence is really bringing up two unique points, the individual gets work done and the individual isn't focusing too heavily on new ideas. It is singling out individuals that want to do things the right way, but are not experienced enough to know when to stop looking. Experience comes with time, an unending interest in what you do, does not.

Ty
Great answer. This was my thoughts exactly!
Jani Hartikainen
You know the problem with talent, innovation, and passion is that is can sometimes add up to ego, disregard for established process, and argumentativeness. I once had a VP tell me he'd rather have mediocre people who would work then a staff full of "talent" that would cause him nothing but headaches. (Admittedly I think this was directed at me, but I tried to learn the lesson anyway;))
Oorang
Many things can add up to ego unfortunately. You do raise a good point. A team of talented, passionate individuals looking for ways to innovate everything is going to cause problems. In this field, however, a team of drones is far worse. Management wants their lives to be easier, just as we want our lives to be easier. For management, that means people that do as they are told. For us, it is people that do what is right.
Ty
+3  A: 

Mind you I have not a long experience in interviews but in all of them I found a lot of companies tend to totally ignore:

  • creativity or creative skill and ideas that come with that (basically they just want you to do your job fast, nice and sound, creative solutions are often seen as weird or unwanted)
  • teaching or speaking skills, sometimes they don't like a talking/speaking able person, what counts is responsibility, if you don't count where you work, your ability goes unnoticed, and you cannot gain some power using it.
  • horizontal/vertical knowledge, some companies prefer to have people highly skilled in one subject, therefore they tend to ignore people with horizontal knowledge, for others it's the other way around, although usually in the latter case vertical knowledge is not seen as bad.

This is what I thought at first, I'll edit if something changes :D

Lex
+10  A: 
  1. Creating something that works and is robust vs something that barely works and just passes the initial use cases.
  2. Being able to code something that is extensible for the future vs something that must be rewritten when the next set of features are added.
  3. Being able to write decent regression and unit tests.
kragan
+1 for 3.......
Oorang
A: 

The ability to adopt to new things and gain new knowledge.

codymanix
A: 
  1. Debugging.
  2. Collaboration among Team and Other Employees
  3. Algorithm Development
L Digital Dash
A: 

In my experience:

  1. Writing code maintainable by a programmer other than themselves.
  2. Communication skills.
  3. General software development ability (vs. the specialized skill(s) for the immediate need).
PTBNL
+2  A: 

I have been a part of interview panel in my company. The funny thing is that I had already interviewed more than 50-60 people before my company sent me for the so called training on how to interview! :)

Before going for the training, I had 2 or 3 good mentors who had helped me grow and also helped me learn about how to judge someone's skills. And then I attended that training! It was purely an HR exercise, talking about things like how much company spends on recruiting one person, how you should greet the candidate, how you should sit and what not! :)

So I feel the most neglected aspect in Software Companies is training of people who actually interview candidates! I have been part of interview panels where people tend to ask questions like:

  • What is inheritance?
  • What is the difference between HashMap, Hashtable > etc etc.

So most people tend to ask questions which anyone can answer without understanding the concept. Due to this, I have had many people in my teams who don't understand the basic concepts and I have had a hard time dealing with such lot.

According to me 3 things which are ignored by companies

  • Basic Concepts and clarity of thought
  • Application of concepts (People know WHAT is Singleton,factory etc but do they know WHEN and HOW to use them?)
  • Willingness and Ability to learn new things: This is equally important. I have seen people refusing to learn, usually because they don't want to.

Ability to work in teams is usually taken care while recruiting in my company.

SO unless the people who interview candidates improve, don't expect great things from fresh recruits ;)

Tequila Guy
+1  A: 
  1. The nuts to tell a superior when they're wrong. Showing an alternate solution, ofcourse.
  2. The humility to be told wrong. Learn from the mistake and continue on with life
  3. The ability to prove both of the above cases.

Bonus. The selflessness to contribute to the community.

Phillip Jacobs
+3  A: 

1) Interest in non-mainstream programming languages: 95% of developers program in either some flavor of .NET, Java, or C++. How many people program in Groovy, Prolog, Lua, Forth, D, OCaml, Erlang, Haskell, or Lisp?

In my experience, mastering the idioms of a these oddball languages lets you approach problems in mainstream languages from a novel angle. And if for nothing else, someone who learn an oddball language for fun shows a real passion for programming.

2) Algorithms and data structures: most CRUD and line-of-business development isn't algorithmically intensive, but there's going to be a time when you encounter a problem which can't be solved using your language's built-in linked-list, array, or hashtable data structures.

Just to name a few examples I've seen in the real world:

  • I worked on a project which contained a requirement to flag images of insurance forms tilted beyond a threshold angle.
  • On another project, I worked on a project which required writing a simple decision engine: scanned items are assigned one of a dozen or so statuses (new, activated, pending, voided, cancelled, etc), and there is some non-trivial business rules which need to be evaluated to determine state transitions. The problem at hand can be modeled is modeled very easily and naturally using finite state machine.
  • Recently, my project's requirements demanded the need for a thread-safe priority queue.

There are simple and efficient ways to solve the problems above, but in each case the original developer implementing the functionality had no experience with algorithms and data structures. The resulting code was a disaster.

Hiring managers often don't understand what it takes to write software, they accept that everything is "magic".

3) Elegant code: You'd think the fact that maintenance accounts for 80% of the cost of software development would make companies emphasize a high quality of code, but companies just don't care.

Your code is invisible to the end user -- as long as the product sells, your company doesn't care whether its a masterpiece of algorithmic elegance or pieced together with messy hacks. "Does it work? Sort of, you say? Good enough, package and ship!" (sighs)

Juliet
+2  A: 
  1. Problem analysis and formulation. This is an important skill and is related to requirements gathering, but not quite. Uusally a software project is started to solve some underlying problem. However, that problem may not be the actual root problem - it mahy be a symptom of the problem and the root problem can be broken down in different ways. Some ways may be better or easier to solve than others.

  2. Problem solving. Programs are designed to solve some problem. The way you approach the programming is dependent on your problem solving skills. How do you break down a problem, determine the space of possible solutions, and choose one of them based on certain selection criteria? This is another skill that is language/environment and tends to be overlooked.

Sometimes the problem needs to be restated or reformulated.

  1. Comprehension skills. This is related to things such as communication skills but goes deeper. How well can the candidate understand a problem that is described to him? Since often the problem is pporly or incorrectly formulated (see 1) understanding the problem requires not just understanding what is told to the individual, but understanding how to determine the root problem, scope etc.
Larry Watanabe
A: 

It really depends on what the company needs. Some companies just need monkeys, cheap developers to do basic work for a few bananas. They don't want the developers with passion or ambition who have a desire to constantly improve (monks) as they have no career path for them and and they will not stay.

What a lot of companies that actually need the high-quality creative (monk) developers sometimes do though is concentrate on technical skills (which go out of date very quickly). They don't look for the underlying abilities of a developer, the intrinsic qualities separate the great developers from the rest. Examples are:

focus, eye for detail, positive attitude, problem solving mindset, pride, curiosity, creativity, intelligence, discipline, commitment, learning ability, patience, and passion.

In my option the three most important are:

  1. Desire and ability to learn (to keep up with new technologies, techniques and to learn the business domain)
  2. Creativity (in approaching problems and coming up with innovative solutions)
  3. Passion (working because they want to do a good job and enjoy it)
Daniel Vaughan