Skip to main content

3 posts tagged with "Teaching"

View All Tags

Using Repl.it in a High School Classroom

· 5 min read
Scottie Enriquez
Senior Solutions Developer at Amazon Web Services

Background

I co-teach an advanced placement computer science class at Heights High School in Houston with the TEALS program. The curriculum utilizes the Java programming language and has an emphasis on object-oriented programming. From a school IT system perspective, we have limited options for the software we can distribute to the students' laptops. During my first year of volunteering, we opted to use BlueJ for the first couple of months before exposing them to Eclipse, a more heavy-duty integrated development environment. Both editors have their challenges and limitations for novices, so we began to evaluate several other options, including Visual Studio Code. After considering numerous factors, including the complexity of installation, editor features, and accessibility, we opted to try a radically different option: Repl.it.

Benefits and Implications

Repl.it is a feature-rich, browser-based IDE with support for numerous programming languages, including Java. In addition to the editor and computing environment, the application supports classroom features such as creating assignments that I will detail further below. Since Repl.it runs in the browser, there's no installation or configuration in terms of editors, runtimes, etc. Using a browser-based tool decreased the number of local support issues that we had to address. We found that students had much fewer problems with getting acclimated to the tooling compared to BlueJ and Eclipse. The user interface proved to be intuitive. There were relatively few issues with the underlying runtimes and virtualization that Repl.it abstracts from the user.

Repl.it IDE

Repl.it requires an internet connection, and teachers shouldn't assume that students have internet access at home. Though many classes will be online due to the COVID-19 global pandemic, keep in mind that students may have limited connectivity. I recommend offering desktop IDEs as an offline alternative so that students can at least run code locally.

Setting Up a Classroom

Repl.it is free for schools. There's an excellent video overview of the features on YouTube. Last year, we used Repl.it Classroom for assigning coding homework. We use other software like Practice-It for some assignments but struggled to find a way to evaluate raw source code. Repl.it simplified grading because we didn't have to pull down students' source code and build on our local machines.

Integrating with GitHub

While Repl.it is excellent for running code and submitting assignments, it doesn't offer built-in source control. Teachers create classrooms on a per year basis, so sharing examples and references across classes isn't transparent. Each environment targets an individual student exercise, so collaboration isn't seamless either.

GitHub offers a public place to store code and implement software development workflows like pull requests and CI/CD. At Heights High School, we've hosted solutions here for students and any other teachers who want to use the code in their classrooms. The source code for this project resides in a public repository as well. Repl.it has native GitHub integration so that a public repository can be imported when creating a new Repl. The Repl syncs with the GitHub repository so that when a developer pushes changes to the remote origin, the updates propagate to Repl.it.

Creating a Template

With GitHub, a team can create a template project to be used when a new repository is created. Templates allow developers to have codebase structure (i.e., putting source code in /src) and configuration files injected into every child repository. Under the repository settings page, check the template repository flag. After this, when creating a new repository, the template should appear as an option for the base.

Template Project for Repl.it

This GitHub project contains a template repository.

Main File

In terms of source code, only the "Hello, World!" program is included:

Main.java
class Main {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}

Given that most assignments fit into a single file, I haven't injected any opinions on the file structure.

EditorConfig

I've included an EditorConfig file in this project so that the code styling remains consistent across multiple codebases. EditorConfig is IDE-agnostic with plugins or native integration across IntelliJ, Visual Studio Code, Eclipse, etc.

.editorconfig
root = true

[*]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true

Repl.it Configuration File

Repl.it supports a configuration file that allows a developer to specify which language and run command to use. Without going into details about the recent changes to Oracle's Java license structure, I'll note that this project uses OpenJDK 10, which is free and open-source. The run variable in the configuration file refers to a shell command to compile and execute the program. Bash on the underlying Linux virtual machine interprets the command, so it isn't specific to Repl.it. The run command can be tested on a local computer or by modifying the configuration file directly in Repl.it.

