Sunday, April 27, 2014

On being busy


I am busy, you are busy, everybody is busy. Being busy and working hard are conventional indicators of a workplace hero, a model managers want their subordinates to follow. In his book, Outliers, author Malcolm Gladwell stated that it takes roughly ten thousand hours of practice to achieve mastery in a field. By the point the book gained its fame, many arguments against the point, that ten thousand hours may not make a master after all, were made. While Gladwell made a solid point that everyday hard work beats natural talent, I believe that mastery is a complex entity that can’t be measured by a single-dimensional unit. And here is why.

If we understand being busy as doing more work, for longer hours, giving up evenings and weekends, then the busier an engineer is, the closer she is to master her craft? Interestingly, this instinctive appreciation of hard work turns out to be a problem when it comes to managing knowledge workers. 

Imaging there are two developer teams, same environment, same requirement.

Team Hercules appear to work really hard. There is constant activity in the team. They would often be seen working into the night and at weekends. Everyone would drop what they were doing to help production errors, often by offering their guesses on what could have gone wrong. Every deploy is a herculean joint effort of everyone. Their code base has long procedures here and there where all the stuff happens.

Team Apollo work no more than eight hours a day. They never work weekends and rarely spend hours around each other’s desk throwing out guesses about system errors. They deploy every day with an engineer or two. Their code base consists of small classes and methods with just a few lines of code. The work is a collection of design patterns, the SOLID principles and unit testing.

To a casual observer, the first team is working really hard and the second one isn’t. Hard work is good and laziness is bad, no? And if pay rises are given based on performance, which team is qualified? Team Hercules are putting together all what they have got for success, time and effort. But in the nutshell, they seem to be in a death match, burning their stamina to the last drop. The journey of mastering a craft is not one crazy intensive stressful period but years of practice. One needs to maintain a sustainable pace so that she wouldn’t be burned out by the time her effort bears fruit. 

Software development is new, unfamiliar to anything man kind have done in previous centuries. Conventional metrics that have been hard wired into our instinct won’t work in that new found land. Software developers should by judged by results, by working software, not by how hard they appear to be working. I would submit that the appearance of hard work is often an indication of failure. Being good at virtually anything is like figure-staking - the definition of being good at it is being able to make it look elegantly easy. But it never is easy, just that’s what people conveniently stupidly forget.

==========================



Tôi bận, anh bận, ai cũng bận. Bận rộn và làm việc chăm chỉ là hình ảnh tiêu biểu của một siêu nhân văn phòng, hình mẫu các sếp luôn muốn nhân viên mình noi theo. Trong cuốn Outliers, tác giả Malcolm Gladwell nhấn mạnh rằng cần xấp xỉ mười ngàn giờ luyện tập để thành thục một lĩnh vực bất kỳ. Khi cuốn sách tạo được tiếng vang trong đọc giả, đã có những quan điểm trái chiều xuất hiện, rằng mười ngàn giờ suy cho cùng không làm nên tài năng. Dù Gladwell hoàn toàn đúng khi chỉ ra rằng làm việc cần cù quan trọng hơn khả năng thiên bẩm, cá nhân tôi tin rằng một hoá trình luyện tập phức tạp thì khó đo đếm bằng một đại lượng đơn chiều. Tại sao?

Nếu hiểu bận rộn là làm nhiều việc hơn, nhiều giờ hơn, và, hy sinh ngày đêm và cuối tuần, vậy một kỹ sư càng bận rộn sẽ có tay nghề càng cao? Ngộ cái, tiềm thức đánh giá cao việc cày ải lại mang đến nhiều rắc rối khi quản lý giới trí thức. 

Tưởng tượng hai đội developer, cùng môi trường, cùng yêu cầu.

Đội Hercules rất chăm cày bừa. Trong đội, luôn có dòng chảy công việc cuồn cuộn. Họ thường làm việc ngày đêm và cả cuối tuần nữa. Mọi người luôn sẵn sàng bỏ ngang việc của mình để giúp sửa lỗi trong hệ thống, thường bằng cách đoán xem điều gì đang diễn ra trong những đoạn code hàng trăm dòng. Mỗi lần "đi đẻ” (deploy) là một đêm trắng của mọi người.

Đội Apollo làm ngày không quá tám tiếng y như tinh thần ngày 1/5. Hiếm khi bu lại "diệt sâu bọ” và chẳng khi nào làm việc vào cuối tuần. Ngày nào cũng có một hai người deploy code mới lên server. Nhìn code của Apollo, thấy toàn classes nhỏ, mỗi methods có vài dòng. Dự án có đủ design patterns, nguyên tắc SOLID và unit testing.

Từ bên ngoài, Hercules rất chăm chỉ, còn Apollo thì không. Chăm chỉ tốt, lười biếng xấu. đúng hông? Và nếu mức lương phản ánh năng lực làm việc, đội nào nên được thưởng cho nỗ lực của mình? Đội Hercules có lẽ đang dành tất cả tâm huyết của mình vào dự án, nhưng cách họ làm việc không phải là cách mà người ta nuôi dưỡng sức bền. Không ai liên tục làm việc như cảm tử quân được quá vài năm cả. Phần lớn mọi người cần nuôi dưỡng tinh anh của mình theo một tốc độ bền vững, để khi nỗ lực thành công, vẫn còn trẻ, khoẻ và đẹp lão.

Nghề lập trình là một nghề mới, khác lạ với cách lao động của con người trong nhiều thế kỷ trước đó. Những đại lượng truyền thống thâm canh cố đế trong tiềm thức con người phản tác dụng trên mảnh đất chưa khai phá này. Developers cần được đánh giá theo kết quả, theo sản phẩm, chứ không phải bằng việc cày ải. Tôi thực sự tin rằng, trong nghề này, cày cuốc là một dấu hiệu đáng ngại. Giỏi bất kỳ việc gì cũng giống như trượt băng nghệ thuật - càng giỏi càng trông thật dễ dàng. Nhưng thực chất chẳng bao giờ dễ dàng cả. Đây là điều những kẻ ngớ ngẩn toàn quên.

Monday, March 24, 2014

