Categories
Software development

Software bugs

Reading Time: < 1 minute

I received a letter from Missouri Department of Revenue yesterday. And it says my tax return for the year 2004 was invalid. That made me nervous. I scambled to look at my 2004 return which is done by Turbo Tax software, and other supporting documents. I found out an obvious problem eventually.

I should have taken a look at the tax return prepared by the software but I did not. I guess the lesson here is don’t trust the software blindly. The good thing is the consequence is not life or death situation, it’s going to cost me money though.

Software bug is just a way of life, sadly. Just like we human being could have illness one way or the other. But some software bugs can cause real big trouble, such as fail the space mission, explode gas pipe, kill patients, etc. Here is an article I saw from the Wired News. It lists 10 worst software bugs in the history. Interesting reading if you have time.

Categories
Life Software development

Not the smartest guy

Reading Time: 2 minutes

I was pretty frustrated on my programming these two days. I know I am not the smartest guy among software engineers in my company, or for that matter, not the smartest guy in my school years either. I still remember when I was in elementary school my teacher once told my parents that I have the potential to go to technical college中专, but I need to work harder if I want to go to university. Note in these days (early 1980s) being admitted to university is still very difficult, especially for people like me from a rural village.

I think I was lucky to beat the odds. I did not do as well as I expected in the college admission exam in 1989, but I was lucky to be admitted to HUST. The rest is history. From Wuhan to Shanghai, I went to Rolla in 1997, with the support from my friends and family. In 2000 I was also lucky to have the oppertunity to join my current company, a leader in PLM software industry.

Recently I spent some time thinking about my past. I think besides IQ and luck, there are other contributing factors to reach one’s potential. One important factor is attitude, or passion. When I first attended the middle school, I worked hard because I felt I was representing my hometown. Same thing in the University of Missouri at Rolla. Ditto when I first started in my current company because I was the only Chinese guy in the team. I just don’t want to give up easily. I was thinking if I do bad, I would disappoint people for whom I am representing. That would be terrible.

In software development, a lot of times the problem itself is not extremely difficult. It’s more like “you need to jump a little to get it”. So I jumped many times. Now if only I could solve that stupid problem I have worked on for 2 days…

Categories
Software development

Asking questions

Reading Time: 3 minutes

It’s very rare in software development a developer can work out things all by him/herself. At least not for me. During my work I have encountered all kinds of problems, puzzled and exhausted by them from time to time. But with the right approach, asking the right question to right people, and lots of luck, most of time I was successful.

First I want to admit I was a bit shy when I started working for my current employer. And I was not very good at programming lanuages C/C++ either. When I encountered some simple problems regarding the syntax, I always tried to figure out myself — don’t want to show my ignorance before my colleagues. I extended this good habit a bit too far. When I have real problems such as algorithm or functionality, I usually spent too much time trying to do it all by myself. Sometimes my project manager/leader had to come to me and rescue me.

On the other hand, I think it’s good for a developer to do his/her own work, get some feel about the real problem, and even have some vague ideas about the solutions before he/she approaches somebody for help. Although these days most companies have the “open-door” policy, which means you can go to your boss’s office or colleagues’ cubicles at any time. You still want to show them you did your homework. Remember they also have their own priorities, you can not expect they give you the answer without any meaningful contribution from you. I think this applies more toward algorithm, functionalities and other meaningful questions. Another factor to consider is “urgency of task”, if your boss need it by yesterday, go ahead and ask for help and get an answer as soon as possible. Otherwise you may want to exercise your brain a little and do more homework before asking for help.

For simple questions related with code conventions, syntax and development environment, you can just go and ask. That will save you some time. I used to be responsible for the development environment of my group. I have a coworker who usually asks me questions about Unix; and another coworker asks me questions about Windows. I believe I saved them some time because I usually solve their problem in a short period.

Sometimes you can get answer yourself just by describing the problem to somebody else. I believe if you formalize things in words (rather than do all work in your head), the answer will become more obvious.

