Friday, November 30, 2007

How to become a good programmer

At ReliSource, many of the times I am involved in the hiring process and need to take several interviews per week/month. Over the last two years, I’m observing one unfortunate truth which is: Bangladesh is lacking enough skilled programmers. Some people have talked about this issue previously and I think it’s time to take some real steps to improve the situation so that we do not face a disaster in the near future.

I’m putting some suggestions here for the fresh graduates and the college freshmen on how to become a good programmer.

In my own definition, a fresh graduate good/skilled programmer should have the followings:

  1. Strong skill of one or more good languages like C++, Java and C#.
    1. Must have strong skills with control structures. Don’t mess up if you’re asked to print out triangle or other shaped piles of ‘x’s with loops.
    2. Must have strong skills with recursion. You must know how to transform a looped task into a recursive one and vice versa, for example: multiplication using addition recursively.
    3. If your language is C/C++, you must know how to play with pointers and references.
    4. Understand pass by value and reference.
    5. Clearly understand scopes and memory allocation, de-allocation. Know when a object is destroyed and when to destroy.
    6. Know the usage of all operators including bit-wise ones.
  2. In-depth knowledge of OOP.
    1. Only being able to write classes and doing encapsulation and inheritance is not what you should call good OOP.
    2. Clearly understand how function overloading, overriding, polymorphism works.
    3. Clearly understand how constructor/destructor (if any) works with inheritance.
    4. Clearly know the difference and use of Interfaces and Abstract classes.
    5. Know how to overload operators. Why and how copy constructor is defined/used.
  3. Know common data structures
    1. At least know the common data structures like stack, queue, linked list, doubly linked list (know circular version of all of them) and trees.
    2. Be a skilled implementer of any of those, have clear concept of how push, pop, add, delete, peek etc method works on those data structures.
  4. Know most common algorithms well
    1. You don’t need to memorize pseudo codes line by line but you need to have clear concept of most common algorithms of sorting(bubble, quick, merge, heap, bucket, etc), searching (including DFS, BFS), etc.
    2. As a fresher you must know their time and space complexities, pitfalls and improvements (if any).
  5. General computing concepts:
    1. Know processes and threads, how are they related to each other, how to program them, etc.
    2. Understand TCP/IP: Don’t think it’s only the network administrator’s task to understand TCP/IP. All programmers ever doing any network or web programming should have clear TCP/IP concepts and understanding.
  6. Be skilled in debugging in IDEs:
    1. Be skilled in any of Visual Studio/Visual Studio.Net, Eclipse, Netbeans, KDevelop, etc.
    2. Know how to debug your code.
  7. Have basic knowledge of Software Engineering and SDLC.

Some advice for college freshmen:

  1. Start with C++ or Java, avoid starting with scripting languages:
    1. If you’re learning programming for the first time, avoid starting with scripting or loosely typed languages like: PHP, ASP, Perl, etc or Visual Basic. It may destroy your understanding of program execution, data types, memory allocation, etc.
    2. Start with C++ or Java. If you want to me to be specific, start with C++, you’ll love it for the rest of your life.. :) It’ll be easier for you to learn (almost) any other language (like: C#, PHP, ASP, etc).
    3. If you ask, do you need to know C to start with C++? Or should you learn C first and then C++? C definitely helps a lot for learning C++ but it's not mandatory to start with C.
  2. If you want to be a good programmer, keep on coding at least 20 hours a week for the next 4 years :).
  3. Never stop learning new technologies that are coming out everyday.
  4. Know some of the many languages/technologies but be master of one. Know at least one language very well.

Good luck!

47 comments:

Reza said...

Very good suggestions not only for fresher's but also for everyone who want to establish themselves as good programmers. I specially like the line where you wrote "you will love C++ for the rest of your life". :)

- Reza

Fahim said...

"2. If you want to be good programmer, keep on coding at least 20 hours a week for next 4 years :)."

Absolutely important. Without practice programming knowledge and problem solving skill wouldn't persist. Different programming contest sites are excellent source of practice problems. My personal preference would be Topcoder (topcoder.com).

I would also recommend looking at open source projects. Even knowing about how large softwares are made, or how different parts of a software work together can be very helpful.

Also look for blogs, and articles written by programmers/about programming. They can be a very good source of knowledge.

M. Kaisar Ul Haque said...

Thanks Reza and Fahim!

Mizan said...

Very nice and necessary suggestion. I think main focus should be on the basic. no matter which language you follow, try to grasp the basic understanding of the programming, your analytic ability to solve problem and in advance best practices.

you have to update yourself as the technology is updating everyday.

LUC said...

