Research and Advances
Computing Profession Contributed articles

Ways of Thinking in Informatics

An innovative, entry-level informatics course enables students to ponder CS problems in different ways, from different perspectives.
Posted
  1. Introduction
  2. Key Insights
  3. Context and Inspiration
  4. Ways of Thinking
  5. Exercises and Evaluation
  6. Discussion and Reflection
  7. References
  8. Authors
  9. Footnotes
cityscape seen through glasses at night

With the intimate entanglement of digital technology with humans and their social way of being, computer science has changed. While some of the problems we deal with are (still) well defined and mostly computationally solvable, many problems are now found to be wicked and ill defined. People and technologies are now part of an interwoven socio-material web in which humans are not the only actors anymore. This pervasive complexity raises challenges for computer scientists and technologists that go well beyond of what could be addressed by a traditional understanding of engineering the most efficient computational tools. It requires us to rethink what must be the core competencies of future computer scientists. New skills stemming from the social sciences or philosophy need to complement engineering skills to create digital technologies within lived experiences. With it comes a major shift in responsibility. In a New York Times article, Farhad Manjoo argued why 2017 could be seen as a turning point for big technology companies as they “began to grudgingly accept that they have some responsibility to the offline world.”a Technologists, whether working in dominating corporations, small start-ups, or within academia, can no longer pretend they only solve tech problems. They are required to engage in a moral discourse as most of their products or results are essentially social interventions.

Back to Top

Key Insights

  • Computer science has changed. Technology is now intimately entangled with people and society, which requires us to rethink how we equip students to shape our technological futures.
  • To counter narrow conceptions of problem solving, we present a CS course that offers students the diverse lenses through which we can engage with technology. Ways of include scientific, computational, designerly, critical, creative, responsible, economical, and criminal thinking.
  • As a first-year course of a computer science program, we reach 700+ students each year. Despite the logistical challenges, we argue that it is a great opportunity to empower so many of our students to see everything they hear subsequently from more than one side.

So how can we facilitate such a shift in the thinking as well as in the culture? In a recent workshop we co-organized on “Values in Computing,” a group of leading experts in the field of human-computer interaction discussed this question. The outcome was distilled into the Denver Manifesto,b which calls for a shift in the education of future researchers and practitioners to ensure they can not only write software, but are also critically reflecting on their moral positions and their contribution to society.

With this article, we want to report on our efforts to respond to this call and discuss a new entry-level course for students of informatics at TU Wien, Austria.c Its core premise is to enable students to think about problems in computer science (CS) in different ways and from different perspectives. The aim is to plant the seed of critical reflection and equip students with the intellectual tools to see everything they hear subsequently as part of something bigger. Consequently, we have called this new course “Ways of Thinking in Informatics.”

We have developed the syllabus over the course of one year and introduced it to over 960 bachelor students in the fall semester 2017. Here, we describe the context in which this course took place, discuss related literature, the rationale for its structure and fundamental concept, report on some of the practical challenges of teaching such a high number of students, and reflect on our experience from this first year.

Back to Top

Context and Inspiration

TU Wien is the largest technical university in Austria with close to 30K active students. The Faculty of Informatics, with over 5K students, is the second largest in the university with an annual intake of 580 students. We offer five Bachelor programs with foci on visual and human-centered computing, medical informatics, software and information engineering, computer engineering, and business informatics. There is substantial overlap between these in foundational courses, particularly within the first semesters, covering programming, mathematics, logic, algorithms and software engineering. As the background of our students varies, depending on the type of school they attended, these foundational courses establish a common ground and basic knowledge to be built on. Ways of Thinking in Informatics became one of the compulsory courses for first-year students of all programs. This means an annual cohort of 700–1000 students taking this course every fall as additional students from other studies register for our course and some are repeating the course.

The faculty decided to introduce this course as an orientation and to highlight the diversity and potential of CS in a rapidly changing world. We were inspired by UC Berkeley’s introductory course “The Beauty and Joy of Computing,”d which was one of a series of pilot courses that aimed to teach CS’s big ideas and the most important computational thinking practices.20 However, we also felt the focus on computational thinking maybe is only part of a bigger picture, which is how we set out to build a curriculum that emphasized the diversity of thinking styles. Importantly, we also wanted to follow our university’s leitmotiv “Technik für Menschen” (Technology for people) and situate these thinking styles within the context of society.

