A computer science study plan to become a software engineer

Last modified on December 17, 2020

I on the basis created this as a quick to-carry out guidelines of stare points for becoming a instrument engineer,
nonetheless it completely grew to the natty guidelines you look at the present time. After going by this stare plan, I received employed
as a Tool Boost Engineer at Amazon
You probably may probably nicely presumably not need to stare as appreciable as I did. Anyway, each factor you would like is true right here.

I studied about 8-12 hours a day, for a great deal of months. Here is my fable: Why I studied fleshy-time for Eight months for a Google interview

The gadgets listed proper right here will put together you successfully for a technical interview at applicable about any instrument firm,
along with the giants: Amazon, Facebook, Google, and Microsoft.

Handiest of success to you!

  • 中文版本
  • Tiếng Việt - Vietnamese
  • Español
  • Português Brasileiro
  • Polish
  • 繁體中文
  • Eastern (日本語)
  • Russian
Translations in progress:
  • हिन्दी
  • עברית
  • Bahasa Indonesia
  • Arabic
  • Turkish
  • French
  • Ukrainian
  • Korean(한국어)
  • Telugu
  • Urdu
  • Thai
  • Greek
  • Italian
  • Malayalam

What is it?

Here is my multi-month stare plan for going from net developer (self-taught, no CS degree) to instrument engineer for a natty firm.

Coding at the whiteboard - from HBO's Silicon Valley

Here is meant for new instrument engineers or these switching from
instrument/net vogue to instrument engineering (the preserve laptop computer science data is required). Must you are going to want gotten
an prolonged time of experience and are claiming an prolonged time of instrument engineering experience, search data from a more difficult interview.

Must you are going to want gotten an prolonged time of instrument/net vogue experience, expose that natty instrument firms like Google, Amazon,
Facebook and Microsoft stare instrument engineering as pretty about a from instrument/net vogue, they usually require laptop computer science data.

Must it is best to be a reliability engineer or operations engineer, stare extra from the non-compulsory guidelines (networking, safety).