7 things I learned from software industry



  1. An old fox ain't safe to trap. There are people with 10 years of experience in their CVs, but actually have a year of experience repeating 10 times. Each language, framework is meant to solve its own set of problems. A developer who fails to renew his knowledge everyday is like a carpenter without a toolbox, resorting to hammer a nail with a wrench. Usable, but simply not what someone in his right mind would do
  2. Get out of your station once in a while. Meet more people, from all kind of careers and classes. Information Technology doesn't exist on its own but forms symbiosis relationships with other industries by providing additional values. In every career, people with rich experience outside of their professions are always appreciated. Especially in IT, the more a developer understands his users, the more down to earth his solutions are.
  3. Quality is free, if you invest heavily for it. That being said, a good product isn't built by money. A good product is a result of multiple factors, such as capable developer, sufficient hardware power, suitable working environment, etc. and each of them needs (lot of) money. Interesting enough, investing in quality is a long-term cost reduction solution. Developers who compromise the quality of their work for the sake of cost reduction can look up to Japan, the country where the idea quality and cost reduction are two sides of a coin is well spread.
  4. This is a hard job. Don't let luxurious office like that of Google or cool gadgets fool your mind. Developers are 21st century farmers. For one thing, I am pretty confident that developers kill just as many bug as farmers do. While farmers can sleep tight at 2AM, the risk for a developer to be waken up because of a crash server is very real. Even worse, everyday some where in the earth, a developer is tearing his hair off, for his hard written code is to be removed as the spec has changed. Big thank to clients who have "mastered" the art of Lean Startup.
  5. "Good developer doesn't need test". Together with "I will get back to it tomorrow" are the two biggest lies in the whole IT industry. Unless you are the almighty Chuck Norris. Chuck Norris' code doesn't have bug. His code always works. ALWAYS. He kills bugs by staring at them.
  6. Argument is good. I am not criticizing walking away from an intensive argument as a cowardly act. I believe in a healthy argumentative and non-consensus culture where the need to follow courtesy and command from upper level is not overrated. Argument needs to be based on the good will of understanding and sharing. An argument whose goal is to win the fight is intellectually bullshit and no better than a trivial slander.
  7. The high-tech illusion. In their casual conversations, developers tend to drop phases such as "in computer science" or "the IT people", implying they are part of the high-tech world. Just among us, we usually aren't. The researchers who made fundamental breakthroughs are in the high-tech world. The rest of us are appliers of their work. And because we go about this work in teams and projects, we are more like in the human communication business. Our successes stem from good interactions between team members and our failures stem from poor ones. So the next time you are in a death match, it might not because your developers don't know how C pointer works, they might haven't read "How to win friends and influence people".

===================================================


  1. Sống lâu không lên lão làng. Có những người CV 10 năm kinh nghiệm nhưng thật ra là 1 năm kinh nghiệm lặp lại 10 lần. Mỗi ngôn ngữ, framework được tạo ra để giải quyết một bài toán của riêng mình. Developer kiến thức hạn hẹp, không được làm mới mỗi ngày cũng giống như anh thợ mộc không đủ đồ nghề, dùng cờ lê để đóng đinh. Vẫn dùng được, nhưng méo mó vặn vẹo và dễ lên tăng-xông.
  2. Đặt bàn phím xuống và đi. Gặp nhiều người hơn, những con người đủ loại ngành nghề và tầng lớp. Công nghệ thông tin không tồn tại riêng lẻ, mà tựa lưng vào những nhóm ngành khác, đóng góp giá trị gia tăng. Bất kỳ nghề nghiệp nào cũng hoan nghênh những con người có vốn sống đa dạng. Đặc biệt với CNTT, vốn sống là vựa ý tưởng, đưa sản phẩm đến gần hơn với người dùng.
  3. Chất lượng không mất tiền mua; nhưng tiền không có, chẳng thấy chất đâu. Sự thật, sản phẩm tốt không mua được bằng tiền. Để có sản phẩm tốt, bạn cần có developers giỏi, server mạnh, môi trường làm việc phù hợp, etc, và mỗi thứ đó đều cần (rất nhiều) tiền. Thú vị hơn đầu tư vào chất lượng là giải pháp giảm chi phí lâu dài. Những developers thoả hiệp chất lượng để giảm chi phí nên học tập người Nhật, nơi quan điểm chất lượng và giảm chi phí song hành.
  4. Đời rất dở nhưng vẫn phải niềm nở. Lập trình là một nghề vất vả. Đừng bị văn phòng lung linh như Google và đủ thứ đồ chơi làm mờ mắt, làm nghề này cực chả khác đi đồng. Ngoài chuyện bắt sâu bọ, developer còn có cơ bị lôi đầu dạy lúc 2 giờ sáng vì server sập. Hãi nhất là khách hàng "quán triệt” tư tưởng Lean Startup, specs đồi xoành xoạch. Lợi thì có lợi nhưng răng không còn. Nay làm mai sửa, mà vẫn phải cắm mặt làm, code vị nhân sinh anh ơi!
  5. "Developer giỏi không cần test". Cùng với câu "Để đó mai sửa" là hai câu nói dối vĩ đại nhất trong lịch sử nghề lập trình. Trừ khi bạn là lão Chuck Norris xứ Mỹ. Code của lão khi nào cũng chạy và luôn luôn đúng. Giai thoại đồn rằng lão chỉ cần nhìn code chằm chằm là nó tự sửa.
  6. Trang luận là tốt. Không phải tôi chê "một điều nhịn là chín điều lành", cũng không cổ suý "một điều nhịn là chín điều nhục". Tôi tin vào một văn hoá tranh luận và không nhất trí khoẻ mạnh, nơi sự lịch thiệp và mệnh lệnh ở trên truyền xuống không quá quan trọng. Tranh luận có văn hoá lấy chia sẻ và thấu hiểu làm nền tảng. Bước vào cuộc tranh cãi với mục đích duy nhất là dành phần đúng về mình thì đó là một cuộc mạt xát và thoá mạ.
  7. Ảo tưởng vĩ đại. Trong các buổi chuyện trò, dân máy tính thường có những câu đệm "trong ngành khoa học máy tính" hay "giới công nghệ thông tin", hàm ý mình góp một phần trong bức tranh công nghệ cao. Thực chất ta không "công nghệ cao" như mơ. Ngoài một nhóm nhỏ các nhà nghiên cứu đầu ngành, đại đa số dân công nghệ dừng lại ở ứng dụng các nghiên cứu đó. Và việc này ta làm theo nhóm, theo dự án. Tất thảy chúng ta đều trong ngành nhân sự thì đúng hơn. Thành công trong công việc đến từ sự liên kết của các cá nhân trong tập thể, và thất bại từ sự lỏng lẻo trong chính các liên kết ấy. Vậy nên lần tới dự án sa lầy, có thể không phải vì các developers không biết con trỏ trong C, mà vì họ chưa đọc "Đắc nhân tâm".

