Blog Post

Real World Programming Challenges

Guiding students from the requisite “Hello World” programing to more challenging tasks is natural for any computer science class. In my classroom, I have shown my students how to access some of the leading websites that professional programmers use and opened them up to a wealth of knowledge and skills that will serve them well if they chose a career in coding. My CSP students all have accounts on GitHub, CodeEval and StackOverflow.

With some careful direction, I am certain that most CS teachers will find these resources invaluable in their own practice.

CodeEval

When I wanted to challenge my students with some programming assignments, I decided that it would be beneficial for them to see how professional programmers gauge their own coding skills. CodeEval regularly publishes coding challenges that are open to anyone to complete. The challenges are organized into categories of easy, moderate and hard difficulty. The site is language agnostic so you are free to use C++, Java, Python or any other language you teach.

My students first assignment drawn from this site was https://www.codeeval.com/browse/20/ . Rated as an easy challenge, here was the assignment:

My students had already learned how to code to open a file, read strings and perform some simple manipulations of them. I made sure to provide them with some links to documentation that covered how Python uses the lower () command to convert all characters in a string to lowercase. Seeing how simple this was accomplished, some of my students even used IF statements and a menu to allow users to chose if they wanted have all lowercase or UPPERCASE characters printed to the screen.

 

CodeEval is more than just a repository of programming tasks. If someone completes a programming challenge, they can submit their solution and earn points on their individual profiles. Coders with multiple solutions to their credit are able to showcase their talents and attract offers from the many software companies are also active on CodeEval. Your students do not need a CodeEval account to access the challenges listed on the site. If anyone desires to setup an account, you will need either Facebook or GitHub (discussed below) to gain access.

Collaboration

When I was part of a cohort getting trained in the Exploring Computer Science curriculum several years ago, we were fortunate to have Google headquarters in Cambridge Massachusetts as our host. One afternoon after our training for the day ended, Google Engineering Director Steve Vinter met with all of the teachers to discuss how his company evaluates talent. The single greatest attribute they desire, is the prospective employee's ability to collaborate with others. As I have told my own students on numerous occasions, no single person wrote Microsoft Word. Rather, teams of programmers located virtually anywhere need to easily join forces and see a project thru to fruition.

GitHub

Software developers have relied on many tools to speed development and manage shared programming efforts. Anyone who has coded even a simple program has experienced the frustration of having one edit result in syntax errors or a compiler crash. Being able to roll back to a previous version is an invaluable asset in the programmer's arsenal of tools. Imagine the complexity of working on a shared program. In a simple example I share with my students, consider the problems it would cause if another programmer changed the name of one of your variables.

Version Control Systems (VCS) are critical to the production of modern, complex software. While most High School students do not require such sophisticated code management, introducing them to this concept will certainly prepare them if they decide to pursue CS in college.

One of the most popular Open Source tools for VCS is Git. Where Git is intended to host local repositories (essentially program code developed by members of a programming team) GitHub moves this same functionality to the web enabling much more widely distributed sharing of code. There is a full tutorial (not surprisingly referred to as the hello-world repository creation) but most beginning CS students will likely not dive deeply into this technology at this stage. My more ambitious students have used their GitHub accounts simply to enable them to submit their code to CodeEval. However, If your students want to learn more and contribute to Open Source programming efforts, GitHub is perhaps the best place to become part of a team.

StackOverflow

Every programmer has encountered a situation with some code that simply refuses to function the way you intended it to. You pour over documentation, ask a colleague for help, or post a message in a forum and hope someone answers your plea. Searching for a programming solution frequently leads you to StackOverflow and its virtual army of professional coders who are anxious to help solve the most vexing issues you face. Sometimes the solution you need has not been asked or those that are posted are still not precise enough for your problem.

I established my own account when I was having difficulty extracting data from a CSV file that was created in an earlier lesson by my students. After spending several hours investigating how to modify my code and mounting frustration, I posted a code segment and waited for some help. In a matter of minutes “Zondo” came to my rescue and had a suggestion on how to modify my program. I subsequently exchanged a few more posts with him and my problem was solved.

The next day, I shared my experience with my students. Many immediately saw the value of using StackExchange when they get stuck in the future. “Zondo” and others programmers that offer assistance are rewarded with Reputation Points and gain the ability to moderate the many forums maintained on the site.

Jobs, Jobs, Jobs

CodeEval, GitHub and StackOverflow are all great places to find programming jobs or discover what skills are in demand. Some people refer to these sites as “Facebook for programmers.” However, rather than reward users with virtual poker chips or farm animals, users of these sites can expand their knowledge of coding and connect with some of the brightest programmers in the world.

 

Neil Plotnick works at Everett High School, an urban district located just north of Boston. He teaches Exploring Computer Science and will be piloting the new Computer Science Principles course developed by Code.org during the 2015-16 academic year. Neil has a keen interest in Open Source software, especially Linux operating systems and how they can be used in the CS classroom.