What makes you a good developer? A talk for Microsoft Student Partners
Last Friday I was invited by Microsoft Indonesia Academic DPE Team to deliver a talk in front of new Microsoft Student Partners (previously known as Microsoft Student Ambassadors) from various universities in Java & Kalimantan. They asked me to deliver a talk on what makes one a good developer. So, I delivered the talk titled "So you wanna be a developer? What will make you a good one".
The point I emphasized was that:
A developer is a Problem Solver.
He/She solves problems by creating Algorithms and Data Structures.
He/She express the algorithm and data structure with Programming Languages.
He/She makes him/herself productive by using APIs/Libraries and Tools.
Importance is in that order!
So, basically, a developer solves problems. Not just about writing codes. Problem solving skill is what really matters. Then he solve the problems with his primary "tools", algorithms and data structures. Algorithm is a general purpose mental tool, a set of steps that one tell computers what to do. This is far more important than programming languages (C#, Java, C++, etc) as programming languages are nothing more than some words and grammars we use to express our algorithm and data structures. It's just an expression of more important things; the algorithm and the data structures. At last, the least important: the API/Library (such as .NET Framework) and Tools (such as Visual Studio, Team System, etc).
We can always JIT learning languages, APIs & tools. They are trivial. JIT Learning means Just In Time Learning, a phrase that I & Risman coined together for these kind of knowledge. Languages, API and Tool are something you can learn just in time when needed, and you can always google it if you have problems. That's not the case with Problem Solving Skill and knowledge & skill in Algorithms and Data Structures. You need to really-really learn and understand it.
Specific in algorithms, I highlight three kind of developers:
"Tell me what to code" kind of developers, they are nothing more than just a live & breath compilers. That "compile" specs into programming languages. But, with the advancement of Software Engineering (Visual Programming, Workflow Foundation, DSLs, Software Factories, etc), these kind of developers will diminish.
"I know this algorithm" kind of developers, they learn and remembers all the algorithm they have learned. However, all known algorithms will be implemented in libraries that even any beginner can make that "method call". So, these developers will also has no value.
"I can develop an algorithm for you" kind of developers, they know and remembers all they algorithm they have learned, but then they have the skill to tweak or combine the known algorithms, and also has the skill on algorithm design techniques to create new/better algorithm. They can work with "new" problems rather than "solved" problems. Also, if the the problems are "solved" problems, usually these programmers know in which library the solution is.
That said, if you're still in school, learn well on your algorithm classes. Also sharpen your problem solving skills. Then although it is trivial, you should start to learn about progamming languages, API/Library and Tools. Learn the most advanced-cutting-edge technologies. Learn what is most used in the market. C#, .NET Framework and Visual Studio is one that you may consider among others. Once you master a language, a library and a tool, it is very easy to learn a new ones; other different languages, libraries and tools. Again, these are EASY CHEESY.
On problem solving skills, you can learn the techniques by reading books. For your reference, my favorite problem solving book is: How to Solve it by G. Polya. A classic-timeless-50-years-old book that is still relevant till today! It is actually for mathematical problem, but you can use the heuristics for all other problems, especially programming problems.
But that's not enough, to learn how to swim is to swim, not just to read books on swimming.
Good luck and congrats to all the new Microsoft Student Partners in Indonesia!