Software engineering is a complex field. Engineers are making solutions for everything from turning a faucet inside a bathroom to sending a spaceship to Mars. Software is all-pervasive. Even those who hate the world of software cannot avoid using software applications. Contrary to the world two decades ago, when mechanical devices were purely mechanical and communication devices were purely electronic, today we have a world where everything has a touch panel, touch screen and pieces of hardware that won’t work unless the functionality is powered by software.
What we have seen in the last 20 years is actually nothing. The world of software is only set to grow more. I really cannot and do not want to predict how many fold the software market will grow. The quantity is unknown. But I can tell you that many more software engineers will be required and deployed. But as companies open and close, technologies come and go, software engineers will need to adapt themselves to growing needs. They cannot do so unless they master the following 4 skills, which are extremely elementary.
I. Touch typing
Seriously. Go learn this already. You should be learning this before joining a busy software engineering job or starting a freelance. Stop pecking at your keyboard two fingers at a time when nature has given you ten. There should be no excuses why you shouldn’t learn typing with all your fingers on a QWERTY keyboard. There are so many websites and desktop apps to teach you. If you prefer a coach, then join a typing class.
You should consider yourself a competent typist when you can type on the keyboard without looking at it. Your words should come out right even when you are looking to the side talking to someone. A good typist should have a typing speed of at least 50 words per minute. An excellent typist can top 80 words per minute. This range is good enough for a software engineer. Professional journalists routinely perform at 100 – 120 words per minute.
II. Data structures and algorithms
Unlike other fields like automobiles, software engineering is ready to hire among graduates who haven’t studied computer science. This seems reasonable since software is a field where the product is intellectual rather than physical. The only training needed is for the brain to learn a new domain and new ways to find solutions, rather than learning motor skills like soldering. Training doesn’t need any special equipment and can be done cheaply. The cost of recovering mistakes is quite low, compared to other fields like chemical engineering, where a ‘bug’ can be a chemical explosion leading to injury or death.
But this cross-domain hiring also means that people with no computer science background start writing programs. Most companies train for specific tools such as Python programming language or Salesforce. The ground basics like using the right data structures and algorithms are ignored. This leads to people using faulty data structures and inefficient algorithms.
Here is an example. What if you have NEVER been told that stationary like phone book or calendar exist? A phone book makes it easy to look up phone numbers by name, whereas a calendar makes it easy to look up events by date. What if you still use a sheet of A4 paper to note down names, numbers and birthdays, continuously adding entries to the bottom of the list as you make new friends. If you were to look up a friend from the list, you’d have to scan through every entry to know the phone number or birthday.
This is what is happening as the software industry hires people from other fields. If you are a person looking to enter software from another field, please make it a priority to learn data structures and algorithms. If you are software graduate and have either forgotten these concepts or found it boring to pay attention in class, then you should go back to the basics and strengthen them.
III. Drawing diagrams
Software engineers and project managers often explain ideas in the form of diagrams. Even though they speak and write words to go with the diagram, you know the saying about a picture and a thousand words.
Even if you write the most meticulous document in English, most people will want to look for a diagram that explains everything at a glance. The more you are able to draw and the less you write, the better it is for you to explain your work.
That doesn’t mean that you can get away with doodling on a restaurant napkin or using a marker on a glass wall. I want you to invest your time and learn FORMAL methods of representing software in diagrams. Flowcharts and UML diagrams have been used for two decades to visualise software through diagrams. They have been standardised with fixed symbols representing certain components of software. There are diagrams to represent an application that hasn’t started running yet and even those that represent a running application. Heck, there are even standard and formalised diagrams to show that part of one application runs on one machine, while another part runs on another machine.
The professional and serious men who developed UML really thought it through. So you should spend at least one week, learning and practising different types of diagrams so that you are ready to explain your software to someone using formal diagrams with set standards.
IV. At least one set of Open Source tools
New software startups start all the time. Some of them shut down soon, but others thrive and even make it big. One thing is common. These companies won’t want to spend on software licenses at their early stage. This means that they will go for web and Android only, before they raise money to feed the insatiable Apple. Web applications will be built on LAMP (Linux, Apache, MySQL, PHP) or MEAN (Mongo, Express, Angular, NodeJS) combination of tools (also called stack), rather than a platform like ASP.NET from Microsoft.
Internet of Things, which is a set of electronic sensors capturing data from the real world and storing them in servers for analysis and action, will also find open source solutions such as MQTT protocol and InfluxDB, before they choose to move to proprietary solutions like Amazon IoT.
You will have a disproportionate advantage if you learn at least one set of tools that isn’t tied to one of the big names like Microsoft, Apple, Amazon, Google, Facebook or Salesforce. These companies make software work only within their servers or only with hardware or other software made by them. A startup or even a big company cannot suddenly switch to a competing product easily. Hence they’ll want to start with a solution that is open source and interoperable with a large set of software and data that they already use. And they’ll look for people like you to deliver such well-oiled software.
The best thing about open-source software is that you can learn them from the comfort of your home, with your Internet connection and laptop. So what are you waiting for?
The software industry is set to grow explosively. Software engineers need to learn more sophisticated tools and let go of outdated ones. But there are some things that an engineer must master before everything else. Those are the elementary things that will carry him / her through the ever-changing world of digital applications.