Posts tagged ‘non-CS majors’

Come to the CUE.NEXT Workshop: Making computing education work for all undergraduates

I’m going to be the keynoter at the Dec. 5 workshop in DC. The workshop series is near and dear to my heart — how do we make computing education accessible to all undergraduates? Below is taken from the CRA website here.

CUE

CS Departments have seen significant enrollment increases in undergraduate computer science courses and programs. The number of non-majors in CS courses has also increased significantly, and many CS departments cannot meet the demand. One key reason for the increased demand from non-majors is the fact that computing and computer science have become relevant to undergraduate education in all disciplines. However, there is currently no consensus on how to design computing courses or how to structure curricula aimed at teaching the fundamentals of CS and computing to students who need to use computing effectively in the context of the other disciplines.

The goal of the upcoming CUE.NEXT workshops — organized by Larry Birnbaum (Northwestern), Susanne Hambrusch (Purdue), and Clayton Lewis (UC Boulder) — is to initiate a national dialog on the role of computing in undergraduate education. Computing educators and CS departments, as well as colleagues and academic units representing other stakeholder disciplines, will work together to define and address the challenges. Three NSF funded workshops are scheduled to take place in Chicago (November 18 and 19), DC (December 5 and 6) and Denver (January 2020).

November 11, 2019 at 7:00 am Leave a comment

When do we know that a programming course is not working for non-CS majors?

There’s a good discussion going on in Facebook that I wanted to make more public and raise as a question here.  The crush of undergraduates in CS today is making it difficult to offer tailored introductory CS courses to different majors.  The problem is particularly acute when designing instruction for future CS teachers.  If you put the CS teachers in the same course as the CS majors, it’s cheaper and easier — you just teach one big course, rather than multiple smaller courses. But is it as effective?

Some of my colleagues suggest that we can design undergraduate introductory computing courses that are effective for both non-CS and CS majors.  Here’s my question: How do you know when it’s not working?  At what point would you admit that the one course option isn’t working? It’s an interesting empirical question.

Here are some possible measures:

  • Learning is a tricky measure.  For any discipline, the majors in that discipline are more motivated to learn more than the outside-the-discipline majors. You can’t expect the non-CS majors to learn more than the CS majors.  Then again, the non-CS majors probably come in knowing less.  If you do pre- and post-tests on CS knowledge, do non-CS majors have as large of a gain as the CS majors?  I don’t know, but in any case, it’s not a great measure for deciding if a class is succeeding for the non-CS majors.
  • Taking more CS courses may be an effective measure, but only if you have more than one course that’s useful to non-CS majors.  If the rest of the classes are about software development, then non-CS majors will probably not want to go on, even if the intro course was effective and well-designed.
  • Retention is a reasonable measure.  If more of the non-CS majors are dropping out from the course than the CS majors, you may not be meeting their needs.
  • My favorite measure is relevance I argued in my blog post on Monday that programming is a practice that is relevant to many communities. Do the non-CS majors see the relevance of computing for them and their community after the introductory course?  If not, I don’t think it’s meeting their needs.
  • Another tricky measure is use. Should non-CS majors be able (after their first course) to build some program that they find useful?  Certainly, if you achieve that goal, you have also achieved relevance.  How do you judge useful?  CS faculty may not be good judges of what a non-CS major would find useful, and CS faculty are most likely going to assess in terms of code quality (e.g., modularization, appropriate variable and function/module names, commenting, code style, etc.), which I consider pretty unimportant for as a measure for the non-CS students’ experience in the first course.

What do you think?  How would you know if your intro course was meeting non-CS students’ needs?

November 9, 2018 at 7:00 am 13 comments

Most jobs requiring CS skills do not require a CS degree #CSEdWeek

I am excited about this new report from Burning Glass and Oracle because it provides evidence for the claim that the vast majority of people who need CS skills will not be CS majors.  I will be joining folks from Burning Glass and Alison Derbenwick Miller and others from Oracle Academy in a Twitter chat about the report Wednesday, December 6 at 4 pm PT/7 pm ET.  Hope you can join us.

Only 18% of these jobs specifically request a computer science degree

While many employers are looking for workers with strong computer science skills, they are not necessarily looking only at job seekers with computer science degrees. Only 18% of jobs in the categories listed above specifically request a computer science degree. (Most postings do request a bachelor’s degree generally or a degree in another major.) Programming and data analysis jobs are the only categories that have significant demand for computer science degrees. For all other categories, fewer than 5% of postings request a computer science degree.[1] This means that students in a broad range of education programs can enhance their job market value by including computer science in their education pathways.

Source: Rebooting Jobs | Computer Science Skills | Burning Glass Technologies

twitter-chat

December 5, 2017 at 7:00 am 2 comments

Why should non-CS majors learn functional programming?

