Sunday, March 29, 2009

On Entrepreneurship

Last Monday I invited a number of local entrepreneurs to come share their experiences with my students.

The goal of the session was not to "promote" entrepreneurship. Rather like most of the other lectures, the goal is to provide students with a better understanding of the good, the bad and the ugly of entrepreneurship.

My personal view is that the entrepreneurship cannot be taught (though some students vehemently disagree with me - but that's fine. It is certainly possible that the prof is wrong :-)).

The following sums up my view: "Entrepreneurship is an attitude, not a product".

Personally, I thought the session was really good and there are many lessons for the students to take away. However what they learnt would ultimately depend on how much attention they paid to what was said. What I will do is however to highlight some of the points that I think the students should take note and to respond to some of students' blogs.

1. Sales Matters (A LOT). I was glad that this point was emphasized several times by several speakers 'cos this is something that I have been stressing for most of the semester. Technology is not the key to success. What matters is to identify problems that people care about (pain points). If people will pay for the solutions, we will get rich; even if they don't, it's a public service.

2. Don't Try to be a "One-Stop Shop". There are not many problems that really matter. Once we identify one of these, just focus on solving it well instead of trying to solve every single problem under the sun at the same time. By being too ambitious, we likely end up solving nothing well at all.

3. It is not ALL about money. A question was asked and some of the speakers said that they are doing what they are doing for the money. Some students therefore interpret entrepreneurship as something that's all about one. I really don't think that's true. These folks actually LIKE what they are doing. The fact that they have the potential to get obscenely rich in the process doesn't hurt. At the same time, what they highlighted is that folks who want to be entrepreneurs better have an eye on the money 'cos if not, it's easy to go bust.

4. People Matter. One of the stories that students tend to cite is that one of Ash Singh chatting up some woman at a Starbucks and selling his business to the husband. Yes, networking is an important skill and aspiring entrepreneurs better get to know more people.

5. Be Ready to Seize Opportunities. Opportunities arise from time to time. Some amount of courage is required to seize them. :-)

6. It's not a Bed of Roses. Some of the students commented that the session seemed to emphasize too much on the good and not enough of the bad. As it turns out, most of the speakers are relatively successful in what they do. I guess it's hard to invite people to come share about what a loser they are.... then again, some of the speakers, especially Marc, talked about the pain of nearly going bust. Even HungryGoWhere wasn't profitable until recently.

I would like to take this opportunity to thank all my friends for taking time off their busy schedules to come share their experiences with my students. :-)

Tuesday, March 17, 2009

Dealing with the "Happy" Problem

Today's class was on the issues associated with scaling applications for huge workloads (million-eyeball range).

This is not a random class. This was a class that I added in the middle of the semester last year after I watched Caleb blow up on FarmWars and realized how difficult it was to debug load problems for Facebook applications.

The problem with Facebook applications crashing under high loads is that you cannot predict when it will happen and it's extremely difficult to reproduce the problem even know how to begin to fix.

While the session today might seem very technical and some folks might be a little lost, I would like to emphasize that people are not expected to become experts at dealing with these load issues. Minimally, I would like everyone to have an appreciation for what might be the cause of load problems and basically, many things can go wrong.

The interesting thing is that most times, it's not a hardware issue, i.e. ít's not true that the hardware isn't running fast enough, but rather, it's due to a host of factors.

Minimally, I would like the programmer types and those of you who are setting up and running your apache webservers to have a appreciation for the complexities in tuning the parameters for the webserver and understanding some simple concepts about swapping to disk and the use of processes.

Perhaps some of you might not have understood some of what was said, but perhaps some seeds of understanding would have been planted and if you end up creating a million-eyeball app that blows up royally, you will have some inkling as to what to do.

Chris Henry would be holding a workshop on Web Performance this Saturday. After that workshop, you should not only have a high-level appreciation for web performance, but understand how you can try to improve the performance of your webpages.

Chris is likely to also try to peddle his Honours Year Project on you. He is currently developing a measurement system to passively monitor Facebook app performance. If your app does have the misfortune of blowing up (or some would say the fortune of being unexpectedly popular), his measurement system is supposed to be able to help pinpoint when things blow up and allow you to see the interactions between the client and your webserver so as to help you pinpoint the reason for the problem.

