Live data from Hacker News

Learning to Code vs Learning Computer Science

shkspr.mobi

31–40 of 116 posts

Re: Learning to Code vs Learning Computer Science

#31
post #19
post #9

While I agree that it's important to stress the differences between code and CS, I still believe that, at an High School level, it's better to teach how to code instead of CS. Programming is a practical skill. It's easier to engage kids with it and it will probably be more useful to them in the future. It's hard enough to engage kids with practical stuff ("I'm never going to need X, I'm going to become a Y"). I just…

Why should CS be treated differently than other sciences? The physics courses in high school are not civil engineering courses, the chemistry courses are not cooking classes, etc. Or do you think those should be changed too?

For starters, I'd say CS is better described as a branch of applied mathematics rather than a science like chemistry or physics, if one wants to associate it with any academic category at all.

Moreover, "coding" isn't really "applied computer science" in the way, e.g. electrical engineering is "applied physics of electromagnetism." In fact, one doesn't need to know or understand even the first thing about CS in order to be an extremely effective programmer. The same isn't true about most engineering:physics/mathematics analogues.

Re: Learning to Code vs Learning Computer Science

#32
post #25

Earlier quoted context omitted.

While it may be perfectly acceptable to ignore the lower-level details when first learning some new technology, or even when using it for personal use only, that sort of ignorance is not acceptable when working on systems that are meant to be used seriously. At that point, you need to have at least a high-level understanding of each and every layer that you're building upon. If you don't, then it will come back to ha…

It's perfectly acceptable to not understand the low level details of seriously used systems. Isn't that what teams are for? You can trust the engineers developing infrastructure so that you don't have to worry about it. Sure, understanding the high level concepts can't hurt, but it isn't going to make a front-end developer any more productive.

I disagree with the last point. Understanding the low level details of a system definitely makes a developer more productive.

When I am working on an iOS app and I get stuck on a bug, I can open a disassembler and immediately figure out the cause of the bug. The same goes for a ruby developer who wonders why their queries are taking forever or a front end developer who doesn't know why their interface is dropping frames.

Any serious engineer should be able to fix these problems on the spot if tasked with it.

Re: Learning to Code vs Learning Computer Science

#33
> Learning to code is merely teaching people to spell.

This is true, however you can't dive into the nuances of Shakespeare without knowing what words are and how to spell them.

One thing to keep in mind when arguing theoretical vs mechanical education is children can't think like adults. In fact, children aren't even capable of abstract thought until they hit the 11 to 13 year old range [1] (and only the bright ones are able to think that way that young). So starting a deep dive with Computer Science with 7th and 8th graders is a fools errand.

But it is a worth while endeavour to show them the mechanical side of coding. They will eat that up. Once they have a handle on mechanical tasks, then you can start introducing the theoretical. More kids will pick up the concepts that way.

Walk before you run my friend.

[1] http://en.wikipedia.org/wiki/Piaget%27s_theory_of_cognitive_...

Re: Learning to Code vs Learning Computer Science

#34
post #25

Earlier quoted context omitted.

While it may be perfectly acceptable to ignore the lower-level details when first learning some new technology, or even when using it for personal use only, that sort of ignorance is not acceptable when working on systems that are meant to be used seriously. At that point, you need to have at least a high-level understanding of each and every layer that you're building upon. If you don't, then it will come back to ha…

It's perfectly acceptable to not understand the low level details of seriously used systems. Isn't that what teams are for? You can trust the engineers developing infrastructure so that you don't have to worry about it. Sure, understanding the high level concepts can't hurt, but it isn't going to make a front-end developer any more productive.

> It's perfectly acceptable to not understand the low level details of seriously used systems.

Yes, that's what my colleagues thought a few months ago, too, when they churned up a web UI for an embedded device. My teamwork was, apparently, insufficient to make them realize that a configuration interface that takes half the available flash space is rather large (the other half was taken by a goddamn kernel, a web server, a proxy server, a bunch of other networking tools, a logging service and all the tools that communicated with the web ui!). Lack of understanding regarding how routing works in TCP/IP networks also meant that their first attempt had a pretty fatal flaw which resulted in the configuration interface becoming inaccessible, which became apparent in the first ten minutes of testing and required a significant amount of redesign because the entire workflow of the interface depended on that.

Their Bootstrap wizardry was remarkable, but ignoring how the underlying system worked resulted in them having to start from scratch.

It works the other way 'round, too. Not understanding how web tools work would also make my systems programming entirely useless when it has to provide the infrastructure on which such tools rely.

No one likes all this complexity. I hate it, too. I sometimes truly, really wish my job was as simple as taking this thing from here and putting it over there. Ignoring this complexity doesn't make it go away though; building tools that can isolate some of it behind a comprehensive and consistent interface is ok, but relying on those tools to do it for you without understanding what they do is technical suicide. It's this kind of thinking that makes people think it's ok for a rudimentary word processor to take six fucking seconds to load, after asking you for a password, in 2014, on a quad-core system.

