Associate Professor
School of Computing

National University of Singapore

15 Computing Drive, COM2 Building, #03-20, S(117418)

Tel: (+65) 6516 4240 Fax: (+65) 6779 4580

Email: benleong at


Results of CS3217 (Semester 2, 2010/2011) Mid-term Survey + My Responses

The following are the results for the online survey that we did after the mid-term exam. I've also included some of my comments to the mid-term survey.

There are several reasons for this survey:

  • Timely Feedback - We cannot teach well unless we know what's going on and what students do not understand. Waiting till the end of the semester would be too late and there's nothing much that we can do. That said, I hope that students will appreciate that the lecturers are only human and it's not always possible to address all concerns and fix all problems this semester. In any case, the feedback will be taken seriously and future batches of students will benefit.

  • Allows Lecturer to Respond - This survey also presents the lecturers with a opportunity to address the concerns of the class and to clarify some issues from the perspective of the teaching staff, which is also why this particular page exists.

  • Reference for Future Batches - I am hoping that future batches of students will read this feedback before deciding whether or not to take CS3217. CS3217 is really not for everyone. It's really quite hardcore and meant for the most highly motivated to push themselves. CS3217 is not *just another* iOS programming course. 

Note: Feedback on the TAs are omitted here because of privacy reasons. I do not feel that it is right for me to put up the feedback they received on this site (not implying that they are bad.). They can choose to put up their feedback if they wish.  This is an anonymous survey. We have no idea who said what. We just know what was said. :-)

Total Number of Respondents : 39/40

Understanding Your Background

1) Essay

Why did you decide to take this module? Do you still it was the right decision?


1. I decided to take this module because I wanted to step out of my comfort zone, to give myself a challenge in order to bump up my programming skills. I felt that this module will be a good way to really level up my software engineering skills, in terms of concepts, self-motivation and determination. To be honest, I am regretting quite a little. It might be problems with my own time management, but spending the whole recess week in the programming lab every day and night, without time for other modules, is.. well. And I'm not alone.

2. I take this module to step beyond my comfort zone, so after all I could be come a better learner. This is also a chance for me to explore more about software engineering. Until now, I feel this module is really tough yet informative :), because of this I feel that my decision is right. I know more about myself, my ability and my interest, which helps me much in choosing the right direction.

3. I decided to take this module as it is challenging. I still think it was the right decision.

4. Just for fun, and for the iPad. iPad & iOs was (is) hot too. And I enjoyed it quite a lot.

5. I took this module on prof's reassurance that it could act as a replacement for CS3215, which I did not wish to take as it was very restrictive. I hope it was the right decision, and that I do not have to take CS3215 again after.

6. To learn more about good practises of software engineering, the correct way of organising complex code and how to test code in order to build robust and stable systems. I still think it was the right decision.

7. Mainly to improve my SE skill. I guess it's better now. So yes.

8. I took it to learn more software engineering.

9. I take this module because I heard that it is about SE and based on iPad platform. I like to design and develop software, and I love Apple brand. I think it will be very useful to pick up such an experience for future career. Honestly, I used to regret when I suffered the most during ps assignments. Because the workload is quite unbelievable that it took every minute of my life. But I pull it through the first half semester and now I'm just glad that I never give it up. Ben's word always echo in my mind, "what doesn't kill it makes you stronger". I've learned a lot from this module.

10. Get to use free iPad for one semester which is enticing. - Get to learn how to program on one of the hottest mobile OS which is a very practical skill. - Prestige of the module. - Take up harder programming modules to train myself up.

11. to learn new stuff. Yes, but the workload is crazy, and because of the time spent in this module, it is badly affecting all my other 4 modules.

12. My friends recommended me. I also wanted to learn about new platform, new language and improve my Software Engineering skills. I new feel regretted taking this module.

13. The module was pitched as a class on software engineering principles and an opportunity to apply them to a modern system with real world applicability. That is why I took the class and was not disappointed.

14. I decided to take this module because I want to learn sth useful and practical. I still think I did a right decision although I have almost trashed all my other modules for CS3217 : P

15. I decide to learn this module because I want to enhance my programming skill. Now i think it is 60% right decision. I really got a chance to practice my programming skill but the improvement may be less than what I have expected.

16. Wanted to try picking up a new platform and learn software engineering along the way and challenge myself. I think it was the right decision.

17. Learn and apply software engineering techniques.

18. CS3217 appears to be a very challenging module and it looks fun. Yes, I still think it was the right decision.

19. I want to have some pain =) and some fun :)) But it's like too much pain vs not as much fun =) Still, I think it's a right decision.

20. I decided to take the course because I wanted to learn design principles and challenge myself with difficult problems

21. Wish to challenge myself before I leave NUS. Yes, I think I have really pushed myself over my limit. If only I have this attitude 3 years back, I will be graduating in First Class Honors.

22. To improve my coding. A fun module with cool iPad. Yes right decision. Polished me more.

23. I took this module because I love programming and wanted to strengthen it more and more, as well as learning various lessons from prof Ben. That was a right decision after all. The workload was quite heavy, but from that, I learnt great deal about programming and software engineering. All the people in the class are cool as well. They are different from most classes I have attended. They are passionate and are willing to spend a lot of time doing problem set (or suffering pains) because they love programming.

24. To help me push my boundaries, while learning something useful. I consider it as one of the better decisions I've made.

25. The main reason why I decided to take this module is that I would like to try something new. As a programmer, I would like to improve my coding skill by doing challenging tasks. As a young person, I would like to know find out the way to get closer to my dream and goal. Yes. It's still a right decision. Although I did suffer a lot, I learnt a lot as well. Not only about coding, but also about dealing with problems, challenges, and even failures.