The best part about this post is.. the topic.. Many of us may have done programming for years, but never did try to assess what actually can be the root of being a good programmamr. We might have developed some skills over the years, but it's difficult to summarize all our experienes in one writing such as this one to help aspiring programmars to become good. Now that I see the post, I remember in my early years of studying computer science, I used to go around and ask seniour guys how to become a good programmar, and what makes a good programmar. Thanx KSR, great job..

LUC (ataul.mukit@gmail.com) said...

Although I would like to point out, probably starting with C rather than C++ for the first year is a good idea, it helps develop problem solving skills and implement basic algorithms which stands in you in good stead for the future..

Mamun said...

Thanks for your nice post and suggestion.

Fuad said...

Excellent post!
I think it should not be a bad idea to start with C and then move to C++ or Java. At least it would be better for a person who is completely new to the programming arena.

Thanks
--Fuad

M. Kaisar Ul Haque said...

Thanks for your comments.

NoviceDevlpr said...

Excellent suggestion. I have only PHP programming experience in my profesisonal career.I am not a bit expert in PHP but i feel i can catch this language easily because of understanding of C and C++. I have little knowledge in C and C++(OOP). Most important line from my point of view is: Some advice for college freshmen: Start with C++ or Java, avoid starting with scripting languages:If you’re learning programming for the first time, avoid starting with scripting or loosely typed languages like: PHP, ASP, Perl, etc or Visual Basic.
Yes don't start with PHP first. C, C++, Java, C# these are the best and only language to start first to become a good programmer as well build a strong programming knowledge.

Jehad said...

Very helpful suggestions indeed. I would like to paste one of my favorite quotes.

"If you want to be a good programmer you need to learn what is going underneath that high level language your using. Understand memory allocation, pointers, stack usage, task switching, etc. And to take it to the next level read a book on Assembly Language and Compilers. That will take you to the next level.

It’s sad how many interviews I have given to CS graduates from well known accredited four year universities who only know Java and/or C#. When I ask them to write a simple strcpy() function is fail miserably.

If you can’t write and explain in detail a strcpy() function in C, I won’t hire you."

Have fun... :-)
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html

Anonymous said...

Hi All,

Here are my suggestions.

1) Start reading "The Design of the Unix Operating System". and start writing the code in C by making use of system calls.

2) Start learning the unix internals, which would be similar to all other OS'es.

3) Start reading about TCP/IP RFC's
4) Work on network programming
5) Learn MultiThreaded, MultiProcesses programming
6) Try to learn C++ and OOPS

Here onwards you should be able to learn any other kind of languages like Java, C# etc..

If possible try to learn one scripting language like Shell or Perl.


Hope above sequence would be useful for you.

Thanks&Regards,
SureshReddy.T

Chandragupta Borkotoky said...
This comment has been removed by the author.
Anonymous said...

this is very nice.

Mohammad Kaisar Ul Haque said...

@Chandragupta Borkotoky:

Sure! Wish you the best.

sport news said...

thanks for ur good sugg.........

vibhor said...

Awsom tips for a new fresher............really enhanced my ideas towards becoming a good computer engineer.

Thank you

VIBHI

Anonymous said...

Hi,

This blog and especially this post is really informative and help full for me. Because i am beginner level c c++ programmer.

Thanks for sharing.
Nadeem Rao

Learn unix C C++

shamna sankar said...

its very nice suggestions to become a good programmer

Mia said...

Wow! Nice post! It is very informative. I agree that practice really does make perfect. But still, how can you actually and fully guarantee that the programmer you are about to hire is not a shmuck? I’m out of ideas….My dad tried http://www.hire-programmer.com/ before, but their programmers are really very good and highly skilled. So I don’t really get the chance to figure out if they suck at their job or not. But I totally recommend them for their services. My dad was very satisfied.

mormor said...

Excellent post brother.
আপনার নির্দেশনা গুলো মেনে চলা চেষ্টা করব.......

Anonymous said...

I've passed computer science at 2007 & all those year's were wastage. now I'm working as web developer in an european firm but not programming. But i want come back to programming & give a new start. I like to learn C# and asp.net. Is it ok? or is it possible to come back after this late? plz kaiser bhai, give me suggestions. thx.

Php Programmer said...

Great suggestions for beginners..

Hire Programmer said...

Thanks for sharing some important secrets on how to become a good programmer.

Mohammad Kaisar Ul Haque said...

@anonymous: I would actually encourage anyone with the slightest interest in programing to start studying and practicing programming. As you already are a computer science graduate, that should give you much advantage on coming up to speed in a short time. So make no delay in plunging into it :).

Good luck.

Ayesha said...

Thanks alot,this blog is very helpfull to beginners as well as to people who want to become good programmers.
I like this line"you will love C++ for the rest of your life"
-Ayesha

Ankur sharma said...

very good suggestions. It will be very beneficial for freshers and for everyone who want to expertise hand in programming. I like the line if u wamt to be a good programmer,keep on coding for 20 hours for the next 4 yrs.

