The history of computer science, software engineering, and the World Wide Web is rich, fascinating, and quite surprising if you haven't gotten into it before. It begins in a time when computer programs were essentially just instructions to manipulate a physical device and carries through several key turning points that led to first the commercialization and finally the consumerization of computing technology.
Here, we'll present a very brief overview of some of the major milestones and send you to more reputable sources for the good stuff :)
Back in the late '50's and early '60's, programmers didn't even interact directly with computing devices. They delivered their programs by hand to technicians and then picked up the results hours later after the programs were batch processed with many others. Thus early tasks were typically geared towards mathematical computation, which required a very limited feedback loop.
You've probably heard of the first widely used programming language -- IBM's Fortran -- which was released in 1957 for mathematical and scientific computing. Another, Cobol, was released by the US Department of Defense in 1962 for use in business applications.
But the transition to using a time-sharing model instead of batch processing for running programs was perhaps most significant of all because it led to a rapid growth in computing applications. Unfortunately, projects consistently failed to deliver reliably, on time and on budget. Practitioners were forced to admit that they lacked the proper best practices to implement and produce software at scale commercially. They called it the "Software Crisis".
It was clear that designing complex software systems would require better tools and approaches than were available at the time so a conference was convened in 1968 to find a solution. This is really where the term "Software Engineering" found its roots. The conference sought to apply the best practices of project management and production -- already used in traditional engineering disciplines -- to software. As a result, they produced a report which defined the foundations of software engineering.
Over the following decades, the discipline of programming saw a familiar tension between the scientific thinking of academia, which tended to seek idealized solutions to engineering challenges, and the practical needs of an industry faced with real-life time and cost pressures (and bloated code bases). The early 70's saw the emergence of key ideas in systems thinking which allowed engineers to break these giant projects into modular (and much more manageable) pieces that communicated via interfaces.
Another tectonic shift occurred in the early 1980s with the move away from thinking of data as just a continuously changing stream and towards the idea of persisting discrete "objects" which could interact and hold independent state. More concretely, that allowed developers to create and interact with the almost-physical objects of the graphical user interface (GUI) like menus and icons and windows. You're probably familiar with the derived term "object-oriented programming".
The decades leading up to the present day were marked by astounding increases in computing power (following Moore's Law):
This new computing power wasn't entirely beneficial to the state of the industry. Where before engineers needed to be very careful to design efficient programs that could run with the limited memory and processing power of the day, reliance on raw power led to some backwards steps in the quality of code written. This has led some to decry the rise of "wasteful" software.
Read A Brief History of Software Engineering by Niklaus Wirth to experience it for yourself.
Source: World Science Festival
In 1989 the web was born when Tim Berners-Lee, a computer scientist at CERN in Switzerland, wrote a paper describing linking documents together with "hypertext". But it wasn't until the mid-1990's that the web browser was created to give users graphical access to those pages and the ensuing browser wars over its dominance occurred.
Another important development of the 90's was the rise in open-source software. The paradigm of the day was for developers to only release the executable binaries and not the actual developer-friendly source code. Open Source was a reaction from engineers tired of being shackled to these corporate code bases and forced to license software.
The open-source movement is one of the major reasons for the latest explosion in software engineering productivity -- a significant number of the languages, tools, and frameworks that we use to develop software are only available to us because their creators decided to "open source" them. Otherwise, you'd potentially have to pay for (or at least license) every bit of software you use (e.g. Ruby on Rails).
Some of the more recent-day history is probably already familiar to you. For instance, how the rise of commodity computers has led to the development of the "cloud", so now applications can be updated and accessed in real time as opposed to downloaded onto a user's computer. And then there's the rise of mobile with the development of smartphones and tablets -- Apple's iPhone wasn't the first smartphone but it helped put one in most American households. Mobile continues to redefine the way we think about the use and reach of software.
Though so far we've covered the technologies that have enabled software's explosion, much of engineering is also about implementing the right processes to solve problems. If you recall, a lack of effective processes is what originally propelled developers to adopt engineering practices back in the 1960's. More recently, the rise of cloud computing and more demanding consumers have led to the rise of new project management techniques like Agile Development, which we'll cover in future lessons.
This talk by Paolo Perrotta at Baruco2012 takes an entertaining (if meandering) journey through software history and how the perception of software engineers has evolved over time:
As we said at the beginning, we just want to give you a taste of how software has evolved and how quickly it changes. Hopefully you found this brief teaser interesting enough that you'd like to go out and learn more. When you do, please find some good free resources and send them back our way so others can learn from them! Some of the good ones we've found are listed on the Resources tab above.