Over the course of our experience teaching thousands of engineering students and professionals and our interactions with several stake-holders, we have heard several concerns from students, faculty members and businesses alike. There are some key patterns in the concerns raised and one of them is about what Engineering students should learn in their curriculum. In this post we make a humble attempt to answer this question with a seemingly simple but effective approach that students can take for guaranteed success.
Table of Contents
- Problems faced by various stake-holders
- Our reponsibility as Engineers
- The Missing Gap in Technical Skillset
- Conceptual Depth
- Technologies – the missing piece in the puzzle
- Being successful as an Engineer
- The Golden Mantra
- A Technology Ninja?
- Teaching to build and learn
Problems faced by various stake-holders
But first, let’s hear from each one, the concern(s) they have:
- Students say, “I seem to understand Data Structures, Algorithms, Databases etc. But the subjects seem very theoretical. I still don’t understand how the industry functions. I have no idea what the industry expects from me. Do these subjects have any relevance in the industry at all or are they only to crack the interviews?There is a big gap between what our subjects teach us and what industry expects. Companies expect us to know technology x or y, but we have never learned it in our curriculum.”
- Curriculum designers say, “Technologies are changing so rapidly that we are not able to keep up with the pace. Our curriculum always seems to be outdated and irrelevant. Faculties are finding it hard to up-skill themselves. What should we keep in mind when designing the curriculum and how do we get our faculty members prepared?”
- Faculties of Engineering Institutes say, “Teaching concepts is our responsibility. Teaching technologies is not. Every company asks for a different set of technologies to train our students on. Why should we do it? Let them train the students themselves.”
- Placement & training officers say, “Every month companies come here and ask for x or y certification. They threaten us that unless we get our students certified on these they will not recruit our students.”
- Industry says, “Students have a very bookish knowledge of the subjects. If we ask them, what is a class/object, they know it, but if I ask them to do a domain modeling using Object Oriented Design they can’t think beyond Person and Employee (or Cat and Animal)! We cannot spend 6 months training them on our tech stack; we expect some prior knowledge.”
Who is right? What should our Engineering students learn? Should they focus on concepts or should they also learn technologies? And, if they should learn technologies, then which ones should they learn? How do we decide?
Our responsibility as Engineers
Let us start with a basic question: “What is our job as an engineer?”
The job of an Engineer is to solve problems using technology. The job of a software engineer is to solve problems using Software (Technology).
What are some examples of problems that Software Engineers have solved?
If you look at apps in your mobile phone, they are all examples of what Software Engineers build.
The Missing Gap in Technical Skillset
So the question to students is, do you have the required skills to build applications like Google Maps or Facebook? If not, don’t you think you should know what it takes to build these applications if you are calling yourself an Engineer? What do you think is lacking in terms of your technical skill set?
When we ask this question, we see students confirming that they have a theoretical understanding of the subjects but they lack application knowledge. They talk about a gap between what they learn in their curriculum and the expectation from the industry.
Let us dig deeper and understand what that gap is.
Conceptual Depth
Our Engineering curriculum covers a lot of subjects. In the 4 years of Engineering, we learn subjects like Data Structures, Algorithms, Databases, Networking, Operating Systems, Finite Automata, Compiler Design, Programming Languages etc. Do these subjects have any relevance in the industry?
Of course, they do! If anyone says otherwise don’t believe them! Every single subject mentioned above is required to build a search engine like Google or a social networking application like Facebook (and many more). While Data Structures and Algorithms is at the heart of everything in Computer Science, databases are required to store data permanently for retrieval in future (the pages on the web, people in your network etc). When you access these applications on a mobile phone or a browser, you are using the concepts of Networking. All these applications are deployed in data centers where each of the machines has an Operating System optimized for functioning on a server. The code is written using one or more programming languages, which is then compiled using a compiler. The design of a compiler internally uses concepts of Automata Theory.
We can go on, but we hope we have made our point. All these subjects are of great importance. No doubts about it! However, the real question is, are they sufficient to build applications mentioned above?
The answer is, “No”, and that’s where the real gap is.
Technologies – the missing piece in the puzzle
What else do we need to build applications like Google Search/Maps or Facebook?
We need tools and technologies.
What are examples of such tools and technologies that we need to know of?
This is a vast subject and there are several technologies for each concept. For example, the subject “Programming Languages” teaches you the theory of a programming language; what a programming language is, how it works, what constitutes a programming language etc. But merely knowing this concepts isn’t sufficient. You will also need knowledge of one or more programming languages like C, C++, Java, JavaScript, Python, Go etc. These languages “implement the concepts” that you learn in the subject, “Programming Languages”. The industry expects you to know one or more of these programming languages and not just the concepts of Programming Languages.
Let us take another example: the subject “Databases” teaches you the theory of storage and retrieval of data from a persistent device like a hard-disk. It talks about concepts like tables, primary and foreign keys, normalization, queries etc. But merely knowing these concepts is not sufficient. We need to know one or more of several databases like MySQL, PostgreSQL, MongoDB, Cassandra etc that implement these concepts.
So let us understand the relationship between Concepts, Technologies and Applications.
Applications are built using several technologies. Technologies in turn implement Concepts. Concepts are mostly mathematical and don’t change.
Now if you understand what your curriculum focusses on, where do you think the major focus is? The focus is on learning concepts, but the emphasis on technology is very minimal. Through the entire Engineering curriculum, we learn about 2-3 programming languages, a couple of databases etc. However, the applications in the world out there are built with several programming languages. There are more than 20 popular programming languages (popular in this context simply means languages that are used in applications today), more than 20 popular databases, more than a couple of dozen MVC frameworks etc.
Examples of programming languages used in applications today: C, C++, Java, JavaScript, TypeScript, Go, Python, Scala, Clojure, Erlang, PHP, Ruby, etc.
Examples of databases used in applications today: MySQL, PostgreSQL, MongoDB, Cassandra, Redis, Neo4J, etc.
Being successful as an Engineer
How many of these do you know?How many do you think you are supposed to know? How many programming languages? How many databases? How many MVC frameworks?
What if you learn a programming language, but the company where you work uses a different language? What if it gets outdated? Can you bet your life on a specific technology? It’s perhaps better to gamble away your money in the lottery!
There is one more problem (or we would call it an opportunity) with technology.
Technologies have a very short shelf-life. The technologies that were prevalent in applications 10 years back are outdated today. Technologies used in applications today were perhaps not even invented 10 years back. So what do you think are the most popular technologies 10 years from now?
It’s hard to predict that given the history, isn’t it?
The good news is that concepts don’t change so often. Relational database technology is more than 50 years old, the concepts of TCP/IP that we used today hasn’t changed much since the 1960s!
So what’s the best way to be successful in this industry? Should we learn concepts, or technologies or both?
The Golden Mantra
We now arrive on our 3 step approach to making it big in your career. We call it the “Golden Mantra”:
(a) Get really solid with concepts – the more time you invest in solidifying your conceptual knowledge, the better it is.
(b) Learn as many technologies as you can fit into your schedule. Learn as many programming languages as you can. Learn as many databases as you can. There is no upper limit!
(c) Learn to apply these concepts and technologies in solving real life problems.
The good thing about this kind of technology exploration is that, once you have explored a few diverse technologies in a domain, you sort of “get a hang of it”. It becomes easier to explore a new technology even if you have never seen it before. If you have worked with about 5-6 databases, the next one is easy to pick up. You know what to expect from it.
“It’s like watching a 100 Bollywood/Hollywood movies of different genres” and once you have watched enough, you can sort of predict what the next movie is going to end like by the time you have reached the intermission (watched half the movie). Every once in a while, a movie may pleasantly surprise you, but such occurrences are rare!
Fill your mind with as many diverse technologies as possible so that you not only learn those technologies but also get good at exploring new technologies on your own.
Jnaapti’s courses have been designed in such a way that you will not only get good at the technologies you are being trained on, but also learn the art of learning on your own. Our skill graph cross connects over 30 technologies and has over 400 skills spanning multiple concepts and technologies.
A Technology Ninja?
A word of caution. Never brand yourself with a technology. Never call yourself a “JavaScript Ninja” or a “Python Geek” etc. The reason is when the technology gets outdated so will you!
You should rather aim to be a good engineer. An engineer’s job is to solve the problem at hand. He uses the best tool available in the industry to solve it. He is not sentimental about the tool, rather he is passionate about solving the problem.
Learn to be that!
Teaching to build and learn
And a final word of advice for Engineering Institutions:
Engineering Institutions may feel it’s not their job to teach technologies to their students. However, note that a mere conceptual understanding is not sufficient for Engineers to succeed at their job and if your institute is not doing it, you are doing it wrong. It’s like saying, “My students know how a 4 stroke engine works, they know aerodynamics, they know the functioning of a chassis, but they don’t know what it takes to build a Porche/Ferrari or the difference between them”.
An emphasis on technologies in the curriculum is important. The curriculum can be designed such that concepts are taught in an instructor led classroom and the technologies implementing those concepts are taught in the lab.
Don’t teach technologies to your students. Teach them how to build these technologies. Teach them how to pick up a new technology on their own! It is not as hard as you think!