Wednesday, January 8, 2014

RMIT high school tour speech

The speech was to commence the RMIT high school tour for Tran Khai Nguyen, December 2013, and from then, has been revised multiple times for subsequent tours.


Hi guys,

My name is Khang, I am an RMIT alumnus and a software engineer. The slide behind me is showing all the major achievements I have acquired over the last 5 years. But I know that no one really cares about those, neither do I and that isn't the reason why I am here today. I was asked by the school to share about my studying and working experience. That is quite a challenge. I graduated from high school in 2008 and my memory about that period is vague. But I do remember the confusion I felt during those years, overwhelmed by all the options of life. So today I want to tell you three stories of my life, over a course of events that eventually define me as who I am.

The first story is about surviving high school.

High school was always a bit lonely to me. Don't get me wrong, I had friends in at school and I love them. We still hang out with each other very frequently. But there wasn't anyone who shared the same interests with me. My friends were at the age when girls knew about the names of Taiwanese F4 better than the names of boys in their class, and boys were all crazy about cool gadgets, mp3 and mobile phone. I don't know how much the situation has changed, perhaps it is about Kim Tan and iPhone now?
I was a little bit different. I spent most of my time with books, found the "boring" subjects like history and geography quite interesting and sometimes enjoyed talking with my teachers more than with my friends. So I was quite a misfit. But all of sudden, thing changed when I went to college. I started to meet other computer geeks and book lovers, and what I wanted to do in my life began to get in shape.
I think there have also been moments in your life when you feel left out and don't know where you are supposed to be. Don't worry, that is just the way high school is. There will be times when your life sucks, but one day you will be given the chance to determine how the story of your life would be written. Until there, be prepared.

My second story is about understanding what I want.

After high school, I got accepted to both HCM University of Technology and FTU (Bách Khoa and Ngoại Thương respectively), two of the most prestigious education institutes in south of Vietnam. Didn't really like FTU but my father did, so I tried anyway. And you know how the days at FTU felt like? Felt like high school. The young kids around me were all excited about being bankers, brokers or marketers and I was like "how is Windows Server different from the one I am having on my desktop?". And I was certain that I didn't want to experience being a misfit again. I dropped out after 3 days and went to HCM UT instead. And I thought I would be happy now, I was in an engineering school and supposed to eat, pray, love with computer science over the next 5 years. It turned to be, well, quite misleading. The staff were bureaucratic and unfriendly. And I couldn't understand how the courses would possibly make me a better engineer. I was learning the exact same stuff my father was, 30 years ago (given the speed of technology, 30 years is a very long time, it is pre-internet era).
I don't remember if I have ever been more scared and lost and confused in my life. I had two options, and both didn't work out. Fortunately, at that difficult time, I received a scholarship offer from RMIT, the school which I applied 2-3 months before. I was saved. I am not going to brag about RMIT from this point on, but as you proceed on the tour, I hope you will get the same excitement I got when I came to RMIT.
So I have learned that when life gives you the chance to write your story, make sure you follow no one else wish but the call of your heart. Or else you will suffer.

The last story is about connecting the dots.

As you can see on the list, acquiring an internship in Taipei, Taiwan is one of the most important milestone in my career which leads me to the position I am today. But the actual story began far before that. During my years at RMIT, I had done quite a few things. I founded the IT Club (which I am happy to announce that is still strong and operating till today). I engaged into multiple discussions with my professors (I am still the same kid who enjoys talking with older people). And I organized MultiUni and was a TA in the first iOS programming course ever in Vietnam. I had no hope for a practical application in my life from doing these things. I did them because they were fun. And I loved it, I was satisfied just by doing what I loved. But gradually, somehow the dots of my life connected together. One of my professors acknowledged my ability and arranged me an overseas internship. That was just amazing.
I have learned that we can't connect the dots looking forward, it only starts to make sense when we look at them backwards. So you have to trust that the dots will somehow connect in your future, You have to trust in something, your gut, destiny, love, whatever. And life will put the rest into the right place.

If there is a common theme in my three stories, I believe it is figuring what you want to do in your life and work your way towards that. And for a high school student, I know it is easier said than done. But again don't worry, the fact that you are worried for your future is indeed a good sign. It shows that you are mature enough to be responsible for your life, and people with that attitude are destined to be successful. And whenever you feel lost, remember that you are not alone. You always have your family, school and friends by your side, supporting you on the rough journey ahead.

Now go exploring what RMIT has to offer.

Thank you very much.

Monday, December 23, 2013

Thiếu nữ


(Scroll down for Vietnamese)

"Thiếu nữ" is an attempt of mine playing with the words. It can mean either "young lady" or "lack of women". And the latter is exactly how I would describe my college, my company and this whole industry in general.

I have always been saying with young students I meet that being an engineer is kinda a gift, the power of playing god, or "make things happen" like how the recent startup culture would put it. However I have never mentioned that when I was in college, there was only one girl in my whole department (yeah, department, not a single class). There wasn't another one until my very last semester there. And then, even in my company, where I have always thought of as a place to envision, create and believe my own universe, there were like 4 girls in the heyday, only one of them was an engineer.

Why we are in this stage of "thiếu nữ" has been a reoccurring topic of our water-cooler talks.

