Thưa giáo sư,

Em biết rằng thầy bao giờ cũng yêu cầu người tốt nghiệp đang đi làm chia sẻ kinh nghiệm với sinh viên còn trong trường. Khi em học lớp của thầy, em đã nhận được email nhiều email từ các cựu sinh viên chia sẻ kinh nghiệm của họ cho nên em muốn chia sẻ kinh nghiệm của em.

Như nhiều sinh viên từ Trung Quốc tôi vào CMU với ham muốn học nhiều nhất có thể được từ một trong những trường công nghệ tốt nhất. Bên cạnh tri thức công nghệ mà tôi học được, tôi cũng học được về tình bạn, quan hệ, và đặc biệt những lời khuyên giá trị từ thầy. Sau khi tốt nghiệp, phần lớn bạn bè tôi ở lại Mĩ và kiếm việc tại các công ti như Google, Microsoft, Oracle và IBM nhưng tôi trở về Trung Quốc vì tôi phải chăm nom cho bố mẹ già. Tôi là con trai duy nhất và tôi muốn dành thời gian sống cùng họ sau bốn năm đi học xa ở Mĩ. Với bằng từ CMU, tôi kiếm được việc làm tốt với một công ti phần mềm hàng đầu ở Bắc Kinh. Kể từ đó, tôi nghe bạn bè làm việc ở Mĩ nói về những công ti phần mềm hàng đầu đó vận hành; họ đối xử tốt làm sao với công nhân; người phần mềm của họ làm việc với nhau thế nào và học lẫn nhau; tiện nghi của họ tốt làm sao; đặc biệt họ được cho thời gian để phát kiến và sáng tạo ý tưởng mới v.v. Tôi càng nghe nói về nó, tôi càng ước ao rằng tôi có cơ hội như họ.

Làm việc cho công ti phần mềm hàng đầu ở Trung Quốc, tôi bao giờ cũng tận hưởng công việc của mình nhưng cách công ti vận hành là rất khác với công ti Mĩ. Những người phát triển phải làm việc nhiều giờ và tuân theo chỉ đạo nào đó vì mọi sự đều được dẫn lái bởi doanh nghiệp, việc học những thứ mới hay phát kiến được coi là những điều xa hoa mà không thể đảm đương được. Tháng trước, tôi nhận được điện thoại từ một người bạn làm việc cho Microsoft. Anh ấy bảo tôi rằng do thiếu hụt nghiêm trọng người có kĩ năng, Microsoft bắt đầu thuê người phát triển từ khắp thế giới và họ đang thuê người ở Bắc Kinh cho trung tâm địa phương, đây là một tin tức tốt lành cho tôi.

Sau đây là kinh nghiệm riêng của tôi về phỏng vấn với công ti phần mềm này. Tôi không biết liệu kinh nghiệm của tôi có khác gì với người khác không nhưng tôi hi vọng nó có thể giúp một số người trong các bạn, những người muốn làm việc cho Microsoft. Tôi tin rằng bằng cấp CMU của tôi và kinh nghiệm làm việc thực sự có ích vì trong vài ngày, tôi đã nhận được điện thoại từ Microsoft cho cuộc phỏng vấn qua điện thoại. Về sau tôi thấy rằng đã có hàng nghìn người xin vào việc làm này nhưng họ chọn quãng một trăm người để phỏng vấn.

