Friday, April 16, 2010

Learnings in CS3216

CS3216 is coming to an end, and I have to say I have got to know a lot, if not learnt as much. Technically, I am better at PHP and database queries than I was; however, truthfully speaking, I am better than I was a sem ago because I learnt some real-life principles and appreciate the process of solving real-life problems, most of which do not seem to have model-answer solutions.

1. People are not like you
This is the most important lesson I learnt from CS3216. I seldom think in other people's shoes, although I know this thing called "think in other's shoes"...
-- Don't be so lost in your idea, people don't buy it
This is for the finger breaker, which is one of the (in fact the second) proposal for the final project. We had fun designing and playing, and we thought it is gonna be popular. However, feedback was not so encouraging. Don't know why, maybe they deliberately tried to demoralize us... :p But nevertheless their cold feedback made me understand the fact that I was, we were purely appreciating our own work. Who the hell think their own work isn't great?! Have a show of hands?? :p Learn to think like a customer -- they don't care how much code you wrote, how much work you've done, they only care if that thing is fun or WORKs.

-- Don't be so proud of your design (of UI) , people think it is cluttered or they are completely lost (dont know what to do).
It happened again in the finalized (the fourth) idea for final project -- I don't mean our UI is cluttered, it's fancy right? :p Instead, people are lost.
We again thought from programmers' point of view: "huh, so when this button clicked, XXX will happen, then you look for YYY there lah!" -- Users don't know. (Hate to say this, but you really want to succeed, you have to make your stuff usable by the dumb mass with average IQ<40...)>

-- People are not like me; they may be better at other things -- like marketing/sales/presentation, it is better to outsource such jobs to them.
I'd like to take this chance to say that I owe Reuben and Wai Hong a billion thanks. In the 1st and 2nd assignments, they were responsible for all the write-ups/reports for my group. At first, I thought, "OK, he is the biz guy, he should do it." / "Wai Hong is busy with his FYP, writing reports rather than coding may save some time for his FYP" ... Actually, they did their jobs so well that I never felt that there were such things as reports until the final project, where I do all the writing stuff. Now I feel reports are monsters... for me.
Different people are good at... no, I should say gifted in different things. Some in coding (not talking about myself, still got a long way to go), some in talking business with others, some in articulating the idea and work in a seamless way... For programmers, outsourcing writing/sales jobs is definitely more efficient and EFFECTIVE.
So, my point is "if you can't make it, there are people who can do it quicker, better and with less pain."

Really think in other people's shoes, you will find actually many things are not too hard to understand. Try to think like a user, a teammate, project lead, employer...

2. Ideas are cheap, execution matters.
Just random thought first, somehow these words come to me: "Although nature is defining, nurture still matters a lot." There is some similarities: ideas needs execution to be a real piece of work, which will not be so good if the idea to start with is not good; talented people needs proper education (nurturing) to be real zai ones, but people born with not so much talent will never achieve that much. OK, that's it for random thoughts. Let me continue...

Why ideas are cheap, now that ideas, like nature, is defining? Because there are different groups of people trying that idea at the same time. So in the end, execution matters.

3. Some ideas are impossible for a student, but easily done for big companies -- life is not fair...
Someday in a final project discussion we thought of building our weiguan.com on iPhones, but hell they do not have APIs ready... Then we read news, Apple says they are gonna do it, they have the data, they got the servers, they got the money and people... their idea is basically the same -- event-based social networking. S*** on them... Life's not fair. If only I am in a big company now.
Ok, never mind, Apple's gonna crash that day Jobs dies. *evil*

Looking back, throughout the whole module I have been in trial and error... Setting up web server, getting more familiar with Linux stuff, forgetting the damn server is in the U.S and lost hairs wondering how the hell cannot get the time correct ... etc in assignment 1; but that was better as least we know what to do from Day 1 during the Facebook assignment. In assignment 2, we faced a choice: make a music scores wiki or a CBU (and pirated) game? It took long to decide -- Wave is quite laggy down here in S'pore, real-time game is really kind of nonsense. But we somehow decide to trust Google's gonna solve that problem somehow soon.. Development for Wave was not so painful, but debugging was damn painful -- Google likes to cache -- we have to rename the xml after we made changes to it... Fortunately, it didn't take long to figure out. :p