Chris needs real apps with problems to prove that his system works. :-) If it works, it will be win-win for everyone. :-P

I have put up with latecoming for many weeks already and I am quite resigned to students coming late. Next week is however a very special lesson. I have managed to persuade a whole bunch of local entrepreneurs to come down to share their experiences with you.

From last year's experience, this is a very interesting session - and it will be held in LT19. Please come on time for next week can? :-)

Note about Final Project Prototype due this Friday:

I am really not being evil by making you guys finish your prototypes early. You can ask Kok Wee about the consequences of leaving your CS3216 Final Project to the last two weeks.

But more seriously, there are two reasons why this Friday:
  1. So that you dun have a lot of time to put in too many features. It doesn't take a whole lot of features to make a sucessful Facebook application. A small limited set of features can succeed if executed well. By not giving you guys too much time, I force you to decide which one or two features of your app are most important.

  2. So that you have the chance to get user feedback. One key attribute that differentiates social networking apps from regular webapps is that you can get feedback from and interact with your users. You need time to let your users use you app so that you can experience interacting with them and refining your app based on their feedback.
All in all, there's lotsa sense in the madness lah. Let's all chiong the next couple of days and let's see some action on Friday! :-)

Saturday, March 14, 2009

On Software Engineering

The topic for class this week was on the Principles of Software Engineering.

When we talk about software engineering, what comes to mind for most people is programming. Some people think that software engineering is merely a fancy name for programming.

Clearly, programming is the foundation of software engineering. Without programming and competent programmers, it is impossible to build complex software systems. However, software engineering is much more than programming and I shared with the class the story about group of elite programmers in CS3216 who blew up on their assignment last year.

Truthfully, Software Engineering = Programming + Process + People.

CS3216 is about making a difference. How does one make a difference? It doesn't take a rocket scientist to figure that there are two key steps: (i) come up with an idea; and (ii) execute.

With the Final Project Proposals completed, all the groups have already come up with their killer idea to take over the world. Which group will succeed? Well, it depends on whether these groups successfully execute their killer idea.

It is in this light that we had this last class about Principles of Software Engineering. One doesn't become a software engineer by attending this one class. However, I do hope that by highlighting the key considerations that the groups should keep in mind when designing their application, they will avoid potential pitfalls and bugs.

Also, the final part of the class where I got three students to share their experiences on how they managed various projects has a clear purpose.

Wei Man managed a large team of 80 at LucasFilm in developing a big commercial game using Scrum. Justin managed a smaller team of 6 people at GAMBIT in developing a smaller game over three months. Zi Han did a scrumish-agile-bastardized thing in leading a small group of 5 inexperienced programmers to develop a full-fledged commercial system in 3 months. What did I hope the students would learn from their sharing?

Tools and Processes are Available. First, there are tools and processes available to help manage a software engineering project. From Scrum to Trac to Microsoft Project. There are many tools and frankly I don't know all of them and neither do I wish to discuss them in class. Instead, I would encourage students to explore and perhaps to ask Wei Man, Justin and Zi Han.

Tools are Dead, People are Alive. Tools are no good without the people. And regardless of how effective a tool is, it is useless unless we have people who are trained and committed to use them. Also, not every tool is suitable for every situation and for everyone. People better go and pick the tools that are useful for their projects.

It's all about People. At the end of the day, software engineering is about a group of people coming together to build a large software system. The biggest problem is the people. Much of execution therefore lies in getting the right people for the job and then motivating them to do the right thing to get the job done. This is an art form that cannot be taught in school in my opinion. Students will have to pick this up from doing stuff.

The coming week is going to be tough 'cos I expect the first prototypes for the Final Projects to be ready by next Friday. That said, I have met with all the groups and emphasized like two million times to keep their prototype small.

Don't have to save the world. Just pick a small and relatively common problem, i.e. used/needed by 80% of the people and nail it well. I hope that the discussions this week and the sharing would be helpful to the various project groups.

Next week, we will cover another topic related to execution - in case some of the projects turn out to be runaway successes with millions of users: how do we design systems that will scale up to millions of eyeballs?

Tuesday, March 3, 2009

