[Tutor] Learning Programming

Paul Sidorsky paulsid@shaw.ca
Thu, 03 Jan 2002 23:54:22 -0700


Eve Kotyk wrote:

> in Python within a year.  I have wanted to learn programming for
> sometime.  I began with C (on Linux) and though I have read a book on C
> programming (I also did the exercises) I am anything but proficient in
> C.  Subsequently Python was recommended at a good language for a
> novice.  I have completed the tutorial by Josh Cogliati and have written
> a few small modules on my own.

Well, that's a good first step!  Although I disagree with the large body
of people who say you can't or shouldn't teach C as a first language,
when you're learning on your own it's certainly easier to learn a
language like Python.

> 1)  What is a reasonable length of time in which to learn a programming
> language ?

Of course, it depends.  Keep in mind that I'm by no means an expert on
the subject...

For the average person to learn a language like Python from scratch
(i.e. little to no programming experience) enough to write some small
programs, I would say probably 2-3 months is about right.

Learning Python enough to make large applications might take 6 months to
a year.

To learn a language enough to literally "think in it" takes a few years.

Guruhood can take decades if it ever comes at all.

> (I'm a little disheartened at my prgress).

Don't be.  The fact you are progressing (at least your post made it seem
that way) even a little is always a good sign.  Many people either don't
even try or give up really quickly if they do.  (I've heard "I could
never do that" too many times, unfortunately.)  The best sign is that
you're doing this largely on your own.

Taking months or years to learn a language is not something to be
ashamed of.  While it's true that CS and IT students will eventually be
expected to learn languages within days and "sight read" (to borrow a
musical term) languages, this is because to make a living at programming
it's necessary to be able to learn and adapt quickly.  But for a hobby
or job-enhancing skill, take your time if you need to.

> 2)  I think I would learn more quickly if I had a project to work
> on...how do you choose a project?

This is always tough.  Well, it's not as tough as thinking of /names/
for projects, but it's pretty close.  :-)  Things I do are:

- Write a game.  Games are generally fun to write and can be made as
shallow or as deep as you want.  Pick your favourite board or card game
and try to program it.  Text mode is fine.  When you get more advanced
try to come up with a graphical game, then try real-time, etc.

- Programs that are useful are always a good idea.  Maybe there's
something you'd like to have at work or for a common household task or
for a club you belong to.  Even if you aren't actually able to use the
program in practice it still makes for a good project.

- Watch the big newsgroup/mailing list.  You might get ideas there.  Or,
when somebody else asks a question try to figure out the answer on your
own, even if it takes you a while.  

- Look for University/College CS course pages and try some of the
assignments you find.  I'd  suggest sticking to first year courses
because after that the problem descriptions (and the projects
themselves) get a lot more technical and/or vague.  I had a blast in my
first year of University because the assignments were generally a whole
lot of fun, even though I already knew most of the course material.

Good luck!

-- 
======================================================================
Paul Sidorsky                                          Calgary, Canada
paulsid@shaw.ca                        http://members.shaw.ca/paulsid/