PDA

View Full Version : How Can I become an excelent programmer.



hoboy
July 14th, 2009, 07:39 AM
I am interrested in transition from ordinary to excelency.
I really want to be not only programmer but I want to be very good at it.
That mean also a good software designer.
Any input of experience is welcome.
How was your path to become a good programmer ?.
what helped you on it ?.
what did you do to make the transition from programmer to excelency ?.
problem abstraction ? OOP/OOD ?.
any specific language ?.

JohnnySage50307
July 14th, 2009, 08:04 AM
Let me start with a list of credentials and I'll give you my advice; this isn't an ego-trip for me, but just so you can get a bearing on where I'm comming from with what I'm about to say:

I am an Undergraduate Researcher at the University of Pittsburgh; my major is Computer Engineering (best of Computer Science and Electrical Engineering all in one package), and my specific focuses are Control Theory, Robotics, AI, Artificial Neural Networks (ANNs), and Embedded Systems. I know the following programming languages (all ones with a star, I am a rated professional at and have used for more than 5yrs): C*, C++*, Java*, Perl*, Python, VHDL*, MatLab, OpenGL, Visual Basic (6.0 and .NET)*, x86 Assembly, QBasic*.

Given my resume, here is what I advice:
I frequent TopCoder.com; there, (if you register) you can enter competitions, win prizes, and maybe land a decent job. I did this once a few years ago and learned how to tighten my code and streamline it alot.

Another thing I stress is to experiment regularly. For what I'm researching and a few other things I'm interested in, I'll read a paper on it and see if I can reproduce whatever it is I've read about. After that, I'll tinker with it some more and see if I can pull off something amazing. Also, alot of the deep magics I taught myself involved asking, "I wonder if I can do this?", writing whatever I thought of, testing it, and seeing if it worked. Example: Java does not have pointers (a C/C++ weapon of choice by many)...I was able to build a pointer-like object and completely defeat many of the security purposes that Java tried to implement.

Get active--make friends with other programmers and work with them. This will give you experience debugging programs, commenting your code, and social interaction. Most students have forced on them that they need to work alone, but in the professional and higher-academic enviroments, you MUST work with someone if you want to produce anything, because most grand projects are far too much for any one person to undertake.

Learn as many languages as you can. This will make you marketable and give you weapons to fall back on when faced with a certain problem. Each language was designed with a specific purpose in mind, and you must teach yourself what those purposes are, what those languages strengths and weaknesses are. Example: Alot of people frown on scripted languages or languages that run on virtual machines--I programmed a patern-recognizing ANN in about 100 lines of Python, including whitespace!

Granted, this won't make you a better programmer in the sense of coding, but a better programmer in the sense of person: Don't involve yourself with "holy-wars". Yes, the creator of Linux thinks OOP is the worst thing ever. Yes, people actually blugeon eachother bickering whether Vim or Emacs is a better text editor. No one's ever right. All text editors are essencially the same. OOP is good if inheiritance makes sense and bad when it doesn't. Nonetheless, if you involve yourself in those and pick a side, you restrict yourself by half each time, and excellent programmers excel in every aspect.

Lastly, and most importantly, be bold. In my younger days, I did dangerous coding practices because I didn't know better. Today, I do dangerous coding practices because I'm invoking something extremely powerful. Know when to use your power, use it properly, and it won't ever fail you. There is a saying that goes "Don't reinvent the wheel," but don't be afraid to ask yourself, "What if I can make a better wheel?" and proceed to do it!

JohnnySage50307
July 14th, 2009, 08:07 AM
OH, and if you want to hear my life story and/or see whatever I'm working on, send me a PM. I do take on students! Sofar I've got 3 under my belt!! lol

desertfish
July 14th, 2009, 08:10 AM
it is not easy to be excelent because there are too much we have to learn in a field. What i want to say is that where there is will there is a way. Wish you good luck!:KS

TheBuzzSaw
July 14th, 2009, 08:42 AM
My quick advice: have fun with coding. Code in your free time (if you have any). Make stuff just because. Experiment. Do stuff just to sample new APIs. Don't sit around waiting for "important" tasks; learn while you can.