Với cuộc phỏng vấn đầu tiên mà Microsoft gọi là “Phỏng vấn khảo sát,” chúng tôi dùng Skype để nói chuyện với ba người ở Mĩ. Họ bắt đầu bằng việc kiểm điểm bản lí lịch của tôi và hỏi tôi về giáo dục của tôi, dự án capstone của tôi tại CMU, và dự án hiện thời của tôi. Sau quãng hai mươi phút, họ cho tôi một số vấn đề để giải quyết. Vấn đề là đơn giản (chúng là về danh sách có móc nối và cây nhị phân) và tôi chẳng có vấn đề gì với câu trả lời. Sau đó, họ chuyển sang khái niệm lập trình và hỏi tôi nhiều câu hỏi về thiết kế hướng đối tượng mà theo đó tôi đã trả lời tương ứng (tôi nghĩ bất kì ai đã học khoa học máy tính hay kĩ nghệ phần mềm đều phải có khả năng trả lời được những câu hỏi này). Chúng tôi tiếp tục trên vài chủ đề hầu hết là về chất lượng phần mềm. Tôi nhắc tới đặc tính chất lượng như tính bảo trì, tính đổi qui mô, tính hiệu năng và tính an ninh điều đường như làm họ ngạc nhiên. Về sau tôi mới biết là phần lớn các ứng cử viên chỉ nói tới chất lượng phần mềm là các lỗi. Khi tôi giải thích cho họ về viết mã an ninh, một người đột nhiên dừng tôi lại: “Anh có thể tới văn phòng của chúng tôi ở Bắc Kinh tuần tới được không, tôi muốn anh gặp ai đó.” Tất nhiên, tôi bảo ông ấy rằng tôi sẵn có cho phỏng vấn thêm. Họ nói rằng họ sẽ gửi cho tôi chi tiết và “phỏng vấn khảo sát” xong. Nó kéo dài quãng 45 phút nhưng dường như là lâu hơn nhiều nhưng tôi rất hài lòng vì tôi nghĩ tôi đã làm tốt.

Cuộc phỏng vấn tiếp xảy ra tại văn phòng của Microsoft ở Bắc Kinh. Chỗ này có bầu không khí khác hẳn khi so sánh với công ti của chúng tôi. Nó sáng và có nhiều tranh, một chiếc bàn nhỏ với ấm cà phê và nhiều đồ ăn vặt. Người lễ tân mời tôi cà phê nhưng tôi từ chối. Sau khi đợi quãng 15 phút, tôi được mời vào một phòng nhỏ với chiếc bảng trắng lớn.

Cuộc phỏng vấn thứ nhất được tiến hành bởi ba thanh niên trạc tuổi tôi. Họ lễ phép nhưng dường như nghiêm chỉnh và điều đó làm cho tôi có chút ít bồn chồn. Hai người trong số họ hỏi hầu hết các câu hỏi trong khi người thứ ba ghi chép trên laptop. Tôi cảm thấy không thoải mái bởi vì người đó gõ rất nhanh vì người đó ghi lại mọi điều tôi nói. Cuộc phỏng vấn bắt đầu với vấn đề ở chỗ tôi đã viết mã trên bảng trắng. Tôi hỏi ngôn ngữ lập trình nào mà họ ưa thích và họ bảo tôi rằng tôi có thể chọn bất kì ngôn ngữ nào cho nên tôi chọn C++. Vấn đề là tương đối dễ và tôi đã làm nó với quãng 50 dòng mã. Họ nhìn nó rồi chụp ảnh điều tôi viết trên bảng bằng máy ảnh điện thoại của họ. Nhiều vấn đề tiếp là khó hơn. Một số trong chúng rất thách đố như câu đố mà tôi phải giải quyết bằng việc gắn các mẩu lại. Câu hỏi cuối cùng là về thiết kế hệ thống nơi họ muốn tôi bắt đầu từ đầu qui trình phát triển với các biểu đồ hoàn cảnh, biểu đồ thiết kế, và biểu đồ lớp và giải thích cho họ cách tôi đi tới logic đó trước bất kì việc viết mã nào. Họ thách thức thiết kế của tôi và hỏi tôi về phân tích bù trừ. Khi tôi giải thích cho họ cách thiết kế của tôi có thể làm việc nhưng họ cứ ngắt lời và hỏi tôi nhiều câu hỏi về “Cái gì xảy ra nếu…” Tôi biết điều họ muốn là vài giải pháp thay phiên hơn là chỉ một giải pháp. Tôi giải thích cho họ cách tôi đi tới thiết kế này thay vì các khác như tôi đã cân nhắc chúng. Tôi giải thích về hiệu quả thiết kế và hiệu năng tương phản với các phương án khác. Họ dường như hài lòng nhưng không ai nói gì.  Phần lớn các vấn đề này đều có liên kết với cấu trúc dữ liệu, sắp xếp, tìm duyệt, nhị phân và logic Bayesian. Nó kéo dài trên hai giờ rồi họ hỏi tôi liệu tôi có muốn nói cái gì trước khi họ rời phòng. Tôi có quãng mười lăm phút nghỉ giải lao trước phiên phỏng vấn tiếp nhưng tâm trí tôi bận rộn vì tôi cứ tự hỏi mình tôi đã làm thế nào trong cuộc phỏng vấn đầu.

