Wednesday, September 07, 2005

What it takes to be a Software Developer

To be honest it doesn't takes much to be a rather successful software engineer in Malaysia. All you need to do is love your work. Simple? It is.

However my definition of "successful" is rather personal. But the short version of it is, that to be successful in this field you must actually have a clue on what you are doing and doing it right. Doing it right includes delivery on time and on budget.

Lets not worry about job opportunity here okay. We have plenty of jobs vacancies here -- just take a look at the list of IT jobs in It seems that Malaysia lacks IT graduates, but we do have truck loads of IT graduates. They are just "unpolished" and often "misguided".

If any fresh or graduating college youngster were to ask me what it takes to be successful Software Developer, my answer will be the list below in no particular order.

1. Love software engineering.
2. Learn Open Source Tools.
3. Learn to search/research.
4. Choose a camp; JEE or .NET.
5. Read lots of code.
6. Have the right attitude.
7. Use somekind of Unix.
8. Keep learning.
9. Learn to test
10. Learn to unlearn.

1. Love software engineering.

First and foremost, you must love what you do and always have the natural drive to go the extra mile just because you like it. There are no other ways about this. In this profession, it is either you are crazy about your work or you simply crazy to continue this path. It is very easy to tell if you are meant for this kind of jobs. Just try going through few project delivery deadlines. If you survived the "death march" and wanting to jump right back in, then rest easy knowing that you are a true blue developer. Any other responses you might as well starting charting a different career path.

This first step is very important. Once you gone through real world project development, you will either learn from your mistakes and do it better next time, or you will start day-dreaming about doing something else. I personally believe that not everyone is suitable for IT works. It won't matter if you scored straight A's in college.

2. Learn Open Source Tools.

Back in the old Windows days, you have very little choice if you want to earn a living as a developer. You will probably need Windows server, ISS for ASP, or VS for VB and VC++. But those are the old days, good ridance if you ask me. Now, you can find Linux, PHP, Java, Mono, Perl and all kind of free tools out there for you to use. Yes, thay are all free; free of cost, free of license fees, and free to for you take and sell. Well there is more to this but a good place to start to is to use Linux today and explore the various development tools comes with it.

Yes, please use somekind of Unix because it will help you more than you realized by moving away as far as possible from Microsoft stuff. It will be too long to explain OSSS here. Just start using OSS stuff, you weill glad you started today.

3. Learn to search/research.

What if your boss ask you to do something that you do not know how and has no one to enquire about? Well ask Google! Serious. Learn to use search engine to find solution and learn from others. Got a problem you can't solve? Search it! Got some mysterious error code to debug? Search for it!

There is one thing that many do not know is that, you can find more answer in Google Group. Searching in google group is probably more effective as you are searching through thousands of discussions in public usenets. More likely than not, you find someone had the same problem as you and actually solved it in their discussion. Learn from them then.

(The rest coming soon.)


totoro said...

You don't really need to learn much about OSS to be a good software engineer, nor do you need to read lots of code (but you do if you wanna be a good programmer)

Engineering is about software lifecycles, quality processes, documentation, etc. Coding is honestly, about 10% of the work.

That's the honest truth from an experienced software engineer.

Bernie said...

I would agree with totoro. I wouldn't call myself an experienced software engineer (because I'm not) nor am I a good programmer. I suggest that you visit the SE resource section at for the kind of resources a SE should have access to. You will notice that none of those links have any reference to any coding.

What I observerd from your post is that you have mixed up a programmer and a software engineer - they are different. If you have a software engineer do coding only, you're wasting a good resource because he/she can do more than coding and probably wouldn't be as good as a dedicated coder. If you ask a programmer to do a software engineer's job... well... the project will be doomed :) Granted, here in Malaysia, it's a bit of rojak so I guess an SE should know programming (it is my personal opinion that a good SE should have the fundemental grasp of programming) and a programmer should know about SDLC and processes.

I'm not implying either one is more important, just that both play different roles and are equally important.

However, I totally agree with some of the core-competency you outlined in the post. Knowing some *nix, testing, reading code (and comments IMHO), but ultimately I think loving your job is most important. Others will come naturally.

You do seem to contradict yourself a bit - choosing a camp - but then the more recent posts asks the reader to NOT just use java/.net/anything for everything.

Just my 2 sen.

Padmanaban said...

High paying jobs are most important in the current economic situation. Most of the companies are developing in India and there are lots of job openings in various indian cities, which provides high salary.

Anonymous said...

A software engineer is one who writes program logic involving mathematics and it is new to the world . Like writing a page rank algorithm, hill top algorithm, or a very special bit dance. A good programmer writes a clean logic.