Читать книгу Coding All-in-One For Dummies - Никхил Абрахам - Страница 6
Book 2
Career Building with Coding
Chapter 1
Exploring Coding Career Paths
ОглавлениеIN THIS CHAPTER
❯❯ Using coding in your existing job
❯❯ Exploring entry-level full-time coding roles
❯❯ Understanding skills and tasks in various coding roles
“We shall not cease from exploration, and the end of all our exploring will be to arrive where we started and know the place for the first time.”
– T.S. ELIOT
For many people, the words “coding career” evoke an image of a person sitting in a dimly lit room typing incomprehensible commands into a computer. The stereotype has persisted for decades – just watch actors such as Matthew Broderick in War Games (1983), Keanu Reeves in The Matrix (1999), or Jesse Eisenberg in The Social Network (2010). Fortunately, these movies are not accurate representations of reality. Just like a career in medicine can lead to psychiatry, gynecology, or surgery, a career in coding can lead to an equally broad range of options.
In this chapter, you see how coding can augment your existing job across a mix of functions, and you explore increasingly popular careers based primarily on coding.
Augmenting Your Existing Job
Many people find coding opportunities in their existing job. It usually starts innocently enough, and with something small. For example, you may need a change made to the text on the company’s website, but the person who would normally do that is unavailable before your deadline. If you knew how to alter the website’s code, you could perform your job faster or more easily. This section explores how coding might augment your existing job.
CHOOSING A CAREER PATH
Coding career paths are extremely varied. For some people, the path starts with using code to more efficiently perform an existing job. For others, coding is a way to transition to a new career. As varied as the career path is, so too are the types of companies that need coders.
As more people carry Internet-capable mobile phones, businesses of every type are turning to coders to reach customers and to optimize existing operations. No business is immune. For example, FarmLogs is a company that collects data from farm equipment to help farmers increase crop yields and forecast profits. FarmLogs needs coders to build the software that collects and analyzes data, and farmers with large operations may need coders to customize the software.
To build or customize software, you’ll need to learn new skills. Surprisingly, the time required to learn and start coding can range from an afternoon of lessons to a ten-week crash course to more time-intensive options, such as a four-year undergraduate degree in computer science.
Creative design
Professionals in creative design include those who
❯❯ Shape how messages are delivered to clients.
❯❯ Create print media such as brochures and catalogs.
❯❯ Design for digital media such as websites and mobile applications.
Traditionally, digital designers, also known as visual designers, created mockups, static illustrations detailing layout, images, and interactions, and then sent these mockups to developers who would create the web or mobile product. This process worked reasonably well for everyday projects, but feedback loops started becoming longer as mockups became more complex. For example, a designer would create multiple mockups of a website, and then the developer would implement them to create working prototypes, after which the winning mockup would be selected. As another example, the rise of mobile devices has led to literally thousands of screen variations between mobile phones and tablets created by Apple, Samsung, and others. Project timelines increased because designers had to create five or more mockups to cover the most popular devices and screen sizes.
As a designer, one way to speed up this process is to know just enough code to create working prototypes of the initial mockups that are responsive, which means one prototype renders on both desktop and mobile devices. Then project managers, developers, and clients can use these early prototypes to decide which versions to further develop and which to discard. Additionally, because responsive prototypes follow a predictable set of rules across all devices, creating additional mockups for each device is unnecessary, which further decreases design time. As mobile devices have become more popular, the demand for designers who understand how to create good user interactions (UI) and user experiences (UX) has greatly increased.
Prototyping tools such as InVision and Axure provide a middle option between creating static illustrations and coding clickable prototypes by allowing designers to create working prototypes without much coding. Still, a person with basic coding skills can improve a prototype generated with these tools by making it more interactive and realistic. Designers who can design and code proficiently are referred to as “unicorns” because they are rare and in high demand.
Content and editorial
Professionals in content and editorial perform tasks such as the following:
❯❯ Maintain the company’s presence on social networks such as Twitter and Facebook.
❯❯ Create short posts for the company blog and for email campaigns.
❯❯ Write longer pieces for articles or presentations.
At smaller companies, content creation is usually mixed with other responsibilities. At larger companies, creating content is a full-time job. Whether you’re blogging for a startup or reporting for The Wall Street Journal, writers of all types face the same challenges of identifying relevant topics and backing it up with data.
Traditionally, content was written based on a writer’s investigation and leads from a small group of people. For example, you might write a blog post about a specific product’s feature because a major customer asked about it during a sales call. But what if most of your smaller customers, whom you don’t speak with regularly, would benefit from a blog post about some other product feature?
As a writer, you can produce more relevant content by writing code to analyze measurable data and use the conclusions to author content. I Quant NY (http://iquantny.tumblr.com), an online blog, is one shining example of data driving content creation. In 2014, the site’s author, Ben Wellington, analyzed public data on New York City parking tickets, bike usage, and traffic crashes, and wrote about his conclusions. His analysis led to original stories and headlines in major newspapers such as The New York Times and New York Post (see Figure 1-1).
FIGURE 1-1: Article about a ticket-generating fire hydrant.
Human resources
Those who work in human resources might be expected to do the following:
❯❯ Source and screen candidates for open company jobs.
❯❯ Manage payroll, benefits, performance, and training for employees.
❯❯ Ensure company compliance with relevant laws, and resolve disputes.
Traditionally, HR professionals have not performed much coding in the workplace. The human- and process-driven components of the job generally outweighed the need for automation that coding typically provides. For example, a dispute between coworkers is usually resolved with an in-person meeting organized by HR, not by a computer program. However, the recruiting function in HR may benefit from coding. Hiring employees has always been challenging, especially for technical positions where the demand for employees far exceeds the supply of available and qualified candidates.
If you’re responsible for technical recruiting and want to increase the number of candidates you reach out to and source, one solution is to develop some coding experience that enables you to discover people who may not meet the traditional hiring criteria. For example, a company might ordinarily look for developers from a specific university with at least a 3.0 grade point average.
However, increasingly developers are self-taught and may have dropped out or not attended university at all. A technical recruiter who can evaluate code that self-taught developers have written and made publicly available on sites such as GitHub or Bitbucket can qualify candidates who previously would have been rejected. Additionally, recruiters working with technical candidates improve outcomes by being able to speak their language.
Companies such as Google and Facebook have taken a technical approach to managing the expensive and difficult problem of finding and retaining employees. These companies perform people analytics on their employees by looking at everyone who applies and analyzing factors that contribute to hiring, promotion, and departure, such as undergraduate GPA, previous employer, interview performance, and on-the-job reviews. At Google, this analysis requires some serious coding because more than two million people apply each year.
Product management
Product managers, especially those working on software and hardware products, perform tasks like the following:
❯❯ Manage processes and people to launch products on time and on budget, maintain existing products, and retire old products.
❯❯ Connect all departments that create a product, including sales, engineering, marketing, design, operations, and quality control.
❯❯ Guide the product definition, roadmap, and business model based on understanding the target market and customers.
The product manager’s role can vary greatly because it is a function of the company culture and the product being built. This is especially true for technical products; in some companies, product managers define the problem and engineers design hardware and software to solve those problems. In other companies, product managers not only define the problem but also help design the technical solution.
One of the hardest challenges and main responsibilities of a product manager is to deliver a product on time and within budget. Timelines can be difficult to estimate, especially when new technology is used or existing technology is used in a new way. When you manufacture, say, a chair, it has a set product definition. For a product with a technical component, additional features can creep into the project late in development, or a single feature might be responsible for the majority of time or cost overruns. The product manager helps to keep these variables in check.
The product manager working on a technical product who has some coding skill will be able to better estimate development cycles and anticipate the moving pieces that must come together. In addition, solving technical challenges that arise and understanding the tradeoffs of one solution versus another are easier with some coding background.
Business analysts or integration specialists translate business requirements from customers into technical requirements that are delivered to project managers and that are eventually implemented by back-end engineers.
Sales and marketing
Sales and marketing professionals perform tasks such as
❯❯ Segment existing customers and identify new potential customers.
❯❯ Generate and convert prospective leads into sold customers.
❯❯ Craft product and brand images to reflect company and customer values.
Salespeople and marketers expend a great deal of effort placing the right message at the right time before the right customer. For decades, these messages were delivered in newspapers, in magazines, and on television and radio. Measuring their effect in these channels was difficult, part art and part science. With the movement of messages to the Internet, we can now measure and analyze every customer view and click. Online marketing has created another problem: Online customers generate so much data that much of it goes unanalyzed.
The salesperson or marketer who can code is able to better target customers online. If you’re a salesperson, generating leads is the start of the sales funnel, and coding enables you to find and prioritize online website visitors as potential customers. For example, when Uber launched their mobile application, it was available only in San Francisco. The company tracked and analyzed the location of users who opened the app to decide which city to launch in next.
If you’re in marketing, identifying whom to market to is as important as identifying what message to market. Website visitors reveal behavioral and demographic data about themselves, including location, web pages visited, visit duration, and often gender, age, employer, and past online purchases. Even moderately successful websites generate tens of millions of records a month, and coding can help spot trends such as the 25-to-29-year-old females in Nebraska who are suddenly interested in but aren’t purchasing your product. Marketing messages become more efficient when you know the segments you’re targeting and how they are responding.
Legal
Professionals providing legal services might perform the following tasks:
❯❯ Identify and manage legal risks in agreements and transactions.
❯❯ Ensure ongoing compliance with relevant laws and regulations.
❯❯ Review documents such as prior cases, business records, and legal filings.
❯❯ Resolve disputes through litigation, mediation, and arbitration.
Historically, the legal profession has been resilient to advances in technology. I include it here because if lawyers who code are able to more efficiently perform their jobs, professionals in any other industry should be able to benefit from coding as well.
Coding knowledge may not assist a lawyer with delivering a passionate argument in court or finalizing a transaction between two Fortune 500 companies, but the bulk of a lawyer’s time is spent on document review, a task that could benefit from coding knowledge.
When reviewing legal documents, a lawyer might read previous cases in a litigation, check existing patent filings before filing a new patent, or examine a company’s contracts in preparation for a merger. All these tasks involve processing large amounts of text, and current legal tools enable, for example, wildcard searching (such as using new* to find New York, New Jersey, and New Hampshire).
However, the use of regular expressions – code that searches for patterns in text – could help lawyers review documents faster and more efficiently. See Figure 1-2.
FIGURE 1-2: Use RegExr.com to practice searching with regular expressions.
For example, suppose you are a government lawyer investigating an investment bank for fraudulently selling low-quality mortgages. The investment bank has produced two million documents, and you want to find every email address mentioned in these documents. You could spend months reviewing every page and noting the email addresses, or you could spend a few minutes writing a regular expression that returns every email address automatically.
As the government lawyer reviewing those documents, one of many regular expressions you could use to find email addresses is .+@.+\..+. Much like the * wildcard character, each symbol represents a pattern to match. I show it here only as an example, so don’t let the code intimidate you. This regular expression first looks for a least one character before and after the @ symbol, and at least one character before and after a period that appears following the @ symbol. This pattern matches the username@domain.com email address format.
David Zvenyach, a government lawyer and computer programmer, has created two websites of interest to lawyers:
❯❯ The first site, SCOTUS Servo, logs a message whenever the Supreme Court changes an already issued opinion and is available at https://twitter.com/scotus_servo.
❯❯ The second site, Coding for Lawyers, teaches lawyers code that could be helpful in the practice of law and is available at http://codingforlawyers.com.
Finding a New Coding Job
The career changer looking to transition to a coding job can choose from a variety of roles. This section describes the most popular coding jobs today. In these roles at the entry level, your coding knowledge will be used daily. As you become more skilled and senior, however, your people-management responsibilities will increase while the number of lines of code you write will decrease. For example, Mark Zuckerberg wrote the code for the initial version of Facebook and continued to write code for two years after the website launched, after which he stopped coding for almost six years to focus on managing the team’s growth.
Some coding roles may appeal to you to more than others. In addition to understanding jobs available in the market, some self-reflection can help you make the best choice possible. As you review the role descriptions in this section, take a personal inventory of
❯❯ Tasks you enjoy and dislike in your current role
❯❯ Skills you already possess, and the skills you will need to learn
❯❯ Interests you want to pursue that will make you excited about working every day
Although no job is completely secure, the demand for technical roles is high and continues to grow. The US government estimates that by 2020, more than 1 million computer science-related jobs will be unfilled, with 1.4 million available jobs and only 400,000 computer science students trained to fill them.
Front-end web development
Web developers create websites. There are two types of web developers: front-end developers and back-end developers. Each requires different skills and tasks, which are discussed in this section.
Front-end web developers code everything visible on the web page, such as the layout, image placement and sizing, input features including buttons and text boxes, and the site’s general look and feel. These effects are created with three major programming languages: HTML (Hypertext Markup Language), which is used to place text on the page, CSS (Cascading Style Sheet), which styles the text and further contributes to its appearance, and JavaScript, which adds interactivity.
In addition to these three languages, front-end developer job postings reveal a common set of skills that employers are looking for:
❯❯ SEO (search engine optimization): Creating web pages for humans might seem like the only goal, but machines, specifically search engines, are the primary way most users find websites. Search engines “view” web pages differently than humans, and certain coding techniques can make it easier for search engines to index an individual web page or an entire website.
❯❯ Cross-browser testing: Users navigate web pages by using four major browsers (Chrome, Firefox, Internet Explorer, and Safari), each with two or three active versions. As a result, a web developer must be skilled in testing websites across eight or more browser versions. Developing for older browsers is typically more difficult because they support fewer features and require more code to achieve the same effect as modern browsers.
❯❯ CSS tools: Developers use precompilers and CSS frameworks to make coding in CSS easier:
• Precompilers extend CSS functionality with features such as variables and functions, which make it easier to read and maintain CSS code.
CSS frameworks, such as Bootstrap and Base, provide prewritten HTML and CSS code that makes it easier to develop a website with a consistent look across desktop and mobile devices.
Proficiency in all precompilers and frameworks is unnecessary, but knowledge of one precompiler and framework can be helpful.
❯❯ JavaScript frameworks: Developers use prewritten JavaScript code called a JavaScript framework to add features to web pages. Some popular JavaScript frameworks are Angular.js and Ember.js. Proficiency in the over 30 JavaScript frameworks is unnecessary, but knowing one or two can be helpful.
Words like HTML, CSS, and JavaScript might seem intimidating at first, especially if you have no prior experience in web development. I mention some terminology here and also in the glossary because knowing the names of these programming language is the first step to learning more about each of them.
None of the work a web developer does would be possible without product managers and designers. Developers work with product managers to ensure that the product scope and timelines are reasonable. Additionally, product managers make sure that the technical and nontechnical teams are communicating and aligned. Developers also work with designers who create mockups, or illustrations of the website, images, and the flow users take to move between web pages. After the mockups are created, front-end developers code the website to match the mockups as closely as possible.
Back-end web development
Back-end web developers code everything that is not visible on the web page but is necessary to support the front-end developer’s work. Back-end development happens in the following three places:
❯❯ Server: The server is the computer hosting the coding files that include the website application and the database. When you visit www.google.com, for example, your web browser requests the web page from Google servers, which respond with a copy of the web page you see in your browser.
❯❯ Application: The application handles the content in web pages sent to users and the changes made to the database. Applications are written using programming languages like Ruby, Python, and PHP, and run only on the server. Proficiency in one language is usually sufficient.
❯❯ Database: The database stores website and user data so it is available for future browsing sessions. The simplest database is an Excel spreadsheet, which is ill suited for web development. Databases such as PostgreSQL and MongoDB are optimized for website use; usually only one these databases is used per website.
As an example of back-end web development, suppose that you visit www.amazon.com using your web browser. Your computer makes a request to the Amazon server, which runs an application to determine what web content to serve you. The application queries a database, and past purchases and browsing show that you have an interest in technology, legal, and travel books. The application creates a web page that displays books matching your interests, and sends it to your computer. You see a book on bike trails in New York, and click to purchase it. After you enter your credit card and shipping details, the application stores the information in a database on the server for easy checkout in the future.
For back-end developers, one major part of the job is writing code for the application and database to render web pages in the browser. Employers are interested in additional skills such as these:
❯❯ Scaling: Back-end developers must change and optimize application code, servers, and databases to respond to increases in website traffic. Without the right planning, a mention of your website on a morning talk show or in the newspaper could result in a “website not available” error message instead of thousands of new customers. Scaling involves balancing the cost of optimizing the website with leaving the configuration as-is.
❯❯ Analytics: Every online business, whether large or small, has key website performance indicators, such as new user signups and retention of existing users. Back-end developers can implement and track these metrics by querying information from the website database.
❯❯ Security: Websites with a substantial number of users become a target for all types of security risks. Attackers may automate signups, in which fake profiles post spam that promotes unrelated products. Additionally, you may receive a massive amount of traffic in a short period of time, called a denial of service attack, which prevents legitimate customers from accessing your website. Or attackers might try to detect weaknesses in your servers to gain unauthorized access to sensitive information such as email addresses, passwords, and credit card numbers. In 2014, major data breaches were uncovered at large corporations including Sony, Target, and JP Morgan. Prevention of these attacks rests, in part, with back-end developers.
The back-end developer is a part of the product team and works closely with front-end developers and product managers. Unlike front-end developers, back-end developers do not interact frequently with designers because the job is not as visual or based on website appearance.
Mobile application development
Mobile application developers create applications that run on cell phones, tablets, and other mobile devices. Mobile applications can be more challenging to create than browser-based websites because users expect the same functionality on a device without a dedicated keyboard and with a smaller screen.
In 2014, users purchased and spent more time on mobile devices than traditional PC desktops, marking a major milestone and the continuation of a trend years in the making.
Users today prefer to download and use native mobile applications from an app store, though it is possible to create mobile optimized websites that run in the browser using HTML, CSS, and JavaScript. The two most popular app stores are
❯❯ The Apple App Store, which hosts apps for iOS devices such as iPhones and iPads
❯❯ The Google Play Store, which hosts apps for phones and tablets running the Android operating system
Developers code apps for iOS devices by using the Objective-C and Swift programming languages, and they code apps for Android devices by using Java.
Objective-C, which was invented in 1983, is traditionally and currently used to create iOS apps. Swift is a new programming language that Apple created and released in 2014. This programming language was designed from the ground up as a replacement for Objective-C.
Mobile developers are in high demand as mobile usage overtakes browsing on traditional PCs. In addition to creating apps, employers also value these skills:
❯❯ Location services: The service most frequently integrated into and used in mobile applications is location. Maps, reservation, and transportation applications all become more useful when they take into account your current location.
Location services consume battery life rapidly, although specialized techniques can reduce battery drain. Mobile developers who understand these techniques will have a leg up on the competition.
❯❯ Application testing: The number of devices that a mobile developer has to consider is staggering. In addition, an errant line of code can cause a mobile application to install incorrectly or to leak memory until the application crashes. Mobile application-testing software automates the process of testing your application across a variety of device types, saving a huge amount of time and a drawer full of phones. Mobile developers who can integrate testing software such as Crashlytics into their applications will get the data needed to continuously improve their application code.
Mobile application developers work with designers to create easy and intuitive mobile experiences, with back-end developers to ensure that data submitted by or received from the phone is in sync with data on the website, and with product managers so that the application launches smoothly.
Data analysis
Data analysts sift through large volumes of data, looking for insights that help drive the product or business forward. This role marries programming and statistics in the search for patterns in the data. Popular examples of data analysis in action include the recommendation engines used by Amazon to make product suggestions to users based on previous purchases and by Netflix to make movie suggestions based on movies watched.
The data analyst’s first challenge is simply importing, cleaning, and processing the data. A website can generate daily millions of database entries of users’ data, requiring the use of complicated techniques, referred to as machine learning, to create classifications and predictions from the data. For example, half a billion messages are sent per day using Twitter; some hedge funds analyze this data and classify whether a person talking about a stock is expressing a positive or negative sentiment. These sentiments are then aggregated to see whether a company has a positive or negative public opinion before the hedge fund purchases or sells any stock.
Any programming language can be used to analyze data, but the most popular programming languages used for the task are R, Python, and SQL. Publicly shared code in these three languages makes it easier for individuals entering the field to build on another person’s work. While crunching the data is important, employers also look for data analysts with skills in the following:
❯❯ Visualization: Just as important as finding insight in the data is communicating that insight. Data visualization uses charts, graphs, dashboards, infographics, and maps, which can be interactive, to display data and reduce the complexity such that one or two conclusions appear obvious, as shown in Figure 1-3 (courtesy of I Quant NY). Common data visualization tools include D3.js, a JavaScript graphing library, and ArcGIS for geographic data.
❯❯ Distributed storage and processing: Processing large amounts of data on one computer can be time-intensive. One option is to purchase a single faster computer. Another option, called distributed storage and processing, is to purchase multiple machines and divide the work. For example, imagine that we want to count the number of people living in Manhattan. In the distributed storage and processing approach, you might ring odd-numbered homes, I would ring even-numbered homes, and when we finished, we would total our counts.
FIGURE 1-3: The two Manhattan addresses farthest away from Starbucks.
Data analysts work with back-end developers to gather data needed for their work. After the data analysts have drawn conclusions from the data and come up with ideas on improving the existing product, they meet with the entire team to help design prototypes to test the ideas on existing customers.