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:
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)
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 ]
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.
How to write good comments
Why comment should not be written
Static Versus Dynamic
JS Types
Static Typing Versus Dynamic Typing
Static Type Checking Versus Dynamic Type Checking
Coercion
The Difference Between Boolean Objects and Boolean Primitives in JavaScript
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
log
formatted output
Property Accessors (Dot and square notation)
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
CJS
AMD
How it's same as new Function
input
textarea
basic attributes
Responsiveness
Frameworks
CSS Basics Videos
CSS Positioning Videos
window object
document object
DOM manipulation
Node/HTMLElement/HTMLList
Ajax
canvas API and SVG
Video and audio APIs (<video>
and <audio>
)
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
Chunking
Google Chrome
ScratchJS - Chrome extension to write Babel transpiled scripts directly in Chrome DevTools
Chrome DevTools
Dev Tips - Large collection of tips as animated gifs
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.