

Kids and parents turn to coding to boost college, career prospects - kafkaesque
http://www.latimes.com/business/la-fi-coding-craze-20140802-story.html

======
krat0sprakhar
I've been teaching a 12-yo kid python programming and the surprising thing is
that none of his friends (nor him) learn any programming in school. As per
him, most public schools in his area (Boston) don't have any programming work
in their regular curriculum, despite the fact that one keeps seeing such
articles popping up often.

When I was in mid-school, a decade back (in India) we had regular classes on
Basic and C++ in high school. I might be completely wrong in generalizing but
haven't the schools in US picked up on this trend?

~~~
lliwta
> I might be completely wrong in generalizing but haven't the schools in US
> picked up on this trend?

There are lots of reasons, but I think the largest contributing factor is that
these teaching staff doesn't exist.

In most high schools, there is no dedicated "programming" or "CS" teacher.
Often these courses of off-loaded to a business-y person. In my experience,
these were pretty useless and sometimes worse than useless. E.g. in one case
this person was a retired math teacher who was tenured but awful, and
"computer class" seemed like a low-impact place to put them.

If a Math or Science teacher wanted to teach a programming class and had been
around for a few years (and got along with their administrators), they could
probably get away with teaching one section a year. Maybe scale up if there's
demand and the department isn't under-staffed. But that's fairly rare, because
lots of math people don't really "get" CS.

~~~
meddlepal
A couple other problems come to mind:

1) I do not believe the school administrators "get" computers beyond knowing
how to use things like a web browser, email, MS Office, or education databases
for K-12 research projects. They cannot set effective policy and direction
because they do not have a clue what it is they need to do.

2) Many (most?) parents do not know or care about what programming entails or
do not understand how computer programming might be extremely beneficial for
their kid. Without parents pushing for these courses nothing is going to
change since groups of vocal parents are the one thing that school
administrators generally act for.

3) Finding qualified individuals is going to be tough. People who do not
understand programming cannot teach kids to program. People who understand how
to program AND are good at teaching are an extremely rare commodity. You can
find lots of one or the other, but the ones who can do both are probably
already employed doing something more rewarding (personally or economically).

4) We, as a society, need to determine what is important to teach. Is it
computer science or is it programming? You can get a lot of mileage out of
just teaching programming, but CS is a beautiful thing that fits more in line
with a true academic mission - but CS does not imply any programming.

~~~
analog31
5) No programming on the standardized tests.

------
NAFV_P
> _Broad computer-science skills that include technological awareness and
> analytical thinking are more important than narrow programming skills,
> Hartovi said.

"Learning how to code in any one particular [computer] language is not going
to be worthwhile beyond 10 or 20 years," he said. "Learning how to problem-
solve using algorithms and how technology works and how it's built is going to
last a century at least."_

I fail to see how you could write an algorithm if you don't know how to code.

~~~
lliwta
> I fail to see how you could write an algorithm if you don't know how to
> code.

Algorithms have existed for centuries. Computer programs have meaningfully
existed for 100 years, if we're generous. And for a lot of that time, you had
to design the entire algorithm correctly before running to code, or else you'd
have to wait a day or two and try again (unless you were important).

Even today, if you're designing a truly novel algorithm, you're very likely to
spend the bulk of your time _not_ coding, and then coding only at the end as a
sort of check to make sure you ideas work out. Of course everyone has
different processes and YMMV, but mt general impression is that most people
who design significant (read publication worthy) algorithms do the bulk of
their work away from the keyboard.

And honestly, having taught high school cs students, the best students have
this process: 1) try a niave solution, notice it won't work before they even
compile. Maybe finish the program just to confirm their suspicion that it's
wrong; 2) go to the white board for a while, and probably talk with their
friends about potential solutions and pitfalls; 3) design the algorithm, and
then code it up. Usually there's no pseudo-code before they start programming,
but they have a pretty clear idea of the general structure of the algorithm;
4) test on inputs that they identified as reasons the niave solution(s)
discussed at the board didn't work.

edit: the _very worst_ students are the ones who sit in isolation hacking away
at iterative improvements on a fundamentally flawed idea. Usually they're
trying to get their for loops sorted out and working correctly so that the
program actually gets around to giving them _any_ answer, and don't even get
around to noticing their solution is completely and fundamentally broken until
the end of class.

Which is to say, from my observation, coding-as-problem-solving is not very
effective until _after_ you've thought things through in more general,
mathematical terms.

~~~
NAFV_P
> _Even today, if you 're designing a truly novel algorithm, you're very
> likely to spend the bulk of your time not coding, and then coding only at
> the end as a sort of check to make sure you ideas work out._

If you cannot code, you cannot check that your ideas work out on a computer.

