Programming skills - growing from amateur to pro

Programming skills - growing from amateur to pro

am 19.04.2008 13:54:15 von firewoodtim

What is the best venue for advancing one's programming skills? I have
a "version 1" set of PHP scripts that I use to build websites, but I
know them to be the work of an amateur (myself). Where do I go to
take the next step in learning better ways to achieve more modular,
maintainable code, so I can move on to version 2?

I am not able to attend classes at a university, since I am
self-employed and have little chance of setting schedules.

Info that would be useful are:
1. Good websites for online programming classes.
2. Good books.
3. Good open source projects that use professional-level coding
techniques. Of particular use in that regard would be high-quality
code from a content management project (Drupal? Joomla? ...)
4. References that describe the "big picture" with regard to
programming technique. What subjects should someone master, in order
to be a good, professional programmer?
5. Anything else I haven't mentioned??

Re: Programming skills - growing from amateur to pro

am 19.04.2008 14:25:36 von toylet

firewoodtim wrote:
> What is the best venue for advancing one's programming skills? I have
> a "version 1" set of PHP scripts that I use to build websites, but I
> know them to be the work of an amateur (myself). Where do I go to
> take the next step in learning better ways to achieve more modular,
> maintainable code, so I can move on to version 2?

A good brain would always be able to learn things quickly... Of course,
you need to spend enough time with all the material. :)


--
@~@ Might, Courage, Vision, SINCERITY.
/ v \ Simplicity is Beauty! May the Force and Farce be with you!
/( _ )\ (Xubuntu 7.10) Linux 2.6.25
^ ^ 20:24:01 up 1 day 8:19 2 users load average: 1.00 1.03 1.00
ºî ´© (CSSA):
http://www.swd.gov.hk/tc/index/site_pubsvc/page_socsecu/sub_ addressesa/

Re: Programming skills - growing from amateur to pro

am 19.04.2008 16:04:17 von Charles Calvert

On Sat, 19 Apr 2008 07:54:15 -0400, firewoodtim
wrote in
:

>What is the best venue for advancing one's programming skills? I have
>a "version 1" set of PHP scripts that I use to build websites, but I
>know them to be the work of an amateur (myself). Where do I go to
>take the next step in learning better ways to achieve more modular,
>maintainable code, so I can move on to version 2?
>
>I am not able to attend classes at a university, since I am
>self-employed and have little chance of setting schedules.
>
>Info that would be useful are:
>1. Good websites for online programming classes.
>2. Good books.

"Design Patterns, Elements of Reusable Object-Oriented Software" by
Gamma, Helm, Johnson and Vlissides. The code is C++, rather than php,
but you'll still be able to understand what they're talking about.

Depending on your level of experience, you might also look for a
college level book that describes things like the stack and heap,
pointers, registers, basic sorting algorithms (quick, heap, bubble,
etc.) and data types and structures. When one is self-taught, it's
easy to miss important concepts simply because you don't know they're
there. These basics will help you in many ways, even when using
languages that hide some of the details (like pointers).

>3. Good open source projects that use professional-level coding
>techniques. Of particular use in that regard would be high-quality
>code from a content management project (Drupal? Joomla? ...)

I don't know about those projects specifically, but beware; there are
open source projects that either have some bad practices or just
terrible code. Don't assume that any random open source project is a
good example.

>4. References that describe the "big picture" with regard to
>programming technique. What subjects should someone master, in order
>to be a good, professional programmer?

Check out anything written by Donald Knuth
.

>5. Anything else I haven't mentioned??

Experience is more important than the tool. Learn more than one
programming language, especially languages from different families
(procedural, functional, OO) as you'll learn new ways of solving
problems.

Learn UML for design purposes. It will help you think about design
without having to type lines of code and is a marketable skill.

Program defensively. By this, I mean that you should assume that
other programmers who use your code will do stupid things with it if
you let them. Even if you're working alone now, some other programmer
may end up maintaining the code in the future, so do this always.

Doing things the right way is faster in the long run than doing things
the "quick and dirty" way.
--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research

Re: Programming skills - growing from amateur to pro

am 19.04.2008 16:09:42 von firewoodtim

On Sat, 19 Apr 2008 10:04:17 -0400, Charles Calvert
wrote:

>On Sat, 19 Apr 2008 07:54:15 -0400, firewoodtim
> wrote in
>:
>
>>What is the best venue for advancing one's programming skills? I have
>>a "version 1" set of PHP scripts that I use to build websites, but I
>>know them to be the work of an amateur (myself). Where do I go to
>>take the next step in learning better ways to achieve more modular,
>>maintainable code, so I can move on to version 2?
>>
>>I am not able to attend classes at a university, since I am
>>self-employed and have little chance of setting schedules.
>>
>>Info that would be useful are:
>>1. Good websites for online programming classes.
>>2. Good books.
>
>"Design Patterns, Elements of Reusable Object-Oriented Software" by
>Gamma, Helm, Johnson and Vlissides. The code is C++, rather than php,
>but you'll still be able to understand what they're talking about.
>
>Depending on your level of experience, you might also look for a
>college level book that describes things like the stack and heap,
>pointers, registers, basic sorting algorithms (quick, heap, bubble,
>etc.) and data types and structures. When one is self-taught, it's
>easy to miss important concepts simply because you don't know they're
>there. These basics will help you in many ways, even when using
>languages that hide some of the details (like pointers).
>
>>3. Good open source projects that use professional-level coding
>>techniques. Of particular use in that regard would be high-quality
>>code from a content management project (Drupal? Joomla? ...)
>
>I don't know about those projects specifically, but beware; there are
>open source projects that either have some bad practices or just
>terrible code. Don't assume that any random open source project is a
>good example.
>
>>4. References that describe the "big picture" with regard to
>>programming technique. What subjects should someone master, in order
>>to be a good, professional programmer?
>
>Check out anything written by Donald Knuth
>.
>
>>5. Anything else I haven't mentioned??
>
>Experience is more important than the tool. Learn more than one
>programming language, especially languages from different families
>(procedural, functional, OO) as you'll learn new ways of solving
>problems.
>
>Learn UML for design purposes. It will help you think about design
>without having to type lines of code and is a marketable skill.
>
>Program defensively. By this, I mean that you should assume that
>other programmers who use your code will do stupid things with it if
>you let them. Even if you're working alone now, some other programmer
>may end up maintaining the code in the future, so do this always.
>
>Doing things the right way is faster in the long run than doing things
>the "quick and dirty" way.

