views:

1027

answers:

28

What non-tech skills have you found to enhance and/or complement programming skills? Try and think outside of the office setting, too.

+27  A: 

Writing skill. Especially practice this: "Omit needless word" from The Elements Of Style.

popopome
+1. A lot of programmers who pay little attention to writing skill don't realise how it can influence the opinions of others about you, and can help advance or damage your career accordingly.
NM
Amen. The more readable your written prose is, the more readable your written code is likely to be.
John Pirie
That should be "Omit needless words," of course.
David Thornley
+3  A: 

Knowing how to persuade people who are new to your idea/context.

Brett Veenstra
+22  A: 

Communication - If you can't explain what you are trying to do to the customer, there is a good chance that the app you are developing is going down the wrong road. Learn to draw a rectangle on a white board. Work on becoming a better writer.

Visual (not basic) Eyes - Learn to look, really look, at the world around you. Why do I like that UI but hate this one? Why is it so hard to find the noodle dishes in this restaurant menu? Wow, I knew what that sign meant before I even read the words. Why was that? How come that book cover looks so wrong? Learn to take the time to think about why you react the way you do to visual elements of all kinds, and then apply this to your work.

Their Shoes - Try to think about things from other peoples point of view. They may be stinky and really uncomfortable, but sometimes you just have to step into someone elses shoes to really understand something. It's really easy for us think about everything from a 'power users' point of view. Problem is 99% of people won't be using (or understanding) that application the way you do.

Not Programming - Do something other than programming, it'll be good for you. Learn to ride a unicycle, start cooking, take up sky diving, play chess, read a book or build a bicycle from scratch. If you don't do anything but write code the walls will start closing in and soon you won't even know what the outside world looks like, and that will make you a crappier dev.

ps - Please take all of the above with a grain of salt. I know that I don't know much, you should too.

David HAust
+4  A: 

Communication. It's key to operating in the real world. You can be the best programmer who ever lived, but if you can't communicate what you're doing with other people (especially non-technical people), you're doomed to failure/being a right pain in the ass to work with.

eplawless
A: 

Writing skill

A second vote to that! SO many programmers have such poor writing skills which is why documentation and spec documents are usually absolutely horrible.

Honestly, if you only do one thing that is "non-tech" to improve your skills as a programmer, take a creative writing course. You will be happy you did the next time you have to write any documentation or specs... you may even actually enjoy doing it for once and definitely finish it faster. And your boss and co-workers will be happy you did to ;)

Adam Haile
+5  A: 

Yes, the single most important 'other' skill to have would be communication, but here's summing this up with the rest of them.

  1. Very good communication skills - how to talk to management, customer, business, team members
  2. Drafting skills - for documentation, emails, reporting
  3. Being Diligent - behavioral but very important - knowing when to do, what to do, being careful
  4. Good with people - Proactive and team attitude, rather than individualistic/egotistic

Update

I might add,

  1. Persistence to solve problems and trouble-shooting is very "visible" and "valuable" skill
Vin
A: 

Rock climbing is the best physical analogy to software I have done.

kazakdogofspace
+5  A: 

Sports . Ok, i know; perhaps not #1 in the list as far as importance but. Think about it; programming requires that you sit in a chair for extended periods of time (yes, more than the typical admin. type).

