6 Required Skills to Join Software Industry

Earlier I published my thoughts about importance of working in a software company after you complete your graduation. Here I want to share 6 required skills that you must be excellent at, to apply for a job or doing professional software development.

While studying a lot of courses in 4 years, we start believing as everything is equally important. After all its being taught. It is correct in some sense, each subject has some area it targets. But some subjects more important than others. If you don't understand the most important subjects, you would face great difficulty in searching a job or doing real world software development.

I conducted many interviews in last two companies I worked at. We were given guidelines to evaluate the candidates in different areas. Based on those sessions, I can say very confidently, these are some of the subjects or areas of high importance.

1. Programming: Programming is not about knowing the syntax of loops, conditions and functions, etc. Its all making logic of solving problems. You are generally asked a problem, and you have to write the solution in pseudo-code or any programming language. In most cases, pseudo code works, as good companies generally do not ask to write logic in a particular language. But definitely, it is also expected you know at least one or two languages well, and you may face related questions. The key point here is, you must have skill to come-up-with and implement the logic of a given problem's solution. I interviewed a candidate who was good in brainstorming related stuff, but really weak in actually implementing the solution using code.

2. Object Oriented Concepts and Programming: You must have very strong concepts of OOP, instead of bookish definitions. Else you would not be able come up with object oriented solution of given problem. I would suggest you to read or prepare this subject with reasons of why things are as they are. For example, what would be the effect if polymorphism is removed from OOP? Why we go after loose coupling from software reuseability perspective? What is the benefit of cohesive design? Is encapsulation all about fancy getter, setter methods or it has some more importance? Why interfaces are also called contracts? Why we should not treat abstract classes like interfaces? What is inheritance?

If you are applying for a post that clearly ask about a particular OOP language. I would recommend you to explore that language features too, in addition to basic OOP concepts. For example, in case of Java. Its generally expected a person knows exception handling, collection framework, file handling API, generics, annotations, etc. although they are not related to basic OOP concepts. Its really good if you have basic knowledge of Design Patterns. The skill of design patterns is usually not required for entry level jobs, but you should also try making a distinction or share something to inspire.

3. Data Structures and Algorithms3rd most important subject. Generally its difficult part of the interview as compared to other topics. Because, students do not put enough energy to understand this subject above basic data structures and algorithms that are covered in class. Here again, you are generally asked a problem where two or multiple data structures should be used to devise a solution, sometime little tweaking may be required in standard data structure. But you would easily come up with solutions if you have studied data structures with reasoning and comparisons of different data structures.

Same hold true for Algorithms, if you are told the complexity of an algorithm, you must be able to think about the behavior of the algorithm. And if you are given an algorithm, you must be able to identify its time complexity. In same way, you should be able to compare given algorithms from time and space complexity perspectives. I was not used to ask candidate to write code of particular algorithm, but I have seen many interviewers who directly ask to write code of a particular algorithms (e.g. binary search or quick sort etc.), so its better to review popular algorithms related to searching, sorting, graph and trees, etc. before your interview.

4. DatabasesMost of the applications store data in database, whether they are mobile, desktop or web based applications. So evaluating a candidate in database becomes very important. I generally used to ask different types of keys, how to make a given database normalized, what are different types of idexes, when we need to use which type of join?

I have also given interviews in different companies, some interviewers introduce you with an application idea and requirements and ask you to make database design on a given paper. After you made it, they ask you to write SQL queries to extract data of interest. All they look for is, do you take things in right direction, do you make normalized design? Is your design removes data redundancy? Are you able to define correction relations among different tables? If you are applying for a job outside the sub-continent, I would recommend you to study basic concepts of Big Data and NoSQL databases. These are widely used in practice. Why universities do not talk about these, because most universities are really poor in keep their subject contents up to date. (in same way, threading and queuing are very important, but these are also not covered, mostly).

5. Web Engineering: If you are thinking, the web is separate area and have nothing to do with computer science basics, you should change your views. Almost all of the applications being developed today have some relation with network and web. Even the mobile applications exchange data with servers using web based protocols i.e. HTTP (e.g. RESTful services). In same way, most of the information systems are being developed as web applications. So the knowledge of web technologies is very important. For example, on which protocols the web work, the details of HTTP protocol, the concepts of sessions, cookies, different encodings, receiving data from web browser and processing at server end. Using HTTP clients programmatically? How HTTPS works? Writing web pages using HTML, CSS, and JavaScript. The role of XML and associated concepts. Web engineering means, the theoretical knowledge of underlying protocols, and not just skill of writing web pages.

6. General Problem Solving: Some companies also talk about general problem solving. They may be puzzles or general problems related to normal life. The objective of such discussion is to see in which direction the candidate think. and how he handle the problems unknown to him, or whether he can come up with desired solutions.

Above are the minimum subjects or skills you must have great theoretical knowledge of and hands on experience of implementing different concepts. These are not the only things, basically the interview questions and discussion mainly depends on the domain or job position you are being hired for, so the contents of interviews change accordingly. But if you are applying for a Software Engineer job in domains like desktop applications, web application and mobile applications development; the most of your interview would span the topics discussed above.

If you are applying in a company that works in game development, definitely they would talk about linear algebra, computer graphics and may be multivariable calculus too. If you applying for an opening related to  robots manufacturing or machine learning, you would be surely asked about artificial intelligence and machine learning. And if you are applying for compilers, embedded systems and systems software development related job, they would must ask you about operating systems, systems programming, computer organization and computer architecture, etc. related concepts.