Sometimes things makes me wonder why am I taking this “Computer Science” course where it is actually a course to teach you how to write programs. I actually expected something like how computer works in detail not programming in DEF language that is popular in demand in local business market. These few days some incidents or I shall say an article makes me think again whether my decision to take this course is a good decision. The article was recommended by my lecturer who lectures us in a subject/unit named “Internet Programming” which should be renamed as “Writting ASP.NET Websites With C#”. Although I find the unit not as interesting as I expected (because most of the things covered in the syllabus are covered again and again in some other subjects/units I took in previous semesters. It is still an interesting subject anyway, considering we have a better image of the .NET framework.)
I am not sure how far my lecturer likes the .NET framework because she kept emphasizing the positive points about the .NET framework. However, I do not really like the concept that a lot of things can be obtained from the framework and as a student, you will not have to know about how it behaves and what you need to concern is just the result (encapsulation?). I appreciate this feature but I do not think that as a CS student should rely on them when we do not know what happened behind the scene. Although our lecturer sometimes do explains how things work in the background but they are just too general. As a computer science student, shouldn’t we know more about that?
This evening my friend Regina brought up a topic, she suggested that our course should add an extra criteria for future appliants, that is one must be computer literate (which I think she means ability to work with Windows, like how to install softwares etc.). This is because we have classmates who faced problems in installing the Microsoft Visual Studio 2005. I still remember when she asked for my help, and I suggested her to install some software and the only response I got from her was “It is so troublesome~”. I cannot imagine if we are really learning subjects/units that really should be included in a computer science course, will they ever stay in this course any further? Of course, IMO being computer literate should not be one of the criteria to apply for this course. This is mainly because we are not in a course named “Microsoft Windows Computer Repairing”. (but sadly, most of my relatives and friends misunderstood this)
Back to the topic, what should we really learn in computer science? Before this maybe I shall write something about what I’ve learnt so far and what I will be learning later. So far, I’ve already learnt about some simple C, Visual Basic 6, simple Java, ASP.NET with C#, erm.. basically that’s all. We are going to learn VB.NET in the coming semester in “Object Oriented Programming” subject. You do not see any problem with that? I didn’t as well at first. Yes, we do learn to code in these popular languages/technologies which have a very high demand in the market but in just 14 weeks, it is impossible and insufficient for lecturers to cover each of the language/technology in depth. Of course as a student in higher education institution I shouldn’t expect too much from my lecturer and I’m supposed to carry out my own research but we still have to allocate our times for tutorials and assignments (and probably tests and examinations since we are studying in a country that has examination driven education system).
What can we and what should we really learn? IMHO, we should really learn something that what our course title implies. For example, how do a computer work? How do programs/processes run in the computer? and probably some low-level languages like machine code and assembly code? Why? I do not see a problem why we should not learn these as we are computer science student. Ok, probably what I need is just more research on my own since I am a college student and shouldn’t rely on my lecturer to become my source of knowledge.
After knowing how the computer works, what else shall we learn next? What about those development methodologies? SDLC, USDP and others? I find it quite important to learn these because one can develop a software in a more organized way. But Regina said something that is quite interesting, if you are the only one in the IT department and you are asked to develop a system, these methodologies are just crap because you are the only one involved in the development. Yes, it might be true, but what if you left and the new developer will have problem maintaining the system because it is not developed in proper structure and there may be no documentation provided. But unfortunately, although these subjects are being introduced, for us, we do not see the importance at least in our assignment, we are not even required to do that. As long as the program is running and has proper logic then you will score an “A”.
What is next? as the author of this article said:
The recruiters-who-use-grep, by the way, are ridiculed here, and for good reason. I have never met anyone who can do Scheme, Haskell, and C pointers who can’t pick up Java in two days, and create better Java code than people with five years of experience in Java, but try explaining that to the average HR drone.
So what is the point learning so many programming languages? And it is not like we are learning the language in depth in college. We’re just like students who attend classes to become a “development machine” to be functional for years. Then when the skills we equiped get outdated in future, we will gotta choose whether to update ourselves to the new technology/language/platform/whatever or just stop working in this area. This is what my friend from “Information System Engineering” said in his blog post :
My brother made me realize some time ago that in college, theory is of paramount importance, technology isn’t. Hence, networking and “object-oriented analysis and design” is on my top priority now. Seriously, what good does knowledge of Flash and ASP.Net do for us? The answer is probably: nothing. 2 years down the road, everything would change.. Microsoft is releasing Vista with WPF (Windows Presentation Foundation) come this year-end, there would probably be entirely new controls in the next ASP.Net.. so what have I learned from these 2 assignments?? Probably nothing..
So is emphasizing in these high-level programming language a wise decision? I do not know, no doubt the amount of student passing increased and this generates more income for the college. But besides that, what do we learn? I feel surprised after finding out a subject/unit called “Data Structure” got taken out and replaced by “Introduction to Object Oriented Programming” which actually should be renamed into “Introductory Programming With Java”. I do not even know that will I learn in that subject/unit, anyone can enlighten me a bit?
Should I learn this? 6.001 – Structure and Interpretation of Computer Programs
Fall 2005. Probably during the coming holiday. (thanks for the link, Jon)
What I meant for computer literate is: the ability to operate their computers (e.g. installing softwares, won’t feel very troublesome to use certain technologies such as emails etc). Don’t you think it’s a shame to tell people that they’re computer science students but prefer not to use a computer as a tool in everyday’s life?