26. To learn software engineering by doing it intensively. Yes, it's a right decision.

27. I took it to gain a greater exposure towards software engineering. I think its still the right decision as it made me see that learning, picking up a new language was not the point. the whole point is in the design and teamwork that was used to complete the problem set.

28. Sounded interesting + Like the focus on problem solving. Yes.

29. learn software engineering (standards, programming patterns/styles), work with great people to do random things (final proj) I think i had made a correct decision.

30. Hand itchy.

31. To challenge myself and have fun. Yes, sort of :p

32. wanted to test myself vigorously in terms of programming.

33. Because it is interesting and looks challenging. And I wanted to know more about software engineering. Yes.

34. To learn more about more device programming, and to meet enthu people =) And, yes it is

35. This is module makes more sense than any other in the degree requirements and I did not join SoC to spend nearly all my time at Science and FASS. Software engineering is the only reason why I'm in school and this module is a must to take whether it is required. Yes. If all modules were like this one (perhaps with lighter workload), then my Uni life would have been exactly what I dreamt of.

36. Interesting alternative to CS3215, and many peers are reading it as well. As of now, still yes.

37. I feel that there is a huge potential in IOS power device in mobile computing. This is something I am interested in. Taking this module is one of the best decision i made this sem.

38. I decided to take this module right when I heard prof Ben talk about it. This was because I had never challenged myself as of now and I needed this module to show myself that it was possible for me to achieve much more than I thought would be possible in one sem. I think my decision was right... Even though the first few assignments I had to struggle through, I managed to complete the last few ones satisfactorily.

Skip: 1 (2.5%)

It is nice to see that we have a class of highly motivated software engineers. 


1) Multiple Choice

How do you find the lectures?



They are completely useless. I learn nothing.


I have no idea what's happening half the time


Lectures are no different from the other classes on campus


Lectures are clear and I am able to follow the material quite well


Lectures are way cool. Easily the best class that I've taken at NUS




The lectures were really not quite as good as I would have liked them to be. Basically, I was too busy working with the TAs on developing the problem sets and also grading problem sets to spend sufficient time preparing the lectures well. The lectures should be much better in the next offering of CS3217.

2) Multiple Response

How do you find the tutorials? 



They are completely useless.


They are not very helpful to my learning.


They're okay, but the time could be better spent discussing other things. 


They are typically useful. 


I learn everything in CS3217 from the tutorials!


No idea. I don't go for tutorials.




Hmm. We're not doing so good. Need to figure out how to improve the quality of the tutorials next year.  

3) Essay

Suggest other topics that should have been covered for the lectures (if any).

1. Physics engine

2. I think the topics covered are enough. A bit too much, actually =). The problem is we hardly have any time to prepare for the lecture (hardly anytime for anything =)), so I "have no idea what's happening half the time :D". I understand many concepts in the lectures later, when doing the stuffs myself :).

3. 1) some examples about the design patterns 2) a clear guideline about how to draw domain diagram 3) information about delegates & communications etc 4) how to write proper unit test / how to test a UI-based program (yep, it may not be practical)

4. MDDs and other diagrams.. Because it is required for almost every problem set, but it is not clearly taught in lecture and there is not any good reference or explanation on this available. Can introduce more on the incentives behind those design patterns as well. I feel the focus is more on "reaching the limit, changing the world" than on software engineering. After all this is still a software engineering course :p

5. Concrete examples on design, sample codes, diagrams. Everything is very, very, very abstract to actually let us absorb the core stuff. Maybe there isn't time, but I thought examples from CS1101S were really good. I didn't really understand MVC from lectures..

6. More design patterns and how they are implemented in the context of Apple gunk.

7. More example code. That is not trivial. Hard to understand high level concepts with trivial code. Or you could simply ask us to watch stanford stanford lectures and focus ONLY on software design.

8. More on design patterns and real-world examples on how to use them.

9. Case studies of real world software systems.

10. More on design patterns.

11. Lots of designs, Case study on problems and how they were solved. High level lectures on design.

12. NSNotifications Key Value Coding The above two things are part of MVC. Although you are trying to teach general stuff, these 2 things are very useful for PS.

13. OCUnit testing and Automated testing framework.

14. More about objective C and iOS

15. More on concurrence when working with threads. Some guides about working with MacOS and XCode would be very helpful, i think.

16. Quality Test

Skip: 23 (59%)

As mentioned above, we will review both the content and the delivery of the lectures in the next offering.


4) Essay

Suggest other topics that should have been covered for the tutorials (if any).

1. The tutorials should cover more topics on SE, or more time should be allocated for tutorial so that there will be time left for discussion of other topics after the discussion of the problem sets are over.

2. OCUnit testing and Automated testing framework.

3. For my tutor, Marian, I think he's quite good, but it's just that he might encounter some problems in speaking, so unfortunate that it degrades the quality of the tutorials a bit. But anyway, the discussion was really interesting, useful, and helpful.

4. Model implementation of teaching staff. Different implementations of students were discussed to see advantages and disadvantages of each implementation, but the implementation of teaching staff was not discussed. If possible, I want to see the 'model' implementation of the teaching staff, the approach so that I can understand more (good) points of view in implementation.

5. Tutorials are fine.

6. Introduce some good objective-c project structure.

7. Similar to above. Maybe take-home assignments on objective c crash course (probably ungraded) - useful stuff like.. GUI-specific (UITableView, UIAlertView) or maybe actually some introduction to data persistence (before PS3!).. But of course I understand this module is not objective c.

8. More specific examples of how the whole system can be designed. For example, showing some sample designs just by showing the headers file of each class that is created would be been much clearer and useful.