Cuộc phỏng vấn thứ hai được tiến hành bởi hai người quản lí, một người Trung Quốc và một người Mĩ. Họ rất tốt và hỏi tôi liệu tôi muốn dùng tiếng Anh hay tiếng Trung Quốc. Tôi trả lời rằng vì tôi đã theo dự CMU ở Mĩ nên tôi sẽ dùng tiếng Anh. Điều này dường như làm hài lòng cả hai người họ. Về sau tôi biết rằng cuộc đối thoại là để kiểm tra kĩ năng trao đổi của tôi vì nếu tôi được thuê, tôi sẽ phải làm việc ở cả Trung Quốc và Mĩ. Không như cuộc phỏng vấn khác mà tôi phải thảo luận về lập trình, cuộc phỏng vấn này phần lớn là về tri thức của tôi về vòng đời phần mềm, qui trình, và phương pháp. Họ muốn tôi mô tả chi tiết từng pha của vòng đời phần mềm, tiêu chí vào và ra. Họ cũng muốn tôi so sánh và làm nổi bật giữa các cách tiếp cận dẫn lái theo kế hoạch và Agile. Dường như là họ quan tâm tới quá trình suy nghĩ của tôi, kĩ năng phân tích và giải quyết vấn đề của tôi. Họ cho tôi vài kịch bản và đề nghị tôi giải quyết. Kịch bản đầu tiên là khá dễ nhưng sau đó họ đi sâu hơn vào vấn đề nhiều chi tiết hơn, và khó hơn. Thỉnh thoảng họ cho tôi một hướng dẫn nào đó vì họ không mong đợi tôi là hoàn hảo. Mặc dầu họ rất tốt và kiên nhẫn, tôi cảm thấy rất căng thẳng về kiểu phỏng vấn kịch bản này. Tôi không nhớ mấy bởi vì có vài kịch bản chứ không phải một kịch bản mắc lại trong tâm trí tôi. Đây là một trong những trường hợp nghiên cứu mà giáo sư Vũ bao giờ cũng dạy trong môn của thầy: “Làm sao bạn nhận ra thảm hoạ dự án mà mất hoàn khỏi kiểm soát và làm sao bạn sửa được nó.” Khi tôi giải thích từng bước để nhận diện, phân tích, tái tổ chức và tái lập kế hoạch dự án như tôi đã học ở CMU, tôi có thể cảm thấy rằng họ bị ngạc nhiên. Họ nhìn nhay và cứ gật gật đầu. Tôi biết rằng tôi đã làm tốt. Khi tôi kết thúc, một người quản lí bảo tôi: “Dường như là anh có kinh nghiệm trong quản lí dự án phần mềm. Nói cho tôi về kinh nghiệm quản lí dự án của anh.” Tôi giải thích cho họ về tầm quan trọng của quản lí dự án như “làm việc với khách hàng để thu được yêu cầu, đưa thành viên tổ dự án vào ước lượng và quyết tâm.” Họ dường như hài lòng nhưng chẳng nói gì nhưng tôi biết rằng tôi đã nhắm đúng hướng.

