Friday, December 30, 2011

Advice from a Facebook Engineer

Extracted from a lovely article:

Meet a Facebook Engineer: Haiping Zhao



Q: What advice do you have for other engineers?
A: As a senior engineer, I have been through the programmer ranks and have distinct advice for each stage.

For junior programmers, I highly recommend spending time with a wide variety of technologies, including HTML, CSS, JavaScript, PHP, C, C++, Java, and SQL. This can help you identify your interests and potential directions for career development. Knowledge-wise, it is also extremely beneficial to have broad understanding of different problem solving methods.

For intermediate-level people, I think Facebook is one of the greatest places for having impact. By taking on challenging tasks, you can make changes that affect millions of users. Nothing is more exciting than seeing your code change the world. Facebook counts on our talents to come up with genuine ideas, respectful communications, and great implementations.

For senior people like me, it's really our job to coach young engineers on how to approach technical problems systematically and how to resolve disagreements gracefully. The job comes with the great responsibility of supervising the entire engineering force to move in a direction that we as a company are happy with. I hope senior engineers are willing to spend their time helping other people grow instead of just focusing on their own work. By putting ourselves into "sharing mode," we can help build a great software community within our respective companies that will proliferate for long, long time.

Haiping Zhao, a senior software engineer, writes code...for fun.

Thursday, December 22, 2011

Start to Learn Android Programming

I had the intent to learn Android programming 6 months ago. Since then, I have installed SDK several times, and gathered some study content such as reference books. But I haven't really started any developing activity until this week.

A couple of interesting or not so interesting finding so far.
  • The tutorials and the new training materials on the developer website are good. But there are far too many detailed technical documents, overwhelming. For an absolute beginner, a syllabus or a simplified guide is a must.
  • Like iOS applications or some web apps, Android is in favor of MVC paradigm -- with different terminolgoy. An article discusses the relationship of the model, view, controllers in Android.
  • Unlike iOS apps that have uniform screen size, Android developers need to consider different screen sizes a lot. The dpi concept doesn't really make things easier. 
  • I heard that XCode is really easy to use. I think Eclipse is a almost perfect IDE for developing Android apps, except a few drawbacks: huge memory consumption; manual SDK upgrading and manual emulator setup. Compared with visual studio, neither loses. 
  • Last, Android has built-in logging utility. One of the log level is called wtf -- "what a terrible failure".