I was digging through some old documents on my main machine and came across a little extra credit submission I did while I was doing my C.S. degree.
The question in class asked if a Top-Down or Bottom-Up approach is more productive in the C.S. education world.
I thought I’d share:
The approach we took in this class seems to be something that a non-Computer Science major would take. Everyone that goes to college will be using a computer in some form or another. The extent of their computer use will most likely be dependent on how they grew up, where they grew up and what they are studying. For example, a student in Farm Studies will still use a computer to write papers, but her or she would not be using it as extensively as say a Biology major that has some analysis program to utilize. This brings me to myself and Computer Science students. We obviously use computers and we learn how they work, so we use them inherently more than any other major in college. But, this is a misconception, most of our classes are actually about how computers work; the fundamental science. We could learn about this stuff without even initializing an operating system. We must know how binary works, then how circuits bring them together, then how that code utilizes these circuits by means of manipulating the hardware. It makes sense to learn this bottom-up approach if we had more time on our hands. For me, I learned how computers work by going back and forth between these two approaches without even knowing these approaches existed. I essentially looked at them separately. I would watch YouTube videos on how electricity worked, how software code worked, how binary worked, learn about different OS code; then over time I have developed an understanding of abstraction in the computer model. If it was up to me and had no prior knowledge, I’d use the top-down approach and think this will be more prevalent in the future.
If a kid is interested in computer science and wants to enroll in a computer science program at College X, then we must assume that he or she only knows how to use the computer. [I will be using “he” and I am still implying a girl as well] He might not know anything about binary. He might not know what programming language his operating system uses. So I think that a top-down approach would work out better for those kids with the minimum CS knowledge. If we begin by taking apart programs that he is familiar with at a user level, then he can dissect them. “Oh…so that’s how that works!” Similar to a medical student learning about anatomy. They don’t learn about the chemical make-up of a red blood cell first. They might, I have no idea, but to me they wouldn’t. They’d first look at the body as a whole and learn what systems it has then take those apart. This was how my high school health class went. Then if more interest ensues from their, kids can learn how each system works and what each system is made up; in essence, going to medical school. From there they focus on a certain medical field and fix those issues (i.e. urology, podiatry, etc.)
I see the trend in computer science being this: 1) Learn as a kid to enjoy the computer, 2) take it apart and learn the overall way it works, 3) learn what each subsystem is made up, 4) learn how each subsystem talks to each other, 4) learn how each subsystem works at a code level, and 5) learn how each ingredient of the subsystem works (binary, circuits, code, etc.). With all this fundamental knowledge, we can then go on to bigger things like cloud computing architecture, system administration, software engineering, quantum computing (double majors with Physics apply here!), and so on. Computer science is going to change as the computer itself will, but the fundamentals will not, so learning the fundamentals as quickly and efficiency as possible will make the most sense. That is a reason why the top-down approach will work.