The need for including aspects of societal impacts and ethics into CS curricula was laced into the ACM/IEEE CS Curriculum 27 years ago.22 However, as Goldweber et al. note, the uptake and implementation of such themes in the CS curriculum has been slow. In their survey, they point out that while most institutions teach relevant topics, most narrowly focus on ethics or computing history and teach them relatively late and detached from other topics.4 Considering the recent surge in relevant courses being taught at many universities,e this may be slowly changing in response to the public discourse around societal impacts of digital technology.

However, Ways of Thinking does not aim to be a course about societal aspects of CS. Rather, we argue CS is inherently social and no social aspects can be meaningfully separated from CS. Consequently, we teach very fundamental concepts such as abstraction, cryptography or complexity theory alongside and interwoven with algorithmic bias, the historical role of women in programming, or questions of privacy. This resonates with Skirpan et al., who recently argued that ethics education in CS must be continuous, in-situ, and perspectival.19 In other words, talking about ethics must be part of talking about CS, which in turn requires the ability to take multiple perspectives on computing problems.

Back to Top

Ways of Thinking

The key premise of the course is to enable students to apply different lenses on problems of CS, situated in the world. Each such lens, or way of thinking, frames these problems differently, provides different theoretical foundations, and brings with it a unique orientation for questions and methods through which they can be explored. The sequence of Ways of Thinking is designed to be semi-historical and somewhat follows a logic increasing complexity. However, we emphasize that these ways of thinking are neither qualitatively ranked, nor mutually exclusive. In fact, the final assignment to students asks them to analyze one given context through multiple lenses with the aim to reveal the benefits of applying different ways of thinking at the same time.

We also acknowledge that the range of thinking we cover in this course is neither complete nor the only possible way of categorizing the perspectives one could take. In fact, we would encourage educators in the field to develop other ways of organizing such a course that teaches perspective-taking as a prerequisite for becoming a reflective practitioner or researcher. Based on initial feedback and on our experience teaching the course, we believe that our choices have been effective in this respect.


The aim [of this course] is to plant the seed of critical reflection and equip students with the intellectual tools to see everything they hear subsequently as part of something bigger.


Here, we walk through 10 different ways of thinking and have included three cross-sectional topics that are interwoven with them. We also provide brief accounts of all chapters of the course.f

  • Pre-scientific thinking. One of the initial ideas was to make a course that can be understood as an “applied” philosophy of science lecture, suitable for first semester students. In order to understand the enormous changes brought about by the scientific revolution, we start with a brief introduction to alchemy as an example for prescientific thinking. We show that one of the key differences between alchemy and science was openness, or more specifically, the lack thereof. Alchemy was based on secrets, hermeticism, and isolation. One of the key insights enabling the scientific revolution was the realization that open exchange and critical discourse should replace the secrecy and isolation of alchemy. We also discuss the interesting parallel that academic patenting and privately funded research, especially in informatics, has recently increased the need for secrecy, with unknown side effects, for example, in terms of accountability and knowledge production.
  • Scientific thinking. The scientific revolution was a fundamental shift that empowered people to know for themselves, independent of the doctrine sanctioned by the ruling elite or the church. At least in principle, the early modern period postulated that knowledge could be reproduced and validated by anyone following the scientific method. We discuss early experiments, such as Galileo dropping balls from the inclined tower of Pisa as well as classic experiments in CS, such as Fitts’ law, to show how these produced widely accepted knowledge of the world. Historically, the “Age of Reason” or Enlightenment led to major shifts in Western society that in parallel became the source for the modern, technological optimism still with us today (Whatever the problem, there is an app for that). We discuss early utopias and dystopias, such as the 1920s film Metropolis and Orwell’s 1984, connecting them to current narratives around social robots, big data surveillance, or how gender roles are inscribed in visions.

Subsequently, we introduce the work by Kuhn8 on scientific revolutions. As an example for the notion of paradigm shifts, we discuss the three “waves” in human-computer interaction (HCI), starting with the classic human-factors approach, leading to the cognitive science perspective, and to situated and embodied HCI.6 This leads us to the main ontological and epistemological positions of (post-) positivism, critical theory and constructivism as philosophical orientations towards science.5 Importantly, we develop a view on what doing “good science” means within these paradigms and highlight the link between one’s paradigm stance and the possible questions that could be asked about a problem.

  • Mathematical thinking. Undergraduate informatics curricula often incorporate a sizeable portion of mathematics. In most of our curricula, 25% of all first-year credit points come from math courses. Compared to high school, mathematics at the university level is less concerned with fluency in arithmetic. Instead, it requires students to understand the value of mathematics in problem solving, and the mathematical way of looking at the world. Some of the core concepts are abstraction, induction and deduction, recursion and, above all, the idea of provability.

