Читать книгу Coding All-in-One For Dummies - Никхил Абрахам - Страница 7
Book 2
Career Building with Coding
Chapter 2
Exploring Undergraduate and Graduate Degrees
Оглавление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 on the 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 as 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 United States (see Figure 2-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.
Source: Digest of Educational Statistics; credit: Quoctrung Bui/NPR
FIGURE 2-1: Bachelor’s degrees awarded in CS over the past 40 years, courtesy of NPR.
The supply of students is low but is 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 of 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 2-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 2-1 CS Select Core Curriculum at Stanford and Penn State
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.
TECHNICAL VERSUS PRACTICAL EDUCATION
As you look at the courses offered in the Stanford and Penn State CS programs, you’ll notice that the overwhelming majority speak to the theory of computer science and aren’t always used every day. For example, as a person interested in software development, you likely aren’t going to use much if any of your hardware systems courses. Note that some classes will be very relevant – algorithms and databases are two topics frequently used in web programming.
However, understanding the theory is useful. For example, database systems were initially created assuming that storage was expensive and the amount of data that needed to be stored would grow linearly. The reality turned out to be different – the cost of hardware plummeted and hard drives became bigger and cheaper, while people generated more data at a faster pace than ever before. Computer scientists, with a solid understanding of databases, took advantage of cheap hardware and created distributed databases, which store data across multiple computers instead of a single one.
Whether or not you should learn programming in college comes down to your goal. If you want to one day be in a position to change the industry or work on cutting-edge technology, the theory you learn studying computer science is without substitute or comparison. There are few other places where you can engage with a professional, in this case a professor, of a high caliber to push the limits of fundamental understanding. Also, specific programming languages and technologies are constantly changing, while the underlying concepts and theories stay the same. Python and Ruby, for example, are only 20 years old.
On the other hand, if your goal is to use these concepts to make a living in the industry instead of trying to change the industry, you could learn to code in a less expensive and less time-intensive way than obtaining a computer science degree.
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.
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 Cal Hacks, which is hosted by UC Berkeley, and PennApps, which is hosted by the University of Pennsylvania (see Figure 2-2), are organized by students and attended by thousands of students from schools around the country.
Credit: Andrew Mager via Flickr
FIGURE 2-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 colleges 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, according to the College Board, tuition and fees 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 noncredit 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 2-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.
FIGURE 2-3: NYU’s Certificate in Web Development offers classes in SQL and PHP.
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. Here are the two types of advanced degree programs:
❯❯ 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 nontechnical 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 becoming 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 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.
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 2-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 2-2 Columbia University MS in Computer Science
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 patterns in data, and making future predictions, such as predicting what movie you should watch next based on the movies you’ve 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 university researchers created an algorithm called Farecast 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 10- to 12-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 a 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.
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.
HOW BOB REN LEARNED TO CODE
Between classes, clubs, hackathons, and internships, the possibilities seem endless for students in college or graduate school to learn how to code. Here is how Bob Ren, a college senior, stitched together his learning experiences while in school.
Bob attended the University of Illinois at Urbana-Champaign. After his first two years, he decided to take a break from school and gain some real-world experience at a technology company. He applied to and joined the fellowship program at Codecademy, a startup in New York. As a Codecademy fellow, Bob worked at the startup for one year as a full-time employee, was paid $80,000, and contributed to product development as an engineer. While at Codecademy, Bob contributed to a number of projects and wrote code to redesign the main website, add language support for Spanish and French, and develop an open-source platform called EventHub, which allows companies to understand various actions that visitors perform on a website.
While at Codecademy, Bob also kept busy outside work. A few months into his fellowship, he attended the Techcrunch Disrupt hackathon, and created a common application for startups based on issues he faced applying for jobs at startups. Like the common application for college, the app was designed so students could enter their information once and apply to multiple startups at the same time. TechCrunch, the startup blog and event organizer, wrote about the project at www.techcrunch.com/2013/04/28/startup_common_application_hackathon.
After the Disrupt Hackathon, Bob continued coding and built the following, either by himself or with a team before eventually joining Facebook as a software engineer:
• LivingLanguage: A Chrome extension that translates random words on any web page into a foreign language you want to learn. The app won first place at the Facebook Summer Hackathon in 2013.
Конец ознакомительного фрагмента. Купить книгу