Programming Interviews Exposed
eBook - ePub

Programming Interviews Exposed

Coding Your Way Through the Interview

  1. English
  2. ePUB (mobile friendly)
  3. Available on iOS & Android
eBook - ePub

Programming Interviews Exposed

Coding Your Way Through the Interview

Book details
Book preview
Table of contents
Citations

About This Book

Ace technical interviews with smart preparation

Programming Interviews Exposed is the programmer's ideal first choice for technical interview preparation. Updated to reflect changing techniques and trends, this new fourth edition provides insider guidance on the unique interview process that today's programmers face. Online coding contests are being used to screen candidate pools of thousands, take-home projects have become commonplace, and employers are even evaluating a candidate's public code repositories at GitHub—and with competition becoming increasingly fierce, programmers need to shape themselves into the ideal candidate well in advance of the interview. This book doesn't just give you a collection of questions and answers, it walks you through the process of coming up with the solution so you learn the skills and techniques to shine on whatever problems you're given.

This edition combines a thoroughly revised basis in classic questions involving fundamental data structures and algorithms with problems and step-by-step procedures for new topics including probability, data science, statistics, and machine learning which will help you fully prepare for whatever comes your way.

  • Learn what the interviewer needs to hear to move you forward in the process
  • Adopt an effective approach to phone screens with non-technical recruiters
  • Examine common interview problems and tests with expert explanations
  • Be ready to demonstrate your skills verbally, in contests, on GitHub, and more

Technical jobs require the skillset, but you won't get hired unless you are able to effectively and efficiently demonstrate that skillset under pressure, in competition with hundreds of others with the same background. Programming Interviews Exposed teaches you the interview skills you need to stand out as the best applicant to help you get the job you want.

Frequently asked questions

Simply head over to the account section in settings and click on “Cancel Subscription” - it’s as simple as that. After you cancel, your membership will stay active for the remainder of the time you’ve paid for. Learn more here.
At the moment all of our mobile-responsive ePub books are available to download via the app. Most of our PDFs are also available to download and we're working on making the final remaining ones downloadable now. Learn more here.
Both plans give you full access to the library and all of Perlego’s features. The only differences are the price and subscription period: With the annual plan you’ll save around 30% compared to 12 months on the monthly plan.
We are an online textbook subscription service, where you can get access to an entire online library for less than the price of a single book per month. With over 1 million books across 1000+ topics, we’ve got you covered! Learn more here.
Look out for the read-aloud symbol on your next book to see if you can listen to it. The read-aloud tool reads text aloud for you, highlighting the text as it is being read. You can pause it, speed it up and slow it down. Learn more here.
Yes, you can access Programming Interviews Exposed by John Mongan, Noah Suojanen Kindler, Eric Giguère in PDF and/or ePUB format, as well as other popular books in Computer Science & Software Development. We have over one million books available in our catalogue for you to explore.

Information

Publisher
Wrox
Year
2018
ISBN
9781119418481
Edition
4

1
Before the Search

Before starting your job search, you need to prepare yourself. You shouldn’t apply for jobs without knowing what kind of job you want. Just being a good coder isn’t enough; you must understand what the market wants and how you can improve and package your own skills to make sure that the company with the job you want will want you.

KNOW YOURSELF

