00:00:16.640
I want everybody to raise their hand if you know Ruby. Now put your hand down if you taught yourself Ruby or learned Ruby from someone in the community. Leave your hand up if you learned Ruby in school. That's actually a better effect than I expected. There's nobody with their hand up, and that's what I want to talk about today. I want to talk about hacking the academic experience. There’s one person who raised their hand—awesome! My point is made. There are about 300 of you here, and only one person had their hand up for having learned Ruby in school. My name is Emily Stolfo. I work at Tenen on the Ruby driver for MongoDB. I'm not going to talk about MongoDB today; I'm going to talk about my night job, which is teaching Ruby on Rails at Columbia University in the computer science department.
00:00:50.600
I went to Columbia as an undergrad where I learned computer science and art history. I worked for a few years as a professional web developer and Rails developer, and now I'm at Tenen. Ironically, I’m back at Columbia now teaching what I learned outside of school. In fact, I'm now teaching topics that I didn't even learn at Columbia. Today, I want to share my experience with you.
00:01:11.240
After teaching at Columbia for three semesters, I identified a problem: even with a computer science degree, I didn't really learn how to program until I was working professionally. I'm sure many of you have experienced the same issue after your first working experience outside of school. In discussing academia and hacking, I'm going to share a hacker-centric curriculum that I created to address some of the gaps I noted in my undergraduate computer science education.
00:01:40.280
Over the course of these three semesters, I revamped the curriculum to fill those gaps. I realized I only learned programming on the job, and I want to tell you how you can get involved as a hacker. Since most of you had your hands down, you're all hackers, and together we can do something about this. As open source users and contributors, we don’t only have to contribute code; we can also contribute knowledge and education.
00:02:02.119
What did I do in my class? After the first semester, I thought I was just teaching Rails but quickly realized I was teaching much more than that. I call these essential learnings 'hacker habits.' In this presentation, I’ll share a curated list of these habits and how I strive to teach them in my class.
00:02:38.480
The first habit is treating the internet as your textbook. On the first day of class, I share with my students that we will be using MongoDB with Rails, and I encourage them to email me with questions. However, I will not respond to an email that has a question that can be answered within the first page of Google results. Often, I get emails from students saying they looked everywhere for help, yet I need to help them learn how to use the internet effectively as a primary resource.
00:03:12.560
The week before the first class, I always get a number of emails asking about the textbook we are using since there is none listed on the class site. I tell them that the internet is our textbook, which often leaves them astounded. The second habit is being able to debug code that you didn’t write. At Tenen, I add features, maintain, and respond to issues regarding the Ruby driver, which means I often have to reverse engineer something complex that I didn't create. This is something students are generally not accustomed to doing.
00:03:52.720
To teach debugging skills, I assign an authentication homework where they must implement authentication into their app without me providing a solution. I create a skeleton app on GitHub with built-in authentication but with several bugs—about five of them. Students tend to procrastinate, which leads to crowded office hours for me the day before assignments are due. I emphasize the importance of reverse engineering and the need to not blindly trust code that is given to them.
00:04:36.520
Another crucial lesson is to build something to solve a real-life problem. Last semester, I treated my class like a hackathon instead of spending time on theory before practice. They worked on building a larger application throughout the semester, thinking about real-life users and real-life problems.
00:05:07.480
I used to manage class announcements and presentations using Google Sites, but I decided that the students would create a Rails app for the next semester’s use instead. This exercise helped them consider the users of the systems they build, making the class experience richer compared to other courses they have taken.
00:05:43.400
To keep students engaged, I offered incentives. The stronger teams that built the best app would work with me after class to deploy it on Heroku for the following semester. This method not only motivated students but also allowed them to see how their projects had real-world applications.
00:06:24.080
Another part of the curriculum involved engaging with the community. I encouraged students to engage through code and in person. I suggested they use Stack Overflow as much as possible and participate in the coding community actively, reinforcing the principle of 'take a penny, leave a penny.' They should feel comfortable not only using Stack Overflow for coding help but also contributing back to the community.
00:07:02.279
For in-person engagement, I required students to sign up for a Meetup, surprised by how few had heard of it initially. I emphasized that Meetup is a fantastic resource for collaboration and networking with fellow aspiring developers. While many of them signed up for rather unconventional meetups, I aimed for them to explore the potential of connecting beyond the classroom environment.
00:07:38.160
I also encouraged students to critically evaluate the code they find online. They need to understand that just because something is available on the internet doesn’t mean it’s correct or written in idiomatic Ruby. As an example, I assign a task where they write a rake task to import data, urging them to use Stack Overflow for guidance without directly providing solutions. If they simply copy-paste code without testing it, they could lose points, highlighting the importance of taking responsibility for the code they use.
00:08:21.200
Additionally, I emphasized the importance of researching Ruby gems thoroughly. They should check download counts, the timing of the last commits, and the activity level of maintainers to ensure they are utilizing reliable resources as they build their applications.
00:08:53.960
Why is this so important? The number of opportunities in tech is continually increasing. According to the U.S. Department of Labor, by 2020 we can expect about 1.4 million programming jobs available, while universities are only prepared to fill about 30% of those roles. This highlights the need for academia to adapt and provide relevant skills and behaviors so that students are prepared not only to find employment but to succeed in their careers.
00:09:36.359
While academia may not change swiftly, we need to work on bridging the gap between academic institutions and the hacker community. We can create our own network of learning and teach each other what we know.
00:10:00.000
How can you become involved? There are many opportunities to teach. Organizations such as General Assembly and Flatiron School often seek instructors, and there are platforms like Skillshare and initiatives like Technology Education Literacy in Schools where you can volunteer to teach computer science in high schools.
00:10:40.960
These are fantastic ways to give back to the community while reinforcing your expertise. It's a great opportunity to support the next generation of developers, and organizations like Rails Girls, which recently won the Ruby Hero award, are also excellent resources for getting involved in teaching.