Success in the software field is not about rote memorization, nor is it about merely aping existing code. Excellent developers must be able to think critically -- to understand their problem, to consider in what ways that problem can be solved, and to select a solution that is appropriate.
As a tutor, my approach is to ensure that my student learns how to work with an abstract problem, formulate an abstract solution, and apply that solution through the language they are being taught in. Shared understanding between myself and my student is critical, and I tailor explanations based on how my student works best: metaphors, visual sketches, physical/spacial interaction, or whatever else I can find to make the topics "click." I understand that the way computers "think" is very different from the way that people think, and bridging that gap is not only useful for completing assignments with greater ease, but the first step towards building a truly portable problem-solving skillset.
Coding assignments done during tutoring are pair-programmed -- I will ask the student to verbalize their thoughts as they code, and watch as they write out their work. If I see something interesting (a mistake, an unexpected choice, or a correctly-used concept they've previously struggled with) I will in some cases ask them to explain why they are doing it. In other cases, I allow mistakes through purposefully: debugging is an incredibly important skill in and of itself, and catching all mistakes up-front would deprive a student of practicing that skill. Note that the pair programming approach does not mean I do the work for the student, nor does it mean that the code will be bug free. I will ask questions, answer questions, act as a fast reference, and in most cases indicate whether I still see bugs. It is up to the student to determine how much effort they want to put into any given assignment, and consequently, to drive the process of stepping through the code to ensure everything works as it is supposed to.
In addition to normal college coursework, I'm also happy to cover practical industry skills that are generally omitted from a degree, such as release management, source control, and build systems. Many people are taken by surprise by these topics when they get into their first job, and having advance knowledge is a huge productivity boon. I am also open to tackling custom/more specialized topics that students would like to cover -- just ask!
back to top