General question to other developers...

P

Peter Duniho

[...]
And when I was writing software with other developers for chemical
plants, I explained repeatedly that pressure and temperature affect the
volume of a fluid, but still got the same questions over and over again
(the valve is open 100% all the time, but the volume fluctuates; why?)
from the same two people because they just could not comprehend that one
simple fact.

All due respect, those experiences do not show that those people were
unteachable. It simply shows that they failed to be taught.

In any case, we're not talking about people who are simply not "cut-out"
to learn something particular. The thesis here is that there are people
who cannot be taught to program well, but could have been if only they
hadn't learned BASIC.

I think it's a pretty lame excuse for a teacher to blame their failure to
be able to teach a person something on something that person had been
taught previously.

Pete
 
P

Peter Duniho

[...]
My son is now 18, and I want him to learn to write code.

For what it's worth, most of the children I am in constant contact with
are significantly younger than that, and I made the assumption (bad idea,
I know) that your son was younger too.

An 18 year old is basically an adult. They've still got a lot of maturing
to do, but mentally they have completed the bulk of their development. In
particular, they have pretty much all the necessary tools with respect to
abstract thinking required for effective programming in any relevant
situation. I think a motivated, interested 18 year old can learn
programming in pretty much environment without the environment itself
becoming a barrier.

It's a very different question than that of teaching young children, which
is what I thought we were discussing. Obviously the relevance of my
comments is significantly less, given the actual situation.

Pete
 
J

Jon Skeet [C# MVP]

Peter Duniho said:
For what it's worth, most of the children I am in constant contact with
are significantly younger than that, and I made the assumption (bad idea,
I know) that your son was younger too.

Ditto - partly because I'm beginning to wonder how and when to start my
eldest off on programming, assuming he's interested. (He's 4 now. I'll
get more fun a few years later, when I can start to teach the twins -
an ideal way to start off with pair programming!)
An 18 year old is basically an adult. They've still got a lot of maturing
to do, but mentally they have completed the bulk of their development. In
particular, they have pretty much all the necessary tools with respect to
abstract thinking required for effective programming in any relevant
situation. I think a motivated, interested 18 year old can learn
programming in pretty much environment without the environment itself
becoming a barrier.

Yup. I wouldn't like to start off teaching a young child about OO with
things like polymorpishm, but a young adult is a different matter.

(Someone mentioned Logo and BASIC in the same post, btw - one of the
most rewarding things I did as a 10 year old was to write a Logo
interpreter in Spectrum BASIC. The Spectrum BASIC manual was brilliant
- I learned trigonometry from it, effectively.)
 
K

Kevin Spencer

You may be experiencing some of your concern as a result of not seeing the
long historical view of the development of programming languages, and the C
family in particular. Programming languages have been evolving ever since
the first Assembler code was created in order to facilitate the generation
of machine code, which is ultimately what all code becomes. Your son should
learn something about the foundations of programming languages before he
dives into code. The point here is that programming evolves in nature, and
programming languages evolve, but ultimately they all do the same things
they did originally. Sequence, Selection, and Iteration underly all
processes. All data is "simply" bits.

As for the C family, which I am particularly fond of (I started out with C,
and have never regretted the decision), C was a fairly early entry into the
high-level (read "above Assembler") language pool, with syntax resembling
Pascal, which another poster mentioned. C was created to be concise and
powerful, and to resemble the actual mathematical processes that it
abstracted. For this reason, learning C can be very useful in terms of
understanding what programming is, and what it does, including how the
processor works, and the mathematical nature of all computer operations.

Each successive "version" of C, starting with C++, has been what might be
characterized as an "extension" of the C language, which was intentionally
designed to be extensible. C++ was literally such an extension originally,
the first object-oriented C language, which abstracted the programming model
further with object-oriented principles and additional syntax to accomodate
these new abstractions. The "++" (iterator) in the name exemplifies this. C#
took the abstraction further, and incorporated much friendlier syntax, in
terms of these abstractions (Hence, the overlapping iterator symbols in the
name). While a C++ program still looks a lot like the procedural C code that
it is based upon, C# class-related code looks more like the abstractions
which it represents. The syntax is less cryptic, but still strongly
resembles C in most ways, and in fact, can accomodate in-line C code blocks.

