Introduction to Software for Newbies

A computer consists of two basic components, Hardware and Software. Hardware is all what we can touch and feel such as keyboard, mouse, monitor, hard disk etc.

Whereas a Software includes all the parts which we cannot touch or see such as Microsoft word, Outlook, operating systems, pictures, music and lot more.

In more technical terms, a software is a set of programs or instructions which actually run the hardware and makes it performs specific tasks.

Think of computer as a human body, then your brain is a hardware but your mind or your thoughts are actually the software which make the brain work and thus all the parts of the body. Without brain, no thoughts would be generated, and without thoughts, brain is lifeless.

Similarly hardware and software are inter related and do not exist without each other.

software
Image courtesy of Stuart Miles / FreeDigitalPhotos.net

Types of Software

Software is often divided into three different categories:

System Software

It is a type of software designed to operate, manage as well as control the computer hardware, to provide basic functionality, and to provide a platform for running application software. System software includes device drivers, operating systems, servers, utilities, and window systems.

Utility Software

This type of software will help you to maintain as well as protect your PC. However, it will not directly interact with hardware of your PC. For example, anti-virus software, firewalls, disk defragmenters etc.

Application software

This software is used to accomplish specific tasks other than just running the PC. Application software may consist of a single program or a small collection of programs (often called a software package) that work closely together to accomplish a task, such as a spreadsheet or text processing system.

It can also be a larger collection (often called a software suite) of related but independent programs and packages that have a common user interface or shared data format, such as Microsoft Office, which consists of closely integrated word processor, spreadsheet, database, etc.

A software system, such as a database management system, is a collection of fundamental programs that may provide some service to a variety of other independent applications.

How is a software made?

A software is made by understanding what the computer needs to do for people, which is called requirements gathering, where many people are interviewed in an effort to determine what are their expectations and needs.

Then software designers describe and define the programs to accomplish what the computer must do, in a process called software architecture. Programmers write the programs and testers test it to make sure it does what it’s supposed to do. A software is mainly made up of following components:

Graphical User Interface
It is the part through which the user interacts with the software to perform tasks.

Mouse/keyboard event handling
This determines what happens if the user clicks on a button provided at the user interface.

Application logic
This defines how the software works.

Communication logic
If the software is a client-server program (e.g. an Internet browser), this part takes care of how the software communicate with the server.

Database logic
If customer records need to be stored in a database, this part determines how the software retrieves the record of a particular customer.

A software may be created by a single person or a group of persons called programmers. Breaking up a piece of software into many components helps the programmers in various ways.

One programmer may be in charge of creating the user interface while another is in charge of the application logic. So if many programmers are working on the software concurrently, it will take less time than only one programmer working on it.

How to Become a Software Engineer

Here in this article, I have explained in full detail how you can become a software engineer or software developer.

When it comes to salary, lifestyle and liberty of working, no one is envied more than IT people. It is true that nothing in this world has been untouched by IT revolution. In return, IT industry has created jobs and desirable lifestyles for many.

Qualities of Software Engineers

Software development is an important aspect of IT and hence it hardly sees any dearth of jobs. On the contrary, the crop of people who wish to join software development is growing greater every passing day.

But, being a software developer is no easy task.

With intense competition, merely possessing an engineering degree or diploma is just not enough. Every company is looking forward to hire someone who is not “just a software developer”, they seek much more!

What exactly is this “much more” and what can be done to achieve it?

Qualities of a good software developer can vary from company to company, but basic qualities that any employer would look in you as a software engineer are listed below:

how to become software Engineer

Communication and Presentation Skills

Gone are the days when software developers were perceived as geeks, ones with big spectacles, hidden behind books and computer.

software engineer
Image courtesy of stockimages / FreeDigitalPhotos.net

It has not being very long since they have broken the mold and came out of the stereotype.

Today they are required to take lead, represent the company and communicate with the client. This communication is not only for business sake but also for the client to understand their requirements effectively and to explain them the technical details.

So, good communication skills are must for a good software developer.

Willing to Constantly Upgrade Yourself with Newer Skills & Technology

With rapidly changing technology, keeping up with it is a mammoth task. But a good software developer has to do it in order to keep himself indispensable.

You could enroll yourself in some on job training classes or learn online, but keep up with equal pace.

Redundancy is higher in people who refuse to upgrade themselves to newest technical know-how or take a lot of time to change accordingly. A good software developer would constantly be in touch with industry changes and upgrade himself accordingly.

Problem Solving Skills

Software development is all about problem solving. To say, everything that makes & evolves software is a problem, is not an exaggeration.

Software developers are supposed to understand and solve these problem everyday with equal passion. And they also have to find to do things in a easier and faster way.

So, for a good software developer problem solving is part and parcel of his daily job and he should possess exceptional skills to prove he is ahead of many.

Teamwork and Leadership Skills

Software development is huge process. Many restrict it to “writing codes”. But reality is, right from when the product is conceptualized, till it is a finished product, everything is part of software development.

In this huge process, a software developer is required to work in a team of people of various departments as well as take leads at appropriate times.

While it may take sometime to develop leadership skills and get a leader role, teamwork is very important skill that every software engineer must have.

Be Passionate About Coding

This is the most important skill that a good software developer should possess – being passionate about coding. A code is a backbone of all software and it is only easy when it sounds.

In actuality, it is one number crunching, mind numbing and dull process which can give any a serious headache.

But a good software developer would make this numbing process a part of his life and do it with all sincerity and passion.

Design Models in Software Development Life Cycle

Software development life cycle involves many design models; Waterfall Model, V-shaped model, spiral model and Incremental model are the three main types of SDLC models which are popularly used. RAD (Rapid Application Development) and Prototype Models are also part of SDLC process.

Waterfall model

One can only use Waterfall model if the requirements are already known to the developer, unless it is useless. It follows same steps including Requirement, Design, Coding, Testing, Implementation and Maintenance. Before proceeding towards next step, it is necessary to complete the previous phase properly. It is fast and easy to use model.

V-shaped

This model is similar to Waterfall model except that the main importance is given to the testing phase in this model and all the phases are implemented in sequential manner only. System plan is made before starting the development phase and instead of focusing on writing the code, testing methods are decided first.

Incremental method

Also known as iterative method focuses mainly on the larger portion of the software and focus on decorative parts afterwards. The idea behind this model is that due to completion of important and bigger part first, the probability of having errors and bugs will be reduced.

Software Development Life Cycle (SDLC)

Software development life cycle is a structural representation in which a particular software product development is based.

SDLC involved various models in which method of forming a product is same but the technicalities are different.

Software development process mainly consists of various steps and this life cycle depicts what tasks are performed in which step.

Every software development organization follows models inspired by SDLC process and on the basis of this procedure only they maintain, implement and secure the product.

Stages in Software Development Life Cycle (SDLC)

There are five main steps in SDLC process:

  1. Planning
  2. Design
  3. Implementation
  4. Testing
  5. Documentation
  6. Deployment and Maintenance

Planning

For the development of any product, in this case software, foremost step is to have a proper planning.

Every organization has a specific department which is responsible for collecting all the requirements and analyses what is needed.

Requirements of the software are based on what kind of software is desired by the client and further research is being made on the basis of that information.

Once the requirement gathering step is completed, a document or report is generated in which the mission and vision of the software is mentioned. Feasibility study of the project is also done in this step of process.

Design

Requirement gathering step is followed by designing of the product. In this step, analysis is prepared and features regarding design of the product are made in which screen layouts, diagrams, graphical representation and pseudo code is prepared. Domain modelling is also done in this step only.

Implementation

According to the design of the product, next step of the SDLC method is to execute points and start writing code for the software. Senior level coders work in team to produce optimal code.

Testing

Once the code is prepared, it is tested by specific department to check whether it is running properly or not. Bugs and errors are checked in this step. Testing is very crucial and essential part of any software development procedure as company is required to produce product as desired by the client.

Documentation

Keeping records of every step is important so that when required again this procedure can be used. By the time, every software gets updated and improved thus for future reference documentation is essential. API (Application Programming Interface) is a part of documentation that mainly includes having records of designs for the software product.

Deployment and Maintenance

After the approval of the software to release its final output, next step involves deployment.

The process of deployment consists of installation of the software, customization of various parameters, testing and setting the period of evaluation for extended time what so ever.

Software can be faulty any day, thus it is required to have proper and regular maintenance plan for it. The utmost requirement of the client is that the software hence produced is compatible with every system and for that many things are upgraded in it.

Maintenance involves adding, upgrading and analyzing the software at regular intervals so that it can be used at larger scale.