Cuộc phỏng vấn thứ ba xảy ra vào bữa trưa. Một người quản lí cấp cao khác đưa tôi tới tiệm ăn cạnh đó. Chúng tôi không nói về thiết kế hay viết mã mà đối thoại về cách nhìn của tôi về tương lai của công nghiệ phần mềm. Ông ấy hỏi tôi nghĩ gì về tính toán mây và app di động cũng như khu vực tôi quan tâm. Rồi các chủ đề đột nhiên bật sang khu vực bất ngờ khi ông ấy đi từ chủ đề này sang chủ đề khác. Ông ấy hỏi về toàn cầu hoá và “thế giới phẳng” rồi chuyển sang nguồn lực đám đông và khởi nghiệp. Tôi phải thú nhận là nếu tôi không theo blog của giáo sư Vũ tại CMU, tôi không thể trả lời được hầu hết các chủ đề này. Về sau tôi mới biết là Microsoft muốn nhân viên của họ có tri thức về nhiều thứ, không chỉ kĩ thuật hay lập trình. Vì tôi đã trả lời hầu hết các câu hỏi, ông ấy dường như rất hài lòng và bảo tôi rằng nhiều ứng cử viên đã không làm tốt trong những chủ đề này. Ông ấy bình luận: “Dường như là anh có đọc nhiều và biết điều đang xảy ra trong công nghiệp, và tôi rất hài lòng.”

Cuộc phỏng vấn tiếp quay trở lại các khía cạnh kĩ thuật. Lần này tôi phải viết nhiều mã hơn nhưng chúng lại là điều thích thú hơn trong thuật toán của tôi vì họ cứ hỏi tôi liệu tôi có thể làm tốt hơn không. Tôi biết điều họ tìm là tối ưu hoá. Gần như mọi thuật toán tôi viết đều phải được tối ưu hoá đủ để giải quyết các giao tác phức tạp. Về sau tôi mới biết rằng họ đã không mong đợi là tôi chỉ viết mã làm việc được mà còn muốn thúc tôi tới điểm tôi sẽ từ bỏ, điều này cho họ biết năng lực đích xác của những người xin việc. Tôi cũng phải nói rằng những người phỏng vấn tôi đều là người quản lí kĩ thuật, họ biết điều để hỏi và biết cách đánh giá mã tốt và công việc được thiết kế tốt. Phần lớn những người quản lí trong công ti của tôi đều không phải là người kĩ thuật. Họ là điều chúng tôi gọi là “người quản lí dựa trên quan hệ” vì họ có được chức vụ dựa trên người họ biết và kết nối gia đình chứ không vì năng lực và kĩ năng của họ.

Tôi có cảm giác lẫn lộn khi tôi bước ra khỏi văn phòng. Tôi không biết liệu tôi có làm tốt hay không. Ít nhất tôi đã làm bất kì cái gì tôi có thể làm. Hai tuần sau, tôi nhận được điện thoại từ Microsoft và họ đề nghị tôi một chức vụ ở Microsoft Research Asia ở Bắc Kinh. Tôi sẽ dành ra sáu tháng đào tạo tại Microsoft ở Redmond, Washington rồi bắt đầu làm việc ở Bắc Kinh. Việc của tôi sẽ yêu cầu tôi đi lại giữa hai nước nhiều lần trong năm vì tôi nói rất tốt tiếng Anh khi so sánh với các ứng cử viên khác. Về sau tôi thấy rằng tôi đã làm tốt cho nên thay vì là ở vị trí người phát triển phần mềm mà họ đã nghĩ sẵn trong đầu khi tôi xin vào, người quản lí của họ đã quyết định cho tôi là chức vụ lãnh đạo tổ cho một dự án nhỏ.

Cuối cùng thì mơ ước của tôi làm việc cho Microsoft đã trở thành sự thực. Tôi viết kinh nghiệm này để chia sẻ với các bạn và hi vọng rằng một số người trong các bạn sẽ có kinh nghiệm như của tôi.

