lectures about "programming methodology"

S

Stefan Ram

I decided to watch lecture videos from the Stanford
University about »programming methodology«, which actually
teach Java.

I was somewhat surprised that the lectures of the renowned
Stanford university do not have such a high overall
quality at all.

For example, the lecturer (http://en.wikipedia.org/wiki/Meh
r*n_S*h*mi, where *=a) wrote on the blackboard

»off by one error«,

but what he meant clearly was an

»off-by-one error«.

. Regarding Java, he explained the import statement as if
this was required to make a class »available«, while it does
nothing more than to provide a simple name for a class
instead of its fully qualified name. (To make a class
available, the »-cp« option of java(c) is used.)

He also explained that Java programs were linked by creating
a JAR archive for them. (While in fact the creation of a JAR
archive is not necessary and the linking [that is, replacing
symbolic references by their referents] takes place when the
classes are loaded by the JVM, independently of whether they
come from class files or JAR files.)

But I have watched only the first lectures so far.
 
A

Arne Vajhøj

I decided to watch lecture videos from the Stanford
University about »programming methodology«, which actually
teach Java.

I was somewhat surprised that the lectures of the renowned
Stanford university do not have such a high overall
quality at all.

For example, the lecturer (http://en.wikipedia.org/wiki/Meh
r*n_S*h*mi, where *=a) wrote on the blackboard

»off by one error«,

but what he meant clearly was an

»off-by-one error«.

That is just to keep Lew away.

:)
. Regarding Java, he explained the import statement as if
this was required to make a class »available«, while it does
nothing more than to provide a simple name for a class
instead of its fully qualified name. (To make a class
available, the »-cp« option of java(c) is used.)

He also explained that Java programs were linked by creating
a JAR archive for them. (While in fact the creation of a JAR
archive is not necessary and the linking [that is, replacing
symbolic references by their referents] takes place when the
classes are loaded by the JVM, independently of whether they
come from class files or JAR files.)

First, even the best universities can have some teachers that are
not so good.

Second, I believe that Harvard is more known for Law, Medicine,
Business, Economics than for IT.

Third, some say that the actual education (at bachelor and
masters level - PhD level may be different) is not that much
better at the famous universities than at lesser know
universities and that the benefits of joining is more
about the prestige and the connections one get. As I have never
seen the inside of an American university, then I can not
say if it is true or not.

Arne
 
A

Arved Sandstrom

On 05/05/2013 08:48 PM, Arne Vajhøj wrote:
[ SNIP ]
Third, some say that the actual education (at bachelor and
masters level - PhD level may be different) is not that much
better at the famous universities than at lesser know
universities and that the benefits of joining is more
about the prestige and the connections one get. As I have never
seen the inside of an American university, then I can not
say if it is true or not.

Arne

That's pretty much true almost anywhere. It obviously depends on the
specific discipline, whether the eventual focus is research as a career
or practical application, and so forth.

But for IT specifically, for preparing students for real work, I've seen
two-year vocational/business schools or community colleges often do a
better job of providing some programming language training and a dollop
of useful software engineering than 4-year CS programs at name universities.

I don't know why anyone would even expect a programming language course,
online or otherwise, offered by any school and typically taught by a
faculty member or TA with less time in real-world programming experience
than hundreds of thousands of professional programmers have, to either
be particularly noteworthy or to be better than the dozens of good or
excellent tutorials that have been on the Web for years.

I think it's pointless to pay $$$ to learn programming languages. What
*is* a good idea to pay money for is some courses in software
engineering, but CS programs don't often offer quality courses in that.
Failing that option, again, no shortage of quality books on the
subject...and simply OJT.

If I were aspiring to a career in IT, which does benefit for HR reasons
if nothing else from a bachelor's degree minimum, I'd take a quality
degree in almost anything except CS.

AHS
 
J

Joerg Meier

But for IT specifically, for preparing students for real work, I've seen
two-year vocational/business schools or community colleges often do a
better job of providing some programming language training and a dollop
of useful software engineering than 4-year CS programs at name universities.
I don't know why anyone would even expect a programming language course,
online or otherwise, offered by any school and typically taught by a
faculty member or TA with less time in real-world programming experience
than hundreds of thousands of professional programmers have, to either
be particularly noteworthy or to be better than the dozens of good or
excellent tutorials that have been on the Web for years.
I think it's pointless to pay $$$ to learn programming languages. What
*is* a good idea to pay money for is some courses in software
engineering, but CS programs don't often offer quality courses in that.
Failing that option, again, no shortage of quality books on the
subject...and simply OJT.

