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?
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?
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.
Knowing how to debug effectively, and how to plan architecture/systems in order to implement them effectively and communicating this to the team involved.
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.
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)
Organization! If the code isn't in an organized state, it is completely useless.
Nobody wants to be responsible for messy code.
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! (:
Being able to type really fast! (Read Steve Yegge on the subject if you haven't already.)
Motor skills. At minimum, the ability to bathe, brush teeth and apply deodorant. :)
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.
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
Three attributes are crucial to be a good programmer/software developer/analyst:
Left-brained means:
as opposed to right-brained which means: