article for audiance who are new to software development
In simple terms, Software is a tool that performs the work for humans and saves us a lot of time and money.
The software is written by logic (instructions) using a language that machine understands, ie. programming language. These machines with Integrated Circuits (chips) and other electronic components can process machine instruction to do a certain task (calculation). While there exist thousands of languages (high-level and low-levels) for writing a software, each offering different set of advantages and disadvantages, however, at the core it is either 0 (zero) or 1 (one), where 0 represents low voltage (ex. 0v) and 1 represents high voltage (ex. +5v). The set of instructions (logic) written in a program using different programming language all-together performs a task (calculations) based on instructions fed. When such small-small programs are written to do an individual task of there own are merged together to do the whole set of operations focused to a certain project as a whole, it is referred to as a Software.
The types of software are not limited, as it can be for all-purpose. As of today, software is not only limited to desktop, mobile or internet, but software is even capable of thinking using Artificial Intelligence (mathematical algorithms or logic) which are also a set of instructions given to a computer; and it is estimated that soon software will take over human's general intelligence (don't be scared, we are still struggling there).
SOFTWARE DEVELOPMENT LANGUAGES (PROGRAMMING LANGUAGES)
The programming language one chooses to write a software is mostly based on the "popularity" or broadly, the language that receives good community support where more number of computer programmers (instruction writers) unite together to make a particular language better and better. However, the popularity of a language also depends on robustness, security, documentation, simplicity, compiled/interpreted, extensibility, manageability, and so much and so forth. However, no wonder the language you choose, the result is the product that solves your problem, but no wonder, it is very important to choose the right tool or programming language to write a software that is good.
One must note, language is not all enough to write a software, because the software that not manageable, extensible, well documented (code documentation and user documentation), secure and robust are merely a trash. So, one must make sure that a software that is written must represent the state-of-art.
Well, as already told, there are thousands of programming languages and we are only going to get the taste of it, discussing some of the popular ones:
C/C++/Java: These are down-to-earth kind of language that is very closely connected to hardware and low-level, that it's easier talking directly to devices. They also serve as a backbone to many of the new languages that co-exist today are built using C/C++. These are the most powerful language with good community support existing since the dawn of computers and are still popular and widely used then the new.
However, it is also important to note that C++ and Java were derived from C. C is referred to as the "mother-language of all", although, there exists an Assembly language that is the backbone for C offering machine-level programming.
PHP/JSP/ASP...: These are the backbone of the internet. They serve as a server-side programming language giving brains to online tools and applications. However, they do not come alone, as there are other languages that blend along with them - 'HTML' which is the markup (presentation) for the DOM (document/file), 'CSS' giving the look and the feel, 'JavaScript' gives the browser-side functionalities, databases (MySQL/NoSQL) storing data and so forth, when operating together, gives a purposeful tool that solve a problem.
Just to remind, there are other popular languages as well for writing internet that solves the problem, such as Python, Ruby On Rails, PERL, etc. which are equally popular.
Python: becoming very popular recently for its simplicity and diversity. Python is a multi-purpose language that can be used to write Game, Internet, Artificial Intelligence, and so much more.
C#/Java/Objective-C...: for writing mobile applications on Android (Java), iOS (Objective-C) or cross-platform applications (C#), etc.
..and, the list goes on.
Then there is language's framework for most of the languages that provide solutions to a particular problem area, such as:
PHP's framework: CodeIgniter, Laravel, ...
JavaScript framework: ReactJS, AngularJS, ...
Python's web framework: Django, Flask, ...
AI's framework: Numpy, Tensorflow, ...
And, there are types of language such as:
Compiled: executable (.exe file) runs only on system-architecture where it was built.
Interpreted: no executable are required, as it runs directly from (interpreted) source code or program instruction in a file.
Multiparadigm: supporting more than one programming paradigm.
Interactive: like MS-DOS, that operates on a shell or prompt taking expression (short instructions) to do tasks.
..and again, the list goes on.
This should give you the taste of programming language!
THE PROCESS OF WRITING A SOFTWARE
The programming language is one thing, but the process of producing the software is what matters even more.
You will hate this part, but there are multiple ways of producing the software that follows one of hundred existing software engineering processes (viz., Agile, Scrum, SDLC, Waterfall, etc.), and the good part, we won't go through any of that. However, we are going to have the essence of producing a beautiful piece of state-of-art software.
The types (desktop application, web application, etc.) of software is not a concern here, we will talk generically to all types to give you the idea of how it's done and the process are as follows:
Requirement Analysis: Before writing actual software, we need to analyze, plan and design the software in the paper by gathering software requirement closely in association with the client and their business. This is a very important step in software development and should be done with the greatest care. This step decides, how the software will come out to be once done. Therefore, at this step, we need to make sure that we analyze the business requirement up to the mark and plan the software accordingly to produce a RAD (Requirement Analysis Document) for client that briefly highlights almost everything about the software that is to be developed, as in - Milestones, Technologies, Features and Functionalities, Pricing, User Flow, Software Architecture and more.
It consumes about 15% of the software development time.
Design and Layout: Once the RAD is approved by the client, the next step is designing and preparing layout. Here, the architecture of software is prepared on which whole of the software relies and on top of this, the software design is constructor to decide the overall look, feel and flow of the software along with the complete layout. Design and layout play another vital role in constructing a software, as it serves as a back-bone deciding the final form of the software. This step comprises of a lot of work and should be given maximum time before actually starting to write a software and involves following, viz. Flows Charts, Class Diagram, Software Architecture, Look and Feel, Database Design and so forth.
It consumes about 35% of the software development time.
Code Implementation: The writing of software happens here. Based on the requirement analysis and design and layout prepared on the previous steps, the program codes are written piece-by-piece which are later merged to form a beautiful piece of software that actually meets the software requirement. However, this step requires software developers to work very closely with the project manager and team leaders, who in turn makes sure that the software's source codes are coming out good by continuously integrating, testing, debugging and making sure that the software is well documented, manageable, robust, efficient and so forth, using various techniques of management like Agile, Scrum, etc. It is at this step that makes a piece of software source code a state-of-art work.
It consumes about 30% of the software development time.
Testing: The developed software is not released unless making sure that software does what it is supposed to. The software is tested in a different test environment to make sure that the Security, Functionality, and Ease of Use of the software are intact and in the right proportion.
It consumes about 20% of the software development time.
Support and Maintainance: Software once deployed and delivered is when the real work begins, because the software being used in a real-time environment will be evaluated based on performance, ease-of-use, functionality, security, efficiency, robustness and so forth, and the fixing and changing of software continuous for the whole period of maintenance to make sure that the software is full-proof.
Some FACTS of getting the software developed that everyone should know:
- - The software can be poorly designed while it may seem like it does what it is supposed to.
- - Software that has data involved must be made sure that databases design is at its superior or else in a long run, it is going to crash.
- - Software without proper code documentation and user documentation is merely a crap that cannot be managed, extended or even understood.
- - The software is always porn to hacking, so security must be taken care of before it costs a fortune.
- - Software without intense testings is porn to cost your business.
This should give you fair idea of what software is and how it is is constructed, however, for doubts write to us anytime and we will be happy to answer you.
Do pay us a visit at our Shillong office (3rd Floor, M. Khongsit Building, Motphran, Shillong-2, Meghalaya, India) or reach us out here for all types of Software Development requirement.