Stereotypes to the contrary, all programmers are not alike. Knowing what kind of programmer you are is crucial to finding the right kind of job. Although you can probably do many different kinds of programming tasks, you probably don’t find them all equally engaging. Doing something you don’t enjoy is fine on a short-term basis, but you need to be interested in and excited by what you’re doing for it to sustain you over the long term. The best programmers are passionate about their work, and you can’t truly be passionate about something that’s only moderately interesting to you.
If you’re not sure what you like or dislike, ask yourself some questions:
  • Are you a systems programmer or an application developer? Systems programmers work on the code that keeps computer systems running: frameworks, tools, compilers, drivers, servers, and so on. Other programmers are their primary audience, so little interaction occurs with nonprogrammers—and usually the job involves little or no user interface work. Application developers, on the other hand, work on the pieces that those nonprogrammers use to do their own work, and often more interaction occurs with nontechnical people. Many programmers find interacting with nontechnical people about technical topics to be frustrating; on the other hand, you may enjoy creating applications that are seen and used by an audience that extends beyond other programmers.
  • Do you like coding user interfaces? User interface design—also referred to as user experience (UX) or human computer interaction (HCI)—is a role that draws on a diverse set of skills, including programming, graphic design, and psychology. This work is high profile because the user interface is the most visible part of any application. User interface design is particularly important in mobile application development, where the restrictions of the device require even greater creativity and innovation. If you have the necessary skills and enjoy this work, you’re in elite company: many programmers find it finicky, hard to do well, and easy to criticize, especially when you take internationalization and accessibility issues into account.
  • Are you a good debugger? If you think finding problems in your own code is difficult, imagine what it’s like to fix problems with someone else’s code. It requires strong analytical and problem-solving skills. Finding and fixing bugs can be extremely rewarding in its own right. You need to know if you’d be happy doing primarily maintenance work. (Of course, you should always expect to maintain your own code—all programmers need debugging skills.) In many cases, particularly in older companies, maintenance programming jobs involve working primarily with older technologies now considered outdated or no longer in fashion. Developing your experience and skills with older technologies may narrow the range of jobs that you’re suited for, but because expertise in older technologies is hard to find, you may be highly sought after by the smaller number of companies dependent on older programs.
  • Do you like testing? Testing—also referred to as quality assurance or QA for short—requires a combination of meticulous attention to detail to ensure that tests cover every conceivable use of a program and outside-the-box creativity to find bugs in the program by generating combinations of inputs that the program’s developers never considered. Skilled testers are hard to find, and good programming skills are required to write tools and automated test cases.
  • Are you an architect or a coder? Every coding job includes some kind of design aspect, but certain jobs lean more one way than the other. If you enjoy designing, particularly designing the large-scale structure of big projects, a position as a software architect might be more appealing than a coding-focused job. Although you need a good understanding of how to code to be an effective architect, architecture positions can involve a lot of meetings and interpersonal interactions and little or no coding. Unless you have formal training in software architecture, the usual route to becoming an architect is to code first and to then display an aptitude for designing and fitting together different pieces of a project.
The preceding questions deal with different kinds of programming, but you should also consider nonprogramming responsibilities that might interest you and the work environment that you prefer:
  • Does management interest you? Some coders have a long-term goal to become a manager, but others shiver at the very thought. If management is your goal, you need to develop leadership skills and demonstrate that you can manage the human parts of the software development equation as well as the technical pieces. If management is not your goal, look for companies with good technical career paths, so you’re not forced to manage people to be promoted. (You still need leadership skills to get promoted no matter which career path you choose, but leadership skills are separate from people-management skills.)
  • Do you want to work for a big company? Working at big companies has advantages and disadvantages. For example, a large company may offer more job stability (although layoffs during downturns are common) and some kind of career path. It may also have a name brand that nontechies recognize. On the other hand, you may feel stifled by the bureaucracy, rigidness, and intracompany rivalry often found in bigger companies.
  • Do you want to work for a small company? The pay may be less, but getting in on the ground floor at a new company can create opportunities for future advancement (and possibly substantial remuneration) as the company grows and succeeds. Also, the work environment at small companies is often more informal than at larger organizations. The downside, of course, is that most new ventures fail, and you may be out of a job within a year or two, most likely without the kind of severance package you might expect from a large company.
  • Do you want to work on open source projects? The vast majority of programming jobs have historically involved proprietary, closed source projects, which some programmers don’t like. A shift has occurred in some companies in favor of more open software development, which provides opportunities for people to work on open source projects and still be paid for that participation. If it’s important to you that your work project is open source, it’s best to seek out companies already involved in open source. Trying to champion open source in traditional software companies is often a frustrating and fruitless undertaking.
  • Do you want long-term or short-term projects? Some programmers crave change, spending a few months at most on each project. If you like short-term projects and don’t mind traveling, a gig with a consulting company might make more sense than a more conventional corporate job.