Some of C# was developed to accomodate and interact with the .Net platform
on which it operates, which includes automatic memory management (garbage
collection) and object-oriented value types, something which C++ could not
accomplish.

With each successive version of C#, more extensions have been added, such as
Generics and Linq. These have been added for the same purposes, to simplify
and streamline the coding process. But it is important to note that they are
not necessary for writing software. They simply encapsulate functionality
which formerly took more code to create. Therefore, it is not necessary to
be able to work with all of these extensions to learn C#.

In other words, what I'm saying is that learning programming is a lot like
the process of writing software. It is best handled one chunk at a time. So,
you needn't worry about your son having to learn all of it (in fact, it is
not possible, as it continues and will continue to evolve). Like anything
else, if he starts with the basics, he can work his way up at his own pace.
I'm not suggesting that you start him off with C, but he can easily learn
the base C# language as you have, starting with the simplest concepts, and
working his way up from there. The archetypical "Hello World" application
remains the best starting place, as it involves the simplest sort of
programming, and it is important not to overwhelm the beginner, lest he/she
lose heart.

--
HTH,

Kevin Spencer
Chicken Salad Surgeon
Microsoft MVP
 
I

Ignacio Machin \( .NET/ C# MVP \)

Hi,


Jon Skeet said:
I don't think C# is an ideal first language, to be honest -
particularly not C# 2 and 3. I've heard good things about Squeak, a
Smalltalk variant often used for education.

In my university the classes were teached first in Pascal and now they use
Java. This is the introductory curse, after that you use C++ for the most
part.

IMHO you can use C# as a learning language and simply left out the most
"tricky" features, after all you can still use "goto" in C# :)

But still for a complete picture you need to move out and explore other
languages like C++ to deal with memory management and if possible a
functional language too.
 
S

Scott Roberts

Peter Duniho said:
I don't understand that comment, and I think it's hopelessly
narrow-minded. Just because Dijkstra knows something about programming,
that doesn't mean he knows something about _teaching_ programming. That
statement proves to me that he doesn't know enough about teaching.

An entire generation of programmers were raised on BASIC, myself
included. I have not found my BASIC experience to be a liability, and in
fact if anything it made me appreciate the more structured environments I
was exposed to later. Beyond that, BASIC is extremely simple and provides
a no-nonsense, no-complications initial exposure to the idea of thinking
like a computer.

Frankly, I've seen far too many people approach programming from a sort of
gestalt, holistic point of view, trying to do everything at once rather
than applying a good methodical approach. They have no idea where to
start, so they try to start everything all at once and fail miserably. I
suspect that these people have been exposed to higher-level, highly
abstract concepts far too early. They don't have the discipline required
to work through problems a piece at a time the way that computers insist
on.

And finally, any teacher who says that teaching a student is impossible is
simply a failure as a teacher. Assuming a student who is willing, any
competent teacher should be able to convey whatever concept they need to.
Blaming that failure on the student or the student's prior experience is a
cop-out. It is true that the "law of primacy" applies, and a student who
has learned bad habits from their use of BASIC will have to unlearn them
and this is harder than learning the good habits in the first place. But
BASIC doesn't in and of itself cause bad habits (you can just as easily
teach good habits in BASIC as elsewhere, within the limitations of BASIC
of course), and in any case these bad habits are always unlearnable.

Maybe it's my own bias, based on my own experience, but I don't consider
myself a bad programmer and I don't think that I was "mentally mutilated
beyond hope of regeneration". I think it's silly for anyone to claim that
BASIC is necessarily going to be a cause of something like this happening.

Pete

That's a pretty high soap-box, Pete.

Especially for someone who said this just the other day:

"I can't answer that question, not knowing enough college interns, and it
having been far too long ago for me to really remember what it was like to
be a college student myself."
 
S

Scott Roberts

Peter Duniho said:
That's not why I think of OOP as being advanced. OOP requires a certain
level of abstract thinking that is simply not even present in most young
children. On the other hand, the idea behind a basic loop iteration (for
example) is something anyone who can count and follow instructions can
easily grasp.

