If we want more diversity and interest in computer science, we need to stop doing things the way they've been done for the last 40 years. We can't offer the same 3 or 4 classes that all focus on learning console-based programming and text dialog. Computer Science has so much potential. Think outside the box. Stop teaching with a focus on a "1-track, depth of CS" and instead adopt a "multi-track, breadth of CS" approach. Â
A "breadth of CS" approach (or BroadenCS) focuses on the following:
Multiple Subdomains of CS (Game Design, Web Design, Cybersecurity, robotics, networking, microcontrollers, etc.) - You're not limited to console-based input/output.
Multiple Entry Points for multiple interests.
Hands-on & practical opportunities. Build a website, a game, a robot, a network, a circuit, etc.
Interdisciplinary content - Explore how websites improve business, how robots/AI improve manufacturing productivity, how games and apps can be used in education, etc.
This is not easy for a single teacher to do - it means multiple "preps", it means rarely teaching the same class in multiple periods, it means more work. But, it has greater payoffs.
What I currently cover @ South:
Web Based
Web Design (web 1) - HTML, CSS
Web App Design (Web 2) - HTML, CSS, JavaScript
Web Projects (Web Page Support) - independent study
Robotics
Robotics Programming - VEX VR & V5
Robotics Projects - independent study
Computer Science
Intro to Programming - Game Design
Programming Fundamentals - Python programming
CS1, CS2, CS3 - Java + AP CS A (we aren't officially AP) - these classes are often taught "stacked" meaning I could be teaching CS1, CS2, and CS3 in the same period to different sets of students.
Advanced CS Projects - independent study
What I don't cover (yet), but would love to grow towards in the future (if ever we got an additional teacher...):
Cybersecurity Principles - Mostly revolving around conceptual cybersecurity
Cybersecurity In Action - Hands on Cybersecurity (Linux, programming, firewalls, etc.)
Technology & Society- Various topics on how technology is used today with a big focus on privacy and security. Current research + future of technology.
E-Fabrics
Microcontrollers & Microcomputers
You see, what it all boils down to is that computer science is a wide field that we put in a narrow box (intro to programming, AP CS Principles, AP CS A). Not everyone is interested in that narrow box. But, as we widen our offerings (casting a wider net) we'll find that students will take these classes out of interest (and we'll catch more fish - quantity & diversity).
What does this solve:
The "fill in the seat" issue - Do you have students placed into your class that don't want to be there because they never signed up for the class? When you have 70 students sign up for 1 class, but you only have 30 computers in your lab, you'll either teach 2 periods of that class or (more likely) you'll teach 3 periods of that class, and 20 students who never signed up for your class and had holes in their schedules will now be divided into those 3 periods... Now, roughly 1/4 of your students in each class never wanted to be there in the first place.
The Gender Diversity issue - Girls are far less likely to sign up for typical computer science courses than boys are. A typical high school CS course will range from 0% girls to 30% girls, with 5%-15% being much more likely (roughly 1-4 girls in a class of 30 students). In a school that is roughly 50% female, 5%-15% taking CS courses is a sad statistic. This is not an intelligence issue, it's an issue revolving around interest in the opportunities provided (or lack thereof) and in perceived gender roles related to computer science. If you want to provide more inviting opportunities, rethink what opportunities you're providing. My 1st semester offering a robotics course, I had 10 girls/non-binary students sign up for it, out of 28 students. That's just above 30% - I'll take that as a win. A typical Web Design and Game Design course will have 5-8 female students in a class of 30. Contrast that with the typical python or java programming class simply labeled as "Intro to CS" or "CS1" or "AP CS A" which will have 1-3 girls in a class of 30.
The Ethnic Diversity issue - The ethnic diversity of a high school course varies based on the diversity of the area. A school with less diversity will naturally have less diversity within any class. But, a school with lots of diversity should see lots of diversity within CS courses, and sadly it rarely does. In the same way that adding diverse classes opens the doorway for gender diversity, it also opens the doors for ethnic diversity. Students want to find something they're interested in - we just need to make sure we hit multiple interests.
The "Computer Science isn't for me" issue - Well, have you tried my other courses? Maybe regular programming is too hard for you - right now - and we just need to start you with something more basic or slower paced before giving it another shot. Have you thought about Web Development? It's the easiest form of programming as it deals mostly with substitution and very little with problem solving. Have you tried robotics? It's way easier than typical programming, has a confined set of commands, and has immediate applicability. Have you looked into Cybersecurity? There's lots of elements in Cybersecurity that don't require programming skills at all (networking, social engineering, vulnerability analysis). Computer Science, in some form or another, is right for almost everyone - you just need to find what works best for you.
I explained earlier what Computer Science is, so what makes a computer science course?
Personally I feel like it should check those boxes - Making computers do things for you through problem solving, algorithmic thinking, communication, and Language.
Having said that, Computer Science courses often extend beyond that into courses that are highly technical or combine some form of hands-on with some amount of programming.
So, what would I consider a computer science course:
Any course that teaches problem solving through coding/programming (computer Game Development, Robotics, Web Development, App Development, etc)
Any course that is highly technical in the general computer science umbrella
Cybersecurity (Can be done with 0 programming)
IT/Networking (often no programming is involved)
Microcontrollers & Microcomputers
E-Textiles
What would I NOT consider a computer science course?
Courses that use computers but don't teach any sort of computer science
Computer Literacy or Software Applications (Word Processing, Presentations, Using applications, Keyboarding, etc.) - I personally feel these fall under the Language Arts umbrella.
Non-Programming computer applications (Game Design, Robotics Engineering, Web Content Management, etc.)
There also exists some gray area in which many computer science teachers teach this material, but it isn't necessarily computer science and whether it fits the computer domain or not depends on what exactly is taught:
3D Modeling/Printing is not computer science, it's 3D design (art) - unless you're personally doing some sort of programming in order to generate the 3D models.
Spreadsheets - general spreadsheet use is probably not Computer Science. - using functions like "=sum(A:A)" falls under the coding category, but I still hesitate to call it computer science or programming. However, there is advanced functionality built into spreadsheets that allows users to define their own functions and use an actual programming language, so if a course teaches that it could fall into the computer science category.
Should a CS course be a requirement for graduation?
No. Have you seen high school graduation requirements?
Personally, my favorite classes in high school were those I was not required to take.
Choir (1+ course every semester)
Computer Science (1+ course every semester beginning Sophomore Year)
PE/Weights (1+ course almost every semester + after school sports).
What were my least favorite classes?
Social Studies
Language Arts
Health
Science
Anything I didn't personally sign up for
What do graduation requirements look like for students?
Oregon (1 credit = 1 year, 1/2 credit = 1 semester):
4 Credits Language Arts (Every semester, all 4 years)
3 Credits Mathematics (Every semester, 3 years)
3 Credits Science (Every semester, 3 years)
3 Credits Social Sciences (Every semester, 3 years)
1 Credit Health (2 semesters)
1 Credit PE (2 semesters)
.5 Credits Personal Financial Education (1 semester, begin 2027)
.5 Credits Higher Ed & Career Path Skills (1 semester, begin 2027)
8 Credits Electives, 3 of which must be in the arts, world language, or CTE area (16 semesters).
Out of 24 credits required to graduate, 16 have a "You must take this course" requirement (A few required courses have options). 1/3 being electives and 2/3 being required seems like a good ratio, except that to help students graduate on time they're frontloaded with required courses their Freshman year. That means that students take 7 required course and 1 elective per semester. 1/8 is a drastically different stat than 1/3. And students who don't pass required courses have to add those to future semesters (thereby removing more elective opportunities).Â
Universities often expect 2 years of a Language and 4 years of math (thereby removing 3 elective credits).
The majority of students don't consider required courses their favorite and will often list them as their least favorite. The reasoning isn't because the content is bad, but because they didn't choose the course to begin with. More opportunities = more freedom of choice = more personal investment. Students are more likely to succeed when they take a course out of personal interest.
I did a writeup (too lengthy to put here) on my full reasoning for not requiring CS credits to graduate and, in summary, they include:
Student & teacher passion for electives (vs required courses)
Loss of depth of learning opportunities when everyone is required to take a specific course.
Not enough competent/interested teachers
Potential educator requirements for competent teachers in that domain (a requirement for all required courses) would make finding educators even harder.
Difficulty of implementation (including poorly thought out legal requirements & what constitutes a CS course)
Students failing CS courses being held back from graduation
Too many required courses
Freshman are already frontloaded with required courses in order to set them up for graduation success.
Too many courses that aren't required that might be more beneficial to make a requirement than CS - Why should CS be more important than all of those?
Despite what some people are saying, CS knowledge does not hold the same weight of importance as Reading, Writing, and Arithmetic. You don't need to understand how an app works (programmatically) to use it any more than you need to understand how a car works (mechanically) to drive it, and you don't need either nearly to the degree that you need to know how to read, write, or do simple math.
(To check out my entire writeup, check out this article)
Should Computer Science be a requirement for schools to make available at all levels?
Absolutely. Though I hold very strong opinions against creating high school graduation requirements for computer science, I think it irresponsible for schools not to provide opportunities for students to learn computer science at every level.
Every K-5/6 grade (Elementary) should have units that cover computer technology, problem solving, and programming instructions (in drag-and-drop), and this can be done in many ways but is most enjoyable for students when paired with game design and robotics.
Every 6/7-8/9 grade (Middle School or Junior High) should have CTE courses every student has to take that cover multiple domains of career technical education and at least one class should focus on computer technologies with at least some of that time being dedicated to teaching programming (again, game design & robotics is a great, captivating opportunity here).
Every 9/10-12 grade (High School) should have multiple opportunities for Computer Science course offerings. The courses should not focus on 1 single pathway, but should have multiple opportunities for gaining interest ("My Computer Science Belief" up above).
This forces the emphasis to be on high schools, not students, and to weigh that emphasis on opportunities rather than on checking a single course box.
IF there was some sort of graduation requirement, I'd put further emphasis on CTE as a whole, not on CS singularly. Learning carpentry, culinary, business, video production, etc. can hold just as much value for students as computer science could.
I participate in a lot of CS Teacher forums. Occasionally my comments are noteworthy. A lot of them are varients of the same rant.
Someone in a CSTA community forum asked for recommendations on "expand[ing] CS in high schools beyond an introductory foundations course." I've personally been frustrated with the number of schools that offer only 1 CS path. Here was my response (some edits made to improve clarity):
Don't view CS as a 1-way path with a single beginner, intermediate, and advanced path. Doing so will limit the growth of a program to the same set of students who are typically interested in those CS courses and you'll see very little change in the diversity of [students within] the [program].
Recognize that CS has many beginner, Intermediate, and Advanced options that go beyond console-based programming and college-level problem solving.
Game Development
App Development
Robotics
Web Development
Cybersecurity
IT
Microcontrollers, Microcomputers, and Makerspaces
E-Textiles
Programming (lots of options here as well with different languages and specialties[, graphics-based options, Competition challenges, etc.])
For program growth, I recommend having multiple options for beginner courses with as few prerequisites as possible and with each beginner course providing at least 1 advanced course that allows students to move to the next level of that course (Game Development 1 & 2, App Development 1 & 2, etc.).
Entry level courses should focus on captivating interest - my personal opinion is that if they don't captivate interest they're not [fulfilling] their purpose.
Programming is important, but the language of a program isn't as important as the problem solving process. Problem solving comes in many forms and we should utilize those to help students see the practicality of their programs. Students will have a far better idea of what they can do in computer science when they code a robot, build a webpage, and design an app than if they simply program console-based calculators and dialogs.
*** Console based programming is still important, but I'm tired of seeing programs that only offer them and lose out on the opportunities to bring in underrepresented groups by supplying more entry options that captivate interest.