Though the society is moving towards the direction where human beings are given more chances to fulfill their potential, there are still many prejudges going on, some at a very early stage of childhood. By default, girls are believed to have a natural love for pink color and dolls and all would like to become singer or actress when grow up. And the education system, especially that of a third world country like Vietnam, is not helping the situation at all. Instead of experiencing new schools of thought and acquiring benefits of diversity, our young girls are receiving this stereotyping education that doesn't do anything good other than strengthening those misleading prejudges since early ages. Even in India, a country where the IT industry revolutionizes the whole economy, engineering is still considered a "man's thing" (I learned this from the movie 3 idiots - IMDB 8.3, I can be horribly wrong. Please tell me if I am)

I also heard from this dilettante fellow that since the age of hunting and gathering, women were adapted to the kind of safe, repetitive and tedious tasks. So a woman would need to overcome a few intuitive barriers when pursuing a career in STEM. But of course that fellow of mine also said that there was no flirting back then, one just hit girls in the head and bring them home. So yeah, not a very scientific evidence to me.

General speaking, people still believe that IT is kind of hostile to women. The career requires one to commit to a lifelong learning along with tremendous stress prior to release days and provides relatively high pay but not as good as that of a lawyer or banker. But the female engineers that I come to know in person possess an amazing combination of intelligence and meticulousness, enabling them to contribute to the work force uniquely.

Girls are rarely more than 20% of the demographics in IT. Given that situation, whatever their official positions are, they are all CMO (Chief Morale Officer) of their work place. Boys, thank to the magic of evolution, have developed a weird conditional reaction that under girl's presence, their blood is fueled with adrenaline, their voice gets deeper and they smile ridiculously more often. I should convince Nielsen to confirm my theory but really, I have a strong feeling that in companies whose gender ratio is balance, coffee and energy drink are all unnecessary.

For a comfort seeker, IT is probably the worst career choice ever. The project spec changes on daily basis, the client always starts with "It is pretty simple, just …" and the number of overnight computer usage makes every cardiologist happy. Hence it is quite crucial to have a effective stress releasing mechanism. Men have this huge ego that more often than not prevents getting burden off their chest. Women, on the other hand, are notorious for gossips. Though I see gossip a controversial topic, can't deny that it is an effective way to blow off stream. A stable mind always makes women reliable members for long-term projects.

Ever heard of "too many chefs spoil the broth"? That happens everyday in IT projects. Software engineers are creative individuals, but nothing sends a project off track faster than a bunch of creative minds. To save the broth, it is a must to kill of the beloved ideas. But killing an idea is an art, not an act of a butcher. No one would like to ruin their friendship while trying to justify an idea is in appropriate. Women start to deal with attention from men since high school. By the time they graduate and join the work force, besides the bachelor degrees, many also have a black bell on the art of saying no. Few men ever reach that level of sophistication.

At the end of the day, the real reason we have so few female programmers is that we are working in an increasingly unpleasant environment for women who code, created by the very male colleagues, either deliberately or accidentally. Their talent is hardly fully appreciated. On the contrary, they are considered barbies in the office "oh... you actually like to code, I thought girls don't like it". Many feel like they are being "interviewed each and every day" as they need to repeatedly prove their technical prowess and their technical decisions are doubted. One of the important moments of growing up is to realize that life is not fair, and one has to accept it as a part of life. If you are male and also happen to work in software development, chances are that you are on the positive side of the scale, a result of a chain of unfair events in life, too comfortable to realize that pursue passion is not that simple for many people.



===================================================


Thiếu nữ | danh từ 
Người con gái trong lứa tuổi dưới thanh nữ


Nếu bạn hiểu "thiếu nữ" theo nghĩa như trên thì coi như bạn chưa đến mức bấn cùng. Lớp học của tôi thiếu nữ. Công ty tôi rạch một bọn thiếu nữ. Cả cái ngành này thiếu nữ.

Tôi thường lải nhải với sinh viên ngành này, những đứa mặt còn lún phún lông tơ, má phúng phính hồng hào, rằng làm một kỹ sư là một sự tuyệt vời, ví như chúa trời kiến tạo, bọn Mỹ gọi là "make things happen". Điều tôi chưa khi nào nói là hồi đó cả khoa (khoa, không phải lớp) có một sinh viên nữ duy nhất, học cùng khoá với tôi. Đến học kỳ cuối thì có thêm một em gái nữa vào học. Và công ty tôi vào thời đỉnh cao (tại giờ xìu rồi) cũng chỉ có bốn nữ, mà chỉ có một là kỹ sư.

Tôi và các đồng nghiệp vẫn thường lôi chuyện tại sao khối ngành khoa học - kỹ thuật le que được vài bóng hồng ra tám

Vẫn nói cha mẹ sinh con trời sinh tánh, nhưng mà từ nhỏ những đứa con gái đã được (bị) mặc định thích màu hồng, chơi búp bê và mơ lớn lên là ca sỹ diễn viên, thì sau này khó mà thấy cái màn hình máy tính hấp dẫn lắm, đặc biệt là màn hình phẳng. Lớn lên một chút, các bé bắt đầu sự học của mình. Nền giáo dục nước nhà vô cùng kinh điển và nhất quán, bài làm văn lợn nào lợn nấy to bằng cái phích, em bé đứa nào cũng núc ních cổ tay trong từng ngấn như tôm hùm và ông nội nào cũng râu tóc bạc phơ như một ông tiên, chiều chiều ngồi đánh cờ với ông Tám nhà bên râu tóc cũng bạc phơ như một ông tiên khác. Vậy là thay vì tiếp nhận các luồng tư tưởng mới mẻ, các bé gái lại càng ít điều kiện thoát ra khỏi khuôn mẫu xã hội. Ai có coi qua 3 idiots (IMDB 8.3) có đoạn "con trai làm kỹ sư, con gái làm bác sỹ" là vậy.

Có thằng tỏ vẻ uyên thâm thì lôi ra suốt từ thời Bàng Cổ, đàn ông săn bắn, đàn bà hái lượm và nghe đồn rằng không cần cưa cẩm, đập đầu vác về hang là được, thì phụ nữ đã có xu hướng làm những công việc tỉ mẩn, có tính lập lại và an toàn cao. Người phụ nữ làm cái nghề nay xây, mai phá này phải chống chọi với mấy ngàn năm tiềm thức. 

