Write programs is easy, write good, production quality code is hard. Two years ago, I gave my son, then 12, a C++ programming text book. He started to type in "#include ... main() ..." after a while. He can certain programs, but you would not expect him to write good code.

It's like playing Weiqi(Go). It's so easy to put stones on the grids. Total amature and professional may put stones are the same place from time to time. But the amount of thinking and the degree of certainty is totally different between the two.

At Microsoft, every line of production code gets reviewed by an often more experienced engineer before check-in. Any one can comments on other people's code, raise issues and report defects. Every one learns during this process, which improves product quality and make people better programmers.

If you're not shy, show me your code. I would see how your code can be improved. If you want to submit your code for reviewing, please notice the following:

1) Sumbit your own code, not other people's code, your company's copyrighted material or trade secrets.

2) Submit code which has some data structure design or algorithm inside, not just calling some API to achieve some thing simple.

3) Submit code which is not too small and not too large either, 100-200 lines will be ideal. Do not use large resource files. Submit in a .zip file.

4) Use Visual C/C++ or C# as programming language. Include all original files, not files generation by compiler.

5) Add comments to your code to explain what it does and how it works. No black magic.

6) Submit by commenting on this posting and include link to your project, or send email to fyuan at fengyuan dot com.

7) I may not be able to review all submissions because of time, domain knowledge, complexity, or duplication.

8) Once I post my comments here, everyone can add comments.

Remember the goal is learning as a community.