9. sample module from the tutor?

10. More discussion so on design on systems would be great

11. More discussion on the (current) problem set. - Encourage students to share about the progress (or the experience) so far.

12. Q&A sessions like they are today are quite good.

Skip: 27 (69.2%)

Thanks for the suggestions. We will look into them for the next offering.


5) Essay

Feedback for Lecturer Ben Leong.

1. Very good prof.Love your free Mc Donald

2. Great. But better in other modules. Obvious that this is the first year the module is carried out and that he's figuring things out with us too. Should spend a little more time learning Obj C :P

3. I think Ben is a very passionate professor. He pursues for high efficiency in the lecture and teaches a lot of things.

4. You are as cool as me.

5. Maybe a bit of research on usual practices (e.g. MVC, orientation detection)

6. Cool :) I like the way you conduct lectures.

7. underestimates the time we need to spend on the problem sets

8. Sometime prof did not make the topic clear enough, esp. when he mentioned a hard topic and there are no code examples TT. And prof also should mastered Obj C :), because although we can all learned everything if we want too, like prof mentioned :D, sometime if he admitted that he is not clear about something (which happens for quite sometime :)), it makes what we heard sounds a lot more suspicious :).

9. Good!

10. Maybe..... speak less, teach more.

11. One word: Inspiring

12. He's always believe in what he's doing. And he cares from students, I rarely know any lecturer who remembers the whole class' names.

13. Great work :) keep it up! Maybe you could talk a bit slow so it would be easy for poor Indian souls not used to the Singaporean speed ;)

14. I think that he is the best. Can't think of any suggestions. Good interaction with students and evil but encouraging lecturer.

15. I don't know how you organize the TAs, but they're doing great.

16. Nice emphasis on the core principles of Software engineering and for organizing the pitching sessions. Great idea!

17. Inspiring and caring prof, as usual. His lectures are all good and of high qualities. Lectures are fun, most parts are easy to follow and understand, thus the learning experience and value are high. Evil (tiger), but very inspiring prof, that everyone is willing to suffer/endure the pains of this module and work very hard. Very dedicated prof as well - grading the problem sets over the Chinese New Year. By far the best prof in NUS I have ever learnt from :-).

18. Overall good. But I do believe Prof Ben is able to teach more on software engineering, it could be good if he offers some concrete examples - common pitfalls etc.

19. An inspired lecturer. I hope that sometimes you could slow down a bit, since my English is not very good :)

20. Prof Ben did give us good lectures as usual.

21. Generally clear and I have no difficulty following his explanations. Always ready to answer to any student's question and replies with clear understanding and may often bring up new points, allowing the students to learn more.

22. Cool but evil guy. I think lectures need to have more direction and needs to be more focused. Tends to digress.

23. I am a star war fan too, but the lecturer note color scheme is really not very "exciting".

24. Though the lectures are not so helpful (I have to figure out things myself to do ps), but I have no idea how the lecture content can be improved either...

25. Module has been impressively carried out so far despite being the first run. One of the few lecturers whose PhD is not in the field of sleep induction. One of the few who got the focal area of a CS module right.

Skip: 14 (35.9%)

Re: Comment 2, I also know lah, but the "other" modules, I taught them at least 3 times, maybe 5. Much easier to be much better when you're not making things up when you're going along. Thanks for your patience.

Agree with Comment 8 that I am not entirely fluent in Objective-C, but I really didn't have time to deal with Objective-C while running around trying to get the problems sets and class together. Should be better next year. I think it's important for me to admit that I'm unsure about things and students check instead of anyhow whacking and teaching the wrong things. :-)

Problem Sets
1) Multiple Choice

Do you think the problem sets were designed well to meet your learning needs?



Complete waste of time, I learnt nothing.


There was little to be learnt


I learnt some stuff, but not a lot


I learnt quite a lot


I learnt more in CS3217 than all my other classes put together.




Happy to note that 85% of the students learnt quite a lot from the problem sets.

2) Multiple Choice

How would you assess the difficulty of the problem sets?



They were too easy


They were not much of a challenge


Average, just like my other classes


They were challenging


I almost wanted to commit suicide




I'm quite pleased with this result. The problem sets were calibrated to be challenging.

3) Multiple Choice

How much time per week do you estimate that you spent on CS3217?



At most 15 hours.


Between 15 and 25 hours.


Between 25 and 35 hours.


Between 35 and 45 hours.


Between 45 and 55 hours.


More than 55 hours.




I think the workload this past semester is too high. Will review how we can reduce the workload and yet preserve the learning value for the course. It is also plausible that our admission criteria was not sufficiently strict and some students were less prepared for the rigours of the course than we had expected.

3) Essay

Did you find the feedback write-ups that you received after grading to be useful? If so, why? If not, why?

1. Yes, useful!

2. Yes, useful. I really learnt sth from the feedbacks. For example, I didn't understand the MVC quite well when doing PS3. But after participating the tutorial discussion, I became quite clear for PS4 and PS5.

3. Yes, they simply make sense and point out the way to get things right.

4. 70:30 for useful and not useful. I found it more useful to come to tutorial and hear others' feedbacks. Because anyway, it's better to see other ideas wandering around.

5. - not much write up for my submissions, but generally they're helpful.

6. Quite helpful as they point out my weakness and also give me some compliments.

7. yes. Pointed out errors and stuff i made in the problem set, + make me think a bit on my design

8. Not really, the feedback comments sometimes are vague and sometimes there were not much feedback comments.

9. Somewhat useful

10. On the coding part, not very much. On the design part, yes, but what was much more helpful was seeing and discussing solutions by different students in the tutorial.

11. It is quite useful. I could learn how to be a good programmer from that.

