Getting started with Software Development
In this post I am going to discuss about some subject/topic essential for Software Development. Many of us college student/fresher confuse about what to study for software development, so i write this post to help such student. If you are an expert in software you can read and guide the student which is missing in this post through your valuable comments.
- Data Structure & Algorithm : I think it is the most important subject for a software developer because Data structure is used in almost every program or software system. Every software somehow manipulating some sort of data and data structure taught us that how should we organize the data so that the insertion, deletion, searching i.e manipulation of data can be done with minimal complexity and that gives an efficient performance to our computing.
- You should give time to sorting, searching, BigO notation, List, Stack, Array, Queues etc.
- Learn the Advantage and disadvantage of different data structure so that we can decide which data structure should be used in which condition.
Due to importances of this subject in development, interviewer also give extra importance to this subject.
- RDBMS : RDBMS are the most common type of database used by organizations. It’s the subject in which most of fresher get over confidence. This is not among the toughest subject, but problem is that most of students (even some experienced professionals) fail to understand the importances of a good database design, and give less time to learn the basics of RDBMS.
A bad database design play a major role in any project failure. Its relatively more difficult to correct/change database schema at a later time than coding part, so it’s became more important to design a good database schema at the beginning of project, before starting coding part (Here good database design means which require minimum changes in database schema in future).
Even your system/software is looking good and running well with your designed database, after that you should verify your database schema from your senior. you may get some tips regarding your database design.
Although NoSQL databases are getting a lot of attention these days, yet RDBMS is first choice for most applications.
- Design Pattern : Every software is build to do one or more tasks, provide some functionality and we face problem to achieve these functionality. Here knowledge of Design Pattern can help us. Like there is an requirement in software which require me must initialise some object only once. We code for a long time to achieve this requirement, face problems, fix those problems and then realize there was already a pattern for it. So to do not reinvent the wheel and don’t make the same mistakes as our ancestors, we should learn the Design Pattern. So Design Pattern is a solution to a commonly occurring problem. Basically when you know patterns, you know solutions to problems that are extremely common in software engineering.
– Christopher Alexander’s definition, who invented “pattern based design” –
(a pattern) “describes a problem which occurs over and over again in our environment,
and then describes the core of the solution to that problem, in such a way that
you can use this solution a million times over, without ever doing it the same
Sadly, too many programmers either think design patterns are a waste of time, or don’t really get how to apply them properly and appropriately. Or even worse, they make up their own patterns.
Benefits of Learning and using Design Pattern in your projects :
- Code readability: If you follow design pattern, then most probably change is that you will end up with a much more compact code, and it will be easy to understand.
- Common vocabulary : Design patterns gives developers a common vocabulary to talk about software solutions, for example, It’s easier to say, “Use a factory pattern” instead of saying, “Do X, then Y, we can then use a class A to achieve this functionality”.
- Intention: If other member of a team know about the design pattern you have used in your code then he will get your intent (what you want from this class/module) instantly by learning your code.
- Code re-use: Design Pattern help you identify common solutions to common problems.
- Tested and sound solutions: Most of the design patterns are tested, proven and sound.
You can read Design Patterns: Elements of Reusable Object-Oriented Software for Design Patterns.
- OOPS : You should know what is Object Oriented Programming. What are advantages OOPs have over conventional approaches. Main things of oops which should consider are
- Data Abstraction and Encapsulation
- How OOPs can help us to improve software-development productivity, maintainability
- How to write re-usable module.
- Operating systems basics : It’s right that software developer can write code without the knowledge of operating system but knowledge of OS will play a good role when talk about the efficiency. When you need to provide a functionality which is not given in the SDK APIs. You can write better and efficient software when you know how this particular OS handle a particular object (like Bitmap).
Main things of Operating systems which should consider are
- Threads and Processes.
- How Memory works and talks to process and devices.
- File systems
- How the os handles locking/threads/deadlocks and how to best use them.
- Virtual Memory/Paging/thrashing.
- How the os does Memory allocation.
- Inter process communication.
- How the os writes/reads to disk by default to read/write optimally.
- Programming Language : All the computer software are builds using a programming language. You can start with C, C++, Java, PHP whatever language suits your profession.
For Java language I will recommended Effective Java, 2nd Edition.