tags:

views:

635

answers:

21

Someday, I think I'd like to be a teacher or professor of Computer Science. I'm not sure what level, I'm guessing that will more depend on how far I go before actually switching to teaching.

Currently, I only have a few years experience programming professionally, mainly with C#, PHP, HTML, CSS, and JavaScript. I have touched C++ and Java before though. I've mainly use Windows XP for work, but I have a Mac at home and I've played around with Linux before.

I read a lot of programming books, and I'm also starting to read books on the human side of programming.

What other things can I do to make sure that I'm fully prepared to be a teacher or professor of Computer Science?

A: 

Read, code, debug, ask, repeat

JaredPar
+5  A: 

Always have a practical motivation for everything that you are trying to teach. Answer "why do we have to know this?" before the question gets asked.

Bob Cross
I like that, and I think my classes would have been a lot more productive if I knew of a real world application of what I was learning.
SkippyFire
It gets awfully tenuous, though, in some cases. There is no real world application for a Turing machine that I know of, but you do have to learn them well.
David Thornley
@david... if you're taking (post-intro) classes in ai/machine learning etc. there can be.
SnOrfus
What if the real answer is "you don't have to know this, it will never be useful, but you have to learn it because the dean has antiquated views of what classes are important". How do you truthfully answer without discouraging the students.
Kibbee
@Kibbee - aside from fighting the power and teaching something else instead and lying to the dean... nothing. You'd be boned.
SnOrfus
@Kibbee: you're going to have to come up with a concrete example of something that isn't useful at all.
Bob Cross
@David: TMs are a perfect example of that NEED motivating. From that point, there are plenty of important concepts - e.g., incompleteness. If you want, I'll add TMs to my answer with example motivation.
Bob Cross
A: 

I was thinking become as diversified as possible, but also try and dig deep in at least 1 or 2 languages. I wont be much help teaching C++ if I only know C# right? But I also wont be much help if I ONLY know C++.

SkippyFire
You should get to the point where it's not about knowing languages. It's about classifying problems and bringing techniques to bear upon them.
Mike Dunlavey
+6  A: 

Get your PhD in computer science. All my cs professors had at least a masters, and most had a PhD. Academia loves degrees.

Byron Whitlock
I think its basically mandatory. Not most, but all in my experience.
Greg Dean
Kind of sad but true. I think that in many cases, that's exactly what's holding back a lot of people who would be great professors from becoming professors.
Kibbee
+13  A: 

I had many professors who were strong in the theoretical side (complex syntax trees, computational theory, etc.) but who were weak in the practical side.

So, in that way, I think a really great professor would be one who has a good balance of the theoretical and the practical. You don't want to learn programming from someone who has only coded small trivial things.

I think maybe a great professor would be one who started out as a professional software engineer and was successful and worked in the field for several years. Then, after he has gotten sufficient real-world experience he goes back and gets his Ph.D. and all the deep theoretical knowledge that goes along with it.

I know many people are going to say Computer Science != Programming. However, we don't learn our Computer Science in a vacuum and we often use programming to illustrate the CS theory we are learning. In this case I would of found it useful to have had professors who had programmed outside of academia and could bring that real-world knowledge into our lectures as well.

Simucal
My old CS prof at Wisconsin Lutheran College was like this.
sheepsimulator
+1  A: 

Have good real life examples that really means something. Motivate and teach by allowing students to follow your classes live with laptops and programming while you tutor. Make sure you follow good coding practice while showing examples and explain why you do it the way your doing it.

ChrisAD
+1  A: 

In my experience teaching computer science and programming actually have very little in common. Yes, you'll learn some rudimentary programming in a computer science curricula, but really only enough so that you can do your homework assignments. I think it's rare to have a computer science program that goes into depth on code craftsmanship and the engineering disciplines associated with developing software. The exceptions may be in places that actually do research in the software engineering disciplines.

If you really want to be a professor, I would focus on learning how to do research. Learn as much math as you can stand, including statistics and logic. Dig into algorithms and data structures. No matter what area you end up focusing on you'll need to conversant in all of these areas. Be aware that in most Universities, it's mostly about research and not about teaching, per se.

tvanfosson
Should the computer science curriculum have more programming then? Or should there be another degree for programming altogether? Or should it be a trade school thing, where you purely learn how to program?
SkippyFire
Computer science should be scientific. Anything primarily directed towards getting people into the business programming world should have another name (MIS at my university).
David Thornley
My feeling is that more engineering schools should have a software engineering major. I think this is a more natural place for it. At my school they do offer a software engineering track in CS, but it's part of the graduate program.
tvanfosson
+10  A: 

My best professor was one with years of real experience, not just academic experience. He gave us the most interesting problems to solve. Get that experience.

Be familiar with many languages. Not so you can teach the language, but so that you can better teach the basic concepts of programming.

Disconnect what you teach from the language used in the course. The language is simply the vehicle. Help your students understand basic problem solving ( one reason I think comp-sci students have to take a lot of math. )