Coming more in the final project, we proposed; we rejected our own idea and reproposed; met prof Ben and got killed; proposed again; started work and built the "iPhone looking" website; we refined our idea again and *really* started building the weiguan.com till now... quite messy... It is so good for you that you know exactly what you want to do from Day 1.



Inspired by The Last Lecture:
Like yourself -- everyone is unique, and they should love themselves.
Yes, I am not overall the best; I am neither No.1 in any field, but I can always find something that I am better at than every person I've met (not to be proud, but I do think so :p). Don't laugh at me, better at playing sports/cyber games/guitar also counts here. :p I mean, if you cannot even find one thing that you are better than anyone you know, I feel so sorry for you. Otherwise you got some reasons to love yourself. Any reasons. That could the reason you are not replaceable. That is your value. Any value. :p

Know yourself -- know the strength, weakness, opportunities and threats.
Knowing oneself is important as that is all you have to begin with. Then it comes to knowing people and understanding the world (齐家 治国 平天下???).. That's too high level... Living one's life to his full potential is already very zai liao. :p




Last words
CS3216 taught me about life. I have not solved them all; nevertheless I appreciate the experience and I'd like to thank prof Ben, all guest lecturers and all classmates: thank you for bringing me this wonderful experience!

Jialong
another insomnia night (in fact it's early morning now)

Wednesday, March 31, 2010

Security - random thoughts

Just some quick reflections.

The lecture was about hacking/security/privacy issues. When I was asked in class : "what is the difference between privacy and security", I was shocked -- not being shocked that prof named me even without looking at me, but I really had no words to answer. "They are just different." Sometimes getting more privacy means more secured, sometimes it means otherwise -- like surfing on the Internet and checking luggage in airports.

OK, no more mess up with words... let me start with my random thoughts --

" learn , build, hack, customize "

-- this is the road that all computer geeks will go through.

I want to focus more on the last two , since the first two are quite self-explanatory.

Hack:
"Hack" by here means "taking apart". After building yourselves some applications, you find flaws in your program (and some of them have no solutions), then:
1. you would want to hack other people's applications/computer systems -- to see if they had same headaches. This is called "comfort in shared suffering", and that is quite a distorted kind of happiness :D
2. maybe you fail to hack other people's applications -- then you learnt something!

Customize:
Then you can choose to:
1. rebuild your app! Rome is not built in ONE DAY, and good apps are not built ONCE!
2. take that man's work and customize it! -- I prefer this way, and that is why I like Linux. :)

Monday, March 1, 2010

Team Dynamics

Yes, choosing the best players does not guarantee the success of a project. It is the issue of team dynamics.

1. Who to work with? Someone talented or someone whose working style you like? It is a tricky question and the answer DEPENDS (provided that there is no such guys who are talented and you like at the same time)

As a programmer, it will be someone you like. As a team lead or project manager, the answer will be someone talented, however. I guess that is why some of the soccer/basketball club managers like getting the best players available while the present players in the club do not actually buy it. -- There will be communication overhead. The players whose hands (or feet :p) get to touch the ball directly will like to work with people they are comfortable with, if not playing together for years. Similarly, coders probably prefer coders whom they have worked with before. THEY ARE THE ONES WHO ARE PLAYING. They know how it feels when having no clue of others' codes. When this happens, it means a lot of trouble.


2. What features are most important?

I mean if a team should aim at "cool" features or common features in the first place WHEN they start from scratch. It depends (although this may seems obvious to a lot of people, please read and judge whether my words make sense).

After two web assignments, I find web programming boring -- we are programming for "damn stupid" users... I believe most programmers are excited by solving big problems, instead of implementing buttons and designing "good" UI for stupid users. This is where I find web programming not fun. Hmm, but you will say that my app will not survive without users. Yes, that is quite true, I wont deny. But I don't care -- that is the job of marketing people -- I feel shoik when I am programming some *working* stuff instead of beautiful stuff.

I find myself writing irrelevant stuff now.. So.. for programmers, they probably want to implement cool features first -- sometimes even without UI, and they test using JavaScript console.... .....

As for project lead.... no need to repeat the "have something you can show people" words liao.

That is it .. for now.. get to sleep, the item on top of my to-do stack now.

Thursday, February 18, 2010

UI Again

From a technical perspective, one important thing of UI design is deciding how much freedom users have -- because users can only do with what they see
However, from an aesthetic point of view, make the UI organized, which means simple. At the first sight, users should get to know what this app does.

I guess their first version of UI was too much at the first sight (I mean their homepage). What I will expect is ONE SINGLE input box waiting there. I dont need those "need quick help?" , "set a deadline" , "who do you want to ask", and not to mention the ads -- they simply should not appear on the first page. If I need more options I can just go to another page with more options, if not by clicking some button and the options show.

Oh, no... the pictures at the top of the screen are not ads... They are just part of the UI and notifications from friends who need help. They are too colorful. I dont like pictures -- they load slow and flash my eyes. Just give me text, you can style the text, fine with me. I hate pics, especially shining GIFs. Give me simple art.

But the badges.. quite a good means to get people "addicted". There will be people seeking this kind of honor and the app will work... because of the existence of such people.

That is it. UI is such a thing -- you can make a 90% accurate judgment in the first minutes. A good UI says itself. A bad UI ... is just lousy. What to talk about?!

random thoughts

This is an entry about random stuff, actually no so random -- it's about cs3216

An agreement, a disagreement.

3216 is not so about programming -- Prof Ben

I would say it is wrong. Without practiced web programmers, how the hell can make it a full-of-feature app?

3216 is about making a difference -- same person :p

Yes, I agree. I mean, I understand this deeper now. This morning an idea was brought to me again ( In the years of middle school, I was driven by it to screw all my teachers, but somehow I lost it here in NUS) -- who the hell will bother what are your secondary school grades now that all of you are now in NUS??? Similarly, who the hell will bother whether you have 1st class or 2nd upper if you eventually made a (big) difference?

Life is about making a difference -- whether it is on yourself or the rest of the world. Making a difference, I perceived this phrase as something to do with subtraction first time I saw it. :p

It is about creativity, (positive) impact.

Life is not about other things, the highest level of living your life is leaving some "differences" before you die.

Simple as that.

Application Critique on Texas Hold’Em Poker

Last night's presentations were wonderful -- prof's profile pic was intensively used. Other than that, there are some important lessons I learnt from the presentations.

Take the Texas Hold’Em Poker as an example, it is basically another poker game -- "technically nothing remarkable". I installed the app and tried a few rounds, design is not top-dollar job, either. But it won about 20m users.

Why?

Reason is that (personal view) execution matters, and execution need to be quick. Besides these, it is a Zynga game -- the company spent a lot of money on advertising.
So, if idea is cheap, then execution matters, and that needs to be done in a very fast way.

Another thing we can learn from Texas Hold’Em Poker is that although the UI sucks, the logic behind this game, or the way it keeps its gamers MUST NOT suck. I mean, there must be something that "binds" the gamer to the game. The "7 sins" was a very very good illustration -- I knew this, but I couldn't find a nice word until last night. Yes, it satisfies people's greed, envy and pride -- these are the very things are keeps gamers in the game -- that is why we have people creating multiple accounts, "shifting" money from one account to another.

Similar situation in China, where the government is taking strong actions against those online games that include violence, "level up to unlock more places, events, items..." ... all of which are very harmful to teenagers.

I mean, to be a "successful" game, one of the (fast and profitable) ways is to insert elements that instills people's wrath, envy, pride .... -- but this seems unethical to me.

A third thing I learn from this poker game (indirectly) is that : it takes much to be good, but it takes little to be BAD - real bad. It really takes much consideration (for the user) to be a good piece of software, which becomes a "master"piece, whereas putting money in the first place, money indeed comes as a result sometimes, but it will not last long. I feel I am talking without argument and anyhow came about with this idea, maybe it is because I really do not have much interest in gaming bah.

Lesson 3 _ deadline drawing near

Actually you see from the title the deadline is drawing near, and I might be a bit quicker about this blog.

Yesterday we had guys from AWS giving lectures. Honestly speaking, I lost 80% of the content over a night. Things I remember are "Cloud Computing" , "bandwidth and latency" "abstraction layer (i.e. the virtual machine sandwitched by clients and physical machines)

Yeah , Cloud Computing. Another course I am taking is also talking about Cloud Computing -- Computing is becoming more and more like a public utility , like electricity. (The Big Switch) -- People now dont set up a generator at their homes to use electricity, maybe someday in the future we will not use our own computers to do computations -- we have tons and tons of data centers everywhere around the world, all we have to do is to submit computation jobs to server and wait for reply from server.

What if generators that enpower a bank, or city hall, or the entire city, break down? Things will be getting into trouble. It is similar in the context of computing. Although AWS is providing best/one of the best web hosting service, but still some people prefer not to be in the cloud -- like banks (as mentioned) , national defence(of course :p). They will have their own means for (secured) data transmission.

OK. pretty much for cloud computing. A little about FB assignment.

Frontend is near finished, backend still got a lot more to accomplish. .. get to rush to class now.. so I need to be quicker.

basically we wont be able to integrate payment features .. for now. We hope to have an up-and-running (all links are functioning, things in database can be grapped , etc) and good-looking app. We will try to implement more features (including payment) in Final Project.

Let me end with some of my thoughts. I just came up with how to change "can I ..." to "I can..."

can I? -> Just do it (dont care the result, which is probably bad) -> try to improve -> Just do it (there are a lot of trivial stuff to do, but just make your peace and finish one by one) -> I can.

Lesson 2 -- get to know team, break down the project

get to know team -- get to know what they are good at, how good at it, their ways (habits) of doing things (maybe better habits than I have, and I shall learn from them)

break down the project -- since most of the time tasks are not meant to be cracked solo -- because I am not genius.

schedule the work, do what you say -- in a software engineering project like this, it will be horrible that things do not get done ( since some people's work cant start without other people's work DONE).

figure out all the features, prioritize them -- even if you cant show the whole in the end, but you get the majority (and the most important ones) done at least. For example, when developing a game, the developers should try to get a very light-weight version done first, so that the artists can have better understanding what they are going to design the avatars, cursors, maps.... So things are prioritized, dont start with mother-of-all-designs.

These are what I learnt yesterday, hopefully can come up with some more, but I got to rush to class now. :p

3 catches -- first lesson

First lesson, as usual, the train hasn't started yet -- a comfortable "regular" NUS first lecture.

Ah... very unfortunate I had many catches today... --
1, overslept (from 2:30 all the way to 6:30! that is why I didn't set up an alarm. I was also surprise when I woke up)
2, consequently, lacking warm-up, I screwed up the show-and-tell -- forgot all I had prepared to say -- it just went "blank" -- I always do when I rush to a class after I overslept..

3, after school, returning hall the damn Fedora went "dead" -- keep poping up Nautilus windows... I was insane....

OK.. already a bad start, cant be worse, right! I got nothing to lose now -- I lost face already. :)

What I hope to learn in CS3216

Frankly speaking, I had no idea whether I will be approved to join the class since I "screw up" my 1101S final. But I do want to join the class since this is a cross-faculty module and I will be able to work with non-computing people. This is a good chance to experience *real* working life. I convinced myself again after I read from the 3216-info.pdf that we will work with different people in different assignments. -- I hope to gain real-life experience to work with people more effectively and efficiently in the future.

I know 3216 is a very intensive course. Prof Ben said we can get 3 A's elsewhere with the effort put in 3216 to get an A. But I won't regret. Joining uni is not all about CAP, but more importantly learning some stuff, including all those programming stuff , working with peers, scheduling the project, managing people... These are things that will benefit myself even if I do not leave uni as a programmer. I think this matters, and this is the truth of uni education -- most of the things ( programming stuff ) learnt at school are pretty useless. So I come to improve my social skills.

Um... seems I haven't talked about learning CS stuff at all. Computing/ programming stuff I can learn outside 3216, I would say. Learning PHP/mySQL/... is not my major aim -- I think I get the basics , if not the core idea, of all those through the training assignment.

"Bricks wall are there to let you prove how hard you want it." 3216 is intense; 3216 is full of treasure, so prove yourself that you want it.