Charles,
Thank you. Very valuable advice.
Tim

Re: Programming skills - growing from amateur to pro

am 19.04.2008 17:56:46 von Larry Anderson

Look at your scripts, and think of how they could be better (easier to
use, more features, better structure) and re-factor them (aka re-write
them) Just about every project I finish I already have ideas for
improvement. Making those improvements make you better at
programming.

Also look for new challenges? What do you think would be cool to be
able to do? Try it.

Another tip: look at some good code and learn from it, not only the
code but the organization of the project.

If you haven't seen them, read the pear coding standards:
http://pear.activeventure.com/standards.html

Though you may not be writing Pear modules it give a lot of common-
sense readability guides for writing code.

Re: Programming skills - growing from amateur to pro

am 19.04.2008 18:45:21 von nc

On Apr 19, 4:54 am, firewoodtim wrote:
>
> What is the best venue for advancing one's programming skills?

A full-time job (or similar level of open-source involvement) with
a good software organization. Good software organizations recognize
that advancing your programming skills is not your job; it is your
supervisor's. Moreover, your chances of improving on your own are
no better than a psychologist's chances of correctly diagnosing
and treating himself (this is why, by the way, practicing
psychologists are required to have a standing patient relationship
with another psychologist). Learning is a process that can be
greatly reinforced by feedback. And technical learning depends
on it way more than "pure" scholarship.

> Where do I go to take the next step in learning better ways
> to achieve more modular, maintainable code, so I can move on
> to version 2?

There's more to developing good PHP applications than writing
maintainable code. Things you need to know range from using
version control to designing normalized data models...

> Info that would be useful are:
> 1. Good websites for online programming classes.
> 2. Good books.

I really doubt it. Classes and books are great for learning the
basics and for sharing "tips and tricks". They are poor substitutes
for team development experience.

> 3. Good open source projects that use professional-level
> coding techniques. Of particular use in that regard
> would be high-quality code from a content management
> project (Drupal? Joomla? ...)

As much as I like Drupal and Joomla, they serve as the case in
point. Their coding may be flawless, but neither is designed
for deployment on a replicating cluster.

Also, you won't improve anything by simply looking at a project.
You need to join as a contributor.

> What subjects should someone master, in order to be a good,
> professional programmer?

There is more than one way to be a professional programmer...

Cheers,
NC

Re: Programming skills - growing from amateur to pro

am 19.04.2008 22:05:27 von Pat Willener

> On Apr 19, 4:54 am, firewoodtim wrote:
>>
>> What is the best venue for advancing one's programming skills?
>
> A full-time job (or similar level of open-source involvement) with
> a good software organization. Good software organizations recognize
> that advancing your programming skills is not your job; it is your
> supervisor's. Moreover, your chances of improving on your own are
> no better than a psychologist's chances of correctly diagnosing
> and treating himself (this is why, by the way, practicing
> psychologists are required to have a standing patient relationship
> with another psychologist). Learning is a process that can be
> greatly reinforced by feedback. And technical learning depends
> on it way more than "pure" scholarship.
>
>> Where do I go to take the next step in learning better ways
>> to achieve more modular, maintainable code, so I can move on
>> to version 2?
>
> There's more to developing good PHP applications than writing
> maintainable code. Things you need to know range from using
> version control to designing normalized data models...
>
>> Info that would be useful are:
>> 1. Good websites for online programming classes.
>> 2. Good books.
>
> I really doubt it. Classes and books are great for learning the
> basics and for sharing "tips and tricks". They are poor substitutes
> for team development experience.
>
>> 3. Good open source projects that use professional-level
>> coding techniques. Of particular use in that regard
>> would be high-quality code from a content management
>> project (Drupal? Joomla? ...)
>
> As much as I like Drupal and Joomla, they serve as the case in
> point. Their coding may be flawless, but neither is designed
> for deployment on a replicating cluster.
>
> Also, you won't improve anything by simply looking at a project.
> You need to join as a contributor.
>
>> What subjects should someone master, in order to be a good,
>> professional programmer?
>
> There is more than one way to be a professional programmer...
>
> Cheers,
> NC

SourceForge and similar places are often good places to watch some great
programming going on. You might even join one of the projects to get
actual experience in the area you prefer. Not a bad item for the resume
either.
--
Regards,

Twayne

Re: Programming skills - growing from amateur to pro