These days Email is used widely in the business world. It has some advantages. Sometime you want to ask questions to multiple people. Because you don’t know who has the expertise, and who will have the answer. Or you want to people to discuss about the problem. Sometimes the person you want to ask is at the other side of the globe. But I still enjoyed “face to face discussion” as much as possible. We programmers communicate with computer all the day, why not leave some time for human interaction? Besides that your colleague maybe bored with his program too.

Another thing about email is that the repliers have different levels. Some people can write a clean answer for a difficult problem; some people can make a problem more confusing. My advice is whether people give you good answer or not, you need to do own homework and solve the problem. You can ask different people for the same problem.

The last thing about asking question is don’t make it accusatory. Suppose you found a bug made by another developer and have some questions about it. Your problem is caused by his/her bug. Don’t take it personal and make the other person look like an idiot; or feel good about other people’s mistakes. Remember you will make mistakes too. Simply point out the problem and politely ask for a fix. This way people are more willing to help you out and you will only get more respect.

Categories
Software development

I love this job…

Reading Time: < 1 minute

I was pretty busy lately. Getting ready for the upcoming China trip, and tried to get some work done before I leave. I even put in some hours after the dinner these days — I have not worked that hard for a while. My effort seems paid off today. My new functionality worked. I was a bit too excited and then I made a stupid mistake — I checked in all my changes to the source code control system without much testing. Soon after I found out I can not run my program with a simple case (which used to work), I felt the seriousness of the problem. So what did I do? I backed out all my changes and ran the program, it worked. Then I put in one change and ran the test, see if it works…and so on. Eventually I found the cause.

I was not sure about my programming career in the past year. But recently I fell in love with my job again. I think I like the time pressure, the design process, the intelligent discussion with my coworkers, debugging, and solving real problem for the customers. I am also very thankful for my boss for his trust, understanding, and the interesting projects he gave me. I think he is smart (much smarter than me), because he knows by keeping me happy, I could be more productive too.

Categories
Fun Life Software development

Pleasant Personality

Reading Time: 2 minutes

Couple days ago I went to see a Dentist/Hygienist for routine checkup. Visiting dentist is not my favorite task because my teeth are not that great and my hygienist made me feel very unconfortable last year, both physically and emotionally. So I chose a different dental office this year. To my surprise, this new hygienist made my day. First, while doing the cleaning, she kept talking about daily things to distract my attention from the teeth; secondly, she praised my home-care work such as teeth brushing, flossing. Ironically I should thank to the very hygienist (who made me unconfortable) for my improvement because it was her taught me those skills and her harsh words made me work real hard in the past year. But I did not come back to her office because of “unpleasant experience”.

This made me thinking about a friend when I was in fraternity at Rolla. Ben, who was a sophomore and vice president of our fraternity, is very smart (GPA 4.0). And, more importantly, he knows how to initiate a conversation and make you feel confortable. I think his unusual maturity (and sensitivity) probablly comes from his own family backgound. By the way, he also taught me how to drive. I remember he stood behind my car and told me to backup. He stood very close to the bump.

Last summer I had chances to back home (China), and meet some new friends. I was very impressed by the communication skills of one friend (who is also much younger than me). It appears to me age is not a factor here.

In the software development world, many people have great technical skills. But not that many have great soft skills or pleasant personalities. I heard the leading technology companies such as Google will reject a canidate if he/she is lacking in those aspects. In the industry those who have pleasant personality and leadship skills usually become leaders. I know a manager who is not necessarily the smartest guy in terms of IQ (maybe he is, as an old Chinese saying大智若愚), but he can knows how to start up conversations, how to listen, and his humor makes others feel very confortable. He is one of a kind and is very instrumental in company’s certain business activities.

I have a friend seemed have some opinions about programmers’ personalities. She said they don’t know how to socialize. Luckily she excluded me. I can understand her feeling. We software programmers spend too much time with computer and sometimes we lost the sense how to interact with people.

