In addition to teaching a continuing education course in Python at the University of Washington and being an independent Python contractor, Cris Ewing teaches the Python Development Accelerator and the Foundations II: Python course at Code Fellows. Not only are we impressed with his experience in education and his time management skills, but we were also lucky to chat with him about Code Fellows. We talk with Cris about the differences between university students and bootcampers, the best learning resources for Python, and how Code Fellows is helping their students make meaningful career changes.
What were you doing before you started with Code Fellows?
My day job, during the months that I’m not teaching at Code Fellows, is an independent Python contractor, so I actually make my living writing Python code for various companies and people. I have a background in music, and did a great deal of programming along my music career in pursuit of computer music. I came to the conclusion as I was starting a family, that music wouldn’t support a family, so I moved into computer programming. As a result, I’ve done a lot of teaching, starting with TAing classes and working up to teaching graduate seminars.
When I left, I did some work teaching desktop software here in Seattle. I’ve also taught quite a few independent training courses, ranging from one- or two-day up to 1-week intensive sessions in various systems.
How did you get involved with Code Fellows?
Actually, Brooke and Ivan contacted me—I was doing some work for the University of Washington teaching a continuing education course in Python. They were interested in seeing if Code Fellows could offer a Python course, and if I would teach it. Eventually, we scheduled the first bootcamp last Winter (Feb-March 2014).
We graduated 7 folks out of our first cohort. I’ve also been teaching the Foundations II class in Python, which graduated our first cohort of 19. We’ve also just kicked off the second Python Dev Accelerator with 16 students. Four of the sixteen are graduates of the Foundations II course!
Do you notice a difference between the students who take your University Python course and the students in your Code Fellows course?
There are a couple of differences. From the student perspective, there’s a difference in what the students are after. Most of the students who approach the university for a continuing education certificate are already happily employed. A few might be thinking about a career change, but the majority are picking up an extra skill to help in their daily life.
The students at Code Fellows are really there because they want to change their careers and get a job as a programmer. They’re quite focused on picking up as many skills as they possibly can.
From a teacher’s perspective, there’s a difference in how you should approach teaching each class. The University course is one night per week and 10 sessions, so you have a short opportunity to lecture and get students’ hands on some code. You send them home with a homework assignment and hope they finish it. Whereas, with the bootcamp experience, they get 3 hours of classroom instruction each day, but also all this additional time working on projects. I get an awful lot of opportunities to interact with students on a day-to-day basis. I get to really see their progress in a much more direct way. The opportunities for assessment are far greater.
Do you see a lot of beginners in the Code Fellows course?
The first course was much more beginner heavy. The aim at Code Fellows is to have these Dev Accelerators be exactly what they say on the box, which is to take a developer (which implies that you already know something) and accelerate them into being fully qualified to take on a job as a full-time developer. There’s a difference between an amateur coder and an employed developer. Our aim is to get those professional level skills to people with some kind of experience. That being said, the first time through, we had quite a few beginners, including one student who had never written a line of code before. He now has a 75K job. I would love to say that’s because I’m the world’s greatest teacher, but that’s just not true. The reality is that the environment is very good at moving people along quickly and he was an ideal student for this situation. He was hungry for knowledge and information—he took everything an extra 10 steps further.
The reason we have the Foundations courses is to try to provide people with enough basic programming experience so that we can bring them into the Dev Accelerator and really polish them up. There are a fair number of students coming out of the Foundations II: Python course and going into the dev accelerator. I’m feeling quite good about the level of the students.
For students who go into the Dev Accelerator, do you give them pre-work before they start?
For me, the pre-work mostly consists of pointing them at a number of learning resources for Python, and then having them type as much Python as they possibly can. The key to the Dev Accelerator is having some kind of facility in the language. There’s a lot of work and a tremendous amount of coding they do, so the less time they can spend thinking about basic API methods on core Python code, the better they’ll be.
If someone is interested in taking your Python course, are there certain online materials or books that you recommend?
There’s a tremendous amount of material out there; the hardest part is picking one of these resources. There’s probably 8-10 really well-reputed resources. I met a woman named Marta Maria Casetti at PyCon who has done a review of existing Python learning resources online, and wrote up reviews of each resource, focusing on what type of learner they might be good for. I point people to her blog posts and have them choose and follow one of her suggested paths.
What is your teaching style? Have you ever run into a situation where your teaching style doesn’t mesh will the student’s learning style?
The challenge in teaching is recognizing when someone isn’t understanding a concept in the way you’re saying it. Teaching is about communication, much like programming is about communication. Being able to recognize when the instructions you’re giving aren’t gelling with your students is hugely important. One of the tools I’ve picked up is that I give each student a red sticky note and a green sticky note. As we’re working our way through concepts, if they’re having trouble understanding me or having difficulties, they stick the red sticky note on their laptop. That’s a red flag. What I’ve found in using this device is that students are reluctant to raise their hands in class to tell you they’re not understanding; they’re far more likely to use this little flag that says “I don’t get it.” That allows you to circle back and talk about the problem in a new way or using a different approach.
I run into situations all the time when students don’t get a topic, and it’s always because I haven’t found the right way yet to unlock that for them. The challenge and the joy of teaching, is figuring out new way to describe solutions to a problem.
Did everyone in your first cohort graduate?
No, we actually had three people out of ten who didn’t make it. One person dropped out after the first week. The workload was too much for him, and he wasn’t prepared to do what was being asked of him. It’s an interesting story, though: he dropped out of the class, went back and took our Foundations I class and Foundations II class in Python. As far as I’m concerned, I think he has the technical skill to take on the Dev Accelerator now, though he chose to delay entry in order to give himself time to build velocity. It’s proof positive that the approach of bringing people through a series of courses can prepare them in a much more profound way than having them teach themselves. Two other students did not complete the required coursework in the time allowed.
Right. I think it’s cool that Code Fellows has a variety of offerings for different levels, so that if a student is falling behind, there are other options for them.
Yes, it’s great for the students, because they get the opportunity to fill in the gaps. And it’s a fantastic thing for the teachers, because it means that we can approach the Dev Accelerator courses as a high-level finishing school rather than a ground-up bootcamp.
In addition to teaching hard technical skills, do you focus on any soft skills at Code Fellows?
Absolutely. On a day-to-day basis, all of our assignments are actually going to be paired. I didn’t do this the first time through, and I regret it. We’re going to be partnering each week, and the partners will pair program to produce each code assignment. People switch between driver and navigator, and both will get a chance to offer suggestions and ask questions. I think this will produce a higher level of learning.
The course is 8-weeks long, and divided into two halves. At the end of each half is a project week. Students divide into teams and come up with an idea, spec out the idea, and draw up wire frames to create user stories, which they put into an agile project management system. During the project week, they build the projects from the ground up, and eventually demo it. It’s a great opportunity for them to learn the soft skills necessary for them to function in a team. Programming skills are one thing, but learning how to function really well in a team, divide up tasks, and work as a functioning system, is the skill that makes you truly employable. When I talk to employers about the skills that they’re looking for in Python programmers, the Python skills they’re looking for are desperately varied (big data vs. web vs. testers etc), but everybody is looking for a developer who can slot into a team effectively. That’s something we can help provide.
Beyond that, four days per week is classroom instruction, but on Fridays, we have lectures from people out in the business world. They talk about interview skills, cracking the code interview, and whiteboarding. That’s one of the reasons I signed on with Code Fellows: there are a lot of places that teach you to code, but Code Fellows teaches you to get a job.
Has everyone in your last cohort gotten a job?
Out of the 7 people who successfully finished the class, we have three full-time employed graduates and one who is doing contract work.
Have most of the graduates stayed in Seattle?
Everyone but one. That person was admitted to the Computational Linguistics program at Standford for PhD. work.
What type of student do you see being really successful at Code Fellows, and what type of student doesn’t do well?
In my opinion, students who are internally motivated and have a desire to learn something on their own do fantastically. The kinds of students who don’t do well are people who come in looking for someone to motivate them and kickstart what they see as something they ought to be doing.
Anything else you’d like to add about Code Fellows?
Speaking as a person who made a career switch, there’s something that Code Fellows does, which I had to find out along the way: Code Fellows helps you understand the degree to which your social connections in the world of programming are important to your professional career. The hard skills of programming are important, but it’s really important to make connections with people and communicate with others about what you love and are passionate about. I figured that out along the way, and I think I would have had a more accelerated development as a programmer if I had known that up front.