15
$\begingroup$

We are trying to get more pupils doing computer science in years 10→11 (UK GCSE) (14→15 years old) and years 12→13 (UK A-level) (16→17years old).

As there are a lot of university educators around here, I was wondering if you can tell me what university courses would benefit, or have an element of computer science or programming, in them.

I am mostly interested in non-computer-science courses, as I think pupils will know that high school computer science leads to university computer science. However, one very thorough answer on computer science courses would also be useful and appreciated.


Note: I am also interested in other pathways (jobs, etc.) that may use computer science or programming. And these would be welcome also.

$\endgroup$
  • 1
    $\begingroup$ Just for clarification...you asking for university courses that use computer science (or computational thinking?) that are NOT listed as formal computer science courses? $\endgroup$ – Peter Jun 27 '17 at 16:37
  • 3
    $\begingroup$ What is "high school computer science???" $\endgroup$ – ncmathsadist Jun 27 '17 at 16:45
  • $\begingroup$ not CS, though any unexpected computer science courses could be of interest. (trouble is what is unexpected) $\endgroup$ – ctrl-alt-delor Jun 27 '17 at 16:46
  • 3
    $\begingroup$ I don't understand the question here. $\endgroup$ – Ben I. Jun 27 '17 at 16:58
  • 1
    $\begingroup$ There is a large difference between computer science and programming. What are you teaching the high school students exactly? $\endgroup$ – RemcoGerlich Jun 27 '17 at 20:01

13 Answers 13

19
$\begingroup$

The Russell Group of Universities has published a useful list of recommended A level subjects for different degree options which suggests that other than a CS degree, CS A level is recommended for:

  • Aeronautical Engineering
  • Biochemistry
  • Biology
  • Chemical Engineering
  • Chemistry
  • Civil Engineering
  • Economics
  • Electrical / Electronic Engineering
  • Engineering (General)
  • Geology
  • Materials Science
  • Maths
  • Mechanical Engineering
  • Medicine
  • Optometry
  • Orthoptics
  • Physics
  • Psychology
  • Sociology

Problem solving and computational thinking is a hugely transferable skill in itself. Almost any science / engineering route through academia into the workplace is greatly benefited by the ability to write / modify some code that will process data efficiently and generate exactly the sort of analysis / evidence that you require.

For example, a substantive part of a Psychology degree involves collecting and processing statistical data. Even without the logical and analytical benefits of CS, the ability to write code to automate the analysis of that data immediately gives you huge advantage over peers without any CS skills.

$\endgroup$
  • $\begingroup$ Note that it is the last in the list of recommended courses for most of the engineering ones, which tallies with the advice I had many years ago ( to study engineering at Cambridge, do art or music O-level rather than CS as the relevant bits of O-level CS would be covered in a couple of lectures, do further maths rather than CS at A ). $\endgroup$ – Pete Kirkham Jun 28 '17 at 9:21
  • $\begingroup$ The actual CS parts of a 1990s CS A-level are still useful to me as a physics postdoc (the turbo pascal I learnt for the coding parts less so). They've also been beneficial when working in engineering. In general any exposure to CS concepts will help when students first encounter programming in something like a physics degree because there's no time to cover it. Some examples: Pseudocode; RAM vs. storage; data types; flow of control. $\endgroup$ – Chris H Jun 28 '17 at 12:56
  • $\begingroup$ @PeteKirkham I'm not sure you can read much into the sort order. $\endgroup$ – Chris H Jun 28 '17 at 12:57
11
$\begingroup$

Knowledge of programming is extremely useful. One of my programming students at the North Carolina School of Science and Mathematics wound up at the University of North Carolina. She took CS courses and she was involved with the school of public health and studied epidemiology. The ability to handle and visualize huge data sets is central in that field. This fall, she will be at MIT in the Neuroengieering Ph. D program. She has several publications to her credit as an arriving grad student.

Programming gives you power to research, to filter information for valuable nuggets, and to process large sets of data and find pattern and order in them. It's indescribably valuable.

$\endgroup$
  • 1
    $\begingroup$ You could call it, "Weapons of Math Deduction" $\endgroup$ – user737 Jun 28 '17 at 17:23
7
$\begingroup$

