Fog Creek Software
Discussion Board




Can you be a good C++ or Java teacher if you ...

have never developed & shipped production code for solving real world problems ?

PhiloZoPhials
Monday, June 28, 2004

No.

son of parnas
Monday, June 28, 2004

I disagree.

muppet from madebymonkeys.net
Monday, June 28, 2004

I don't see how anyone could effectively teach something they've never done themselves.  Even if they knew a tremendous amount about the subjects, their pupils' respect would be shaky at best.  Then again, just because you are an expert at actually doing it doesn't make you a good teacher either.  Michelangelo said "the sculpture is in the marble, I just set it free".  That's not the kind of thing you can teach very easily.

Devin
Monday, June 28, 2004

The problem is not teaching the syntax of the language.  It's teaching how to think like a programmer.  You can learn the syntax of most human languages easily and still have no idea how to put together 2 sentences that make sense to a native speaker...  The same applies to computers...except they're more anal than people ;-)

GiorgioG
Monday, June 28, 2004

Jeff Van Gundy has been a successful basketball coach; I've found no evidence of any sort of playing career in his past. Bobby Knight was a mediocre basketball player. Despite his other failings, he can flat out teach the game of basketball. Do you think Bum Phillips could play football?

All right, so these are sports examples, but the point is: you can teach things that frankly you don't know how to do. Doing and teaching are distinct skills, and rare are the people that have both.

Rob Warner
Monday, June 28, 2004

Those who can, do.  Those who can't teach.

JBreffni
Monday, June 28, 2004

By "shipped production code for solving real world problems," I assume you mean producing something which other people find usable for their tasks.

I would currently guess that you need that experience, because you don't use C++/Java outside that political realm. Otherwise you'd teach a more appropriate language like Ruby or Python.

For small Java projects, it's too easy to write code in notepad. IDEAlly people should use an ide like IntellJ's, and I think people don't search for such things until they've needed to desire code flexibility because of deadlines+requirement changes.

Tayssir John Gabbour
Monday, June 28, 2004

> Those who can, do.  Those who can't teach.

What if you can do and like to teach?

son of parnas
Monday, June 28, 2004

Hell, he could be the best ever.  Most of those vaunted Comp sci guru's have never shipped an app used by anyone, EVER

Thanks Microsoft
Monday, June 28, 2004

> What if you can do and like to teach?

You become a consultant ;-)

GiorgioG
Monday, June 28, 2004

Having both taught and shipped production code, and enjoyed both activities, I think that a person would be hard put to teach well if they don't have some field experience.  There's a gigantic hurdle to get over between learning to program in university classes (or corparate training) and actually knowing how to get things done.  It's in producing the working program that a real programmer learns their trade.

Clay Dowling
Monday, June 28, 2004

I, on occasion, teach people how to use our software. Since I've never used it in production, does that make we not qualified to teach it?

MilesArcher
Monday, June 28, 2004

I'm going to say "probably not", and argue that the sports example is not very good.

When you coach a sports team, your goal is to win.  When you play on a sports team, your goal is to win -- and/or look good on the field, ego notwithstanding.  So coaches and players have pretty much the same outlook.  The coach is telling you what to do to win.

When you program for a living, your goal is to ship a program.  When you teach programming (in my experience at 4 years of college -- though I admit it could be different, hence "probably"), teachers rarely spend any time teaching about shipping code.  "Here's some programming concepts (objects, threads, blah blah blah), here's kind of how the syntax works, now go build me a compiler by Friday."

All of the most important things for shipping code are things that they didn't teach me in the classroom; in fact, most of them are the exact opposite of what I was taught.  When I got out of college, I spent time making everything as perfect as the diagrams on the board, which was a serious detriment to shipping.  I was trained to write perfect code; I had to retrain myself to write good code that would be finished on-time.

analogizer
Monday, June 28, 2004

On rereading my post, I guess you could make the point my teachers tended to adopt the "teach him to swim by throwing him in the deep end" strategy, so they did teach me to ship code, indirectly.

