This one is for my students, but generally the answers apply to anyone else who is studying - so I decided to share this.
Here are the answers to some questions I got when collecting feedback about my classes.
Do we really need to write the reports?
Yes, writing reports is an important part of the process. At first sight it may appear a boring and useless activity - because it usually is. Why do I need need to write about what I've done, if I could use that time to do something else (ex: improve my project, watch a movie)?
Writing reports is a long term investment - it pays off, but not immediately:
- After a while you will forget what you did, and some parts of the code may not be clear to you. At one point you felt you could write a clever statement or formulae - a while later you're puzzled trying to understand the rationale behind some of your decisions. Why did I name the variable this way? Why did I initialize this one with a 1 rather than with a 0?
- This prepares you for the real real world, where successful companies follow the "if it is not documented, it isn't done" principle (some companies don't employ such a policy, their failure is a matter of time; their non-failure is a matter of luck)
- Writing reports helps you sharpen your language skills and learn how to easily get the message across (ex: when you explain something to a colleague). This also trains you to express ideas using as little text/illustrations as possible (lazyness drives progress)
- Programming is a social activity. If you think programming is about telling a computer what to do, you are not 100% correct. Programming is about interacting with team-members, users of your software, prospective customers; i.e. it is about telling other people what you want to do (the first person you need to explain it to is yourself). Everyone needs to be synchronized. Only after you've "talked to the people" you should start "talking to the computer". Certainly, you can do it the other way around too - one week of hard work can save you one day of planning ;-)
Naturally, there are some short term benefits too:
- You can double-check your code and make sure you understand every bit of it;
- As you commit your thoughts to paper, you may notice some defects, you can devise better ways of explaining a concept - this will make you more prepared for the Q&A session with the person who has to evaluate the project.
This is a big deal - I've seen quite a few people who brought programs that looked good, but who had no clue how they worked, or who had difficulties explaining how some parts interacted. What can a teacher think in such cases?
- The student lacks social skills or they have problems with speaking in public - if that's it, you should've written your answers (no need to talk, no one is watching, there is no teacher, you get to choose your own environment [music, place...]), so that the teacher can see that you understand the material;
- The code was copied from a book or from the Internet, borrowed from a colleague, or it is just blind luck that some instructions actually work as expected (at least on the surface) - great! This is exactly the type of person I would recommend to an employer; or about which I could proudly say "I taught them", or whom I would trust the design of a life-support system for space explorers ;-)
Reports may not be needed for small programs, but a serious large-scale project can't live without documentation (unless your objective is to fail and become a study case for a book on "bad software"). If you agree with this, then you will most likely agree that training with "simple projects" is better than training à la "we're going to teach you how to fly by pushing you off a cliff".
There are several milestones in the life of a programmer, among them:
- Haha! I found a bug in the library (insert name of a well-known module developed by a group of veterans who were there when punch-cards were high-tech)
- What a stupid library, it has NO documentation at all!
Both examples are derived from the "someone else's fault" attitude. It is a standard feature in any human, but it doesn't mean you can't train yourself to change that. The sooner you do so, the better. The better you are at it, the greater your chance is to be chosen when there are N other candidates applying for the same job.
Is it really necessary to give that much material orally?
Yes, I think that's the best approach (or at least the best approach I can apply).
I understand that some people are not used to processing audio input, that they prefer to study on their own or to look at diagrams. For that reason I always write on the blackboard, to make sure that I provide both: audio and video streams, and that they are synchronized. This allows me to reach out for the "visuals" and the "audios" at the same time.
A very very detailed review of the method is available in my "Write right rite" class (English). For those who prefer to read, there is a text version (Romanian) of it (it is a work in progress, the link is not guaranteed to be "alive").
If I provide just "100% pure information" (no sugar-coating, no intro, no outro, no "war stories", no connections to other fields) - it is extremely difficult (or even impossible) to understand it.
My #1 objective in teaching is to help people understand, not memorize. Rote learning is bad for a brain (unless it is the only thing that brain is good at :-).
With a high verbosity, one has the chance to see the big picture and understand how things work. Otherwise, the educational process would boil down to a teacher entering the class and writing "E=mc^2" on the blackboard - that's it. Possible scenarios:
- No one has a clue what it means, whether it is correct or whether it can be applied in practice. People ask themselves "how?", "why?" but no one dares to ask the teacher;
- At the exam students draw "E=mc^2" on the paper, in neat handwriting, everybody is happy! ;-)
- People do ask the questions, and the teacher begins to explain things, gradually increasing the complexity, until the big picture becomes clear (to those who paid attention).
In other words, what we need is this, rather than the "100% pure" E=mc^2.
Why don't you provide more material that is unique and cannot be easily found on Wikipedia, or other sources on the web?
There are several factors involved in this:
- Wikipedia is damn good, there are articles about anything, even the most obscure parts of science. It is difficult to compete against such a comprehensive repository of knowledge. Some Wiki articles are very detailed and they provide references to other information - that is why Wikipedia is a great starting point for a research.
- One needs to start with the basics. Without a solid understanding of the foundation of the field, there is no point in moving on to more complex matters - people will simply fail. This would be similar to sending "fresh" soldiers to a battle (almost certain death for the untrained soldier, guaranteed defeat for the army/country), or to teaching people how to fly by throwing them off a cliff. Both methods are very effective ;-)
- Down-to-Earth objectives - my mission is a bit more simple than you think it is (but not less important). What I want is to make everyone aware of what needs to be known and train them to find and understand that information themselves. This article provides a more verbose description of the approach.
- Lazyness - seriously, who reads the bibliography? Has anyone watched a single episode of Futurama or Monty Python's Flying Circus since the recommendations were made? ;-)
Besides that, the course includes a number of practical assignments, which can get high-tech at times. How high-tech they get is a function of how far you want to go.
All you have to do is ask questions. Some people do, and that ends up in quite engaging discussion points (as separate threads, outside the group's mailing list or the classes). The reason I keep that "off the record" is because if I make it a part of the class, this would be too much for the people who are not dedicated to the field, resulting in an "oh.. this class is so difficult" attitude, which can seriously dampen one's spirit.
Feel free to ask other questions, anonymous ones too. In the nearest future the course will cover the question of anonymity on the Internet ;-)