Chung qui lại nhiều người hay nói nghề này kén nữ lắm (tôi nghĩ nghề thái giám kén hơn), cứ phải chạy theo công nghê, giờ giấc thất thường, áp lực kinh hoàng…. Nhưng có lăn lê với nghề mới thấy các chị thông minh, sắc xảo khác gì cánh đàn ông, lại có cái tỉ mỉ của đàn bà, họ đóng góp rất lớn vào công việc mà đôi khi nam nhân không bì được.

Trong một môi trường mà nữ giới hiếm khi nào quá 20% dân số, các nàng dù ở vị trí nào cũng đều thành những CMO (Chief Morale Officer). Chỉ cần nhát thấy bóng gái, lũ con trai, trải qua bao đời, đã tích được một loại phản ứng có điều kiện kỳ quặc là andrenaline chạy rần rần trong máu, giọng trầm bổng và hay cười vu vơ. Không biết Nielsen đã làm khảo sát chưa, nhưng dự là những công ty cán cân giới tính cân bằng thì các loại cà phê, bò húc đều thừa thải cả.

Làm cái nghề mà spec nay làm mai đổi, khách hàng cửa miệng "đơn giản mà" và số giờ ôm máy tinh nửa đêm làm ổn định thu nhập mọi bác sỹ tim mạch, có một cơ chế giải toả hiệu quả rất quan trọng. Tính tự trọng của đàn ông ngăn họ than vãn những điều mình đang khó thở. Đàn bà luôn có những hội nhóm túm năm tụm ba, tuy là chia sẻ thì ít mà nói xấu thì nhiều nhưng dẫu sao vẫn nhiều cửa giải toả cơn ấm ức. Tinh thần ổn định luôn khiến phụ nữ thành người bạn đồng hành tốt cho những dự án dài hơi.

Sản phẩm chỉ có một nhưng ý tưởng luôn có xu hướng bay xa, bay cao và bay lạc đề. Nên phải giết, vì không ai muốn làm dâu trăm họ. Nhưng phải giết có ý tứ, nhẹ nhàng, để lần sau còn nhìn mặt nhau. Người giết ý tưởng là một nghệ sỹ chứ không phải thằng hàng thịt bụng mỡ sáu múi dồn một. Chuyện này phụ nữ có lợi thế hơn hẳn. Họ bắt đầu dập tắc ý tưởng bở của các chàng trai chíp hôi mặt mụn từ thời cấp ba, đến khi ra trường, ngoài bằng cử nhân còn có thêm đai đen nghệ thuật nói không. Ý tưởng bị giết ngọt như mía lau mà các cậu trai ngu khờ nào hay nào biết.

Suy cho cùng lý do ngành IT vẫn mãi "thiếu nữ" là vì môi trường làm việc kém thân thiện, gây nên bởi chính những nam đồng nghiệp trong ngành, dù cố ý hay vô ý. Tài năng của những nữ kỹ sư hiếm khi được nhìn nhận đích đáng, ngược lại, họ bị xem là những barbie trong văn phòng "oh… em biết code à, anh tưởng con gái không thích việc này". Những đề xuất kỹ thuật của họ bị nghi ngờ và thường xuyên bị "phỏng vấn" để chứng minh khả năng của mình. Một trong những thời điểm quan trọng khi trưởng thành là bạn ngộ ra xã hội này vốn không công bằng, và bạn phải chấp nhận nó như một phần của cuộc sống. Nếu bạn là nam, và làm cùng ngành với tôi, nhiều khả năng rằng bạn đang ngồi ở cán cân thuận lợi, kết quả của một chuỗi những "đếch công bằng" của cuộc sống, sướng quá nên nhận ra rằng sống với đam mê của mình không hề đơn giản với nhiều người.

Sunday, November 3, 2013

Homework - Bài tập


Learn as much detail about the domain you are working on as possible. Talk with potential clients about their business, product and trouble, though 80% you are an introvert. Visit end-users in their "natural habitat". Those are the homework of a software engineer. Doing homework is meant to improve your understand of the business logic in your current system.

Of all engineering professions, software engineer is one of a kind. No one would possibly ask a traffic engineer to build her house. But a software engineer who built a social network yesterday and is implementing a mobile health care system today, is an everyday story.

In short term, the domain-specific knowledge allows you to work and communicate with your clients in their own language. Which of these below codebases would you rather be working?

if employeeID in PayCheck.get(paycheckID).getEmployeeIds:
if paycheck.include(employee):

Coding in the domain language means you can represent a business concept right in the code. Whenever you skip a domain term, you are introducing a secret understanding that this int over here means the way to identify an employee while that int over there is the way to identify the paycheck this month. And the testers and next engineers inheriting the codebase aren't happy about that.

Programmers "talk" the programming language: classes, objects, and databases. Clients talk in the language of their domain: payroll, social insurance and tax evasion. You could try to translate the two languages, but sooner or later, bugs will creep in. Eventually programmers need to speak the language of their client, not the other way around. A client isn't going to pick up Python 101 and tell you that the payroll is containing some duplicated employeeID, she is more likely telling you she is paying double for a freeloader.

But more importantly, it is about your value as an engineer. You are worth more than your code. Don't accept a job where you're told exactly what to build and how to build it. You need to work somewhere that appreciates your insights into the product as well as your ability to build it. Don't be a guy who has worked in e-commerce for 3 years but can't tell what e-commerce is rather than a shopping cart. I once worked on a mobile health care project. The team leader, despite of having 2 master's degrees from MIT and CMU, knew nothing about a health care system. But she tackled that head on, learned everything she could find about existing systems and legal regulations of the US government and talked to countless physicians and specialists in every conference she happened to attend. To an extend she could tell the difference in procedure between two stages and probably had enough material to write a book about US health care industry.

Nowadays, tools and technologies are advanced and abundant, but more often than not, we often hear of projects in big words that are at the end of the day, empty and meaningless because of the lack of commitment.


=====================================================

