Randy Guthrie – Microsoft Technology Evangelist
I recently had a conversation with a student at a large public university about the introductory CIS class she was taking. This student had attended a mobile app workshop and had a good enough experience that she wanted to explore the CIS major, and so took a leap of faith and signed up for the introductory course. The course featured mostly software design theory, of which diagramming played a major part. In fact the teacher even joked that the students probably weren’t enjoying the assignments, and just kept piling on those type of assignments like it was all fun. Needless to say, my friend quickly lost her enthusiasm for the major and decided to stick with Finance. What a loss for the department!
After that conversation, I ran into the department’s advisor and shared the short version of my conversation. I shared with her my vision of what an introductory course should contain, and I’d like to share a few of my ideas and get some of yours. Keep in mind, I taught a similar course back in the day when I was a college professor and so I am not at all guiltless. But my 8+ years at Microsoft has opened my eyes to what really gets students excited, and so this list is based not on my academic experience, but my more recent evangelism experience.
1. The first course should be designed from ground up to attract and retain students to the major. If there are any notions of making this some kind of “filter” class, you should encourage a different point of view. This class should be all about fun, cool, and very hands-on, both hardware and software. It should look more like a tech summer school workshop for high school kids rather than a theoretical college lecture course.
2. Students should be “making stuff” from day one. Lead with “making”, then explain the theory AFTER they make it so the theory is embedded in rich contexts. Make a game. Make mobile apps. Hack a server. Program Arduino or Galileo boards and do fun things like making sounds, lighting up lights, responding to gestures, programming Kinect, interpreting speech. Blow stuff up; make fires. This should be the most fun class you offer and if you do it right you’ll “sell-out” the class in minutes every semester when registration opens. It should be a survey of every cool thing your department teaches and lots of stuff you don’t teach but that students may encounter in their careers (if you do a good job at least). If you don’t teach cool stuff, then start here and work your way up.
3. Deemphasize legacy programming concepts such as diagramming. I spoke with a Program Manager at 343 Studios working on Halo 5, and there are NO formal or required data-flow diagrams, NO UML, NO E-R diagrams. Other tech guys and gals across our team (about 50) that I have reached out to concur: we use boxes and arrows on white boards sometimes to illustrate and discuss high-level concepts, but special notation, different shaped boxes, etc. are from the old IBM flow-charting days and at least at Microsoft, we don’t use them very much, if at all, and I am willing to bet that few students are being asked to demonstrate those skills in interviews. Even if some companies still use it, is teaching those concepts in your introductory course worth the loss of student majors when you can always cover some of it in later courses?
4. Have faculty who make real stuff today teach the course. This isn’t about fairness and equity; if a professor can’t rock this class then they shouldn’t be teaching it regardless of their academic qualifications, seniority, or even desire.
5. Bring in guest speakers from industry every other week to talk careers (for 15-20 minutes at the end and stay for Q&A after class). Use your alumni network for speakers.
6. Have faculty from through-out the department “sponsor” (teach) projects in the class so students get to know a lot of faculty. Rotate participation every semester. Faculty can submit proposals and your core course “professors” can pick. Yes I know, that’s not the way academia traditionally works, but you have a great opportunity to so something really impactful and transformative.
These are just a few ideas to get your creative juices flowing. And oh by the way, you are more likely to attract and retain a far more diverse group of students using this approach, which is good for your school, and good for the software industry as a whole.
Got any great ideas in addition to these? Please share!