> _Which is to say, from my observation, coding-as-problem-solving is not very
> effective until after you 've thought things through in more general,
> mathematical terms._

I don't see how that relates to my comment, I specifically referred to
'writing' an algorithm, as in implementing the algorithm in code, not devising
the algorithm in the first place.

~~~
lliwta
_> If you cannot code, you cannot check that your ideas work out on a
computer._

Believe it or not, it's possible to write provable correct algorithms without
writing a single test case :-)

Of course implementing is a useful sanity check. But it's not the important
part -- it's not the skill set we should most emphasize in education.

 _> as in implementing the algorithm in code, not devising the algorithm in
the first place._

Is there a particularly pressing reason to teach students who to translate
pseudo-code from Wikipedia into <insert favorite language>? Sounds like a
perhaps useful but pretty menial skill to me. Not the sort of core skill you'd
organize a curriculum revision around for sure.

~~~
NAFV_P
> _Is there a particularly pressing reason to teach students who to translate
> pseudo-code from Wikipedia into <insert favorite language>?_

Yes, an avl balanced binary search tree can run faster on an artificial
computer than on a natural one.

~~~
lliwta
My point was that "copy an algorithm into programming language X" isn't
something which needs to be taught in the first place, and isn't an
economically valuable skill because literally anybody can be taught this skill
in a few weeks.

If I had to choose between teaching _why_ an avl balanced binary search tree
works and forcing students to implement in a chosen programming language from
pseudocode, I would choose the former every time. The intellectual maturity is
far more valuable -- and harder to acquire -- than the rote skill.

~~~
NAFV_P
> _My point was that "copy an algorithm into programming language X" isn't
> something which needs to be taught in the first place, and isn't an
> economically valuable skill because literally anybody can be taught this
> skill in a few weeks._

That depends on the language, I doubt you could learn much about programming
in a few weeks, it requires lots of practise.

> _If I had to choose between teaching why an avl balanced binary search tree
> works and forcing students to implement in a chosen programming language
> from pseudocode, I would choose the former every time. The intellectual
> maturity is far more valuable -- and harder to acquire -- than the rote
> skill._

You are giving yourself a hard choice, just demonstrate both sides.

From personal experience, I've been looking at bst's recently. While messing
around in my code, out of the blue I decided to write the struct for the node
like this:

    
    
      typedef struct avl_node_typed {
        avl_node_typed *left, *right;
        void *data;
        unsigned height, population; /* avl algorithm requires height, not number of nodes */
      }avl_node;
    

Then I realised that using this algorithm:

    
    
      avl_node *search_index(avl_node *node, int index) {
        int x=0;
        if(node->left)
          x=node->left->population;
        if(index>x)
          return search_index(node->right, index-x-1);
        else if(index<x)
          return search_index(node->left, index);
        else
          return node;
      }
    

I could access the nth node in a tree. I had rediscovered the algorithm of
order statistic trees, which can be treated syntactically like an array (this
can be applied to all ordered trees, not just avl). During this time I was
looking up knowledge on avl trees _and_ coding away on my machine. If I was
purely focused on the algorithmic side, I don't think I would have found it.

~~~
lliwta
No one is denying the notion that coding can be helpful when writing
algorithms.

But it doesn't follow that programming a machine is _necessary_ for writing
algorithms.

The machine can be and often is as much of a distraction as it is a tool when
teaching CS.

------
thewarrior
Programmer salaries going down soon ...

~~~
jimmaswell
I hope I'm not at the age of being just on the cusp of the time when the
salary starts to decrease when I get in the field. Probably unlikely though
right?

~~~
th0br0
Why "start" to decrease?

IMHO, the whole process has been going on for quite some time. For
freelancer's, there's the ever increasing competition from Asia/India/low
living costs region which leads to less profit (arguably, most code coming
from those regions is bad but even that will increase eventually).

As for "proper" jobs ... well... given that you see more and more articles
about people finishing up college without being able to code at all, the
salary gap is probably only going to increasFor desk jobs / 8-to-5 jobs in
mainland US... e. There'll probably be those coders that learn how to code
pre-college and are then able to translate their experience post-college,
whereas there'll always be those who are good at social things & buzzwords.
Distinguishing yourself from the mass early on will probably make a big change
regarding your target salary.

In the end, I'm constantly reminded of my IT teacher's saying from high school
(loosely translated from German): becoming a programmer just requires
training. becoming a computer scientist / engineer, however, requires far
more/university. (please keep in mind that CS in Germany is far more
theoretically oriented than CS in the US)

~~~
xiaoma
Credentialist elitism seems to have a stronger hold in Germany than in the US.
To be sure, it exists everywhere to some degree or another, but the US also
respects those who perform even if they don't have the paper (e.g. Steve
Wozniak, John Carmack, etc).

