Programmer Tip: Differentiating Between Toys And Wisdom.
Have you seen a young and budding programmer flex his engineering mussels?
If you get a chance to overhear two young and budding engineers bump into each other at a cafeteria or a grocery; chances are that all you will hear is a conversation which revolves around the famous which-technologies-are-you-working-on-now-a-days-question.
There is a huge possibility that the discussion will continue forever as both these engineers try to impress each other with the cutting-edge technology they are working on in their latest project.
You Don't work on Windows Communication Foundation yet?
Don't tell either one of these engineers.
If you do they might look at you like you belong to another planet.
Every now and then I personally witness the minds of more than one young and budding programmer explode when they hear that I am not working on any project that uses Microsoft Windows Workflow Foundation.
As developers we like to drool over the latest technology that Microsoft, Google or 37Signal throws our way. We crave to put it on our resumes and we get a huge technical-ego-boost out of using it in our real-life projects.
Rarely do we realize that all we are doing is tinkering around; consuming API's; tweaking configuration or should we just say --- playing around with new programming toys that are made available to us; year after year.
Now go grab the same two programmers you were overhearing at the grocery and ask them what Inversion of control is; what dependency injection is; or what liskov substitution principal is and watch them stare at you like you just dropped a stinking rat on the table.
Chances are that most of them will fail at even the fundamentals of object orientation.
Look hard; and chances are that you might even find programmers who cannot program working on some seriously cutting edge technologies out there.
If you are one lucky son-of-a-gun who landed in an organization that works on the latest technologies out there; and you have been busy slamming your fingers on the keyboard; writing code on some of the latest technologies out there and living in a technical-paradise; it is time to take a pause and reflect.
When was the last time you studied closures as a language feature instead of just focusing on lambda expressions as a cool new C# feature?
When was the last time you picked a book on object orientation or the craft of writing better code and decided to browse through it?
When was the last time you kept some time aside for investigating how big your functions should be; what you should call them; or how you can get better at the craft of working with best invention in history computer science?
While it is OK to go grab the latest-beta-version of windows on your box; play around with ubuntu; and have fun exploring Windows Presentation Foundation; are you; dear reader; also giving in serious and conscious effort at understanding programming languages or reflecting on object orientation?
Are you browsing through the code-base of open source projects out there and seeing how they lay out code; how they design their applications or approaches they take to solve generic problems.
As far as the world of software development is concerned; if playing with toys is important; developing wisdom and deeper insights about the craft of writing good code is equally important.
Do you actively track; realize and differentiate your playing-with-toy time from your wisdom-development time?
How much time do you spend on a weekly basis to get better at the craft of writing better code or developing deeper insights?
What are the tools you use to develop the craft; pick up deeper insights and grow wiser every day; dear reader?