lisati
July 14th, 2009, 08:48 AM
Have fun, study the code others have written (but be careful of licenses if you are tempted to copy stuff), practice, and, above all, have fun.

Oh, by the way, remember that if you want others to use your software, they won't have your insight into what happens "behind the scenes" to help them figure out how to use it.

s.fox
July 14th, 2009, 10:53 AM
Hi,

Create programs because you can. Try and use different approaches to solve the same problem. This will enhance both your understanding of the language but also help improve your logical thinking process. If you can start to build up a library of recyclable code that will also help you later. I would also suggest that you keep up to date with the language you are using, especially new libraries. :D

Just some thoughts,

-Silver Fox

hoboy
July 14th, 2009, 11:04 AM
Thanks guys.

Yacoby
July 14th, 2009, 11:04 AM
All text editors are essencially the same
Compare Vim and (Windows) notepad and come back to me. :P


Oh, and re the op, I would recommend knowing a functional language.

Mirge
July 14th, 2009, 11:20 AM
Compare Vim and notepad and come back to me. :P

Uh oh, incoming thread hijacking!!:popcorn:

JohnnySage50307
July 14th, 2009, 12:50 PM
[quote=Yacoby;7613818]Compare Vim and (Windows) notepad and come back to me. :P
quote]

What did I just say about starting holy wars??!

dbd
July 14th, 2009, 01:32 PM
What did I just say about starting holy wars??!

Vim vs notepad is not a holy war! No one in their right mind would even dream to use notepad to do any serious programming. You made the false statement, that "All text editors are essentially the same", and Yacoby kindly corrected you. Just because there is a history of "holy wars" over text editors doesn't mean that people shouldn't correct you when you talk rubbish about text editors.

In reply to the OP, I think it's a very difficult question to answer. I'd have thought that if you just keep working on difficult problems that interest you then gradually you'll become a better programmer. But JohnnySage has a point when he says that you shouldn't blindly restrict yourself to one programming paradigm. I'm currently learning Lisp, which is very interesting to contrast with C++ (C++ being pretty much the only language I have any significant skill in).

HotForLinux
July 14th, 2009, 02:16 PM
Notepad is excellent for writing stupid notes in *******.

I don't even know how to become an excellent chess player, an excellent musician or an excellent golf player

What is an excellent programmer after all? ....One who earns more money, one who programs very fast, one who makes more programs, biggest programs, in more languages? who makes more secure programs, one who finds the errors that nobody else finds in the code?.....one who documents and writes reusable programs....One who is considered excellent today or who will be considered excellent tomorrow.....or one who is happier writing programs?

Simian Man
July 14th, 2009, 02:28 PM
The same way you become excellent in anything: practice.

hoboy
July 14th, 2009, 03:11 PM
Notepad is excellent for writing stupid notes in *******.

I don't even know how to become an excellent chess player, an excellent musician or an excellent golf player

What is an excellent programmer after all? ....One who earns more money, one who programs very fast, one who makes more programs, biggest programs, in more languages? who makes more secure programs, one who finds the errors that nobody else finds in the code?.....one who documents and writes reusable programs....One who is considered excellent today or who will be considered excellent tomorrow.....or one who is happier writing programs?

Ok, HotForLinux
I have asked the question I am sure this is the best forum to ask this question, because they are many excellent programmers here, I have got helped here many times, when I didn't know what to do.
Excellency can for example be the ability to react with overview under great pressures, so maybe I could have asked what has been the path/ experiences from making small application to make nice robust linux kernel ?

JordyD
July 14th, 2009, 03:22 PM
Uh oh, incoming thread hijacking!!:popcorn:

Rawr, VIM!

...

Sorry, I had to.

ajackson
July 14th, 2009, 04:02 PM
Notepad is excellent for writing stupid notes in *******.
That's not true, you can write clever notes using it as well :lolflag:


