People who are “outsiders” often have the opportunity to come to a situation from an altogether new perspective than someone who is entrenched in some profession.
Einstein worked in the Swiss patent office when he came up with his ideas for relativity when he realized the limitations of classical Newtonian mechanics.
This is not to say all outsiders have the potential to be Einstein. But there is something important that happens when the human brain is offered a completely new scenario and honestly tries to grapple with it.
It is interesting to see the connectivity between mathematics and computer science. In mathematics, problems are solved by applying theorems and formulae. Many of the algorithms in computer science have mathematical proofs. We use these algorithms in the form of code to solve problems in computer science.
It is often said that “premature optimization is the root of all evil”. The full quote from Donald Knuth is:
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%
What this indicates is that worrying about optimization in non-critical parts of the code is not worth the effort.
During the early part of the development process, there should be focus on having a good clean design and all code should be written following the clean code principles. At the same time, we need to look for efficient code in every possible place, especially in critical sections.
When it comes to libraries, though there are no standard libraries in C ala C++ or Python, there are a rich variety of open source libraries written in C which have been time-tested and proven to be efficient and effective. For example, libraries like libcurl, libxml2 etc are commonly used in multiple applications. Also, there are multiple utilities which come prepackaged with the GNU and Linux operating systems like grep and make, which are essential for both developers and users.
One of the other advantages of C is that it has very little run-time overhead, given that it is “one step above assembly”. This results in code which runs relatively fast. Needless to say, the memory and algorithmic optimizations are mostly up to developers. But, comparing apples to apples, running the same algorithm in C is usually much faster than in Python.
The C language is unique among modern languages. It does not have any garbage collection and expects users to take care of memory management. It does not come with any predefined data structures. It does not have many of the other things which are standard with other languages like Python and Java, like object-oriented support.
However somehow it is still very much in use today in many places. It’s designers at Bell Labs had evidently chosen it’s structure and design well. The main places where we see C language in use these days is wherever the GNU or Linux kernel is used and wherever there are embedded systems. Wherever there are systems which have memory and processor constraints along with real time processing requirements, it seems good old C is the best approach to take. It is said that “C is one step above assembly”, which makes it ideal for such applications.
In the coming decades, it seems that everything around us is destined to be embedded, with some computer system which can help with system guidance and/or information. There is also the prospect of machine learning systems being fed by these embedded systems. In all these cases, the embedded components would likely be written in C.
The concept of network automation is an interesting one. It means that configuration, monitoring, troubleshooting etc of network devices are mostly done by computer programs with minimum human supervision. In many cases, network engineers used some scripting to automate pieces of the network, but full network automation means that all this is achieved with the help of computer programs controlling, monitoring and learning from the network devices.
One of the advantages of writing clean code is that one ends up writing precise and concise code. After removing all the cruft, one is left with code that reads better, works better and is smaller in size.
Quality of service is one of the most important parameters for software and humans when doing business. In the case of software, this can be improved with improving design and testing. In the case of humans, it could be just a matter of improving attitude.
It’s a commonly heard saying that one needs to forget whatever one learned in school when starting in any industry. This is a result of an education system which is still based on an archaic model.
The industrial economy is fast being replaced by what some call the connection economy or post-industrial economy. In this new economic model, jobs are no longer based on a command-and-follow hierarchy as it was in the industrial times. There are fewer and fewer assembly line jobs and as most of these are being automated. Very few people today are in careers where they work for a single employer for their entire life to retire with a pension. The industrial economy is becoming more outdated every passing day.
As a result, most “employees” today have to more or less think like entrepreneurs do. An employee today benefits greatly by developing grit, humility, hunger, smartness, and improving the quality of connections they forge with the people they do business with. Most people end up learning these skills on the job as educational institutions still have an industrial mindset. These used to be called “soft skills”, but are today some of the most crucial skills one needs to succeed and thrive.
Bugs are an indication of issues with some part of a software system. It is much cheaper in most cases to keep fixing bugs. However, in case there are some missing features altogether or there are things which cannot be done because of the system architecture does not allow it, the dreaded rewrite may be called for.
A tiger team usually gets assembled to redesign and rewrite the whole system. This is one of the main reasons to have a good detailed design with a long-term perspective from the get-go and to ensure that clean coding practices are followed.