I think the skills learned doing basic computer science can be contributed to any course that requires critical thinking, especially if you are teaching the students how to program. In college right now, I am using prior python knowledge to help automate my maths class (possibly not particularly what you were shooting for but I think it is something to bring up to get kids to join the class).

Friends in economical fields have delved into R for helping them conduct research. I think any science or forward moving degree (I see less help in the world of history) can really see benefit of the computational mindset. David Malan of Harvard's CS50 (one of the most highly thought of intro to comp sci classes in the world) says that CS50 is Harvard's quintessential course, no matter your major.

$\endgroup$
  • 3
    $\begingroup$ Hi itsjtwright! Welcome to Computer Science Educators! I hope to see you around the community more! $\endgroup$ – thesecretmaster Jun 27 '17 at 16:59
  • 2
    $\begingroup$ This is a nice answer. Welcome to Computer Science Educators, itsjtwright. Ditto what @thesecretmaster said :) $\endgroup$ – Ben I. Jun 27 '17 at 16:59
  • 1
    $\begingroup$ I decided to drop by (and would like to stay) due to being a student teacher of APCSP next year, and this seemed to be a solid community to bounce ideas with, so thank you for the warm welcome, I have to say a tad strange this being my second SE group, last being overflow, not particularly the nicest people. $\endgroup$ – itsjtwright Jun 27 '17 at 17:06
  • $\begingroup$ We are not nearly as large as SO. We try to greet new posters, both as a way to humanize the community here, and as a way to check in with initial post quality. I think (hope?) it helps set the stage for a warm, welcoming, and on-topic community :) $\endgroup$ – Ben I. Jun 27 '17 at 19:37
7
$\begingroup$

Consider the US-based College Board's class AP Computer Science Principles. It argues that CS is "the new literacy":

Whether it’s 3-D animation, engineering, music, app development, medicine, visual design, robotics, or political analysis, computer science is the engine that powers the technology, productivity, and innovation that drive the world. Computer science experience has become an imperative for today’s students and the workforce of tomorrow.

The goal behind the course, at least how I teach it, is ultimately to show students how widespread the value and impact of CS are. I know that many students who take the class here don't necessarily intend to study computer science in college. The adaptation I teach -- CS50 AP -- makes a point of creating assignments that are inspired by real-world topics. From the CS50 syllabus:

Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming.

Thinking skills aside (since I think everyone here would argue for the value of logical, order thinking learned through computer science and programming), there is tremendous relevance for computer science and medicine (a huge draw for my students) or for CS and music. The more our world gets digitized, the greater the importance of understanding technological growth and knowing how to work within digital innovation.

Another part of it too is this (and getting students to believe this is tough): there might be relevance you see later that you couldn't possibly predict now. Not everything you study or learn has an obvious connection to a future class. Who knows what field will change because of technology in the next 5-10 years. By studying computer science, though, you can be ready for wherever that evolution takes us.

$\endgroup$
  • $\begingroup$ Your first quote suggests it's the use of CS end products that are the new literacy. I think you need to make the connection between basic CS, and future applications. Specifically to emphasise learning CS over a 'digital litteracy' course which teaches 'how to learn a new app once it is released' $\endgroup$ – Sean Houlihane Jun 29 '17 at 7:59
7
$\begingroup$

I concur with the existing answers that every field of study benefits from at least a basic understanding of CS and ability to program, but to give some specific examples:

Mathematics

CS grew out of maths, and is still closely related. To give a specific example of a mathematics course which includes programming, see the Computational Projects Manual of the Cambridge maths tripos.

Science

Computer models are used to turn theory into predictions which can then be tested experimentally; and programming can also be useful for analysing data. This is particularly obvious in some fields (e.g. particle physics: just look at the computing power used by CERN), but even biology, which doesn't require mathematics for undergrad admission, has a lot of modelling. I know one post-doc virologist who wanted me to look at his R code to see whether it could be made more efficient, because his models took over a day to run and it was a bottleneck, and another doctoral student in oncology who similarly has models that take over a day to run.

This also includes sciences which a school pupil might not think of, such as linguistics: see Mark Liberman's breakfast experiments on Language Log.

And it's not just research-level science which benefits. I studied CS at Cambridge and the first year was 50% natural sciences, so I effectively did a minor in physics in the first year. I did a bit of programming in one of the practical labs.


Postscript