Realize that these questions have no universal answers, and no right or wrong way to answer them. The more truthful you are in answering them, the more likely you’ll find the kind of programming job you truly enjoy.

KNOW THE MARKET

Knowing what you’d like to do is great, but don’t box yourself in too narrowly. You also need to understand the current job market and how it constrains your search for the “ideal” job, especially during an economic downturn like the one that burst the Internet bubble of the late ’90s or the global real estate and banking meltdown of the late 2000s.

Basic Market Information

A number of sources of information exist about what’s hot and what’s not in the developer job market, including the following:
  • Social networks. The tremendous growth of social networks such as LinkedIn and Facebook has transformed social networks into virtual recruiting grounds for all types and sizes of organizations. LinkedIn is particularly important. The other social networks can provide an indirect “pulse” of the market and also valuable leads for new and even unannounced job postings.
  • Online job sites. Visit two kinds of job sites as part of your research. Job listing sites such as Dice (which specializes in technology-related career listings), Indeed, and Monster (general job listing sites) enable you to see what kinds of jobs are currently in demand. Review sites such as Glassdoor discuss working conditions, salaries, bonuses, perks, and other information useful for finding the right kind of company for you.
  • Bookstores. Even though more and more programmer documentation is available online, professionally published books are still important, whether printed or downloadable. The number of books published on any given topic is a good indication of the level of interest the programming community has in that topic. Look especially for niche topics that are suddenly going mainstream, but beware that in most companies, mainstream use of technologies lags the interest levels represented in books by a few years.
  • Professional development courses. Colleges and universities try to keep abreast of what companies want and create professional development courses around those needs.
If you’re not in college or university, find out what languages and technologies the local institutions and your alma mater require of their computer science students; although academic needs don’t always coincide with what employers want, educational institutions try to graduate students with practical skills that employers can use.

What About Outsourcing?

Outsourcing and offshoring—contracting tasks to other companies or foreign divisions or companies—is an important part of the technical employment landscape. Outsourcing of ancillary business activities such as payroll administration and property maintenance has been around for decades. More recently, this has expanded to programming, driven by the advent of inexpensive computers, cheap long-distance communication provided by the Internet, and the recognition of technically educated workforces in low-wage developing countries. There was a flurry of outsourcing, particularly offshoring, in the mid-2000s. This has become less topical in the past several years because most companies that intend to outsource have already outsourced whatever they can. In addition, the costs of offshoring have risen as wages rise in the developing world, particularly in India and China. This coupled with recognition of the hidden costs of coordination with workforces from different cultures on very different schedules have led...

Table of contents

  1. Cover
  2. Title Page
  3. Table of Contents
  4. Preface
  5. Introduction
  6. 1 Before the Search
  7. 2 The Job Application Process
  8. 3 The Phone Screen
  9. 4 Approaches to Programming Problems
  10. 5 Linked Lists
  11. 6 Trees and Graphs
  12. 7 Arrays and Strings
  13. 8 Recursion
  14. 9 Sorting
  15. 10 Concurrency
  16. 11 Object-Oriented Programming
  17. 12 Design Patterns
  18. 13 Databases
  19. 14 Graphics and Bit Manipulation
  20. 15 Data Science, Random Numbers, and Statistics
  21. 16 Counting, Measuring, and Ordering Puzzles
  22. 17 Graphical and Spatial Puzzles
  23. 18 Knowledge-Based Questions
  24. 19 Nontechnical Questions
  25. Appendix: Résumés
  26. End User License Agreement