Live data from Hacker News

Learning to Code vs Learning Computer Science

shkspr.mobi

41–50 of 116 posts

Re: Learning to Code vs Learning Computer Science

#41
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?

I absolutely think those should be changed, though not to cooking.

Imagine what a country of citizens--educated in engineering and computer programming to the same degree we do literacy today--might be capable of accomplishing.

Re: Learning to Code vs Learning Computer Science

#45
post #25

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…

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 abstractions. But it is acceptable to let somebody else worry about some of the lower-level ones.

People who don't focus on understanding engineering systems often focus on understanding other systems––team dynamics, for example, or business needs. I've met a lot of developers who only cared about learning the technical side, and were happy to look down on developers who didn't feel the same. Is that wiser, somehow?

Re: Learning to Code vs Learning Computer Science

#46
Fundamentally I agree, but I question why we do not teach computer science/coding the same way we teach music?

For example, when I first learned how to play piano, I wasn't taught how to play Major 9th chords. Rather, I learned simple melodies and expanded into more complicated harmony as I grew older. The reason why I began learning more theory was because I knew of its potential to make me a better musician. This can be applied to computer science learning as well. You definitely don't want to start kids off on learning by trying to explain how a sorting algorithm works, that's totally meaningless. You want them to get things working, make them solve problems, give them problems that are so absurdly hard to solve with their current knowledge that they MUST find an alternative.

This is how you truly educate. By making people solve their own problems, because they have to. It's really funny how people step up their game when they believe they have to do something for their own good.

Re: Learning to Code vs Learning Computer Science

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

But that's exactly what the author is advocating - exploring the process that the teenager came up with! There was no mention of quicksort, mergesort, bubblesort, etc - just that once you start trying to understand how to do something mechanical like sorting, you start to understand how algorithms work.

Re: Learning to Code vs Learning Computer Science

#48
The thing is, most software jobs today don't require much knowledge of computer science. Mine certainly doesn't. I have a both a bachelors and masters in CS, but I'm no better at my job than my coworker who has no CS education but learned to code on his own. I can't think of one time I've used Machine Learning, AI, advanced Networking concepts, advanced OS concepts, Computer architecture, etc in my day to day work. Not to say those jobs don't exist in industry---they are just very overshadowed in numbers by jobs to build CRUD apps.

The world certainly needs Computer Scientists, but it needs a whole lot more software engineers.

Re: Learning to Code vs Learning Computer Science

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

A well-taught computer science course will not force anyone to rote-learn algorithms. Instead it ought to walk the students through the discovery process of improving from a naive but simple bubble sort, through more complicated algorithms.

Once they understand the complexities, they can appreciate the genius of quicksort. And with the sort problem well established in their minds, they're ready to appreciate the value of more complicated data structures than the list they were working with.

The difference is between understanding how to make computers do things with the tools available (knowing about built-in sort methods) and understanding how computers actually work (learning how sort algorithms have been developed).

You may be right that a programmer doesn't need to, on a daily basis, think about how sort() is implemented. But learning to work out a well understood problem with a knowledgeable instructor will teach her how to solve the next problem she comes up against on her own that no one has yet solved.

Just like any scientific pursuit, the best way to appreciate the tools and knowledge that is currently available and what methods and processes ought to be followed to improve the tools and increase the knowledge, is to walk through the process of understanding step by step, from simple to complex. If rote is involved then someone is screwing up.

Re: Learning to Code vs Learning Computer Science

#50

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 I write my HTTP Applications I don't need to understand all the Network Layers beneath it."

If you want your HTTP application to perform well, be secure, be scalable, work with a multitude of browsers in unusual conditions, and be able to troubleshoot weird errors, then yes, you will at some point need to know something about TLS and TCP and IP (v4 and v6) and even Ethernet and Wifi.

Similarly, architects and engineers have to understand how the materials they're planning to use are made, what their capabilities and limits are, and how they can best be used to implement their vision for a building or a bridge. They can ignore how the bricks are made and how they perform, but their structure will not last.

Post reply on HN