What is an excellent programmer after all? ....One who earns more money, one who programs very fast, one who makes more programs, biggest programs, in more languages? who makes more secure programs, one who finds the errors that nobody else finds in the code?.....one who documents and writes reusable programs....One who is considered excellent today or who will be considered excellent tomorrow.....or one who is happier writing programs?
A very good question and some good points raised. Excellent is a very subjective term, one persons excellent might be another persons good. Unfortunately I don't think this is the right place for a discussion on what is excellent because it would come down to opinions and you know the saying about opinions.

JordyD
July 14th, 2009, 05:30 PM
and you know the saying about opinions.

No, actually, I don't. Care to enlighten me?

Reiger
July 14th, 2009, 07:02 PM
Opinions are a matter of personal preference which according to the cliché defy objective criticism?

Leslie Viljoen
July 14th, 2009, 08:53 PM
I think that if you develop a powerful enough interest, you will end up spending enough time programming to become really good at it. The best programmers I know really love what they do; when interviewing programmers I usually ask "what programming have you done outside of what you had to for homework?"

Apart from passion (and of course the resulting practice), I'd recommend two other things:


Learn to communicate really well
Read a lot

If you write code for a living, you will probably write it for someone else and so essentially your job will be to translate their imprecise natural language requirements into programming languages. Language skills are very important. It will be hard to be excellent if you can't spell it (no offense intended, I hope you see my point).

As for reading: read code, skim reference manuals, read programming blogs, read mailing lists, read books about the general business of programming. What I mean by that is: read books about the big picture too, programming well is more than knowing syntax. Hunt & Thomas' "Pragmatic Programmer" and Kent Beck's "Extreme Programming" are good examples.

When you have been doing it a while, explore other programming languages. I have many times used ideas and designs in one language that I learned because they were everyday occurrances in other languages.

JordyD
July 14th, 2009, 08:57 PM
Hunt & Thomas' "Pragmatic Programmer" and Kent Beck's "Extreme Programming" are good examples.

OT: I actually just got a book called "Pragmatic Thinking and Learning" by Andy Hunt. Not the same book, but it's written by one of the same authors and carries a similar title.

Mirge
July 14th, 2009, 09:00 PM
Rawr, VIM!

...

Sorry, I had to.

:lolflag:


The same way you become excellent in anything: practice.

That pretty much sums it up, IMHO. If you have a passion for programming and you are constantly trying to improve, and write more advanced software, you will get better and eventually reach "excellency" in your own eyes and in the eyes of others.

CptPicard
July 14th, 2009, 10:21 PM
IMO it is a combination of both theoretical understanding of the problems you're working on and a lot of practical insight as to what kind of programmatic idioms and concepts map to your problem and how.

In the past few years that I have spent mostly on the programming side instead of the algorithmics side, it has really struck me how important it is, in programming, to think in terms of all kinds of high-level abstractions that you then either have available in the language you use, or at least can somehow mock up, emulate or replace with something else in other languages.

This sort of stuff requires quite a bit of exposure to different kinds of languages, and at some point the language itself just disappears although you're aware of its particular limitations and ways of doing things... you "think in code", but not necessarily specifically in the details of that particular language.

Of course I could push Lisp here again a little as a language that makes you an excellent programmer exactly in this way, but let's drop that this time... :p

Mirge
July 15th, 2009, 12:51 AM
IMO it is a combination of both theoretical understanding of the problems you're working on and a lot of practical insight as to what kind of programmatic idioms and concepts map to your problem and how.

In the past few years that I have spent mostly on the programming side instead of the algorithmics side, it has really struck me how important it is, in programming, to think in terms of all kinds of high-level abstractions that you then either have available in the language you use, or at least can somehow mock up, emulate or replace with something else in other languages.

This sort of stuff requires quite a bit of exposure to different kinds of languages, and at some point the language itself just disappears although you're aware of its particular limitations and ways of doing things... you "think in code", but not necessarily specifically in the details of that particular language.

Of course I could push Lisp here again a little as a language that makes you an excellent programmer exactly in this way, but let's drop that this time... :p

The discussions I read that you have with others, where Lisp is often brought up, make my head hurt:lolflag:... but I would like to take a look at Lisp sometime.

