Well, sorta, since we (the CS3217 peeps) have already gone through this lecture the last semester. In fact, Dr Ben even asked us to sleep for parts of the lecture. But no sleeping, of course, since the environment is different in CS3216 and there are things to look out for. 🙂
Just a few quotes from Dr Ben before I get on to my thoughts –
- “Chun Teck can teach the class one.”
- “It turns out that 12 weeks can be quite long if you don’t sleep everyday.”
Well, that’s kind of true, I remember every week in the first half of CS3217 feeling like a 8-day week because of the overnight Saturday nights we spent on learning Objective-C. But sleep! Extremely important towards contributing to your overall working effectiveness through the next day.
One of Dr Ben’s students, Jonathan Low, actually commented on a (IMHO) seeming obvious but often overlooked point:
“Everything starts with an idea…. You have to be able to describe what it is in simple terms”
Of course everyone has brilliant ideas; but often, I find myself at a loss of words (damn, I typed wards. Must be the dota) when trying to explain this great idea I have to my peers. I think it’s important to actually formulate your idea into an actual product, lay down at least some systematic things, and give your idea actual thought before you intend to share it (and not make a blunder in front of your friends like I did). This way, more thought into the idea gives you better judgement of whether what you have in mind is actually a cool thing, and also lets you explore into different scenarios that your idea will encounter.
“Research about similar products”
This is important too. Nowadays, there are just too many clones of everything, such that it is difficult to innovate. One of my friends, an entrepreneur, once told me this: “It’s almost impossible to be innovative and unique, but at the least you could be authentic”. I think this goes well with what Jonathan has mentioned; look at your competitors, find out how you can differentiate from them. To quote from his example, a fast food restaurant that places ‘value for money’ on top of its list will attract a different population from one that says ‘yummy’ on top.
“Share your ideas”
This is the controversial one. To me, I think it really depends on whether you think your idea is genuine enough to actually deserve some form of secrecy. As Jonathan has said, most of the time there are actually already similar products on board. So I go back to the previous point: try to differentiate your product from competitors through other means, like focus, new features, etc.
Dr Ben has heavily emphasized that Software Engineering is about working in a team (his past students too). Through my experiences, I have to say that’s very true; if a team of professional coders who have different opinions and can’t communicate well come together, they will end up not getting any work done due to lack of communication skills.
“Choose a leader”
In my two major projects in NUS (CS2103 – Resource Wars, CS3217 – Battlewars), Chun Teck (the guy who can teach the class) was my group leader, and I have to hand it to him for managing the group so well. He’s the one that was setting deadlines for everyone, making sure everyone does his/her work, and the one to do a lot of saikang when bugs appear. The know-it-all. A leader will provide you with a suitable kind of peer pressure that will motivate you to do your work.
For my CS3217 project, our whole team always took evenings and nights staying in the iMac programming lab, coding together and discussing about our module structure, coding style etc. I think this was a very good practice, as we remove the communication barrier through the internet (can’t really express things well over the air as compared to face-to-face) and everyone has a clear idea of the whole project plus what each other is doing. Of course, not every group is suitable for this ‘style’ of team coding but well, it works for my team. 🙂
Well for the Facebook assignment I’m again teaming with Chun Teck and he’s already done damn a lot. Time to read his code!