Table of Contents

  • What is it?
  • Why narrate it?
  • Ideas to narrate it
  • Attach not really feel you're not shining ample
  • About Video Sources
  • Interview Job & Frequent Interview Prep
  • Grab One Language for the Interview
  • E guide Listing
  • Earlier than you Rep Began
  • What you Could not Watch Lined
  • Prerequisite Data
  • The On daily foundation Realizing
  • Algorithmic complexity / Titanic-O / Asymptotic analysis
  • Data Buildings
    • Arrays
    • Linked Lists
    • Stack
    • Queue
    • Hash desk
  • Extra Data
    • Binary search
    • Bitwise operations
  • Bushes
    • Bushes - Notes & Background
    • Binary search bushes: BSTs
    • Heap / Priority Queue / Binary Heap
    • balanced search bushes (frequent perception, not small print)
    • traversals: preorder, inorder, postorder, BFS, DFS
  • Sorting
    • totally different
    • insertion
    • heapsort
    • quicksort
    • merge type
  • Graphs
    • directed
    • undirected
    • adjacency matrix
    • adjacency guidelines
    • traversals: BFS, DFS
  • Even Extra Data
    • Recursion
    • Dynamic Programming
    • Object-Oriented Programming
    • Construct Patterns
    • Combinatorics (n decide ok) & Likelihood
    • NP, NP-Complete and Approximation Algorithms
    • Caches
    • Processes and Threads
    • Attempting out
    • Scheduling
    • String shopping & manipulations
    • Tries
    • Floating Level Numbers
    • Unicode
    • Endianness
    • Networking
  • System Construct, Scalability, Data Coping with (whenever you're going to want gotten 4+ years experience)
  • Closing Review
  • Coding Request Practice
  • Coding exercise routines/challenges
  • While you're nearer to the interview
  • Your Resume
  • Be pondering of for when the interview comes
  • Bear questions for the interviewer
  • Once It is most probably you may probably nicely comprise gotten Bought The Job

---------------- All the items beneath this level is non-compulsory ----------------

Extra Sources

  • Extra Books
  • Extra Learning
    • Compilers
    • Emacs and vi(m)
    • Unix converse line devices
    • Knowledge principle
    • Parity & Hamming Code
    • Entropy
    • Cryptography
    • Compression
    • Pc Security
    • Rubbish assortment
    • Parallel Programming
    • Messaging, Serialization, and Queueing Programs
    • A*
    • Rapid Fourier Rework
    • Bloom Filter
    • HyperLogLog
    • Locality-Quiet Hashing
    • van Emde Boas Bushes
    • Augmented Data Buildings
    • Balanced search bushes
      • AVL bushes
      • Splay bushes
      • Crimson/unhappy bushes
      • 2-Three search bushes
      • 2-3-4 Bushes (aka 2-Four bushes)
      • N-ary (Ok-ary, M-ary) bushes
      • B-Bushes
    • k-D Bushes
    • Skip lists
    • Network Flows
    • Disjoint Gadgets & Union Salvage
    • Math for Rapid Processing
    • Treap
    • Linear Programming
    • Geometry, Convex hull
    • Discrete math
    • Machine Learning
  • Extra Aspect on Some Issues
  • Video Series
  • Pc Science Purposes
  • Papers

Why narrate it?

After I began this problem, I did not know a stack from a heap, did not know Titanic-O anything, anything about bushes, or how one can
traverse a graph. If I wanted to code a sorting algorithm, I'll expose ya it haven't received been very applicable.
Every data construction I've ever aged turned as quickly as constructed into the language, and I did not understand how they labored
under the hood in any respect. I've by no methodology wanted to defend watch over memory except a route of I turned as quickly as working would give an "out of
memory" error, after which I might need to get your hands on a workaround. I've aged about a multidimensional arrays in my existence and
hundreds of associative arrays, nonetheless I've by no methodology created data constructions from scratch.

It be a prolonged plan. It may probably nicely probably presumably clutch you months. Must you're conscious of pretty about a this already that is ready to probably nicely clutch you masses a lot much less time.

Ideas to narrate it

All the items beneath is an overview, and in addition you may probably nicely nicely nonetheless deal with the gadgets in thunder from prime to backside.

I'm the narrate of Github's explicit markdown style, along with obligations lists to check progress.

Create a model new department so that you simply simply're going to be in a place to check gadgets like this, applicable preserve an x inside the brackets: [x]

Fork a department and observe the directions beneath

Fork the GitHub repo https://github.com/jwasham/coding-interview-university by clicking on the Fork button

Clone to your native repo

git clone git@github.com: /coding-interview-university.git

git checkout -b progress

git a ways-off add jwasham https://github.com/jwasham/coding-interview-university

git get --all

Mark all containers with X after you achieved your modifications

git add .

git commit -m "Marked x"

git rebase jwasham/grasp

git push --location-upstream origin progress

git push --power

Extra about Github-flavored markdown

Attach not really feel you're not shining ample

  • A success instrument engineers are shining, nonetheless many comprise an insecurity that they're not shining ample.
  • The legend of the Genius Programmer
  • It be Unhealthy to Dawdle Alone: Struggling with the Invisible Monsters in Tech

About Video Sources

Some films are available most interesting by enrolling in a Coursera or EdX class. These are often called MOOCs.
In most circumstances the courses are not in session so that you simply simply're going to want gotten to abet a pair of months, so that you simply simply're going to want gotten no procure entry to.

I might fancy your attend to add free and constantly-accessible public sources, paying homage to YouTube films to accompany the catch route films.
I like the narrate of college lectures.

Interview Job & Frequent Interview Prep

  • ABC: The least bit instances Be Coding
  • Whiteboarding
  • Demystifying Tech Recruiting
  • Ideas to Rep a Job on the Titanic 4:
    • Ideas to Rep a Job on the Titanic 4 - Amazon, Facebook, Google & Microsoft (video)
  • Cracking The Coding Interview Train 1:
    • Gayle L McDowell - Cracking The Coding Interview (video)
    • Cracking the Coding Interview with Creator Gayle Laakmann McDowell (video)
  • Cracking the Facebook Coding Interview:
    • The Methodology
    • Disaster Walkthrough
  • Prep Course:
    • Tool Engineer Interview Unleashed (paid route):
      • Learn the methodology to type your self ready for instrument engineer interviews from a former Google interviewer.
    • Python for Data Buildings, Algorithms, and Interviews (paid route):
      • A Python centric interview prep route which covers data constructions, algorithms, mock interviews and appreciable extra.
    • Intro to Data Buildings and Algorithms the narrate of Python (Udacity free route):
      • A free Python centric data constructions and algorithms route.
    • Data Buildings and Algorithms Nanodegree! (Udacity paid Nanodegree):
      • Rep fingers-on observe with over 100 data constructions and algorithm exercise routines and steerage from a devoted mentor to attend put together you for interviews and on-the-job situations.
    • Grokking the Behavioral Interview (Educative free route):
      • Repeatedly, it’s not your technical competency that holds you once more from touchdown your dream job, it’s the methodology you originate on the behavioral interview.

Grab One Language for the Interview

It is most probably you may probably presumably additionally narrate a language you're satisfied in to perform the coding part of the interview, nonetheless for natty firms, these are stable selections:

  • C++
  • Java
  • Python

It is most probably you may probably presumably moreover narrate these, nonetheless learn round first. There may also very successfully be caveats:

  • JavaScript
  • Ruby

Here is an editorial I wrote about deciding on a language for the interview: Grab One Language for the Coding Interview.

It be a should to be very satisfied inside the language and be a certified.

Learn extra about selections:

  • http://www.byte-by-byte.com/pick-the-appropriate-language-for-your-coding-interview/
  • http://weblog.codingforinterviews.com/simplest-programming-language-jobs/

Watch language sources proper right here

You are going to look some C, C++, and Python studying included beneath, as a results of I'm studying. There are about a books keen, look the underside.

E guide Listing

Here is a shorter guidelines than what I aged. Here is abbreviated to set up you time.

Interview Prep

  • Programming Interviews Exposed: Coding Your Methodology By the Interview, 4th Edition
    • options in C++ and Java
    • that's a applicable warm-up for Cracking the Coding Interview
    • not too powerful, most issues may also very successfully be easier than what you are going to look in an interview (from what I've learn)
  • Cracking the Coding Interview, sixth Edition
    • options in Java

Must you are going to want gotten a full bunch time earlier regulation:

Take maintain of 1:

  • Parts of Programming Interviews (C++ model)
  • Parts of Programming Interviews in Python
  • Parts of Programming Interviews (Java model)
    • e guide
    • Associate Project - Intention Stub and Take a have a look at Instances for Every Disaster inside the E guide

Language Stammer

It is most probably you may probably nicely comprise gotten to choose a language for the interview (look above).

Listed under are my concepts by language. I comprise by no means received sources for all languages. I welcome additions.

Must you learn by such a, you need to comprise your full data constructions and algorithms data you are going to need to delivery doing coding issues.
It is most probably you may probably presumably additionally skip your full video lectures on this problem, except you would like a evaluate.

Extra language-explicit sources proper right here.


I comprise by no means learn these two, nonetheless they're extremely rated and written by Sedgewick. He's good.

  • Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Taking a peek
  • Algorithms in C++ Share 5: Graph Algorithms
  • Open Data Buildings in C++
    • Rich and detailed assortment of Data Buildings and Algorithms
    • Huge for first-timers

Must you are going to want gotten a greater advice for C++, please let me know. Attempting to get your hands on a complete useful useful resource.


  • Algorithms (Sedgewick and Wayne)
    • films with e guide mutter materials (and Sedgewick!) on coursera:
      • Algorithms I
      • Algorithms II


  • Data Buildings and Algorithms in Java
    • by Goodrich, Tamassia, Goldwasser
    • aged as non-compulsory textual mutter materials for CS intro route at UC Berkeley
    • look my e guide file on the Python model beneath. This e guide covers the an an identical points


  • Data Buildings and Algorithms in Python
    • by Goodrich, Tamassia, Goldwasser
    • I beloved this e guide. It coated each factor and extra
    • Pythonic code
    • my ravishing e guide file: https://startupnextdoor.com/e book-file-records-constructions-and-algorithms-in-python/
  • Open Data Buildings in Python

Earlier than you Rep Began

This guidelines grew over many months, and sure, it roughly obtained out of hand.

Listed under are some errors I made so that you simply simply're going to want a greater experience.

1. You Could not Bring it to thoughts All

I watched hours of movies and took copious notes, and months later there turned as quickly as appreciable I did not contemplate. I spent Three days going
by my notes and making flashcards, so I would probably nicely presumably evaluate.

Please, learn so that you simply simply may probably nicely nicely not type my errors:

Conserving Pc Science Data.

A route suggested to me (haven't taken it): Learning how one can Learn.

2. Use Flashcards

To clear up the subject, I made a tiny flashcards place the preserve I would probably nicely presumably add flashcards of two kinds: frequent and code.
Every card has pretty about a formatting.

I made a cellular-first net place, so I would probably nicely presumably evaluate on my telephone and pill, wherever I'm.

Invent your particular person without spending a dime:

  • Flashcards place repo
  • My flash taking part in playing cards database (aged - 1200 taking part in playing cards):
  • My flash taking part in playing cards database (new - 1800 taking part in playing cards):

Take observe of I went overboard and comprise taking part in playing cards retaining each factor from meeting language and Python minutiae to machine studying and statistics. It be methodology too appreciable for what's required.

Narrate on flashcards: The first time you acknowledge you understand the reply, do not mark it as recognized. It be a should to sight the
an identical card and determination it a great deal of cases as it might probably probably presumably even be ahead of you truly stamp it. Repetition will preserve that data deeper in
your mind.

An totally different to the narrate of my flashcard place is Anki, which has been suggested to me pretty about a cases. It makes narrate of a repetition machine to give once more to recollect.
It be client-good, accessible on all platforms and has a cloud sync machine. It fees $25 on iOS nonetheless is free on pretty about a platforms.

My flashcard database in Anki structure: https://ankiweb.catch/shared/information/25173560 (thanks @xiewenya).

3. Initiate doing coding interview questions if you end up studying data constructions and algorithms

It is most probably you may probably nicely comprise gotten to observe what you're studying to fixing issues, in any other case you are going to overlook. I made this error. While you are going to want received realized a topic,
and really feel satisfied with it, like linked lists, open one in every of many coding interview books and perform a pair of questions concerning
linked lists. Then swap on to the next studying matter. Then later, inch once more and perform but every other linked guidelines topic,
or recursion topic, or no matter. But defend doing issues if you end up studying. It is most probably you may probably presumably be not being employed for data,
nonetheless the methodology you observe the data. There are a choice of books and websites I suggest.
Watch proper right here for extra: Coding Request Practice.

4. Review, evaluate, evaluate

I defend a location of cheat sheets on ASCII, OSI stack, Titanic-O notations, and extra. I stare them once I in truth comprise some spare time.

Take maintain of a spoil from programming issues for a half hour and battle by your flashcards.

5. Focal level

There are pretty about a distractions that may probably nicely absorb treasured time. Focal level and focus are laborious. Flip on some tune
with out lyrics and in addition you may probably nicely presumably presumably additionally focus considerably successfully.

What you may probably nicely nicely not look coated

These are prevalent utilized sciences nonetheless not part of this stare plan:

  • SQL
  • Javascript
  • HTML, CSS, and pretty about a entrance-dwell utilized sciences

The On daily foundation Realizing

Some matters clutch someday, and a few will clutch a pair of days. Some are applicable studying with nothing to put in energy.

Everyday I clutch one topic from the guidelines beneath, look at films about that topic, and write an implementation in:

  • C - the narrate of structs and constructive facets that clutch a struct and one thing else as args
  • C++ - with out the narrate of constructed-in kinds
  • C++ - the narrate of constructed-in kinds, like STL's std::guidelines for a linked guidelines
  • Python - the narrate of constructed-in kinds (to defend up training Python)
  • and write exams to be certain I'm doing it applicable, sometimes applicable the narrate of straightforward bid() statements
  • It is most probably you may probably presumably perform Java or one thing else, that's acceptable my issue

You set not need all these. You want most interesting one language for the interview.

Why code in all of those?

  • Practice, observe, observe, until I'm sick of it, and may probably nicely presumably perform it with out a topic (some comprise many edge cases and bookkeeping small print to recollect)
  • Work contained in the uncooked constraints (allocating/releasing memory with out attend of garbage assortment (apart from Python or Java))
  • Invent narrate of constructed-in kinds, so I in truth comprise experience the narrate of the constructed-in devices for right-world narrate (not going to write my personal linked guidelines implementation in manufacturing)

I could not comprise time to perform all of those for every and every topic, nonetheless I inch to try.

It is most probably you may probably presumably additionally look my code proper right here:

  • C
  • C++
  • Python

You do not need to memorize the guts of each and every algorithm.

Write code on a whiteboard or paper, not a laptop computer. Take a have a look at with some pattern inputs. Then try it out on a laptop computer.

Prerequisite Data

  • Learn C

    • C is in every and every single location. You are going to look examples in books, lectures, films, in every and every single location if you end up studying
    • The C Programming Language, Vol 2
      • Here is a quick e guide, nonetheless that is ready to probably nicely give you a substantial tackle on the C language and whenever you observe it a tiny
        you are going to speedy procure proficient. Realizing C helps you stamp how packages and memory work
      • Solutions to questions
  • How computer systems route of a program:

    • How CPU executes a program (video)
    • How computer systems calculate - ALU (video)
    • Registers and RAM (video)
    • The Central Processing Unit (CPU) (video)
    • Instructions and Purposes (video)

Algorithmic complexity / Titanic-O / Asymptotic analysis

  • Nothing to put in energy
  • There are pretty about a films proper right here. Appropriate look at ample until you stamp it. It is most probably you may probably presumably additionally continually attain once more and evaluate
  • If some lectures are too mathy, you are going to be in a place to soar down to the underside and look at the discrete arithmetic films to procure the background data
  • Harvard CS50 - Asymptotic Notation (video)
  • Titanic O Notations (frequent fast tutorial) (video)
  • Titanic O Notation (and Omega and Theta) - easiest mathematical clarification (video)
  • Skiena:
    • video
    • slides
  • A Gentle Introduction to Algorithm Complexity Evaluation
  • Orders of Boost (video)
  • Asymptotics (video)
  • UC Berkeley Titanic O (video)
  • UC Berkeley Titanic Omega (video)
  • Amortized Evaluation (video)
  • Illustrating "Titanic O" (video)
  • TopCoder (comprises recurrence household and grasp theorem):
    • Computational Complexity: Share 1
    • Computational Complexity: Share 2
  • Cheat sheet

Data Buildings

  • Arrays

    • Put into impact an routinely resizing vector.
    • Description:
      • Arrays (video)
      • UC Berkeley CS61B - Linear and Multi-Dim Arrays (video) (Initiate looking at from 15m 32s)
      • Dynamic Arrays (video)
      • Jagged Arrays (video)
    • Put into impact a vector (mutable array with computerized resizing):
      • Practice coding the narrate of arrays and pointers, and pointer math to soar to an index in location of the narrate of indexing.
      • Unique uncooked data array with allotted memory
        • can allocate int array under the hood, applicable not narrate its constructive facets
        • delivery with 16, or if beginning up quantity is larger, narrate vitality of two - 16, 32, 64, 128
      • dimension() - assortment of issues
      • capability() - assortment of issues it might probably probably presumably withhold
      • is_empty()
      • at(index) - returns merchandise at given index, blows up if index out of bounds
      • push(merchandise)
      • insert(index, merchandise) - inserts merchandise at index, shifts that index's value and trailing elements to the precise
      • prepend(merchandise) - can narrate insert above at index 0
      • pop() - decide from dwell, return value
      • delete(index) - delete merchandise at index, shifting all trailing elements left
      • decide(merchandise) - appears to be like to be like for value and eliminates index holding it (though in a pair of places)
      • get hold of(merchandise) - appears to be like to be like for value and returns first index with that value, -1 if not stumbled on
      • resize(new_capacity) // inside most aim
        • for folk that attain capability, resize to double the dimensions
        • when popping an merchandise, if dimension is 1/Four of capability, resize to half
    • Time
      • O(1) to add/decide at dwell (amortized for allocations for extra plight), index, or change
      • O(n) to insert/decide in different places
    • Position
      • contiguous in memory, so proximity helps efficiency
      • plight vital=(array capability, which is>=n) dimension of merchandise, nonetheless though 2n, nonetheless O(n)
  • Linked Lists

    • Description:
      • Singly Linked Lists (video)
      • CS 61B - Linked Lists 1 (video)
      • CS 61B - Linked Lists 2 (video)
    • C Code (video)
      - not your full video, applicable elements about Node struct and memory allocation
    • Linked Listing vs Arrays:
      • Core Linked Lists Vs Arrays (video)
      • In The Right World Linked Lists Vs Arrays (video)
    • why you may probably nicely nicely nonetheless steer a methods from linked lists (video)
    • Gotcha: you would like pointer to pointer data:
      (for for folk that go a pointer to a aim that may probably presumably swap the tackle the preserve that pointer factors)
      This net web page is suitable to procure a decide on ptr to ptr. I do not suggest this guidelines traversal mannequin. Readability and maintainability endure on account of cleverness.
      • Guidelines to Pointers
    • Put into impact (I did with tail pointer & with out):
      • dimension() - returns assortment of data elements in guidelines
      • empty() - bool returns applicable if empty
      • value_at(index) - returns the stamp of the nth merchandise (beginning up at Zero for first)
      • push_front(value) - offers an merchandise to the doorway of the guidelines
      • pop_front() - decide entrance merchandise and return its value
      • push_back(value) - offers an merchandise on the dwell
      • pop_back() - eliminates dwell merchandise and returns its value
      • entrance() - procure value of entrance merchandise
      • once more() - procure value of dwell merchandise
      • insert(index, value) - insert value at index, so most trendy merchandise at that index is pointed to by new merchandise at index
      • erase(index) - eliminates node at given index
      • value_n_from_end(n) - returns the stamp of the node at nth preserve from the dwell of the guidelines
      • reverse() - reverses the guidelines
      • remove_value(value) - eliminates the primary merchandise inside the guidelines with this value
    • Doubly-linked Listing
      • Description (video)
      • No need to put in energy
  • Stack

    • Stacks (video)
    • Will not put in energy. Imposing with array is trivial
  • Queue

    • Queue (video)
    • Circular buffer/FIFO
    • Put into impact the narrate of linked-checklist, with tail pointer:
      • enqueue(value) - offers value at preserve at tail
      • dequeue() - returns value and eliminates least currently added issue (entrance)
      • empty()
    • Put into impact the narrate of fixed-sized array:
      • enqueue(value) - offers merchandise at dwell of accessible storage
      • dequeue() - returns value and eliminates least currently added issue
      • empty()
      • fleshy()
    • Worth:
      • a inferior implementation the narrate of linked guidelines the preserve you enqueue at head and dequeue at tail can be O(n)
        as a results of you'd want the next to remaining issue, inflicting a fleshy traversal every and every dequeue
      • enqueue: O(1) (amortized, linked guidelines and array [probing])
      • dequeue: O(1) (linked guidelines and array)
      • empty: O(1) (linked guidelines and array)
  • Hash desk

    • Videos:

      • Hashing with Chaining (video)
      • Table Doubling, Karp-Rabin (video)
      • Open Addressing, Cryptographic Hashing (video)
      • PyCon 2010: The Mighty Dictionary (video)
      • (Developed) Randomization: Universal & Ideal Hashing (video)
      • (Developed) Ideal hashing (video)
    • Online Purposes:

      • Core Hash Tables (video)
      • Data Buildings (video)
      • Mobile phone E guide Disaster (video)
      • allotted hash tables:
        • Immediate Uploads And Storage Optimization In Dropbox (video)
        • Disbursed Hash Tables (video)
    • Put into impact with array the narrate of linear probing

      • hash(ok, m) - m is dimension of hash desk
      • add(key, value) - if key already exists, change value
      • exists(key)
      • procure(key)
      • decide(key)

Extra Data

  • Binary search

    • Binary Search (video)
    • Binary Search (video)
    • issue
    • Put into impact:
      • binary search (on sorted array of integers)
      • binary search the narrate of recursion
  • Bitwise operations

    • Bits cheat sheet - you may probably nicely nicely nonetheless know a great deal of the powers of two from (2^1 to 2^16 and a pair of^32)
    • Rep a truly applicable figuring out of manipulating bits with: &, |, ^, ~,>>,
    • phrases
    • Appropriate intro:
      Bit Manipulation (video)
    • C Programming Tutorial 2-10: Bitwise Operators (video)
    • Bit Manipula
    • ul>

Read More

Similar Products:

Recent Content