Let's not forget that good teaching is about more than JUST the syllabus,
and the best teacher is unlikely to be the one with an autistic level to
detail, and while it would certainly be desireable to have zero mistakes in
the entire course, I would definitely not put it as the #1 priority.

Frankly, if a student trusts that their teacher is the final authority on
the subject matter, they probably aren't ever going to be on a level where
a 100% error free course would make a difference in the first place.

As grating as a teacher making a mistake may be to an outside observer,
what influences whether the students will become adept at the subject
matter is usually a lot less easily defineable.

For example, something I would rate infinitely above "Teacher never makes
any mistakes" would be "Teacher responds well to factual criticism and
repeated my correction in the next lecture".

That being said, I only found the error about linking to be substantial
enough to be worth mentioned at all.

Liebe Gruesse,
Joerg
 
S

Stefan Ram

But I have watched only the first lectures so far.

I just watched another lecture and noticed the following:

He said something to the effect that the type »int« was there
to store an int value. I would say that an int /variable/ is
there to store a value, while the /type/ int can also be the
type of an expression (like »2«) that is not necessarily
stored anywhere at run-time.

He said that a variable had a name. This is not always true
in Java (he referred to Java, since he is exclusively using
Java). In Java there also are anonymous variables, like the
variables of an array.

He said that the remainder operator »%« can only be applied
to integers. This also is not true in Java IIRC.

I am actually watching this to learn English pronunciation
of programming terms (otherwise, I just would read a text),
and what I /did/ like was that for the word »char« he gave
the pronunciations of /kA&/ and /kæ&/ (where A is the open
back unrounded vowel and & is the schwar), which I also use
(/kA&/). Bjarne Stroustrup says it was /tSA&/ (where tS is
the voiceless palato-alveolar affricate), well, maybe that
is valid for C++ programmers ...
 
S

Sven Köhler

He said that a variable had a name. This is not always true
in Java (he referred to Java, since he is exclusively using
Java). In Java there also are anonymous variables, like the
variables of an array.

I know that you are particular precise about thing, but I'm pretty sure,
he will teach that arrays have elements. And he pretty much never
mention the term "anonymous variable" to describe these elements.
To be honest, the notion "anonymous vairable" is really not necessary to
understand how arrays work - and to be honest, your posting is the first
time I read that term.
He said that the remainder operator »%« can only be applied
to integers. This also is not true in Java IIRC.

:) This seems to be a popular misconception. A floating point modulo
operation doesn't seem to feel very "natural" to many people. When I
mention it, they usually ask me for the definition.
I am actually watching this to learn English pronunciation
of programming terms (otherwise, I just would read a text),
and what I /did/ like was that for the word »char« he gave
the pronunciations of /kA&/ and /kæ&/ (where A is the open
back unrounded vowel and & is the schwar), which I also use
(/kA&/). Bjarne Stroustrup says it was /tSA&/ (where tS is
the voiceless palato-alveolar affricate), well, maybe that
is valid for C++ programmers ...

char is short for character, isn't it?


Regards,
Sven
 
S

Stefan Ram

Sven Köhler said:
To be honest, the notion "anonymous vairable" is really not necessary to
understand how arrays work - and to be honest, your posting is the first
time I read that term.

The JLS, while being technical, actually sometimes is quite
easy to read:

One can open the table of contents, spot chapter »10. Arrays«,
and immediately read near the very beginning of that chapter:

»An array object contains a number of variables.« (JLS7 10)

The express »new int[ 3 ]« has its value an array of three
variables, but neither this object nor those variables have
a name.
I know that you are particular precise about thing, but I'm pretty sure,
he will teach that arrays have elements.

»These variables are called the components of the array.« (JLS7 10)
char is short for character, isn't it?

Yes. For »charcoal«, »to char« or »char« meaning a fish
or tea or some such I too would use another pronunciaton.
 
S

Stefan Ram

Supersedes: <[email protected]>
[edited lines marked with »|«]

Sven Köhler said:
To be honest, the notion "anonymous vairable" is really not necessary to
understand how arrays work - and to be honest, your posting is the first
time I read that term.

The JLS, while being technical, actually sometimes is quite
easy to read:

One can open the table of contents, spot chapter »10. Arrays«,
and immediately read near the very beginning of that chapter:

»An array object contains a number of variables.« (JLS7 10)

»The variables contained in an array have no names« (JLS7 10) |

The expression »new int[ 3 ]« has as its value an array of three |
variables, but neither this object nor those variables have
a name.
I know that you are particular precise about thing, but I'm pretty sure,
he will teach that arrays have elements.

