"When women stopped coding" story about the drop in women majoring in CS

Re: #318

Yes, AP CS principles is a much better, more interesting, and more useful introduction to CS for almost all high school students (including those who will not major in CS and those who are unsure of whether they want to major in CS) than AP CS A is.

Wish we had AP CS Principles…but don’t have it.

My 8th grader will do a Python coding camp (1 week) this summer and next summer Java camp.
And I am getting her the Raspberry Pi…

@ucbalumnus – I agree. I was initially skeptical of CSP because I had the attitude of put 'em in AP-CS-A and let them sink or swim, figuring that kids are loaded with tech devices and would want to learn more about how they work. Apparently not! They see the devices as tools (I don’t know how many times I’ve had to explain the difference between WiFi, our MicroCell, cellular data, and hotspots). Anyway, our HS started a Computer Science pathway this year (they already have Biotech, Business, Teaching, Engineering, Healthcare, Marketing, etc.). Freshmen take Intro to Digital Technology, sophomores take AP-CSP, and juniors take AP-CSA. Seniors typically do some sort of local internship. This was the first year AP-CSP was available so D18 took it as a junior.

BTW, I think CS has matured and grown enough that it needs to be split into two categories: traditional CS with the nitty-gritty details, and “application science”. Both fields are huge and very different (I’ve done both). You can see some of that with “game design” and “computer programming” specialties but I think it should be formalized at the university level. The abstraction stack would be EE->CE->CS->AS. It’s become painfully obvious to me over the last 10 years that the current CS system isn’t working.

@droppedit I’m a bit confused by what exactly you mean with “application science” - are we talking “software engineering” or something else? Could you elaborate?

@PengsPhils – by “Application Science” I’m referring to the design and creation of programs for end users (as opposed to operating systems, compilers, low-level library stuff, etc.). Software engineering techniques would apply to both of them. AS would focus on creating programs that are usable by real people. There would tons of human-computer interface study, data gathering and presentation study, etc to go along with programming. AS people would use the tools/APIs/libraries created by the CS people.

Two things prompted my AS/CS split thinking. A few days ago, DW was completely frustrated with one program she was using and lashed out at me with, “you programmers think you know everything about computers … but you don’t”. The second thing was when I tried to develop a decent iOS and Android app. The APIs were inconsistent, buggy, and had undocumented limitations. The most appalling one to me was the text boxes being limited to the maximum size of a texture on the device’s GPU. Just inexcusable laziness on the part of the OS developers. These two problems require different levels of thinking about software design. It took me several years to transition between the two.

Why would what you call application science need to be a separate major?

Someone interested in doing user facing software development would still want to learn the usual CS stuff like operating systems (every program interacts with the operating system or is part of the operating system), networks (most programs interact with networks), algorithms (can’t have the program become unreasonably slow just because the data set becomes somewhat large), security (because someone is probably trying to crack your program or cheat in your game) but include stuff like user interface design, graphics, and other options as you describe, rather than more system level stuff like compilers.

So User Experience, User Interface, Human-Computer Interaction, and some Sociology/Psychology? Get what you’re saying now, but I think that we have enough terms to describe it already. Personally, I think that it’s most known in industry by UI/UX Design (User Interface / User Experience Design).

While it may not be an official degree often enough, these people do exist at some companies and play a critical role where they are valued and utilized properly. UI/UX design is something that we need much more of, and should not be something that is de facto left to developers as it is now, which causes a lot of gaps between an application and its usability for sure as mentioned. That seems to be what your daughter is complaining about, though correct me if I’m wrong as it’s a bit vague. Still, the point stands: you can almost always tell when the software engineers designed the front end of anything, and it’s painful for sure.

However, I don’t see that as a split in academic CS, but something that industry has handled poorly, and academics has not provided an answer to really as degrees that cover this are lacking in existence to say the least. To be fair, why offer a technical degree in something that industry is not asking for? It’s a bit of chicken and egg here.

I don’t see how this split solves the quoted problem. What you’re referencing is bad software design/documentation from an implementation standpoint, not from a UI/UX/Application standpoint, something someone with a degree in computer science should really be very capable of doing. I think this comes down to a lack of good developers, identifying good developers, and other topics along those lines. That’s a whole can of worms right there though.