—-English version—-

Sharing interview experience

Dear Professor,

I know that you always ask graduates who are working to share experiences with students who are still in school. When I took your classes, I received several emails from former students sharing their experiences so I would like to share mine.

Like many students from China I went to CMU with a desire to learn as much as I can from one of the best technology schools. Beside the technical knowledge that I learned, I also learned about friendships, relationships, and especially valuable advices from you. After graduated, most of my friends stayed in the U.S. and got jobs at companies like Google, Microsoft, Oracle and IBM but I returned to China because I had to take care of my elderly parents. I was the only son and I wanted to spend time with them after four years away to study in the U.S. With the degree from CMU, I got a good job with a top software company in Beijing. Since then, I heard from friends who worked in the U.S. about how those top software companies operated; how well they treated their workers; how software people worked together and learned  from each others; how nice were their facilities; especially they were given time to innovate and create new ideas etc. The more I heard about it, the more I wished that I had the opportunity like them.

Having worked for a top software company in China, I always enjoyed my work but the way the company operated was very different from U.S. company. Developers must work long hours and follow certain direction as everything was driven by business, learning new things or innovation were considered luxury things that they cannot afford. Last month, I received a call from a friend who works for Microsoft. He told me that due to the critical shortage of skilled people, Microsoft began to hire developers from all over the world and they are hiring people in Beijing for the local center, this was great news for me.

Following is my own experience on the interview with this software company. I do not know if my experience is any difference from others but I hope that it may help some of you who want to work for Microsoft. I believe that my CMU degree and working experience really help as within few days, I received a call from Microsoft for a telephone interview. Later I found out that there were over thousand applicants who applied for the job but they selected about one hundred for interview.

For the first interview that Microsoft called “Screening Interview”, we used Skype to talk to three people in the U.S. They began by reviewing my resume and asked me about my education, my capstone project at CMU, and my present project. After about twenty minutes, they gave me some problems to solve. The problems were simple (They were about Linked-lists and Binary-tree) and I had no problem with the answers. After that, they moved to programming concept and asked me many questions about Object Oriented Design in which I answered accordingly. (I think anyone who study Computer Science or Software Engineering should be able to answer these questions). We continued on several topics mostly about software quality. I mentioned Quality attributes such as Maintainability, Scalability, Performance and Security which seemed surprised them. Later I learned that most candidates only referred software quality to defect. While I was explaining to them about secured coding, one person suddenly stopped me: “Could you come to our office in Beijing next week, I wanted you to meet someone.” Of course, I told him that I am available for additional interview. They said that they will send me an email with the details and the “screening interview” was over. It lasted about 45 minutes but it seemed much longer than that but I was very happy because I thought that I did well.

The next interview happened at Microsoft office in Beijing. The place had a different atmosphere as compare with our company. It was bright and had a lot of pictures, a small table with coffee pots and lot of snack foods. The receptionist offered me coffee but I declined. After waiting for about 15 minutes, I was asked to go into a small room with a large white board.

The first interview was conducted by three young people about the same age as mine. They were polite but seemed serious and it made me a little nervous. Two of them asked most questions when the other was taking notes on his laptops. I felt uncomfortable because he typed very fast as he recorded everything I said. The interview began with a problem where I had to write code on the whiteboard. I asked what programming language that they preferred and they told me that I could select any language so I chose C++. The problem was relatively easy and I did it with about 50 lines of code. They looked at it then took a picture of what I wrote on the board with their phone camera. The next several problems were more difficult. Some of them were very challenging like a puzzle that I must solve by putting pieces together. The last question was about designing a system where they wanted me to started from the beginning of the development process with context diagrams, design diagrams, and class diagrams and explained to them how do I come up with that logic before any coding. They challenged my design and asked me about tradeoff analysis. As I explained to them how my design could work but they keep interrupted and asked me a lot of question about “What if …” I knew what they wanted were several alternative solutions rather than just a single solution. I explained to them how I came up with this design rather than others as I did considered them. I explained about design efficiency and performance as contrast with other alternatives. They seemed pleased but no one said anything.  Most of these problems were associated with data structures, sorting, searching, binary, and Bayesian logic. It lasted over two hours then they asked me if I wanted anything before they left the room. I had about fifteen minutes break before the next interview but my mind was busy as I kept asking myself on how I did in the first interview.

