Click here to Skip to main content
15,886,137 members
Articles / All Topics

Technical knowledge accumulation in software development

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
13 Aug 2011CPOL6 min read 13.5K   1   2
Technical knowledge accumulation in software development

Usually when I come across something technical, I need to lookup or do some background research at work, I start digging in the web and other resources… too deep, in fact. For instance, if I wanted to study a particular technical concept related to my work, I would start reading it up on the web and almost always I would run into a prerequisite piece of information that I need know in order to understand what I’m currently reading. So I branch out from there and start searching and reading up on the prior knowledge I need, which in turn might spawn new concepts and more prerequisites that I may need to have knowledge of, in order to come up the chain of facts and understand them.

My problem is that the brain does not allow information to be read and stored in a half understood manner. If I read something on a specific topic and conclude that I truly did not understand the whole of it, I start a recursive pattern of reading and researching related concepts, facts, history and lots of other information. This can be a good thing, and at times a bad thing.

A real life scenario might paint a more intuitive picture: A few days back, I came across the STAThread and MTAThread attributes used in .NET for communication with COM constructs. I wanted to know why and how they are used in .NET, what thread apartments are, what roles the COM objects play, etc. The objective of this exercise was to be better armed with knowledge on .NET and COM communication when I go about my development work. Initially I had opened a few MSDN pages explaining the attributes in .NET, which prompted me to look up and search on COM and COM implementation, which led me to STA (Single Threaded Apartment) and MTA (Multi Threaded Apartment), which led me to…. well, you get the idea. About thirty to forty browser tabs later, I was getting ready to implement some C++ code, trying to build the COM server described in the current web page I was reading. If I had run into any errors in the C++ code, I would have started off a new search on that issue…. and so on.

The above scenario may be familiar to some, and others maybe shaking their heads going “tsk, tsk”… But looking again, isn’t this how we software developers are encouraged and motivated to work? To dig deep into facts, to read source code examples, write them and test them, and gain all the knowledge needed to master what we do not know? It is how most of us work, or at least how most of us are driven to work when we encounter something we need to learn or research at work. Thinking back for a moment on the scenario I described, my main objective was to gain an enhanced understanding on the STAThread and MTAThread attributes so that I could approach my development task with knowledge, in case for example, I needed to consume COM services from the .NET application. Starting to read up on it and ending up learning COM interfaces, coding COM servers, and trying to figure out the C++ errors in the COM implementation was just me wandering away from the main issue at hand. My task was not to write COM implementations, but to implement features in a .Net application which might communicate with COM. In projects, almost half of the time you are supposed to spend on providing beneficial value to the customer is spent on recursive research in order to satisfy our curiosity to understand how something works. This results in unproductive stances and deviations from project and customer focused goals. Sating our curiosity and working hard to find out how something works is a good thing, but not when it is conducted within time slots that are meant for work. It would be more appropriate (and I would go so far as to say, ethical) and professional when we concentrate on our knowledge enhancements outside of our work hours.

Does this mean we should go about our daily operations blindly? Not search or read up facts that will help in our daily work? Ignore what we don’t understand or haven’t studied before? That is not the case, as fact finding and doing technical research is a mandatory part of a developers daily work agenda. It is the approach and mindset of how you are doing it that matters. What I would be concentrating in my future work would be the following aspects:

  • If I come across an unknown fact, forgotten concept, or anything technically interesting, I would first check whether it is directly relevant or critical to the task at hand. If not, I know I can continue my work in the project and finish some features or functionality, and after work or at home, I can continue researching and reading on what interested me earlier.
  • I may come across lots of interesting information and facts, but filtering out obsolete/legacy explanations, articles with bad reputation points, and non-relevant information should be practiced. This would be a smarter and more focussed manner to gain valid and working knowledge, whether at home or work.
  • Learn to read through or skim through an article and gather the relevant facts, not read the article like a story or novel.
  • Have the big picture in mind. I should be able to connect and structure the disparate information I read about, in my brain. After all, abstractions, the ability to organize and model, and the ability to compartmentalize facts in our heads is what makes us who we are.
  • I do not need to know everything under the sun about a topic. I can gain knowledge on that topic incrementally. Accumulating knowledge in a need to know basis and applying it in the same manner can be refreshing and produce faster results.

I cannot be certain that what I have listed above is the best approach, but for me it would be a step in the right direction in being productive at work, enhancing and adding value to the customer, as well as increasing and gaining knowledge and expertise in the workplace. Of course, I will be hacking away at code and reading facts, articles, ebooks, etc. in my free time, but in a more analytical minded approach rather than in haphazard fashion. Though the title of this blog mentions technical knowledge, it can be anything we want to study or have more knowledge on. The end result is to have an analytical and filtered manner of accumulating knowledge where you learn more things in less time, and increase your efficiency and productivity at work or home.


License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead Exilesoft
Sri Lanka Sri Lanka
Mark is a Technical Lead at Exilesoft, whose passion lies in coding, mentoring, and fueling technical innovation. In the past, he has worked as a developer for a product engineering company, an ERP/Technical Consultant in a Fortune 500 conglomerate, and also as a senior engineer for a startup in the manufacturing and design space. His current areas of research revolve around Enterprise Architecture, Big Data, NoSQL Technology, and Machine Learning.

In his spare time, Mark experiments with (computer) game design/development, operating system internals, and compiler design. He also discusses and blogs about various topics surrounding software development, computer science, game programming, and mathematics, which can be read at markfaction.wordpress.com. Feel free to email or message him anytime and strike up a conversation.

Comments and Discussions

 
QuestionThat's what we call procrastination. Pin
Nicolas Dorier16-Aug-11 23:12
professionalNicolas Dorier16-Aug-11 23:12 
GeneralGood thinking Pin
JamesHurburgh13-Aug-11 17:49
JamesHurburgh13-Aug-11 17:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.