.replit
language = "java10"
run = "javac Main.java && java Main"

Fork the Project

Run on Repl.it

Things I Learned From Teaching a High School Class for a Semester

· 11 min read
Scottie Enriquez
Senior Solutions Developer at Amazon Web Services

A Semester in the Classroom

I volunteer co-teaching an advanced computer science class at a Houston high school. This involves me being in the classroom for up to three days per week. In addition to lecturing, lesson planning, and grading, I'm simultaneously mentoring and being mentored by an experienced science teacher who has never taught programming before. One of my majors was computer science, and I have years of real-world software engineering experience supplementing my formal education. In turn, the teacher provides excellent guidance on education methodologies and best practices, as well as moral support.

In order to make this schedule work with my full-time job, I make up my classroom time and additional commute by working from home early in the morning before school starts on days that I teach. This generally requires about two additional hours. These days can be brutally long, especially if the teacher and I meet after work too. I feel that I've learned even more than I've taught this semester, and I wanted to share some of my experiences and lessons.

Be Motivated by Both Failure and Success

After class one morning, a student bluntly told me, “That was the most boring lecture that I've ever seen in my entire life.” The overall classroom energy and participation was the lowest I'd ever experienced, so this statement wasn't exactly a shock to me. I maintained composure, but I remember fuming in my car for a couple of minutes before I left the campus. I had to remind myself that the student was being simply being honest and not trying to belittle my hard work and preparation. The student didn't understand the time and effort that I put into the slides, material, and dry runs for practice. Naturally, I was disheartened by the situation, and the next lecture I was extremely nervous. I felt like I was stammering and fumbling even though I rehearsed the material even more this time to compensate. The next several classes went the same way, and I began to let fear of failure creep in. What if the students never picked up the material? What if I was turning them away from computer science? What if I was just a bad teacher?

The thought of giving up on my volunteering never crossed my mind, but I realized that I needed to fundamentally rethink my approach. I kept trying new formats, activities, and techniques. I reminded myself of how difficult the material is and how it would take numerous attempts before students began to master the curriculum. It took some time before we had another successful class with lots of progress, participation, and positive feedback. I left that particular class feeling motivated and driven. The high of success wasn't the catalyst though. It was the realization of my efforts and my personal pride in dealing with the earlier setbacks in a positive way. If you're only motivated by success, your growth as an individual will be severely stunted.

It also made me realize that while lecture is a useful teaching technique, it's important to delegate some struggle and challenges back onto the students. It can feel like a lot of formal education devolves into spoon-feeding, rote memorization, and regurgitation, but computer science requires thinking analytically and synthesizing complex concepts. Even though my students would often much rather just have the answer or explanation given to them, they develop so much more when they're pushed to derive it for themselves. I can also tell that they're much more satisfied whether they realize it or not.

Students Aren't Any Different Today

I'll be honest that I expected my students to be completely foreign compared to me as a high school student. It had been ten years since I set foot in a live high school classroom. Plus, there seems to be a negative stereotype of decay in each generation that follows. The so-called greatest generation versus entitled millennials versus a new generation that will never know an existence without smartphones and the internet. Time and technology have shaped some undeniable social and behavioral differences, but these kids are just as motivated as I was. In fact, they're probably smarter and cover much more course material than my parents' generation or even I did. Shouldn't this absolutely be the case though?

My class will cover about twice as much material as I did in my high school computer science class. While I had to deal with the sluggish, groaning desktop behemoths running Windows 95 (already antiquated in the year 2007), every student in my class is assigned a laptop that's more than capable of running a Java IDE. We now have education web applications that we can assign homework through which provides much more targeted practice and instantaneous feedback on their work. People record and share high-quality lectures on all sorts of subject matter. Technology and learning techniques are constantly improving, so it only makes sense that the curriculum expands as well.

