"I am very disappointed with NUS’s SoC’s IS’s adminstration. Very.
Now, I can understand why Dr Lai Kok Fung and Dr Bernard Leong said at the AP day’s discussion that SoC is not producing real men. They are not interested in producing the next generation of IT talents. Instead what SoC, at least the IS dept seems to be interested in, is to produce the next batch of wayang experts, and hell, it’s starting to resemble SMU already.
Case in point, IS/EC majors are not allowed to take CS1101S. What the hell? So the school has decided to force all IS and EC majors to take the standard JavaSchools programming modules. Why? It’s not like CS1101S is easier than CS1010. I’ve seen A’s from CS1101(the previous version of the CS1010 route) who are unable to do recursion. Now compare to the entire CS1101S class who is able to use recursion on most problems. And by denying the students from taking up a much more challenging module, is the IS dept really interested in the interests of the students? I personally was an IS student, and thankfully, i’m out.
I still remembered, the first IS module that I took, the prof was telling us how he was going to teach us how to climb up the corporate ladder and be a good employee. Nothing about doing things worth doing or something real. That guy won the teaching excellence award. I pulled out from the module after 1 lecture.
It is very disturbing when you see a large number of your seniors being unable to code despite being in NUS SoC. And graduating without ever learning how to code. As the supposedly premier IT faculty in at least ASEAN, I think the base standard for graduation should be being able to code. And I don’t mean coding some hardcore stuff like the Extended Euclidean algorithm(we cover that in CS1101S by the way). All I’m asking for, is the students to be able to have the mental capacity to come up with a recursive solution to calculate factorial under 5 min. Or even how to implement OOP on real world problems. Actually, on hindsight, the Extended Euclidean algorithm isn’t exactly that hard.
By the way, the solution to factorial(recursive) is
function factorial($n)
{
if($n == 1)
return 1;
else
return $n * factorial($n--);
}
Typed that out in 1 min. And there are computing students who can’t do it at all.
As for the fizzbuzz question in the link above.
function fizzbuzz()
{
for($i = 1; $i<=100; $i++)
{
echo ($i%3==0?'fizz':'');
echo ($i%5==0?'buzz':'');
echo (!($i%3==0 || $i%5==0)?$i:'');
echo "\n";
}
}
These code are pretty easy to write. And both questions are certainly doable within 5 minutes, even for an average programmer. They are really
In fact, I just felt inspired to come up with a scheme version just for kicks=P
(define (factorial n)
(cond ((eq? n 1) n)
(else (* n (factorial (- n 1))))))
(define (fizzbuzz lower upper)
(cond ((< upper lower) ())
((and (eq? (remainder lower 3) 0) (eq? (remainder lower 5) 0)) (display "fizzbuzz\n") (fizzbuzz (+ lower 1) upper))
((eq? (remainder lower 3) 0) (display "fizz\n") (fizzbuzz (+ lower 1) upper))
((eq? (remainder lower 5) 0) (display "buzz\n") (fizzbuzz (+ lower 1) upper))
(else (display lower) (display "\n") (fizzbuzz (+ lower 1) upper))))
There's actually a shorter way for the scheme version for the fizzbuzz code, using if statements, but I'm more used to using cond statements.
Back to topic. Is SoC doing the right thing by restricting students from taking harder modules, and watering down the syllabus? I don't think so. In the new syllabus, database(CS2102) is no longer required. While I believe that students should not learn things only from a module, at the same time, a large majority of students require the existence of a module to learn things. Which is why database is essential. Now with database out of the picture, I can picture a few shocked employees a few years down the road when they realise the new batch of SoC graduates are unable to manage databases. I'm praying hard that they did not water down programming languages, after the demotion from a level 3 module to level 2.
And with 3 semesters to study basic programming, 1 more than previously, one wonders what the hell the administration is doing. Even in JC, we are expected to finish up to OOP within 7 months. Are they saying SoC undergrads can't do that? Yes, there have been many people saying that some people just need more time to learn, and given more time to adjust, they will be able to catch up with the rest. However, is that really the case? A paper, titled "The camel has 2 humps" claims otherwise.
The paper is a very good read. Honestly, it isn't a dry as some of the other papers we see around. I actually read the whole thing. I'll quote some of the stuff they brought up below.
The first point below is so true. We should be going for absolute standards, not relative ones.
Nowadays in the UK one has to say that they ought to fail, but because of misguided Quality Assurance procedures and the efforts of colleagues who doggedly believe in the normal curve, very many of them are mistakenly and cruelly ‘progressed’ into following courses. That process so far degrades the quality of their education and the reputation of computer science as an academic discipline as to be of burning commercial, professional and intellectual importance, but in this paper it must be by the by.
From experience it appears that there are three major semantic hurdles which trip up novice imperative programmers. In order they are:
• assignment and sequence;
• recursion / iteration;
• concurrency.
Few programmers ever reach the concurrency hurdle, which is the highest of the three, and very high indeed. Recursion is conceptually difficult, and the proper treatment of iteration is mathematically complicated. Assignment and sequence, on the other hand, hardly look as if they should be hurdles at all: storage of / remembering information and doing one thing after another are part of everyday patterns of life and thought, and you might have expected (as at first do most teachers) that students’ experience could be analogised into some kind of programming expertise. Not so: it is a real hurdle, and it comes at the very beginning of most programming courses.
And surprisingly, the way to see if a student is able to program is not that hard.
Read the following statements and tick the box next to the correct answer.
int a = 10;
int b = 20;
a = b;
The new values of a and b are:
[ ] a = 20 b = 0
[ ] a = 20 b = 20
[ ] a = 0 b = 10
[ ] a = 10 b = 10
[ ] a = 30 b = 20
[ ] a = 30 b = 0
[ ] a = 10 b = 30
[ ] a = 0 b = 30
[ ] a = 10 b = 20
[ ] a = 20 b = 10
The test results divided the students cleanly into three groups:
44% of students formed a consistent mental model of how assignment works (even if incorrect!)
39% students never formed a consistent model of how assignment works.
8% of students didn't give a damn and left the answers blank.
The main thing about this experiment is that there was no movement across the groups. And was a clear indicator if a student is able to program. I believe that the paper has shown that there are just some people who simply cannot program. And Computing faculties should start graduating students with who can."
http://blog.geeksphere.net/2010/07/24/why-cant-programmers-program/
No comments:
Post a Comment