Teaching Java

I’ve started teaching an introduction to Java class at a local community college and it’s been quite an experience. The class is four hours once a week. It’s ridiculously long, but that’s my fault because I don’t want to go to the campus twice a week after work. Lets not forget, I work full time and have an active social life. So do a lot of my students. This class is clearly hard work for everyone involved.

Most of my students are either high school age or recent high school graduates who are hoping to transfer to a four year college. The rest of my students are real adults, either working full time and trying the class for fun in their free time or hoping to completely switch career paths. The diversity is very interesting and each student has a very different motivation for taking the class, but despite that, I found they all share one principle: wanting to learn and do well. That’s all I need to be able to teach them!

I originally had thought that teaching the class, aka lecturing, would be the most difficult element. Turns out, I already know the material pretty well and I’m a decent public speaker. I improvise what I say, having decided the content and order ahead of time.

Instead, preparing content for each lesson is the hardest trial, which was honestly a surprise for me. There are so many resources on Java already out there! I just assumed it wouldn’t be difficult to put it all together. I was wrong, mostly because I couldn’t find all the resources I wanted. They weren’t available to me at the touch of a finger, at the quick typing of a few keywords in the Google search bar.

It was also surprisingly hard to come up with questions to do in class. I chose to not have a textbook because there are so many resources online for free, but I think my students suffered for it! Teaching this class again, I’m definitely going to find a textbook, and I have a few in mind, but ideally, I would want to write my own book instead. One that covers the material in my class’s order and reiterates what I taught in class.

In addition, not having a textbook meant that I had to try and find exercises, questions, and examples online. Again, I thought this would be an easy task, but finding questions online by scraping the net was very time consuming. Unnecessarily, I believe. #IDEA: make a search tool just for school/class/teacher resources.

Unfortunately, my first class teaching, I messed up. The class was made up of either students well-versed in programming in other languages or students who were programming for the first time ever. As the class started, I asked a lot of questions as I lectured and a few students were very vocal with the right answers. I just assumed that all the students were digesting the material well, and I ended up moving through more content than I wanted. You know what they say when you assume… you make an ass out of u and me.

So this first class was too much: near the end of the third hour (because the class takes up an entire sixth of the day!) when I asked students to work on a question, I noticed the holes and gaps between the understanding levels of all my pupils. I realized that bringing up questions, giving students a chance to handle them, and then going over it together as a class was much more effective as a teaching tool — more interactive, a chance to digest the material, etc.

Thus, during the second class, I reviewed all the concepts from the first lesson. In explicit detail. For every concept, we did several questions and examples in class. At the end of class, I gave a small classroom quiz (inspired by one of my own Professors from college, Rob Miller). These quizzes aren’t graded on accuracy, just participation. After students took the quiz, we went over all the answers, breaking down how to solve the questions. By having the students take a small quiz at the end of each class, I was showing them what knowledge they should be leaving the lecture with. In addition, I could track the progress of individual students myself and see where the class’s understanding was at a whole. The quizzes were a success as a teaching tool, enjoyed by both the students (because they weren’t graded) and by me.

In addition to the Etudes (which I was using for the class mini-quizzes), most of class time I switched between using PowerPoint and Eclipse. Switching between those two applications while lecturing was its own headache. Halfway through the quarter, I noticed that students spent more time trying to copy down the code I was writing instead of listening to what I was saying — even though they knew I was going to post all the code online after class. It turns out (not surprisingly) that students want to play around with the code on their own computers and Eclipse environments during class.

I finally came up with a practical solution: I started writing the code in collabedit. collabedit is like Google Docs for coding. At the beginning of class, I’d create a page and share the link so all students could be in the same location. This way students would have access to the code in the same instant that I was writing it, and they wouldn’t have to stress about copying it down.

collabedit had two additional uses. First, it wasn’t a compiler like Eclipse, so it showed the students some of the traps associated with becoming too dependent on a coding environment that auto-completes your methods or gives you warnings when you forget to complete your return type. Second, there was a chat box and I encouraged students to use it, asking them to write their questions or comments there while I was lecturing if they didn’t want to interrupt or if they wanted to ask something anonymously. This chatbox was a huge success. Tons of students used it to interact with each other while I was lecturing. Students answered other students’ questions. It gave me a record of what was asked or what was unclear. This use wasn’t a total surprise though because I remember some of these same results from the Master’s project that I did, where I created a web application NORA (No One Revises Alone). NORA facilitated students’ interaction in the online classroom environment, allowing students to follow individual threads of thought around the main content.

collabedit made it even easier to focus on doing exercises in class. Going through problems is really important to me as a teacher. I believe it helps students take the knowledge they have and test their ability to apply and put the skills they’ve learned to use. With all the questions we do in class, I want to really emphasize solving an exercise without code: first break down the problem into solvable chunks, write out the steps to a solution, and then convert those steps it into code. That’s how the real world works. You psuedo-code all the time and knowing how to do that well means that you can solve any problem in any language without hitting a blank or completely getting to stuck. It’s also a super useful skill to practice for coding interviews.

The class has now almost come to an end, and it has been such a great experience for me. I’ve learned so much not only about my own understanding of Java and coding but also about what it means to be a good teacher and mentor. The class has helped me solidify my views on education and what works and what doesn’t. I’ve also developed a teaching style that I enjoy and am proud of. I’ve clearly been trying to use my classroom as a place where I can experiment with teaching concepts and it has been a success. I hope to keep teaching, experimenting, and posting about my findings☺

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.