Back to my own personality. I was a bit shy when I started working for my company. I remember once my annual performance review says “Major is very reserved…a team project may improve his communication skills…”. I don’t think I was born that way. I don’t expect to change my personality either. But I am working on a few small things such as “small talks” to make myself more pleasant :-). By “small talks”, I am not talking about the “Small Talk” computer language, I am referring to “conversation starters”, or “ice breaker” when I meet people. I started this recently so far it seems working for me. I had more outside-work conversations with my coworkers; and I feel happier when I am in my office. I hope my coworkers feel the same way.

Categories
Chinese articles Software development

My American Colleague II

Reading Time: 3 minutes

今天来谈谈我的第一个Project Leader(PL),PL是一个技术领导的位置,通常他们自己也写程序,但最重要的是他们要分析用户需求,搭建软件框架,指导年轻的Developer,and make technical decesions。 我第一次见到我的PL是在面试的时候,当时感觉这人很忠厚。我记得上班第一天也是他到Reception Desk接的我。刚开始工作那段,我的技术比较差,又赶上老板关注的项目,每星期一的例会免不了被老板数落,我在上一篇已经讲了。PL这时候就帮我开脱一下,说我还是新人,有个学习过程。我们Team也就他没被老板说过, 其他人多多少少都被老板数落过。其实我的第一个老板人不错,就是脾气不好,最后他自己被裁员也是这个原因。

言归正传。PL有这个地位,主要是他的技术水平和领导能力。他是我们那里当时很难拿到的Senior Software Engineer。与一些小公司不一样,我们评Senior,要在整个开发部门评,要得到其他Development Group的认可, 而且名额有限。PL是我在公司见过的最好的老师。他有耐心,而且他能把东西讲清楚。这是我们几个年轻人喜欢去找他问问题的原因。问其他人有时也能解决问题,但是他能教你为什么。几个年纪大的也喜欢找他讨论问题,因为PL is a good listener,他能帮你分析问题。这样一来,他的CUBE旁边有时会有两三个人在那里等。我们开玩笑说以后要排队拿号问问题。有一段时间,我们老板告诉我们尽量不要去打搅PL,因为他要赶一个项目。我记得那一段时间,他经常晚上九点多才下班。对于一个有家庭,二十年工龄的人来讲,不简单。他的那个项目结果非常成功。

对于我来说,我十分感激PL能成为我的Mentor。从C语言到写技术文件,到如何与客户交流。印象最深的是他Review我的Functional/Design Specification,总是非常认真,并提供很多有用建议。最后还不忘纪鼓励几句。

PL没什么野心,他就是喜欢他的开发工作,也不想做Manager。他有一次告诉我,他以前做了一回Manager,觉得不如编程有意思,就又回来做他的老本行。我想我该学学他的踏实肯干。

PL是非常家庭型的男人。他有两个宝贝女儿,他的CUBE里面他女儿的照片从小到大,贴了两排。他是棒球迷,SAINT LOUIS CARDINAL FAN。 他的工作二十周年纪念,他请大家去看了一场CARDINAL的比赛。

======below is translation via google translate======


Today, let’s talk about my first Project Leader (PL). PL is a technical leadership position. Usually they write programs themselves, but the most important thing is that they analyze user needs, build software frameworks, and guide young developers. and make technical decisions. The first time I met my PL was during an interview and I felt that he was very loyal. I remember he picked me up at the Reception Desk on the first day of work. When I first started working, my skills were relatively poor, and I caught up with the projects that my boss paid attention to. I was scolded by the boss every Monday at the regular meeting. I have already talked about it in the previous article. At this time, PL helped me to excuse me, saying that I was still a rookie and had a learning process. In our team, he was never scolded by the boss, and everyone else was scolded by the boss more or less. In fact, my first boss was a good person, but he had a bad temper, and that was the reason why he was laid off in the end.