am 20.04.2008 04:02:06 von Alan Little

Carved in mystic runes upon the very living rock, the last words of NC of
comp.lang.php make plain:

> On Apr 19, 4:54 am, firewoodtim wrote:
>>
>> What is the best venue for advancing one's programming skills?
>
> A full-time job (or similar level of open-source involvement) with
> a good software organization. Good software organizations recognize
> that advancing your programming skills is not your job; it is your
> supervisor's. Moreover, your chances of improving on your own are
> no better than a psychologist's chances of correctly diagnosing
> and treating himself

I beg to differ. I've been programming for over 30 years and support myself
as a freelance programmer, and the vast majority of my education has been
self-directed.

--
Alan Little
Phorm PHP Form Processor
http://www.php-form.net/

Re: Programming skills - growing from amateur to pro

am 20.04.2008 04:09:40 von Alan Little

Carved in mystic runes upon the very living rock, the last words of
firewoodtim of comp.lang.php make plain:

> What is the best venue for advancing one's programming skills? I have
> a "version 1" set of PHP scripts that I use to build websites, but I
> know them to be the work of an amateur (myself). Where do I go to
> take the next step in learning better ways to achieve more modular,
> maintainable code, so I can move on to version 2?

I'll second and expand upon what Charles said -- this is an excellent point
to learn the basics: stack, heap, pointers, etc. -- the fundamental, low-
level stuff. You don't have to go all-out at this point, but learn the
basics. Learn the bit values up to at least sixteen bits, and learn to do
base conversions between 2, 10 and 16. Some of it may be stuff you'll
rarely apply *directly* (depending on what you're doing), but the more you
understand what's going on under the hood, the better you'll think with it,
and the better your code will be.

--
Alan Little
Phorm PHP Form Processor
http://www.php-form.net/

Re: Programming skills - growing from amateur to pro

am 20.04.2008 05:13:35 von Jerry Stuckle

Alan Little wrote:
> Carved in mystic runes upon the very living rock, the last words of NC of
> comp.lang.php make plain:
>
>> On Apr 19, 4:54 am, firewoodtim wrote:
>>> What is the best venue for advancing one's programming skills?
>> A full-time job (or similar level of open-source involvement) with
>> a good software organization. Good software organizations recognize
>> that advancing your programming skills is not your job; it is your
>> supervisor's. Moreover, your chances of improving on your own are
>> no better than a psychologist's chances of correctly diagnosing
>> and treating himself
>
> I beg to differ. I've been programming for over 30 years and support myself
> as a freelance programmer, and the vast majority of my education has been
> self-directed.
>

Sorry, I agree with NC. I've got about 10 years on you, including
several years programming with IBM and more years teaching programming
to corporations.

When you learn programming on your own, you pick up a lot of bad habits,
poor techniques, etc., without knowing they are bad because they have
very little to compare to. (how do YOU know you're doing things using
good techniques)

A job where you're working with other programmers is an irreplaceable
experience, and one which can teach you good habits and techniques.

Sure, you *can* learn without that experience. But *will* you? And
*how long* will it take?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Re: Programming skills - growing from amateur to pro

am 20.04.2008 13:02:20 von piotr

firewoodtim wrote:
> What is the best venue for advancing one's programming skills? I have
> a "version 1" set of PHP scripts that I use to build websites, but I
> know them to be the work of an amateur (myself). Where do I go to
> take the next step in learning better ways to achieve more modular,
> maintainable code, so I can move on to version 2?
>
> I am not able to attend classes at a university, since I am
> self-employed and have little chance of setting schedules.

Another issue is software testing.
Great many people using PHP do not test their code on the regular basis.
Although unit testing is now more popular then it used to be (among php
developers), many people, while being aware of how important testing it,
still don't do it.

Writing code tests takes some time, but it will enable you to look a bit
differently on your software. It will help you to get better perspective
on your code and design.

While thinking in terms of code testability, you will learn how to write
more fine-grained methods and that will also help with code reuse.

If you happen to maintain some application for longer time, you will
actually save time when using test, since you will be able to track bugs
more easily. It's also great help when you need to refactor.
Also, if you will work on larger projects, will more people involved,
test will give you best idea, on what given code does and how it should
behave (it's better then any documentation).

I recommend phpunit.de and as well as Sebastian Bergman's blog and
presentations.

best regards
Piotr N

Re: Programming skills - growing from amateur to pro

am 20.04.2008 14:12:54 von sheldonlg

Alan Little wrote:
> Carved in mystic runes upon the very living rock, the last words of NC of
> comp.lang.php make plain:
>
>> On Apr 19, 4:54 am, firewoodtim wrote:
>>> What is the best venue for advancing one's programming skills?
>> A full-time job (or similar level of open-source involvement) with
>> a good software organization. Good software organizations recognize
>> that advancing your programming skills is not your job; it is your
>> supervisor's. Moreover, your chances of improving on your own are
>> no better than a psychologist's chances of correctly diagnosing
>> and treating himself
>
> I beg to differ. I've been programming for over 30 years and support myself
> as a freelance programmer, and the vast majority of my education has been
> self-directed.
>

ditto.

Re: Programming skills - growing from amateur to pro

am 20.04.2008 18:34:02 von Charles Calvert

On Sat, 19 Apr 2008 23:13:35 -0400, Jerry Stuckle
wrote in
:

>Alan Little wrote:
>> Carved in mystic runes upon the very living rock, the last words of NC of
>> comp.lang.php make plain:
>>
>>> On Apr 19, 4:54 am, firewoodtim wrote:
>>>> What is the best venue for advancing one's programming skills?
>>> A full-time job (or similar level of open-source involvement) with
>>> a good software organization. Good software organizations recognize
>>> that advancing your programming skills is not your job; it is your
>>> supervisor's. Moreover, your chances of improving on your own are
>>> no better than a psychologist's chances of correctly diagnosing
>>> and treating himself
>>
>> I beg to differ. I've been programming for over 30 years and support myself
>> as a freelance programmer, and the vast majority of my education has been
>> self-directed.
>>
>
>Sorry, I agree with NC. I've got about 10 years on you, including
>several years programming with IBM and more years teaching programming
>to corporations.

I've been programming for about 20 years (no cracks about my age,
Jerry :), which isn't as long as either of you, but also support
myself as a freelance programmer, and have done so for 10 years now.

I agree with NC and Jerry on the one hand, and with Alan Little on the
other. Working with other programmers has been invaluable to me. At
the same time, I'm mostly self-taught and have managed to be conscious
of programming techniques and habits.

>When you learn programming on your own, you pick up a lot of bad habits,
>poor techniques, etc., without knowing they are bad because they have
>very little to compare to. (how do YOU know you're doing things using
>good techniques)

In the past I think this was much more likely than it is now. When I
started programming professionally, the Internet was not widely
available to the public. I got my information from books and, when
possible, other programmers. Once Internet access became more common
and I started reading Usenet and web-sites, I was exposed to many more
programmers, both good and bad. Looking back at old code, I can
clearly see how the 'net, Usenet in particular, accelerated my
learning of good habits and techniques. I became aware of concepts
such as design patterns, RAII, etc. and started actively looking for
and reading about such things in order to improve my own abilities.

I think that, for some people, active reading of and participation in
on-line programming communities can provide some of the benefits of
working with others. Not all, mind you, but some.

>A job where you're working with other programmers is an irreplaceable
>experience, and one which can teach you good habits and techniques.

I completely agree with this. Everyone I've worked with has taught me
something new and useful. I'd recommend that any programmer take such
opportunities when they come up.

>Sure, you *can* learn without that experience. But *will* you? And
>*how long* will it take?

That's an interesting question. Having had "do it right the first
time" drilled into me from childhood, I actively pursued information
about how to "do it right". Others may not. I've seen people who've
been programming for years write truly awful code because they've
never taken the initiative to improve their abilities. They shrug and
say "it works, what's the problem?" If they had worked in an
environment with other programmers and had their code reviewed, they
likely would have learned better.
--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research

Re: Programming skills - growing from amateur to pro

am 20.04.2008 19:01:38 von Hans-Peter Sauer




<55pm04lb2dud4b57vl9plt79n1btnnub8m@4ax.com>

> >Sure, you *can* learn without that experience. But *will* you? And
> >*how long* will it take?
>
> That's an interesting question. Having had "do it right the first
> time" drilled into me from childhood, I actively pursued information
> about how to "do it right". Others may not. I've seen people who've
> been programming for years write truly awful code because they've
> never taken the initiative to improve their abilities. They shrug and
> say "it works, what's the problem?" If they had worked in an
> environment with other programmers and had their code reviewed, they
> likely would have learned better.
> --
> Charles Calvert | Software Design/Development
> Celtic Wolf, Inc. | Project Management
> http://www.celticwolf.com/ | Technical Writing
>

Excuse me old chap - but you dont even specify a background colour and
despite your many years in the business you appear to just assume that
everybody uses the default windows white as a background colour .

www.jpgimage.co.uk/full.php?image=964

Krusty isnt real bothered to be honest - you just needed to be brought
down a peg or two :-)