Tỉ mẩn tìm hiểu mảng ngành của dự án mình đang tham gia. Trò chuyện với khách hàng tiềm năng về công việc, sản phẩm và những mối lo của họ, dù 80% bạn là người hướng nội. Khảo sát đối tượng của sản phẩm. Đó là bài tập của nghề kỹ sư phần mềm. Làm bài tập đầy đủ là hiểu thêm về hệ thống bạn đang triển khai.

Trong hầm bà lằng thứ kỹ sư, kỹ sư phần mềm nó hơi lạ (không phải vì mềm). Chẳng ai đi hỏi anh kỹ sư cầu đường về xây nhà. Nhưng chuyện anh phần mềm sáng làm mạng xã hội chiều mần hệ thống y tế lại bình thường như cân đường hộp sữa.

Ngày một ngày hai, hiểu biết về mảng ngành đang tham gia giúp bạn làm việc và trao đổi với khách hàng bằng "tiếng mẹ đẻ". Thay kệ bạn biết python hay không, bạn thích làm việc với đoạn code nào hơn?

if employeeID in PayCheck.get(paycheckID).getEmployeeIds:
if paycheck.include(employee):

Tái hiện được khái niệm của mảng ngành qua những dòng lệnh có rất nhiều giá trị. Bất cứ khi nào bạn từ chối ăn nằm với thứ ngôn ngữ thực tế này là bạn đang tích góp một bí mật nho nhỏ "chỉ có hai ta" kiểu như số ở đây là kí kiệu của nhân viên còn số ở kia là kí hiệu bản lương tháng này, lộn là tháng này nhịn. Mà testers và các bạn lập trình viên về sau này thì chúa ghét cái của để dành này, của cho là của nợ mà.

Dân kỹ sư suy nghĩ theo ngôn ngữ lập trình, đủ thứ âm binh classes, objects, và databases, đối với người ngoài thì rất biến thái, vẹo vọ. Còn khách hàng, họ nói bằng ngôn từ của ngành nghề họ: bảng lương, bảo hiểm xã hội và trốn thuế, kiểu vậy. Bạn có thể gắng gọng mà dịch hai thứ ngôn ngữ vốn chả có gì chung chạ này, nhưng không chóng thì chày, bọ cũng bò vào thôi, hồng nào hồng chẳng có gai. Chuyện này dù đúng hay sai, vẫn là bạn phải học thứ ngôn ngữ lạ lẫm kia của khách hàng thôi. Vì sẽ chẳng có chuyện chị client vác sách Python 101 lên và bảo bạn cái bảng lương có mấy mã số nhân viên bị trùng. Chị sẽ cất giọng nam cao 5 quãng 8 mà bảo rằng mình đang phải trả lương gấp đôi cho một thằng ất ơ nào ấy.

Đùa chút thôi, chuyện này còn quan trọng hơn, nó can dự đến giá trị của bạn. Gọi mình là kỹ sư phần mềm, bạn phải có biết rằng bạn đáng giá hơn cái máy chuyển hoá pizza và cà phê thành code. Đừng dễ dãi nhận một công việc mà bạn được dắt tay từng thứ một. Để nuôi lớn khả năng của mình, hãy làm việc với những người biết đáng giá cao kiến thức và ý kiến của bạn. Đừng gọi mình là kỹ sư nếu sau 3 năm ăn nằm với thương mại điện tử, bạn vẫn chả biết thương mạng điện tử khác với cái giỏ hàng thế nào. Ở thì quá khứ chưa xa xôi lắm, tôi từng theo đuổi một dự án theo dõi sức khoẻ qua di động. Chị trưởng nhóm, dù dắt lưng 2 tấm bằng thạc sỹ, ở cả MIT và CMU, lơ ngơ như bò đeo nơ về hệ thống chăm sóc sức khoẻ cũng như các chế tài tại Mỹ, thị trường chính của sản phẩm. Nhưng chị dấn thân lắm, đọc tất cả những gì tìm được về những hệ thống hiện hành và các qui định pháp luật. Chị gặp những người làm trong ngành y tế để trò chuyện còn nhiều hơn gặp ba mẹ mình. Đến độ chị giờ kể vanh vách chế tài của 2 bang khác nhau ra sao, và có lẽ đủ tư liệu để viết sách về nền y tế Huê Kỳ.

Ngày nay, công cụ và kỹ thuật tiên tiến đầy rẫy, nhiều khi đến thừa mứa, 1 việc mà đến hai ba tools. Nhưng vẫn đầy ra những dự án đao to búa lớn và thất bại thậm tệ chỉ vì biếng nhác cống hiến với nghề.

Saturday, September 7, 2013

RMIT Internship Q & A

