13 ms·
Should we be calling this "computer science", or just "computer programming"? After all, those two things, while related, are not synonymous. And I'm not bein
by coreyp_1 8y ago
Should we be calling this "computer science", or just "computer programming"? After all, those two things, while related, are not synonymous. And I'm not being pedantic, I'm really wanting some clarification!
A true computer science education involves a study in multiple areas, from discrete math, to computer architecture, to operating systems, to algorithms, to finally, both as the pinnacle and the essence of the subject, theory of computing.
Any university would be expected to have these classes as part of their core curriculum for a CS degree, otherwise people begin questioning the rigor of the program.
Obviously, if we are talking about HS rather than University, the subjects are scaled back for necessity. But the content still needs to be there. So are they talking multiple classes, or a long series of classes that will eventually address all of the aforementioned areas?
I'm all for everyone learning Computer Science. I just want to make sure that we are talking about the same thing!
- indogooner 8y agoTotally agree. The expectation should be clear from the beginning. Programming while important(actually an essential tool) is only a small part of CS curriculum. A little bit of discrete math, algorithms and overview of computer architecture/OS at higher level should lead to a well rounded program.
- Jtsummers 8y ago> A true computer science education involves a study in multiple areas, from discrete math, to computer architecture, to operating systems, to algorithms, to finally, both as the pinnacle and the essence of the subject, theory of computing. Similar arguments could be made for physics, chemistry, and biology. But we still say that we teach those subjects in high school, even though the depth and breadth of material is hardly what you'd expect from a university or college. The only broad and deep courses in K-12 education (US-centric descriptor) are math, social science (history, geography), language arts (English-language literature, writing). And none of those really go that deep, or that broad. We can identify the initial elements of CS that everyone takes before going deeper: Introduction to algorithms and data structures, and some logic/discrete math courses. Logic is technically covered (or used to be) in geometry courses (in the US). Discrete math presently has no place, so this could be improved. The introduction to algorithms and data structures part is barely separated from programming 101. The difference is that a programming language course (Python 101) is going to go too deep into the weeds of Python and not cover topics that are portable across more languages. An algorithms course should be more portable (at least across a class of languages, like across imperative languages or OO languages).
- antt 8y agoHaving a 'computer science' class that teaches programming makes about as much sense as a physics class on rulers and stop watches, a chemistry class on test tubes or a biology class on petri dishes. High school classes in the other sciences manage to convey some of the breadth of the subject while laying the absolute foundations for further study. The only non-incidental part of computer science are the theory of computation, the hierarchy of languages and translators/compilers between various languages. Not one pre-university program teaches these, and in recent years many university courses don't teach these either.
- deleted 8y ago[deleted]
- Jtsummers 8y agoComputer science consists of a large number of things, theory of computation is part of it. But so are algorithms and data structures. Practically speaking, the latter (algorithms and data structures) are the most accessible, and allow you to explore the former. Even if we think people should be taught how to express these concepts with a pseudocode, they're still learning to program (in a vague sense). But they can't explore the ideas of CS, outside of a formal approach if they don't program (pseudocode or actual code). And the formal approach is not understandable (or as easily understandable) without a practical experience with the topic. Do you honestly believe that we should teach students category theory and abstract algebra before we teach them high school algebra? Or perhaps high school algebra before arithmetic? If they have no number sense, they won't be very effective in high school algebra. If they have no sense of the structure of algebra, they'll have a hard time developing an intuition for the more abstract algebra and math concepts. The same is true for CS. I can sit down and teach someone the hierarchy of computational mechanisms (finite state machines, pushdown automata, Turing machines). But what good is that if they don't understand what those machines actually express? Understanding that regular expressions (not regex) are used to tokenize text, and that PDAs are used to parse text is a great practical introduction to those concepts and provides them with an intuition that they can then use to generalize those machine models to other structures. So pick a point to start, and work up. Don't start at the formal level and expect it to be effective (unless the students already have a sufficiently advanced background, like a senior university math major could probably start with those machine models and work towards their applications, rather than the reverse).
- analog31 8y agoThe public has no idea what CS is. It happens to be the "hot" college major right now. Kids who are potentially interested in computers, and are told that they have to get a college degree in something major in CS. That's the extent to which it's understood outside of the CS community. Personally, with two school-aged kids, I'd be satisfied to see a basic programming course in the K-12 curriculum. This could serve a number of purposes, even short of launching kids on a CS career path: 1. Find out if you really like programming before you spend 4 years studying CS. 2. Find out how people actually do things like science and math. A school STEM curriculum that is devoid of computation misrepresents the topics that are being taught. 3. Introduce kids to a rip-roaring hobby. After all, we teach music for pretty much this reason.
- burfog 8y agoThese days, a basic programming course would likely involve TI calculators or office software automation. Those are the only common usages of basic. Office suite automation is actually important for business, particularly involving spreadsheets. I give the next priority to octave (Matlab), bash shell scripting, and possibly a statistics-oriented language like R or Julia. Most schools seem to start with java, python, or javascript. I'm not loving these choices. The stuff mentioned above is probably more useful for people who won't become professional programmers. For those few who will, rust and plain old C make some sense, but there are unlikely to be enough suitable students to make this a reasonable thing to teach.
- analog31 8y agoAha, I meant "basic" as an adjective. Oops. ;-) You're quite right. Adding to the irony, my first programming course was actually in BASIC. I'd go with Python. I'm seeing it displace Matlab in the scientific world, and it has "something for everybody," making it potentially attractive to students who have odd interests such as music and art.
- burfog 8y agoThe trouble with Python is that it is an unfixably slow language that is too tempting to use for serious projects. Little prototype projects tend to turn into production code, and by that time there is no hope for a rewrite. Almost nobody makes that mistake with something like bash, so the slowness isn't such a hazard. Python also suffers from runtime syntax errors. Again, this is no big deal for little programs. Python has just enough syntactic capability to lul people into using it for projects that really need a language with compile-time type checking and code generation. Much of the business world runs on spreadsheets, so scripting those is actually useful for students who will mostly not become professional programmers. It so happens that spreadsheets still use basic.
- slg 8y agoI would argue that a majority of people who go to school for computer science actually want to learn computer programming. I would also argue that neither are really needed for the average high school student and computer science isn't really even needed for the average professional programmer. I would fully support giving kids the option to study either as an elective, but they are simply not needed to be a valuable member of society. If you are really adamant about high school kids learning programming, I might suggest some type of combination statistics and python/R class. Society suffers a lot more from the general populace's ignorance about statistics than computer science, programming, trigonometry, calculus, etc.
- dsnuh 8y agoI think it could be more beneficial to give classes in what we would have previously called "Systems Administration", or the "Ops" portion of "DevOps". It feels like too much focus has been put on learning how to code, which is likely not a skill that a majority of people will ever use again. But it is very likely that they will have to maintain their own computer network at home, and understanding how to administer their systems, basic networking concepts, how to troubleshoot, basic security practices, etc. would be far more useful in their daily life in the future.
- amelius 8y ago"Computer science" is where children are put under pressure to produce a publication before the end of the semester. It's what computer scientists do most of the time. "Computer programming" is where children are made to glue existing pieces of software together; plumbing with data so to speak. It's what computer programmers do 99% of their time. I'd say call it "sequential algorithms", so children can learn about the essence of the matter. It could be part of a math class.
- deleted 8y ago[deleted]
- zwerdlds 8y agoThe CODE.org curriculum refers to it as "Coding".
- dsnuh 8y agoWhat if we called it something like "Computer Arts", "Computer Ed", or "Computer Shop" (a la Sex Ed, Phys Ed, Wood Shop, Metal Shop) and treated it less as a science at this point, and more like we treat vocational or elective courses? Focus less on the programming aspect, and more on fundamentals of logic, how to troubleshoot problems, understanding the abstractions, how a network works, basic security practices, how to use a command line interface, general programming _concepts_, etc. They could take this course as a required class their freshman year in HS, and the school could offer other more advanced courses available as electives to more senior classes, AP courses, etc.