views:

327

answers:

11

Besides "non-technical" skills, like communication and teamwork, what are skills programmer should work on having?

From the top of my head, I thought understanding math and concurrency. What are other necessary/recommended skills for a programmer?

+6  A: 

Debugging - knowing how to isolate a problem by tracking it through the program execution. This includes familiarity with the programming language used to create the program and the debugging tools available for the language. When sophisticated debugging tools aren't available, the programmer should know how to insert trace code, assertions, logging, etc. to track down the source of the problem. It's part learned skill and part intuition but this is a great skill for any programmer to have.

TLiebe
+2  A: 

Knowing how to debug effectively, and how to plan architecture/systems in order to implement them effectively and communicating this to the team involved.

Kevin
+2  A: 

Creativity and problem solving.

Software development is as much a creative process as writing a novel. Programming also requires solving one problem after another.

Both creativity and problem solving are skills that can be learnt and practised - search amazon for the numerous books on the subject.

Dave Kirby
He specifically asked about technical skills.
danben
+11  A: 

Logic is a must have. One must also be able to keep track of many things in your head because you'll be thinking of paths, decisions, and conditions that your program will deal with.

Thinking modularly is good...will come with practice...

Naming your variables with meaningful names is essential! Some people don't think too much about it and it may become confusing to read later (even for the person that programmed it)

milesmeow
+1 for logic. WAAAAAY underrated.
George Edison
Logic is the gift that keeps giving. Helps with *all* other technical skills (and a fair number of non-technical ones too).
Donal Fellows
+1 because it makes me feel better about my philosophy degree.
banzaimonkey
+3  A: 

Organization! If the code isn't in an organized state, it is completely useless.

Nobody wants to be responsible for messy code.

George Edison
+2  A: 

One MUST be pedant (have a very sharp distinction) by all means. No way you'll get away with even the smallest bug - it will come after you!

Of course that good logic is a must as well.

In contrast to what everyone says, that you need to be a good math person, I consider myself a very good (self-taught) programmer yet my math skills were never special. Even had difficulties with it in high-school! (:

Poni
Disagree on the math. While it may be very likely that you will need it, this will be mostly dependent on what kind of project you work on. It may be that I work on a image analysis program and need matrix math, but on another project I could need stats, physics, etc. I am not saying math is NOT required, just that the nature of the task will determine whether it is needed. I suspect the OP is asking what skills are more generically required.
MJB
Everyone says, at least here in my country, that math is a must for a programmer. I agree when you're saying that it actually depends on the project type, but, if you're a good math person you're automatically "skilled" with several characteristics such as logic, and that's the point of the said declaration.
Poni
+1  A: 

Being able to type really fast! (Read Steve Yegge on the subject if you haven't already.)

Tom Smith
+1  A: 

Motor skills. At minimum, the ability to bathe, brush teeth and apply deodorant. :)

jasonk
+1  A: 

When you have all the above, you should go to the next level: Stubbornness. Really good and experienced programmers know where to avoid creativity, where to avoid clever trick. They know when to say "no", when to stop, what will be the cherry on the pie that will break the balance. Really good programmers know how to write plain flat clear and simple code (without recursion, oh my...) which will be the bricks upon which one can build complex and stable architectures. Banish wisdom, discard knowledge, said the Old Guy.

gb
A: 

you have to get an algorithms and data structure course

know how to use interface classes

know how to command and conquer

design pattern

huge code management

radi
A: 

Three attributes are crucial to be a good programmer/software developer/analyst:

  1. Must be a left-brained thinker
  2. Must be able to learn new concepts on your own by reading, taking classes, watching videos
  3. Must have patience and attention to detail to work on code that can look like gibberish to non-programmers.

Left-brained means:

  • uses logic
  • detail oriented
  • facts rule
  • words and language
  • present and past
  • math and science
  • can comprehend
  • knowing
  • acknowledges
  • order/pattern perception
  • knows object name
  • reality based
  • forms strategies
  • practical

as opposed to right-brained which means:

  • uses feeling
  • "big picture" oriented
  • imagination rules
  • symbols and images
Winger