In the typical mathematics course, the value of these concepts gets buried under an overwhelming avalanche of practical exercises and theoretical test taking. We show students the ideas behind those concepts and why they make sense in the specific perspective of mathematical thinking. For example, by understanding the difference between a proof and mere evidence, students can see the unique benefit they get from approaching problems with the toolset of mathematics. At the same time, they can see the price they have to pay when abstracting complex real-world problems full of interdependencies and inherent contradictions to come to mathematical expressions.

  • Computational thinking. In recent years, the use of computers has enabled impressive advancements in many scientific disciplines. An example often cited is the sequencing of the human genome. The specific method that enabled this breakthrough was unthinkable before computers became commonplace. Put differently, using computers to scale up mathematics creates new possibilities for solving problems in ways that were inconceivable without computers. The idea behind this perspective became known as “computational thinking.”24

In the course, we discuss examples like the one mentioned here. We stage a session of live coding where the difficult to understand solution to the Monty Hall problem18 becomes accessible not only through running a computer simulation, but more importantly by carefully reading the code itself. Following this line of argument, we explore aspects of code as knowledge representation. Starting with the cognitive developmental stages of code understanding by Lister,11 we show that code can be much more than instruction to a machine; it represents knowledge and can even be used to make an argument. Again, this offers an additional layer of meaning for students to think about code and coding, which they will be doing a lot during their studies.

  • Design thinking. The term design thinking has come to carry a very specific meaning in recent years, mostly associated with Stanford’s Hasso Plattner Institute of Design. Our interpretation differs as it relies more on contemporary design theory literature such as Bryan Lawson’s How Designers Think,9 Henrik Gedenryd’s How Designers Work3 or Bill Buxton’s Sketching User Experiences.2 In particular, we see design as an open process, representing a stark contrast to the rationalistic and deterministic process models of traditional engineering.

For many students, this way of thinking bears a particular challenge to accept and understand. On one hand, they can appreciate the value of good design from successful products on the market, with Apple being the obvious model example, for better or for worse. This creates an interest in design, insofar as they see it as a crucial element of their future work. On the other hand, to understand the consequences of the “wicked” nature of design problems16 is more difficult to embrace, as it questions the traditional problem solving strategies of informatics as well as of engineering in general. Our goal is to foster an understanding that most problems are not “given” or even defined apriori, but rather emerge from an interwoven process of problem solving and problem framing that requires a special way of thinking.

  • Lateral/creative thinking. Both the rational traditions of mathematical and computational thinking, as well as the open and sometimes subjective approaches in design thinking, need lateral or creative thinking. Creative problem solving has been seen as a central skill of engineers throughout history, even if there is no consensus on what constitutes creative thinking. As school historically leaves little room for creativity in places other than art, the expectations of our students are shaped accordingly. We try to break this association with the context of artistic practice by exploring unifying characteristics of creativity across all fields. Based on this discussion we show factors that stimulate or hinder creativity, as well as the areas of informatics where creativity needs to be given room to emerge. For example, many engineers pride themselves of a quick grasp of feasibility when presented with an idea. While this is certainly a useful skill in some situations, it also has the power to quickly shut down creative, outside-the-box thinking that allows new and novel ideas to emerge. This leads us to discuss the concept of reflective practice by Schön17 and how reflecting on and in action can help to continuously evolve the practice of students, be it in terms of their learning, their research, or within their chosen professional path.
  • Critical thinking. The value of critical thinking is undisputed, but there is a lot of discussion about how critical thinking can be taught (for example, see Willingham23). By focusing on cognitive bias and logical fallacies, we provoke an analytical approach to the matter. We challenge students to identify biases and incoherent argumentation in themselves and in their colleagues and to support each other in this process. Approaching critical thinking from this rather abstract perspective creates a segue into another phenomenon that has seen a great deal of discussion recently: algorithmic bias.13 We discuss the problems we create when we attribute objectivity to algorithms and data, implicitly suggesting that computers can come to objective decisions; but data as well as algorithms usually embed and exacerbate bias in one form or another as many popular examples demonstrate.
  • Economic thinking. Startups have become the de-facto role model for the post-academic career of many students. This chapter includes a critical discussion of the societal and economic influences of startup culture, as well as a short introduction into the vocabulary of the startup economy. For logistical reasons during the first year, this chapter was confined to this narrow aspect of economic thinking. The intention is, however, to expand this chapter to discuss business/value models and cost-benefit analysis and their relation to what software gets built and how this mirrors societal visions.
  • Responsible thinking. The computing field increasingly recognizes its responsibility within society, as technology becomes a constituent part of today’s world. To deflect this responsibility by stating “I was just the scientist” will not be good enough.10 From this central argument, we first introduce the three main positions in moral philosophy: virtue ethics, deontology, and consequentialism, and we demonstrate how ethical judgments shift when these are applied to a controversial social media study.7 We discuss the notion of values and their sources and how they relate to believes and data-driven psychological profiling that receives so much attention currently.

