Software development is an iterative logical process that aims to create a computer coded or programmed software to address a unique business or personal objective, goal or process. Software development is generally a planned initiative that consists of various steps or stages that result in the creation of operational software. Software development is primarily achieved through computer programming, which is carried out by a software programmer and includes processes such as initial research, data flow design, process flow design, flow charts, technical documentation, software testing, debugging and other software architecture techniques. This is known as the software development life cycle (SDLC). Software development may also be called application development and software design.
SOFTWARE DEVELOPMENT PROCESS
The software development process is a general term describing the over-arching process of developing a software product. Sometimes referred to as the software life cycle, this process may be used for the implementation of a single application. Software developers are in high demand in the current job market, and computer programming is a prerequisite skill for success in this field. Start your journey toward becoming a professional software developer by learning Java, one of the industry’s most commonly used programming languages. While there is not standard definition, most development processes include the following activities:
- Analyzing the problem
- Requirement gathering
- Design for the software-based solution
- Implementation(coding) of the software
- Testing the software
- Maintenance and bug fixing
Implementation is the part of the process where software engineers actually program the code for the project.
Software testing is an integral and important phase of the software development process. This part of the process ensures that defects are recognized as soon as possible. In some processes, generally known as test-driven development, tests may be developed just before implementation and serve as a guide for the implementation's correctness.
Documenting the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the writing of an API, be it external or internal. The software engineering process chosen by the developing team will determine how much internal documentation (if any) is necessary. Plan-driven models (e.g., Waterfall) generally produce more documentation than Agile models.
Deployment starts directly after the code is appropriately tested, approved for release, and sold or otherwise distributed into a production environment. This may involve installation, customization (such as by setting parameters to the customer's values), testing, and possibly an extended period of evaluation. Software training and support is important, as software is only effective if it is used correctly.
Maintaining and enhancing software to cope with newly discovered problems or new requirements can take far more time than the initial development of the software. Not only may it be necessary to add code that does not fit the original design but just determining how software acts at some point after it is completed may require significant effort by a software engineer. A small part of that is fixing bugs. Most maintenance is extending systems to do new things, which in many ways can be considered new work.
INTEGRATED DEVELOPMENT ENVIRONMENT
An integrated development environment (IDE) also known as integrated design environment or integrated debugging environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a:
- Source code editor,
- Compiler or interpreter,
- Build automation tools, and
- Debugger (usually).
IDEs are designed to maximize programmer productivity by providing tight-knit components with similar user interfaces. Typically an IDE is dedicated to a specific programming language, so as to provide a feature set which most closely matches the programming paradigms of the language.
A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in the structure. A modeling language can be graphical or textual. Graphical modeling languages use a diagram techniques with named symbols that represent concepts and lines that connect the symbols and that represent relationships.
A programming paradigm is a fundamental style of computer programming, which is not generally dictated by the project management methodology (such as waterfall or agile). Paradigms differ in the concepts and abstractions used to represent the elements of a program (such as objects, functions, variables, constraints) and the steps that contain a computation (such as assignations, evaluation, continuations, data flows). A programming language can support multiple paradigms. For example, programs written in C++ or Object Pascal can be purely procedural, or purely object-oriented, or contain elements of both paradigms. Software designers and programmers decide how to use those paradigm elements. In object-oriented programming, programmers can think of a program as a collection of interacting objects, while in functional programming a program can be thought of as a sequence of stateless function evaluations. When programming computers or systems with many processors, process-oriented programming allows programmers to think about applications as sets of concurrent processes acting upon logically shared data structures. Some languages are designed to support one paradigm (Smalltalk supports object-oriented programming, Haskell supports functional programming), while other programming languages support multiple paradigms (such as Object Pascal, C++, C#, Visual Basic, Common Lisp, Scheme, Python, Ruby, and Oz).
DIFFERENT TYPES OF SOFTWARE DEVELOPMENT
1. Web Development
2. Mobile Development
This one could better be described as “App Development” and involves creating anything to run on mobile devices, such as iPhones, Android devices, and recently, the Windows 10 platform. Most popular OS’s offer their own programming languages but some traditional languages can be used as well. The versatility of mobile development allows anything from Candy Crush games, to console-like quality games in the palm of your hand. Games aren’t the only thing to focus on either; there are all sorts of apps for pretty much anything, from the ordinary, like finding where the best place to eat is or catching up with news, to the random, such as telling you how much of water you should drink daily, or turning your photographed face into a zombie. Languages of choice: Android, Swift (for iOS), Objective C, HTML5, Java, C#
3. Data Science
Developing for scientific application usually means some very specific numerical application. The applications of this are cooler than you think: it’s what machines think, actually. Machine learning needs large amounts of data to “learn” from, in order to ‘make its own decisions’ about given situations, and data science ensures this data is presented in the correct form to be used in applications. Languages of choice: C/C++, MATLAB, Python
4. Application Development
This is the “original” type of programming. These are ‘standard’ Windows (or Mac, or Linux) applications that perform their duties on traditional desktop operating systems. It’s often considered a programme, executed on demand by the user, that shows up its interface in the confines of the OS that it’s running upon. Languages of choice: Java, VB.NET, C/C++,C#, Python.
5. Back-end Development
Database management is a prime candidate for back-end development. Database development is literally the backbone of any system that holds large amounts of data to be organized. Think companies’ client database, or bigger still to Facebook’s user database. One billion users’ details have to be organized somehow, and back-end developers make this their job. Languages of choice: C and C++; Linux scripting for Cron; also (my)SQL, dBase and Oracle for databases
6. Software Tools Development
This development builds tools for other software developers to test their code with. Beyond simply testing, developing this software will ensure other developers’ code conforms to industry standards and remains maintainable. Developing programs to test other programs is no easy task. Languages of choice: Java, Python, C++
7. API Development
This is the art of building something extensible. Developers build programs that act as puzzle pieces, across different operating systems, on desktop, mobile and the web. They allow 3rd-party developers to interact with the tools or functions the API relates to. It’s the laying of a foundation of standard procedures, types, tools, GUI interaction methods, database access rules and so on that programmers build other applications that make use of that API can use. Languages of choice: APIs are written for specific platforms or functions, and each API will have the programming language of the platform/device/site/service it’s designed for.
8. Security Software Development
Penetration testers (“white-hat” ethical hackers) and cyber-security experts work together for the good of companies and their systems and data. The cyber-security team develop software to keep important company assets safe from theft, viruses and other malicious attacks, and the pentester tries to ‘hack’ into the system to find where the vulnerabilities are. In this way, there’s less chance of your “black-hat” malicious hacker getting into your important data. Languages of choice: any relevant to whatever system needs to be tested.
9. Cloud Computing
Cloud computing is the use of various services, such as software development platforms, servers, storage and software, over the internet, often referred to as the "cloud." In general, there are three cloud computing characteristics that are common among all cloud-computing vendors:
1. The back-end of the application (especially hardware) is completely managed by a cloud vendor.
2. A user only pays for services used (memory, processing time and bandwidth, etc.).
3. Services are scalable.