Sunday, April 22, 2007

Lack of Computer Science Majors


I came across a blog from Janelle Godfrey, Technical Recruiter for Microsoft. In her blog titled "If I Could Turn Back Time: Why I Wish I had Studied Computer Science/IT/ Technology in College", she says that it is very shocking to her the fact that the number of students who will be enrolling in computer science courses is drastically decreasing, and is the lowest it has been in a number of years.


She also says, that she has received numerous emails, articles, and surveys sent by employees confirming the above. Many Microsoft employees have also informed her that they have received emails from their colleges stating that there is a tremendous decline in computer science majors within their alma maters.

The blog has a number of interesting comments posted. I browsed through most of the replies and to me it seems there is quite a lot of myth in those replies.


I am listing them as below and will try to shed some light on each.


1) Outsourcing will lead to less jobs for Computer Scientists
This perhaps is the greatest irony. The USA has an immigration policy that limits the number of foreign skilled workers, which in turn leads to outsourcing. The fact that the limit of 65,000 H1-B visa ran out the first day itself, reflects the kind of demand that exists in this country for Computer Scientists. And I believe such restrictive policies would only result in Americans loosing these high tech jobs.

e.g. If there are 10 people needed for a project and you found 5 qualified and willing Americans and you could hire the other 5 on visas you would keep the project in US but if you didn't have the visas you would send the entire project abroad and fire the 5 Americans you did find.


2) Technology is fast-changing, while the Computer Science curriculum is highly outdated.
I do believe that technology is fast changing, but curriculum for Computer Science aims at developing strong foundations, which will not change for a very very long time. Agreed that one needs to accept self-study and has to constantly updates ones skills, but Computer Science education only makes it easier to learn new things. If you have a strong base, building on it becomes much more easier.


3) Many famous and rich people are drop-outs. They do not necessarily have a Computer Science degree.
I can understand such beliefs. Who doesn't know famous drop-outs such as Bill Gates or Steve Jobs or for that matter even Larry Page and Sergey Brin who have suspended their phd programme temporarily. I can only say that such phenomena happens to few people.


4) Computer Science education or profession involves long hours of programming, is very intensive and no social or family life
True that the program is quite intensive as compared to other majors. Also, true is the fact that it involves long hours of programming infront of computers. But that is not the complete picture. We do make time for other activities that we are fond of. And above all I guess it is very subjective.

5) Jobs available without Computer Science degree and
6) Formal Education not required.
The above beliefs are two different topics to be talked about. I personally think that people often tend to mix their views about one with the other. When people say that they do not require Computer Science education for them to get development jobs, it generally indicates that there is widespread misconception not only about what Computer Science essentially means but also about the nature of their jobs? For example, those who get a job without a degree, fail to realise that it is not a job that necessarily requires computer science skills. Computer Science is much more than just programming.

Secondly, those who do get a computer science related job, without a degree, hats off to them.

I am of the opinion that as far as you have the required Computer Science knowledge it should not be important whether he/she has acquired it through formal education or on their own.

To explain my point more clearly, let me first try to answer the following questions:

a) What Computer Science means ? And who should pursue Computer Science ?

The renowned computer scientist Edsger Dijkstra is often quoted as saying, "Computer science is no more about computers than astronomy is about telescopes."

The best current definition of the field appears in two recent articles [1,2], developed jointly by the two major professional societies in the computing discipline, the Association for Computing Machinery (ACM) and the IEEE Computer Society (IEEE-CS). These reports identified nine subject areas comprising the subject matter of the discipline, which are shown below.

Nine subject areas defining the core of computer science :

This material is quoted directly from [1, Section 5.1].

(1) Algorithms and Data Structures
This area deals with specific classes of problems and their efficient solutions. The performance characteristics of algorithms and the organization of data relative to different access requirements are major components.

(2) Architecture

Methods of organizing efficient, reliable computing systems provide a central focus of this
area. It includes implementation of processors, memory, communications, and software interfaces, as well as the design and control of large computational systems that are reliable.

(3) Artificial Intelligence and Robotics

The basic models of behavior and the building of (virtual or actual) machines to simulate
animal and human behavior are included here. Inference, deduction, pattern recognition, and knowledge representation are major components.

(4) Database and Information Retrieval
The area is concerned with the organization of information and algorithms for the efficent
access and update of stored information. The modeling of data relationships, security and protection of information in a shared environment, and the characteristics of external storage devices are included in this area.

(5) Human-Computer Communication
The efficient transfer of information between humans and machines is the central focus of this area. Graphics, human factors that affect efficient interaction, and the organization and display of information for effective utilization by humans are included.

(6) Numerical and Symbolic Computation
General methods for efficiently and accurately using computers to solve equations from
mathematical models are central to this area. The effectiveness and efficiency of various approaches to the solution of equations, and the development of high-quality mathematical software packages are important components.

(7) Operating Systems
This area deals with control mechanisms that allow multiple resources to be efficiently
coordinated during the execution of programs. Included are appropriate services of user requests, effective strategies for resource control, and effective organization to support distributed computation.

