5 Random coding tips Find a mentor Under promise and over deliver Be proactive Stay curious Continually re-assess your workflow
Dynamic programming, developed by Richard Bellman in the 1950s, is a powerful algorithm design technique to solve problems by: - Breaking them down into smaller problems - Storing their solutions - Combining these to get to the solution of the original problem
The systems you design follow the 2nd Law of Thermodynamics They'll grow more complex over time Strive for simplicity Otherwise, you're setting up yourself for failure
How long should it take you to go through a code review? If someone took 3 hours to write that code, I'd guess you'd need a fraction of that time to review it. Hopefully, the author wrote clean code that's easier to follow.
Barriers - Thread synchronization mechanism - Allows threads to wait until other threads have reached the same point, before continuing execution Ex: Sorting a huge array: Split it into several parts, sort each of them in a separate thread and then merge all sorted pieces.
Things evaluated in systems design interviews - How do you deal with ambiguity? - Can you identify the key pieces of the system? - Can you define the scope of the problem? - Can propose a solution that meets the requirements? Because your daily job may look like this
"One of my most productive days was throwing away 1,000 lines of code." - Ken Thompson
If you only know how to do only one thing, it's likely that you have gaps in other areas If you are a front-end dev, learn about backend or dive into the internals of Linux Learn other coding languages Play with machine learning, even if you are an Android developer
Haskell was invented in 1990 (named after an American mathematician, Haskell Brooks) It is a purely funcitonal programming language and it introduced the concepts of type inference and lazy evaluation putStrLn "Hello, World!"
Coding has more human interaction that people think. You need to interact with people to define tasks and ask questions. Also, when you read and write documentation and comments. Consider clear and effective communication as part of your job requirements.
"Every great developer you know got there by solving problems they were unqualified to solve until they actually did it." - Patrick McKenzie
Design patterns in 1 tweet Memento: capturing and storing an object's internal state Ex: save your progress in your favourite videogame.
Write a design documents before coding: 1. Expose the problem to solve 2. Propose alternatives 3. Get other people's feedback 4. Design docs act also as doc 5. They save time: explain the design once and let people read it 6. Can help you summarize your accomplishments
What is the fastest way to sort a list of numbers? The answer is, like with many other things in life, it depends: - Size of the array - Almost sorted? - Arrays of integers, doubles, strings, ...? - Does it fit in memory? - Does it fit in one machine - ...
A shell sort improves on the insertion sort by sorting incremental sublists. It falls between 𝑂(𝑛) and 𝑂(𝑛2).
"Every program has (at least) two purposes: the one for which it was written, and another for which it wasn't." - Alan J. Perlis
Google infrastructure is divided into: - Regions: Independent geographical areas where Google hosts datacenters. It consists of 3+ zones - Zone: individual datacenter in a region. Ex: us-central1-a - Edge Points of Presence: where Google's network and the internet connect