Even as someone who creates new software on a daily basis, I can't accurately tell you what the technology universe or computer science careers will look like in the next ten or fifteen years, but I do know that the barrier of entry for work is getting higher. More and more roles are getting automated, but there is still a near infinite number of problems for the next generation to solve. These students will have to rise up to previously unattained educational heights in order to be able to find lucrative careers and contribute to society. It's up to us to prepare them for the journey. Each generation must continually improve and adapt its education in order to adequately prepare its youths for the next iteration of society that they'll be soon enough shaping themselves.

It can be annoying that kids get distracted on social media during class. Sometimes it can even feel like I'm vying with that computer in their pocket for their attention. However, these are the tools that students will have going forward to solve the challenges they face, and there's no question in my mind that being exposed to technology from a young age does far more good than harm. I have the pleasure of working with some incredibly bright and promising students, and I refuse to subscribe to the idea that the greatest generation has already passed us by.

If Something Feels Thankless, Reconsider Your Motivations

I met up with my teacher at the high school a few days before school started in August to see the classroom and get acquainted with the administration. He invited me to join him for a teacher assembly in the gym. On the walk over, the entire marching band was lined up in a long hallway blaring the ESPN theme song to pump up the teachers returning to school. Little did I know that before the school year had even started, I was receiving the most external gratitude that I'd probably ever get as a volunteer.

Programming can be frustrating and stressful. I work diligently to build rapport with my students every time that I'm in classroom, but understandably they would much rather talk about why their code isn't working as opposed to how their day is going. They understand that having me around to answer technical questions is incredibly valuable, so they keep the personal talk to a minimum. It can feel like thankless and impersonal work sometimes. I give a lot of my precious spare time, and at first, I struggled with the lack of feeling appreciated. I'm not always able to see the impact that I'm making on my students. I won't see how it affects their academic and professional careers for some time either. I probably never will. I had to learn very quickly to derive personal satisfaction from within.

No one sees the odd schedule I work to be in the classroom, the hours I spend preparing, or the time I spend in the evening helping out with homework over email. Very few people have thanked me directly, but I've come to realize that I don't need it and wouldn't get far if I did. Everyone wants to be recognized for their dedication, but I've grown to love my role in the background because I truly believe in my motivations for teaching. I don't need a marching band, but it's nice when it happens that way.

I Didn't Realize How Much Time I Wasted Until I Didn't Have It

I'm reminded of an old adage about a family living in a one-bedroom house. The parents complain that it's too loud and there's no space. They ask someone for help who suggests that they bring in several animals into their already cramped, rambunctious home. The parents then complain that it's even louder and more crowded than ever before. Then, they are instructed to remove all the animals from their home. The family ultimately realizes that their house originally wasn't that bad in comparison.

I work full-time and try to have a social life, so one concern about accepting a commitment like teaching was how it would affect my work-life balance. For the first few weeks, I was constantly exhausted and felt like I didn't have enough time to do chores, go to work, exercise, teach, lesson plan, and so on. I began to examine my routine and realized how much time I was allocating for things that I didn't care about. Instead of de-stressing after work by consuming mindless social media, I should have been exercising to unwind. Instead of shirking chore duties until late Sunday night, I should have spread my duties across the week. Adding in more responsibility to my seemingly overbooked schedule made me realize that I needed to prioritize and organize my time better.

Stay in the Moment, But Always Have a Goal in Mind

When designing every single lecture or lesson plan or assignment, I'm constantly faced with a simple question: why? The specifics are often determined by the preferred learning styles of my students and culturally responsive teaching practices, but with each topic or skill that we introduce, I always focus on why they need to know it. How does this fit into the bigger picture? How can it be synthesized with other concepts? How can it be used in the real world?

Not everyone in the class wants to grow up to be a programmer like me, but I constantly ask myself what computer science can offer every single student regardless of interest or desired career path. Critical thinking and creating abstract algorithms are high-level concepts that can be applied to absolutely anything. Technology now affects nearly every facet of human life, so I bring in guest speakers to class to illustrate how what they're learning could be utilized in a wide array of careers.