OOP _is_ advanced. And not just because I didn't learn it first.

I'm curious how you reconcile your comments here with your assertion in
another thread that use of delegates & anonymous methods is actually "more
readable" than basic loop iteration (which, according to you, hides the
intent of the code). I realize that delegates and anonymous methods are not,
strictly speaking, OOP. But any rational thinker would admit that they are
more advanced that basic loop iteration.
Irrelevant. The assertion was that it's impossible to teach good
programming practices to someone who started with BASIC. To refute that
assertion you need only demonstrate some (or one, for that matter)
programmers who started with BASIC but who have learned good programming
practices.

You seem to have missed the obvious hyperbole.
 
S

Scott Roberts

Peter Duniho said:
[...]
And when I was writing software with other developers for chemical
plants, I explained repeatedly that pressure and temperature affect the
volume of a fluid, but still got the same questions over and over again
(the valve is open 100% all the time, but the volume fluctuates; why?)
from the same two people because they just could not comprehend that one
simple fact.

All due respect, those experiences do not show that those people were
unteachable. It simply shows that they failed to be taught.

In any case, we're not talking about people who are simply not "cut-out"
to learn something particular. The thesis here is that there are people
who cannot be taught to program well, but could have been if only they
hadn't learned BASIC.

I think it's a pretty lame excuse for a teacher to blame their failure to
be able to teach a person something on something that person had been
taught previously.

Pete

Actually, that's not the thesis at all. The thesis is simply that BASIC
teaches more bad habits than good. I'm 100% certain that Dijkstra was simply
stating that it's more difficult to teach programmers who started on BASIC,
and tossed in a little hyperbole to make his point.

I'm not saying that I agree with that thesis, but at least argue the correct
point.
 
J