Stay in touch with, and like the age group of people you plan to teach. Can't stand teenagers? Don't plan on teaching middle or high school.

Learn how to communicate. If you are a genius, but you can't communicate what you know to others, it won't do a lot of good.

digitaljoel
I've wanted to teach at the college/university level for a long time, but here I am, 10 years out of school and still just working, so don't stay out of academia too long. It's hard to get excited about 4 more years of school with a family to support.
digitaljoel
Indeed: look at this example of incapacity to communicate: http://en.wikipedia.org/wiki/Henry_Cavendish#Personal_life
Adriano Varoli Piazza
+1  A: 

I think along those lines sometimes too. My thoughts -

Prereqs - You have the required education background (atleast a Masters, more suitably MS or PhD). As I see it, academics is a near impossible field to enter w/o the paperwork :).

Pros -
1. Job satisfaction.
2. Perks (including respect) better than other jobs.
3. Get in the inner circle of cutting-edge research work, either in theoretical studies or practical applications of CS.
4. Get invited to give talks / presentations.

Cons -
1. Does not pay as much as professional programming.
2. Teaching can get repetitive. You students would move on to more exciting courses/work while you teach the same thing year after year.
3. You miss the excitement of coding for living, the aroma of coffee on your table while working late nights, sharing ideas with colleagues about coding and design.

Mohit Chakraborty
This is a nice "real-world" look at the situation! Nice!
SkippyFire
Teaching isn't the killer; research is the killer. If you thrive on it, you're in good shape. If not, do NOT accept a position at a major university.
David Thornley
+2  A: 

Work in the industry long enough to earn the feeling that you have something to share to the next generation of software developers. When you become a mentor to your peers in your field, you're ready.

Chris Holmes
+1  A: 

If you're worrying about what language to learn, then you're not really worried about teaching computer science; programming maybe, but not computer science.

Computer Science is all about the theory, not so much about specific languages, and the fastest way of learning theory is to get some Computer Science schooling (of it you're that type... pick up a book and dive deep).

Obviously if you plan on actually teaching Computer Science at a University you'll need to get your PHD, but I'm guessing that's not what you meant.

Allain Lalonde
I guess teaching at the high school level vs. the college level are greatly different things. And I guess teaching programming vs. teaching computer science are greatly different things. I didn't specify either, so thanks for bringing this up. I guess if I want to teach CS, I need to read a ton!
SkippyFire
A: 

There is more to being a Computer Science professor than just being a good programmer. In fact, the professors I had and know are awful programmers, but they are very well-rounded. They know the fundamentals of programing, software engineering, algorithms, math and stats, and more.

+1  A: 

Being a great teacher and being a great professor are largely antithetical goals.

Great teacher: introduces newbies to programming. Mentors students. Has experience with the practical seasoned by a deep grasp of the theoretical.

Great professor: spends all time researching, publishing papers, and chasing grants. Brings lots of money to the department. Publishes influential papers in well-known academic journals. May take on grad students to do grunt work. Specializes narrowly.

These archetypes can overlap in one person, and some people consciously try to balance the two sides. Very, very occasionally, there a person who is both. Those people usually win the Turing Award.

Sarah Mei
This is a very good point, and very true. I assumed that the OP meant the former, but maybe I was wrong.
SnOrfus
Yeah I was thinking primarily of the former, but its good to hear all the posts about the latter. Thanks!
SkippyFire
+2  A: 

I'm an instructor of Computer Science (and a professor of English), and in my experience it's very helpful to students to be able to have CS metaphors drawn from the "real world," as opposed to simply showing how things work in the lab and drawing diagrams on a whiteboard, and to use more "common," everyday language - at first - to explain CS concepts.

For example, when I taught the basics of writing an algorithm, I had students start with a flow chart of the sequence of decisions it takes to change a flat tire or bake cookies. Now those sound like very simplistic excerices, and they are, but the important lessons are there.

Simply getting the students to clearly write out what it takes to change a tire illuminated the complexity of the task, and it gave them a good exercise in both the complex nature of what at first seems to be a simple task and the difficulty of trying to only use binary decisions (yes and no) to accomplish a complex task.

Both of those assignments - change a tire and bake cookies - makes the students think in terms of counting loops (not a "standard" CS term, of course) for cups of flour and sugar, how to turn te oven on and set it to the correct temperatur, and how to account for working your way around the car changing the flat tire and not a "good" tire.

So I think it's a good idea to take lessons from the real world to illuminate computer science. (And in return, they will learn how to apply CS ideas to the real world, and maybe we'll have fewer working coders living under their desks and making questionable decisons).

+1  A: 

Especially if you intend to teach at a more advanced level (college/university, maybe even high school in some cases), be prepared to learn from your students. CS/programming is one of those fields where kids or amateurs can contribute at almost the same level as experienced professionals, so expect that you're going to be teaching people who have more expertise than you do in certain areas, and try to make use of their knowledge to enhance the experience for you and all your other students. In my experience, a good CS class can sometimes be more like a conference than a lecture.

