description |
---|
In no particular order... |
Resources
Architecture
- Lambda architecture is a data-processing architecture designed to handle big data by making use of both batch and stream processing methods.
- System design primer
- The BFF/Companion pattern explained by Sam Newman.
- Deeeeep server philosophy Pets vs Cattle
- Deeeeep architectural philosophy microservices
- A pdf diagram of the different design patterns.
- Microservice technique called the hipster batch
Stuff
- The twelve factor app is a methodology used for building software as a service.
- A great page describing 7 really good rules to follow when writing git commit messages.
- I use draw.io to draw diagrams to communicate architecture and other things to the team.
- A great collection of resources turned into handbook for the front-end developer.
- Read up on the difference between using mock and stub objects for testing. I believe the important difference between the two is that mocks verify behaviours and stubs verify state.
- Great page on pair programming. Explains the benefits, styles, and research.
- Technical decisions can be made through an Interested Parties Review (IPR). A document outlining the problem, possible solutions and their pros and cons. Interested parties are pinged and a decision is recorded on the document.
- There's a good book written by Robert C. Martin on what is clean code. A summary of that book can be found here.
- A great list of computer science topics to get into your brain. Teach yourself computer science
- My personal notes on the differences between continuous integration, continuous delivery and continuous deployment.
- HTTP/1.1 Method definitions - GET, POST, PUT, DELETE, etc. and HTTP/1.1 Status code definitions
- Do you really know CORS
- Learn, build & test Regex
- Grow your technical skills with Google
Distributed systems
- Use remote procedure calls (RPCs) as a way of communication between systems. Read about the differences between REST and RPCs
- What is a distributed hash table
- Introduction into Database replication
- White paper on Amazons Distributed Dynamo tech
- Eventual consistency //TODO
- Latency // TODO
Machine learning
- A ML crash course by Google
- Rules of machine learning by Google
- A very simple explanation of a machine learning pipeline
- Difference between data science, data analytics and machine learning
- A great micro course on machine learning at Kaggle
- A place to do data science projects. View code, join a competition or start a project at Kaggle
- Difference between machine learning model and algorithm
- Difference between labeled and unlabeled data
- Difference between label and feature
- What is a feature?
- Overfitting and underfitting
- Dimensions, features, attributes
Big Data
- Paper on MapReduce - Simplified data processing on large clusters
- History of massive-scale sorting experiments at Google
- History of Hadoop
- Dataflow model paper - practical approach to balancing correctness, latency, and cost in massive-scale, unbounded, out-of-order data processing
- Paper on Distributed snapshots- determining global states of distributed systems
- Stream processing and how to reprocess data discussed via Savepoints: Turning back time
- State management in Apache Flink- Consistent Stateful Distributed Stream Processing
Apache
- Apache Beam is an open source, unified model (the BEAM Model - formerly refered to as the Dataflow Model) for defining both batch and streaming data-parallel processing pipelines.
- WePay usecase - using Apache Kafka with GCP for fraud detection
- Using one of the Apache Beam SDKs, you can build a program that defines a Beam pipeline - which can then be executed on a supported runner such as Google Cloud Dataflow.
- A Beam pipeline encapsulates your entire data processing task from start to finish. This includes reading input data, transforming that data, and writing output data.
- A great start to Apache Beam: Apache Beam Programming Guide
- Great video on watermarks by Slava Chenyak
React
- React is a javascript library for building interfaces for single page applications. The React official docs is amazing and a great place to start to learn all things React. They also offer a tutorial that you can follow along with which I highly recommend if you are new to React.
- Alternatives to learning React are
- Codecademy course for beginners
- Beginners into to React on egghead.io
- Udemy course (not free)
- Pluralsight (not free)
- React fundamentals with TylerMcginnis.com (not free)
- Common things/libraries that we use that you could focus your learning on
- React lifecycle methods can be quite useful so it's good to know about them
- For state management use redux. Such good documentation on this library.
- To connect your redux store with react there's a really simple library called react-redux. This library comes with two api's
connect
andProvider
. I really like this further explanation on react-redux's connect. - Forms. Building react forms is easy, but if you want to connect them to your redux store, use redux form.
- For routing between pages in your app read up on using the react router.
- Add redux dev tools to your chrome extensions to view react redux state in your browser, which can make testing things easier.
- We write most of our css code in react using the library styled-components
- We use create-react-app to speed up the delivery of our single page apps. It creates all the things we need to get started very quickly. It makes a lot of assumptions and hides all the configuration files. This is great for simple client side apps, but not so great if you want server side rendering.
- What is webpack
- What is create-react-app
- What is server side rendering
- Server side rendering with create-react-app tutorial and code sample
- Sinon is a great library for testing - when you need stubs/spies/mock/fakes.
- If your react app was bootstrapped by create-react-app, you'll find it comes with Jest out of the box. Jest is a test runner.
- Enzyme is a JavaScript Testing utility for React that makes it easier to assert, manipulate, and traverse your React Components' output.
Javascript
- Top 10 features you should know about ES6
- Sooner or later you're gonna hit a javascript thing known as a Promise.
- Babel is a JavaScript transpiler. What that means is that we can take ES6/ES2015 code and make it work on all browsers, even ones that may not support it. Essentially Babel takes the ES6 JavaScript code and compiles it into ES5 code. Although all of the code is transpiled, there are still some things like Promises and new methods that aren't recognised. A polyfill such as babel polyfill will help with that.
- To make all our javascript code adhere to some styling standards we use eslint. Get it for your IDE.
Docker
- Lynda.com has an amazing beginner's video tutorial on Docker and how it can be used.
- Here's a short 8 min youtube video (not sure of quality)
- Get started & installation
- Docker-compose for multi-container shiz.
Node
- Node is built well to handle asynchronous JavaScript code to perform many asynchronous activities such as reading and writing to the file system, handling connections to database servers, or handling requests as a web server. We build a lot of our backends-for-frontends (BFFs / Companions) with Node.
- Here's a good document on what is node.
Package managers
- Know what a package manager is and used for. NPM and Yarn aren't the only two available but here's a document explaining the difference as a starting point. From the npm and yarn doco pages, a good thing to understand is what a package is and what a module is.
Versioning
- Making a change to one of our libraries? Learn about semantic versioning
- A great standard on how to manage a changelog. Probably good to implement on libraries so the team knows what changes they're pulling in.
Testing
- Modern best practices for testing in Java
- Use Charles to proxy requests so we can test on mobile devices.
Git
- An interactive clickable Git cheatsheet
- Never lose a commit again. Recover lost git commits and using git reflog.
- Keep your fork up to date
What's in the news
Security, Encryption & Cryptography
- Everything you should know about certificates and public key infrastructure
- Cryptographic protocols designed to provide communications security over a computer network
- Open Web Application Security Project (OWASP) has released the top 10 application security risks as of 2017
- An intense introduction to crytography
- My personal notes on Encryption
- A relatively easy to understand primer on elliptic curve cryptography