Re: Programming skills - growing from amateur to pro

am 20.04.2008 19:07:11 von nc

On Apr 19, 7:02 pm, Alan Little wrote:
>
> > > What is the best venue for advancing one's programming skills?
>
> > A full-time job (or similar level of open-source involvement) with
> > a good software organization. Good software organizations recognize
> > that advancing your programming skills is not your job; it is your
> > supervisor's. Moreover, your chances of improving on your own are
> > no better than a psychologist's chances of correctly diagnosing
> > and treating himself
>
> I beg to differ. I've been programming for over 30 years and support
> myself as a freelance programmer, and the vast majority of my education
> has been self-directed.

I don't see where we differ. I talked about the average case; you
talked
about one person, yourself. Whenever you have a trend, you often
have
outliers. The existence of outliers does not disprove the existence
of
trend...

Cheers,
NC

Re: Programming skills - growing from amateur to pro

am 20.04.2008 19:16:26 von hellsop

On Sat, 19 Apr 2008 21:02:06 -0500, Alan Little wrote:
> Carved in mystic runes upon the very living rock, the last words of NC of
> comp.lang.php make plain:
>
>> On Apr 19, 4:54 am, firewoodtim wrote:
>>>
>>> What is the best venue for advancing one's programming skills?
>>
>> A full-time job (or similar level of open-source involvement) with
>> a good software organization. Good software organizations recognize
>> that advancing your programming skills is not your job; it is your
>> supervisor's. Moreover, your chances of improving on your own are
>> no better than a psychologist's chances of correctly diagnosing
>> and treating himself
>
> I beg to differ. I've been programming for over 30 years and support myself
> as a freelance programmer, and the vast majority of my education has been
> self-directed.

