There are less people entering Computer Science in colleges and less people interested in traditional computer science practices. There's concern among adademians and one questions: "Is Computer Science Dead?"
I heard something similar from my brother-in-law about 8 years ago. At the time he was a mail admin for a large company in Texas, running multiple mail servers handling somewhere in the 50,000 account range. At the time, that stressed a lot of the mail servers out there and it was a challenging job. But he worried about advances in automation and better software and thought that sysadmins would be mostly outdated in the next 5 years.
It's 8 years later and I see DBAs and even SMS guys finding work in companies with less than 100 employees. So much for automation.
I took computer classes in high school in the early 80s and spent 2 years in a Comp Sci degree and two additional years in computer engineering and while I haven't done a lot of programming, I've written enough software and been involved with developers to know that most of the fundamentals I learned with BASIC and Pascal still apply. Some of the C techniques involved with optimizing code and being very structured in your development still apply today in .NET, Ruby on Rails, or LISP. Even LISP, which I've never used outside of a academic world, still taught me how to program better.
Because it taught me to think about computing. And algorithms, and how things are processed.
I think CompSci is still a good major, as good as any other. I also think that we should require C programming to incoming students, force them to work with memory, understand pointers, solve the Tower of Hanoi, and other things without all the benefits you get from frameworks like .NET and J2EE. I don't believe that much has changed in computer programming in 30 years. We have Procedural and OOP programming and the concepts in either can be applied to any environment. Maybe you could learn relational logic and SQL on top of that, but everything else is new ways of combining these old techniques.
All the rest is just syntax.
Follow me on Twitter: @way0utwestForum Etiquette: How to post data/code on a forum to get the best helpMy Blog: www.voiceofthedba.com
The problem with most programming courses today is scope exceeds depth. I can still write a program at machine level, but frankly that skill is presently of little real value as a core study in any course. Focusing on what tools should be learned broadens scope, but doesn't imply inherent value. Forcing anyone to learn a specific language is probably counterproductive at some level, even if the language is C.
When I think of what should be learned, I can sum it up in two words: logic & structure. Those are skills unrelated to any specific language, and almost none of the recent graduates I deal with have a significant foundation in basic logic or basic structure to be effective out of the gate. They often have a smattering of many languages, tend to be efficient in only their particular passion, and only truly effective in a narrow range. (And that isn't a reflection on the individuals, but on the fact these two fundamentals are not stressed enough, and not even the genius crowd can know everything.)
Think of coding as similar to auto repair: mechanics don't manufacture engine blocks, or any of the myriad of parts they combine to make a car run; realistically most coders today don't fashion those parts. Yes, for kernel coders and the like there are specific skill requirements, but these people breathe the code. For most general programmers, it is far better they learn to combine tools and components well, rather than carry around some ill-formed and often incorrect views about pointers and the like.
As for CS in general, it would benefit greatly if the people in the programs were the ones with the greatest latent talents. Just like all folks cannot be great doctors, not all folks can be great programmers. The standards in our industry are reflected by the standards of these programs.
Of course, I'm getting old, it's late, and I'm pretty sure I lost track of my own point many minutes ago.
I particularly agree with the statement "All the rest is just syntax". Programmers who have gone through and done justice to the basics of computers have no problem with programming well in any language or learning new technologies and tools.
But what I would like to highlight here is that I have even come across many programmers who have graduated in Computer Science but have no grasp on the fundamentals (it could be a problem with the graduation courses in my country).
I have recently realised that the bigger the organisation I have worked in, the more dissatisfied I have been with the developers. The percentage of people with their fundamentals in place is decreasing day by day.
And so the problem is not just the undermining of computer Science but also the decreasing emphasis on the quality of people that organisations hire, which of course is due to the increase in demand of IT/software workers.
The impact of this is that the more talented people are no longer attracted to this field of work because it appears that any and everyone with a crash course in a programming tool/technology can do what other computer science graduates are also doing.
I can totally relate to this feeling as I am increasingly thinking of changing my field of work owing to my frustration with people around me.
Computer Science isn't dead, it just needs to evolve - like the rest of the programming world has already.
At university, I was taught the theory on how to develop software, with many different languages used purely as examples. In my opinion, that's the way we should be going.
I recently had a discussion with my son who was going through doubts about his degree course (Entertainment Technology) and felt it did not relate to the real world. I explained that degree courses are to show your ability to learn the theory and are a necessary ticket to the world of practical work.
My own computer science course some thirty years ago fitted this model with focus on such gems as Turing machines, AI and simulation, none of which I have directly used again. However the indirect benefits are there every day - an ability to switch between languages readily and design and develop using basic concepts amongst others.
This is a good question and an interesting discussion, but I think it might possibly be too limited in scope. If you step back and look at all fields, it seems there is a reduction in the number of thinkers in any field. Most people today appear to be fine with just learning how to do something so that they get the job done. Very few people care anymore about doing something the best or most efficient way. So now we have employers who have this mindset who hire staff with the same mindset.
To further this problem, educators find it difficult to identify objective ways of testing the ability to think through problems. For the most part, our educational system is built around providing a correct answer by following the correct method and thought pattern. This doesn't really teach anyone how to think, so instead of really learning how to think through problems, students are learning how to think through the problem they need to answer for the class they are in and stop there.
So until employers start caring and looking for people who think well and educators figure out ways to teach their students to think through problems and not just recite previously learned thoughts, we will continue to see degree programs, including computer science appear to take a downward turn.
I don't think CS is dead as a major, I do think since the dotcom bubble burst years ago the field doesn't attract as many people since the crazy megabucks aren't here anymore. When I was a student 10 years ago I knew a few people who admitted the only reason they were in the major was to make money. They didn't like being in the computer lab late at night like the rest of us, found programming dull and boring, etc. Once these people realize the kind of work involved with computer science they eventually bolt.
I work at a university and I don't notice any decrease in the number of people in the major. There are still plenty of programming jobs around my area that pay quite well too. Maybe the situation's different for DBAs and system administrators though, I only focus on programming jobs.
Computer Science isn't dead, it isn't even sick. It is growing and expanding and finding new areas to invade. With Gates and others trying to put more and more computer technology in everything from phones to pets, from TV to your coffee machine, and probably soon to be in your food and drink, the trend to automate will continue. The field will expand.
News? Over 30 years back we were told that computer programming would soon be solved and there would be no need for programmers. The promise and the silver bullet is not here yet and are not in development. We have not been put out of business yet and no one will do it soon.
Let me reduce this to a little pseudocode:
Ai = Pi + N + Sky;
string silverBullet = "";
selfDevelopingProgram stupidIdea = new Wild.eyed.dream();
self.Maintaining.System.Code bogus = old wishful.thinking.gone.to(seed);
Have a great day. This is kind of fun.
This is exactly the trouble that i've observed in the last 10 years. lots of so called developers are not from formal training which for my opinion must include those CS subjects such as logic, algorithm, programming language, basic computing maths.
too bad, the market demand for programmers badly, and the managers are looking for tool specific skill set, such as vb.net c#, asp.net. but not demanding for good problem solver. I've seen university graduates who cannot program with vb but have very good logic and design. it takes them a few weeks to learn and program vb. on the other hand, those graduate with 2 years diploma or even some 6 month cram course (MCSD), they can program in vb but with very bad logic and even cannot use the if then else effectively.
I guess the training in CS is very valuable, one thing that i'd comment on is that some professor stand very strong on using the C,C++ or Java, linux. and try to exclude the microsoft tools. That is something should be changed, the tools in market demand should be used so that the university graduate will have the adv edge.
finally, an example... CS training is to train the thinker designer of a table, those "instant" developer training is to train not even a carpenter but a labor who can use very advanced new tool to build a table. these skilled labor may not necessary understand why a table has 4 legs.