12. Yes it was useful as it taught me, more than just how to solve the problem, but also how to improve my solution on getting to the answer.

13. Yes. All the good points and bad points are listed, so that I know clearly the quality of various parts of my programming. From that, I was able to fix my weakness, and well as strengthen my good points. Also, Joshua pointed out some 'unclear' stuff (which has both advantages and disadvantages and thus cannot be said to be either good or bad) so that I can think about them more. This is good because they provide me with different perspectives from mine, so that I can look at my points of views at different angle and thus judge them more precisely.

14. Yes, it gave me a 3rd party perspective of my code clarity.

15. Not to much meaningful feedbacks, actually...except that it's telling you that you suck in your assignment...:(

16. Yes

17. Not really. It identifies a few general issues but unable to go more specifically into what is wrong or what could have been better.

18. not really. there wasn't alot of feedback to start with, and when questioned, all that the staff said was that it's not done like that.

19. Yes. I tend to have better design ideas which I lacked the time to change as the deadline approached. It is good to see that many of the comments correspond to what I have thought.

20. No so useful. I hope I have feedbacks on how to improve the design.

21. Yes I did find them helpful. It was good that each of our programs were tested completely and then searched for any bugs. Also was able to learn of better design methods that I could apply to future assignments.

22. I think they are somewhat useful, but not really much =) I would like to hear some more about problem with my coding style, or how could my design be improved.

23. Useful, but not sufficient feedbacks given. They generally point out quite a substantial mistake/point, which upon discussion, the student is not likely to make again for the subsequent PS. Students are likely to remember these mistakes and not repeat them onto the other programming assignments from other modules.

24. Yes useful.

25. Yes. Helped to see what mistakes I made, and how I could further improve on my design.

26. They were quite useful, for they often pointed out architectural deficiencies that I'd overlooked. In such cases, they were almost always helpful when considering the design for the next problem set's solution. On other less-frequent occasions, of course, they merely highlighted those compromises that I'd knowingly made [for the sake of time, brevity, or otherwise], in which case they weren't as helpful.

27. Yes they were very useful. They were quite detailed and well explained. Also they were very useful because of the nature of the problem sets. Since most of the PS were interconnected (esp 3,4 and 5) feedback on all of them could be applied.

28. Not useful, too much time coding, no time to think about these.

29. There were pretty appropriate to help the lecturer benefit the future batches.

30. Not bad. Some of it was quite useful.

31. My TA is Marian. His feedback is very good, pointed out my design flaws. I have no complaint =).

32. Yes. I can tell that tutor put a lot of efforts on grading our problem sets and giving feedbacks to us. The feedback write-ups point out problems existing in my problem set.

33. Sometimes, it also gave some coding-optimal suggestions.

34. Quite useful. At least I know what my mistakes were.

35. Yes, the feedback is details and specific. It's quite helpful for me.

36. They were mostly useful, as they pointed me to the right direction as to how certain parts of my code was not organized properly/wrongly used. However, I feel that more emphasis on design could be put, for example maybe there could be a sample class diagram with methods that really makes us understand what goes where (I don't think we did it perfectly). On a side note, the feedback from Prof Leong for PS3 was really helpful. Maybe should have that style of feedback for the future batches.

37. It is useful as it helps me know how to improve my code as well as my design.

38. Yes, I find that they are pretty useful. Those smiley faces in the scripts really help to push us further.
It was alright.

39. Yes. Helped me improve my code

Skip: 0 (0%)

I am happy to see that the feedback for the problem sets is mostly useful. In the cases where the feedback isn't too useful, it is plausible that the student did very good work and so the TAs don't have too much value to add.

4) Essay

What are your views on the problem sets in general?

1. takes too much time, with not much learning value.

2. Takes up far too much time.

3. Generally, the problem set is good. In fact, all the algorithm except ps4 are quite straight forward. The only problem is my own fear. When I read the problem set at the beginning, I felt fear. My mood is also quite down and do not want to try. Luckily, it is an assignment. I need to overcome my fear. It is what I learn from the problem set.

4. Certainly time taking (at least when compared to problem sets for other modules).

5. Challenging and time-consuming, definitely, and rather helpful in general, they boosted the three points I mentioned above, coding, motivation and determination.

6. Takes up a lot of time.

7. Good effort for first attempt at the PS for modules. Change in problem sets during the week, though understandable, was a problem, especially for people who started early.

8. - Cover a wide range of topic & skills, which is good. - Work load is heavy. - Generally well written, except for PS4 about physics engine (which it was updated twice a day..)

9. I think the learning objectives were well divided among the 5 problem sets and there was noticeable diversity in them.

10. Most interesting homework I've every done in my life. It is simple to submit something which just works, but I always wished I had more time to redo the entire design to account for things I never realised during design phase but there is not enough time to do so.

11. To follow detailed information to learn a language and apply SE techniques.

12. some gold in sands. The gold is there, but we need to go through the pain to filter the sands ourselves.

13. Well designed and executed.

14. They are quite interesting.

15. They are more challenging than I would have thought initially, with some of them teaching pretty useful things. I think PS3 and PS5 are the two more fun and useful program sets because they test the design of the OOP relationship the most.

16. Well-designed. Kudos to the staff =). They are challenging and we all certainly learnt a lot from our mistakes while integrating old PS into new PS.

17. They are pretty good. (have also given feedback on them in PS5).

18. They are difficult but still doable though the time given was too little.

19. time consuming (although it might due to my not-so-perfect SE skills) INTERESTING

