I came across an interesting article called Should Java be banned from schools?.
The most interesting part were the comments. One of them rang a bell:
Also, no CS study is complete without some messing with machine level instructions, compilers & interpreters, algorithms, etc. Forget about learning a language: a good CS student must be able to design and build language + tool set from scratch. Here’s a CPU manual, go implement language foobar for it. Don’t come back until its compiler can bootstrap itself.
The problem is that many so-called universities don’t teach all this stuff. These second rate universities are popping up all over the world. They’re called universities but they are just processing mediocre programmers into cubicle occupying, php/Java/VB hacking zombies.
There is a lot of truth in that. Discuss.
PS: My favourite anti-Java article is The Perils of Java Schools – mind you, I like (and teach) Java…
PPS: The above image shown Emacs, my current Erlang IDE. I teach Erlang to my Concurrent Programming & Parallel Processing students.
ashesh says
Indeed, I find that there is a lot of truth in this comment. If I were to do Computer Sc. & Eng. at UoM, definitely I would had in my mind to be able to do or at least try experimenting with designing and building language + tool set from scratch at the end of the 3 year-course.
But the question is that: is the university really training you to become a cubicle occupying programmer?
I think that Avinash wants to produce Hard-Core Computer Scientists at the end of the course and he loves teaching Java and Erlang but these CSE students, do they have the ability to implement language foobar for it and don’t come back until its compiler can bootstrap itself?
I think Linus was trained at a Uni where hard-core Computer scientists are produced. That’s why perhaps while re-designing the MINIX kernel, he came up with his LINUX at his final year at uni.
Is it possible for a CSE student like that to crop up from UoM, say having pioneered a new stuff in the computing field?
avinash says
In my opinion, a Computer Science department should neither produce (as you put it) “Hard-Core Computer Scientists” nor “Soft-Core Computer Scientists” but rather (and simply) “Computer Scientists”.
ACM for instance has recommendations on what a Computer Science undergraduate degree should offer. Page 17 is a summary of the core topics as well as electives. Page 44 is a list of advanced courses by areas. Naturally, this recommendation is not perfect but is representative of what many universities offer.
avinash says
A quote from another comment:
Priceless!
$3|v3n says
that’s exactly what i used to always believe in (not the previous comment but i meant the main thread).
When someone goes to a univ to become a computer scientist or eng, he must be able to build a computer from scratch…(not hardware.. coz that is left for the electronics and electrical dudes).
And so do i believe that a mechanical engineer must be able to let’s say.. build a car out from scratch before he can claim he is a mechanical engineer or scientist. (i won’t go in the difference between engineering and science).
But as far as java being banned in schools.. that would be too drastic… because a computer scientist or eng must not get pwned by an IT dude specially when it is about something common about computers… (which happens many times :p to those lovely kids who gets out of univ.. hahahaha)
I had been seeing docs about university students in some countries trying to put themselves into the environment of those times when e.g XYZ was invented.. they try to get the raw materials the way those days i was available.. and build XYZ just like its inventor created it.
+$3|v3n
ames says
“A university degree should teach you how to think not what to think.”
Priceless indeed.
Personal Experience
During 3.5 years, I learnt to master – Java, VB.NET (and GDI+), ASP.NET, AMP. (On my own, I learnt PERL, python and Ruby but sadly, I’ve not mastered Ruby and Python to the level that I always wanted to appreciate).
What I never learnt: Assembly, C, C++, C#, and functional lang.
I was never coerced into using a specific methodology. Assignments and Projects were not done in groups and were open (use whatever library or language you want to (unless specified) but all students had to get the job done).
The tutors showed up only to teach us how to approach certain problems. We did most of the work based on a 30 minute lecture (though the class was usually set for 3 hours).
I don’t consider myself as a computer scientist because I never mastered lower languages. Heck, I do believe that though my mates and I learnt how to reason, we were odd (for we did java extensively (hey, not just swing. a few weeks ago, i was talking to an UOM student who told me all he knew was SWING because he was working in a group. I was stunned) but never even covered c. and frankly, java WAS EASY!
Back to your post -> But the question is that: is the university really training you to become a cubicle occupying programmer?
No, I don’t think so. Well, I don’t know how UOM works. However, there is lack of jobs in Mauritius – and it’s sad that Accenture pretty much coerce the way students think. I attended the Infotech conference, and I was angry @ the guy. He wishes students to learn according to the needs of enterprises. But on the other hand, it is up to the new guys @ work, to change the way work is done. For e.g – one can advocate open source (bore the boss to death till the systems changes lol).
And yes – a computer science faculty should produce people who can think and devise ways to tackle problems! And there should NOT be any 3rd party enterprise dudes who show up to disrupt the creation of Computer Scientists.
Jeannine says
Bonsoir monsieur.
Je fais mon cours a SNIT – 2 ans IDCS et IADCS. Pendant ces deux ans, j’ai fait les modules suivants:
VB.NET – pratique – 3 projets – multimedia, mathematique, et simulation
ASP.NET – pratique – 1 projet de commerce electronique (2eme annee – CORE) et 1 projet sur les bases de donnees SQL Server pour Thespia Systems (1ere annee)
(ELECTIVE)
(1ere annee) – (ELECTIVE)
Java – 1 projet – pratique – SWING, AWT, utilisation de BluJ (ELECTIVE)
Computer Technology – theorique (1ere annee)(CORE)
Networking – 1 projet theorique sur les VPNs(ELECTIVE)
Structured Programming Languages – matiere theorique(CORE)
Business Organisation – matiere theorique(CORE)
Business COmmunication – matiere theorique (CORE)
Database Systems – matiere theorique et pratique (Core) – cela couvre aussi Oracle (incl. PLSQL)
Managing Business Projects (ELECTIVE) – project sur le management des projets
Business System Design – matiere theorique (CORE)
Business System Analysis – matiere theorique (CORE)
Presentation Website Design – ELECTIVE (xhtml + javascripting + css + actionscripting)
Enterprise Networking – CORE (matiere theorique)
Maintenant, j’entame ma troisieme annee dans l’informatique a l’universite de Greenwish et a part des research papers, j’ai 2 projets – Java (Corba et Jini) et 1 projet de mobile commerce.
Je sais que c’est different de l’universite de Maurice mais on apprend le comment des choses. C’est tres ouvert – on a le choix de la methode.
Je ne pense pas que SNIT, NCC ou greenwish veulent me tourner en bourique dans la ‘chambrette’ d’une entreprise. Les modules sont bien adaptes dans une telle facon que tous les eleves apprennent les choses importantes qui puissent etre utilisees.
Aussi, les eleves peuvent apprendre languages comme c# pour leur projets. Le choix des matieres est la.
En temps qu’eleve, je suis d’accord sur “A university degree should teach you how to think not what to think.” et j’espere que mes amis de l’universite de Maurice font l’experience de cela.
Bonne nuit
Jeannine ST Medar
ames says
@ Jeannine -> your post was made on the December 6th, 2007 at 12:27. Why “bonsoir”? Are you in a different time zone? Just wondering.
It’s an offtopic question. What is NCC?
$3|v3n says
i don’t agree with this : A university degree should teach you how to think not what to think.”
Because i believe in:
A university degree should suggest you how to think not what to think or how to think.
Because… the purpose of a university is to share knowledge and to be open minded.. one thing can be done one way, the way most people would do it, or a completely different way which is completely different.
Because the way someone thinks is inborn and can’t be changed, you are born with it, that’s makes someone’s thought.. unique. I don’t intend to change my ways of thinking just coz i went to a university, sure enough, i might take certain of those suggestions and think in this or that way.. if i feel at ease thinking in those ways.
$3|v3n says
Hmm .. when i said..i don’t agree with a university degree should teach you how to think and not what to think..
I DIDN’T MEANT THAT I BELIEVE IN “A university degree should teach you what to think and now how to think”
I wanted to say.. i believe in A university degree should suggest you how to think not what to think or how to think.
Suggest as in… the freedom of expression and thoughts, i.e i learn how univ want us to think, but i am the ultimate person on which the choice resides about how i want to think, because i believe sharing of thoughts is bi directional.
+$3|v3n
ames says
Sir, were you inspired by Kayne West when you made this post?
I’m listening to Good Morning (song) from Kayne West and wow – it’s so true and is related to this post in a way.
Check out the lyrics of the song here:
http://artists.letssingit.com/kanye-west-lyrics-good-morning-intro-19q9q1g
Maybe it’s a subliminal message or an insinuation: “But you graduate when you make it up outta the streets”
ames says
Check this out: http://gotw.ca/publications/concurrency-ddj.htm
Extract:
If you haven’t done so already, now is the time to take a hard look at the design of your application, determine what operations are CPU-sensitive now or are likely to become so soon, and identify how those places could benefit from concurrency. Now is also the time for you and your team to grok concurrent programming’s requirements, pitfalls, styles, and idioms.
A few rare classes of applications are naturally parallelizable, but most aren’t. Even when you know exactly where you’re CPU-bound, you may well find it difficult to figure out how to parallelize those operations; all the most reason to start thinking about it now. Implicitly parallelizing compilers can help a little, but don’t expect much; they can’t do nearly as good a job of parallelizing your sequential program as you could do by turning it into an explicitly parallel and threaded version.
Thanks to continued cache growth and probably a few more incremental straight-line control flow optimizations, the free lunch will continue a little while longer; but starting today the buffet will only be serving that one entrée and that one dessert. The filet mignon of throughput gains is still on the menu, but now it costs extra—extra development effort, extra code complexity, and extra testing effort. The good news is that for many classes of applications the extra effort will be worthwhile, because concurrency will let them fully exploit the continuing exponential gains in processor throughput.
From a post @ /.
Presentation on concurrency and erlang: http://www.algorithm.com.au/downloads/talks/Concurrency-and-Erlang-LCA2007-andrep.pdf
Video of presentation: http://mirror.linux.org.au/pub/linux.conf.au/2007/video/friday/252.ogg
———
@Avinash: Again thanks :) I’m enjoying erl :)
Olivier says
A programming language is a tool. Let’s pretend they are hammers.
Java is a sophisticated hammer sporting many bells and whistles. So many in fact, that one does not require hammer mastery to wield and use decently.
Java is great at preventing workplace accidents and dented products. It is the uber hammer to give to a factory line of 5,000 workers. The disaster threshold is higher, it requires less vigilance and repetition. As a side effect, it makes the barrier to entry in terms of skills required lower as well.
However there are many things that when using this kind of tool, especially when learning the craft, are easy to gloss over, e.g. the fundamentals of making a hammer, hammer theory, tool theory, etc.
Computer scientists are not trained to use tools; computer scientists are trained to know how to conceptualize and almost incidentally be able to produce a tool of somewhat advanced sophistication, based on the knowledge of basic tool making.
Computer scientists should not be trained on how to use a vendor’s specific tool, but rather on how to make one. The knowledge of making one requires the knowledge of how to use one.
Good developers often have a computer science or related background, and many enjoy using Java. The power afforded by Java gets annoyances out of the way, reduces the number of repetitive and time consuming tasks and allows a user to be more focussed on solving a problem.
Both practical and theoretical knowledge are very important. As resources are finite, there is only so much of both that can be trained into an individual.
The partitioning of knowledge between the two will vary for different ends; a sweat shop army of ‘low-skilled’ workers working day-in day-out may only require only mostly practical knowledge, as most of the thinking process may have been carried out prior to the implementation phase. This is typically the case for what is coined ‘software outsourcing’ these days.
More complicated problems require a more ‘skilled’ workforce, entailing more creative thinking and problem solving. ‘Theoretical’ knowledge is often a necessity.
On a side note, if I were to hire a candidate, I would pick the candidate who knows what she doesn’t know, rather than another one who only thinks she knows it all.
Olivier says
Now as an addendum, I will need to clarify my terms:
My use of the words ‘theoretical’, ‘skilled’, ‘low-skilled’, ‘software outsourcing’ need context and explaining. For the most part, I do not claim to be correct, these are only interpretations and deductions from my limited perspective on the world of today.
Def. for ‘theoretical’:
Computer science is not a science. That’s a fact if we go by the strict meaning of the word ‘science’. In no way are we using the scientific method for the vast majority of what the term Comp. Sci. is used for.
The software engineering stream of computer science, however, is the closest to be considered a science, in a similar way that psychology is considered a behavioral science. Theories and postulations in software engineering are sometimes driven by hard, cold, empirical, statistical data. Experiments are carried out using the scientific method and conclusions are deducted from their results. Should the experiment not match the expected outcome, the theory would be revised and the process iterated. The conclusions must be repeatable by an outside party and experiments be conducted in an unbiased way, as much as possible.
The core of computer science resembles mathematics, complete with proofs using the same tools used in Calculus for instance. Algorithms can be proven to be solvable, solvable under certain bounds of complexity, and can be proven to be correct.
The vast majority however is a hodge-podge of engineering and mathematics. It is arguably an application of mathematics. Functional programming is a technique that most closely resembles its pure mathematical form.
In that way, ‘theoretical’ knowledge about computer science may very well not be theoretical absolutely, but only relative to the domain of knowledge implied.
Def. for ‘skilled’ & ‘unskilled’:
By ‘skilled’, I mean to categorize the group of individuals having the above defined ‘theoretical’ knowledge and who are expected to use it on a fairly regular basis. An ‘unskilled’ individual may or may not have the said knowledge, but isn’t expected to use it. I do not mean to imply any pejorative on the term ‘unskilled’.
Def. for ‘software outsourcing’:
My experience with software outsourcing today (2007) is that most involved businesses tend to keep their more ‘skilled’ workers inside the organization and will redistribute the tasks requiring less ‘skill’ to external organizations, often located off-shore due to huge cost benefits.
In those arrangements, the ‘outsourced’ workforce is not expected to dream up a solution, but rather to merely implement it.
avinash says
Two really great comments, Olivier :-)
The sentence I quoted “A university degree should teach you how to think not what to think.” really made me understand that our approach is not good in this country.
It starts at primary level with this 4 A+ nonsense and mandatory tuitions. I am always amazed when I hear parents complaining about CPE exam questions which are “pas dans syllabus”. As if knowing the contents of a syllabus is all that is important in life…
Then we have secondary level. Where adolescents have to choose when they are about 16 among Science, Economics and “Arts”. And as soon as they have made (?) their choice, they can forget about everything else. There are two problems with that. One is the limited choice. Where is Sports? Music? The second problem is that many young Mauritians get exposed to few aspects of life (i.e. a science students does not know anything about the economy and vice-versa) and this cannot possibly produce a productive adult (or else by chance).
The third level (i.e. university) is also problematic. Students learn programming by heart for instance. Instead of “[teaching them] how to think not what to think.”, I guess (but, of course, I may be wrong), we are doing the exact inverse.
Olivier says
I agree. Studying strictly what is on a syllabus and focusing on problem solving rather than solution finding makes for very single-minded perspectives on how to tackle a challenge.
This makes for a very institutionalized and robotic formation. The result is that the work force
1) is most likely to perceive the learning process as a chore
2) is most likely to have difficulty functioning without very precise directions in moderately complicated tasks
3) is less likely to be genuinely passionate about the learning material
The emphasis of education in Mauritius is not on ‘academics’, personal development or the learning process. It is rather on ‘passing a test’.
Evaluation tools, such as examinations, tests and assignments will always be flawed. Sole emphasis on these approximate performance metrics rather than the ongoing process is misguided.