(8) Programming Languages
The fundamental questions addressed by this area involve notations for defining virtual
machines that execute algorithms, the efficient translation from high-level languages to machine codes, and the various extension mechanisms that can be provided in programming languages.

(9) Software Methodology and Engineering

The major focus of this area is the specification, design, and production of large software
systems. Principles of programming and software development, verification and validation of software, and the specification and production of software systems that are safe, secure, reliable, and dependable are of special interest.

While these areas explain the subject matter of computing, it is the way in which they are studied, bringing together elements of mathematics, science, and engineering, that defines computer science. In particular, this study is through the processes of

1. theory (or the underlying mathematical principles that apply to computing);

2. abstraction (or experimental science applied to development of algorithms and software by forming hypotheses, collecting data, modeling, designing experiments, and analyzing the results); and

3. design (the engineering of computing systems, through requirements and specifications, design and implementation, testing and analysis).

Most, if not all of the good universities, do cover all of these topics as core requirement for their Computer Science program.

So I guess one should first recognise their interests and then accordingy choose the appropriate major. People interested in computer technology related field do not necessarily have to take a Computer Science degree. There are other majors such as Computer Engineering, Software Engineering, Information Science, Information Systems, Information Technology, etc, which could be pursued after determining one's interest. The design and deployment of computers and computer systems is generally considered the province of disciplines other than Computer Science.

For example, the study of computer hardware is usually considered part of Computer Engineering, while the study of commercial computer systems and their deployment is often called Information Technology or Information Systems.

b) What kind of jobs is one looking out for ? And would Computer Science be an appropriate degree to pursue for him/her in order to achieve the same ?
If someone wants to do, is only write sql queries or simple html forms creation for some web-application, etc, then probably pursuing a Computer Science degree would be opting to go for overkill.

I personally think it is very important to distinguish what Computer Science really means. The most widespread myth that Computer Science is nothing but programming needs to be broken with. Infact designing programming languages is one of the key areas that Computer Science addresses. Any Computer Scientist who has had a formal education in such a subject definitely has the advantage to recognize the pros and cons of the so many programming languages. It also helps them to identify the suitability of a specific programming language for a particular problem. And most importantly it also imparts them the knowledge and ability of designing a new programming language if and when a need arises for a specific domain.


7) The above explanation might then lead to another question and widely believed by many as well, that there aren't enough jobs that require the above mentioned skills of the Computer Science.
Well, I am not sure as I do not have a definite answer. I used to endorsed the above view myself few years back. But as of now, I do not know the exact scenario. I for a fact know that there are challenging jobs that do give an apportunity to put the above mentioned skills to practise. But the question still remains how many of those jobs are out there ? Earlier, sometimes the thought that I won't be able to put my knowledge to practise used to get me demotivated. But as of now, when I am on the verge of completion of Masters degree, I am somehow very optimistic. I am now of the view that it is just a matter of time for things to fall in place. Perseverance is the key. Some get it early, some have to wait. The idea is to never give up. And when you enjoy your field, for once doing is as easy as saying.


Everything said, I would like to mention few advantages of formal education:

i) University is an experience.

ii) Also, the professors that teach you a certain course are experts in that field. Learning from someone talking to you in person, is very different from reading through a book.

iii) Something I find very unique in formal education atleast for the Masters degree is the theme with which any course is taught. Most of the professors have an aim to inspire atleast one student to take up research in that field. So the kind of topics, assignments, structure of the course , everything has a little research flavor attached to it.

One of the most important and often unacknowledged gain of the university education, according to me is "NETWORKING". We develop so many important contacts over the years spent in college, with roommates, with classmates, with students in some common sports team, with professors, with advisors, etc. The list gets pretty long and we often do not realise how much we gain from it.

I realised this because of an incident that took place when I was doing my co-op. I was having lunch with my boss's boss (superboss) and few colleagues. My superboss usually comes in the office once every 2 weeks. He has to constantly travel to different office locations and that translates to an air-flight to UK once every week. During the conversation one of my colleague just asked him about his future plans, and he said he wanted to go back to university but is unable to because of his schedule. I then suggested him, that he can always enroll himself in some online education or distance learning degrees/certificates. To that he said, that would not help him achieve his objective and his objective was "NETWORKING". I couldn't reply to him for few seconds. It was then I realised, that my new developed contacts were perhaps one of my important gains of my Masters education when compared to my friends who did not opt for it.



REFERENCES

[1] Tucker, Barnes, Aiken, Barker, Bruce, Cain, Conry, Engel, Epstein, Lidtke, Mulder, Rogers, Spafford, and Turner. Computing Curricula 1991: Report of the ACM/IEEE-CS Joint Curriculum Task Force, Association for Computing Machinery, Inc., December 1990.

[2] Denning, Comer, Gries, Mulder, Tucker, Turner, and Young. Computing as a Discipline. Communications of the ACM, 32(1):9-23, January 1989.


[3] Computer Science Accreditation Commission of the Computing Sciences Accreditation Board, "Criteria for Accrediting Programs In Computer Science In The United States," June 1992.

1 comment:

Anonymous said...

Well written article.