»These variables are called the components of the array.« (JLS7 10)
char is short for character, isn't it?

Yes. For »charcoal«, »to char« or »char« meaning a fish
or tea or some such I too would use another pronunciaton.
 
S

Sven Köhler

Sven Köhler said:
To be honest, the notion "anonymous vairable" is really not necessary to
understand how arrays work - and to be honest, your posting is the first
time I read that term.

The JLS, while being technical, actually sometimes is quite
easy to read:
Subtext?

One can open the table of contents, spot chapter »10. Arrays«,
and immediately read near the very beginning of that chapter:

»An array object contains a number of variables.« (JLS7 10)

»The variables contained in an array have no names« (JLS7 10) |

The expression »new int[ 3 ]« has as its value an array of three |
variables, but neither this object nor those variables have
a name.

So apparently I haven't read that part of the JLS. And neither has the
lecturer. And this might me the shock: most people and most lecturers
haven't read the JLS. At least to my experience.
»These variables are called the components of the array.« (JLS7 10)

Well ...
So what did the lecturer call them?


Regards,
SVen
 
S

Stefan Ram

Sven Köhler said:

The precondition for my statement was that some people
believe that specifications of programming languages
always are hard (difficult) to read (understand).
And this might me the shock: most people and most lecturers
haven't read the JLS. At least to my experience.
So what did the lecturer call them?

I do not have the time immediately to seek through the video,
but when I learn about this, I will get back to this thread.
First now, I need time to recover from the shock.
 
J

Joshua Cranmer ðŸ§

I just watched another lecture and noticed the following:

Keep in mind that this course is probably for people who have never
heard of a programming language before. Excessive pedantry may serve to
confuse rather than elucidate, as I have found when TA'ing
introductory-level computer science courses.
He said that a variable had a name. This is not always true
in Java (he referred to Java, since he is exclusively using
Java). In Java there also are anonymous variables, like the
variables of an array.

In general programming language concepts, a "variable" is generally a
user-declared construct with a name, so "anonymous variables" are
usually a contradiction in terminology. I did go back to the JLS and
look it up; what it calls "variables" are what C would call "lvalues" or
are more generally called memory locations.
I am actually watching this to learn English pronunciation
of programming terms (otherwise, I just would read a text),
and what I /did/ like was that for the word »char« he gave
the pronunciations of /kA&/ and /kæ&/ (where A is the open
back unrounded vowel and & is the schwar), which I also use
(/kA&/). Bjarne Stroustrup says it was /tSA&/ (where tS is
the voiceless palato-alveolar affricate), well, maybe that
is valid for C++ programmers ...

There is no universal agreed-upon pronunciation of "char." The common
pronunciations are "kair" (rhymes with air, like the beginning of
character) and "char" (like the beginning of charcoal).
 
S

Stefan Ram

=?UTF-8?B?Sm9zaHVhIENyYW5tZXIg8J+Qpw==?= said:
I did go back to the JLS and
look it up; what it calls "variables" are what C would call "lvalues" or
are more generally called memory locations.

The C specification says:

»An lvalue is an expression« in 6.3.2.1p1,

so an lvalue is a part of the /source code/.

What you mean is called »object« in C:

»object: region of data storage in the execution environment,
the contents of which can represent values« in 3.15p1.
 
L

Lars Enderin

You have a strange extra character in your From header:

From: =?UTF-8?B?Sm9zaHVhIENyYW5tZXIg8J+Qpw==?=
<[email protected]>

It shows up as an unknown character below, but as a square containing
hex code 01F427 in the header shown with the post.

2013-05-06 17:50, Joshua Cranmer 🧠skrev:
 
J

Joshua Cranmer ðŸ§

You have a strange extra character in your From header:

From: =?UTF-8?B?Sm9zaHVhIENyYW5tZXIg8J+Qpw==?=
<[email protected]>

It shows up as an unknown character below, but as a square containing
hex code 01F427 in the header shown with the post.

It is intended to be the Unicode character representing a penguin. I've
taken to including such things to test the resilience of software to
non-ASCII and, in particular, non-BMP characters.
 
E

Eric Sosman

I decided to watch lecture videos from the Stanford
University[...]

Second, I believe that Harvard is more known for Law, Medicine,
Business, Economics than for IT. [...]

Hey, Arne: What school did you attend, and what's its
reputation for geography?

;-)
 
S

Stefan Ram

I just watched another lecture and noticed the following:

Well, I hope you are not annoyed yet. But I just spotted the
first major software-methodology error! He explained the
scope of a variable as the lifetime of the variable. It was
even displayed as text: »Scope: lifetime of variable«. This
really hurts!

