Programming can be really difficult, especially for someone that has never done it before. All the various languages, libraries, frameworks, patterns, and tools can be very intimidating for anyone new to the concept of programming. Even as someone slightly more experienced, it feels like there is a never ending amount of information being introduced daily. So many tools and frameworks come and go, that by the time you finally start to learn one, it has already become obsolete.
In order to survive in the field, you always have to be challenging yourself. Being a great programmer requires a constant balance of learning and doing. You must spend time practicing your craft since it is the quickest way of receiving feedback. At the same time, you must be constantly learning new techniques by reading books, blogs, communicating with peers, and reading other code.
I have found that one of the best ways to really understand something is to try to teach it to somebody else. Teaching provides a different perspective into something you might already know. Trying to simplify an explanation of an advanced concept that might have taken you a few years can provide you with a new way to implement that same concept in a more efficient or clearer way.
Some Prior Experience
I got my first taste of teaching when I was in university. I was initially asked to start tutoring students who were enrolled in Computer Science courses, although not necessarily Computer Science students. Most of them were actually Mathematics or Physics majors, with maybe one or two actually enrolled in the Computer Science program.
Introducing those students to programming was a wonderful experience. Many were filled with a curiosity, wondering how and why the computer was doing what it was told. Since most of the students were pursuing degrees in other fields, it was really exciting seeing them come up with ideas on how programming could help them out.
Unfortunately, you aren't always gifted with motivated individuals. A single bad student can really discourage you from teaching. Some just wanted to get through the course as quickly as possible, and others just did not care (about anything). It is really difficult to keep up the motivation to teach, especially when you are exposed to these kinds of students often.
Teaching Again
For the last few months, I have been helping several friends and family members learn how to program. Some have tried programming before, but most have never ventured past a simple 'Hello World' example. One of them is my father, a semi tech-savvy user. Two others are students, one in high school and the other at university. The final is in the IT industry, currently working as a System Administrator.
All four of them have very different motivations for wanting to learn how to program. My father is wanting to learn so that he can extend the capabilities of a piece of software (Flight Simulator) he uses often. One is ultimately in it for the money, while the others are genuinely interested in the characteristics and challenges that programming brings.
Difficulties
While there is great pleasure in teaching, coaching, and motivating someone, it also comes with its difficulties. Of course, it is hard enough trying to manage four different individual's levels and speeds of progress.
What I have found is that a beginner programmer, especially one that has been around more experienced programmers, tries to emulate the speed of the more experienced one. This usually ends up hindering their learning progress as they tend to focus on the wrong things. They spend time playing around with shortcuts and code optimizations, often times not even understand the code they are writing.
Another thing that I have noticed is that the motivation behind wanting to learn plays a huge role in how persistent people are. Those that are honestly interested and curious about programming tend to want to explore and take risks. They actively pursue knowledge, and even continue to teach themselves when no one is around. The others tend to wait to be told what to do, or want answers before even thinking of the questions.
Also, I believe some people were just not meant to code. Simply put, coding is not for everyone. It is not a motivational or skill set issue, just some people's daily activities and thinking constantly pushes them away from a programming mindset.
Balance
There is a constant challenge with how you help someone solve a problem, especially when you know the answer. On one hand, you can just show them how to to solve it, so that they can quickly and easily get feedback and continue forward. However, the problem is now solved and the student may not have understood why the problem existed in the first place, nor have they thought about why it was solved that specific way. On the other hand, leaving one to struggle too long with a problem will eventually lead to discouragement and distraction.
When teaching, I tend to lean towards a more passive observant role. I let the student struggle for a bit through the different phases of learning:
- Understanding the problem or question
- Identifying and locating the cause of the problem, if needed
- Developing a solution
- Implementing the solution
- Testing the solution
I try to not become too involved with any one phase. I would rather a student work through a solution and be confident in their answer, even if incorrect, than to have them avoid it and give up early. Failing quickly and early provides a quicker feedback loop and helps eliminate unnecessary solutions, giving direction to the best answer.
Learning to program is really difficult. Teaching to program is even harder.
Have a similar experience? A better way of teaching? Feedback?
I would love to hear it. Send me an email and/or contact me from any of the options at the bottom of the page.