Conversely, if you're teaching at a more basic level (introductory college course, high school or middle school... or younger, who knows ;-p), be explicit and be patient. Diagrams and detailed explanations help a lot, especially with things like pointers and stack layout which can be difficult to understand. And always welcome questions, answer them as they come, because people can easily fail to understand a lot of advanced material because they're missing one little piece of basic information.

I had two fantastic CS professors in college (as well as a few lousy ones) and those two paragraphs are what I would take from their courses...

David Zaslavsky
+1  A: 

I think the 'greatness' that gets derived from your practical ability will be the respect that your students will have for you (and thus the attention that they will give you). In university I had no respect for any of my profs because, as smart as they were, they were functionally useless. Alternatively, when I was in college (in Canada, colleges are considered more 'vocational' schools) many, if not all, of my professors had real experience and could name software that they've contributed to. - This was supposed to be a comment on Simulcal's post but...

I would like add that the single best professor I ever had did 1 thing that set him apart form all of the others: He let students take the content of the course and apply it to something that they were interested in. Once you're beyond teaching things like syntax, let your students pick the language of their choice and use the technique/algorithm/what have you in a situation that they can understand. You may just find that you get more work, and more effort from them this way. For instance, I can still remember that instead of just making 'a multi-threaded program' I was able and allowed to develop a small app that performed a multi-threaded gaussian blur on an image in real-time (however slow it may have been :) )

All of the students in the classes that really enjoyed programming got to go hog wild making all kinds of interesting and creative things that they never forgot about - and learned the material through and through.

SnOrfus
I definitely agree. I took a database course with this guy: http://web.cs.wpi.edu/~mmani/ And it was the best CS course I've ever taken. At the end of the course, we wrote our own apps and the only requirement was it used a database to run different types of queries to demonstrate what we learned
SkippyFire
+1  A: 

The best teacher I ever had was a compilers guy, a great hacker (in the more traditional and positive sense) with a sound grasp of the theory. I worked my tail off in the compilers course and learned a whole lot.

The university let him go because of his inadequate number of publications, of course.

David Thornley
Very much along the lines of my experience, David.
Mike Dunlavey
+1  A: 

When you become that teacher, please teach source control as a part of your curriculum.

As for getting there, I'd say ask as many questions as you can and take as many notes as you can. If you can break theory and best practices down to practical and applicable examples, you'll come to understand it better and you'll give students something concrete that they can wrap their minds around, which will make learning easier. Keep a running record of those examples.

If you can show passion for the subject and compassion for the students, you'll also be one step closer to being that teacher that everyone remembers.

VirtuosiMedia
+3  A: 

I'm surprised, everyone is talking about practical programming experience, which is all well and good, a bit overrated when you are discussing raw theory but the most important thing you can do to be great is know how to talk about your subject matter.

I mean that is what a professor does, he professes. Being able to transfer your knowledge to someone else effectively is one of the most valuable skills you can have, not just as professor, but as a human being.

I'm drawing a blank on who said it, might have been Einstein, but "unless you can explain it to a six year old, you don't really understand what you are talking about".

James McMahon
I think, generally, people find it easier to learn when they have examples that they can relate to. But I understand that some things can't easily be explained with raw examples, if they have them.
SkippyFire
+3  A: 

Great question, and some great answers.

I was a CS professor at Boston College 80-84. I didn't stay with it because I never really got the hang of publish-or-perish, plus I had to consult to supplement income, and was raising a family. Few of the professors who were successful at publishing had these extra pressures.

And I don't regret it one bit. The experience of learning and communicating new things, and watching students grow from eager kids to competent professionals is very satisfying.

That said, I think what we call CS or SE has a lot of problems, and IMHO those problems originate in the classroom. CS is very unlike other kinds of science, and SE is very unlike other kinds of engineering, and this is not good. Other kinds of science and engineering have labs, experiments, mathematical models, getting one's hands dirty, seeing where the rubber meets the road, encouraging healthy skepticism, and especially, encouraging invention and unconventional thinking.

In CS and SE we have gurus, bandwagons, doing things "the right way", argument-by-popularity, and argument-by-prestige. You may find this strange if you've ever blown a diode or savored the sound of a wire-wrap gun, or solved a differential equation and seen it work on an oscilloscope.

By all means, strive for it, get good experience, and bring that to your students. You will be doing a great service.

Mike Dunlavey
A: 

If you want to get your feet wet and see if you like teaching (It isn't for everyone), then look at some of your local technical schools. Usually you can teach there without a PhD. Or even a Masters. Local Community colleges are a good place to start as well, they hire a lot of adjunct faculty who only teach one or two evening classes.

If you want to teach at the college level, you will need PhD and you will need to focus more on research than teaching if you want to remain employed.

At the lower levels you get to teach more but the pay can be peanuts.

HLGEM