On Trustworthiness of Sources While Gathering Information About Software

Read the fine manual

Time and time I see people who follow all these random online tutorials and then when something does not work they become dazed and confused. “Why this does not work? But this tutorial shows that it should work” – I see similar questions occasionally in various forms on forums and IRC. I think people do not realize that there is some kind of hierarchy of trustworthiness of information sources. We should be conscious of that hierarchy when looking for information and remember it when we notice that something is not correct or up-to-date.

In my opinion, the field of studying history has already nailed this down. They have what is called the primary and secondary sources of information.  Primary sources provide direct evidence about an event, object, person, or work of art. The latter thing is similar but they talk and analyze the primary sources [1]. It seems to me that we can draw a parallel between this and the information sources that we use to study programming. However, instead of having a simple distinction between primary and secondary sources, a hierarchy is more suitable because we are talking about researching a thing that we have in front of us at present and we can experiment with it. The only question that remains is: how does the hierarchy look like?

At first, let’s think about what kind of sources we have when we are talking about programming before making it. Personally, I can list these items:

Zeros and ones representing byte code

  • The actual machine code in the executable or the file that you are examining. This can be considered the primary source in programming. What is inside there is actually executed on your machine so you know that it cannot lie. However, it is very hard to decipher and not very informative. Thus, even though it is the most trustworthy, it is very unfriendly to the person that is trying to learn.
  • The source code that was compiled to make the executable or a file. In terms of trustworthiness it is almost as good as machine code and it is a very good source from which to learn because source code is written for humans and lets you understand everything relatively easily. The only downside is that you have to know that the executable/file that you have been actually made from that source code. Projects such as the reproducible builds [2] help with that but still that is not available everywhere and you have to be sure that the source code corresponds to that executable.
  • Empirical observation of what system calls the executable is executing, what kind of options are available, what is the output of various commands and so on. This source of information tells you what is apparently available to you as a user but you cannot be sure about what is exactly happening in all cases thus it is not so trustworthy. Also, by using this source information you cannot know what options and commands are exactly available. What if there is a hidden feature or something that is not documented in the output?
  • Standards. Now we are entering into the zone where we are not even talking about the actual file/program on your computer. Standards are much more trustworthy than the next item because they are usually governed and released by a rigorous organization such as ISO [3] or ANSI [4]. Also, a lot of deliberation and work goes into making sure everything is correct, orderly, understandable, and that there are no contradictions. On the contrary, they are not so easy to use like the next items because most of the time you have to pay to get the standard. Also, usually they use more technical parlance than the next item.
  • Documentation released by the manufacturer, vendor. Quality of information released by the original makers tend to vary a lot. However, it is usually well structured, easily understandable so it is not hard to skim and find the relevant information that you are searching for.A book with flowers
  • Books. This source of information tends to be researched more than the item that goes after this one in the list. This is due to the fact that after the book is released, you cannot change it. Also, most of assertions in books need to be backed up by quotes or citations. However, because it is not made by the original company or a group of people that made the executable/file, it is less trustworthy than the previous item. What is more, the topics of books’ chapters have a tendency to be more abstract than the manuals so sometimes it might be not so easy to find information that you are looking for when compared to official manuals.
  • Community tutorials, forums, wiki pages, articles. These are the least trustworthy because of the anonymous nature of the Internet. Anyone could write anything and you are never sure if what is written was researched well. There is a reason why no one uses web pages as serious sources of information in the academia. On the other hand, it is very accessible because almost everyone has a mobile phone or a laptop with an internet connection on it nowadays.

We can produce this picture after listing the items:

Hierarchy of Information

My point is that everyone should always keep this in mind. Also, now if someone is doing the same mistake I mentioned at the beginning, you should refer them to this article or this hierarchy. I hope this was useful. Please comment if you do not agree with anything mentioned in this post or if you want to discuss.

Why You Should Read Programming Books

Nowadays it seems like we are on an information highway and it is very hard to keep up with all the knowledge. Especially this is acute when considering how many websites there are on the Internet and how long it would take you to read and understand them all. However, there is a solution – books offer a way to get condensed information from the field experts and learn a lot of things. Many people think that this is only true for other fields except programming. But I think that is false. In software development, a lot of things are timeless as well and they do not change so often. Let me present this and other arguments in more detail, and try to convince you to pick up a programming book and read it.

Reading programming books or, in general, just any book lets you stand on the giants’ shoulders. Those giants are the field experts who have spent doing the thing that you are interested in countless years. So why would you not want to gather this information that is given to you by these skilled people? After reading a book you can feel more confident that whatever you are doing is right, effective and that it is best decision at hand.

Also, books contain a lot of gems of knowledge. Some these things may not even be available anywhere online anymore and you would have to search a lot for them. Recently I have read an article that tells a story about how many links that were retrieved from an old magazine about the Internet do not work anymore. Well, this illustrates my problem. Those links are dead now and they will probably never be alive again. I am sure that most of the knowledge in there is available on books. Of course, there may still be some useful information that was lost but all the knowledge that is really useful for any situation is available on the books.

Furthermore, such knowledge found in books does not get old. For example, when was the last time it changed how the classical computer works? A person in this field needs to know answers to a lot of questions. Superficially at the very least. How does RAM work? What is the point of types in programming languages? How do compilers work? By reading a book, you would get rich knowledge fast about how to answer this question. You would know how ASTs work, what is the assembly language and so on and so forth. So, you know that you are not just putting pointless information in your brain that will be outdated one or two years from now. A person equipped with classical knowledge that does not get outdated is capable of, for example, picking up any new JavaScript framework faster than the competition because they understand the underlying concepts and they are not afraid when the abstractions leak which is inevitable. In the end we can say that reading programming books makes you a more well-rounded programmer.

What is more, getting information about programming online can be distracting. Nowadays the majority of pages are filled with pop-ups and other annoying things that are just made to get your attention. On the other hand, books have no such thing. You only get the real information that you need absorb without any advert making you divert your attention even if you do not want to. A/B testing with adverts is prevalent these days and thus do not think that you are exempt from this rule.

This brings up my next argument – the books are more dense in information and thus you are better off reading them because you can gain more knowledge faster per time unit. So, unless you want to waste time scouring random web pages for information that may not even be correct (books have a tendency to be correct more often), you should pick up books. Also, this will put you ahead of the competition even more because your typical programmer does not even read 1 book per year.

In conclusion, you can see that there are many reasons why you should pick up a programming book. Obviously, you should not waste time on boring and poor quality books. You should always look at the recommendations of others and their reviews. Thus, I present to you my recommendation list of programming books that I think every budding programmer or enthusiast would enjoy:

Code” by Charles Petzold – a delightful book for all aspiring programmers. The book starts by presenting how two hypothetical persons can talk remotely and then it gradually builds up to explaining how a computer works.

Code Complete” by Steve McConnell – you could probably find it in any “top 10” list of computer science books. It is a tome about the software development process – beginning with how it should be organized, and ending with various tips on optimization and variable naming.

So do not hesitate and start reading now.