An Introduction
Consider the technology you use in your day-to-day activities. What devices do you use? What applications do you use on those devices? How do you use said technology? It is highly likely that your responses indicate a high cohesion between daily life and its activities and the usage of technology. Yet, to ensure a natural and seamless interaction between humans and technology to yield positive output, software development is used. Software development separates itself from the heaps of other industries as a result of the complex product development cycle which involves calculated interactions between many variables. Starting with managers and their requirements according to the planned product design, to the actual development process, and furthermore the structure of teams in the tech industry, the software development field has been increasingly rationalized in a short time, exhibiting George Ritzer’s pillars of rationalization throughout the process.
What is Rationalization?
The concept of rationalization was introduced by Max Weber and since coining the term, sociologists have developed their own understanding of the term. In this paper, we will employ the Ritzer definition of rationalization, which suggests that rationalized systems focus on maximizing the domains of efficiency, predictability, calculability, and control. Efficiency typically refers to the ability to reach a goal rapidly, with minimal effort or cost involved. Predictability attributes itself to creating an environment that reduces variability. Calculability emphasizes quantity of the product rather than quality. Finally, control in a development standpoint refers to the ability to manage humans using non-human technology.
With the expansion of work in the industry, software development practices and management techniques have rationalized the software development process. The progress made on modern programming languages, new developer tools, and managerial techniques have not only improved the development process, but the end result as well.
Programming Paradigms
In the early beginnings of computer science, programming languages were at its lowest-level form. Languages were built to interact directly with the machine itself, with the resulting language being called machine code (Sarkar, 2009). The machine code is a computational derivation of the punch-card instructions used in early computers, and was initially inputted as a sequence of numbers. The next logical step was the introduction of procedural programming languages, which allowed developers to program with increased usage of keywords. Currently, languages are "object-oriented" allowing for developers to think more in terms of the problem at hand. The shift of language focus from deep machine interaction to the inclusion of greater problem terminology has resulted in increased efficiency and predictability of code.
Integrated Development Environments
In conjunction with the rise in different programming paradigms, came the addition of a series of tools for developers (aptly named “developer tools). A key developer tool came to be the Integrated Development Environment (IDE), which aided in improving the efficiency and predictability of the code-writing process.
An IDE is an application that gives programmers the ability to actually write code. Typically, an IDE consists of a code editor, code builder, and tools to test code. The application was developed in an effort to maximize the productivity of the individual programmer by creating one stop for all code-related interfaces in the development process. Two major features of interest within IDEs here are code-completion technologies and syntax highlighting.
Code Completion
Prior to the usage and development of code completion, developers would frequently refer to a programming language’s documentation as well as previous experience. With the arrival and progressive improvements in code-completion, the code-writing process has seen increased efficiency, with code-completion software providing context-aware options, reducing typos and other common mistakes. This increased efficiency and predictability of code and led to increases in code-reusability.
Syntax Highlighting
Typically, syntax highlighting will change the color of certain categories of terms in written code. The color coordination in code allows for developers to easily catch issues in their creation of certain code structures or in programmatic syntax. Previous research evaluated the effects of syntax highlighting on the comprehension of written programs, and found that the presence of syntax highlighting significantly reduced the time it took for programmers to understand the program (Düring, 2006). The inclusion of syntax highlighting has also evolved in IDEs to allow developers to see other instances of used variables, making certain aspects of the debugging process easier as well. The inclusion of syntax highlighting has led to improvements in efficiency and predictability.
Balancing Hardware with Software
As research and development ramped up through time, increases in our available computing power, and as a result the accessible and usable resources for our software have steadily increased. Rationalization was able to take advantage of the advances made in the hardware space to boost efficiency of developers. To determine the rate of growth in computing power, Moore's Law was theorized and has since been attached to as a metric to estimate growth in computing power. Moore’s Law is the observation that the density of transistors in semiconductors doubles every two years. With gains being made in the number of transistors as a result of Moore’s Law, this thereby increased the computing power available to developers. The advances in hardware research has led to increases in efficiency in the development process.
Software Development Methodology
As software development continued to shift from the research space into the mainstream, businesses required methods to control the projects they were working on. Software Development Methodologies (SDMs) were developed starting in the 1970s with the aim to create software in a predictable and calculable way. Software Design Methodologies allow for developers to split a complicated problem into multiple different subparts, allowing for teams to work to smaller milestones, tracking their progress along the way. By splitting tasks, development roles have become progressively specialized as developers only need to have knowledge on one aspect of the development process as opposed to the entire process in early development history.
Task Boards & Code Sprints
More modern forms of SDMs employ forms of milestone tracking such as Notion boards, which lay out all available tasks in the development of software. These task boards play a more important role in the event of a code “sprint” – where developers focus on a small number of tasks to complete in a fixed period of time (Düring, 2006). As part of a code sprint combined with SDMs, managers have the ability to visualize development data, measuring completed tasks and the rate at which code was developed (Szalvay, 2004). Under SDMs, a code sprint in some companies can become a form of healthy competition since developers who complete more tasks in this fixed time can take home higher rewards in the form of bonuses or company favorability. The concept of a code “sprint” sees concepts of rationalization in its complete form since developers are forced to work at maximum efficiency, tasks are completed in a predictable and calculable manner, and management controls what tasks are completed. In addition, code sprints depict humans controlled by non-human technologies. In this case, humans are working against the clock to complete as many tasks as possible.
Crunch Development
Turning the concept of a code sprint into an unethical practice by increasing the pressure and milestones drastically, crunch development is a practice that can be considered as the current cumulation of rationalization, being a prime example of calculability, predictability, efficiency, and control, all being in effect. In this practice, developers are forced to meet extremely high demands of output in rather short periods of time so that the business can output features to the public. Crunch development has been shown as a marker that transforms a field once seen as craft work into the lines of industrial work. The practice of crunch development allows for management to effectively package, measure, and control the resulting product, while reducing variability and increasing production.
Conclusion
Advancements in computer science and software development practices have partially rationalized the software development industry. The improvements made in the technical side of software development including language development, the integrated development environment, and access to computing power, combined with advances on the managerial side of software development including SDMs and Crunch Development have led to an increase in efficiency, predictability, calculability, and control – the main four characteristics that define rationalization. Even with existing irrationalities and the drawbacks, rationalization has positively affected the software development field, making the process of taking an idea, writing software, and releasing it to the public much easier than before for developers, and netting profits for companies invested in technology. Future work in rationalization can potentially look into reducing the negative effects / unethicality of crunch development. In addition, future innovations in the field can look into further harnessing the power of emerging technologies including artificial intelligence and quantum computing to increase automation in the field.
References
Backus, John. "The history of Fortran I, II, and III." ACM Sigplan Notices 13.8 (1978): 165-180.
Berkson, Joseph. "A punch card designed to contain written data and coding." Journal of the American Statistical Association 36.216 (1941): 535-538.
Booch, Grady. “Object oriented design with applications”. Benjamin-Cummings Publishing Co., Inc., 1990
Bruch, Marcel, et al. "IDE 2.0: collective intelligence in software development." Proceedings of the FSE/SDP workshop on Future of software engineering research. 2010.
Dasgupta, Subrata. It began with Babbage: the genesis of computer science. Oxford University Press, 2014.
DeMarco, Tom. "The role of software development methodologies: past, present, and future." Proceedings of the 18th international conference on Software engineering. 1996
Düring, Beatrice. "Sprint driven development: agile methodologies in a distributed open source project (PyPy)." International Conference on Extreme Programming and Agile Processes in Software Engineering. Springer, Berlin, Heidelberg, 2006.
Floyd, Robert W. "The paradigms of programming." ACM Turing award lectures. 2007. 1978
Fraser, Christopher W., Eugene W. Myers, and Alan L. Wendt. "Analyzing and compressing assembly code." ACM SIGPLAN Notices 19.6 (1984): 117-121.
Innes, Mike, et al. "On machine learning and programming languages." Association for Computing Machinery (ACM), 2018.
Kimmig, Markus, Martin Monperrus, and Mira Mezini. "Querying source code with natural language." 2011 26th IEEE/ACM International Conference on Automated Software Engineering (ASE 2011). IEEE, 2011.
Klein, Dean. "The history of semiconductor memory: From magnetic tape to NAND flash memory." IEEE Solid-State Circuits Magazine 8.2 (2016): 16-22.
Konsynski, Benn R., et al. "PLEXSYS-84: An integrated development environment for information systems." Journal of Management Information Systems 1.3 (1984): 64-104.
Li, Jian, et al. "Code completion with neural attention and pointer networks." arXiv preprint arXiv:1711.09573 (2017).
Lin, Carolyn A. "Exploring personal computer adoption dynamics." Journal of Broadcasting & Electronic Media 42.1 (1998): 95-112.
Mack, Chris A. "Fifty years of Moore's law." IEEE Transactions on semiconductor manufacturing 24.2 (2011): 202-207.
Mahadevan, Lakshman, William J. Kettinger, and Thomas O. Meservy. "Running on hybrid: Control changes when introducing an agile methodology in a traditional “waterfall” system development environment." Communications of the Association for Information Systems 36.1 (2015): 5.
Normark, Kurt. "Overview of the four main programming paradigms." (2013).
Ortega, Ruben, Mark Guzdial, and Daniel Reed. "Software development and crunch time; and more." Communications of the ACM 53.7 (2010): 10-11.
Peng, Daiyi, et al. "PyGlove: Symbolic programming for automated machine learning." arXiv preprint arXiv:2101.08809 (2021).
Roser, Max, and Hannah Ritchie. "Technological progress." Our World in Data (2013).
Rudin, Cynthia, and Kiri L. Wagstaff. "Machine learning for science and society." (2014): 1-9
Rumbaugh, James. "Relations as semantic constructs in an object-oriented language." Conference proceedings on Object-oriented programming systems, languages and applications. 1987.
Salih, Shadman. Selection of Computer Programming Languages for Developing Distributed Systems. Diss. De Montfort University, 2014.
Sarkar, Susmit, et al. "The semantics of x86-CC multiprocessor machine code." ACM SIGPLAN Notices 44.1 (2009): 379-391.
Schaller, Robert R. "Moore's law: past, present and future." IEEE spectrum 34.6 (1997): 52-59
Szalvay, Victor. "An introduction to agile software development." Danube technologies 3 (2004).
Winograd, Terry. "A procedural model of language understanding." (1973).
Image Credits
Fig 1. Thompson, Clive. "Coders Aren't Assembly Line Workers." MrTopStep.com LLC. 28 Mar. 2017. Web. 01 May 2021.
Fig 2. Maria, Meghan De. "14 Menu Items McDonald's Employees Won't Eat." Eat This Not That. Eat This Not That, 06 July 2020. Web. 01 May 2021. <https://www.eatthis.com/mcdonalds-foods-employees-wont-eat/>.
Fig 3. Paul, Javin. "Top 10 Most Popular Programming Languages and Their Creators." DEV Community. DEV Community, 11 Oct. 2020. Web. 01 May 2021. <https://dev.to/javinpaul/top-10-most-popular-programming-languages-and-their-creators-59el>.
Fig 4. "Cloud & Desktop IDE Platform." Theia. Web. 01 May 2021.
Fig 5. "Circuit Board." Circuit Board Design. Web. 01 May 2021. <https://www.wallpaperflare.com/search?wallpaper=circuit%2Bboard>.
Fig 6. Unsplash. "Programmer Picture." Programmer Picture [HD]. Unsplash. Web. 01 May 2021. <https://unsplash.com/s/photos/programmer>.