Chapter 11

Exploring Undergraduate and Graduate Degrees

In This Chapter

arrow Learning to code with a bachelor’s or master’s degree

arrow Coding outside class in clubs and hackathons

arrow 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.

Getting a College Degree

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.

image

Source: Digest of Educational Statistics; credit: Quoctrung Bui/NPR

Figure 11-1: Bachelor’s degrees awarded in CS over the last 40 years, courtesy of NPR.

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 computer science curriculum

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.

Doing extracurricular activities

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.

tip The Dorm Room Fund is a student-run venture capital firm with locations in San Francisco, Boston, New York, and Philadelphia that invests in student-run companies. Backed by First Round Capital, the goal is to nurture and support young technology companies, teach students how to evaluate and invest in technology companies, and find the next billion dollar company on a college campus.

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.

image

Credit: Andrew Mager via Flickr

Figure 11-2: Students show a mentor their mobile application at PennApps.

Two-year versus four-year school

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.

image

Figure 11-3: NYU’s Certificate in Web Development offers classes in SQL and PHP.

warning When enrolling in a certificate program, keep in mind that instructor quality can be highly variable. Make sure you talk to current students or find some student reviews before signing up for either the certificate program or courses that the certificate requires.

Enrolling in an Advanced Degree Program

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.

    tip 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.

    tip 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.

Graduate school computer science curriculum

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:

  • Security: Assigning user permissions and preventing unauthorized access, such as preventing users from accessing your credit card details on an e-commerce site.
  • Machine learning: Finding pattern in data, and making future predictions, such as predicting what movie you should watch next based on the movies you have already seen and liked.
  • Network systems: Protocols, principles, and algorithms for how computers communicate with each other, such as setting up wireless networks that work well for hundreds of thousands of users.
  • Computer vision: Duplicating the ability of the human eye to process and analyze images, such as counting the number of people who enter or exit a store based on a program analyzing a live video feed.
  • Natural language processing: Automating the analysis of text and speech, such as using voice commands to convert speech to text.

Performing research

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.

Interning to Build Credibility

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.

Types of internship programs

Companies structure their internship program differently, but the following configurations are more common than others:

  • Summer internship: The majority of internships happen during the summer. Because of the work involved in organizing an intern class, larger companies usually have a formal process with application deadlines and fixed dates when interviews for the internship are conducted. After offers are extended, companies ideally screen projects given to interns to make sure the work is interesting and substantive. There are also a significant number of social events so that full-time employees and interns can meet in an environment outside work.
  • School-year internship: Some internships take place during the school year, from September to May. These programs are usually smaller, hiring is on an as-needed basis, and the entire process is less formalized. Usually, the intern does more work to find divisions who need extra help, networks with managers of those divisions, and then finally interviews for and accepts an internship position. You can get a more realistic view of what working at the company is like because there likely aren’t many other interns working with you, and you might be able to integrate more closely with the team.
  • Fellowship: Many students get the itch to try a longer professional experience before graduation. These experiences, called fellowship programs, last six to twelve months and give a person enough time to work on a project to make substantive contribution. For undergraduates, the work confirms an existing interest or creates an interest in a new area of technology. For graduate students, the work can highlight the difference between theory and practice, inform an area of research, or help them break into a new industry.

tip Positions for internships are often more selective than positions for full-time jobs, so apply early and for more than one internship position. If you don’t receive an internship, try again for a full-time position. Companies have large hiring needs and one purpose for hiring summer interns is to ensure that the interns have a great time at the company so when they return to campus they tell other students, who then feel more comfortable applying.

Securing an internship

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.

tip For any product that has a public profile, link to your profile so team members can easily see how frequently you use the product.

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.

tip There is a balance between the response rate, ability to help, and seniority of a person you reach out to. Try to reach for the most senior alumni you can find at a company, because a quick email from them to HR will guarantee an interview, but recognize that they may not always have the time to respond. Alternatively, more junior employees will likely have more time to chat with you but likely do not have as much influence over interview or hiring decisions.

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.

warning Be careful of startups formed by a nontechnical founder that have not yet built a product. Sometimes these companies are looking for cheap labor to help build the first version — the experience can involve many hours, unreasonable deadlines, and low to no compensation, especially if you’re paid in equity. As an example, you can see a sample of recruiting pitches for coders that nontechnical founders sent to the University of Pennsylvania CS mailing list at whartoniteseekscodemonkey.tumblr.com.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.221.193.255