But my 'why' isn't just limited to the curriculum or even computer science. Most importantly, I try to show my students passion. A decade ago, I was on the other side of the desk and at the start of a long and winding journey through college towards my current career. I mean no insult towards my parents and family, but I simply wasn't surrounded by very many university graduates growing up. I never thought of higher education as opening countless doors to the future. I couldn't even begin to fathom the implications of the major or school that I chose. For better or worse, our education system requires that young high school graduates make these life-altering decisions despite massive socioeconomic inequities and educational gaps.

I want every single student in my class to consider furthering their education after high school. I openly share my pitfalls and accomplishments with them in hopes that one day they'll be even more successful than me. I aim to be a voice of genuine encouragement that reminds them of what they're capable of and that where they come from doesn't have to dictate where they end up.

Everyone Can Give Back

If you're a technology professional, I'd encourage you to consider volunteering for a program like TEALS. Even if you're not, there are countless programs that offer opportunities to make a huge impact in shaping the lives and futures of students everywhere.

TEALS Week One Postmortem

· 4 min read
Scottie Enriquez
Senior Solutions Developer at Amazon Web Services

My first week of teaching is in the books, and there’s already a ton to reflect on. Overall, I think that class so far has been a success, but I’ve already identified several opportunities for improvement.

What Went Well

I graduated from high school over a decade ago, and the world and technology have changed a great deal since then. I pounded out Java programs on crawling, clunky Windows 95 desktop machines without the interruptions of smartphones. Now every student has their own laptop. I assumed that my lectures and exercises would have to rival the distractions of the digital age. Overall, I found that it was easy to get the students engaged with the material especially when I made a conscious effort to explain its application in the real world. The students in my class seem much more focused on their careers after high school than I was at 16 or 17.

I thought it would be difficult to switch contexts from my work persona to my classroom persona while maintaining genuineness with the students. Thus far, it’s been a very natural progression for me even though I work in the morning prior to teaching class.

Where to Improve

Time management continues to be a difficult challenge. As a high school student, an hour felt like an eternity to be in the classroom. From the other side of the desk, an hour feels like not enough time to even begin to teach computer science and programming. Individual time with students is equally scarce and valuable. I want to support everyone in every way that I can, but only getting a minute or two of interaction at a time makes building rapport with my students seem insurmountable. On top of this, when a student asks for help, it’s usually at a point of challenge and frustration.

In week one, I fell short in regard to learning names. I’m only in the classroom for three days per week. This time has to be split between lectures and individual attention. One technique I’m going to try next week is using a Java program that I wrote to randomly select a student’s name when I ask a question. This should give me both the opportunity to finally put names to faces on a regular basis as well as make our formative assessments more uniform and accurate. If this doesn’t pan out, my contingency is to simply make flashcards.

public class TEALSRandomNameSelector {
public static void main(String[] args) {
try {
ArrayList studentNames = new ArrayList();
Scanner scanner = new Scanner(new FileReader("students.txt"));
while(scanner.hasNextLine()) {
studentNames.add(scanner.nextLine());
}
scanner.close();
Random random = new Random();
int randomIndex = random.nextInt(studentNames.size());
System.out.println(studentNames.get(randomIndex));
}
catch(FileNotFoundException exception) {
System.out.println("File not found. Check the path in the FileReader constructor method.");
}
}
}

Lesson planning is extremely time-consuming, but it is paramount to the success of the students. It involves more than just making notes, exercises, demos, and presentations. This week, I intend to focus more on dry runs of my lectures and activities so that they’re more polished and nuanced.

What Was Unexpected

I underestimated both how intensive and rewarding teaching in the classroom is. On any given day, I’m most likely working on something related to teaching after a day at my full-time job. While I’m often exhausted, I’ve managed to find reserves of energy when working on anything related to school. It’s a responsibility that I take very seriously because of the unique position I’m in to truly make a difference in the lives of my students. Bringing my industry experience to the classroom is a rare opportunity that I’m determined to make the most of.