We then explore two main areas of moral import for future computer scientists: ethical conduct in science, and responsible research and innovation (RRI). Going through classic examples such as the Milgram experiment and the Tuskagee study, and linking back to the Nuremberg trials, we derive some fundamental principles such as informed consent, respect, fairness, or judging the balance between knowledge gain and risk to participants. Within a broader picture, we pick up the RRI framework implemented by the European Union21 to discuss central pillars for a reflective and responsible practice.

  • Criminal thinking. One of the central problems of a society steeped with technology is that every innocent little software bug potentially opens a malicious backdoor into software. During recent years, this has enabled a new class of criminal behavior. In this chapter, we try to show the many aspects of criminal creativity when looking at technology. The goal is to provoke an understanding of the importance of security and privacy by design in the sense of Bruce Schneier’s perspective. He describes security as a complex affair best characterized through an interplay of technological and psychological factors. Students learn to see that creating secure technology for real-life situations necessitates looking beyond the technology itself and consider context, people, social dynamics, etc.

Cross-sectoral topics. In addition to the main ways of thinking chapters, three cross-sectional topics are included: History of computing, computers and society, and gender and diversity in informatics. We see the history of computing as a necessary foundation in order to understand the discipline, helping students to make sense of the discourse around current trends and issues. In our presentation, we emphasize the history of thought over the history of technologies or the history personalities as, for example, discussed in the works of informatics historian Jörg Pflüger.14,15

The contents for computers and society are selected from current developments and press coverage of science, practice and politics concerning informatics. We use a weekly recurring format of the best and worst of informatics where we present the most interesting and encouraging stories, as well as scary news from scientific literature and news. The selected stories are discussed using the perspectives and concepts of the different ways of thinking covered so far. Questions of privacy, surveillance, copyright, and security are popular themes.

Additionally, areas of tension from society and technology as well as aspects of gender and diversity are interwoven whenever there is opportunity to do so. For example, in economical thinking we discuss the toxicity of the “bro” culture in startups that became evident in scandals surrounding Uber;g in critical thinking we broach the issue of the manipulation of Google’s search result sorting in the wake of the U.S. election;h in criminal thinking we discuss the (ab)use of data from social networks to target vulnerable teenagers with ads.i

As with the core chapters in this course, we aim to relate fundamental issues, principles, or theories to recent points of discussion in the general public, which in turn creates a meaningful link to the lived experiences of students.

Back to Top

Exercises and Evaluation

For most of the chapters mentioned here we provide an assignment that students work on individually or in groups and hand in online. Each assignment typically comprises a series of tasks that include formulating responses to discussion items on the basis of online research, reading scientific articles, conducting interviews, and/or doing some practical work such as designing an infographic, conceptualizing a user interface, or play a learning game. Each assignment ends with a task in which students are asked to reflect on their learning outcomes. To facilitate the assignments, we use a format we developed over the last few years (for example, see Luckner and Purgathofer12) that allows students to choose from multiple alternative exercises across each chapter, staged sequences of tasks, and double-blind peer reviewing among students as a way to learn how to offer and appreciate criticism. The evaluation of the work handed in by students individually as well as the quality of reviews they write makes up for 65% of their final grade.

