On 7/16/2012 8:00 AM, Pascal J. Bourguignon wrote:
Miles Fidelman <mfidel...@meetinghouse.net> writes:

Pascal J. Bourguignon wrote:
Miles Fidelman <mfidel...@meetinghouse.net> writes:
And seems to have turned into something about needing to recreate the
homebrew computing milieu, and everyone learning to program - and
perhaps "why don't more people know how to program?"

My response (to the original question) is that folks who want to
write, may want something more flexible (programmable) than Word, but
somehow turning everone into c coders doesn't seem to be the answer.
Of course not.  That's why there are languages like Python or Logo.


More flexible tools (e.g., HyperCard, spreadsheets) are more of an
answer -  and that's a challenge to those of us who develop tools.
Turning writers, or mathematicians, or artists into coders is simply a
recipe for bad content AND bad code.
But everyone learns mathematics, and even if they don't turn out
professionnal mathematicians, they at least know how to make a simple
demonstration (or at least we all did when I was in high school, so it's
possible).

Similarly, everyone should learn CS and programming, and even if they
won't be able to manage software complexity at the same level as
professionnal programmers (ought to be able to), they should be able to
write simple programs, at the level of emacs commands, for their own
needs, and foremost, they should understand enough of CS and programming
to be able to have meaningful expectations from the computer industry
and from programmers.
Ok... but that begs the real question: What are the core concepts that
matter?

There's a serious distinction between computer science, computer
engineering, and programming.  CS is theory, CE is architecture and
design, programming is carpentry.

In math, we start with arithmetic, geometry, algebra, maybe some set
theory, and go on to trigonometry, statistics, calculus, ...... and
pick up some techniques along the way (addition, multiplication, etc.)

in elementary school, I got out of stuff, because I guess the school figured my skills were better spent doing IT stuff, so that is what I did (and I guess also because, at the time, I was generally a bit of a "smart kid" compared to a lot of the others, since I could read and do arithmetic pretty well already, ...).

by high-school, it was the "Pre-Algebra / Algebra 1/2" route (basically, the lower-route), so basically the entirety of highschool was spent solving for linear equations (well, apart for the first one, which was mostly about hammering out the concept of variables and PEMDAS).

took "151A" at one point, which was basically like algebra + matrices + complex numbers + big sigma, generally passed this.


tried to do other higher-level college level math classes later, total wackiness ensues, me having often little idea what is going on and getting lost as to how to actually do any of this stuff.

although, on the up-side, I did apparently manage to impress some people in a class by mentally calculating the inverse of a matrix... (nevermind ultimately bombing on nearly everything else in that class).


general programming probably doesn't need much more than pre-algebra or maybe algebra level stuff anyways, but maybe touching on other things that are useful to computing: matrices, vectors, sin/cos/..., the big sigma notation, ...


In science, it's physics, chemistry, biology, .... and we learn some
lab skills along the way.

What are the core concepts of CS/CE that everyone should learn in
order to be considered "educated?"  What lab skills?  Note that there
still long debates on this when it comes to college curricula.
Indeed.  The French National Education is answering to that question
with its educational "programme", and the newly edited manual.

https://wiki.inria.fr/sciencinfolycee/TexteOfficielProgrammeISN

https://wiki.inria.fr/wikis/sciencinfolycee/images/7/73/Informatique_et_Sciences_du_Num%C3%A9rique_-_Sp%C3%A9cialit%C3%A9_ISN_en_Terminale_S.pdf


can't say much on this.


but, a person can get along pretty well provided they get basic literacy down fairly solidly (can read and write, and maybe perform basic arithmetic, ...).

most other stuff is mostly optional, and wont tend to matter much in daily life for most people (and most will probably soon enough forget anyways once they no longer have a school trying to force it down their throats and/or needing to "cram" for tests).

so, the main goal in life is basically finding employment and basic job competence, mostly with education being as a means to an end: getting higher paying job, ...

(so, person pays colleges, goes through a lot of pain and hassle, gets a degree, and employer pays them more).


Some of us greybeards (or fuddy duddies if you wish) argue for
starting with fundamentals:
- boolean logic
- information theory
- theory of computing
- hardware design
- machine language programming (play with microcontrollers in the lab)
- operating systems
- language design
- analysis
- algorithms
Yes, some of all of that.

probably focusing more on the "useful parts" though.


On the other hand, an awful lot of classes, and college degree
programs seem to think that coding in Java is all there is, and we're
seeing degrees in game design (not that game design is simple,
particularly if one goes into things like physics modeling, image
processing, massive concurrency, and so forth).
Indeed.  In the French manual, it's made mention only of languages in
the Algol family.  It would be better if they also spoke of Prolog,
Haskell, and of course Lisp too.  But this can be easily corrected by
the teachers, if they're "good" enough.

yes, but you can still do a lot with Java (even if hardly my favorite language personally).

throw some C, C++, or C# on there, and it is better still.


a problem with most other further reaching languages is:
it is often harder to do much useful with them (smaller communities, often deficiencies regarding implementation maturity and library support, ... 1); it is harder still for people looking at finding a job, since few jobs want these more obscure languages; a person trying to "just get it done" may have a much harder time finding code to just copy/paste off the internet (or may have to go through considerably more work translating it from one language to another, 2);
...

1: it is not a good sign when one of the first major questions usually asked is "how do I use OpenGL / sound / GUI / ... with this thing?", which then either results in people looking for 3rd party packages to do it, or having to write a lot of wrapper boilerplate, or having to fall back to writing all these parts in C or similar.

2: it is much easier to copy/paste between languages if both have the same basic syntax. whether or not this is "good", this is a bit of a productivity feature, as then a person doesn't have to find code in the same language, but only one in a language with a similar-enough syntax that they can do quick changes or use some find/replace magic or similar (for example, although C++ and Java are very different, the similar syntax doesn't completely rule out the ability to use copy/paste and some manual editing to convert between them, rather than having to rewrite the code from-scratch).

it may also reduce the amount of mental mode-changing as well, or require mentally porting an idea they may be represented in one language into the other, ...



And then there's the school of thought that all you need to know is
how to use things - turn on a computer, use common programs, maybe
write some Excel macros, and customize their operating
environment. (After all, most of us learn to drive, but how many
people take an auto shop class anymore.)

Now me... I kind of think that high school should focus more on
"computational thinking" than on programming.  Yes, kids should write
a few programs along the way, but that's the lab component.  A more
interesting question becomes: is this a separate discipline, or is it
something to be incorporated into math and science?
Indeed, I find that in the French manual, algorithms are more stressed
than the programming language itself (Java).  It's definitely not a Java
manual.


fair enough.

although, most major languages are similar enough that a person who knows one can generally adapt to the others, and most algorithms map fairly well from one language to another.

granted, using general-purpose algorithms to solve problems is frowned upon in some language communities, especially Java, where the basic idea is that given nearly everything is done by the standard library anyways, the role of the programmer is mostly to find "the class which does X" and then use this (meaning that for the most part "proper" Java code amounts mostly just to method calls to somewhere else).

granted, some of us who use languages (such as C) where it is more common to actually write code in the language, may find these tendencies a bit annoying.

granted, it does show sometimes when a Java programmer is desperate and confused as they can't find any "class which does X" in the standard library, and isn't really open to the idea "you might actually have to write some of your own code to do this".


_______________________________________________
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc

Reply via email to