Live data from Hacker News

Learning to Code vs Learning Computer Science

shkspr.mobi

61–70 of 116 posts

Re: Learning to Code vs Learning Computer Science

#61

When you're building a skyscraper, you are not going to design every brick. The basis of teaching children how to code is making them learn how to use code as a problem-solving tool. Like this, the sorting will not be important by itself, but as means to an end. As a way to achieve greater objectives. And besides this reasoning, we have another: in CS, something is generally built on top of others. If you write a hea…

When you build a skyscraper you don't need to design ever brick, but that is the wrong analogy. You do need to understand the properties of the different bricks so you pick the right ones, and use them properly, otherwise the building will crumble under its own weight.

If you write a heap sort algorithm you don't need to understand it in assembly... Except if you need to optimize performance. If you ignore the network stack while you write an HTTP app, you might not know how to protect from a man in the middle attack, your particular app would not need it... But maybe the next one does. You might not understand how chrome and Mac OS works... But then if pop ups start to appear you will not know what to do.

While some levels of abstractions make things easier to deal with, programming is more about process building than specific tools, and I feel that the original article got right

Re: Learning to Code vs Learning Computer Science

#62

I teach computer science, and I've always felt the distinction between programming and computer science to be artificial, for the following reasons. (1) It is necessary to learn the basics of programming in order to learn computer science. (2) It is necessary to learn computer science in order to become a proficient programmer. So my feeling is that, by all means, we should be teaching anyone and everyone how to code…

Re points (1) and (2):

Ha, that sounds like bootstrapping would be necessary.

> So my feeling is that, by all means, we should be teaching anyone and everyone how to code, to lay the groundwork for teaching computer science.

Yeah, but which knowledge - coding or computer science, is more important? Both can be aimed at solving problems. It depends on the context, especially regarding the language and associated libraries etcetera being used.

Re: Learning to Code vs Learning Computer Science

#63
post #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-l…

In my view a reason to teach sorting is simply that it provides a set of relatively simple cases for studying things like execution speed and storage requirements.

Re: Learning to Code vs Learning Computer Science

#64
I utterly and completely disagree with the notion that teaching someone numbers.sort(...), and that having fun building an iphone app in a language that will be obsolete in some number of years is not as valuable as learning the "fundamentals" and the underlying reasons why something works.

teaching numbers.sort(...) is saying to someone "heres a tool, and here' how to use it. Some people will want to go on and understand how and why the tool works - and we should recognize those folks and encourage them.

this is the classic art / science / engineering conundrum -- they're all important and they all overlap.

Re: Learning to Code vs Learning Computer Science

#65
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…

I have built many systems that were meant to be used seriously. Never once has my lack of understanding of graphics cards, for example, come back to bite me. Every system is built on abstractions. You can argue about the value of understanding particular systems, but we are well past the point when any one person can or should understand them all. No one is arguing that it's acceptable to learn only the highest-level…

What kind of systems were you working on?

No, you probably don't need to know much about how graphics cards work if you're working with databases or other software that doesn't really involve graphics in any serious way. But if you're working on graphics card drivers, high-end video games, visualization systems, or simulations, then you'd probably should have such knowledge.

The point is not to fully understand every single layer that exists, including those that your software never interacts with, or only just makes very light usage of. But you should have at least a basic understanding all the way down through the code and hardware you do use, directly or indirectly.

Re: Learning to Code vs Learning Computer Science

#66

I teach computer science, and I've always felt the distinction between programming and computer science to be artificial, for the following reasons. (1) It is necessary to learn the basics of programming in order to learn computer science. (2) It is necessary to learn computer science in order to become a proficient programmer. So my feeling is that, by all means, we should be teaching anyone and everyone how to code…

yes!

..everyone should have exposure.

a large majority should be a able to write a bit of code to perform a task in their lives or work.

some subset will become computer scientists and software engineers.

... just like so many other technologies :)

Re: Learning to Code vs Learning Computer Science

#67
post #59
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…

> 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. I'm a self-taught web developer. While I have probably picked up some programming fundamentals/best practices through experience I have very little interest in…

I think you've benefited very heavily (a lot more than you may realize) from the work of people who did have more formal training, and who used that knowledge to build the systems that you in turn have built upon.

You're right, it does take much less effort and skill to run moderately high-traffic WordPress-based web site these days. That wasn't always true, though. In the 1990s and even into the early 2000s, it did take skill to get the most out of web servers with clockrates below 200 MHz, maybe 16 MB of RAM if lucky, very limited storage, and limited network connectivity. Specialists were needed in cases like that.

What you seem to consider "ignorance" is usually just considered "forethought" and "planning ahead" by those involved. It's easy to rail against so-called "premature optimization" until you've seen that kind of prudence prevent unexpected scalability disasters from happening. For a young company, like the kind your friends apparently work at, a little bit of foresight and effort at the start can significantly mitigate the harm that can come from unexpectedly large demand. In some cases this is what will determine whether or not that company survives and thrives.

Re: Learning to Code vs Learning Computer Science

#68

As someone who has started learning coding, I don't think I can get interested in Compute Science by not learning to build things.

I think this should be the top comment here. I taught myself to program as kid, not because I was interested in Computer Science (I'd never heard of it, and if I had, it wouldn't have been appealing to my 7 year old brain). I learnt to program because I wanted to make things, specifically games. That's what kept me typing in those lines and lines of BASIC, that's what inspired me to keep learning new languages and technologies - so that I could make better stuff! And this continues to this day. If I'd been pressured into learning Computer Science instead, I would certainly not be a programmer today. Back then, and even now, I just wanted to make stuff and experiment - Computer Science has only been something I've become interested in in the last few years, and has been completely inconsequential to my career development.

So I disagree with this article. Programming is a creative, fun thing which is much more accessible to children (and adults!) than the comparably dry, stuffy subject of Computer Science. And it's not even true to say that people with formal computer science backgrounds make better programmers, so what is the benefit here?

Re: Learning to Code vs Learning Computer Science

#69
While almost everybody agrees that pure rote memorization is not usually the right approach in (any kind of) teaching, I tend also to be very skeptical of the oppositely pure approach.

We might reason that the programming languages we usually use today are not likely to be the ones used tomorrow, but the tremendous amount of understanding one can achieve using the languages of today can still be useful tomorrow.

Notation/code are purely conventions -- the idea they can express can be expressed in any number of ways. Nevertheless, ignoring notation/code can be harmful. Paraphrasing Leibniz, notation can be the difference since the necessary labor of thought is wonderfully diminished.

Re: Learning to Code vs Learning Computer Science

#70
post #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-l…

Not to mention that using N different sorting algorithms as your introduction to computer science (as is often the case) has to be the most boring, un-motivating content to choose from. The only thing worse is "lets learn about recursion using the fibonacci sequence." Ugh.
Post reply on HN