CptPicard
July 15th, 2009, 02:08 AM
but I would like to take a look at Lisp sometime.

You certainly should. Eric Raymond is right when he says that although you may not use it much, having had the exposure to the ideas makes you a better programmer for the rest of your days.

And it really is an art -- don't quit too soon after just thinking that it's just funny parenthesis and weird operation-parameters order.

Interestingly, even my bread and butter Java has benefited from Lisp exposure a lot... admittedly I am sure that a lot of other Java coders hate my Java with its extreme and ubiquitous usage of anonymous inner classes, for example. It's worth watching the Rich Hickey Clojure videos -- I sometimes get the feeling that I'm rediscovering the reasons why he implemented Clojure in the first place.

HotForLinux
July 15th, 2009, 03:08 AM
That's not true, you can write clever notes using it as well

Still true: "notepad is EXCELLENT for writing stupid notes in *******"
(even if you write the Britannic Encyclopaedia there, a mystic poem, or if you write e = mcc)

:-({|=


And even more:

"notepad is EXCELLENT for understanding how good other editors are"
"notepad is EXCELLENT for practising mechanography"
"notepad is EXCELLENT for giving a very cheap editor to Microchoff's client$"
NOTEPAD IS EXCELLENT!!! (If not it wouldn't exist. When will you understand that?)

rhchia
July 15th, 2009, 03:12 AM
hi there. this is actually a question in my mind. I had to admit that i wasn't good at programming. I had very weak foundation.
I'm now 1yr old in the programming world. In this one year, i struggled. I'm working on Ruby on Rails. Developing a web application for my company. Because of the weak foundation, i face big problem with CSS, Javascript, and sometimes HTML tags. Pretty demoralising. No doubts, my passion in programming remains but sometimes i felt the cup is too small for the water. there's so much to learn and i had difficulty picking which one to start. everything seems to be interlinked.
Any advice?

HotForLinux
July 15th, 2009, 03:38 AM
Ok, HotForLinux
I have asked the question I am sure this is the best forum to ask this question, because they are many excellent programmers here, I have got helped here many times, when I didn't know what to do.
Excellency can for example be the ability to react with overview under great pressures, so maybe I could have asked what has been the path/ experiences from making small application to make nice robust linux kernel ?

Ok. I was just trying to widen minds and to make sure you know well what you ask and what you want and why because there are many books out there called "How to become an excellent programmer in one week".
For the same price in a sales bookshop you can become an excellent musician too. In few years, Mozart became an excellent composer without even having to buy a book .

CptPicard
July 15th, 2009, 04:03 AM
In few years, Mozart became an excellent composer without even having to buy a book .

Actually, even Mozart's masterworks were the latter ones. He was a prodigy, but maturing took time.

hoboy
July 15th, 2009, 06:28 AM
All this responses that is why I have asked the question in this forum.
Thanks guys.

JohnnySage50307
July 16th, 2009, 05:15 AM
For the love of sanity! Alright, I'm going to say this once, and then I'm done; do as you please afterwards. All text editors are the same--they edit text. How they edit text may be different, but the end result is still the same. Again, anyone who chooses a side in one of these ridiculous holy-wars makes himself half as efficient as someone who never involved himself in the first place.

JordyD
July 16th, 2009, 07:17 AM
For the love of sanity! Alright, I'm going to say this once, and then I'm done; do as you please afterwards. All text editors are the same--they edit text. How they edit text may be different, but the end result is still the same. Again, anyone who chooses a side in one of these ridiculous holy-wars makes himself half as efficient as someone who never involved himself in the first place.

:D But they're fun! You get to bash each other, and call each others' text editors names, like Esc-Meta-Alt-Control-Shift.

....
vim rulez

Mirge
July 16th, 2009, 08:18 AM
Why does every thread on this site have to get derailed and go in a completely different direction... :rolleyes:

lisati
July 16th, 2009, 08:22 AM
An attempt to get things back on track:

The first stages of constructing a brilliant piece of code usually have more to do with understanding what you're trying to achieve than the specifics of programming languages, operating systems, or hardware.