The double-blind peer-reviewing aspect of their evaluation can also be seen as a constructive alignment1 with the Ways of Thinking in Informatics. One of the learning outcomes is the critical reflection of students’ own practice; they write and receive reviews that critically reflect on their own work as well as the work of other students; additionally we practice critical reflection during the lectures based on their input within the best and worst of informatics format.


Computer science is inherently social and no social aspects can be meaningfully separated from computer science.


The remaining 35% of their grade comes from the evaluation of a group work project where students analyze and discuss a speculative video about technologyj from the different perspectives offered by the course. Each member of a team of three or four students selects one of the main chapters of the course and discusses the content of the video through the chosen way of thinking. We support this by offering a number of lead questions for each chapter. The group then meets, debates commonalities and conflicts between the different perspectives, and documents the individual perspectives as well as the outcome of the discussion in a common paper. This paper is handed in, graded, and discussed with a tutor in a brief meeting.

Slightly more than three quarters of the students successfully completed the course. Of those 23% who failed (193 of 845), all dropped out during the semester and did not complete all challenges. While the formal course evaluation survey has not drawn many responses,k the final challenge included a task that probed for students’ overall experience and reflections. Alongside with informal feedback in the classroom, these painted a rather positive picture of the course’s reception.

Back to Top

Discussion and Reflection

One of the goals we pursue with this course is to offer students tools and structures to help them make sense of the rest of their studies. Based on a largely constructivist learning theory, we believe that what you learn is to a great extent determined by the diverse and holistic ways you are enabled to think about a subject matter. Quotes such as these suggest this was on offer:

It gave me a good overview and served as a reminder to critically engage with future content in my studies. (Final reflections, translated)

By seeing larger ordering principles, students are invited to build cognitive equivalents of shelves or drawers for future knowledge to be organized by. For example, by exposing the inherent meaning of some mathematical terminology, we offer a new layer of meaning for students to organize what they learn in their mathematics courses. If they can appreciate the special nature of the mathematical proof, they can understand its value in the implementation of dependent systems.

We offer students different ways of thinking in informatics that can become ways to look at problems, ways to ask questions, ways to see deficits in the narrow and one-dimensional approaches we often find in overspecialized subject areas. In effect, we want to enable students to develop a reflective practice that suggests taking a step back from focused learning goals in an attempt to see the bigger picture. This was also perceived as a skill being taught in this course:

Importantly, constantly being asked to reflect on content will be valuable skill for my studies and future career. (Final reflections, translated)

Such a practice affords connecting knowledge at different levels and from different perspectives that will ultimately be the key skill for future technologists, whether in research or industry, to tackle the unknown challenges of the future. This quote from one of our students speaks to this:

Initially, I could not figure out what I have learnt from this course … Later, with more reflection, the value became more apparent and with the final challenge I really realized what I can take away from it—much more than I thought. (Final reflections, translated)

Another goal of the course was to help students in understanding the rationale for our curriculum. Ways of Thinking in Informatics is part of an introductory/orientation phase of the program. By offering apriori meaning for many of the courses they visit later, we supply an opportunity to see purpose in the curriculum.


We believe that what you learn is to a great extent determined by the diverse and holistic ways you are enabled to think about a subject matter.


We ran this course in its entirety for the first time during winter semester 2017. With over 800 registered students, it has been a tremendous challenge, not only to design the content and the pedagogical approach, but also to find innovative solutions to the logistics of teaching such large numbers of students. We can confidently say this experiment has been a success as evidenced by the largely positive feedback we received from students. What the longer-term impact is—that is, the ways in which we enabled students to think differently about what they will learn in the remainder of their studies—remains to be seen, but we are inspired by the students’ engagement with this course, and are hopeful that it has created a new quality of foundations to their studies.

As computer scientists and educators, we also are humbled to be given the opportunity to plant this seed in so many students at a crucial juncture of their development—at the start of their studies. While the task to teach a new introductory course in informatics to hundreds of students hardly ever draws many volunteers among a faculty, our experience was that it results in no small gratification to have made a, maybe small, but significant difference in shaping what so many future technologists see as their role in the world.

Back to Top

Back to Top