I could almost believe that, except that they didn't teach anything else that way, nor did they offer any help in that department.  I don't think it was a conscious decision on their part.  Also, if you liked compilers enough, you could take (gasp) "advanced compilers", and likewise for most other areas of CS; there were no courses focused on software engineering or refactoring or debugging or shipping code or anything vaguely like that.

analogizer
Monday, June 28, 2004

>there were no courses focused
>on software engineering or
>refactoring or debugging or
>shipping code or anything
>vaguely like that.

ahh .. my friend.  CS != SE.

CS is like Math "Hey, look at this elegant sort function!"

Physics is applied math "We can use math to prove that this roller-coaster is safe"

It's possible to earn a math degree without a physics course.  It's possible to earn a CS degree without a Software Engineering Course.

Oh, and Physics is like, a couplea thousand years more mature than SE. Granted, the dark ages stunk, but that renessaince thing was pretty cool.

SE is where CS meets Information Systems.  It's the rubber meeting the road.  It's so immature that it might better be labelled "software craftmanship."

An no, aside from the Florida Insitute of Technology, you don't see it taught much ...

Matt H.
Monday, June 28, 2004

Hmmm, I think that's the kind of things (i.e. debugging, getting things done) you're supposed to learn on the way. I'm studying for a civil engineering-degree right now, in Sweden, and our courses (only programming ones, not maths, physics and the likes) are project-based, i.e. you get in a group, you get a design, bounce that around, then start coding on the course your doing and deliever before deadline. It gives you some experience, atleast.

Ofcourse we have a few pure CS courses too, like algorithms, functional programming w/ lisp etc and I find that just as interesting. They nurture to my math side.

To answer the OP, I think you can. But real world experience of any kind helps... (not an elaborate answer, but I think you can suite it in above)

M
Monday, June 28, 2004

Well, Bruce Eckel's books and classes get rave reviews, so he must be doing something right. I have no idea what production software he has actually built.

Data Miner
Monday, June 28, 2004

>  Most of those vaunted Comp sci guru's have never shipped an app used by anyone, EVER

That's exactly why Donald Knuth is one of my hero's.  He doesn't just talk, he does.

christopher baus.net
Monday, June 28, 2004

I once tried to clean up code written by a developer (fired by the same employer) whose claim to fame was having taught C++ at the junior college (two year tech school) level.

For starters, the guy didn't know what to put in a constructor. You found series of statements like this:

...
sck1 = new MySocket;
sck->initial_state_var1 = (constant);
sck->initial_state_var2 = (anotherconstant);
sck->m_socket = (something);
sck->port = (somethingelse);
sck->id = (IreallythinkIneedtovomitrighthere);
...

ALL over the place. In not one place did this guy ever put executable code in his constructors. He almost seemed to have a personal religion against using C++ language features as they should be used.

The rest of this guys' code was downhill from this, including his non thread safe usage of STL queues between threads. He got the code to run w/o crashing by inserting ''pause()" calls to pace the code...

But someone paid this jive turkey money to teach programming students.

Bored Bystander
Monday, June 28, 2004

"It's possible to earn a math degree without a physics course"

You're not serious? Not even basic v=ma stuff?

Philo <- FIT alum

Philo
Monday, June 28, 2004

Someday I'm going to figure out where the hell "v=ma" came from...

Philo

Philo
Monday, June 28, 2004

That "m" looks like an integral sign to me.

Kalani
Monday, June 28, 2004

He's serious. Not even v=ma, or whatever you wrote. A significant university maths course have no required applied maths component.

Oh, and 'Those who can, teach'.

Mr Jack
Tuesday, June 29, 2004

Actually... don't you mean F = ma?

Mr Jack
Tuesday, June 29, 2004

I thought that both v, and F, =ma.

Polkadot-phil
Wednesday, June 30, 2004

Ya Philo, yours should be v=ta.

Steamrolla
Wednesday, June 30, 2004

*  Recent Topics

*  Fog Creek Home