I should add: I didn't study CS at school, and in fact I deliberately chose not to take CS A-level because I knew I wanted to read it at Cambridge and they preferred applicants not to have done it. I think they had a low opinion of A-level teaching and didn't want to unteach whatever errors people had learnt. I'm not sure whether that has changed.

$\endgroup$
6
$\begingroup$

At my university in Canada, all students in their first year of engineering are required to take a basic programming class, regardless of the type of engineering you intend to specialize in. I have been told that a similar rule is in place in different engineering schools. In my personal experience I have also benefited from programming knowledge in statistics, math (proofs), and philosophy (critical thinking and logic).

As an aside, another good reason to take CS that is unrelated (or at least indirectly related) to school courses is the ability to look at small gadgets and gizmos and think to yourself "I could build that". It's empowering. It gives you the ability to watch movies and chuckle to yourself when you realize that the writers sometimes don't know much about computers.

Edit: I forgot that it is common now to learn programming in GIS (Geographical Information Systems) too.

$\endgroup$
3
$\begingroup$

I'm not an educator, so I'll have to approach this from the "other pathways" part of the question.

To be honest with you, it is very applicable in areas unrelated to run of the mill contracted/corporate programmer and I personally feel like depending on what you intend to do after college/university, may even be better suited for something to minor in with a major in something to gain concrete domain knowledge.

At a former job while I was in college, another employee and I would work on small, very function specific applications that made our tasks easier. After a while, others with similar job functions were using the applications too. At the time, I think I had an introductory course and he was self taught, but some value was obtained from it for ourselves and our coworkers.

So that's the programming aspect of it, but at a very fundamental level development is about breaking up a problem into smaller parts, solving them (or in some case mitigating if that's the best one can do), and then piecing them together with whatever "glue" is needed to properly connect them into a full piece. A lot of times, whenever there are "panicky" situations at work or at home, my best course is to attack smaller components in this manner and that allows for us to resolve things that seem bigger than they probably are.

I hope that at some point, a basic level of computer science will be part of the core curriculum or at least a generally available elective. In the same way that English/Language Arts tends to make you a better writer which assists in taking notes, problem analysis, etc. and mathematics (sometimes subconsciously) helps with daily tasks, I think programming gives you tools that assist with problem solving and also give you an extra avenue to create tools to make tasks in life easier (a carpenter could write something to help with on the fly calculations, for example).

If you want to pitch it to students that they could be on the pathway to being developers, yes, it could put them in that direction (or possibly informs them that being a developer may not be what they really want to be when they grow up which is just as valuable). But I think if you approach it as programming is a discipline in trying to make one's life easier by limiting long term effort on repeated computational tasks and generally being a stronger problem solver, I think you'll get the most leverage out of it among the more pragmatic students who may not be interested in programming as a career path.

$\endgroup$
  • 1
    $\begingroup$ I really like the psychological point about breaking down stressful problems. I find I do the same thing in my own life. This is a nice answer. Welcome to Computer Science Educators. I hope we hear more from you! $\endgroup$ – Ben I. Jun 27 '17 at 23:31
3
$\begingroup$

Some of the simpler parts of CS entail:

  • factoring code into functions
  • composition of functions into larger pieces of functionality
  • loops
  • if / then / else logic

I learned the basics of all of these in high school, mostly dealing with AppleSoft Basic.

Let me explain how my high-school level CS skills benefited me, long before pursuing a degree in same.