I'd propose that that experience counts as a "full-time job".

--
It is odd, but on the infrequent occasions when I have been called upon
in a formal place to play the bongo drums, the introducer never seems to
find it necessary to mention that I also do theoretical physics. --Feynman

Re: Programming skills - growing from amateur to pro

am 21.04.2008 03:51:52 von Charles Calvert

On Sun, 20 Apr 2008 18:01:38 +0100, Krustov wrote in
:

>
>
>
><55pm04lb2dud4b57vl9plt79n1btnnub8m@4ax.com>
>
>> >Sure, you *can* learn without that experience. But *will* you? And
>> >*how long* will it take?
>>
>> That's an interesting question. Having had "do it right the first
>> time" drilled into me from childhood, I actively pursued information
>> about how to "do it right". Others may not. I've seen people who've
>> been programming for years write truly awful code because they've
>> never taken the initiative to improve their abilities. They shrug and
>> say "it works, what's the problem?" If they had worked in an
>> environment with other programmers and had their code reviewed, they
>> likely would have learned better.
>
>Excuse me old chap - but you dont even specify a background colour and
>despite your many years in the business you appear to just assume that
>everybody uses the default windows white as a background colour .

Um, okay. Yeah, I know the site needs work, thanks. I've been
thinking about it but have been a little busy doing the work my
clients need done.

>Krusty isnt real bothered to be honest - you just needed to be brought
>down a peg or two :-)

If this was intended to be friendly, it didn't come across that way.
It just seems rather rude, actually.
--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research

Re: Programming skills - growing from amateur to pro

am 21.04.2008 13:51:41 von Alan Little

Carved in mystic runes upon the very living rock, the last words of NC
of comp.lang.php make plain:

> On Apr 19, 7:02 pm, Alan Little wrote:
>>
>> > > What is the best venue for advancing one's programming skills?
>>
>> > A full-time job (or similar level of open-source involvement) with
>> > a good software organization. Good software organizations
>> > recognize that advancing your programming skills is not your job;
>> > it is your supervisor's. Moreover, your chances of improving on
>> > your own are no better than a psychologist's chances of correctly
>> > diagnosing and treating himself
>>
>> I beg to differ. I've been programming for over 30 years and support
>> myself as a freelance programmer, and the vast majority of my
>> education has been self-directed.
>
> I don't see where we differ. I talked about the average case; you
> talked about one person, yourself. Whenever you have a trend, you
> often have outliers. The existence of outliers does not disprove the
> existence of trend...

Well, the point of difference is that you appeared to state pretty
bluntly that one cannot improve on one's own. Upon re-reading, however,
I see that it can be interpreted as not so blunt, that you do admit the
possibility; however, to me, at least, it reads with the implication
that that possibility is so small as to be virtually non-existent.

I don't think the chances of properly learning on one's own are small at
all. Certainly there is value in formal education and in working closely
with other programmers in a formal work environment, and for many people
that may be the only way to go. But as Charles pointed out, thanks to
the Internet, a person *can* work closely with other programmers, and
have a wide range of material to study without being in a formalized
environment, and with good self-discipline can do just as well, or even
better in some cases.

Now, an important qualifier there is, "with good self-discipline" -- a
quality which unfortunately is broadly lacking in our current society;
but that's something the OP, or any person asking this question, will
have to examine for him/herself.

--
Alan Little
Phorm PHP Form Processor
http://www.php-form.net/

Re: Programming skills - growing from amateur to pro

am 21.04.2008 14:58:41 von firewoodtim

On Mon, 21 Apr 2008 06:51:41 -0500, Alan Little
wrote:

>Carved in mystic runes upon the very living rock, the last words of NC
>of comp.lang.php make plain:
>
>> On Apr 19, 7:02 pm, Alan Little wrote:
>>>
>>> > > What is the best venue for advancing one's programming skills?
>>>
>>> > A full-time job (or similar level of open-source involvement) with
>>> > a good software organization. Good software organizations
>>> > recognize that advancing your programming skills is not your job;
>>> > it is your supervisor's. Moreover, your chances of improving on
>>> > your own are no better than a psychologist's chances of correctly
>>> > diagnosing and treating himself
>>>
>>> I beg to differ. I've been programming for over 30 years and support
>>> myself as a freelance programmer, and the vast majority of my
>>> education has been self-directed.
>>
>> I don't see where we differ. I talked about the average case; you
>> talked about one person, yourself. Whenever you have a trend, you
>> often have outliers. The existence of outliers does not disprove the
>> existence of trend...
>
>Well, the point of difference is that you appeared to state pretty
>bluntly that one cannot improve on one's own. Upon re-reading, however,
>I see that it can be interpreted as not so blunt, that you do admit the
>possibility; however, to me, at least, it reads with the implication
>that that possibility is so small as to be virtually non-existent.
>
>I don't think the chances of properly learning on one's own are small at
>all. Certainly there is value in formal education and in working closely
>with other programmers in a formal work environment, and for many people
>that may be the only way to go. But as Charles pointed out, thanks to
>the Internet, a person *can* work closely with other programmers, and
>have a wide range of material to study without being in a formalized
>environment, and with good self-discipline can do just as well, or even
>better in some cases.
>
>Now, an important qualifier there is, "with good self-discipline" -- a
>quality which unfortunately is broadly lacking in our current society;
>but that's something the OP, or any person asking this question, will
>have to examine for him/herself.

