• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 527
  • Last Modified:

How to get there: A skilled Programmer


I will sincerely want to find out, from the experts what will be needed to be a good programmer?. Some school thought believe you need to have studied and gone through books on algorithms, data structures e.t.c. What will you recommend as an essetila foundation towards a progressive learning curve for a beginner?

Are there books out here which are well planned with hands- on exercises that help mould the fundamentals needed for a seasoned programmer? if there is please let me know. Are there books as well that help mould good programming logic? please is there is any please let me know.
9 Solutions
Hi buddhie2,

IMHO The book stuff is useful but I think the following might be a good start:

1. Be patient.
2. Be Lazy but not Idle.
3. Listen.
4. Think.

There are two types of programmers: pure programmers, these are guys that just feel well sitting near computer and making programs. There are also programmers who know a lot of things except programming language: algorithms, math, physics, electronics etc.
I belong to the first type (and trying to improve learning additional things). Though there is always a lot of work of such type, pure programmer is restricted to simple coding. Real power of programmer is good programming skills and good math, algorithms and some additional knowledge.
Learning programming is pretty easy if you understand programming logic and like it. Just choose programming language and start working with it. Every language has a lot of beginner tutorials and you can get first results in a few days.
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

I think to be a good programmer you must really like to do it. It is definitely not for those who like to work 9 to 5. You must be able to think of everyday problems and see how a program might be written to solve that problem.

Yes, I would recommend a few courses in the basics that you listed. If you already have some background you may be able to get by with reading books instead of courses. Try to focus on good books, i.e. check the reviews.

But a very important thing is to write as many programs as you can, i.e. learn by writing programs that actually do things that you find interesting, whether it is solving science problems or playing games or music.

The actual language is not that important from the learning perspective, though it may have an important bearing on your ability to be employed.
What makes a good painter? What makes some one good at hand crafts?
What makes someone a "good" writer.  

So IMHO the here mentioned points are valid. But let me ask. What *is* a good programmer?

Is someone good knowing every trick in whatever language to squeeze out the "smallest", "fastest" whatever from a program?

The answer is may be. But may be it's just the wrong approach for a program you know will change over time.

So you have to define to yourself what you think makes   a good programmer.

I guess some thingsa are quite useful
- knowing a bit from many areas (have an idea on what approaches are out there to "do" progamming.
- be patient
- be flexible
- be curious
- be willing to learn new things
- be sceptical

However it's difficult to tell, because the question still remains.
Do you think the guys here are "good" programmers?

I'd argue a few here are, but even with grades does that mean really that they are good? Unfortunatly the only "grades" you can gave are A,B,C, so what does it mean to get a grade of A?


buddhie2Author Commented:
I want to thank you guys a lot for taking out time to answer my question.
I am truly grateful.
I like to think of myself as a programmer, even though I have very little formal training.  A big part is just tenacity and ability to learn.  I think the field of programming has changed in that fewer programmers can get away with being versed in one language.  In one job you may be programming in C#, VB, PERL, and configuring Apache.  And then you may have to port something from Python or Java.  In other words, it pays to have tenacity and a desire to learn.  

There are many fundamentals for programming for any language, i.e. algorithms.  A basic history of programming might help you to put some things into perspective:

First there was the early days.  Code was 100% procedural.  Step one, do this, step two, do that.  No code reusability.  Imagine stacks of puch cards.  This is one method of programming.  Useful when there is no reusability to be had, especially with small, quick scripts.

Second, somewhere along the lines looping was introduced.  Do this 20 times.  Gotos would probably fall into this category(try to avoid goto at all cost).  Some reusability.  Every language has some kind of looping mechanisms.  The basics are for, while, do, foreach.  This begins the quest for reusability.

Third, we have gosub or functions.  You can define a function in one place and call it from several places without losing your place in the execution of the code.  Lots of reusability within a script.

Fourth, add modules and libraries.  Now we can add lots of functions and share them accross many scripts or programs.  Lots and lots of reusability!!

Fifth, object oriented programming.  With OO you can create abstract things and make more defined things from them.  You can create several instances of a type of object and manage them separately.  This is by far the greatest leap, IMHO.

Anyway, I think this creates a great strategy for learning and advancing.  Also, you will find that the more complicated the programming project, the more planning it requires and the more reusability you will want to incorporate.  To that extent, this is also a good breakdown for deciding how to approach your programming projects.  The bigger the project, the more modern the method.
Programming itself is just a mean to an ends.  Any idiot can program! (see http://www.thedailywtf.com/ for examples of things NOT to do!)

What is important is defining abstractions.  Designing software that can do complex things whilst writing the code in the simplest way possible.  Your goal as a programmer is to produce code that is clear, easy to understand and solves the stated problem.

To focus on solving the problem you should learn alternative programming languages, where you can focus on pure problem solving.  Learning a different paradigm of programming will make you appreciate and comprehend different ways of doing things.  I recommend learning a functional language (like Haskell) or even a language such as LISP / Scheme (see http://www.drscheme.org/), because you really get a handle on the essence of problem solving.

MIT do a very good course called How To Design Programs, which uses Scheme and lets you learn by example.  Very much worth a read (see http://www.htdp.org/).  This course will teach you programming logic and has plenty of hands-on exercises.

MIT also has a video based lecture course, called the Structure and Interpretation of Computer Programs (http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/).  The lectures are excellent, if somewhat akin to a bad 70's cop drama :)

I'd say if you worked your way through these you'd be well on your way to being an excellent programmer!

lojk.Net and Infrastructure ConsultantCommented:
Practise makes perfect. But speaking German fluently doesnt mean you are German, you need to live and breathe and make time to learn more about the bigger picture (like excessive beer and sausage consumption)
You must be willing to learn about the whole world of computing to ensure that you are doing things correctly in the first place. Theres no point writing an enormous XML/SOAP application if a web page would have done the job in 1/10th the time and hassle....
Programming isn't hard, but you have to ask yourself, "will it keep me interested?" No sense starting if you won't finish!

You will also have to be a bit of a perfectionist, you will HAVE to be able to rewrite big parts of your hard work.

And yeah, books are useful, but I still prefer open courses, or if possible: college!
lojk.Net and Infrastructure ConsultantCommented:
Extortioner, agree thoroughly with your other comments but 'College', youve gotta be kidding. In 2 years of college i learnt almost nothing compared to what i have taught myself by pure experimentation and language and syntax research over the years.

I started coding back, way back before the internet was even conceived, now it is my primary resource for help, advise and research. I do buy the odd book, especially when major language shakeups like .net happen or i want to learn a new languasge for basic usage but theres just no substitute for hard work, persistence, enthusiasm and a genuine interest - oh and a big dollop of common sense goes a long way too..

Good call!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now