Tuesday, May 22, 2012

For fresh programmers

This post is dedicated to fresh programmers. You can’t find anything related to a specific technology here. This contains some guidelines and links, a fresher should look at before he start his programming career. When I started my programming life there were no such chance to get these kind of guidelines as internet itself was too costly and there were not much blogs. When I said I started career it refers to my college days not the time when I joined my first company. I believe everybody agrees with me on my statement

“We start our programming career when we join college after selecting computer software development as primary subject”.

But in India I have seen companies taking employees or people joining software development companies without having the knowledge to write a for…loop.

You are the master of computer. Rule it

When a person starts with computer the first thing he learns is, it has 3 units .Input unit ,output unit and   CPU. Then he learns that computer has no intelligence or it don't have any capability to decide and do things of it's own. Whatever computer does is per the human instructions called computer program.

But most of the professionals will forget this after they became programmers. We could understand their change when they start complaining like "it works sometimes" or "I coded it well. I don't know why it is not working". Do you think the computer is injecting it's own code in to your code in order to take revenge on you? Absolutely not. So keep in mind that computer is a silly slave which works as per our instructions and you are the master.

Computer understands only binary instructions ie assembly language

You may using Visual Studio 2010 /2011, Eclipse, XCode or JBuilder for creating your apps. If you are using LightSwitch you may not have written single line of code to produce a business app. But remember what ever program you created, is going to execute using assembly instruction such as Mov A,B Add A, Push, Pop etc... If you don't have this basic idea about how a computer really process your program it would be really difficult to survive in the field of debugging and performance turning. Also you should have an understanding about how your managed frameworks such as .Net or Java convert the intermediate code to machine code to be executed by the machine.

Attend trainings & train others constantly

Like all the other professions software development too changes its way of doing .Also it changes it's tools and targets. But in programming the rate of change is really fast and if you need to stay with that you should always open to learning. If you think that I studied everything from college and can say bye to learning, please don't enter to the software development industry.

Are you confused and thinks that I selected a wrong path? Before answering it let's take the field of automotive. Centuries back, there were steam engines .The engineers at that time had to deal with steam engine's internals. Later the petroleum based engines came and they all had to learn the technology of petrol and diesel engines. Now we are in the age of electronically controlled hybrid engines and battery based vehicles. If you look at the tools, the manual screw driver is replaced by electronic screw driver.Also the targets, earlier there were only cars now we have hundreds of types and models of vehicles.

Don t' you think that, this is same as software development except the rate of change. We had big room full of machines first. Then it came to desktops,laptops and now to tablets and mobiles.In other industries it will take decades for a change but in software development its couple of years .Another field which we can compare with programming is the medical where doctors had to learn about new diseases and diagnostics tools every year.

so never miss a chance to attend a training or train others. At-least attend online training. If you are not a good speaker and afraid of talking in front of a big crowd start training your team which is comparably small. When you train somebody you will at-least learn 2-3 new things which you may had missed earlier because each individual thinks and asks differently.

Also read the books .Don't depend only on online media. Books give you vertical in-depth knowledge about the subject where internet blogs and search can only give you horizontal knowledge.

Be a blogger

Now a days without google developers cannot proceed further. In one way its true and should be like that because why should we memorize all the APIs of different languages which are going to be replaced by another set in next 5-6 years. Being in this context we need to think about one thing.

Where from the contents in google search comes from? Is Google creating contents by employing typists? No.Its due to the other fellow developers and their kindness to share their knowledge through blogs and tutorials. Are they just simply sitting and thinking about some scenarios and blogging the same ? 90% are not. They just share their day to day experience with programming and we are making use of it. If they had thought of completing their works and enjoy rest of the time we can never enjoy our life. Isn't it?

Same way think about new developers coming into our way. Do we need to make their life harder? If not please start blogging. Or post articles and tutorials. Don't say that I don't have topics. If you work 40 Hrs per week you might have come across at-least one situation which will help others in future. Write about it. Initially your language may not be good. But over time you will became a good writer. If you are looking to monetize your writings time just put google ads in your blog.

Read, debug and make use of other's code

One of my colleague always want's to code himself. When he wanted to try AI he started writing his on AI program using if...else which acts like any other publicly available AI chat programs. It's good that he wants to write himself which will help him to learn. But whether he really need to write himself where AI chat programs are available in open source such as AliceBot ? According to me as a smart programmer we should make use of other's experience.

The main advantage of using other's code is, they might have faced so many hard situations and resolved the same.Why should we face the same situations again? Another advantage is we could learn better ways of programming by looking at other's code or we can mix their coding style with ours to create a better one.So keep reading, reviewing and understand by debugging other's code

But be careful. Before using public code, read and understand carefully. Sometimes they may be less efficient than you. Also after adopting their code, don't say "Oh its not my mistake, it is the bug in their code".Keep in mind, once you adopt, that's your code.

Some sites you should really look into

These are some sites which I feel a developer regardless of your experience should read.
http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
SOLID Principles

Site for non-software people to learn programming
Learn coding - http://www.codecademy.com/

Books to understand basics
Code By Charles Petzold - Explains the evolution or computer and programming from basic electronics to assembly language & high level language.
Head first Object Oriented Analysis and Design

4 comments:

Varun R said...

Joy ,

This is a very good post for Freshers.

Varun R said...

Joy ,

This is a very good post for Freshers.

Joymon said...

Thanks...This comes from my experience as fresher + experience with working freshers.

Blogger said...

Get all your favorite spirits and wines at Duty Free Depot!

All the world famous brand name drinks for unbelievable discounted price tags.