This moves in the direction I was trying to find, when I posted the
original question. Is there a way for someone for whom employment
with skilled programmers is not an option, who cannot take the time
for a formal education at a university, yet who has an active interest
in programming and a fair amount of talent and wants to learn
professional-level coding skills to do so?

The Internet is abundant with sites that offer very useful tutorials
on this or that programming problem. But what about the big picture?
What about how to structure a complicated project from the very
beginning, so one does not generate code full of blind alleys and
which is unmaintainable, difficult to modify and expand?

I have over 200 separate files in my project, and they all work the
way they should. Yet it is not modular, so adding a new feature is an
exercise in tedious tracing through lines and lines of code, adding,
fixing, modifying and testing over and over. If I had known how to
write flexible, modular code in the beginning, it would have made the
job a lot easier. I still don't know how to do it.

Isn't there some place on the Internet where this issue is addressed?
Surely some university has an online set of courses. Where are they?

Re: Programming skills - growing from amateur to pro

am 21.04.2008 18:26:47 von Jerry Stuckle

firewoodtim wrote:
> On Mon, 21 Apr 2008 06:51:41 -0500, Alan Little
> wrote:
>
>> Carved in mystic runes upon the very living rock, the last words of NC
>> of comp.lang.php make plain:
>>
>>> On Apr 19, 7:02 pm, Alan Little wrote:
>>>>>> What is the best venue for advancing one's programming skills?
>>>>> A full-time job (or similar level of open-source involvement) with
>>>>> a good software organization. Good software organizations
>>>>> recognize that advancing your programming skills is not your job;
>>>>> it is your supervisor's. Moreover, your chances of improving on
>>>>> your own are no better than a psychologist's chances of correctly
>>>>> diagnosing and treating himself
>>>> I beg to differ. I've been programming for over 30 years and support
>>>> myself as a freelance programmer, and the vast majority of my
>>>> education has been self-directed.
>>> I don't see where we differ. I talked about the average case; you
>>> talked about one person, yourself. Whenever you have a trend, you
>>> often have outliers. The existence of outliers does not disprove the
>>> existence of trend...
>> Well, the point of difference is that you appeared to state pretty
>> bluntly that one cannot improve on one's own. Upon re-reading, however,
>> I see that it can be interpreted as not so blunt, that you do admit the
>> possibility; however, to me, at least, it reads with the implication
>> that that possibility is so small as to be virtually non-existent.
>>
>> I don't think the chances of properly learning on one's own are small at
>> all. Certainly there is value in formal education and in working closely
>> with other programmers in a formal work environment, and for many people
>> that may be the only way to go. But as Charles pointed out, thanks to
>> the Internet, a person *can* work closely with other programmers, and
>> have a wide range of material to study without being in a formalized
>> environment, and with good self-discipline can do just as well, or even
>> better in some cases.
>>
>> Now, an important qualifier there is, "with good self-discipline" -- a
>> quality which unfortunately is broadly lacking in our current society;
>> but that's something the OP, or any person asking this question, will
>> have to examine for him/herself.
>
> This moves in the direction I was trying to find, when I posted the
> original question. Is there a way for someone for whom employment
> with skilled programmers is not an option, who cannot take the time
> for a formal education at a university, yet who has an active interest
> in programming and a fair amount of talent and wants to learn
> professional-level coding skills to do so?
>
> The Internet is abundant with sites that offer very useful tutorials
> on this or that programming problem. But what about the big picture?
> What about how to structure a complicated project from the very
> beginning, so one does not generate code full of blind alleys and
> which is unmaintainable, difficult to modify and expand?
>
> I have over 200 separate files in my project, and they all work the
> way they should. Yet it is not modular, so adding a new feature is an
> exercise in tedious tracing through lines and lines of code, adding,
> fixing, modifying and testing over and over. If I had known how to
> write flexible, modular code in the beginning, it would have made the
> job a lot easier. I still don't know how to do it.
>
> Isn't there some place on the Internet where this issue is addressed?
> Surely some university has an online set of courses. Where are they?
>

The problem with the internet is there are far more poor tutorials which
teach you bad practices than there are good ones. Look at the number
which *still* assume register_globals is on, for instance. Some are
even worse.

And how is a relatively new programmer (or at least someone new to the
language) know which are good and which are bad? There really isn't.

The same goes for newsgroups. I remember one person who's no longer
posting here who swore that encapsulation was not one of the major parts
of OO programming. He even had some obscure sites from people no one
ever heard of to support his concept. He claimed he had been doing OO
programming for years - when all he had been doing was part of the job
and calling it OO programming. Yes, he was "self-taught".

As for how to modularize your code. That is a much more complex topic
than syntactical issues, and very hard to describe in tutorials. It's
really more of an experience issue - the kind of experience you get when
working on large projects with multiple programmers. And experienced
designers and project managers are even more important as the project
gets larger.

The bottom line is - the right tutorials are good. But nothing beats
good experience.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Re: Programming skills - growing from amateur to pro

am 21.04.2008 19:15:28 von Alan Little

Carved in mystic runes upon the very living rock, the last words of
Jerry Stuckle of comp.lang.php make plain:

