What should be minimally learnt to get a job as a software developer?

Submitted by Kamal Wickramanayake on

Someone asked me about studying a programming language aiming for a job. I thought I would expand and write a bit about it. What should be minimally learnt to get a job as a software developer?

From job to job, the exact requirements differ. In general, a lot of software developers make database driven web based applications. Taking into consideration such a job and as per how software is developed these days, below is a list of key areas that one might want to learn in general.

Since I am fan of opensource software, I have included the names of some opensource software below. One might want to consider the commercial software as well.

  1. A general purpose programming language. For example, Java, Python or whatever. Do a bit of research to figure out what language is good for you. Focus on market popularity of  programming languages and your preferences.
  2. Data structures.
  3. Algorithm development.
  4. Programming paradigms like procedural and object oriented programming (OOP).
  5. Some amount of Unified Modeling Language (UML).
  6. Some amount of object oriented analysis (OOA) and object oriented design (OOD).
  7. Some understanding about the operating system details and using them effectively. Linux based operating systems are a popular choice on top of which web based applications are run.
  8. A relational database management system (RDBMS). One should learn the theories and get familiar with software. Example RDBMS software include MariaDB and PostgreSQL. There are commercial ones too.
  9. An integrated development environment (IDE). A popular IDE is VS Code. Eclipse and many other IDEs exist that can easily be obtained.
  10. Learn how to debug software. In terms of tools, many IDEs have debugging features built in.
  11. Some knowledge about networking and protocols. Example protocols are IP, TCP, UDP, HTTP.
  12. Some HTML, CSS and JavaScript.
  13. Architecture of layered or multi-tier applications.
  14. How to build a database driven web application with all what you learned above.
  15. Some understanding about software development processes.

Exceptions and shortcuts do exist. For example, one can pick PHP as the language of choice which is mostly used to build web applications. There's even this LAMP stack one can focus on where LAMP stands for Linux, Apache, MySQL and PHP. But if one ever needs to build desktop applications too, that is not going to be sufficient. Another example is aligning with JavaScript and Node.js framework in favor of learning other programming languages like Java, Python of PHP.

One can focus on some additional areas to be more competitive. Here are some such areas:

  1. Learn a version control system. Git is popular these days.
  2. Learn about unit testing.
  3. Learn to use at least one build automation tool. Examples are Gradle and Maven.
  4. Learn about package managers used to package and distribute software. For example, Java has Maven; PHP has Composer; JavaScript has npm, Python has PIP. It would generally be sufficient for a beginner to be familiar with using a package manager tool(s) of choice to fetch and use the software distributed by others.
  5. Get familiar with developer tools that come with web browsers.
  6. Learn to use one or more frameworks. The more is better. There are many great frameworks used for different purposes. Some are general application frameworks. Some are usage specific like accessing data, developing web frontends and so on.
  7. Learn some software design patterns.

It is incorrect to say that everyone needs to learn all above to be software developers. Some may be able to perform well without learning some of the areas suggested above. Some may have to acquire additional or other competencies. But what was suggested above sets a reasonably good foundation for a beginner software developer to be effective in a job and continue his or her advancement comfortably.

Do you think I missed anything important? Comment below and make your say to improve.