Back to Top

    1. Biggs, J. Enhancing teaching through constructive alignment. Higher Education 32, 3 (1996), 347–364.

    2. Buxton, B. Sketching User Experiences: Getting the Design Right and the Right Design. Morgan Kaufmann, 2007, ISBN 978-0123740373.

    3. Gedenryd, H. How designers work–Making sense of authentic cognitive activities. Ph.D. thesis. Lund University, 1998.

    4. Goldweber, M. et al. Enhancing the social issues components in our computing curriculum: Computing for the social good. In Proceedings of the 2010 ITiCSE Working Group Reports. ACM, New York, NY, 2010, 117–133, ISBN 978-1-4503-0677-5.

    5. Guba, E.G. and Lincoln, Y.S. Competing paradigms in qualitative research. Handbook of Qualitative Research. N.K. Denzin and Y.S. Lincoln, Eds. Sage Publications, London, U.K., 1994, 105–117.

    6. Harrison, A., Tatar, D. and Sengers, P. The three paradigms of HCI. In Proceedings of alt.chi. ACM SIGCHI, 2007.

    7. Kramer, A.D.I., Guillory, J.E. and Hancock, J.T. Experimental evidence of massive-scale emotional contagion through social networks. In Proceedings of the National Academy of Sciences 111, 24 (June 17, 2014), 8788–8790, ISSN 0027-8424.

    8. Kuhn, T.S. The Structure of Scientific Revolutions. 2nd Edition. University of Chicago Press, 1970, ISBN 0-226-45803-2.

    9. Lawson, B. How Designers Think. Routledge, 2005. ISBN 978-0750660778.

    10. Light, A. et al. Special topic: Taking action in a changing world. Interactions 25, 1 (Dec. 2017), 34–45, DOI 10.1145/3169128.

    11. Lister, R. Toward a developmental epistemology of computer programming. In Proceedings of the 11th Workshop in Primary and Secondary Computing Education (Münster, Germany, 2016), DOI: 10.1145/2978249.2978251.

    12. Luckner, N. and Purgathofer, P. Exploring the use of peer review in large university courses. IxD&A 25 (2015), 21–38.

    13. Nissenbaum, H. How computer systems embody values. Computer 34, 3 (2001), 120–119, DOI 10.1109/2.910905.

    14. Pflüger, J. Konversation, manipulation, delegation: Zur ideengeschichte der interaktivität. Geschichten der Informatik. H.D. Hellige, Ed. Springer, Berlin, Heidelberg, 2004; https://doi.org/10.1007/978-3-642-18631-8_15.

    15. Pflüger, J. Writing, building, growing: Leitvorstellungen der Programmiergeschichte. Geschichten der Informatik. H.D. Hellige, Ed. Springer, Berlin, Heidelberg, 2004; https://doi.org/10.1007/978-3-642-18631-8_12.

    16. Rittel, H.W.J. and Webber, M.M. Dilemmas in a general theory of planning. Policy Sciences 4, 2 (1973), 155–169, DOI: 10.1007/BF01405730.

    17. Schön, D.A. The Reflective Practitioner: How Professionals Think in Action. Basic Books, New York, 1983.

    18. Selvin, S. A problem in probability (letter to the editor). American Statistician 29, 1 (1975), 67–71.

    19. Skirpan, M. et al. Ethics education in context: A case study of novel ethics activities for the CS classroom. In Proceedings of the 49th ACM Technical Symposium on Computer Science Education. ACM, New York, NY, 2018, 940–945, DOI: 10.1145/3159450.3159573.

    20. Snyder, L. et al. The first five computer science principles pilots: Summary and comparisons. ACM Inroads 3, 2 (2012).

    21. Stilgoe, J., Owen, R. and Macnaghten, P. Developing a framework for responsible innovation. Research Policy 42, 9 (Nov. 2013), 1568–1580, DOI 10.1016/j.respol.2013.05.008.

    22. Tucker, A.B. Ed. Computing curricula 1991. Commun. ACM 34, 6 (June 1991), 68–84; DOI 10.1145/103701.103710.

    23. Willingham, D. Critical thinking: Why is it so hard to teach. American Federation of Teachers 31 (2007), 8–19; https://doi.org/10.3200/AEPR.109.4.21-32.

    24. Wing, J.M. Computational thinking. Commun. ACM 49, 3 (Mar. 2006), 33–35, DOI 10.1145/1118178.1118215.

Join the Discussion (0)

Become a Member or Sign In to Post a Comment

The Latest from CACM

Shape the Future of Computing

ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved.

Get Involved

Communications of the ACM (CACM) is now a fully Open Access publication.

By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer.

Learn More