Back to the topic. PL has this status, mainly because of his technical level and leadership. He was a Senior Software Engineer that was hard to come by at our time. Unlike some small companies, when we evaluate Senior, we need to evaluate it in the entire development department and be recognized by other Development Groups, and the number of places is limited. PL is the best teacher I have ever seen in the company. He is patient, and he can make things clear. This is why several of us young people like to go to him and ask questions. Asking someone else can sometimes solve the problem, but he can teach you why. Several older people also like to discuss problems with him, because PL is a good listener, he can help you analyze problems. As a result, there are sometimes two or three people waiting there next to his cube. We joked about queuing up to get a number and ask questions later. For a while, our boss told us to try not to disturb PL because he had to rush a project. I remember during that time, he often got off work after nine o’clock in the evening. For a person with a family and twenty years of working experience, it is not easy. His project turned out to be very successful.

For me, I am very grateful that PL can be my Mentor. From C language to writing technical documents, to how to communicate with customers. The deepest impression is that he reviewed my Functional/Design Specification, always very serious, and provided a lot of useful suggestions. Finally, I did not forget Ji to encourage a few words.

PL has no ambitions, he just likes his development work and doesn’t want to be a Manager. He once told me that he once worked as a Manager and thought it was not as interesting as programming, so he came back to his old business. I think I should learn from his steadfastness and hard work.

PL is a very family man. He has two baby daughters, and the photos of his daughters in his CUBE have been posted in two rows from small to large. He is a baseball fan, SAINT LOUIS CARDINAL FAN. On the twentieth anniversary of his work, he invited everyone to a St Louis CARDINAL baseball game.

Categories
Chinese articles Software development

My American Colleague I

Reading Time: < 1 minute一晃我在一个中等规模的软件公司做了五年多了.这是一家有四十年历史的软件公司(想想微软也就三十年的历史,1976-2006).我周围很多同事都有二三十年的工龄.我算是工龄最短的员工之一了.编程序是件很枯燥的事情.一开始我也很不理解为什么他们能在一个公司呆那么久.刚开始工作第一次Staff Meeting一看,怎么年纪大多比我大.看来不象DOTCOM公司,靠股票发财是没戏了.现在几年做下来,感觉其实我的那些美国同事大多蛮可爱的.

我的第一个正式Project是我老板当时的特别关心的Project.我和一个美国老头,一个俄罗斯大嫂合作.我们另有两个Project Leader. 他们的任务主要是Technical Leadership.美国老头是数学博士.他负责核心摸块的开发.我的任务是写一个API(Application Programming Interface), 简单地说, 别人要用核心摸块, 得通过我的API. 我还负责写一个用户界面(User Interface). 俄罗斯大嫂的任务是写一个独立的Application来调用我的API. 她也是新手, 比我早几个月进公司. 我们的进度令我们的老板很不满意. 基本上每星期一的Staff Meeting他一上来就问我们的进展. 除了项目难度, 两个新手, Our poor communications(inside team and with boss) 也是原因之一. 一般来讲, 一个Team都有一个磨合阶段. 我们的磨合要长一些因为我们的Communication skills are not great. 记得有一次我们老板在Meeting上说我们写的程序是垃圾Junk Code. 那次把老头搞急了, 他说你不能把”My code and Major’s code”说成是Junk Code. 自那以后, 我认真起来, 和老头距离也近了很多. 我们最后的Delivery令老板满意.

老头的数学很厉害. 最近他还帮我解决了一个困扰了很久的一个问题. 但是他也有他的弱点. 他对Windows操作系统和DLL机制不熟悉. 这就是我可以显身手的时候了. 这样一来一往, 相互帮助, 信任感就建立起来了. 也慢慢地了解一些工作以外的东西.

老头喜欢散步, 每天中午走上半小时, 很少间断. 我也喜欢散步, 但是我比较随便. 跟他一起走过几回, 他的速度可以把我累死. 真不知道他跟他夫人一起走的时候是不是这个速度.

他还喜欢音乐. 业余时间参加一个乐队. 经常搞些免费的公开表演. 当然最重要的, 我发现他其实是非常家庭型的男人. 每年要度两次假, 一次国内(多半是Colorado Rockie Mountain), 一次国外, 欧洲南美洲什么. 看了他在Chile和阿根廷国家公园和冰川的照片. 觉得真该过去看看.

