This question seems to be funny as usually you rather read "How can I learn ABAP?". But how to teach? Should we follow any rules ? Should we keep to some path of teaching, special sequences or guides? Well I don't know the answer to all this questions but my experience in teaching ABAP gives me possibility to share with you what and how to do with your "apprentice".
 
Before I start I'll just mention that persons I've learnt/I'm learning have always at least basic skills in programming but in other languages, therefore I didn't mention here any points about teaching the basic programming stuff here.
 
 
1. Start with basic info about ABAP
 
When you switch to new programming language you firstly check what types are built-in, what is the syntax to create a function or method and this is what you should start with when you teach ABAP. I have created some basic description about types, basic syntax, tables,  etc. for my master’s thesis and give it always to newcomers to read it as a first step. I have there also small description about main development transactions. So if you know that you'll learn more than one person, then it's really useful to have such document. If you don't have it, then create it. It will take a while, but once done it's done. 
 
After such lecture your young Padawan should be able to write "Hello World" programs and should be familiar with really basics of the ABAP.
 
Just as remark, as long as you don't have really trusted and up to date source, don't use ready documents of someone else in here, as this can bring you headache from the beginning of this long way.
 
2. Go with little steps
 
Don't push so hard at the beginning unless you know that your apprentice is an expert (means real expert, like senior developer) in other programming language. The mix of functional stuff and programming can be hard, so share your knowledge wisely - at the beginning pure ABAP in small steps: procedural programming, selection-screens,  screens,  dictionary objects, object oriented programming, alv grid, FM, FG, and so on.  After person is familiar with all of this then you can start to share some info about basic business objects, like materials, boms, etc. When you pass such functional info to a person it's really good to let him/her play with such objects just after the training. This include some small task to do, like selection of some data from DB tables or using of FM to fetch such data.
 
3. Give the strict tasks to your apprentice!
 
This one is really important. Newcomers cannot handle unclear specifications, they cannot work with the end-users directly from the beginning as they don't understand what end-users are doing, and what language do they speak. That's why you should give them strict info what and where to do. With time of course you should allow them to find the solution by them selves, especially if they did similar changes before, but in my opinion during first 3 months it's quite sure you'll give them a really big fish pole (if not the net ).
 
 
4. Leave space for creativity
 
Sounds like completely opposite to the previous point? Your apprentices have learnt to follow your guides but following "manual" step by step will not empower them to try own creativity. Try to gave them a specification from end-user or make your own task to them but without specifying what exactly to do. Ask them to think about possible solution, but don't allow them to code directly. Once they found a solution they might think will be correct, discuss with them about it, tell them advantages and disadvantages of such solution. Ask them to choose if they want to follow they own feeling about solution, if yes allowed them to do it, but.... once they finish, ask them to use also other way if you think that it will be working better. Once they do both ways, ask them to compare both solutions and see if you can convince them that your way is better.
 
In this place don't be ashamed to say that their way is correct or better, as we often build a way of solving the problems in our heads and we repeat it so many times that sometimes we can omit simplest solutions!
 
5. Be a master and a work mate
 
To keep good atmosphere don't stand always as a master or teacher, be a work mate. Laugh, make jokes and help. Tell your stories about how it was when you were learning. It's easier to teach someone who see that you have gone through the same way.
 
 
6. Check every piece of code your apprentice do
 
If you want the to code like you, or how you teach them to do, you must check everything they do for a quite time. As when they will learn something wrong from bad examples found in the web you can react directly and they will not fix the wrong coding in their heads. Also when you repeat and repeat that you should not use ... for example tables with header lines then you'll see that it brings effect very soon. Additionally when you're asking them to correct every piece of code, then you gain some respect, that you know the topic which you're teaching.
 
7. Explain why code which is working must be rewritten
 
Why should I rewrite the code which is working correctly? This is the question you should get use to, and there have to be proper answer for that. You cannot tell "Because I want you to do it", you must explain what are the reasons to it, for example: "use field-symbols whenever it's possible as this is better for performance" or "on development system it's working fast, but let's copy it to quality system and then check with real amount of data". When you clearly explain the reasons it will be easier to understand for them and they will not feel that you do it just because you can.
 
8. Allow copying solutions from web but...
 
Yes, I'm allowing to do copy/paste from the examples found in web, but then I always ask to change naming convention to the one used in previous part of the program and to rebuilt it to the new syntax on 7.40. This way they learn that code they found is not the best quality and they can do some code optimization there. Additionally if you allow them to copy, then you see if they senseless copy everything they found or they really found a good base and they want to make use of it's logic.
 
9. Focus on one development object at once
 
When you teach, don't mix development objects at the beginning. If you teach procedural programming, then don't ask them to use OO ALV grid but REUSE_ALV_GRID_DISPLAY. Once you start with classes, switch to cl_gui_alv_grid. If you teach selection-screens don't mix it with SE51 screens, and so on. Give them time to learn each development object.
 
10.  Extend the task from basic to complex solution
 
This is very nice way of teaching. As an example, you ask firstly to create a program which selects 100 materials from MARA and displays them using CL_GUI_ALV_GRID. Then when it's done ask to change some columns to editable. Then to change some colors for the rows and columns. Then maybe use zebra in layout. Then to make some conditions and use cell styling also. Then go to events handling and use some hotspots, data_changed event and so on, step by step. At the end they should look at their work and be proud of it. And you also should be proud as if they went through all this steps then they know ALV well.
 
11. Give possibility to compare different approaches
 
When there are many ways of doing the same, allow them to try all of they ways. For example when they'll finish with the OO ALV program, ask them to use REUSE_ALV_GRID_DISPLAY or SA:V or both, to achieve the same goal. 
 
12. Allow to solve simple request from end-users
 
After 3-4 months they should really be able to develop in ABAP and although they don't have enough functional knowledge to solve complex requests, they can handle simple one, like: "Add new column", "Change formula for column A" etc. This will make them feel that they are needed and that no longer they take from company but also they give now something back. Additionally they can see how other folks are writing their code, how real programs looks like and what they do. This will gave them overview what they will be doing in nearest future.
 
13. Let him/her speak with end-users about requirements
 
Often, IT guys thinks that they are smarter than end-users, especially young generation thinks that they know everything. Let your apprentices speak to end-users, let them feel that there is a long way before them to achieve the same level of functional knowledge, as they will see that ABAP on his own means nothing when you don't know what for you use it.  
 
14. Explain structure and functional processes of your company
 
Yes, structure and functional processes in your company are really needed. How can developer create a program which creates purchase orders without knowing purchase organization, purchasing group or company code he can use for testing. How he can know what to fill in BAP if he never saw ME21N. Share your knowledge in that matter but do it slow. Too much data will make their brain will overheat and they will not remember anything. The best is to give an overview about process before assigning a task from the same area.
 
 
 
I could mix a bit the sequence but I hope it's clear what I had in my mind. I don't say I always followed this steps, but after time I see that these are the rules which I should follow in teaching ABAP.
 
 

And how do you teach ABAP?