These are the essential skills that every engineer attending the Pesto Bootcamp must be familiar with. We have built up this resource library by creating our own internal content and by curating our favorite blog posts, documentation sites and courses from around the web.
Here, you have access to resources which will help you understand the general programming concepts as well as the specifics of various technologies in depth.
Each section should be completed in order from top to bottom because some of the skills build on each other.
It is really a very simple concept but one that sparked more debates and controversies than anything else in Computer Science. If you have ever thought about Tabs versus Spaces, snake_case versus CamelCase, verbNoun variable nomenclature or nounVerb, using is with booleans, or right level of abstraction then you know what it means. However, it is just the beginning. It's there in mathematics too. Mathematicians G.H Hardy and Betrand Russell use the term elegance
and rigour
for mathematical beauty. The term itself Clean Code
is sufficiently descriptive and intuitively sensible, yet to put it into practice is as hard as composing a sonata, writing an opus, sculpting David and painting The Last Supper. So if you are new to this concept, begin with the following links to get a gist of it. You'll get an idea about the same and form an opinion.
In short Clean Code is:
- Easy to understand
- Easy to modify
- Easy to test
- Works correctly
Also, if you always remember that code is written to read (by humans) and not just to be executed, you'll mostly be on the right track.
-
-
Structure and Interpretation of Computer Programs by Hal Abelson, Gerald Jay Sussman
-
Clean Code, Agile Software Development and Clean Architecture by R C Martin.
-
Code Complete (2nd Edition) by Steve McConnell
-
Programming Pearls by Jon Bentley
-
Design Patterns by the Gang of Four (one of the best books for program architecture)
-
Setting up environment (details)
-
- Node Version Manager
-
-
-
What are the advantages of Distributed over centralized.
-
Why distributed is preferred versus Centralized.
-
-
- Various other git services providers
-
-
-
How to create
-
What are README files
-
How to read other people's repositories
-
-
-
Why it is required?
-
What are important things to put in it?
-
Logs
-
Compiled Binaries
-
Coverage Reports
-
Intermediate Files
-
-
-
-
What is a commit
-
Why commit often and in a logically coherent units
-
Difference between staging area, index area, and, working directory commit
-
Conventions to follow during a commit
-
Searching through a commit
-
-
-
Branch as an abstraction unit
-
Why branching is required?
-
How it handles features and allows multiple people to work on the same repo without collisions.
-
Checkout a branch
-
Conventions to follow for a branch name
-
Why
master
exists -
HEAD and branch references
-
-
-
What is a reset?
-
Difference between hard, soft, and mixed reset.
-
When to do reset?
-
-
-
Why stashing is required?
-
How to keep stashes of files
-
How to pop them back
-
-
-
What is an issue?
-
Atomic PRs
-
How to create an issue
-
How to assign it to a member?
-
How to create a Pull Request referencing that issue
-
How to review a PR
-
-
-
init
-
clone
-
add
-
commit
-
remote
-
pull ( vs fetch and its difference)
-
push
-
merge
-
branch
-
checkout
-
status
-
diff
-
log
-
-
-
Why Rebase (vs merge)
-
Interactive rebase options
-
Rebase [ Udacity's GitHub and Collaboration Course by Richard Kalehoff ]
-
-
-
-
Basics - Learn To Love Git
-
Try Git tutorial
-
-
Awesome Git - A list of curated resources about git and associated technologies.
-
Pro Git - free Git book (CC BY-NC-SA 3.0) - A comprehensive reference on git and its internals.
-
-
-
-
-
-
-
Static Versus Dynamic
-
JS Types
-
Static Typing Versus Dynamic Typing
-
Static Type Checking Versus Dynamic Type Checking
-
Coercion
-
-
-
Unicode
-
Code Points
-
Size in bytes of a single char
-
-
Constructing Strings
-
Manipulation
-
Concatenation
-
-
-
Loops
-
for
-
while
-
do while
-
for in
-
-
if else
-
Switch
-
debugger statement
-
-
Functions (details)
-
-
-
log
-
formatted output
-
-
-
-
Property Accessors (Dot and square notation)
-
- Losing this When Extracting a Method
- Functions Inside Methods Shadow this
- Other gotchas when using this
-
-
Sharing Data Between Objects via a Prototype
-
Setting and Deleting Affects Only Own Properties
-
Object reflective methods
-
-
Sealing
-
Extensions
-
Freezing
-
Protection Is Shallow
-
-
-
-
What Is Exception Handling?
-
Exception Handling in JavaScript
-
throw
-
[try-catch-finally](Languages Edit Advanced try...catch)
-
-
Error Constructors
-
Stack Traces
-
All these are explained
here
-
-
-
Forms of objects
Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. Neither the length of a JavaScript array nor the types of its elements are fixed. Since an array's length can change at any time, and data can be stored at non-contiguous locations in the array, JavaScript arrays are not guaranteed to be dense; this depends on how the programmer chooses to use them. In general, these are convenient characteristics; but if these features are not desirable for your particular use, you might consider using typed arrays.
Arrays cannot use strings as element indexes (as in an associative array) but must use integers. Setting or accessing via non-integers using bracket notation (or dot notation) will not set or retrieve an element from the array list itself, but will set or access a variable associated with that array's object property collection. The array's object properties and list of array elements are separate, and the array's traversal and mutation operations cannot be applied to these named properties.
-
Array Methods
-
-
-
Quantifiers
-
Capture Groups
-
Flags
-
-
-
Epoch time
-
-
-
How to deep copy
-
Why it's required
-
-
Partial Functions
-
Functional perspective
-
Why it's better than loops
-
Rethinking JavaScript: Death of the For Loop (Also read comments from the author for more context and why loops are a better choice in some cases)
-
-
Boolean
-
Date
-
Error
-
Function
-
JSON
-
Math
-
NaN
-
Infinity
-
-
Number
-
-
-
-
- Lexical Scope vs Function Scope
- Why const?
- Only references are const
- Temporal Dead Zone
- Variables and scoping in ECMAScript 6
-
- this is lexical instead of bind
- versus normal functions
-
-
CJS
-
AMD
-
-
-
How it's same as new Function
-
-
Async/Await (Promises)
- How it's based on Promises
-
-
-
-
-
-
input
-
textarea
-
basic attributes
-
-
Responsiveness
-
Frameworks
-
CSS Basics Videos
-
CSS Positioning Videos
-
-
window object
-
document object
-
DOM manipulation
-
Node/HTMLElement/HTMLList
-
Ajax
- XMLHTTPRequest
- axios
- fetch API with Promises
-
canvas API and SVG
-
Video and audio APIs (
<video>
and<audio>
)
-
-
React (details)
-
-
- You MIGHT Not Need Redux (By the creator of Redux: Dan Abramov)
-
React Router is a collection of navigational components that compose declaratively with your application.
-
- Read this to get an overview of what they are and the difference between them.
-
-
Browser specific modes
-
Polyfills
-
Shims
-
-
-
Build Tools and Bundlers
-
Live Reloads (Hot Reloading and HMR)
- BrowserSync for Responsive Designs
-
Linting
-
Optimizations
- gZipping
- Minification
- Minification vs gZipping
- Chunking
-
-
-
Google Chrome
-
ScratchJS - Chrome extension to write Babel transpiled scripts directly in Chrome DevTools
-
Chrome DevTools
-
- Client-Server Communication - Course on Udacity
-
SSH
-
HTTP Headers
- Accept
- Accept-Charset
- Accept-Encoding
- CORS Headers
- Authorization
- Content-Length
- Content-Type
- Referrer
-
HTTP Request Methods
- GET
- POST
- DELETE
- PUT
- OPTIONS
- HEAD
-
HTTP Response Status Codes
- 2XX Series
- 3XX Series
- 4XX Series
- 5XX Series
-
All the HTTP resources can be found here
-
-
Algorithm/Data Structures
-
Data Structure
-
Big O Notation and complexity analysis
-
Stacks
-
Queues
-
Linked lists
-
Hash tables
-
Trees and BST
-
Graphs
-
-
Algorithms
-
Sorting
-
Search
-
Random Numbers
-
Primality Testing
-
-
Make a TicTacToe Game
-
-
-
-
V8 engine (and how it is important to Node)
-
Deferred Execution (process.nextTick)
-
Event Loop
-
In the loop - Talk by Jake Archibald
-
Request/Response cycle
-
http, fs, process modules
-
EventEmitter
-
Streams
-
Buffers
-
Error Conventions
-
Node's Single threaded model.
-
Creating child processes.
-
Garbage Collection.
Node Resources
-
-
-
MVC (Model, View, Controller)
-
morgan - log each request
-
cors - enable CORS
-
body-parser - Node.js body parsing middleware
-
Helmet.js - help secure Express apps with various HTTP headers
Express Resources
-
-
-
SQL vs MongoDB ( Know the difference )
-
Introduction to the Mongo Shell, JSON, BSON, and the MongoDB query language
-
ORM
-
CRUD
-
collections
-
documents
-
mongod
-
daemons
-
models
-
Mongo Shell, Query Operators, Update Operators
-
Deeper dive on the Node.js MongoClient driver; CRUD operations in the driver; Cursors
-
Schema Design
-
Aggregation Framework
-
$unwind
-
$group
-
$project
-
Mongo Resources
-
-
-
salt
-
rainbow tables
-
never store plain-text passwords
-
JWT
-
token-based authentication
-
stateless authentication
-
JWT secret
-
-
Rest
-
-
The type system
-
Queries and mutations
-
Resolvers
-
Fields
-
Arguments
-
Aliases
-
Fragments
-
Operation Name
-
Variables
-
Directives
-
Mutations
-
Inline Fragments
-
Apollo Ecosystem [They have their own docs]
-
apollo-client
-
apollo-server
-
graphql-tools
-
Official Docs [Read the Learn Segment for most of Understand Section]
-
Articles
-
Books
- Learning GraphQL and Relay - Samer Buna
-
Websites and Videos
-
-
-
-
-
-
Unit Testing
-
Snapshot Testing
-
E2E Testing
-
-
-
-
AWS Compute Engine
-
Serverless
-
-
Secrets in Version Control Systems
-
Caching
-
CDNs
-
Horizontal / Vertical Scaling
-
Profilers
-
Load Balancers
-
Data Sharding/Duplication
-
Backups
-
-
-
-
Take Responsibility/Ownership
-
Standups
-
WIP and when a PR is ready
-
Expectation of quality work
-
Over communicating
-
Spelling things right. Use spell-check editor in VSCode.
-