20. Generally, ok, fun, but painful like hell =)) A bit too much to be done on our own, especially when the lab was too good for the first few weeks =). And ps 4 got quite some killer errors that drove most of us crazy :)). However, if all these "minor" problem are settled well before the class starts next year, (now most are resolved :)) I think the next batch should also have the chance to deal with the same level of ps :)

21. They're more positively challenging if you take it seriously. Otherwise it's negatively challenging.

22. Maybe some hints on the SE portion would have been helpful in the Problem Sets. Such as - you could use this design pattern here. Also, a feedback-review mechanism would have helped more. I never went back to my PS5 code to improve it. Though we had feedback, there was no time to go and review the mistakes and repair them - and learn something out of them.

23. Too time-consuming

24. They are challenging, i could see the purpose of all the problem sets :)

25. A little disorganized, sometimes a little unclear, but alright in general.

26. Challenging. They are as good as I can imagine them to be.

27. Eh...I was disappointed by myself on some problem sets. But later I realized that it helped me to figure out some of my problems, such as efficiency problem and designing problem.

28. The problem sets focus on what is taught in the lecture. They are good practice problem for me to try on.

29. They are quite heavy, but not so hard. The problem sets are also quite well-designed, so that learning experience and value are high. There are many possible implementations for each problem set, so that one must consider carefully the advantages and disadvantages of each implementation and choose the most suitable one. Also, the pace/order of learning is good. Each problem set introduces new things to learn, as well as applying of stuff which was learnt in the previous problem sets. Lastly, the problem sets cover quite a good range of software engineering: parallel programming (ps4), testing (all ps), analyzing problems (ps3), and integration (ps5).

30. 2, 3 and 5 are ok. I and 4 are quite pointless

31. They were very good, and difficult.

32. Maybe they are a bit too harsh for students to consume them in 6 weeks but it gets people feel good once they overcome the difficulties & solve the problems.

33. Time-intensive, and killer. Generally fun to come up with ways to solve the problems in the problem set.

34. Interesting. But more time should be given to do the assignments more properly instead of having to rush every assignment.

35. Challenging but effective for my learning.

36. I find problem sets 1 and 2 to be quite good. Problem set 2 gave a good introduction on unit testing and ADTs. Wasted too much time on problem set 3 figuring out things like how to add gestures and how to use affine transforms instead of learning how to design the struture of the code. Problem set 4 has too much errors. Problem set 5 was ok.

37. It is challenging, but time-consuming. Fun to do.

38. There were very challenge and time consuming. More help should be given on teaching us the right tools to use to improve our efficiency.

39. They are OK generally.

Skip: 0 (0%)

Glad to see that most students thought the problem sets were pretty good, though there's also a consensus that maybe they were also too time consuming.

5) Essay

Please let us have your suggestions on how the problem sets can be improved to make learning more efficient.  

1. Next time, may be you could try not to give the appendix in PS4. It will be a real challenge. In fact, if I were asked to do that PS, I do not think I could finish it within 1 week.

2. PS5 required a lot of photoshopping skills, rather than xcode skills. Could improve it by making the images easier to use.

3. I think they were fine

4. Prev answer.

5. They are ok. Hope that the physics engine does not have typos.

6. Exploration should be somewhat guided.

7. Maybe can give my explanations on some terms. Maybe they seem obvious for TAs and lecturers but take many hours for us to debug.

8. have also given feedback on them in PS5).

9. just applying the typos and improvements that we have (esp for PS4) are good enough

10. My suggestions on problem sets are 1) It would be better if we make all problem sets more concrete. 2) Some problem sets are a bit off-focus. If our main goals are to improve programming skill and do better in software engineering, then reducing some math challenges will be better.

11. Some write ups can be improved. The problem set is very long and from time to time I find I need to look for requirements along the lines. Maybe can put clearer specification of requirements separately in a section. PS3 and 4 may be too heavy comparing to 1 and 2. Maybe, balance a bit.

12. give us more details about the problem set even when we are doing ps3 and 4 so we can plan the design better.

13. To encourage the students to put even more thought into the design, the weight of the questions asking them to defend their design/architecture against alternatives could be increased.

14. I felt that more help could be given to students to tackle the apple stuff so that they can concentrate on designing the system.

15. PS5 will be funnier if we were provided with more arts. It makes extending the game in our own ways easier.

16. For me problem sets would be more interesting if it's stressed on the designed and practices as much as the programming part.

17. Put it as appendix some useful API.

18. Aside from what I wrote in my PS submissions, I feel that testing is not really emphasized in the current problem sets. Even though we're asked to write test strategy in PS3, 4 and 5, I suspect very few of us did spend time writing the test (partly because we barely had enough time to finish the assignment).

19. I think that perhaps the problem set could be improved by giving certain key words that we could search to encourage independent learning.

20. I'm not really sure, because I think I learnt a lot =). And I forgot most of the PS now, so maybe you can refer to my submission for the PS for my suggestions :).

21. It might be better if there is tutorial/consultation sessions in the middle of the week for discussion of the problem sets and problems faced.

22. Some examples/references would help. For example in the second problem set, I had to figure out myself how to build a good MVC system as that time I only knew the theory from CS2103, but never built such system.

23. - Problem set 3: more iOS reference needed. - Problem set 4: formula should have explanation (or the idea / purpose of the formula). Actually they are quite simple, but the way they are written (plainly math formula) made them complicated and hard to understand). - Problem set 5: probably the requirement should be announced before 3 and 4, so that students can design part 3 and 4 to fit the requirement.

24. I do believe some "good coding practice" can be offered from TA's experience. It is a waste of time to figure out something which is truly common but obscured . I understand it is critical to train programmers to learn something new, but due to the time constraints, some existing solution may be quite helpful.

