Just because you know the physics does not mean you will be as good as Michael Jordan
I have faced this prejudice almost my entire career. Somehow, for some reason people tend to think that if you know microscopic details about everything you will succeed in the macroscopic world, because you "understand" mode. In reality, what I have seen is that people who know the most minute details usually stand like scared deer looking at the headlights of an approaching car when they see a real world problem.
Why is this?
I had to spend sometime blogging about this, because this is a widespread problem.
The problem is that, when a platform is built, it is good to have some knowledge of it but diving into an unnecessary level of detail can lead you to wrong places because technology changes very fast - what you assumed as truth in v1.0 might be totally wrong as to how they implemented it in v4.0. What you learned in Java cannot be applied as-is to C#, and wherever you read otherwise, the existence of the garbage collector does not mean you can totally forget about memory management in managed .NET code.
Let us think about this in further detail. I studies Electronics in college - in my final year, I learnt all about the first Intel CPUs and even programmed directly in machine language. Some people may think this is "deep" knowledge which somehow gives me an edge in my day to day work - this is totally wrong. Yes, I learnt a lot about computer hardware and some portions of the software but this does not come into use during any of my software work.
What I have seen is that, to be a great programmer, once just has to program a lot and learn how the system behaves. Ultimately, the actual behavior of the system and running code is what really matters. I do not believe a perfect system exists where someone can fully predict in advance, how a C# program will behave in its entirety.
Some people confuse knowledge of APIs to be real knowledge. They could not be further from the truth. I have seen neanderthal level code written in the latest SDKs and Frameworks including Windows Azure, .NET 4.0, etc. A good programmer will write good code in any framework or API - once they read the documentation and understands the API.
Some people talk about arcane concepts which people rarely use in regular programming - as if the knowledge of that means they know more than you do. I have seen the code written by such people. It is very bad to begin with, and they don't understand how to write proper multi-threaded code, so they end up having to use some really weird APIs to cover their mistakes - thinking it is a MS bug - where in face the way their components are written is so bad - that needs to be changed - not WCF or TPL.
A programmer who writes complex, hard to read code is not a good programmer. Great software is simple but accomplishes a complex task.
So, this leads to the question - how can we recognize a great software programmer, designer or architect? - I say look at how much code this person has written. If a person has written a lot of code, he understand code and its design, and the architecture, better than any person who has read hundreds of books on design and architecture and knows all the names and arcane details from reading stuff.
The readers usually, always talk better than the really good programmers, and can pass these puzzles and weird tests - but faced with a real world issue, suddenly they will disappear from the view. Then the real programmers will roll up their sleeves and do the real work, and keep busy in real projects while the readers go on to pass the next level of certifications.
There are some percentage of people who have a vast database of knowledge in their mind. What I have seen though is that, they get confused because of too much knowledge and they think they know everything - so when they see something they have never seen before - they right away declare it is wrong - and absurd, without thinking twice.
Think about it in a computational manner, all humans have the same brain power, I believe. If you fill it with vast amounts of information, you still only have X amount of CPU to utilize. Instead of trying to be a database dump of all information in the world, what we really need is an external hard drive which is searchable (Google), and train our mind to better process information and to deduce and think creatively.
The human mind is not designed to store vast amounts of information - we have servers, USB drives and hard disks for that. What we need to focus on is improving how we process the data we have.
Why is this?
I had to spend sometime blogging about this, because this is a widespread problem.
The problem is that, when a platform is built, it is good to have some knowledge of it but diving into an unnecessary level of detail can lead you to wrong places because technology changes very fast - what you assumed as truth in v1.0 might be totally wrong as to how they implemented it in v4.0. What you learned in Java cannot be applied as-is to C#, and wherever you read otherwise, the existence of the garbage collector does not mean you can totally forget about memory management in managed .NET code.
Let us think about this in further detail. I studies Electronics in college - in my final year, I learnt all about the first Intel CPUs and even programmed directly in machine language. Some people may think this is "deep" knowledge which somehow gives me an edge in my day to day work - this is totally wrong. Yes, I learnt a lot about computer hardware and some portions of the software but this does not come into use during any of my software work.
What I have seen is that, to be a great programmer, once just has to program a lot and learn how the system behaves. Ultimately, the actual behavior of the system and running code is what really matters. I do not believe a perfect system exists where someone can fully predict in advance, how a C# program will behave in its entirety.
Some people confuse knowledge of APIs to be real knowledge. They could not be further from the truth. I have seen neanderthal level code written in the latest SDKs and Frameworks including Windows Azure, .NET 4.0, etc. A good programmer will write good code in any framework or API - once they read the documentation and understands the API.
Some people talk about arcane concepts which people rarely use in regular programming - as if the knowledge of that means they know more than you do. I have seen the code written by such people. It is very bad to begin with, and they don't understand how to write proper multi-threaded code, so they end up having to use some really weird APIs to cover their mistakes - thinking it is a MS bug - where in face the way their components are written is so bad - that needs to be changed - not WCF or TPL.
A programmer who writes complex, hard to read code is not a good programmer. Great software is simple but accomplishes a complex task.
So, this leads to the question - how can we recognize a great software programmer, designer or architect? - I say look at how much code this person has written. If a person has written a lot of code, he understand code and its design, and the architecture, better than any person who has read hundreds of books on design and architecture and knows all the names and arcane details from reading stuff.
The readers usually, always talk better than the really good programmers, and can pass these puzzles and weird tests - but faced with a real world issue, suddenly they will disappear from the view. Then the real programmers will roll up their sleeves and do the real work, and keep busy in real projects while the readers go on to pass the next level of certifications.
There are some percentage of people who have a vast database of knowledge in their mind. What I have seen though is that, they get confused because of too much knowledge and they think they know everything - so when they see something they have never seen before - they right away declare it is wrong - and absurd, without thinking twice.
Think about it in a computational manner, all humans have the same brain power, I believe. If you fill it with vast amounts of information, you still only have X amount of CPU to utilize. Instead of trying to be a database dump of all information in the world, what we really need is an external hard drive which is searchable (Google), and train our mind to better process information and to deduce and think creatively.
The human mind is not designed to store vast amounts of information - we have servers, USB drives and hard disks for that. What we need to focus on is improving how we process the data we have.
Comments
Post a Comment