Jon Skeet [C# MVP]

Actually, that's not the thesis at all. The thesis is simply that BASIC
teaches more bad habits than good. I'm 100% certain that Dijkstra was simply
stating that it's more difficult to teach programmers who started on BASIC,
and tossed in a little hyperbole to make his point.

I'm not saying that I agree with that thesis, but at least argue the correct
point.

I think it's reasonable to argue with the words Dijkstra used. Just to
put both Dijkstra's words and Peter's understanding together:

Dijkstra:
"It is practically impossible to teach good programming to students
that
have had a prior exposure to BASIC: as potential programmers they are
mentally mutilated beyond hope of regeneration."

Peter's interpretation:
"The thesis here is that there are people who cannot be taught to
program well, but could have been if only they hadn't learned BASIC."

It seems a pretty reasonable interpretation to me. It's possible that
Dijkstra *meant* that it's harder to teach programmers who'd started
on BASIC, but that's definitely not what he *stated*.

If we can all agree that what Dijkstra actually *stated* is
unreasonable, we can move on to debate one particular guess as to what
he *meant*.

Jon
 
S

Scott Roberts

I think it's reasonable to argue with the words Dijkstra used. Just to
put both Dijkstra's words and Peter's understanding together:

Dijkstra:
"It is practically impossible to teach good programming to students
that
have had a prior exposure to BASIC: as potential programmers they are
mentally mutilated beyond hope of regeneration."

Peter's interpretation:
"The thesis here is that there are people who cannot be taught to
program well, but could have been if only they hadn't learned BASIC."

It seems a pretty reasonable interpretation to me. It's possible that
Dijkstra *meant* that it's harder to teach programmers who'd started
on BASIC, but that's definitely not what he *stated*.

Arguing semantics is pointless.
If we can all agree that what Dijkstra actually *stated* is
unreasonable, we can move on to debate one particular guess as to what
he *meant*.

The only debate worth having is one about ideas.

If you really think that Dijkstra's meaning was that it is literally
impossible to teach good programming to someone who first learned BASIC
because their brain has literally been mutilated beyond hope of
regeneration, then you are 100% correct in calling his statement silly. In
fact, it's so obviously silly that it's clearly not what he meant - which,
of course, is the very definition of hyperbole.
 
J

Jeff Louie

Bob.. My first Z80 assembly project moved a fish around the screen on an
8K
Exidy Sorcerer. My second assembly project printed text sideways since
all I had
was a narrow thermal printer.

IMHO this type of positive feedback is really useful to a beginner, no
matter what
the language. So I would consider practical scripting use a script
language as a
first step, where the coder can see practical and useful results.

Regards,
Jeff
 
P

Peter Duniho

I'm curious how you reconcile your comments here with your assertion in
another thread that use of delegates & anonymous methods is actually
"more readable" than basic loop iteration (which, according to you,
hides the intent of the code).

I never wrote that "basic loop iteration" "hides the intent of the code".
I did say that the intent is harder to see, but that's a completely
different statement. Please don't put words in my mouth.

As far as reconciling goes, there's no reconciling to do. In the other
thread, I made it very clear that the question of "readable" is subjective
and dependent on one's experience. The question was whether one should
denigrate certain language concepts as being bad choices simply on the
basis of one's own lack of understanding of the concepts.

That's a completely different question from whether one needs to learn one
programming concept before moving on to another. You are comparing apples
to oranges.
You seem to have missed the obvious hyperbole.

The quoted statement is only a contradiction of what I suggested if you
take it literally. Hyperbole or not, it's not a valid refutation of what
I wrote.

Pete
 
P

Peter Duniho

That's a pretty high soap-box, Pete.

And the original quote wasn't? Right.
Especially for someone who said this just the other day:

"I can't answer that question, not knowing enough college interns, and it
having been far too long ago for me to really remember what it was like
to
be a college student myself."

Bravo. Very nice straw-man Scott. Blew right over, didn't it?

It's amazing what you can do when you take things out of context, eh?
 
S

Scott Roberts

Peter Duniho said:
I never wrote that "basic loop iteration" "hides the intent of the code".
I did say that the intent is harder to see, but that's a completely
different statement. Please don't put words in my mouth.

I apologize. For the record, here is the exact quote:

"I _can_ tell you that I find the intent of the code much more apparent in
the second version. The first version is very clear about the mechanics,
but any interpretation of the intent is completely hidden."

(The "second version" refers to anonymous methods and delegates, the "first
version" is an iterative loop)

I guess we simply differ in our understanding of the phrase "intent is
completely hidden". I'm sorry that I apparently misunderstood you.
 
P

Peter Duniho

I guess we simply differ in our understanding of the phrase "intent is
completely hidden". I'm sorry that I apparently misunderstood you.

You did. I was referring to a specific example. The statement was not a
general indictment of looping constructs.
 
S

Scott Roberts

Peter Duniho said:
And the original quote wasn't? Right.


Bravo. Very nice straw-man Scott. Blew right over, didn't it?

It's amazing what you can do when you take things out of context, eh?


Sorry Peter, but yesterday you were claiming ignorance on the capabilities
of new programmers (e.g. college interns) as it relates to the "readability"
of various blocks of code. Today you seem to be an expert in the area of
teaching programming to new students. Forgive me if I'm a little confused.
 
P

Peter Duniho

Sorry Peter, but yesterday you were claiming ignorance on the
capabilities of new programmers (e.g. college interns) as it relates to
the "readability" of various blocks of code.

Read my posts again. You are misinterpreting them to suit your own whim.

In particular, the problem with understanding what's "readable" to a
college intern or anyone else is that, AS I HAVE SAID NUMEROUS TIMES, that
question is subjective in nature.
Today you seem to be an expert in the area of teaching programming to
new students.

Expert? No. But I do have some knowledge of teaching, yes. In any case,
what's teachable has zero to do with what a person naturally finds
"readable". Your conflation of the two issues is, quite frankly, absurd.
Forgive me if I'm a little confused.

You are forgiven, assuming you will stop trying to twist every little word
into something it's not. You would do well to give the benefit of the
doubt until you are sure you have comprehended what's been written.
You're not doing that right now. Instead, you just make up whatever
interpretation suits you and then use that false interpretation to
buttress an invalid point.

Forgiveness is for those who are truly apologetic.

Pete
 
J

jehugaleahsa

I've been writing in C# for about 4 years now, coming from VB.net and
VB6 before that, in which I know I'm not alone. I found learning C#,
at least to the extent that I use it in developing database front-
ends, to be rather painless. The language and VS ide seemed
comfortable pretty quickly.

Some of the enhancements that have come along in the last two updates
(via VS 2005 and 2008) like Generics and now Linq and anonymous types
etc, are really nice, but seem to have made the learning curve a bit
steeper. I'd like to see my son learn coding, but where I used to tell
him he could get off the ground in a few months, that now seems more
like two or three years. After all, how would you use Linq to Sql if
you didn't understand T-Sql yet? And WPF seems like it has great
potential, but that's another layer again.

Anybody have thoughts they care to share on this?

Bob

Depends on what your ambitions for your son are. If you want him to be
a wise, all-knowing programmer, then you're getting ahead of yourself.
There is no better way to start programming than with a simple "Hello,
World". How you show him how to do it is the interesting part.

Now, personally, I prefer to teach programming starting from the
command console application. I let more complicated topics like forms
come in later, since they tend to limit you to one platform and they
hide a lot of details. For simple console applications, C# is hard to
beat. If he gets to the point where he needs collections, start him
out with something simple like Array or ArrayList. When he gets tired
of casting all the time, introduce generics.

Of my students, most of them pick up generics first by memorizing the
syntax and then only later grasping the "fill in the blank" concept.

Again, personally, SQL is in itself a whole new programming language.
It is an advanced topic for a starter. It is probably one of the most-
used programming tools, as well. But, again, start with something
simple, like flat files, and when he gets tired of parsing all the
time, introduce 'a' database management system and portable SQL. When
he gets tired of writing SQL in-line with the code, teach him stored
procedures, and so on. There are so many branches in computer science
that you can either become a master at one topic or you can fan
yourself out over multiple topics. I fan myself out fairly well and it
comes in handy for making good design decisions. I also don't like the
feeling of being "done" with a branch because I like to keep striving
to find newer and better ways.

I believe that becoming a good programmer involves being interested in
what you are doing. If you hit topic after topic, spilling your brains
out, you're just going to frustrate the kid. I have tutored/tortured
enough people to know when too much is too much. For some people,
getting the idea of 'Hello, World' is enough. For people with an
interest, it seems to grow naturally without any help. I tend to get
my students accustom to showing me everything they do. When they think
they did some thing cool, I pat them on the back and say, "You know
what would make this really cool?" or "Check this out!". A lot of
times, just bringing up phrases like: design pattern, SQL, HTML, Web
Service, XML, <language name>, <operating system>, <field of research>
lets them know there are things out there for doing what interests
them.

The way I see it, everyone at some point thinks MessageBox.Show is the
sweetest thing ever. When we get tired of clicking 'OK', we want to
try newer, harder things. My personal favorite thing to do anymore is
just to write a cool application and spend the rest of my time
improving it. Anyone can make something work; it takes talent to make
it work well; it takes even more talent to make the code approachable.

And remember, you're not the best programmer in the world. Don't
always correct his code by putting curly braces in the right place. He
may develop his own style and defensive programming techniques that
work better for him (and better than yours do for you). What is
instructive, though, is to show flaws in logic by doing something to
break his code. Say, "Oops"; it builds a competitiveness in the
student to make their code unbreakable. When coders become defensive,
they tend write better code the first time around . . . the proverbial
"well, what if . . .".

Most of all, make learning programming fun. Don't go about
"assignments" with anal requirements. Make applications straight-
forward - something to "just get it done". One thing that always
killed programming juices were assignments that asked students to
parse lines, or something that could be done in an easier fashion. If
your assignment is to parse lines, then make that the assignment. If
it is to calculate an average, make parsing simple. Beginning
programmers have trouble with assignments with multiple requirements
because each requirement is a battle - which each can take a whole
week - they don't need another one hanging over their heads to bog
them down.

Here is a pretty generic agenda for programming students:

1) Hello, World - Simply learn the syntax and basic operation of the
environment/language.
2) Hello, <Input> - Get user input and display it on the screen.
2.1) Introduce IF - Introduce conditional branching and have them
output different results depending on input.
2.2) Introduce While, etc. - Introduce looping to perform an action
multiple times.
3) Count - Count the number of lines in a file or from the command
line.
4) Average - Calculate the average from numbers passed in.
5) Min/Max - Find the minimum/maximum in a list (can be done while
receiving input).
6) Array - Store the input in a array and then print it out.
7) Cumulative - Redo the previous exercises with the array now.
8) Sort - sort the input using bubble, insertion, and/or selection
sort (a mix between min, swap and iteration).
8.5) Introduce methods/functions - Place separate code into functions/
methods; e.g. Count, Sum, Average, Max, Min, Sort.
9) Multiple Arrays - Have input where the first item is a key and the
other items are values. Store the items in separate arrays. Keep
association between key and values by index while performing sorts,
averages, etc.
10) Introduce Structures/Classes - Instead of storing information in
in arrays and associating by index, create a class to contain all
values. Repeat program above.
11) Introduce methods - Put calculations on objects into methods
inside the object class.
12) Introduce accessibility/visibility - Hide fields, such as sum/
average, in private fields. Use properties to make visible or use
properties to calculate.
13) Introduce inheritance - Create a super class. Explain keywords
like virtual and sealed.
14) Introduce interfaces - Create interface for both classes.
15) Introduce abstract class - Create abstract base class for both
classes. (Good time to teach "Concrete classes only as leaves")
16) Polymorphism - Stick both classes in an Array or ArrayList and
extract as interface. Call method through interface.
17) Accessibility Part 2 - Explain protected and internal.
18) Introduce Generics - Make ArrayList above List<T>.
19) Data Structures - implement as easily as possible.
19.1) Array<T> - indexer, fixed-size
19.2) List<T> - add, remove, find (insert is advanced)
19.3) LinkedList<T> - insert on front/back/middle, remove, find
(splice is advanced)
19.4) BinarySearchTree<T> - add, find (remove can be advanced)
19.5) Graph - shortest path, etc.
20) Forms - basics about forms.
21) XML - basics about.
22) Database - basics about SQL.
23) Source control - basics about source control.
24) Other technologies - other languages, systems programming,
serialization, operating systems, algorithms, design patterns, etc.
25) Software Engineering/Architecture - explain requirements
gathering, design, flow model, testing, etc.
26) Independent study - where you go, "You know what would make that
even better?"