D. Patrick Caldwell said...

Hey, I enjoyed your blog post. I'm trying to conduct a survey on what makes a good programmer and would appreciate your input. If you'd encourage your readers to take the survey to, that'd be awesome!

The survey can be found here: What Really Makes a Good Programmer Survey.

Thanks,
Patrick

Anonymous said...

Very good suggestion, but this is for those who have teachers and ...

floto said...

I have been programming for 30 years, largely in C and C++. You've pretty much nailed it with this blog. This is the tool kit every software engineer has to bring to the table just to be credible.
The big skill a programmer brings to the table, besides that tool kit, is the ability to solve problems.
I would only take exception with one area. I often recommend that noobies begin with a scripting language - I like PHP because of the C like syntax. This gets you right to the heart of programming without the learning curve of compilers, linkers, IDE's or makefiles.

John said...

Sir, I am a BCA student in india. i am stuck with which programming language to start with. PLEASE guide me with ur advices for my career.

Debasish said...

Very useful suggestions. This will work for a fresher as well a experienced candidate.
Thank you so much for sharing your such important thought!
I feel like, if i follow these steps..i will definitely become a perfect programmer one day!
God Bless you Mr Kaisar!

Herr Lucifer - The Fallen Angel said...

Excellent post and very useful. Thanks.

I have programmed in VB, VB.Net, C, C++, C#. ASM, Java, and some scripting languages. This is my experience, I suggest:

1- Learn at least 2-3 programming languages to have a wide grasp and understanding of programming in general.

2- You will never really understand what happens in your programs unless you learn C and assembly. For me C was where I realized what I was doing in years in c# , c++ and other languages.

I think C is the best programming language to start with. C++ is good but its syntax is not as clean as that of C.

Furthermore, the low level memory allocation techniques in C will teach programmer how a program is executed and what really happens down there.

My experience only.

Anonymous said...

When I started programming 10 years ago, I wasted my time with some useless languages, I wish there was somebody back then to tell me: "hey, stop playing with VB and Delphi! go learn C and then C++, and enjoy working with a real programming language."

Anonymous said...

hi..im a computional mathematic degree student..im good at math and i love programing..i want to be a programmer..but the problem it is silibus in my course have a few programig subject..c++,OOP(java),data struct(java),Coding & Cryptography,parellel processing and software engeenirng..it is enough??

Anonymous said...

i love making programs!!!it makes my world crazy!!!!

punit said...

Punit

good suggestions for those programmer who want to make career in this field i would like to add my few words in this page you you want to become strongest programmer so always think with point of view of that person who has develop that particular language

Anonymous said...

i think the comments helped me more than the post.

Ankit kumar- part 2 said...

Revision+practice+hardwork=success

Don't fear follow above ,,,and you will surely become a good programmer.


Mujhe pata hain tum kar sakte ho.

Javed Iqbal Mirza said...

AOA
I am a student of BSCS and i also want to become a good programmer the comments and suggestions given above are so nice and effective for every programming student. Can any body help me in OOP and Data Structures.
i like to write some small programs and then the big one.

Rizwan said...

salam.Dear sir i am a student of bs(electronics)and i want to become a good programmer but these suggestions are given above are ralley nice and help me to achive my goal...thank you sir

The Crazy said...

i agree on everything you say, but just an additional tips for those fresher on how to become a good programmer, You should know how to K.I.S.S. =)

Rags said...

after many years of slogging i shamefully learned some important things here. I am worried i should admit that I am not working or missing my work at all!! Thanks bro and all the other valuable comments. Just hatsoff!!

J+G/M said...

hello

My name is Jessy And I'm a IT professional. You see I'm not a Actual Software engineer. but I have interest in Programming recently i started to learn programming with C I bought a Book and i need suggestion that I'm pure IT and Have Little Software Development experience in JAVA during University Have clear concept with Basic and Fundamentals So I can Start To Learn Programming and Is there Any Bangle Tutorial available. Jessy Framget Monipuripara

Anonymous said...

Great tips, ofcourse, these are helpful for those who really want to become excellent programmers and have no social life in the real world. You'll be stuck to your computer for the rest of your life and the moment you are without a computer, you'll be a kid without a toy.

Get real...

Kaisar said...

@Anonymous: Depends how you see life and reality. There is no alternative to hard work. Perseverance is really the key to success, a handsome salary and a great social life, doesn't matter if you're a programmer or not. It's all about knowing how to balance and enjoy your life.

On the other hand, people fearing hard work can only become a burden to the society.

Mobile App Development India said...

hi I can see that you possess a degree of expertise on this subject, I would like to hear much more from you on this subject matter – I have bookmarked this page and will return soon to hear additional about it.