Answer:
I choose this to be the first question to answer because I can tightly relate to it, back when I was preparing for my internship. Unfortunately, with all the small talks and experience I have collected, this is the type of question you have to look inside yourself to find an answer.
An enterprise is an established business. It has a stable business model, long-term business partners and sufficient resources to overcome market glitches. Being able to survive in the ferocious industry is an indicator that an enterprise knows a lot of things and has done a number of things right. Derived from that experience are a number of methodologies, policies and procedures that cover at the very least core-business activities. Joining an enterprise is a secured career option. It is not very likely that the company will be out of business in the matter of months, usually that happens over the course of couple of years. Look at Nokia or BlackBarry for example. You will be benefited from the experience of the company through various forms, e.g. training, documentation and mentorship. Your working environment is likely to be more luxury than that of your startup colleagues (though in Vietnam and over the world, the gap is narrowing down). A standard enterprise would provide you with hardware devices, free lunch, medical care, social insurance coverage, Tet bonus and everything else that is required by the labour law.
However, enterprises are no utopia. Due to its size, an enterprise is structured in ways that make most of its employees replaceable, even at manager level. A set of lego is my favorite metaphor for this. The number of employees in an enterprise might also be an issue. On one hand, your existence will be so insignificant that no one would know if you were eaten by a lion (good-old IBM joke). On the other hand, you might get crushed under peer pressure. Unilever is very notorious for this, every year it recruits hundreds of management trainees and lets them fight till death. Every enterprise would have a handful of long-term partners, which provide a stable source of income. But these long-lasting partnerships are placed on top of legacy systems, developed, who know, 20-30 years ago. For example, Cobol is a very ancient programming language, which was responsible for the infamous Y2K. By the time I took my internship in 2010, CSC was still known for providing technical support to such systems.
Compared to enterprises, startups are on the other extreme. Startups are on hype all over the world. Everyone talks about it. Startups attracts a lot of talents because it gives people a chance to visualize their own universe where imagination is the only limits. For anything you do, there might be a chance that you are the first one ever set out to do it, solving a unique problem for mankind. Oh Jesus Chris, the feeling that you are pushing the edge of the world, that is good. For experienced developers, startups hit a sweet spot when bureaucratic policies are replaced by the freedom to establish new standards. If you noticed, most of the new things in software industry came from startups, e.g Agile for methodology or RoR for development. Last but not least startups have been making countless founders and core-members millionaires. When Instagram was acquired with ONE-BILLION USD, it had around 12 members, effectively everyone of them can have their own yacht and island now.
But startup is a risky path. For every successful startup, 99 others fails. The working environment and benefit package in most of startups are every limited. Many founders and startup employees live on minimum wage or below until the business takes off, or fail miserably. Oh hey, but too much funding in an early stage can kill a startup too (Color of Bill Nguyen, or Skunkworks right in Vietnam are bold examples). Working in a startup is very stressful. It is a common belief that if you are working less than 100h/week, your startup is not going to success and investors won’t be convinced. While it sure feels good pushing the edge of the world, the same situation could be described as crawling in the dark if you failed, lost your direction and had no idea where  you were heading to.
There are pros and cons, and learning opportunities in both enterprises and startups. And always remember that this is just an internship. You can fail, you can make a bad choice and you should. What is the worst thing that can happen? You wasted 4 months of your life in a crappy company. But that experience, either sweet or leaves a bad taste, is priceless. He who never fails never succeeds. “You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.” Steve Jobs, 2005.

Answer:
An offer in a job, not only an internship, is the mutual commitment between employer and employee. By providing benefit packages and working environment stated in the offer, an employer has the right to expect its employee to legally hold responsibility for his work. Being paid in an internship is not only an indicator that you are valuable to your employer but also a call for your professionalism in being responsible for your impact to the organization performance.
In RMIT’s official internship agreement, it is stated that monthly allowance is optional. This is a move of the university to lower the entry barrier for some students who have not yet been excellent in their profession (the word “monthly allowance” itself is also to lower the barrier as it indicates that a legal contract is not required). Based on my pure assumption, students who are concerned about paid/unpaid internship are ones that haven’t got any previous experience in the industry. And by considering unpaid internship, students are trying to reduce the pressure they are about to face during the internship. That seems to be a reasonable option, but if you are serious about your career, I suggest not to. An unpaid position is an open message from the organization that your work, not matter how good or bad, is not going to matter, it doesn’t provide value to the organization, it is junk. You have spent a little fortune for your education, you better work on something matters. And this is kinda just for fun but receiving a paycheck after all of the hard work is part of the internship experience too.
Talking about offer, it is important to acknowledge that salary is a small part of an offer. For an internship, that portion is especially small. Ultimately  what an organization has to provide is its working environment, corporation culture and other experience coming along. A few items to notice when considering offers would include
  • The culture the organization is embracing. Refer to the first question to know which type of company fits your taste.
  • The people you are working with. Sometimes, it doesn’t matter what you do, it is who you do it with. An offer receives its incremental value if it comes from an organization where employees are top-notches in particular fields in the industry. Working with these gurus is an priceless experience (which might not always be positive, I know a handful of gurus who are truly sore losers). And the fact that they are gathering is one place is kinda an indicator on its own already.
  • The type of projects you are going to work with. Is that some kind of project that you can freely write about in your school report or is it something you have to sign Non Disclosure Agreement (whether or not you pass the “course” depends on the quality of your reports, it is an important piece)? Is that the type of project you want to work on in the next few years? How do those projects align with your personal development?
  • What are the growth opportunities the company provides? Do them align with your goals in the next few years?
  • And finally salary, aka monthly allowance. As stated earlier, I suggest taking a paid internship rather than an unpaid one. The salary should be sufficient for you to live on it independently. Given the current state of the market, a salary of $300-700 is considered well-paid. You can refer to this survey to get a sense of what is going on in the industry.
    • Don’t jump into the conclusion that a salary is low or high with just the number. As an intern, there is a chance that you won’t be productive in the first few months (read, your entire internship) and that your salary together with other benefits you are receiving are nothing but cost to the company. Investing in an intern is usually a long-term investment, and no fool places all eggs in one basket. Carefully consider what you are receiving in big picture, not just a paycheck.
    • Many companies pay its interns the same amount as entry-level employee. It might mean that the company has a deep pocket. But it is more likely that the company doesn’t provide any special training/treatment to interns and technically you *are* a normal employee under the eyes of your direct boss (monetary award is mutually commitment between two parties, remember?). This does not necessarily mean good or bad, just something as a green horn you should look out for.