That is a fairly flexible path for someone to follow if they want to
get the basics down first. Usually, students tend to pick things up as
they go along. The further down the list they get, the longer it
takes. Most of my students never get past data structures and get hung
up somewhere between polymorphism and generics. Those who are
interested seem to get to binary search trees, or beyond, before they
start to struggle. A good thing to do is have a reference manual when
teaching a new language. Wrox makes a fairly decent Professional C#
book. It is a great supplement and gives students a chance to learn
about features not covered in their lessons. I often reward students
who find a .NET class to do their programs for them (I just make them
do it over and give them bonus points).

I am not saying C# is the ultimate language for teaching. Mostly
likely, any language you choose will have you hitting these topics.
However, VS makes programming fairly easy and lightens memory load
(Intellisense and what not).

Hope it helps,
Travis

P.S. - I would like to say I do not agree with programming courses and
books that teach classes straight forward. Many courses now teach
classes first because of the requirement that all code be contained in
classes in languages like Java and C#. However, when learning C/C++,
you weren't required to know functions to work with "int main()".
Students have trouble grasping Integers ("why can't they have decimal
points and be as big as you want?") and putting a class in the mix can
be even more confusing. Personally, I believe classes should be first
thought of as syntactic candy and then later revealed. I mean, no
language would expect a start-up programmer, let alone a professional,
to understand console I/O. Let's try to keep it simple, stupid! That's
my guff.
 
J

jehugaleahsa

It's a good thing he's dead, because he'd be deeply offended at that
statement.

That seems doubtful to me. How could someone who makes such blatantly
offensive statements themselves be so easily offended?

In any case, if he would be offended, then he ought not to have made such
an offensive statement. People in glass houses, etc.
The thing is, Dijkstra had a very different view from what programming
is (or ought to be) than most of us do, and it was that view he was
trying to teach.

If your point is that his idea of what's a "good programmer" is different
from the rest of the world's idea, that's fine with me. But then the
quoted statement is entirely irrelevant in this discussion.
[...]
And finally, any teacher who says that teaching a student is impossible
is simply a failure as a teacher.
On the other hand, anyone who claims that, given enough time and effort,
*anyone* could be taught to program well, is arguably part of the
problem.

I did qualify my comment as being applicable only to a student who is
themselves willing to be part of the process.

There are obviously some people that are unteachable. Whether due to
mental defect or simply their lack of interest in the topic. But
otherwise, it is simply untrue that it could be impossible to teach a
particular person a particular topic. Human beings are designed to learn,
and given a student has all the normal functioning human intelligence and
who is able and willing, they can be taught anything.

Pete

I had a probability teacher who claimed he had taught his 3 year-old
advanced calculus. He wasn't bluffing, either. He wasn't a good
teacher, but he was sure "a monkey could do it." In my experience,
some people refuse to learn about programming. I have met masterminds
who simply didn't like it. One students got an 105% on a test and then
dropped the subject. *Shrugs* Other students have read entire books,
done assignments multiple times over and still manage to get 30%.
*Shrugs* Whether is interest of capacity is the question - I am not
the type to pick a side and run for it. BTW, I am a fan of Djikstra,
and I am fairly confident he had a wonderful sense of humor. :- )
 