> firewoodtim wrote:
>>
>> The Internet is abundant with sites that offer very useful tutorials
>> on this or that programming problem. But what about the big picture?
>> What about how to structure a complicated project from the very
>> beginning, so one does not generate code full of blind alleys and
>> which is unmaintainable, difficult to modify and expand?
>>
>> I have over 200 separate files in my project, and they all work the
>> way they should. Yet it is not modular, so adding a new feature is
>> an exercise in tedious tracing through lines and lines of code,
>> adding, fixing, modifying and testing over and over. If I had known
>> how to write flexible, modular code in the beginning, it would have
>> made the job a lot easier. I still don't know how to do it.
>>
>> Isn't there some place on the Internet where this issue is
>> addressed? Surely some university has an online set of courses.
>> Where are they?
>
> The problem with the internet is there are far more poor tutorials
> which teach you bad practices than there are good ones. Look at the
> number which *still* assume register_globals is on, for instance.
> Some are even worse.

But working with other programmers in a structured work environment
isn't necessarily going to be any better. There are plenty of
incompetent programmers out there earning a paycheck -- I've worked with
a few. Of course, in a formalized educational environment you're more
likely to find good guidance, but even that isn't guaranteed, and not an
option for the OP anyway.

> The same goes for newsgroups. I remember one person who's no longer
> posting here who swore that encapsulation was not one of the major
> parts of OO programming. He even had some obscure sites from people
> no one ever heard of to support his concept. He claimed he had been
> doing OO programming for years - when all he had been doing was part
> of the job and calling it OO programming. Yes, he was "self-taught".

Well, no amount of formal education or structured work environment can
cure stubborn stupidity.

> As for how to modularize your code. That is a much more complex topic
> than syntactical issues, and very hard to describe in tutorials. It's
> really more of an experience issue

Exactly what I was going to say...

> the kind of experience you get when working on large projects with
> multiple programmers.

....up to that point :)

Obviously, you can learn a lot in such conditions, and I'm not saying
one shouldn't pursue that option if possible. But what it comes down to
is, no matter where you turn for guidance, whether it's an internet
tutorial or a class with Edsgar Dykstra, you need to evaluate what
you're taught, see if it makes sense, see if it fits, see if it works.
Too many people think education consists of swallowing data whole and
spitting it back out onto an exam paper and then into a programming
editor when they get a job, but the way to really learn is think and
evaluate the data you're presented. From the questions he's asking, it
sounds like the OP is up to the challenge.

--
Alan Little
Phorm PHP Form Processor
http://www.php-form.net/

Re: Programming skills - growing from amateur to pro

am 21.04.2008 19:41:04 von Jerry Stuckle

Alan Little wrote:
> Carved in mystic runes upon the very living rock, the last words of
> Jerry Stuckle of comp.lang.php make plain:
>
>> firewoodtim wrote:
>>> The Internet is abundant with sites that offer very useful tutorials
>>> on this or that programming problem. But what about the big picture?
>>> What about how to structure a complicated project from the very
>>> beginning, so one does not generate code full of blind alleys and
>>> which is unmaintainable, difficult to modify and expand?
>>>
>>> I have over 200 separate files in my project, and they all work the
>>> way they should. Yet it is not modular, so adding a new feature is
>>> an exercise in tedious tracing through lines and lines of code,
>>> adding, fixing, modifying and testing over and over. If I had known
>>> how to write flexible, modular code in the beginning, it would have
>>> made the job a lot easier. I still don't know how to do it.
>>>
>>> Isn't there some place on the Internet where this issue is
>>> addressed? Surely some university has an online set of courses.
>>> Where are they?
>> The problem with the internet is there are far more poor tutorials
>> which teach you bad practices than there are good ones. Look at the
>> number which *still* assume register_globals is on, for instance.
>> Some are even worse.
>
> But working with other programmers in a structured work environment
> isn't necessarily going to be any better. There are plenty of
> incompetent programmers out there earning a paycheck -- I've worked with
> a few. Of course, in a formalized educational environment you're more
> likely to find good guidance, but even that isn't guaranteed, and not an
> option for the OP anyway.
>

No, there never is a guarantee. But you have a lot better chance of
getting good habits when working in that structured environment. And
the larger the company, the better the chance you have of getting
programmers, designers and project managers who know what they're doing.


>> The same goes for newsgroups. I remember one person who's no longer
>> posting here who swore that encapsulation was not one of the major
>> parts of OO programming. He even had some obscure sites from people
>> no one ever heard of to support his concept. He claimed he had been
>> doing OO programming for years - when all he had been doing was part
>> of the job and calling it OO programming. Yes, he was "self-taught".
>
> Well, no amount of formal education or structured work environment can
> cure stubborn stupidity.
>

No, but again, working with others definitely is a help.

>> As for how to modularize your code. That is a much more complex topic
>> than syntactical issues, and very hard to describe in tutorials. It's
>> really more of an experience issue
>
> Exactly what I was going to say...
>
>> the kind of experience you get when working on large projects with
>> multiple programmers.
>
> ...up to that point :)
>
> Obviously, you can learn a lot in such conditions, and I'm not saying
> one shouldn't pursue that option if possible. But what it comes down to
> is, no matter where you turn for guidance, whether it's an internet
> tutorial or a class with Edsgar Dykstra, you need to evaluate what
> you're taught, see if it makes sense, see if it fits, see if it works.
> Too many people think education consists of swallowing data whole and
> spitting it back out onto an exam paper and then into a programming
> editor when they get a job, but the way to really learn is think and
> evaluate the data you're presented. From the questions he's asking, it
> sounds like the OP is up to the challenge.
>

