In my recent blog posting "The Secrets to Becoming a Great Programmer" I discuss a couple of characteristics of great programmers. You can read about those characteristics at
The Secrets to Becoming a Great Programmer
What other characteristics make a programmer great? Do you agree with my assessment?
I agree with you all the way, except from one thing:
"Do not reinvent the wheel".
If noone reinvented the wheel, Richard Stallman would not be able to get to his office at Microsoft in time.
-Besides, Michelin would also disagree.
I often reinvent the wheel, because the existing wheels are usually shaped like octagons or worse.
Things that are possible with new wheels would not be possible with the old ones.
However... I'd like to also state that you might be able to improve on those wheels that are already invented, so they'll become usable; if that's possible, go for it!
And one more thing for great programmers: Do not continously work on something 24/7, because there is a risk that you will "burn out".
If that happens, it may take up to 3 or 4 years before you can do just a single line of code again - you do not want that to happen.
Each time it happens, it'll take less time for you to get in that state where you can't get out, so please take good care of yourself!
(And frequently visit places that do not even have a computer close by!)
One of the good trade-marks of good programmers from an efficiency point of view is knowing when not to re-invent the wheel. Check out my blog “Buy” versus “Make”: It’s about risk management!. Often times, engineers at the technical level are wanting to create everything when pieces are already available. Sometimes, technical folks can also get in a rut and even if there is ultimately a better way of doing things that would improve their efficiency by 5x, they still hesitate to change their work flow.
That's true too. No need to create a new text-editor; there are plenty available.
But recently, someone wanted to make a piece of software, that could flash-program via JTAG.
Someone told this person to not re-invent the wheel, but instead use OpenOCD.
While OpenOCD is really, really good (especially after the recent big-endian fixes, so now even I can use it), it uses around 2.7MB space.
A new lightweight application would perhaps be able to fit inside an ARM microcontroller, thus making the entire JTAG-programming experience new. You would no longer have to compile sources for two hours in order to get a working version for your own platform.
OpenOCD *could* do that, but only if the microcontroller it should run on has a huge amount of memory.
In my opinion, re-inventing the wheel has to do with bringing people more options, plus making things possible that are not yet possible with any existing 'wheels'.
Still, as you say, if an existing tool can be used, it would (probably) be waste of time and energy building a new tool with the same capabilities.
Thanks for the comments! My reference to "not reinventing the wheel" was meant as mentioned that a programmer needs to be aware of what is going on in the industry and if they can leverage someone else's work such as a 3rd party component, etc to get the job done then they do. I've seen many times when programmers rewrite a common from scratch themselves, fight with it, introduce horrible bugs into their system when they could have simply bought an inexpensive piece of software that did the same thing but had already been tested and validated. It goes in line with the "Not Invented Here Syndrome" that some programmers have where if they didn't write it then the code is unacceptable.
Thanks for the additional insights and the comments greatly benefit the community!
I hope that the ARM CC will serve as a place for brainshare for programming ARM, so that engineers can build on each other rather than re-discovery everything from scratch.
For: "Do not reinvent the wheel" and all replies.
My interest in RISC started in mid- to late 1990s. For me then, RISC is "reinventing the mill." Several implementations of the concept succumbed to technical, commercial, political, and other sorts of obstacles but the surviving architectures (with ARM not just surviving but highly successful) brought us new, previously inconceivable devices and a way of refining good old things. We should be grateful to all those who did not accept the status quo.
When I was a teenager and up in my 20s, I do electronics and programming like "I'll sleep when I'm dead." After reading books and articles in physiology and listening to medical practitioners, I adjusted. I agree with your last paragraph. Having adequate rest is not just good for our health it makes us more efficient and productive at work.