The second interview was conducted by two managers, a Chinese and an American. They were very kind and asked me if I wanted to use English or Chinese. I answered that since I attended CMU in the U.S. I would use English instead. This seemed to please both of them. Later I learned that the conversation was to test my communication skills as if I got hired, I would have to work in both China and the U.S. Unlike other interview where I had to discuss programming, this interview was mostly about my knowledge on software lifecycle, process, and methods. They wanted me to describe in details each phase of the software lifecycle, the entry and exit criteria. They also wanted me to compare and contrast between the Plan-driven and Agile approach. It seemed that they were interested in my thought process, my analytical and problem solving skills. They gave me several scenarios and asked me to solve. The first was fairly easy but after that they went deeper into more details, and more difficult problems. Occasionally they would give me some hints as they did not expect me to be perfect. Although they were very kind and patient, I felt very stressful about this type of scenario interview. I did not remember much because there were several but one scenario stuck in my mind. This was one of the case studies that Professor Vu always taught in his course: “How do you recognize a disaster project that was completely out of control and how do you fix it.” As I explained step by step to identify, analyzed, re-organize, and re-planning the project just like I learned at CMU, I could feel that they were surprised. They looked at each other and kept nodding their heads. I knew that I did well. When I finished, one manager told me: “It seemed that you do have experience in software project management. Tell me about your management experience.” I explained to them about the important of project management such as “Working with customers to get requirements, involving team members into estimating and commitments.” They seemed happy but did not say anything but I knew that I was heading in the right direction.

The third interview happened at lunch. Another senior manager took me to a nearby restaurant. We did not talk about design or code but the conversation was about my view on the future of the software industry. He asked me what I think about cloud computing and mobile apps as well as what areas that I was interested in. The topics then suddenly switched to unexpected areas as he went from one topic to another. He asked about globalization and the “Flat world” then switched to crowd-sourcing and entrepreneurship. I had to admit that if I did not follow Professor Vu blog at CMU, I could not answer most of these topics. Later I learned that Microsoft wanted their employees be knowledgeable about many things, not just technical or programming. Since I did answer most of the questions, he seemed very please and told me that many candidates did not do well in these topics. He commented: “It seemed that you do read a lot and know what is happening in the industry, and I am very please.”

The next interview went back to technical aspects. This time I had to write more code but they were more interested in my algorithms as they kept asking me if I could do better. I knew what they were looking for was optimization. Almost every algorithm I wrote must be optimized enough to handle sophisticated transactions. Later I learned that they did not expect that I only wrote code that works but wanted to push me to the point that I would gave-up, this gave them the exact capability of the applicants. I also had to say that people who interviewed me were technical managers, they knew what to ask and knew how to appreciate good code and well designed works. Most managers in my current company were not technical. They were what we called “Manager based on relationships” because they got their positions based on who they knew and family connection rather than their abilities and skills.

I had a mixed feeling when I walked out of the office. I did not know whether I did well or not. At least I did whatever I could. Two weeks later, I got a call from Microsoft and they offered me a position at the Microsoft Research Asia in Beijing. I will spend six months training at Microsoft in Redmond, Washington then start to work in Beijing. My job will require me to travel between both countries several times a year since I speak very good English as compare with other candidates. Later I found that I did so well so instead of the software developer position that they had in mind when I applied, their managers decided to gave me a team leader position to lead a small project.

At last my dream to work for Microsoft became a reality. I wrote this experience to share with you and hope that some of you will have an experience like mine.