Computer Science Education 06 February, 2013
Mr. John P Cole, Senior Lecturer, Computer Science Department, UT Dallas, led the weekly discussion on 6th February 2013 with his talk on ” Computer Science Education”
Computer Science is hard: The common perception among students is Computer science curriculam is difficult, but programming is easy. It is a fact that the computer Science- the in-depth understanding of computers from logic gates to the highest levels of abstraction- is not easy. This is the reason why we lose a lot of programmers after one year of programming.
Computer Scientist as opposed to a programmer is distinguished by three things:
- An understanding of data structures, not just at the level of using them, but implementing them.
- An understanding of automata theory
- An understanding of the analysis of algorithms
Some of the Problems in Computer Science Education
a) Students are not taught to value scarce computing resources
b) Students do not work together, while in the real world they do
c) Students understand high level concepts such as binary trees without knowing how they work.
d) Students lack the mathematical background
How do we Start Computer Science Education?
Computer Science Education should start at the lowest level of Computer Organization. Students should be taught binary arithmetic, components of a computer and primitive operations such as shifting.
The stored Program
The crucial concept from John Von Neumann was storing the program as data. Many people argue that computer Science students need not study this. However, for an introductory level course, the students should understand the instructions, the idea of a register model and addressing modes.
The First assembly language that the speaker learnt was MIX- the language developed by Donald Kuth for his art of Computer Programming series. It is easy to learn, has no GUI component and illustrates the concepts without needless complexity.
There are also various microcontrollers such as Raspberry Pi board, the PIC processor and the native assembly language of primary computers such as x86 or x64. According to the speaker, it is also very important that students should be processor independent.
C was originally developed as a high level assembly language. It is an easy compiler to write. Students can be shown the correspondence between C statements and machine instructions.
Advantages of C Programming
- Data Structures and memory organization are much closer to the programmer
- When you introduce the ideas of recursion and dynamic memory allocation, students can see what is really happening.
- Students are closer to the operating system, especially if you use Linux, Unix etc.
Working in Groups
Working in groups in school is generally discouraged, but in the real world programmers generally work in teams. In a school project, it is easier to get the good programmers to do most of the work, but not in the industry. Another problem of school groups is conflicting schedules and physical separation.
Study existing systems
It is difficult to write a code without ever seeing a good code. Even studying a poor code as long as you understand why it is poor, can be useful. Instructors can dissect a program or help students elucidate its architecture in the class.
- CS programs can start at lower levels than most currently do
- Students should be encouraged to work in groups
- Studying existing systems can be brought into the curriculum fairly early.