If I ran my community college’s CS department

Here’s what my school’s two-year Programming track would ideally look like if I were the one running it.

General Education Requirements

  • Math: Algebra I (including Boolean logic), Statistics (so your programs don’t misinterpret numbers)
  • English: Comp I (so you can write and look professional)
  • Placement test to see if you need Intro to Computers

Required classes

Semester 1

Intro to Computers (if the test said you needed it) – 3 credits

  • How to use a computer. How to create documents, how to install stuff safely, how to troubleshoot problems–on both Windows and Linux. (Mac OS X is similar enough to Linux that you don’t really need to buy Macs just for this class.)

Programming Bootcamp — 6 credits

  • Using Python to learn basic logic and structures, and what things are called. Python as a first language is not only easy and non-intimidating, but ingrains a habit of neatness with indentation.
  • Also covers what the most common languages are, and what they’re used for.
  • Also covers how to read documentation/APIs.
  • Also covers use of git from the command line.
  • Also covers what open-source is, how to use code from GitHub properly, and how to make your own code open-source (and when it’s appropriate to do so).
  • At the end of the class, your final project is to make something for yourself. It doesn’t have to be big or complicated, but nobody else can tell you what to make. For example, a calculator or tic-tac-toe game with a GUI interface, written in Kivy. Or if you’re ambitious, a simple application to replace your weekly planner. This gets students into the habit of making stuff, and shows them that they can.

One of the three gen. ed requirements

One programming elective  – 3 credits

Semester 2

Web Dev Bootcamp – 6 credits

  • The first class should be about what you’ll be able to do by the end of the class, and the second class should be about what you’d like to build with that. Throughout the class, the students will build that project. If their project doesn’t need to benefit from a particular class’s lesson, there will be a pre-coded web site that the lesson can be applied to. This is the homework for this class: applying the week’s lesson to a project.
  • HTML and CSS would of course be taught. Almost immediately, however, the class should incorporate either PHP or Javascript (one or the other) and a database structure so the site’s structure stays consistent.
  • Emphasize design and aesthetics; they are important! Fonts, colors and layouts may not be technically challenging to learn about, but they make a big difference in what the user sees. If your back-end is flawed, your page is useless; if the front is ugly or unreadable, no one will use it; and if it isn’t pretty and professional looking, your clients will fire you.
  • Introduce a web framework or two–preferably ones that are meant for different purposes. Maybe Drupal and Django, since the students already know Python from the programming bootcamp.
  • Also, cover some stuff about web servers, using Apache, etc.

Hardware and Networks — 3 credits

Note that this is the Programming track. The Hardware and Networks class here is only for the Programming track students, or Networking students who need things explained more simply before they go on to the Network track classes. Similarly, under my watch, the networkers would have a 3-credit scripting class next to a 6-credit networking bootcamp class. This may seem inefficient, but it actually means that people working in an area that isn’t their specialty get to work at a slower pace. That means less of a drop-out rate from these classes. Of course, if your college is ruthlessly money-focused, that may not be what you’re aiming for, but this is the ideal program, remember?

  • General overview of networks and how they work, the TCP/IP stack, basic security, that sort of thing.
  • Taken slowly, as a full 16-week class. Most programmers I know really dislike networking-related stuff and find it difficult, and the networkers feel the same way about programming.
  • Emphasis on what a programmer would need to know to interact with a network while programming. Things like Unix scripting should be part of this class.

 

One of the three gen. ed requirements

One programming elective – 3 credits

Semester 3

C Programming –  3 credits

The quality of classes on languages really doesn’t depend as much on how the class is structured as it does on the textbook and the teacher. A decent teacher using an O’Reilly book–or the classic Ritchie book–is going to do this just fine. If no other languages, I’d want students to leave the school knowing Python and C.

Operating Systems Bootcamp – 6 credits

  • Get into the nitty-gritty of the latest Windows, the latest OS X, and the latest stable build of Debian.
  • Command line, shell scripts in the native shell language and Python, security, major troubleshooting, and how to break into your own computer if you need to.
  • Discuss the differences between the different Linux distros
  • Discuss when it’s appropriate to use each operating system, and its pros and cons
  • Some more networking-related stuff thrown in–this is an appropriate place for it

One of the three gen. ed requirements

One programming elective – 3 credits

Semester 4

Object Oriented Design  – 3 credits

  • This sure looks good on a resume.
  • Design patterns, MVC architecture, whatever the new buzzwords are.
  • The important part is to discuss whether these ideas are useful, in order to get people in the habit of thinking for themselves whether a given fad in programming is worth it or not.

Data Structures – 3 credits

  • I wish my school offered this because I don’t know anything about it.

Senior project – 3 credits

  • Build something cool with what you’ve learned and show us! No papers, no schedules you have to make up. Just make sure you have something neat to your name by the end of this.

Two programming electives – 6 credits


 

This adds up to 60 credits, which is standard for a 2yr degree.


 

Programming electives

Lisp Programming (doesn’t have to be Common Lisp specifically, could be Scheme or Racket or something)

Java Programming

C# .NET Programming (just because I don’t like it doesn’t mean I wouldn’t offer it)

C++ Programming

Ruby Programming

Javascript Programming (more in-depth than what’s included in the web dev bootcamp)

Explaining What You Do

  • How to talk to customers and your parents about what programming is and what you’re doing without using words like “compiler,” “for-loop,” “caching,” or any weird acronyms.
  • Also equips you to teach others about what you know, which is an important professional skill.

3D Modeling

Computer Animation

Game Programming

Audio Programming for Games (I liked this class)

Mobile App Development

Server-Side Scripting

Client-Side Scripting

Robotics with the Arduino

Databases In Depth

Security and Cryptography in Programming

UI/UX Design

Software Testing

Machine Learning and Artificial Intelligence

 

What do you think? Should I immediately be placed in charge of the school? 😛

Of course, many of the problems that would stem from my school trying to adopt this have to do with the fact that they can’t get teachers. My school requires teachers to have a Master’s degree, and most of the people with that kind of credential are working more interesting jobs for more money, unless they happen to like teaching or just got fired from something else or want to teach as a vanity project.

Alas, the plague of academia.

Still, though: I think my school is way too Microsoft-focused. I know MS pays some of the bills for them, but I don’t think it’s worth it to focus on so many things that may be gone in five years.

Since Apple lost Steve Jobs and subsequently has been kinda struggling for air, Microsoft has lost their main company to copy. They’re trying to copy Google instead and it’s working even worse than when they were copying Apple. Microsoft is dying. Slowly, but notice that they don’t have so much of a monopoly as they used to. Perhaps they’re fated to go the same way as IBM.

I think it’s better to be kind of platform agnostic when it comes to schooling. Especially paid platform agnostic. If I were running the school, the school would be running Linux Mint. (You have to run something. Why pay for Windows if you only need it for a few classes?)

Did I miss anything? Let me know in the comments! Also tell me if you have any requests for upcoming posts. I’m always happy to hear from you.

Advertisements

One thought on “If I ran my community college’s CS department

  1. So when does this University get established? Because I really want a program like that. I am just as insecure in my ability to program as when I began my degree and I only have a year left until graduation. Sure, I have learned a lot and have quite a few neat skills to use, but I haven’t really done anything with all that knowledge. When it comes to applying it and wanting to make something I am just as intimidated as I was when I wrote my first lines of code three years ago. I have such cobflicted feelings about college curriculum and its value to certain job fields over traditional work experience and the learn on the job format.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s