Recently I got a new responsibility at my work place. I am now officially responsible for the training of our apprentice and intern.
In case of the apprentice there is a lot of stuff he has to learn because he has little to no programming experience when he started. This is perfectly fine because he got the job so he can learn.
I came up with a plan, which from my point of view is somewhat unconventional but i hope it'll work out.
In the first few weeks he learned about html/css. Basic stuff because we do a lot of web development and this is a field where he can quickly contribute.
To get him started learning programming i created him a small project. Just a README and some configuration files for the test framework we use. In the README there are some programming challenges. And i hope these challenges are not overkill to begin with. But i do really want to manifest the habit of writing test directly from the start. (I have to add that he had some time to familiarize himself with the syntax of the language we use)
The first one is pretty easy. Run the test suite and fix the failed test. There is a little program that calculates the sum of two numbers and the difference. The subtraction method has just mixed up the parameters in the wrong order. This is just to get to know the basic on how to run the test and how to make 'em green again ;) After that he should add multiply and division methods to the "calculator" and write test cases for that as well.
The next challenge is to write a program that calculates values of the fibonacci sequence. He should use a for loop in the algorithm and write some test cases to verify that the algorithms work. After that he should rewrite the for loop for a while loop and try to not touch the test cases. After that he should rewrite the while loop for a recursive solution. And also trying not to touch the test cases.
The third challenge is the roman literal challenge. Convert a roman number to an integer. And write the test cases as well.
I am planning to add more challenges even some for functional and acceptance testing over time.
What do you think? Is this doable? Do you have some ideas for challenges? What would you change?
That sounds like an awesome way of doing it and incorporating practical things like testing and documentation! Is the apprentice already comfortable with the command-line/running tests or are you planning on covering that first?
That's the thing I've had trouble figuring out: I want to teach important things like version control, testing, etc. as early as possible, but how early is too early? I also don't want to scare the student with all of that stuff before they've gotten comfortable with basic coding concepts and gotten all fired up about it.
Anyways, you should definitely do a follow up and let us know how it goes and what you learn! :)