The reality is, generally, anyone who touches code beyond a top level UI layer needs to be aware of all the core things @ucbalumnus went through. Without that CS background, software development would be in an even sadder state than it is today. So, I don’t think a new split needs to happen in CS, but CS needs to properly utilize and expand the already existing field of UI/UX.

There is a relatively new multidisciplinary branch of CS called HCI that covers this area.

A number universities perform research in this branch of CS, with CMU publishing the most papers. Here is a list of the top 50 by number of publications.
http://csrankings.org/

Degree programs are pretty rare because they are very interdisciplinary and span the Engineering/Liberal Arts boundary. I have not done an exhaustive search, but the ones that I am familiar with (I am from the Northeast) are a second major at CMU and interdisciplinary Bachelors and Masters programs and a certificate program at Tufts. The hardest piece to find is the Human Factors Engineering/Engineering Psychology courses. Ideally the person also has some aptitude for aesthetics and some Art/Design courses.
http://www.cs.tufts.edu/~jacob/hci/courses.html
http://engineering.tufts.edu/me/graduate/certHCI.htm
http://www.hcii.cmu.edu/academics/hci-undergraduate/major

User Interface/User Experience (UI/UX) design is the employment category. Web design/programming degrees can also feed this category, but they tend not to have as deep a knowledge of CS. Some of the good people in this area are self-taught.

HCI and Human Factors/Engineering Psychology is one of the CS/Engineering specialties that is very popular with women.

Human factors is not new - I have a friend who studied human factors (as a Psych major) in the early 80’s. He has always worked for tech companies. When he worked for the phone company we teased him that he must have been the one with the brilliant idea to put the 2 between the 1 and the 3 on the keypad!

Human factors predated the 80s. I was in a Human Factors Engineering PhD program in the mid 70s. I dropped out and went on to be a software developer.

Computer science now top major for women at Stanford University

http://www.reuters.com/article/us-women-technology-stanford-idUSKCN0S32F020151009

Human Factors is not new, Computer Science is not new. HCI recognized as a separate discipline within CS is relatively new. HCI gets into Visualization, Graphics, Natural Language Processing/Voice Recognition and other means of interfacing with computers including passive brain monitoring and other techniques . Degree programs that combine the three along with some engineering/industrial design are relatively new and not very common. Apple is an example of a company with well designed software interfaces. They hire some Tufts grads, but they must have feeder programs on the West Coast.

AS wouldn’t simply be UX design because the UX penetrates into the core app code in several ways. You have multithreading for a smooth UI which has a huge impact on the core design. You have reporting meaningful errors to users which again requires good integration between the core and UI (typically, an error in the guts of the app code gets reported as some obscure or generic error). This would be a degree for someone intending to design and write code, not design UIs, create icons, etc.

The most simple breakdown: CS is for people writing code for other developers to use and AS is for people writing code for end users. In the old days a single person could do both because the UIs were so primitive and the target users were generally computer-savvy (or were specialized users that could spend the time to learn complex UIs). That’s not the case anymore. Software is used by everyone all the time.

I guess my basic reply to those who think an AS degree isn’t necessary would be: why do we need so many types of engineering degrees (Electrical, Mechanical, Civil, etc.)? They all have to learn the basic tools (calc, physics, etc.) and then add on specialization. Well, engineers need that separation because each engineering field is too big. If all we had was an “Engineering” degree then students would only dabble in each of the existing areas rather than thoroughly explore one area. They would be forced to learn their specialization on the job and probably do a crappy job at it.

Is anyone happy with the state of software these days???

What you call CS and AS overlap so much in the foundational stuff that the portions that are different can be in-major elective options and out-of-major elective recommendations within the same major. It is not like where the divergence is fairly large, like with electrical and mechanical engineering. Perhaps a better analogy may be mechanical and aerospace engineering, where the latter is often treated as an elective specialty within the former. Or computer engineering, which may be treated as an elective specialty in either computer science or electrical engineering.

I still don’t see the need for AS - why not have a UI/UX person to design the user flow, interface, graphics, layout, etc with a strong backing in psychology and more, and they communicate and work with the CS major how to make that for the front end user-facing code. That way the UI/UX person doesn’t also need to double in CS, and take away time from their specialty and value. What gap is there in that flow that AS must solve? What skill is missing there?