Thursday, February 4, 2016

0015 - Lessons Learned

Back in December, I took a day off of work just for myself. This is not a common occurrence: as a university student, I typically spend most of my vacation days on finals week each semester, with maybe another day or two each year taken off around a holiday weekend for a little extra length. That was pretty much what happened in December: I had final exams on a Wednesday and Thursday, so I took those days off. Instead of going back to work for a day, then having a weekend, I decided to take Friday off for a "recovery day." All that meant was that I got to finally go to a Memtech Geek Breakfast (http://www.meetup.com/memphis-technology-user-groups/events/228302623/) for once. So I went down to the breakfast and had a great time with some great folks before they went to work. Then I was alone again.

So I figured, "Hey, why not go by Central [Baptist School] and see if anyone's around?" For those of you not intimate with my life history, I went to CBS for K-12, and I still maintain good relationships with a few of the faculty remaining from my tenure there. So on my way home, I swung on by CBS and found that classes were still in session. As per usual, I spent most of the day hanging with Mr. Nelson, my HS math teacher. When he was unavailable, I went to chat with Mr. Henry, my 7th grade English teacher, who is now also teaching the HS computer classes. I mentioned to him that I was thinking about offering to teach a basic programming class at CBS next year (something I hadn't really thought about until that moment or so), and I asked him if he thought that any students would be interested in something like that. He smiled.

"Talk to Justin Gord."

After about 20 minutes, I finally tracked down Justin and asked him if he wanted to learn some basic programming techniques. He was fairly noncommittal, but we agreed to meet up sometime soon to further discuss the idea. Long story short, I've been meeting with Justin once or twice a week for about 4 hours per session for a month and a half now, drilling as much software development practice and computer science theory into his head as I can muster. For that time span, my semi-weekly meetings with Justin have been some of the brightest spots of my week.

Sitting here at home on a Thursday night, though, I've been thinking back about how our first few meetings went versus how they're going now, trying to spot areas on which we should focus, etc., when I realized how much I've learned through the teaching process:

1. Teaching >= Learning: I can't tell you how many people I've heard say, "The best way to learn something is to teach it." Probably somewhere around 4 or 5.
Naturally, I always assumed that this was referring to the time spent studying subject matter for lesson plan development, as well as analyzing material with which you're already intimately familiar for the express purpose of presenting said material in a way that your student(s) can understand it. However, that's only half of the picture. I learn more by having to answer Justin's questions than I do cramming before our meetings. The questions are usually as simple as "Why are we doing things this way?" or "How does that even work?" Usually it's not so much that I don't already know the information, but that, in the process of explaining it to someone wholly unfamiliar with the subject matter, I have been gaining a deeper understanding and a much greater appreciation for how and why some things just "work."

2. Kids are quick: I make no qualms about it - I threw Justin straight into the deep end and watched him flounder. Of course, I didn't let him drown, but I watched how he reacted to being confronted with something he had no clue about. He chipped away at it for a bit, and I gave him feedback on what he was doing. Each time I threw him in, though, I gave a little bit less feedback, and watched how quickly he was able to start solving problems for himself. Granted, he's still very new to this domain of knowledge, so a lot of the problems he has stem solely from a lack of experience (i.e. trying to reference a variable that is out of scope). However, he's starting to pick up on his common mistakes and is working to correct them. When I was a month and a half into programming, I could barely understand how human input was supposed to work. This kid's already building a frigging computer game, as well as making decent progress through Project Euler (https://projecteuler.net/). So, yeah, he's still got a long, long way to go, but he's trucking it down that road.

3. Computers are stupid: Justin's come up with a few clever solutions so far that just don't work with the tools we have. Sure, there may be some language out there that can do what he wants it to do, but for the most part, he's struggling against common knowledge in the software development field. Also, he doesn't like to have his "Why...?" questions answered, "Because that's how it is."
One thing I've focused on quite a bit through our sessions, though, is how stupid computers are. They don't think, they don't solve problems, they don't develop themselves. Whereas the human brain is constantly carrying on hundreds (if not thousands or millions) of processes each second, usually completely concurrently. Meanwhile, a computer processor can only handle one thing at a time.I think Justin is finally coming to grips with this.

4. Curricula suck: now, I'm not talking about planned lessons in general, but about the overarching curriculum path students have to follow in order to graduate. At the University of Memphis (http://www.memphis.edu/), you take the data structures classes, then move on to Discrete Math, Design and Analysis of Algorithms, Software Engineering, and Models of Computation. This is not necessarily a terrible thing, but it's designed to work for a majority of students, not each and every one individually. Working with Justin, though, we've jumped back and forth through the material from all of those courses. One session, we may start with some data structures, then get carried away when the topic morphs into something like the backracking algorithm. Because of it being a 1-on-1 relationship in the class, I'm able to adapt what we do based on exactly what problems he's having or what advice/data he needs to be able to take his next step.

5. Many of my classmates are idiots: When I first learned about a concept like OOP at U of M, I was already familiar with the idea (having been developing quite a bit before that time). When my classmates had trouble understanding exactly what was going on in the class, I chalked it up to inexperience, particularly when 20+ year olds were frustrated to the point of tears.
Meanwhile, Justin had a pretty good understanding of OOP within 20 minutes. Now, maybe the kid's just smart (and he is pretty smart), but this was when he could barely remember how to output text to the screen in Java ("System.out.print([text]);" or "System.out.println([text]);" for those listening at home). By our third meeting, I had decided that our goal in these lessons is that he will be bored out of his mind for at least 3 years at college.

6. "I don't know" just isn't acceptable: When preparing for job interviews, dealing with fellow employees/peers, and sitting in classes, I've had the concept of "It's okay to say, 'I don't know' if you don't know something" drilled into my head. In those situations, it is okay, especially if you follow it up with a good, old-fashioned, "...but I can find the answer for you."
When teaching, though, I've learned that saying, "I don't know" just doesn't cut it. Admitting that you don't have a piece of knowledge is fine, However, there is a better way to express that, something like: "That's a good question! Why don't we look into that?" and then guiding the student(s) to finding their own answers. Seems pretty common sense, right? Try telling that to college professors.


In conclusion, the last month and a half have had some very nice bright spots, like when Justin created his first classes without assistance, or when he figured his way through a fairly complex problem to develop a pretty clever algorithm to solve it. Every time I see the light bulb go off over his head gets me excited and pumps a little more enthusiasm into me. Also, if you're interested in hanging out with us sometime, hit me up on Twitter (@jawood2005) and we'll see when that can happen. Guest appearances by folks in the field are always appreciated, and if you just want to learn, then the more, the merrier. I'll let Justin teach you.