For those of you, who have not yet learned the distinction
(untested code ahead), after:

class Object
{ /* begin of scope of i */
final int i; public Object( final int i ){ this.i = i; }
/* end of scope of i */ }

and then in »main«:

{ { final Object o = new Object( 4 );
java.lang.System.out.println( o ); }

{ final Object o = new Object( 7 );
java.lang.System.out.println( o ); }}

, after execution, there were two instances of »i« (with
values 4 and 7) that had the same scope (as identifiers),
but different lifetimes (as variables), and two instances of
»o« which indeed have different scopes (as identifiers).

A scope is a region of the source text. Identifiers
have a scope.

A lifetime is a period of time during the execution
of a program. Variables and objects have lifetimes.

This has no special relation with Java, this is
software engineering (or »programming methodology«).
 
A

Arne Vajhøj

I just watched another lecture and noticed the following:

He said something to the effect that the type »int« was there
to store an int value. I would say that an int /variable/ is
there to store a value, while the /type/ int can also be the
type of an expression (like »2«) that is not necessarily
stored anywhere at run-time.

He said that a variable had a name. This is not always true
in Java (he referred to Java, since he is exclusively using
Java). In Java there also are anonymous variables, like the
variables of an array.

He said that the remainder operator »%« can only be applied
to integers. This also is not true in Java IIRC.

I am actually watching this to learn English pronunciation
of programming terms (otherwise, I just would read a text),
and what I /did/ like was that for the word »char« he gave
the pronunciations of /kA&/ and /kæ&/ (where A is the open
back unrounded vowel and & is the schwar), which I also use
(/kA&/). Bjarne Stroustrup says it was /tSA&/ (where tS is
the voiceless palato-alveolar affricate), well, maybe that
is valid for C++ programmers ...

And?

None of these items seems particular relevant for teachings
students programming.

Not at a high school in the middle of nowhere. And not at Harvard.

Arne
 
A

Arne Vajhøj

I decided to watch lecture videos from the Stanford
University[...]

Second, I believe that Harvard is more known for Law, Medicine,
Business, Economics than for IT. [...]

Hey, Arne: What school did you attend, and what's its
reputation for geography?

Oh shit.

That was about 3000 miles off.

:-(

Arne

PS: They don't teach geography there at all, but I don't think I
can use that as an excuse - I must take the blame for that one.
 
A

Arne Vajhøj

On 05/05/2013 08:48 PM, Arne Vajhøj wrote:
[ SNIP ]
Third, some say that the actual education (at bachelor and
masters level - PhD level may be different) is not that much
better at the famous universities than at lesser know
universities and that the benefits of joining is more
about the prestige and the connections one get. As I have never
seen the inside of an American university, then I can not
say if it is true or not.

That's pretty much true almost anywhere. It obviously depends on the
specific discipline, whether the eventual focus is research as a career
or practical application, and so forth.

But for IT specifically, for preparing students for real work, I've seen
two-year vocational/business schools or community colleges often do a
better job of providing some programming language training and a dollop
of useful software engineering than 4-year CS programs at name
universities.

I don't know why anyone would even expect a programming language course,
online or otherwise, offered by any school and typically taught by a
faculty member or TA with less time in real-world programming experience
than hundreds of thousands of professional programmers have, to either
be particularly noteworthy or to be better than the dozens of good or
excellent tutorials that have been on the Web for years.

They should not.

Programming at a university should not be seen as a primary
goal but as an illustration for the theory being taught.
I think it's pointless to pay $$$ to learn programming languages. What
*is* a good idea to pay money for is some courses in software
engineering, but CS programs don't often offer quality courses in that.
Failing that option, again, no shortage of quality books on the
subject...and simply OJT.

Theory need to be backed by some practical usage for students to
get the point.

Java/C#/C++ is OK for that in my opinion. OCAML/Haskell/Eiffel may
be more "in" in CS circles, but ...

I am sure that it varies, but some universities do try to teach about
software engineering.

Maybe not as good as you may want, but it is a very difficult topic.

And to make a quote from a movie: "Some lessons can't be taught. They
must be lived to be understood.". I don't think even the best possible
course can replace experience for something like that.
If I were aspiring to a career in IT, which does benefit for HR reasons
if nothing else from a bachelor's degree minimum, I'd take a quality
degree in almost anything except CS.

I think CS is OK.

The success of non-CS people with degrees in other natural sciences
and engineering disciplines do show that the way of thinking is a very
big part of what is gained.

Arne
 

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

Members online

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top