On Case Studies

Typically, I post at the end of the week after all the students have blogged. Today, I decided that I would post first.

This week is supposed to be the second rest week where the students get to take a break from the hectic first half a semester to prepare themselves for the Final Project. The students are also supposed to working on refining their proposal for the Final Project between last week and this week.

We tried to do something today by discussion two case studies that were developed from the Final Project reports from the last batch. Neither case studies are prescriptive. I didn't have a set of teaching points in mind. The goal of the case studies is to highlight two key issues that the they should play attention to for their Final Projects - one, user interface vs user interaction and two, the importance of team dynamics.

User interface and user interaction are not the same thing and as Kent rightfully highlighted, they both contribute to this amorphous quality known as user experience. I have to admit that I am not an expert at UI design. What I do know however is that a little bit of common sense (and planning) goes a long way. I was extremely pleased that Kent demonstrated at the end of his presentation how carefully the GetHelp! team had thought through all the different interactions for their application.

I was also pleased with the discussions we had about the case study. I didn't have to do much. I was merely listening to what the students had to say and putting the points down on the board. Among themselves, the students highlighted most of the key considerations for Facebook applications. It was heartening 'cos it demonstrated that many things are quite obvious if people will just take "think" about it a little harder.

Wei Man deserves special mention for realizing that there was a serious problem with GetHelp! in that it didn't provide a person who asked for help a good summary of the help that was offered. I am personally quite embarrassed because I didn't realize this even though I spent quite a lot of time trying to find bugs in Kent's app last year. Perhaps it was because I was trying too hard to find bugs instead of actually using the app like as it was intended.

I would also like to thank Vincent Woon for taking time to come back this evening to share his experiences with the class. It's a pity that we ran out of time for if not, we would have had a longer discussion.

Personally, I think some students still need to learn to speak up a little more. I cannot emphasize the importance of speaking up and making sure people sit up and pay attention to your existence more. But actually, I am not overly concerned or in a hurry to see results.

From my own personal, we hear our teachers tell us many things. More often than not, we hear, but we don't understand. This is not a matter of intellect or lack thereof. It's more a issue of experience, or rather lack thereof, that prevents young people from fully appreciating what they hear.

Hopefully what the case study session has achieved this evening is to plant some seeds of understanding in the minds of the students. :-)

Unlike my previous posts, this post is not meant to be a summary of the points we discussed this evening. That is the blogging homework for this week. :-) Hui Hui had an evening exam and unfortunately couldn't make it to class this evening. She is going to depend on what she reads from the blogs of her friends to figure out what she missed.

I am well-aware that most students conveniently "forgot" to blog about the Google talk. I actually didn't forget. I intentionally "forgot" to send a reminder 'cos people were really stressed that week grappling with their WPF assignment.

The goal in teaching is to facilitate learning and so I believe that some flexibility ought to be exercised when the situation demands of it. In this light, students will be pleased to know that they are not required to do a make-up post for the Google talk if they haven't already done it.

However, starting from the lesson had earlier this evening, the students have no excuse. :-)

Sunday, March 1, 2009

New Teaching Statement

As it turns out, I found myself having to write a new teaching statement. The old one that I wrote before I started teaching at NUS and probably hardly knew what I was saying can be found here. Comments are welcome. :-)

The Challenge of Education Today

After teaching at NUS for slightly over two years, I have found that teaching is not too hard. However just because we can teach, or know how to teach, doesn’t mean that we have done our jobs, because takes two hands to clap.

In particular, I have found the greatest challenge of education is not so much teaching, but in persuading students that they want to learn. This problem is hard because of a combination of factors: (i) the allocation of students by the university admissions exercise doesn’t often assign students to their first-choice course; (ii) learning takes effort and it’s hard to persuade students to put in the effort; and (iii) most students are “lost” and don’t really know what they want in life.

It's About Learning How to Learn, Not About Stuff

I have always believed that teaching is never about stuff. I never saw myself as a professor of Computer Science, but just a teacher. The reason is simple. With high probability, 90% of what students will learn in school will not be relevant for their working lives.

This doesn’t mean that a college education is useless. What it means however is that the process matters more than the content.

