Learning Today’s Tech
Today’s product technology is very complex and generally must be learned through an academic curriculum. We will discuss both software and hardware products, but we will start with software.
Tech for Cloud-Based Software
Programming is a little bit of an anomaly in that regard, in that one can learn programming on one’s own to a degree. But managers often make the mistake of treating all programming as fungible, when in fact there are many different kinds of programming, and vastly different skill levels. As Reed Hastings has said,
Over the years, I've come to see that the best programmer doesn't add 10 times the value. He or she adds more like a 100 times.”
Good programmers know a lot more than programming. They also know patters for solving problems, and they have experience with a wide array of situations and kinds of tools. Those experiences combine in a way that the whole is greater than the sum of each experience.
Yet programming is just a small part of the design and creation of today’s software products. Today’s software either runs in a cloud environment or interacts with one, and so cloud technologies are an important area of knowledge. There are many others as well.. The figure below lists the major areas of expertise that are usually required to build effective software products today.
Most of these skills are not easily acquired on the job, although on-the-job experience is crucial for advancing someone’s academic training to a level of professional competence.
Some people are effect at self-study—so-called autodidacts—and so they can learn these subjects on their own, without taking courses, but such people are in the minority. The challenge is that the subjects listed here are very complex, and many require cumulative layers of learning. Machine learning is the most extreme example: it requires high proficiency in linear algebra and advanced statistics, and is based on very complex algorithms.
Some of the other topics, such as databases, seem like they can be learned through practice, but in actuality there is a lot of theory, and people without knowledge can use databases incorrectly, resulting in difficult-to-diagnose application bugs. Application security is also a difficult subject, because it is so broad: there are just so many ways to attack systems. Distributed and real-time programming are essential today, and can be learned on one’s own, but nevertheless most programmers do not have knowledge of the issues and patterns needed to build such systems correctly.
We therefore recommend that people complete coursework in these subjects. Proficiency in these areas is often not taught in computer science courses, yet these subjects are essential today.
Additional Tech for Manufactured Products
Most manufactured products today are designed as digital artifacts, which are then used to generate programs for robots and other automated manufacturing tools. Therefore, hardware technical design is now almost entirely a digital endeavor. In addition, a growing number of products today send telemetry data over the Internet to servers, to collect statistics on usage and performance. Therefore, knowledge of cloud-based software development is essential for those products. In other words, all the things mentioned above for cloud-based software applies.
Many manufactured products today are driven by microcontrollers or microprocessors. These contain embedded software. Designing embedded software is a specialty: embedded software is “real time” software, and that software is often created using a combination of conventional programming tools and embedded software tools such as LabView. (Tools such as LabView can actually be used to create non-embedded software as well.)
Using visual tools such as LabView is often referred to as model-based design, because the program is designed visually as an simulatable “model”. The ability to simulate the system, including the code running, is very important for hardware design today. It is commonplace to create real time simulation models of the hardware, whether it contains software or not. Model-based design tools enable one to merge hardware simulation with virtual execution of the software in the simulation.
These are advanced engineering skills, and academic training in engineering is usually required to learn these things, although the tools themselves can definitely be learned on the job. Electrical engineering happens to provide excellent training for modeling concurrent systems, which is necessary for any kind of real time simulation.
Besides modeling, hardware design usually also requires either mechanical or electrical engineering, or both; and often industrial engineering (including manufacturing engineering) is required to ensure that products are designed to be manufacturable in an efficient manner. (Lean and Flow methods are very helpful in that regard, and are shown in our overall knowledge diagram.)