Categories
Business Software development

The unexpected

Reading Time: 2 minutesI hope everyone had a happy new year and everything worked out as expected. I wish things always happen as we expected. But unfortunately reality sometimes caught us off guard. From my experience in computer world I know all kinds of things (good or bad) can happen. The infamous Windows “blue screen” problem. A friend lost the Ph.D. diseration because of hard drive crash – probablly worth one year’s hard work? I am not biased against Bill Gates here. Years ago when I was developing a program on a HP UNIX machine with 128 Mega Bytes memory, the machine crashed couple times because a program error.

In the programming world we call those condition as “exceptions”. Thus comes the “Exception Handler”, which is a piece of code to deal with an exception. A good example is “divide by zero”. You know your little calculator can not do that; your powerful “Intel inside” box can not do it either. The exception handler will provide some meaningful feedback during those conditions and quit the program if necessary. In other words, it will try to “die” gracefully.

In school days we rarely write the “exception handling” code. In school everything is perfect, right? It appears to me most of times professors don’t care about the “exception” either. This is OK because we won’t run those “student code” in real life anyway. Our airplane and automobile are not designed by the “student code”. But I think proper training is necessary in the schools because eventually some of them will be engineers and design the real things.

When I was in graduate school, at one time I had a phone interview for an “industry consultant” position for a startup company. I remember one question was “what if you can not finish a project on time?” I told him I would work day and night, give up sleep, etc. The interviewer, who is a senior consultant, was not impressed. There are many reasons a project can get behind. Unexpected things such as “people quit”, “3rd party supplier delay”, do happen. But the customer will be disappointed if you tell him/her at the last minute. The senior consultant gave me one answer “deliver portion of the functionality”. This is a very realistic answer. I believe the new Microsoft Operating System “Longhorn” is taking a similar path.

Categories
Software development

Stay soft

Reading Time: < 1 minuteSoftware development jobs are no longer glamorous or sexy these days. The industry has recovered from the dot com crash but the outsourcing pressure is putting a lid on the salary of programmers in the US and other western countries. Another thing is development job itself could be boring and repetitive. Considering all these factors, I was thinking about do some adjustment about my career path in the past year: technical consulting related to my background (PLM implementation)? Programming for another field? Financial Engineering (programming for the Wall Street)?

At the end of year, I think I am going to stick to what I am doing now: the PLM software development. While enterprise software is maturing very fast in recent years in the US and western countries. I believe it has great potential in China and other emerging market.

Outsourcing may not be a good thing for many new programmers (or new computer science graduate) in the west; it also provide opportunity for people who want to take the lead. I believe my development experience, although not as extensive as some big shots such as Dr. Kaifu Lee, will still be valuable and useful to new programmers. Young Chinese students may only need one Dr. Lee as their God father; but they may need 1000 western educated or experienced developers to help them grow. I can see myself to be a part of the effort in the not too distant future.

I am very grateful for all my family and friends who provided insightful advice and moral support in the past year. I had to admit it was not an easy year, but with all your help, the road definitely becomes much easier. Wish all of you have a happy new year!

Categories
Software development

Dumb mistake

Reading Time: < 1 minuteThe working days between Xmas and New Year are usually slow. By “slow” I mean not many people will show up and there are not many business activites. I was surprised to see quite a few people showed up this week. Like poor me they ran out of their vacation days. One of my neighbour told me “I don’t really want to be here”. To be honest I have similar feeling. I think most people would rather spend time with families and friends.

But I still have a few bugs to fix. I think my mind was not working great. The first bug is a “code merge” problem, it took me about half an hour to discover and fix — which is normal. The second one was a very simple mistake. At one place the function parameter should be used but I used the local variable. With the local variable no matter what I assigned to her, it does not have any effect on the outcome. It took me about 2 hours to discover my mistake. That was pretty dumb. I don’t know where my mind went…

The good thing is, I fixed one more bug.