Before starting college classes toward a degree, I worked for a temp agency. They quickly discovered they could send me to any client struggling with Lotus 1-2-3 (ok, so I'm revealing my age :-) and I'd knock it out of the park.

I was pretty adept at algebra so spreadsheets were more like toys than tools. I quickly learned how to record macros. Because I knew about factoring and composition, I was able to create small macros which would do certain functions, then test those macros, confirming that they worked the way I expected. I could then create other macros which could compose one or more smaller macros into larger pieces of functionality. Macros could also do loops ....

Lotus had functions which did if / then / else logic. Once you got the hang of them, you could do some pretty advanced stuff.

With macros, and my skills at that point, I could make Lotus get up and dance. It was programming, after all, but nothing which needed college-level CS training.

A couple contracts I did as a temp:

  • The client had a bunch of data entry into a spreadsheet (rows in a spreadsheet can be queried as a simple database). I quickly discovered which columns were unique and which were repeated. I'd:

    1. key in the unique stuff
    2. key in the repeated stuff just once
    3. create macros to copy / paste as needed

    It blew the client away just how fast I could get data into a spreadsheet.

  • The client had put together a spreadsheet to calculate depreciation on a large number of items. They needed someone to sit there and (manually) run hundreds of iterations of:

    1. calculating the sheet
    2. copying data around
    3. calculating totals
    4. stashing those somewhere

    I automated the process (macros, loops, if / then / else). I sat there for over 3 hours while the machine did all the work. They didn't gripe; they were expecting to have to pay someone a full day to get that done. I got it done after lunch.

I've had multiple occasions in my life where companies brought me in as a temp, decided they REALLY liked my skills, and hired me. Why did they like my skills? I could type fast, I'm reasonably personable and, if something could be programmed / automated, I could usually figure out how to do so.

These constitute basic CS skills; I hadn't made it to college yet. I was able to do some pretty advanced things with the typical office software of the time. Even if I hadn't pursued a degree in CS, these skills gave me a leg up in just about any career / field of endeavor which used computers. How many careers / fields do NOT use computers, these days? How many of us, seeking employment, would NOT like a leg up on other candidates?

I did, eventually, pursue a CS degree. While I was in college, I was acquainted with a young woman who was studying to become an actuary. She was taking programming courses in C++ because the actuarial groups she'd talked to said they wrote their own analysis software in C++. Of course, actuarial is VERY heavy in Mathematics, which @Peter Taylor has mentioned.

If you're trying to motivate teenagers to develop these skills, showing them how even basic-level skills can improve their desirability to employers should get them thinking.

$\endgroup$
3
$\begingroup$

Well, I'm not an educator, but a student, and I'm in the United States (early highschool, so 14-16 ish). I find several advantages from coding.

  1. It's very relaxing. Well, in a sense. I find it enjoyable to solve problems using programming. Debugging, while not quite as relaxing, is still enjoyable - I'm solving simple problems. It feels good to get a program working. And if you've ever been in a state of programming "flow" - where the code just kinda flows right off the fingertips - you know you want that to happen again. It's a great feeling.

  2. It's useful. I was in Algebra year before last (mid-middle school) and we were solving quadratics. I solved the problems, then wrote a quick program and used it to double check my work. I like using it on the Euler Problems as well - very fun. So it's quite relevant to mathematics.

As for topics it's relevant with - I'd say almost anything. You can write a program that solves a math problem, a research question in just about any science, makes a document look nice and neat (ahem, LaTeX, I'm looking at you), waters your plants while you're away (with the help of a cheap microcontroller like the Arduino), etc.

So engineering, math, science of any type, writing, art - I kid you not about the last. Computer generated fractals are just about the most beautiful thing I've ever laid eyes on. Oh, and animation - think movies like Toy Story, and so on. Hello, computer science! Think of how many ways computers are used in your daily life. Think of how many people applied the principles of programming and CS to make those things work.

I could keep going, but to conclude - computer science and programming also improves general problem solving skills. And you get the nice whoa factor when you show a friend your latest creation. So, um, yeah - please include as much CS stuff as possible in your curriculum.

$\endgroup$
2
$\begingroup$

Computer science is a bit unlike math, history and other fields. For reasons that are, perhaps, as much historical as pedagogical or anything else, CS doesn't generally follow the "taught to very young children (i.e. six-year-olds) and then developed through primary and secondary schools" model. As a result, high school and university CS courses often cover the same ground; at the introductory course level, at least. The difference is that universities, where students are expected to choose a major, have the opportunity to offer more courses with greater depth and breadth as well.

Introductory courses, whether in high school or university, typically cover fundamental principles such as basic data structures and the importance of algorithms, and involve some programming. I have no personal experience with "programmer boot camp" programs, but I would think that HS CS coursework would be a good head start for such non-degree-granting developer-job-training programs.

It's also very common for academics in non-CS fields to find themselves writing small computer programs to assist themselves with their research on an ad hoc basis, for tasks such as data processing/manipulation or statistical analysis. Having some knowledge of a programming language and the importance of Big-O from high school would be helpful for that as a, say, research assistant to a chemistry professor.

I also know someone as an undergrad who once had a take-home final exam in a civil engineering course where the entire exam was to perform a complex calculation about deformation of a beam under certain conditions (soil, beam material, weather, etc.) The professor's goal was to make the students apply concepts from throughout the course in what should have been some pretty drawn-out calculations. My friend knew a bit of programming and, using all the appropriate engineering concepts, wrote a little program to pop out the correct answer for him. The professor gave him full marks.

$\endgroup$
2
$\begingroup$

Learning Latin or Geometry is useful even to students who will never need to translate Latin manuscripts or plan a moon landing, and I think the same goes for computer science. As with Latin or Geometry, the main skill that Computer Science encourages is a disciplined approach to problem solving by collecting evidence and making logical inferences from the evidence (technically, I suppose it's programming that encourages that rather than Computer Science per se, but I'm assuming that Computer Science involves a large dose of programming). One thing I notice on StackOverflow is that you can generally tell an inexperienced programmer by the fact that they lack these problem-solving skills.

However, it's not just problem-solving in the sense of discovering the cause of an observed effect: it's creative problem-solving in an engineering sense -- devising an artefact with a required set of properties. And that of course involves the ancillary skills of teamwork, communication, and planning. Another benefit is that creating things that demonstrably work is enormously confidence-boosting, and one thing that many teenagers really need most is to have their confidence boosted.

I realise I'm answering the question here from the perspective "how will the study of computer science make you a more effective person", rather than "how will it be viewed by people who are assessing your qualifications for particular career or further study choices". In an ideal world the answer would be the same, but if you're asking how a qualification in CS is valued in industry or academia, I'm afraid I don't know the answer.

$\endgroup$
  • $\begingroup$ This is a thoughtful answer. Welcome to Computer Science Educators! $\endgroup$ – Ben I. Jun 28 '17 at 13:12
  • $\begingroup$ Every field considers its own knowledge to be fundamental and important, so I think that a good question to ask periodically is something like: "should we now drop Latin in favor of programming, because there are only so many hours in the day?" Simply adding more 'literacys' to the curriculum will not work, so we need to be sure of what is the real literacy, today. I imagine that at some point, computers will be powerful enough that the ability to read and write will not be necessary for everyone. $\endgroup$ – user737 Jun 28 '17 at 17:31
  • $\begingroup$ I took Latin in high school for required foreign language credit and because I thought it may help improve my vocabulary for ACT/SAT tests later. I also took my first formal programming course (had been programming for several years before) in high school because it was my first chance to get onto a "real" computer instead of my TRS-80 and 8088 (VAX via green screen terminals, doign Fortran and Cobol). $\endgroup$ – ivanivan Jun 28 '17 at 17:38
1
$\begingroup$

I have seen people with some background in, but not necessarily extreme proficiency in, programming be successful in the following fields:

  • IT project management. Having some technical background helps the managers relate better to the staff and perform better risk analysis and planning.

  • Financial analysis. I have met literally dozens of people who have a strong background in finance, business and/or math, and have light coding skills, and became Excel power users and perform sophisticated financial analysis in their jobs. This requires some basic coding skills (data structures, flow control) but also substantial background in the business and finance.

  • Training. Trainers are usually competent programmers but tend to have more breadth than depth. Successful training requires a lot of other skills that developers do not usually have including presentation skills, talking to a group, etc.

$\endgroup$
  • $\begingroup$ As a former programmer now teaching / training, I concur. $\endgroup$ – user737 Jun 28 '17 at 17:35
1
$\begingroup$

If you want to see some examples of people using computer science across many industries, you can check out this Coding in the Wild blog that we put together at CodeHS (I'm one of the founders of CodeHS) to get some stories of how real people use coding to help their work.

Students should be aware that even if their true interest lies in some other field, coding will almost certainly help them in that field, and I think the blog highlights that well.

$\endgroup$
  • $\begingroup$ A note about the blog. Your definition of open-source is inaccurate. Please read the open-source definition, then note that the set of Open Source software is almost identical to the set of Free Software, then read the Free Software definition, then read the Open Source definition again. ( The name Open Source is misleading, I just remember Open Source ≈ Free Software. And Free Software is software with the 4 freedoms. Open Source also has these freedoms, but it is not obvious from the name. Not all software with source available is Open Source.) $\endgroup$ – ctrl-alt-delor Jul 2 '17 at 9:50

Not the answer you're looking for? Browse other questions tagged or ask your own question.