Chapter 11
In This Chapter
Learning to code with a bachelor’s or master’s degree
Coding outside class in clubs and hackathons
Securing an internship to learn with a job
When I was in college, I wanted to be involved in things that would change the world.
—Elon Musk
Going to college to learn how to code is probably the most traditional and expensive path you can take. A bachelor’s degree, designed to take four years, is rooted in the tradition of the English university system and was made popular by the GI Bill after World War II. More recently, the two-year associate degree has become more popular. It costs less than a bachelor’s degree, but many are designed as a way to eventually transfer to a four-year bachelor degree program.
But when it comes to computer programmers, you likely know more people who didn’t graduate from college than did. Entrepreneurs such a Bill Gates, Steve Jobs, Mark Zuckerberg, and Larry Ellison dropped out of college to create technology companies worth billions of dollars. Still, the world’s biggest technology companies continue to hire mainly college graduates.
Whether you’re thinking about going to college, are already in college, or attended college and want another degree, this chapter is for you. I explore learning to code in college or graduate school, and then building your credibility with an internship.
The recent media attention on coding, with movies such as The Social Network and TV shows such as Silicon Valley, might make it seem like everyone in college is learning how to program. Although computer science (CS) graduates earn some of the highest salaries in the US (see Figure 11-1), less than 3 percent of students major in computer science, and less than 1 percent of AP exams taken in high school are in computer science.
The supply of students is low but improving relative to the jobs that are available. Companies such as Apple, Microsoft, Yahoo!, Facebook, and Twitter recruit computer science engineers from schools such as Carnegie Mellon, MIT, and Stanford. It’s not just the companies you read about in the news that are hiring either. CS graduates are in high demand — the Bureau of Labor Statistics estimates that by 2020 there will be 1.4 million computing jobs but only 400,000 trained computer science students to fill those jobs.
Yet far more important to employers than the name of the school you went to is what you did while you were in school. Employers will ask how you challenged yourself with your course load, and the applications you built and why.
College CS courses offer a sweeping survey of entire computer systems from the hardware used to allocate memory to the high-level software that runs programs and the theories used to write that software. As a result, you gain a great sense for why computer systems behave as they do, which gives you the foundation to advance a technology or a programming language when the need arises.
This approach differs dramatically from the learning you’d typically do by yourself or in a boot camp, where the focus is only on software development in a specific language such as Python or Ruby. Given the typical 12-week duration of a boot camp, there isn’t much time for anything else.
The core CS curriculum across universities is similar. Table 11-1 compares select core curriculum classes required as part of the Computer Science degree at Stanford and Penn State — a private university on the West Coast and a public university on the East Coast, respectively. Both have introductory classes to acquaint you with programming topics, math classes that cover probability, hardware classes for low-level programming and memory storage, software classes for designing algorithms, and higher level classes that cover advanced topics such as artificial intelligence and networking.
Table 11-1 CS Select Core Curriculum at Stanford and Penn State
Course name |
Course description |
Stanford |
Penn State |
Programming Abstractions |
Intro to programming using C++ with sorting and searching |
CS 106B |
CMPSC 121 |
Programming with Web Applications |
Intro to graphics, virtual machines, and programming concepts using Java |
N/A |
CMPSC 221 |
Math Foundations of Computing |
Topics include proofs, logic, induction, sets, and functions |
CS 103 |
CMPSC 360 |
Probability |
Probability and statistics relevant to computer science |
CS 109 |
STAT 318 |
Algorithms |
Algorithm types (e.g., random) and complexity |
CS 161 |
CMPSC 465 |
Hardware systems |
Machine registers, assembly language, and compilation |
CS 107 |
CMPSC 311 |
Computer systems |
Storage and file management, networking, and distributed systems |
CS 110 |
N/A |
Operating systems |
Designing and managing operating and system tasks |
CS 140 |
CMPSC 473 |
Computer and network security |
Principles of building and breaking secure systems |
CS 155 |
CMPSC 443 |
Intro to Artificial Intelligence |
AI concepts such as searching, planning, and learning |
CS 121 |
CMPSC 448 |
Intro to Databases |
Database design and using SQL and NoSQL systems |
CS 145 |
CMPSC 431W |
Until recently, universities generally did not teach web programming courses. As web programming has increased in popularity, this has begun to change — for example, Stanford offers a web programming class (CS 142) that teaches HTML, CSS, and Ruby on Rails, and Penn State has a similar class that teaches web programming with Java.
Many students complement their coursework by applying what they’ve learned in a tangible way. Your coursework will include project work, but projects assigned in class may not have changed in a few years to make it easier for the instructor to provide support and grade your work. Also, with so many technologies constantly popping up, using your coding skills outside the classroom will help build confidence and skill.
One option is to code side projects, which are personal coding projects that perform some small basic utility and can be built in a short amount of time, over a weekend to a few months at most. For example, not many people know that before Mark Zuckerberg built Facebook, he had coded many side projects, including an instant messaging client for his dad’s dental practice, an MP3 player that suggested the next song to listen to, and a tool that helped students choose their semester schedule based on which classes their friends were enrolling in. In another example, three students at Tufts University wanted an easy way to find the cheapest place to buy all their textbooks. They created a site called GetchaBooks, which lets students select the classes they would be taking in a semester and then retrieved the full list of books needed and the total prices across many stores to find the cheapest price. Although the site is no longer actively developed, all the code is open sourced and can be viewed either at getchabooks.com
or github.com/getchabooks/getchabooks
.
In addition to coding on your own, coding and discussing technology topics with others can be more engaging. On-campus clubs are usually formed by students and cater to almost every interest. You can find clubs on robotics, financial technologies such as bitcoin, technology investing from the venture capital stage to the public equities stage, and more.
The most intense extracurricular pursuit for a student is participating in hackathons. A hackathon is a one-day to weekend-long event with the goal of brainstorming, designing, and building a small useful app. Hackathons are most popular among students, who often stay up all night coding their apps, while the hosts are often technology companies. However, some of the largest hackathons, such as CalHacks, which is hosted by UC Berkeley, and PennApps, which is hosted by the University of Pennsylvania (see Figure 11-2), are organized by students and attended by thousands of students from schools around the country.
You may not be able to afford the time, expense, or commitment demanded by a four-year degree. Even though some college offer financial aid, not earning money for four years or earning a far reduced wage may not be feasible, especially if you have to support yourself or family members.
One alternative to the Bachelor of Arts (BA) degree is the Associate of Arts (AA) degree, which is typically granted by community colleges or technical schools. You can complete an AA degree in two years. In addition to taking less time, tuition and fees, according to the College Board, are on average $3,200 per year, compared to $9,000 per year at public four-year institutions. Courses are also offered during evenings and on weekends, so students can work while attending school. When evaluating an institution that grants the AA degree, review the instructors teaching the courses and make sure they are experienced practitioners in the field. Additionally, see the types of jobs recent graduates went on to do and the employers they worked for to make sure that both match with your goals.
A close relative of the AA degree is a certificate granted by a school of continuing education. Certificates are non-credit offerings completed within a year. They usually cost less than $10,000 but don’t result in a degree. To get the most bang for your buck, get your certificate from a school with a good regional or even national reputation. For example, NYU has a Certificate in Web Development that teaches web development basics with HTML, CSS, and JavaScript along with more advanced topics such as PHP, a popular programming language for the web, and SQL, a language used to query databases. See Figure 11-3. Learning these topics in a structured way from an instructor can help jumpstart your learning so you can teach yourself additional topics on your own.
The options for learning how to code never seem to end, and advanced degrees typically appeal to a particular group of people. While not necessary for either learning to code or obtaining a coding job, an advanced degree can help accelerate your learning and differentiate you from other job candidates. The two types of advanced degree programs follow:
Master’s degree: A technical degree that allows you to explore and specialize in a particular area of computer science such as artificial intelligence, security, database systems, or machine learning. Based on the course load, the degree typically takes one or two years of full-time, in-person instruction to complete. Upon completion, the degree can be a way for a student who pursued a non-technical major to transition into the field and pursue a coding job. Alternatively, some students use the master’s degree experience as a way to gauge their interest in or improve their candidacy for a PhD program.
A growing number of part-time online master’s degree programs are available. For example, Stanford and Johns Hopkins both offer a master’s degree in Computer Science with a concentration in one of ten topics as part of an online part-time degree that takes on average three to five years to complete. Similarly, Northwestern University offers a master’s degree in Predictive Analytics, an online part-time program in big data that teaches students SQL, NoSQL, Python, and R.
Doctorate degree: A program typically for people interested in conducting research into a specialized topic. PhD candidates can take six to eight years to earn their degree, so it’s not the most timely way to learn how to code. PhD graduates, especially those with cutting-edge research topics, differentiate themselves in the market and generally work on the toughest problems in computer science. For example, Google’s core search algorithm is technically challenging in a number of ways — it takes your search request, compares it against billions of indexed web pages, and returns a result in a less than a second. Teams of PhD computer scientists work to write algorithms that predict what you’re going to search for, index more data (such as from social networks), and return results to you five to ten milliseconds faster than before.
Students who enroll and drop out of PhD programs early have often done enough coursework to earn a master’s degree, usually at no cost to the student because PhD programs are typically funded by the school.
The master’s degree school curriculum for computer science usually consists of 10 to 12 computer science and math classes. You start with a few foundational classes, and then specialize by focusing on a specific computer science topic. The PhD curriculum follows the same path, except after completing the coursework, you propose a previously unexplored topic to further research, spend three to five years conducting original research, and then present and defend your results before other professors appointed to evaluate your work.
Table 11-2 is a sample curriculum to earn a master’s degree in CS with a concentration in Machine Learning from Columbia University. Multiple courses can be used to meet the degree requirements, and the courses offered vary by semester.
Table 11-2 Columbia University MS in Computer Science
Course Number |
Course Name |
Course Description |
W4118 |
Operating Systems I |
Design and implementation of operating systems including topics such as process management and synchronization |
W4231 |
Analysis of Algorithms I |
Design and analysis of efficient algorithms including sorting and searching |
W4705 |
Natural Language Processing |
Natural language extraction, summarization, and analysis of emotional speech |
W4252 |
Computational Learning Theory |
Computational and statistical possibilities and limitations of learning |
W4771 |
Machine Learning |
Machine learning with classification, regression, and inference models |
W4111 |
Intro to Databases |
Understanding of how to design and build relational databases |
W4246 |
Algorithms for Data Science |
Methods for organizing, sorting, and searching data |
W4772 |
Advanced Machine Learning |
Advanced machine learning tools with applications in perception and behavior modeling |
E6232 |
Analysis of Algorithms II |
Graduate course on design and analysis of efficient approximation algorithms for optimization problems |
E6998 |
Advanced Topic in Machine Learning |
Graduate course covers current research on Bayesian networks, inference, Markov models, and regression |
The curriculum, which in this case consists of ten classes, begins with three foundational classes, and then quickly focuses on an area of concentration. Concentrations vary across programs, but generally include the following:
Students are encouraged in master’s degree programs and required in PhD programs to conduct original research. Research topics vary from the theoretical, such as estimating how long an algorithm will take to find a solution, to the practical, such optimizing a delivery route given a set of points.
Sometimes this academic research is commercialized to create products and companies worth hundreds of millions to billions of dollars. For example, in 2003, Farecast created an algorithm that analyzed 12,000 airline ticket prices. Later, it could analyze billions of ticket prices in real-time, and predict whether the price of your airline ticket would increase, decrease, or stay the same. Microsoft purchased the technology for $100 million and incorporated it into its Bing search engine.
In another example, Shazam was based on an academic paper that analyzed how to identify an audio recording based on a short low-quality sample, usually an audio recording from a mobile phone. Today, Shazam lets a user record a short snippet of a song, identifies the song title, and offers the song for purchase. The company has raised over $100 million in funding for operations and is privately valued at over $1 billion. Both products were based on published research papers that identified a problem that could be addressed with technology, and presented a technology solution that solved existing constraints with high accuracy.
Your own research may not lead to the creation of a billion dollar company, but it should advance, even incrementally, a solution for a computer science problem or help eliminate an existing constraint.
Your classroom work helps create a theoretical foundation but can be divorced from the real world. Actual real-world problems often have inaccurate or incomplete data and a lack of obvious solutions. One way to bridge the gap from the classroom to the real world is to take on an internship.
Internships are ten- to twelve-week engagements, usually over the summer, with an employer on a discrete project. The experience is meant to help an intern assess whether the company and the role are a good fit for permanent employment, and for the company to assess the intern’s abilities.
The competition for interns is just as strong as it is for full-time employees, so interns can expect to be paid. Top tech companies pay interns between $6,000 and $8,000 per month, with Palantir, LinkedIn, and Twitter topping the list. After the internship is finished, companies offer successful interns anywhere from $5,000 to $100,000 signing bonuses to return to the firm to work full-time.
Companies structure their internship program differently, but the following configurations are more common than others:
Much of the advice in Part IV for obtaining a full-time job applies to securing an internship offer as well. There are a few strategies to keep in mind when pursuing an internship.
Choose products and companies you are passionate about. As an intern, you join a company for three months at most, and much of that time is spent meeting new people, understanding the company, and fitting into existing processes. As a passionate power user of the product, your excitement will naturally show, and your ideas will give the company a sense for what you want to work on and provide a fresh and valuable perspective to the team, which likely feels that they have already explored every possible idea. Be able to describe how you use the product and what additional features would help increase your engagement or retention.
After you’ve chosen a few companies, start looking for current students who have worked at the company as well as school alumni who currently work at the company. Reach out by email and schedule short phone calls or a coffee chat no longer than thirty minutes to try and build a connection. Current students can share information about their experience, tell you which groups have the greatest need, and share some of the company culture such as what the company values. Alumni will be able to share much of the same information, but they can also send a recommendation to HR on your behalf or may be able to hire you.
Finally, include a mix of startups and more established companies in your search process. Given the number of interviews they do, established companies can be formulaic in their interview and hiring decisions, often looking for candidates from specific schools with a minimum GPA. If you aren’t attending a top school or have below a 3.0 (out of 4.0) GPA, you should still apply to the larger companies and include an explanation for your lower GPA if one applies. Another option is to apply to startups, which will likely care more about the products you’ve built than your grade in Chemistry. The tradeoff is that startups likely have less time and people to help train you and a smaller selection of projects for you to choose from. After you join a company and finish a brief orientation period, you’ll often need to start coding right away and contributing to the product.
3.144.9.124