Notes on Teaching Introduction to .NET
Today I've had an interesting experience of teaching a one-day session titled "Introduction to .NET" (roughly based on this Sela course). I wouldn't find it post-worthy whatsoever (except for maybe the fact that class started at the dumbfounding time of 7:45AM) if not for the audience.
The group consisted of about 15 ultra-Orthodox men (Haredim; Wikipedia: Hebrew, English) who are going through several months of training to eventually practice software testing. It is fairly unique in the way people without any previous experience with computers are trained to be software developers and software testers.
When working with this kind of group, you cannot assume any previous knowledge most computer-literate people take for granted. For example, "Open the text file located at C:\Temp" is not accurate enough an instruction. "Do File->New->Project" is worthless if navigating through menus is not muscle memory for you. Telling the class to copy some files around has the potential to become an exercise in running around the class in circles, copying the files on every individual's computer and repairing the damage already caused. Explaining how a property is different from a field, how code reuse is good but copy-paste is bad, how web services and data exchange are not the same as .NET compilation to IL - things trivial to a "normal" developer-in-training audience cease to be trivial any longer.
And I am very glad that it happened today. It's actually enlightening to descend from the ivory tower to reach into the oh-so-large group (say, 80%) of programmers who really need your training, who really learn from what you have to say, and who do not approach you with inherent snobbism and suspicion whenever you contradict one of the truths they might have read in a blog post the night before. (Even in this group, when I was talking about .NET compilation to IL, one of the students said that he remembers a lecturer telling him that VB.NET is inherently slower; thus, my saying that VB.NET and C# compile to the same IL made his question the correctness of that statement.)
In this respect, it is far better to teach people who are not yet full of prejudice, reflexes and half-truths on the material you're trying to convey. However, while sometimes more fun, it is also one hell of a responsibility. Consider what happens two years from now if I didn't explain correctly what a function call is. What a .NET language is. What the JIT is and why is it important. And we certainly don't want to produce developers who have been taught partially-correct, half-baked truisms about the technology in question; there are enough of these today, as we speak.
And so I inevitably must conclude that trainers who are teaching classes for this kind of audience must be far better trained from all perspectives - the professional, the social and the training perspectives - than "normal" trainers teaching "normal" classes. Bizarre as it may sound, this is the only way of giving the software development industry any kind of hope.
(By the way, if you're curious what kind of exercises you could possibly give people after less than a day of .NET training, without even covering any single language properly, here's what I did today:
- WinForm application with two text boxes (for numeric input) and four buttons representing arithmetic operations. When a button is pressed, the result of the operation is displayed in a message box. (This gives faster students the chance to practice control layout, text box masking and other "advanced" things.)
- WinForm application with a list box, a property grid and two buttons (Create and Update). Whenever you click the Create button, a new object appears in the property grid. When you click the Update button, that object is added to the list box. When you change the selection in the list box, the selected item appears in the property grid. (All in all, about 5 lines of code they actually have to write, but a cool effect nonetheless.)
And yes, they struggled hard with these exercises; and yes, they have thoroughly enjoyed it. After being taught C for a couple of sessions and staring at a black console window, the opportunity to actually play with shapes and colors in a GUI environment is highly reassuring.)