Very true.

I do training programmer training for corporations, and I really try to
find out what the students are going to be doing. I then try to tailor
my lectures to be more relevant to them - i.e. examples that I show on
the white board are similar to what they will see in their job. It's
all a matter of making the material relevant.

However, again, if someone doesn't have much experience, he/she doesn't
have any background to evaluate that data. And an attempt to do so will
more probably lead to poor decisions than good ones.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Re: Programming skills - growing from amateur to pro

am 21.04.2008 21:06:17 von firewoodtim

Well, folks, thanks for the responses, and it looks like experience
with knowledgeable colleagues is the way to go - just not for me.

On the other hand, for the sake of my own spirits, I must say that I
think I can understand programming elegance when I see it (once I've
finally understood it). So I have ordered some books on design
patterns and will use what I read there to start thinking about how to
design version 2 of my project.

I'll be back with more posts and lots of questions. Maybe we will
build a new venue right here for learning.

Re: Programming skills - growing from amateur to pro

am 21.04.2008 21:10:39 von Charles Calvert

On Mon, 21 Apr 2008 08:58:41 -0400, firewoodtim
wrote in
<643p045qf9fagf9tnh7paonc630egp5bbc@4ax.com>:

[snip discussion of being self-taught vs. working with others]

>This moves in the direction I was trying to find, when I posted the
>original question. Is there a way for someone for whom employment
>with skilled programmers is not an option, who cannot take the time
>for a formal education at a university, yet who has an active interest
>in programming and a fair amount of talent and wants to learn
>professional-level coding skills to do so?

Yes. I've done it and I'm not alone, nor am I unusual; if I can do
it, so can you.

>The Internet is abundant with sites that offer very useful tutorials
>on this or that programming problem.

As Jerry says, the average quality of code you find lying around the
'net is not all that good.

>But what about the big picture? What about how to structure
>a complicated project from the very beginning, so one does not
>generate code full of blind alleys and which is unmaintainable,
>difficult to modify and expand?

Ah, now we're talking software architecture, which is a different
beast. I'm not aware of any tutorials on this subject. There may be
some, but I'd be surprised if there were many, because it's a complex
topic, much more so than, say, a class to manipulate jpeg images.

I'd recommend reading "Design Patterns" (mentioned in my first
response). There are likely some other good books out there too, but
I can't think of any others to recommend off the top of my head, other
than Knuth's writings.

>I have over 200 separate files in my project, and they all work the
>way they should. Yet it is not modular, so adding a new feature is an
>exercise in tedious tracing through lines and lines of code, adding,
>fixing, modifying and testing over and over. If I had known how to
>write flexible, modular code in the beginning, it would have made the
>job a lot easier. I still don't know how to do it.

Rewrite the code and, as you do, look for places in the code where you
have to solve the same problem many times. That code's a prime
candidate for being placed in a class of its own. Try to group like
things or derive from existing classes to add the functionality you
need. For example, if you have a need to regularly display data in a
table in which the background colors of the rows alternate, write a
class to do that. You can then reuse it in your application and in
future applications.

> Isn't there some place on the Internet where this issue is addressed?
>Surely some university has an online set of courses. Where are they?

Possibly. I'd start checking your local universities, particularly
those that cater to professional education, and see what they offer.
--
Charles Calvert | Software Design/Development
Celtic Wolf, Inc. | Project Management
http://www.celticwolf.com/ | Technical Writing
(703) 580-0210 | Research

Re: Programming skills - growing from amateur to pro

am 22.04.2008 13:16:03 von Alan Little

Carved in mystic runes upon the very living rock, the last words of Alan
Little of comp.lang.php make plain:

> no matter where you turn for guidance, whether it's an internet
> tutorial or a class with Edsgar Dykstra,

Eep! Sorry -- that should be Edsger Dijkstra.

--
Alan Little
Phorm PHP Form Processor
http://www.php-form.net/

Re: Programming skills - growing from amateur to pro

am 22.04.2008 17:31:16 von nc

On Apr 21, 5:58 am, firewoodtim wrote:
>
> This moves in the direction I was trying to find, when I posted the
> original question. Is there a way for someone for whom employment
> with skilled programmers is not an option, who cannot take the time
> for a formal education at a university, yet who has an active interest
> in programming and a fair amount of talent and wants to learn
> professional-level coding skills to do so?

Let me ask you this: If you can't take time for formal education in
this age of adult education proliferation, can you take time to learn
any other way?

> The Internet is abundant with sites that offer very useful tutorials
> on this or that programming problem. But what about the big picture?
> What about how to structure a complicated project from the very
> beginning, so one does not generate code full of blind alleys and
> which is unmaintainable, difficult to modify and expand?

That's called design, and it's a skill different from coding.
Moreover,
it's a skill that is very difficult to teach. So future designers
(currently biding their time as coders) learn mostly by observing
other
designers (and especially their mistakes). This is why it is crucial
for an aspiring designer to be a part of a software organization
(whether
it is a for-profit company or an open-source project); there is simply
no
other way to rub elbows with actual designers.

> Isn't there some place on the Internet where this issue is addressed?

None I am aware of.

> Surely some university has an online set of courses. Where are they?

Courses on software design are generally taught with C++ or Java
in mind. The Gang of Four wrote their book with examples in C++ and
Smalltalk. Applying software design principles to interpreted
languages without persistence is still very much an emerging field...

Cheers,
NC