I'm considering teaching a course either at the college or high school level in programming similar to what you do. Do you have any tips on how I can learn more about the opportunities? Should I get a masters if I plan to teach college level courses? How did you reach out to schools about teaching?
I really like the idea of developers from industry teaching computer science courses. Practitioners bring a real-world perspective and coolness to the classroom that is hard for full-time faculty to mimic. The academic rigor also rubs off on practitioners by exploring a subject at a new depth. "You don't know something until you can teach it."
Here's a cleaned up version of the answer I gave my friend:
Should I get a masters if I plan to teach college level courses?
Major universities require that professors have a PhD. Generally their PhD is from a more prestigious university and it is rarely from the same university. However, there are part-time and full-time teaching positions, called lecturers (lecturer has a different meaning in the UK), that do not require a PhD. For example, Penn pretty much always has openings for lecturers.
A research-focused university may prefer lecturers have a PhD, but only require a master's degree. Without a PhD, you may find yourself running into glass ceilings, like not being able to introduce a new required undergraduate course, but if your ideas are good, things can happen one way or another. Many universities, especially those with only undergrad programs and/or where most students go into industry, allow lecturers to have just a bachelor's degree, especially if they have good industry experience.
So, no you don't need a masters degree, but it increases the number of places you can teach at - and helps you build an academic network.
How did you reach out to schools about teaching?
I didn't. I was lucky. I knew a lot of folks at Penn after going there, Joe Kider in particular, and they encouraged me to apply to teach the GPU course.
It's not always that simple, but there's plenty you can do...
Give a talk at a local university
There's two ways to do this.
Reach out to the instructor of a relevant course and offer to give a guest lecture. Pretty much all computer science departments list their current courses. Likewise, faculty have websites with their email addresses. For example, here's Penn's faculty. Write a concise email to the instructor saying where you work, what you'd like to give a talk on, and how it maps to their course. Having slides already made could help, but I've personally never seen it.
Generally, an instructor really likes guest lectures, especially for graduate-level and seminar-style courses. In fact, I spend a good bit of time trying to find guest lectures. Given that I teach a GPU course, I'm thrilled to have folks from GPU vendors, game studios, research labs, etc. come in and talk. Even though I am from industry, guests bring another real-world perspective. In fact, I am willing to cancel one of my lectures for the right guest lecturer. They are one of the highlights of the semester.
Make sure to get your timing right. For example, don't email the instructor with two weeks left in the semester to see if you can come in. It's hard to say when the best time is because preparation varies by instructor. I generally firm up guest lectures at the start of the semester or a month or so before. Just a warning - the first week of classes is generally crazy.
Reach out to a faculty in your area of interest and offer give a talk to the entire department. This is nice because you'll meet more people and sometimes instructors don't want to give up class time. Most departments have a colloquium series where visitors from academia or industry present their work. For example, here's Penn's colloquium. A lot of time this is research-focused, but it doesn't have to be, especially at a smaller university.
When I defended my master's thesis, I invited graphics faculty from the local universities. None of them actually came, but it did result in me being invited to speak at the Villanova colloquium. My work wasn't full research. It had a minor contribution or two, but it was really more like "here's a survey of a field and a cool project with a careful write-up." I imagine most practitioners could prepare a talk like this.
- You are passionate about a topic that you want to share with others. If this isn't the case, teaching isn't for you.
- Giving a talk isn't the same as teaching, but it is good practice and relevant experience.
- It is good for networking even if there aren't any current openings at that particular university.
Give a talk at a conference
Giving a talk at a conference can have a lot of the same benefits of giving a talk at a university. It's good for sharing knowledge, building experience, and networking, especially if a lot of academics attend the conference.
Depending on the conference, getting a talk accepted can be hard. I've been rejected a couple of times. No worries, everyone gets rejected at least sometimes.
Big conferences like SIGGRAPH are competitive, but it's possible to join an established course or partner to create a new course or panel, talk at a Birds of a Feather (BOF), or even hold your own BOF. Something like a BOF talk won't hold as much credibility in the eyes of an academic but it's still fun, and good experience and networking.
Big conferences aren't the only option. Your company's user's conference is an easy option. So are local meetups. Smaller and industry-focused conferences are also a good option.
You can also give a talk at company to build experience. Most places have brownbags and invited speakers. It will help to know someone there who can host you. For example, I gave a talk on our WebGL engine, Cesium, at MIT Lincoln Lab through a friend I previously worked with at IBM.
Give a talk at a local high school
Most high schools have computer science and even AP computer science classes now. The teachers love having someone from industry talk to their students. It helps them bridge the gap between what students see in the classroom and what students can do in the real-world.
I've been back to my high school a few times. One time I wrote a small Java framework to play tic-tac-toe. As a lesson in polymorphism, students could implement a class to write their AI, and then their AIs could play each other. I even had some of my friends implement AIs so the students could play the "pros."
Teachers would also be thrilled for you to come in and talk about how you got into development, what you do everyday, and what advice you have for students. A talk like this is pretty quick to prepare too.
Although I don't have any experience with them other than serving as a reviewer, teaching an online course like those offered by Udacity, is another option. The student interaction is quite different, but it could still be rewarding and you could reach a lot of people.