Friday, February 19, 2016

On the skills gap between a CS education and the "real world"

I have often heard people complain that formal education does not prepare students for the “real world”. The frustration towards formal education is typically directed at liberal arts colleges, specifically those that produce graduates with few technical skills who end up struggling to find employment. But as it turns out, graduates with technical degrees don’t fare much better.

I recently read an article by Daniel Gelernter (2015) in which he lamented how poorly prepared computer science graduates are for real-world jobs. He writes, “University computer science departments are in miserable shape: 10 years behind in a field that changes every 10 minutes.” I can’t say I disagree with him about universities lagging behind. Technology is being developed at such a rapid pace, and there are no guarantees on what will be the next big thing. For example, once upon a time Adobe Flash was the coolest way to produce a professional-looking website. But just as quickly as it came, Flash was on its way out. People realized that Flash sites were clunky and took too long to load. The complicated designs of some Flash websites made them look cluttered on smaller screens, and that became a huge issue as mobile phones became more popular than desktop computers. Today, it’s practically impossible to find a website that still uses Flash because most web browsers no longer support it by default. Everyday, new technologies are being introduced. Today’s programming language of choice may well be obsolete a few years from now.

In this sense, I think that universities are not entirely to blame. A technology may be so new that schools struggle to find qualified people willing to teach it. Even the corporate world cannot keep up with technology sometimes. Once a company builds its system with a particular tool, it can be very difficult (not to mention expensive) to update it. Take Netflix, for example. Netflix is widely considered to be a pioneer in high-quality video streaming, and they make every effort to stay on top of their game. But I recently attended the ODSC West conference and sat in on a talk given by Chris Colburn from Netflix. Using an apologetic tone, he mentioned that Netflix stores its data on the Hadoop platform. He said that the Netflix team is aware that there are newer tools out there, but Netflix is just not ready to migrate yet.

Like Gelernter, there are many other people in tech who claim that they struggle to find qualified people. Some people believe that the problem is that there are not enough people studying the relevant subjects in school. However, Joann Weiner wrote in 2014 that “the reality is that there are enough STEM graduates. But these jobs go unfilled because there’s a gap between what graduates in STEM fields can do and the skills that STEM employers are seeking.”

So what exactly are the skills that Computer Science graduates lack? Experts in the field believe it is a combination of technical skills and the “softer skills”. Alex Radermacher and Gursimran Walia (2013) did an extensive review of research on this topic, and found that “graduating students are lacking in many different areas, including technical abilities (design, testing, configuration management tools, etc.), personal skills (communication, teamwork, etc.), and professional qualities (e.g. ethics).”

Given this, I think the best way to prepare students for the workplace is by putting them in the workplace. That is, students should do extensive internships before they graduate. The University of Waterloo in Canada is known for being a key feeder of Silicon Valley tech companies, and many people believe this is due to its cooperative education program. Though it takes 5 years to graduate, students who graduate with a CS degree from Waterloo already have 2 years of industry experience.

It is important to realize though that not everyone will have access to internships unless they are enrolled in a formal degree program. Many job postings specifically state that they do not accept applications from people who are not current students. I think this is rather short-sighted because there are many talented people without college degrees who have managed to teach themselves the right skills for CS jobs. I hope the industry becomes more open-minded, and that people refrain from making sweeping generalizations about people with non-traditional backgrounds. Even Gelernter (2015), who happily hires developers without college degrees, seems to be guilty of this. He said, “The thing I look for in a developer is a longtime love of coding/people who taught themselves to code in high school and still can’t get enough of it.” He declared that the majority of people who graduate from intensive bootcamp programs are not good, because they just don’t love coding as much as someone who has been doing it for years. I disagree with him in this regard because I think that there are probably a lot of people who were just not exposed to programming at an early age. Who’s to say that someone graduating from a coding bootcamp doesn’t love coding as much as someone who started coding 10 years earlier? That person who graduated from a bootcamp may be trying to make a career transition, but he may have put his heart and soul into it. He would make a great employee if given a chance. Or he may even be fulfilling a childhood dream, because even people who may have discovered that they liked to code at an early age may not have had the resources to run with it. Computers cost money, and if a child doesn’t have a computer at home, he cannot spend hours teaching himself to code.

All in all, I think the problem of the skills gap can be solved with some effort from both sides: the schools as well as the industry. Schools need to make their students do more internships. But companies also need to be more open-minded about the people they decide to hire for internships.


References:

Gelernter, D. (2015). Why I’m Not Looking to Hire Computer-Science Majors. The Wall Street Journal. http://www.wsj.com/articles/why-im-not-looking-to-hire-computer-science-majors-1440804753

Weiner, J. (2014). The STEM paradoxes: Graduates’ lack of non-technical skills, and not enough women. The Washington Post. https://www.washingtonpost.com/blogs/she-the-people/wp/2014/09/26/the-stem-paradox-lack-of-skills-by-stem-graduates-and-not-enough-women/

Radermacher, A., & Walia, G. (2013). Gaps between industry expectations and the abilities of graduates. SIGCSE '13 Proceeding of the 44th ACM technical symposium on Computer Science Education, 525-530.

Wednesday, February 10, 2016

Hello World: The Significance of the First Step

 print("Hello World!")  

This is usually the first line of code that someone writes when they first start learning a programming language. This, or some version of it. It's practically a tradition to use "Hello World!" as a test message to demonstrate basic syntax to novice programmers. For me, since Python 3 was the first programming language I learned, the line above was my very first line of code.

I love the "Hello, World!" tradition because it imparts a sense of adventure and discovery. Learning to code is truly like exploring another world. Or perhaps it is more accurate to compare it to someone pulling back a curtain and revealing that the world you've always lived in has a whole other dimension. Suddenly you see things differently.

It's only fitting then that I launch my first technical blog with the same words. It is, after all, a beginning: a venture into a new world.

Hello, World! Stef has some things to share with you.