In my teaching, I seek to find opportunities to “force” them to learn things by themselves. While much has been said about how reliant Singaporean students are on spoon-feeding, my experience has been quite positive.

I have found that if the assignments are structured “correctly”, it is possible to foster independent learning. Yes, there will inevitably be complaints from certain quarters, but if the students find that they really did get smarter at the end of a course, many actually appreciate being challenged.

Emphasis on Common Sense

I read some of the things that some young Singaporeans post online and I ask myself, “Where has our education system gone wrong?”

We have a lot of heavily-educated people, most likely with university degrees who can write fluently, who clearly demonstrate that they cannot think. Common sense is apparently not common.

It’s mind-boggling how common sense can be applied to analyze and solve many problems in life. It is equally mind-boggling how often common sense is not being applied.

Therefore, one of the elements that I attempt to emphasize in my classes is common sense. I try to explain how I think about issues to my students and to convince them that much of what I say isn’t rocket science, but intuitively obvious with the application of common sense.

To be Adventurous and Willing to Make Mistakes

I personally don’t believe that it is possible for me to become so good at teaching someday that I cannot improve. The corollary is that there is always room for improvement.

It is however hard to improve too much if we just focus on the basics, i.e. lecture and tutorials. Yes, it is possible to improve one’s lectures and tutorials, but there’s really so much we can do.

To really push our teaching to a higher level, there is a need to try new things. New things are scary because they might not work. The key is therefore the willingness to try and the willingness to make mistakes.

I have done my fair share of random stuff. Some things work; others don’t. The way I have managed the “failures” is to explain to students what I had hoped to achieve right at the beginning. As it turns out, our students are not unreasonable and many will appreciate the effort and will be quite forgiving if things don’t work out.

A related point is that as teachers, we don’t have a monopoly of the good ideas. Sometimes we just have to ask our students for ideas that they think might work. My experience has been good. There have been several occasion where I adopted some ideas proposed by students to good effect.

To Walk the Talk

Strangely enough, teaching also has a lot to do with leadership.

As teachers, we preach. Students today won’t just believe what we tell them just because we tell them. We can preach all we like and it can make absolutely no difference.

Personally, I believe that an effective teacher has to “walk the talk”.

If we want our students to be excited about what we’re teaching them, we had better be excited about what we teach.

If we want our students to believe our gospel, we had better believe it ourselves and be able to put that into practice.

If we want our students to reach certain standards, we might first be able to achieve the same.

There is No "Correct" Way to Teach

As teachers, our job cannot be to make every student a genius. That’s impossible.

My view is that we would have done our jobs if we are able to help our students reach their full potential.

Everyone has his strengths and weaknesses. I believe that we should try to help students discover and identify their strengths and to develop them.

Because no two students are alike, it is my belief that there is no “right” way to teach. What we teach and how we teach will depend on who we teach. By the same token, if we are good with a group of students, it says nothing about how good we would be with a different group if there are significant structural differences.

We are Salespeople

I learnt this from Randy Pausch in his Last Lecture – as teachers we are selling education and as I alluded to above in the challenge of education, we are sometimes stuck selling stuff that the students don’t really want to buy.

How do we sell stuff that they don’t really want, even though we know they need? I don’t exactly have an answer.

What I do know about sales however is that psychology matters, and so to be effective teachers, we need to spend time talking to the students to understand how they think and what matters to them.

The Belief that We Can Make a Difference

I believe that teaching is a calling and those who heed the call do so because they believe that they can make a difference.

There are many choices in life and we have many “lost” students. Teachers are in a unique position to guide and to help.

One of the reasons why I decided to become a teacher is because I agree with the philosophy of the “star fish story” where a boy is seen picking up starfishes and throwing them into the sea. Because there are so many starfishes, it all seems futile. The boy however picks up a starfish, tosses it into the ocean and says, “It sure made a difference to that one!”

As teachers, we have finite time and finite energy. We cannot hope to save the world or to teach everyone. What we can do however is to try to a small difference to the small number of students we work with and try to do our jobs. :-)


To conclude, my teaching philosophy remains as it has been from the beginning: I will strive not to teach, but to challenge the students to learn for themselves, to have their opinions about issues in life and to make themselves heard.