What courses should an aspiring software engineer take?

Unlike medical doctors and advocates in court, most of us end up becoming software engineer first and then do several software engineering courses. In this light, someone asking how to qualify as a software engineer makes me feel happy.

Engineering anything requires you to be good at principles, products and practices. Engineering software is no exception. The “Keep It Simple Stupid” (KISS) principle says that you should write code that is as simple as possible. The Parkinson’s Law says that “Work expands to time available”. So, if you tell your team that they have three days to finish a task, they will end up taking all three days to do that task. You need to be able to design software using Object Oriented Programming concepts, or design a DB using ER paradigm. Functional programming (Lambda Expressions) and Logic design (as in Prolog) are not that common as yet in the industry but still very different principles to learn. These principles are very interesting, and a must know for being a good engineer. Next, we need to know existing tools and technologies. I loosely categorized them as products here. There is C, Java, C++, HTML, Javascript, Full-Stack, Android, and so on. Finally, the practices matter too. How do you run the show? Agile methodology which comprises of Scrum, Reflection, etc., and various roles in it are interesting. Many young students think only of a “developer” when they talk about software engineering. In reality, there are several non-development roles such as requirements analyst, product manager, quality analyst and so on. To understand all these, I repeat, you need to know about the principles, practices and products.

Few universities package this information in a variety of courses such as Programming in C, DBMS, OOPS using Java, Algorithms, Data Structures and Software Engineering. There is no single list which is complete and correct. Coursera and such MOOC platforms provide interesting courses such as Agile Methodologies and Android development.

My perspective to programming and related courses changed when I joined a cloud computing group at Yahoo. Suddenly, distributed systems became the most relevant subject. Every algorithm we designed were distributed in nature. I go to Nokia and embedded systems and UI design are now relevant. I come to Microsoft, and find Information Retrieval, Machine Learning, Pattern Recognition, NLP as relevant subjects.

In short, finally, I concluded that, to be a good software engineer, you need to be good at all courses! But good news is, there is no hurry. You need to be a good thinker and need to know one language (say Java) to get a job. You can become good at rest on the job.

These courses alone cannot make you a good software engineer. Developing good software is equally an art as it is an engineering “discipline”. This is an interesting field where we are trying to fit an art form (as painting) into a step by step method (as in an engineering discipline). There will still be scope for creativity. So, just like teaching, you will succeed in software development only if you have the passion.

With India becoming a big exporter of software, the opportunities are plenty. The work is cool. Work environment is amazing with air-conditioned offices, latest gadgets, brilliant minds and amazing innovations. Add travel, money and monthly outings to this. What stops you from becoming a software engineer! Why not be excited!!


Author: Venkatesh Vinayakarao

Researcher, Computer Science.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s