Don’t only practice your art, but force your way into its secrets; art deserves that, for it and knowledge can raise man to the Divine.Ludwig van Beethoven
Part 0: PREFACE – The Philosophy of Knowledge
All the information in the world can be useless. Only those parts of it, that are put into practice, have any value.
Today, enormous amounts of information are freely accessible to everyone at any time on any topic. However, information and knowledge are two completely different things, yet they are often accepted as interchangeable.
In order for any information to become knowledge, it requires to be absorbed via an effective action so it can be assimilated. And even then, knowledge without practice is dead, hollow knowledge and eventually degrades again back to a state of unused information.
Reading and absorbing new information is undoubtedly one of the most important things for the growth of a human being. However, the lack of practice would make it pointless.
PART I: The Hollow Knowledge
All computer professionals and enthusiasts know that without constant learning, not before long, their knowledge becomes obsolete. However, going to the extreme of learning is also not much more valuable if it’s not put into practice.
Acquiring new information should be mainly (not only) driven by the desire or need of applying a new practice in action.
I personally had a bad experience with consuming useless to me information recently.
Two years ago I bought a Python book. A good, big one, rich of information. I went through all of it. Scripting languages are not my thing, but I think Python is a good one.
Right after I read the book I practiced 0% of it.
Two years later, today, I need to use Python at my workplace to simulate some software events with virtual machines prior to coding certain solution on another low level language. I had to start from the very beginning, because I never practiced Python for an extended period of time. The time I spent reading the book brought zero value to me, what a waste.
The right way to go is learning by doing. And no, I don’t mean to simply learn by practice only. What I mean is that you have to start with practice at day 1 (roughly said).
Once you gather enough information about what you should know, you can step forward and take rational and informed decision regarding what is important for you to know and then start digging for more deep and complete informational materials.
Practice is the only effective way to absorb any useful information and transform it into knowledge.
You may spend your whole life reading, yet end up knowing nothing out of this information.
Reading without practicing is like seeding without harvesting.
Part II: Depth
Knowledge depth is another important topic that I’d like to discuss.
Most of the people today consider their focus over ready-made solutions, like libraries and frameworks, as part of their fundamental knowledge.
That couldn’t be more far from the truth.
The usage of high-level solutions is very convenient and helpful, especially when the time is a factor.
However, I strongly believe that if you are serious about knowledge, you should really dig deep down to the essence of the problem and understand its core.
Do it yourself first. Solve it several times, with different approaches. Once you become confident about your understanding, go ahead and use whatever library or framework you like.
I can’t stress enough what a huge rip off is the use of ready-made solutions, to your knowledge.
You can’t know everything, but you should look at this, as you can know anything. Anything that you turn your attention to, that you choose to focus on — you can understand. Nothing is magic.
That brings confidence and a solid foundation. Also, a certain level of satisfaction to know that you can build something from scratch, even if you choose not to.
Deep knowledge is vital. Therefore, it is not a waste of time to do whatever it takes to gain it. Especially practicing.
— Yuriy Georgiev (aka jeux), xLabs Advanced Research at VMware USA
PART III: Reality Check
Write. Write code. Write new code. Write different code.
Jumping right in – you can read papers, or watch tutorials, but in the end they are just a story. The difference is in that they usually are “simple” write-ups of an experience or some trial and error, a process that you never experienced yourself.
Reading James Bond novels, does not make one a spy.
As our friend FrostWolf mentioned in the chronicles previous article, tutorial hell is a nasty drug, same applies here – prefer dependency hell over tutorial hell and get yourself dirty. Break things to learn them; do it intentionally or not, and believe me you will never forget a lesson that was learned from a mistake.
My co-writer touches on the subject of knowledge v. information, I will just say that – knowledge is best served with a side dish of trial and error.
Every code, every piece of software or even that small script you wrote yesterday to rename your photos is an experience in its own little domain. That broadens your skills/knowledge and allows you for better abstractions and/or creativity in the problem you face. Also “harvest” the code you “seed” i.e. maintaining the codebase over a long period and seeing what your decision ends up looking down the road. You will be able to craft better solutions, see patterns and lean on past experience.
As Yuriy stated, high-level solutions/libs/frameworks are useful and have their place in the world; but if your only knowledge/experience ends at knowing how to glue them and stick a bunch of black boxes inside another black box – that a good programmer does not make.
Code is a tool (as are the languages), thus you need to be critical towards the code, critical toward EVERY SINGLE LINE. That allows you to explore, to see the man behind the curtain and much more.
As the tradesman makes his own tools and demands the best from them, so must you. You must be the master of your tools and know how and where to use them, and that comes only with experience.
What else comes with experience? Improvement of your “gut”, the feeling you get, your basic instinct when you hear a problem; and that makes you an expert!
I feel the irony in the current situation. Just go and write code, then some more, and come show it to us 🙂
— Martin Dimov