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