25. I suggest a change in order for PS3 and PS4. PS4 design is more likely to be deterministic of the final design. It makes more sense to design PS3 from PS4.

26. They are generally overwhelming. I normally can not figure out the "algorithm" to solve a problem set right after finishing read it. Can definitely use some guidelines.

27. ps4 should be more open ended. really. even if the students cannot finish it, at least they go through the process of figuring out how to do, which is a damn important skill.

28. More design and thinking problem sets would be very helpful.

29. I think certain things that require objective-c specific methods/classes could be highlighted, to prevent us from having to search ourselves in order to do certain things.

30. Maybe that was part of the objective of the problem set, but I feel that I learnt more objective-c than concepts in general through the problem sets, which I guess.. isn't what the course wanted.

31. Maybe we can have deeper coverage and practice of advanced patterns (considering this is an advanced SE course)?

32. Release problem sets together? So students have an idea of what are they expecting to do after completing the current one. This would be useful in designing of the code etc. (i know this time round it is not possible as they are new)

33. Polish up the minor mistakes pointed out by students. Also, try to integrate PS1 and PS2 together by making them even more related to PS3, 4 and 5 in general. I have pointed this out in the bonus question of PS5. =)

34. I think test cases should be made public after the problem set is over (except there is some late submission), so that students can manually test and debug the program right away, instead of waiting for the graded problem set. One downfall is that the test case may be made known for future students, in theory, but I believe no one in the class would do it, as well as no one in the future class would ask for it.

35. Do away with the first PS and spread out the other problem sets over longer periods. It shouldn't take too long to figure our Obj-C.

Skip: 4 (10.3%)

Thanks for the feedback. We will most definitely review the problem sets next year. Sorry about the bugs and typos. We already tried our very best.



1) Multiple Choice

What is your overall impression of CS3217 thus far?



This is a horrible module. I truly regret choosing it.


It's alright, but mostly painful.


Just like any other module.


It's a good module and I definitely enjoy it. 


CS3217 rocks! Coolest module I have taken in my life. 




Sorry to see that about 25% of the class regretting the decision to take CS3217.  Hopefully now that people know what to expect, the students next year will make better choices. Certainly CS3217 is not suitable for everyone. It's not *just another* iOS programming course.  

2) Essay

What do you think you have learnt thus far?

1. Designs, algorithms, patterns. way of thinking, and way of living. extrinsic motivation v.s. intrinsic motivation.

2. Objective C + Cocoa Touch Design, especially MVC - maybe the apple way.. Patterns that I didn't really use, but I would like to if possible. Haha. Memory management. However I feel that almost all of them are rather Objective-C specific..

3. The most important point that I have learnt thus far is to integrate the UI and intensive background codes together (in this case physics engine). Integration is probably one of the most important learning point since it is always required when coding in real life and having to integrate your own code with the organisation's current system.

4. Not really sure. But there are multiple ways to do things. And what we do isn't always the "right" way.

5. How to survive =). Sometime I felt it's too much painful TT. Now when getting through all and surviving all, I still think that's too demanding TT. Anw, beside that surviving skill, I learnt quite a lot about Objective C and several SE patterns, such as MVC, factory... The important thing is I feel that I really touched on something deeply, not just like most of other modules TT. And therefore, I felt much confident now.

6. - Objective-C and iOS programming. I'm now relatively comfortable with writing objective C code. - Talking with / sharing with / asking friends is the best way to do thing / learn thing faster. - Designing is not trivial.

7. some design of the code, self-motivation, and some software engineering knowledge

8. Software engineering at its best.

9. Basic engineering principles

10. 1) Get myself completely focus to get something done. 2) Learn from mistakes/bad design done by myself. 3) Objective C

11. Objective-C. MVC modelling. Some SE techniques.

12. My software engineering skills have improved a lot. I learnt about unit testing, design, some common pattern , integration and much more. Objective C, Mac and mobile platform are cool.

13. Some SE topics pretty well. Objective C. I was even mixing that up while writing C++ code today...

14. objective c + a little bit on designing software

15. 1. Read a PS, take a breath and then continue.... 2. Calm down all the time no matter how huge the bug is 3. First thing to do in a PS is to think, second thing is to think and third thing is still to think. 3 days is enough for coding. But 3 days may not be enough for thinking.

16. 1. Objective-c 2. Software Engineering 3. Got used to the good IDE, Xcode. 4. I got more power to face problems.

17. Solving problems does not necessary involve using technology. Parallel programming. Testing. Integration. Objective-C. Design pattern: MVC, singleton, factory.

18. More software engineering in practice. Some of the "useless" things learnt in 2103 make sense now, while others still remain useless. A lot of lessons learnt on how SE decisions will come back to haunt you.

19. Well it's too much to list down but here are "some" of the things: -- objective c -- building a physics engine -- using open source box2d and chipmunk engines -- learning to code well -- design patterns -- unit testing -- game designing

20. Software engineering. Learn by suffering.

21. how to sleep in the lab how to code 21 hours straight -ok, that's probably not the right one- How to code in Obj-C How to use iPad How to code Physics Engine How to do unit testing

22. I think I'm better at reading platform/API documentation, figuring out differences between and pros and cons of designs, and more confident of writing code in general.

23. Learnt about MVC and unit testing.

24. How to program in a structured manner and best practices.

25. Why I suffer. More concrete ways to represent and ensure correctness of the program (rep invariant). Pain of integration with bad design. Programmers as higher beings have to be ready to learn about others' domain knowledge to solve their problems.

26. Objective-C, software engineering, hard work.

27. Mainly SE stuff

28. Objective C

29. How to develop and code in IOS. Objective C. Design methodology.

30. How to stay overnight debugging for a stupid bug (maybe :P) I really sacrificed a lot of sleeping for CS3217 but I think it deserves it.