Answer: 
Hard work and a lot of luck.
Firstly you should know that you are competing with a lot of native students whose education is tailored for the need of the local market. If your language is not fluent, your CV is not shiny, you have little to no working experience and all you have is a cold contact, your chance to win this competition is extremely slim. The interview processes of different companies are quite identical and if you have been attending WPP workshop, you should know about the art of answering interview questions better that I do now :) So in this answer, I will only focus on the parts before the interview.
Spend time on it, decently. There is no place for luck in this competition. It is not luck that brings you a reference to an overseas internship, it is years of hard work for a nice transcript and reputation among fellow students. It is not luck that your CV passes the screening step, a decent and well-written CV does. And little can luck help to boost your English for an interview, on phone. Furthermore the whole visa a truly a pain in butt. Internship visa is especially troublesome. In many countries, the only visa types that are available are Resident, Work and Visitor visa. Work visa are for professional only and there is a quota on how many expats a company can employ. Visitor visa usually lasts for only 1 month for Vietnamese citizen and visa bearer can’t be employed (legally). Due to its nature, this is something you need to discuss and coordinate closely with your employer. It can easily eat up 2 months of your time, and if it mixes up with exam period, ain’t gonna be nice.
Choose a company. All companies expect long-term value  from investments they make. A fact you should know is that in RMIT Melbourne, there are many Vietnamese students who can’t find an internship over there and have to reluctantly travel back to Vietnam for an employment opportunity. The reason is that companies are concerned about the work permit for the student once his/her education in Australia is over. Compared to native students who speak a faultless language and have no problem with visa, investing in a Vietnamese student is too risky. Same logic applies when you are seeking for an internship overseas.
However, there are two types of companies where being a Vietnamese engineer is an advantage. Firstly, those are companies looking at Vietnam as a potential business partner. The purposes can be various, ranging from extending market to talent acquisition. These companies are in great need to understand about from multiple aspects and a Vietnamese employee is an useful resource. The second type are young (relatively) technology giants, like Google, Facebook or Twitter. These companies succeeded in the new waves of technology and greatly appreciate the power of diversity. They are always try to balance the demographics of employees. When you look into companies of this type, the company size matters. Acquiring visa that permits work in most countries is are troublesome and time consuming process. Unless the company is big enough to have its own legal department, most will pass the burden.
Get a reference. From my experience in recruitment, most companies value hiring opportunities coming from its internal network, aka word-of-mouth reference. So once you have a good idea which company you want to apply to, you need to approach the company from different direction, and as soon as possible. You can approach the company HR’s via social network such as LinkedIn. If your LinkedIn profile is attractive, you will receive many offers, good and bad ones. This might not be common in Vietnam (yet), but quite popular in neighbor countries, like Singapore. Even more effective, you approach the company’s employee through open source project. I really love this approach because not only you gain a valuable internal reference, your application profile can also be pre-filtered. Similarly approach the group of Vietnamese people working in the company :) . Lastly approach the company through developer group, competition and event held by the company. There is actually one last approach which is to become excellent in the field the company is starving for talents, but that is quite hard for students so I don’t really want to stress on.
I assume I should talk about closing an offer as well. But wait, if you are a bright student, you have been studying hard and now you are getting an overseas internship, it is no time for QnA, it is time for party \m/ So perhaps another time, or you can always email me :)

Thursday, August 29, 2013

Cogini Skill Sets - Perceive and Control your own career development.


Ever since the early day, our vision about the company has been clear, to build a fun place to work. Moving towards that direction, countless of remarkable improvements have been made, with joined effort from everyone in the company, from the management board to new interns. The two most significant milestones in our journey of building a fun place to work are our recruitment process and our current office. Believing that hiring is the most important decision a manager can make, we have always been religious about recruitment. For many times, we have said "no" to talented people who could bring immediate effect to the work place because we didn't think it was a good culture fit and would eventually be a long-term harm. The new office on District 7 and all the nice benefits are high fixed costs for us that to a certain extend makes revenue flow management more troublesome. But that is a trade off we are willing to make as we can see how much it has been improving the professional and personal lives of us. Today, I would like to introduce the next big thing at Cogini, which, if done right, would bring employee development to the next level and provide a substantial long-term competitive advantage over everyone else. Cogini Skill Sets - Perceive and Control your own career development.

For a long time, our weakness in seniority has made employee development resort to self-study. And that isn't a smooth trip. The number of new technologies is blooming. Practical application of certain skills or technologies can be vague without industry insight. Without a roadmap, self development can be ineffective at best and crawling in the dark at worst. The idea of Cogini Skill Sets (CSS) is to provide a skill sets system that covers multiple roles (e.g developer, designer, system admin, etc) across multiple levels from interns, people in probation to people who have spent their entire career here. CSS serves as a checklist for employees to decide which skill sets to attain and control their career development. The progress one makes in CSS also contributes to his/her performance reviews (which are done once a year or twice). This is a exciting move that we expect to bring perceived control and progress to everyone's career.

Looking at the bigger picture, CSS is the first stepping stone in building a platform necessary for Cogini to be a long-term enduring and growing business. With the CSS roadmap laid out, we can focus on building a pipeline of people in every department with varying levels of skills and experience, ranging from entry level all the way up to senior and leadership positions. The vision is that for almost all of our hires from entry level, the company provides all the training and mentorship necessary so that any employee has the opportunity to become a senior leader within 5 years. 

I would like to make the roadmap a joined effort of everyone. It is acknowledged that it is hard to know what we need to know, to learn and to research to make us more valuable to the company. But that is where our diversity kicks in. There will be certain things about which you have a better idea than the person sitting next to you and the other way around. The Vietnam branch of Cogini has been in operation in two years and a half, which means at the minimum we have the experience to lay out a 2-year-long roadmap for a newbie. The number will be even more significant if everyone contributes his/her experience and ideas. There is always something we can learn from each other, so CSS will be beneficial to not only newbies but also experienced employees.

In the following week, we are collecting people's ideas about virtually everything you think an employee would need to attain to become successful at Cogini. Each idea should be written in a condensed noun phrase on one of the stickies you can find everywhere in the office and submit to the "CSS Box" on each floor. For those who cannot make it to the office, feel free to email me your ideas.

Ask yourself:
  • How do you grow personally? How do you grow professionally? What is your vision for where you want to go?
  • What skills that make you a better person today than you were yesterday?
  • What skills you have learned / want to acquire to differentiate yourself from everyone else?
  • What skills you have learned / want to acquire that would potentially to make work more fun?
  • What skills that you have pushed yourself out of your comfort zone to attain?
  • What skills you think would get the company as a whole grow?
  • How can you make people enjoy working with you?
  • How can you do what you are doing more efficiently? How can your team become more efficient? How can the company as a whole become more efficient?
  • What make you passionate about the company, about your work?
  • And more...
I am very excited about this new change we are introducing. We have always been keeping a flat organization in mind so that everyone's ideas are treated equally importantly. Now we are making it to the next level where together we are shaping up the type of employees we are raising, now and coming generations. In many ways, you are having the chance to leave your personal trait on the direction Cogini are walking in the next few years.