Photo by Pankaj Patel on Unsplash
The Internet and Software Development: A Detailed Perspective
A dive into the origin and evolution of the Internet and its connection with software development
Introduction
Marc Andreessen, one of the co-founders and general partners of the widely successful Silicon Valley Venture Capital firm, Andreessen Horowitz also known as a16z once said:
"Software is eating the world"
And it's my personal belief that this trend has decades left to run. Software is the foundation for the new wave of technological innovation that we have been seeing since the late '90s and the early 2000s, and that we will continue to see into the foreseeable future. Let's explore how we got here.
The Genesis of the Internet
During the Cold War in 1957, the Soviet Union had just launched Sputnik, which was the first-ever man-made satellite to float in space and the United States of America nursed concerns about possible attacks on its communication networks by the Soviets. As a result, the Department of Defence (DoD) through one of its agencies, the Advanced Research Project Agency (ARPA) began developing a closed network of computers called ARPANET which would be decentralized and therefore resilient to attack.
J.C.R Licklider, an American Computer Scientist at the Massachusetts Institute of Technology (MIT), who became the Director of the ARPA Office of Information Processing Techniques and Behavioral Sciences in 1962, was the first person to describe what would become known as Arpanet, and later the Internet. He described it as an Intergalactic Computer Network. Licklider conceptualized a globally interconnected group of computers through which everyone could instantly access data and programs from any site.
As the Arpanet network grew, it became difficult for the Department of Defence to track the identity of those using the network, and this led to concerns about potential compromise of the network's security. As a result, in the early 1980s, much of the development and expansion of the Arpanet was taken over by the private sector and researchers, and this later became the Internet.
How The Internet Works
Today, the Internet has become an indispensable part of everyday life for a vast majority of people around the world. But many people don't know what it is. The Internet is not the World Wide Web. Rather, it is a global network of interconnected computers that communicate by way of standardized protocols. To understand the Internet, one has to first understand the protocols that govern it, and these protocols are simply guidelines or rules for how information is exchanged on the Internet or across networks. The Internet operates by breaking down data sent from a sender's network device into small pieces known as packets, and these packets travel from router to router over the Internet till they are reassembled at the receiver's network device. These packets each contain Internet Protocol (IP) information which helps the routers send the packets to the right receiver.
At this point, I must note that network protocols and internet protocols are not the same thing. A network protocol is a set of procedures that enables devices to communicate with one another across the internet. Whereas, the Internet Protocol (IP) routes data by specifying the source of the data packets and their destination. Hence, the Internet protocol is a type of network protocol. There are several types of network protocols, but we would only describe a few of the most used ones:
Transmission Control Protocol/Internet Protocol (TCP/IP)
The TCP/IP is a set of standard rules which allow for different types of computers to communicate with each other. It is also known as a connection-oriented protocol. The Internet Protocol ensures that each computer that is connected to the Internet has a peculiar serial number which is known as the IP address. The role of the TCP is to detail how data is exchanged over the internet and also how that data should be broken down into data packets.
Furthermore, the TCP ensures that the data packets contain information regarding the source and destination of the data. It also ensures that the packets contain information about the sequence or order in which the data ought to be re-assembled and checks if the data has been sent correctly to the particular destination.
File Transfer Protocol (FTP)
The FTP is used in the transfer of files between systems. It operates on a client-server model in which a connection is set up between two machines when one requests a file transfer from the other, and the two machines authenticate one another by way of their ID and password. When this is done, the file transfer between the machines is then allowed to take place.
Simple Mail Transfer Protocol (SMTP)
SMTP is utilized in the transmission of electronic mail. It makes use of the mail header to retrieve the receiver's email ID and then adds the mail to a list of outgoing mail. When it has delivered the mail to the email ID of the receiver, the protocol removes the mail from the queue of outgoing mail.
Hyper Text Transfer Protocol (HTTP)
The HTTP defines how information is to be formatted and transmitted. It is used for the transfer of hypertexts over the internet. Furthermore, it specifies the different actions that the web browsers are to take in response to the calls made to access a specific web page. Typically, when one makes use of a web browser, one is indirectly using the HTTP, because the HTTP is the protocol that is utilized in sharing various multimedia files including images, text, etc on the World Wide Web.
Where Software Development Comes In
We have discussed the origins of the Internet and how it operates. But we are still missing a critical part of the puzzle which is that the protocols on which the Internet operates were consciously programmed and designed. The various software that we all use today, some of which are central to our lives such as Microsoft Word, and the websites we frequently visit such as youtube.com and amazon.com were all deliberately designed and crafted.
With the expansive growth of the Internet, we needed to come up with a way for machines to understand us and this was where software development became essential. Before this time, early computers were programmed using cards with punch holes, but as programming evolved, languages like BASIC (Beginners All-purpose Symbolic Instruction Code), C, and Fortran began to emerge.
The term software development refers to the process of designing, creating, testing, and maintaining software applications. It is usually done by individuals known as software developers and software engineers. The major difference between the two is that while a software developer executes the plan for a particular software, a software engineer designs and plans the software in addition to executing the plan. The software developer makes use of some tools, without which the complete software would not be possible. Apart from a working computer, some other critical tools that the software developer makes use of are:
An Integrated Development Environment (IDE)
An IDE is a software application that provides an extensive development environment for coding, debugging, and testing. There are a lot of different IDEs available for various programming languages, some of which are Visual Studio for Visual Basic and C#, PyCharm for Python, etc.
A Version Control System (VCS)
Version control systems help to store and track changes in source code. They have become essential to software development as they provide benefits such as enabling collaboration between multiple developers on the same codebase, managing changes to source code over time, etc. A very popular version control system is Git, others include Helix Core, Subversion, etc.
Command-Line Interface (CLI)
A command line interface is a text-based interface where a user can input commands that relate to a computer's operating system. CLIs allow developers to perform tasks such as executing commands and navigating directories. They are important for executing system-level operations, managing server configurations, storing scripts to automate regular tasks, etc. Some well-known CLIs include Command Prompt for Windows, Linux Bash Shell for Linux, Mac Terminal for MacOS, etc.
The Software Development Life Cycle (SDLC)
Having discussed the importance of software development and the various tools it utilizes, we must also note that responsible software development typically follows a particular flow:
Analysis
Design
Implementation
Testing
Deployment
Maintenance
Analysis
The first stage of the Software Development Life Cycle, analysis, is concerned with defining the features and functions of the proposed system. It is usually at this phase that the Software Requirements Specification (SRS) is developed. The SRS specifies the functional and non-functional requirements for a particular software to be built, and this document might also include specific use cases that the software must deliver for the user to have flawless interaction. This is also the phase where the Product Requirement Document (PRD) is developed. The PRD details all the functionalities that must be included in the release of a product for it to be deemed complete.
Design
In the Design phase, the requirements provided by the SRS are utilized to create a design specification for the software product. This is the phase where the Techincal Design Document (TDD) and the Architectural Design Document (ADD) are both developed. The role of the TDD is to detail how the various functionalities described in the SRS would work. The TDD provides a technical overview of what is to be built and focuses on the components that would make the functionalities work.
Implementation
This is the stage of the Software Development Life Cycle where the code is written. In the implementation phase, all the requirements and specifications developed in the earlier stages are implemented to create the intended software product. At this stage, the software developers refer to the SRS to ensure that they stay within the confines of its specifications.
Testing
At this stage, the main question is "Does the code meet the requirements specified for it?". The testing phase is concerned with ensuring that the software system that has been developed adheres to the specifications that have been outlined for it in various documentation like the SRS and PRD. At times, testing can be done incrementally in the process of building as this serves better in identifying bugs.
Deployment
Deployment only occurs when the product has passed the testing phase which means that it meets all the requirements specified for it. Once the product has been proven to be compliant with its specifications, it is formally deployed to its appropriate target audience. Depending on the organization, deployment can be done incrementally or completely at once.
Maintenance
After deployment, the next phase is maintenance. If there are bugs in the system after deployment, then the system has to be maintained. Maintenance is also done to continually update the software system, and ensure that it operates according to the specifications given to it in the analysis phase of the Software Development Life Cycle.
In maintaining the system, we would need to go back to the analysis phase which ensures compliance with outlined specifications, as such, the Software Development Life Cycle is a continuous process that helps to systematically deliver high-quality software consistently.
Conclusion
It's been quite the ride, I hope I have been able to give you a functional overview of the evolution of the internet and the role that software development plays in that. As I said at the beginning of this article, I believe that software development will remain the foundation for new technology in the foreseeable future, even if it increasingly derails from its conventional standards, and I am excited to be part of that journey.
References
The Origins of the Internet | World101
A Brief History of the Internet – Who Invented It, How It Works, and How It Became the Web We Use Today | freeCodeCamp
Types of Internet Protocols | GeeksforGeeks
9 Types Of Network Protocols & When To Use Them By Tim Keary and Kiran Aditham, Reviewed by Matt Hoeper | Forbes Advisor
10 Essential Tools Every Developer Should Know About By Ruban Gino Singh | DEV Community
Software Requirements Specification | Wikipedia
Product Requirements Document | ProductPlan
Software Development: What It Is, How It Works, & Life Cycle | Revelo