Edit: it's also worth pointing out that this is really beyond the scope of the article's argument. What the article insists is that this:

    var numbers = [7, 8, 1, 3, 2, 7, 6];
    numbers.sort();
hardly helps anyone learn coding as a problem solving tool. This exercise taught the reader exactly nothing about how to solve the problem of sorting numbers. I could ask someone who works for me to sort me those numbers, and my understanding about algorithmic thinking would be as rudimentary as before.

Teaching children how to use calculators does not increase their problem-solving ability, not by an iota. Teaching them mathematics does that, and their ability is further advanced when they learn about theorems and structuring proofs, about induction and, yes, about using a calculator.

It's the same here. I'm not arguing that computer science should be purist to the extent that you shouldn't use anything but a Number 2 pencil to program. That's stupid. I am arguing, though, that teaching people "to code", as if programming consisted in nothing but translating from English to Codese, is pretty much as retarded as teaching mathematics as if it were a language, consisting of nothing other than translating the English "Two apples and three apples make how many apples?" into the far more cryptic "2 + 3 = ?".

Re: Learning to Code vs Learning Computer Science

#35
I find sorting algorithms a bizarre and damaging introduction to computer science.

If, as suggested, you ask an interested teenager how they sort a list of numbers on paper, they can usually give a reasonable algorithmic explanation, e.g. "Find the smallest number in the list, and write that first,..."

Then, they have to throw that thought process away, and rote learn some different and esoteric alternative - the A-level course mentioned in this article requires you to execute bubblesort step-by-step, from memory, on paper.

When in fact, the teenager's own creative method (that we threw away) is much closer to how a computer scientist/coder should be thinking.

Re: Learning to Code vs Learning Computer Science

#36
post #19
post #9

While I agree that it's important to stress the differences between code and CS, I still believe that, at an High School level, it's better to teach how to code instead of CS. Programming is a practical skill. It's easier to engage kids with it and it will probably be more useful to them in the future. It's hard enough to engage kids with practical stuff ("I'm never going to need X, I'm going to become a Y"). I just…

Why should CS be treated differently than other sciences? The physics courses in high school are not civil engineering courses, the chemistry courses are not cooking classes, etc. Or do you think those should be changed too?

It's a false comparison. Algorithms, and data structures don't have a ready, real-life examples, that a new kid from middle school can already relate to. I suppose, you can point to facebook and google and try to explain the infrastructure behind them, but he still doesn't have a way for the kid to play with and see the consequences. I also think there's a false dichotomy implicit in your question.

Re: Learning to Code vs Learning Computer Science

#37
post #36
post #19

Earlier quoted context omitted.

Why should CS be treated differently than other sciences? The physics courses in high school are not civil engineering courses, the chemistry courses are not cooking classes, etc. Or do you think those should be changed too?

It's a false comparison. Algorithms, and data structures don't have a ready, real-life examples, that a new kid from middle school can already relate to. I suppose, you can point to facebook and google and try to explain the infrastructure behind them, but he still doesn't have a way for the kid to play with and see the consequences. I also think there's a false dichotomy implicit in your question.

Really? Did your teachers never say "Ok, everyone line up in height order"?

Re: Learning to Code vs Learning Computer Science

#38
post #36
post #19

Earlier quoted context omitted.

Why should CS be treated differently than other sciences? The physics courses in high school are not civil engineering courses, the chemistry courses are not cooking classes, etc. Or do you think those should be changed too?

It's a false comparison. Algorithms, and data structures don't have a ready, real-life examples, that a new kid from middle school can already relate to. I suppose, you can point to facebook and google and try to explain the infrastructure behind them, but he still doesn't have a way for the kid to play with and see the consequences. I also think there's a false dichotomy implicit in your question.

Actually, you learn your first algorithm in elementary school, you just call it "doing an Euclidean division by hand". You're first data structure comes a bit later, in middle school, with vectors. That are just the first among those that I thought of, there are many more.

Re: Learning to Code vs Learning Computer Science

#39
People do need to spell, and the majority of the population is even worse than illiterate by the author's standards.

A universal desire to teach people to read has the same pitfalls, but nobody argues against that. Why? Because reading opens a door to a world of information that you didn't have access to before.

Coding is similar, except that it opens the door to the world the author describes: the creative world where you get to take the ideas in your head and make them code incarnate, and appreciate the beauty of algorithms and all of that. The distinction is obvious, but so is the required progression if we want this process to start with kids.

EDIT: that the ADULTS proposing this stuff don't know the difference is troubling.

Re: Learning to Code vs Learning Computer Science

#40
The point of all of these campaigns is to get people building software as a trade, or skill to MAKE useful products and services for other people, be it full time or part time.

The president and others don't distinguish between CS and programming largely because they don't know the difference, but my guess is also because making the argument about which is which is largely irrelevant to their point because those knowledge requirements vary wildly depending on the intent of the software.

For some pieces of software you don't need to know CS to make a successful product, for others you do. The whole point is to get the average person - or at least a larger amount of workers - to be able to solve problems and create solutions with software.

Post reply on HN