J

jehugaleahsa

It is more than likely that, if your son progresses in programming, he
will be writing in an OOP environment.
My belief (as an experienced software developer using pretty much any
language you care to mention (yes, I'm THAT old)) is that the best
thing to teach a student today is OO concepts. These are so poorly
understood by so many developers today, that a good understanding puts
you a step ahead.

No question that OOP is going to be an eventual step for any serious
programmer.

But. We don't insist that children go straight to walking. We let them
practice crawling first. That allows them to master basic concepts like
perception and navigation before they are up on two feet going too fast
for their brains to keep up.

Likewise, even OOP programming still involves a lot of basic procedural
implementation details. I don't care how well a person has been taught
OOP design, if they haven't mastered the basic mechanics first they still
won't be able to write a useful program.
[...]
One problem that occurs here is the abilities of the teacher. Many
teachers were brought up on procedural languages, and many take the
'it didn't do me any harm' view. This is a poor argument.

In that situation, sure. I agree. A bicycle helment is demonstrably
useful in preventing injuries and death that might otherwise occur. Just
because someone lived through not wearing one, that doesn't mean a
helmet's not useful.

But it's a pretty far stretch to use the same argument to justify a claim
that learning programming without OOP concepts as an initial step is
harmful to one's future as a programmer. All the evidence in fact argues
against this claim. On the other hand, it's well-proved that when
teaching something to a person, it does no good whatsoever to jump ahead
to advanced topics before they have mastered the foundational elements.

Pete

My guess is that most American programmers don't write applications,
but are responsible for scripts/batch files, etc. Whether they are
programmers is also a good question. My guess is that the majority of
the remaining programmers are grunts and rarely have part or say in
the design of large software systems. Many programmers can survive
just implementing skeletons, which requires almost no OOP at all,
usually. I agree that OOP is extremely desirable for any programmer to
understand; how many that do understand it can use it? If you want to
be on top, learn a language as fluently as english, hammer design
patterns and gather a ton of experience when to use them. A single man
*can* write a library as complex as some provided by vendors; since he
has complete understanding of the system, he can work faster. Build a
few libraries, build some applications on top of those and then become
a consultant or a software engineer. You just have to prove to someone
that you know what you are doing. Clients like to see things work. I
personally don't feel I have reached the level of experience needed.
But C# is becoming as clear as crystal and OOP is old hat, now.
However, I am already finding myself at the lead of many projects and
consulting/teaching. Just remember that skills are only half the
battle.

Thanks,
Travis
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top