31. How to learn a new language

32. Persistent in independent work and awareness of risk & time management

33. I learn a lot about objective-c and apple MVC.

Skip: 6 (15.4%)

It might seem a little odd that we ask such a question. It is not. Teaching is really quite so simple. It's one thing about knowing what we're trying to teach. That however doesn't mean that what we *try* to teach is necessarily received in exactly the way we expect and hence the need to check back. :-P

3) Essay

Please share one thing you love most from this class

1. Lots of challenging opportunities and learning values

2. Challenging, interesting and new stuffs, fast learning pace.

3. Fun pain!

4. It's always fun to suffer in the lab with your mates.

5. Classmates

6. I loved the assignments every time I finished them :) it was like an enlightenment when I usually figured out what the lecturer expected out of us and I manage to get the code working...

7. iPad and McDonald every week=D

8. Prof Ben's Mac =). Not the machine, but the food =)

9. It being the only module with planned programming assignments which is sufficiently challenging and its percentage justified. Other modules include an unreasonably sized programming assignment simply due to complaints from industry about students lacking practice, accompanied by unreasonable 10% weightage.

10. sense of accomplishment after completing problem set

11. Coding with friends in the lab, finding sofas in the middle of the night to sleep on, and sighing when you see dead bodies on the sofas already

12. my iPad

13. Learning how to use all the gestures for UIViews from PS. Actually another that I love equally is the appreciation of the physics engine that has been created by others (Box2D, Chipmunk) that works out so well.

14. Highly motivated and competitive individuals.

15. Everything except the answer to 19 :)

16. Ben Leong

17. pushed to get things done (enjoy the pain & suffering?).

18. the iPad

19. The process dealing with problem sets.

20. I loved the issues discussed in class, especially the topic on failure and the topic on tiger mums.

21. I get an iPad. I think I'm the only weird soul out there who actually enjoys coding in Objective-C (not the problem sets, the language); I kinda got used to its memory management system which most of my friends hate (in favor of exceptions.. I think), and I like how it is heavily integrated with the GUI elements.

22. camaraderie

23. The iPad! And the feeling that you've climbed a mountain when you submit the final PS.

24. The fellow students are awesome.

25. The coolness of developing an iPad app!

26. night of coding at PL1 with iMac and iPad

27. 27 inch iMac :p

28. I like the difficulty

29. The thing I love most from this class is the physics engine in PS3. That was really, really cool. I love building games, and physics engine is an essential part of a game. I have seen many physics engine, like Box2D before, and alway wanted to build a physics engine myself. And that came true when PS3 was released. I was very very excited about the physics engine. After finishing, I even implemented circle right away, before expanding the problem set to polygon (but unfortunately did not successfully debug). In short, PS3 is the best problem set/hw problem I have ever seen :-)

30. Coding with friends in PL1 at midnight every Friday and Saturday....

31. the access of the super big iMac...

32. Working late night with my peers.

33. Everyone's genuinely passionate about what they do.
34. iMacs :P
35.  Have an ipad for 1 semester ; )

Skip: 4 (10.2%)

Glad to see that many students liked the challenge ("pain") and also working ("shared suffering") with other equally motivated classmates. :-P

4) Essay

Please share one thing you hate most from this class.

1. The need to stay overnight in the Mac lab.

2. Kinda throws you out of schedule (especially when you happily think you have the recess week to get back on track, and there you go). But I'm not sure if we can complete so much stuff strictly before the recess.

3. Painful fun!

4. Objective C =). The most verbose, crazy, stupid language I ever learnt =), and Mac is such a nightmare to use =)). To be more serious, I think the one thing that I really hate is working too much for quite long, which could sometimes deteriorate my enjoyment in the work TT.

5. Coding in PL1 even when I want to sleep every Friday

6. sleeping time dramatically decrease....

7. I hate it when there are chunks of codes on the presentation, makes it boring. but i think its no choice.

8. The late submission of problem sets.

9. Working late night all the time...

10. The pain and all the time spent.

11. workload. we have other modules.

12. the amount of time spent.

13. How much time it takes away from other modules

14. How it ate away my recess week leaving no time for other modules.

15. My CNY and recess week ended when they had not started :((

16. To create my own physics engine and pray that it works well when I follow strictly to the appendix, to find out that in the end, it's heavily based on biasness value and really didn't work out too well for my case. =/ (but well it did work for some others)

17. different tutorial group standards, some tutorial groups have code review of problem set, with comments on the students coding style in the problem sets and good code/bad code emails, and the tutorial groups cover topics on SE and coding style. Other tutorial groups do not have all these.

18. Transportation effort to Mac lab

19. Coding day and night and having no more time for other modules.

20. I hate the fact that this module consumes all my time.

21. It altered my sleep hours.

22. Too time-consuming

23. Sleepless weekend nights...

24. Suffering,!!!!!! :(

25. Lab's air-con doesn't work over the weekends :( or at least it didn't the last time i went there...
26. PL1. I prefer my macbook. There was always too much noise there to work properly. And people were usually jumping around.
27. That I can't put my 100% into this class thanks to the other half of my irrelevant degree requirements.
28. - the lab is too hot sometimes - there's no bed (or mattress) in com1
29. That I did not get any sleep for the past 6 weeks and am lost in all my other modules :P
30. Labs are not accessible most of the time during office hours, due to labs, sit-in-lab etc.
31. It is time-consuming.
32. PS4
33. days and nights of coding...
34. night of coding in recess week
35. stuffy lab
36. The fact that we had to stay over in the lab for so many days to finish up the problem set. But comfort in shared suffering; it was tiring but fun.
37. The first thing which comes to my mind is PL1. Ironically, the lab is super cold during day, but then becomes super hot during night, especially during weekends, the time we students spend the most at the lab.

Skip: 2 (5.1%)

Sorry there was a programming bug in the PL1 aircon system that only got resolved after several weeks. The workload issue is noted. Will try to resolve it next year. :-)

5) Multiple Choice

Would you recommend the module to anyone else?



No, I wonít want them to suffer the pain I did.


Nah, I donít think itís worth it.


I have no opinion about this.


Yes, I will encourage anyone who asks me.


Of course, every NUS student should take this class!




Given all the unhappiness about the workload, it is quite surprising that 70% of the students will still recommend CS3217 to their friends. I guess this is what's meant by "spreading the love" (or suffering?). :-P

6) Essay

Please give us your comments and suggestions on how to make your learning in CS3217 more efficient and interesting.

1. It is already very interesting :)