Sports build team work (even solo sports tend to do this, as people group to practice solo, again: in the general case), hand-eye coordination (ok, this isn't a must for programmers, uhm, typically) and communication in one fell swoop. Not to mention: endurance. Yep, sitting down for 14 hours straight butting out code requires of mental and physical endurance.

Here's another. Sports and/or workout is so far-removed from actual programming that usually it works to send your mind elsewhere, paradoxically; this works (for me) to focus more when I DO program.

Again, probably not #1 in the list; but definitely made a change in our work environment.

/mp

mauriciopastrana
+1  A: 

Maintaining Your Appearance

This arguably goes under people skills / communication, but I think it's worth singling out only because programmers tend to get a bad rap when it comes to this. I wrote a whole blog article titled "Metrosexual Developers" not so long ago that covered this in more depth.

Kevin Pang
+4  A: 

Research skills

I would say that knowing how to find the answer when you don't know the answer is very important. I personally find that knowing how to code is important, but knowing how to find the answer quickly can be even more important.

Kibbee
+2  A: 
  • Able to generate alternatives
  • Able to focus on priorities
  • Able to put oneself in others' shoes.
  • Able to judge ideas for benefits and dangers.

In short, able to think.

Phil Bachmann
+2  A: 

Any kind of hobby they are really into such as lock picking, MTG, beer brewing, video game design, an open source project, photography, etc. What is important is they are passionate about it. It shows a desire to learn, but also they will look at problems differently then the rest of your team. Every hobby has obstacles and things to learn and it will apply in some form or another to your project.

Maudite
A: 

Management/Business: everybody else is saying that communications and all the liberal arts skills are what you need, while they may be good, nothing teaches you to navigate a corporation and really make a difference than some business and management skills. With out these skills you are always seen as the tech guy in the boardroom and not really seen any other ways. However if you are a manager/businessmen with technical skills you are going to go alot farther than a technologist with communication skills.

Nick Berardi
A: 

Linguistics. Understanding how (and why) languages are put together they way they are. Establishing a sense of empathy with the language designer makes for less memorization and trial-and-error learning.

saint_groceon
+2  A: 

One of the biggest ones that I've learned is knowing when you don't know the answer and being able to say no.

Another? Being able to get up and walk away from a problem and think about it outside of the context of your desk and monitors.

knowncitizen
+2  A: 

Parenting and martial arts: both are ideal for keeping the workday in perspective.

Example of the before mindset: "Man, that meeting was horrible! That jerk is tedious and obnoxious! What am I doing here?! Help! I'm trapped in Dilbert world! Argh!"

After: "Okay, that was a long meeting but (a) no one was throwing up on me and (b) no one was kicking me in the head. Also, I have to admit that he did have one good point in that mashup. Now to get that taken care of so I can get home to play with my kids before Tae Kwon Do class...."

Bob Cross
+2  A: 

Furniture making. The emphasis on craftsmanship, the lack of a safety net (no undo, no source control), and even the pacing have helped me re-assess my approach to programming. Plus, it's just nice to construct something in the corporeal world.

+1  A: 

Diplomacy

This can mean befriending people in various departments, and calling upon those same people if you need help dealing with an issue or user specific to that department. For example, if you and a department head happen to be stuck in the same boring corporate training session, you can either quietly sit through the boredom, or try to strike up a rapport and establish at least a minimal relationship with that person, enough so that you might greet each other down a hallway or cast knowing grins or glances to each other in meetings.

Darth Continent
+1  A: 

Asking the right questions.

It's the best way to understand anything, and you'll find clients rarely even understand their own problems they wish you to solve.

Cuga
+1  A: 

Playing/learning to play music is a great complement to programming. It is like learning a whole new language and also keeps your brain active. I don't have the links handy but I have read a few interesting articles about musicians making good programmers.

Jon
A: 

I would say that being able to communicate technical ideas in a way that non-technical people can understand them.

As highly technical people, developers often underestimate the technical difficulty of the concepts they are expressing.

Dana Holt
+3  A: 

Learn Microeconomics. Learn about substitutes, complements, and supply and demand. Lots of stupid business decisions in the software world could have been avoided with rudimentary knowledge of Econ.

Great ideas go nowhere if they're not marketed correctly and priced aggressively. Just having a smattering of business knowledge is huge. Programmers are unique in that they can make great products in relatively little time with almost no overhead costs. Lots of tools and SDKs are free. Payments are simple. Delivery is almost trivial.

Sitting in your bedroom you could write the next million dollar app or service. That is useless until you can network, market, and sell your product to the world.

Chet
A: 

Work on your typing skill and learn how to type without looking to the keyboard.

That improves your performance twice at least.

Bogdan Gusiev
+2  A: 

Honesty: The skill of openly acknowledge what you don't know.

Open-mindedness: The skill of viewing other people's ideas to be of equal or greater value than your own.

Humbleness: The skill of realizing that you are not the best at everything.

Listening: The skill of being able to understand other people.

Cwan
A: 

The ability to think in abstract terms. Being able to understand 'mocks', 'stubs', 'builders', 'decorators', and the like is essential to being a good programmer, especially if you write code in any higher-level language.

A: 

Problem solving comes to mind as something not mentioned. It may be seen as technical for some as it is used in technical support all the time, but it doesn't necessarily involve technology directly.

Knowing how one learns would also be another skill that should be mentioned here. Some people can read an abstract set of steps and have no problem using it and others require hours of practice before picking something up. Are pictures better than words? Does an audio format work better than a visual one? Those kinds of things are also important.

JB King
+1  A: 

Intellectual honesty (especially with yourself).

Don't back off from a well evaluated position just because of peer pressure or fear of being snubbed by the local alpha geek. Also don't tow the party line just because it's uncool not to. You have to think for yourself, make your own decisions and have solid reasons for making them. That's what differentiates a code monkey from a problem solver.

Noufal Ibrahim
A: 

Sculpting and painting/drawing.

Mostly physical sculpting - be it clay or popsicle sticks or metals. You learn to look at things from more angles and to be willing to try something new or throw away entirely. Having an awesome sculpture collapse under its own weight trains a certain detachment from the effort put in; you need to be focused on the goal and enjoy the process rather than pride yourself in the blood, sweat, and tears.

Nabil Ahmad