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

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.

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

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.

Similar Posts:

Tagged with:
 

6 Responses to Why can’t ‘programmers’ program?

  1. Patrick says:
    (define (fizzbuzz lb ub)
      (let fb ((n lb))
        (if (> n ub) '()
            (cons (cond
                    ((= (modulo n 15) 0) 'fizzbuzz)
                    ((= (modulo n 3) 0) 'fizz)
                    ((= (modulo n 5) 0) 'buzz)
                    (else n))
                  (fb (+ n 1))))))
  2. kenzc says:

    Actually, IS major is quite different from CS in the sense that it really covers quite a bit on the business/psychological/emotional aspect of IT. Not just the theory you know in CS2100 or whatsoever. I think the IS department is more leaning towards the biz side rather than the programming side. Even the top universities in Asia (all in HK) have their IS majors as under Business School with a BBA (and their requirements include a seemingly simple programming module only), not BComp. Can’t be blamed if at the end of the day they want to drift the IS/EC major away from the rest of Computing. Even my JC classmate who’s studying in UK now doesn’t understand why IS is offered under School of Computing in NUS. There’s so much ambiguity.

    One thing I have to agree is that if you want to make sure by the end of the day the person knows the fundamentals of programming, then recursion is a must. It is a simple concept, as long as you have understood the concept of mathematical induction, it really shouldn’t be a problem understanding. It’s a matter of how you write it out in the respective languages. I admit I still spend more time writing code in Java compared to asking me to write the code with the same purpose in Scheme.

  3. Laurence says:

    The thing is this. Our IS department is under SoC.

    Moreover, I’m very interested to know how the heck do you do project management, and all those recommendations/consulting when you are not at the forefront of technology. Your programmers can just smoke you. And your CS competitors will be able fully harness the latest technology way faster.

    My issue with IS this.

    1) How can they justify not allowing IS students from taking CS1101S? I’m very interesting in hearing their reasons. Although I suspect it’s political.

    2) To understand the business part of IT, you have to know the technology intricately to the play the game. I dare say this, any CS major worth his weight in platinum can do ANYTHING an IS major can and more. This however is limited only to those CS majors who are able to communicate effectively =P

    3) Systems and processes, programmers are damn good at it. They have developed a certain logical thought process. Critical thinking, the hackers are the best.

    4) I’ve a friend on scholarship who is going do all the IS stuff in Oracle. He got in because he was in EE, and not IS. I reckon they need someone with technical skills, social skills and common sense. The IS students are lacking the first terribly.

    5) See the recent CORS bidding that’s going on now? I don’t see the CS students complain that much. Makes you wonder, is the IS dept interested in the welfare of the students?

    6) I don’t buy your point about IS being a business thing. Have you ever seen successful CTO’s being from BBA and not knowing anything about technology?

    7) IS majors are often hired to do programming for in-house enterprise programs. And they get a shock when the IS students can’t do it. And this tarnishes the reputation of the ENTIRE SoC, including the CS majors.

  4. fzhfzh says:

    1) IS peeps can’t take CS1101S not because it’s easier, but because they will never ever need to use scheme for anything IS related, whereas, for CS peeps, there might be people doing math/bio/phys etc with cs, that will use scheme extensively.

    2) Recursive codes are not all good, it’s good for specific problems with an easy recursive solution, however, in most cases, it’s good to use iterative method if possible due to huge performance hit with using recursion.

    3) If you want to be taught step by step how to code, just go study poly or something, uni level is to teach you the concept and how to think and study, not how to code, you learn how to code on your own and it depends on the initiatives of the students. We don’t need to learn how to code, but how to think, any coding monkey from india can code better and demand 10% of the pay.

    • Laurence says:

      yes, i agree with you on the lack of use for Scheme. I personally don’t use scheme in real life.

      But, it forces the students to think. It creates better programmers because they are trained to think. Recursion may not be good in performance, but the students who are well-versed in it are often the better programmers, and end up at places like Google and IBM, because they are trained to have the mental capacity to do those stuff.

      IS/EC students should be given a choice and not be forbidden from taking it. After all, as you mentioned, we should be able to pick up languages ourselves. Therefore they can go on and learn Java themselves.

      From the link below

      But beyond the prima-facie importance of pointers and recursion, their real value is that building big systems requires the kind of mental flexibility you get from learning about them, and the mental aptitude you need to avoid being weeded out of the courses in which they are taught. Pointers and recursion require a certain ability to reason, to think in abstractions, and, most importantly, to view a problem at several levels of abstraction simultaneously. And thus, the ability to understand pointers and recursion is directly correlated with the ability to be a great programmer.

      The Perils of Java Schools

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>