A computer programming course should be a general education requirement
Announcements September 20th. 2009, 7:21amI have been teaching computer programming in higher education since I started my teaching career in 2003. I have taught a wide-variety of computer programming courses ranging from introductory object-oriented programming to advanced Internet programming. I have a passion for teaching programming courses because they are among the few courses where we can truly stretch an individual’s ability to “think” both abstractly and systematically. I have come to the conclusion (yes, probably erroneous), that a computer programming course should be a general education course for all undergraduate majors. By general education, I mean it just be just like a required math, social science, natural or physical science, or English course.
Here are my ten reasons why computer programming courses should be a general education requirement:
1. I have found that most students truly do not understand what a language is in terms of syntax and semantics. Though I teach programming languages, they are built with similar rules (grammars) as a natural language or the language of mathematics. If students are put in an environment where they have to learn to speak a rudimentary language (programming language), it better informs their understanding of what language is and isn’t.
2. A computer programming course allows me to teach applications of mathematics (especially some interesting Integer and modulus mathematics). The problem I see with traditional math courses is that they are taught in a very abstract form in which the emphasis is placed on the mechanics of, for example, simplifying equations. A computer programming course allows us to explore very useful applications of even the most simple forms of mathematics. The primary difference being students are grounded in a real-world application of the mathematics.
3. Computer programming courses require us to cover the fundamentals of logic. I get to introduce students to concepts like propositions, logical operations, Boolean algebra, truth tables, structured flowcharts, logical equivalency, and relational operations. What’s more, students are able to see applied examples of how one would use these conceptual tools to solve moderately complex problems.
4. A computer programming course forces students to be detail-oriented and think incrementally. Any student finishing a computer programming course knows that in order to successfully write a computer program, you have to be detail-oriented and pay careful attention to every statement in a program. Students learn to “slow-down” their quick minds to think about things incrementally to solve even the simplest problems.
5. While a computer programming course is detail-oriented, it also forces students to think holistically and systematically. When students are faced with a moderately complex computing problem, they must learn to break-down that problem into smaller problems. They must, for lack of a better term, learn to decompose a problem space. After they have broken down the problem into smaller pieces, they must learn to reconstruct the pieces of their solution into a functional program. This top-down and bottom-up thinking is helpful to solve any type of problem.
6. There is no question that information and communication technology (ICT) is pervasive and has influenced all disciplines, even forming new disciplines and careers for the 21st century. However, only a handful of people, in my experience, truly have enough insight into what ICT is and isn’t. These people understand the fundamentals of computing and can see that ICT is simply layers of abstraction. A compiled computer program is really just binary. An assembly language is a layer on top of binary created to abstract the binary. A 3rd generation programming language is a layer above assembly language and abstracts assembly language. ICT is just one layer of abstraction on the next.
7. Systems thinking, which has shaped and formed new disciplines in past 50-years (e.g., information systems, instructional systems, project management), is truly the basis for modeling things in a structured programming paradigm. A computer programming course allows us to explore systems thinking at its best. We are able to describe computer programs as a function of a system: input, processes, and output. Students are able to see how systems thinking can be applied to any discipline or problem space.
8. Computer programming courses allow students to have an intimate understanding of how a computer actually works and the possibilities and limitations of computer applications. Students get a good understanding about computer memory and its limitations. Students understand why some applications might freeze or why hard drives, computer chips, and processors are all described as base 2 systems. Students get a much better understanding of computers in general. This is really related to the abstraction concept.
9. Aside from the problem-solving skills that are inherent in a computer programming course, students also develop other desirable skills: trouble-shooting skills and time-management skills. Students are forced to learn how to trouble-shoot and “debug” their programs to identify compiler, run-time, and logical errors. Students develop these skills from their first programming assignment to their last. Students also learn that it is difficult to estimate how long it will take them to complete a task, and thus, forcing them to develop better time-management skills. Trouble-shooting and time-management skills are skills that everybody needs so that they can learn to solve their own problems and learn to plan their time.
10. My tenth and perhaps most important reason for why a computer programming course should be required as a general education requirement is that these courses are not easy (note 1 - 9) and develop students’ resilience. Too many of our students think life is easy and that they will not have to use their minds to solve problems. Guess what: life is not always easy, so deal with it and get with the program! In programming courses, students realize that they must put in a tremendous amount of time and effort even to solve the simplest problems. Sometimes, they make mistakes and fail at something. What do you do in this case? You get back on your feet and try again! A computer programming course shapes a students sense of resilience. I personally have learned much more from the mistakes I have made in life than when I do something correct (see certitude model in education).
So, this is my reasoning for why a computer programming course should be required of all students earning a degree. My disclaimer is that this has not been researched, tested, or theorized by me at all. This is just what I believe. I know I am completely bias, but if you are an educator outside of a technology-related (one that might teach computer programming) discipline, think about these points carefully and your interactions with your students. Are these characteristics that you would want students to exhibit?