2. Maybe longer tutorials, to allow us to learn more in class, as opposed to us having to pick up everything by ourselves.

3. More Tools and Testing frameworking guides pls.

4. I think learning in cs3217 is based very much on independent learning, so I don't think there is any better way.

5. Loan out macbooks, instead of restricting students to mac lab.

6. The teaching team have done great work! many thanks

7. Align students expectations with software engineering concepts by conducting a survey at the beginning of the module

8. I think the lecture on Tue should be 2 hours while that on Thur should be 1 hr. This may give us more time to learn sth useful for the PS that week.

9. I would think that the lectures are a bit off from the problem sets, which is very different from CS1101S where the lectures tie in very well with the problem sets. Don't know what to suggest to improve here but the feeling is there, so it may be worth looking into how to integrate the lectures and PS better.

10. It's cool already, I believe it will better next batch :)

11. Module is sufficiently interesting, perhaps Obj-C lectures can be left to Stanford instead.

12. focus less on writing code and more on intellectual stuff like solving problems. maybe having a ps that solves real world problems would be good as well.

13. Maybe, to make the PS more realistic, certain constraints could be introduced to force trade-offs between performance etc & a perfect design? For instance, while notifications might make for a really nice design with observers etc., they incur a big performance hit, so the later problem sets could specify a minimum FPS for the games to run at?

14. it's too competitive to be interesting...

15. Once again, more design, since we code so much, After design a lecture on process would be great. Like the Continuous Integration etc.

16. If possible, you could release all the code for PS1-5 of every student so we can learn from others' code.

17. Since do it will be a serious crime to any others =). More Mac from Prof Ben is very important to make it more interesting =). Keeping the content as a game like this year will be great. However, we should be better informed and prepared, esp for the Physics engine PS =). ( A great thing from that is now I learnt a great deal of physics on my own =)

18. 1) maybe tutors can share their experience with xcode/obj c so that we can learn from their pitfalls? 2) every team set up a team blog to update their progress?

19. Very interesting already. I think any junior go through what I went through would be as great as it can be.

Skip: 20 (51.3%)

Thanks for the suggestions. Will look into them next year. :-)

7) Essay

Any final words about CS3217? This is your chance to tell us anything you want that is not already covered by the previous questions.

1. CS3217 is cool :-). One of the must-take module for any CS-students (and whoever loves programming) :-).

2. I hope I can survive the semester.

3. I think its a fun module that opens my eyes up to the world out there, and the possibilities.

4. I feel the interactions in class is not good as cs3216. ppl don't want to talk - maybe that's the problem with geeks...

5. The work load is too heavy and can affect performance. Also when we're too occupied by the psets, we don't have time to ponder about the final project and other things.

6. Not the happiest, of course, but definitely one of the most (if not the most :)) memorable classes (or things) I've ever been through :D.

7. Maybe providing some beds (or something to sleep on) will be much appreciated :D

8. Quite a fun module but really overwhelming heavy (took up the whole of recess week to do PS5, probably the only time in my life a module can do such a thing). Most of the learning is indeed done individually and not in lecture at all, which does reflect the real life situation for programmers. Would suggest the module to look into Android as alternative because from this year onwards, I foresee the Android market is going to open up a lot with all the new slates that are going to come up. Furthermore, Java (for Android SDK) can be done in Windows, so students don't have to suffer anymore to always code in the iMac Lab, which luckily I don't have to thanks to a powerful desktop at home for VM. If still using iOS, then maybe investing in MacBook for students to loan out would be a good choice.

9. honestly, I find spending the whole recess week on the last problem set quite ridiculous. It'll be perfectly fine if it is a 16mc or 20mc module, but the fact is that we have other modules that we need to take care of, and too much time is being spent in this module. Even if the reason we spend so much time in the recess week was because that we didn't do our design for ps3 and ps4 properly, I still think its just too extreme.

10. CS3217 is a great module! It's special, different from all other modules in NUS :)

11. I hope after this semester, Prof Ben could use 6 weeks to do an angry birds for us~~~ (Assignment for him~~~)

12. Great module. Thanks to Prof Ben and all the teaching staff for putting in all the hard work for putting together such a unconventional and new module together in such a short period of time.

13. This is actually a very cool module.

14. Warn students not to overload/5 modules when taking CS3217. As good as committing suicide if you do.

15. A very cool course so far. Thank you for making this possible.

Skip: 24 (61.5%)

Thanks for the kind words. I suspect that the module will be better next year. I apologize for some of the unnecessary bleeding and suffering this year due to some mismanagement of the workload and bugs. It's always painful to be the first batch of a new bleeding edge class. Three years ago, the situation wasn't too different with CS3216. Thanks for your kind indulgence thus far.

Last updated $Date: 2015/02/26 13:12:26 $