In my research, I’m most interested in the non-CS majors, the ones who learn computing because it makes them more productive (see where I make that argument) or because they want to make themselves more marketable (see Eric Robert’s post) or because they will live and work (as I predict) in the fat line between programmers and users (see post here).  A recent article in the CACM suggests that all non-CS majors need to be learn (let’s not use the “be exposed” euphemism — there’s no sense in “exposing” someone to something unless you’d like them to learn from it) “functional programming languages [and] the declarative programming paradigm.”  I’m willing to consider that, but why?  The quote below says, “they allow programmers to do more with less and enable compilation to more efficient code across a wide range of runtime targets.”  I’ve been studying non-CS majors who program for a lot of years, and I’ve never heard any of them say even once that they want to “enable compilation to more efficient code across a wide range of runtime targets.”

So let’s consider the “more with less.”  Do we buy that what what non-CS majors is to be able to get more expressive power with fewer keystrokes?  I don’t see the argument for that.

  • Brian Dorn studied graphic designers who program, and found that assignment was fairly hard for them to learn (see his CHI 2010 paper).  Surely, there’s not much that has fewer characters than that.
  • Neil Brown has been mining the BlueJ Blackbox data for empirical data on what students get wrong most often (see his ICER paper).  I was surprised to learn that confusing & for && and | for || is pretty common.  Those are pretty easy to type, short, and seemingly error-prone expressions.
  • We have Thomas Green’s fascinating result that that IF P THEN … END P; IF NOT P THEN … END NOT P. is not just better than IF P THEN…ELSE.…  It’s ten timebetter — novices do better by a magnitude if they avoid ELSE.

My suspicion is that non-CS major programmers value understandability and fewer errors, over fewer keystrokes and more power.

I like functional programming and would be interested in a good argument for it for non-CS majors.  I don’t see it here.

Second, would-be programmers (CS majors or non-majors) should be exposed as early as possible to functional programming languages to gain experience in the declarative programming paradigm. The value of functional/declarative language abstractions is clear: they allow programmers to do more with less and enable compilation to more efficient code across a wide range of runtime targets. We have seen such abstractions gain prominence in DSLs, as well as in imperative languages such as C#, Java, and Scala, not to mention modern functional languages such as F# and Haskell.

via Teach Foundational Language Principles | May 2015 | Communications of the ACM.

July 31, 2015 at 7:40 am 17 comments

Why programming in a non-majors, CS course is unlikely to lead to computational thinking (but is still a good idea): We must go beyond Intuition to Evidence

The March 2015 issues of Inroads (linked here) has a special section on “The role of programming in a non-major, CS course.” I was disappointed by several of the articles in the special section for making arguments without empirical evidence, and decided to write my February Blog@CACM article on the need for evidence-based practice in computing education (see post linked here).

I left out Henry Walker’s second article in the Blog@CACM post, and will discuss it here. In the first article, he argues against teaching programming because it would not leave enough time for other, more important topics. In the second one, he argues for teaching programming, if your learning objective is computational thinking.

If a non-majors course in computer science seeks to help students sharpen their skills in computational thinking, then students must be able to write solutions precisely. Further, students must be able to analyze the correctness of solutions and compare alternative solutions. Such work requires precision in writing. English or another natural language allows precision, but does not require precision.

Like in his first article, Henry offers no evidence for his claims. I do agree that programming requires greater precision than natural language. Henry argues for a value of the use of programming that is not supported by our research evidence.

If defined in sufficient detail, pseudo-code can enforce rigorous thinking, but pseudo-code cannot be run to check correctness or test efficiency. Ultimately, the use of a programming language is essential if computing courses are to help students sharpen their problem-solving skills.

In the decades of studies that have tried to find such transfer, the research evidence is that computing courses do not help students sharpen their problem-solving skills. I am not aware of studies that have rebutted David Palumbo’s 1990 review of the literature on programming and problem-solving (see paper reference here). It is possible to teach problem-solving skills using programming, but students do not gain general problem-solving skills from computing courses (with or without programming).

Henry’s evidence that this does happen is an anecdote:

An upper-level political science major who took my introductory computer science course indicated that her logical thinking in computer science had a clear payoff when she put arguments together for her papers in political science.

As a rationalization for a teaching decision, this is weak evidence. It’s self-report from a single student. The student probably did learn something interesting and useful from the class. Maybe the student did gain in logical thinking. Given the preponderance of evidence against general problem-solving skills coming from a programming class, I’m skeptical. Maybe she just saw her existing skills in a new light because of the computer science class — a useful learning outcome. In any case, is the positive experience of one student justification for designing a course for dozens or hundreds?

The conclusion of my Blog@CACM post still applies here. We don’t know what non-CS majors need or what they can learn. We shouldn’t just guess, because our intuition is very likely wrong — and it’s dangerous, since our experience (as mostly white, mostly male, CS faculty) is so different than those of most non-CS majors. We need the humility to admit that we don’t know. We must seek out evidence to inform our decision-making.

February 23, 2015 at 7:22 am 12 comments


Enter your email address to follow this blog and receive notifications of new posts by email.

Join 9,005 other followers

Feeds

Recent Posts

Blog Stats

  • 1,878,933 hits
October 2021
M T W T F S S
 123
45678910
11121314151617
18192021222324
25262728293031

CS Teaching Tips