Software presets
Install the following software on your computer:
Terminal
- Most useful developer tool
- Any number of customizations
- On Windows: Linux Bash Shell, Powershell, Git Bash (don't use default CMD!)
- On macOS / Linux: native Terminal
Bash
Learn Bash base commands:
Vi(m)
- Bash text editor
- Use
:to enter command modewto write fileqto quitq!to quit without saving- 'x' to write & quit
- Use
/to search for text - Use
ito enter edit mode andESCto exit it vimtutoris the best tutorial to learn
Client VS Server
- Two parts of a distributed computing model:
- Client requests the info and displays it
- Server processes the request and services the result
- We will do server work + a bit of client-side
The IP protocol
- Send data from one computer to another over a network (ex: client/server)
- Use of IPV4 addresses (ex: 172.16.254.1), IPV6 also available but not much used
- Data packaged in IP packets with 2 sections
- Header: IP version, addresses, TTL, ...
- Data: the packet's content
The HTTP protocol
- Application protocol for transmitting hypermedia documents (HTML)
- Two types of messages: requests & responses
- HTTP message split between headers & body
- HTTP response always contains
- the protocol (HTTP/1.1)
- a status code (200, 404, ...)
- a status text (page not found)
API and REST API
- Application Programming Interface (API)
- In web: REST API
- Expose a set of HTTP routes
- Use HTTP verbs (GET / POST / PUT / DELETE)
- Client connects to communicate
- Usually communicating in JSON
REST API example: https://petstore.swagger.io/
SSL/TLS & HTTPS
(Secure Sockets Layer / Transport Layer Security)
- Establish an encrypted link over a network
- Exchange of public & private keys to secure the exchange
- Server sends SSL certificate + public key
- Client checks the certificate & answers with an encrypted session key
- Client & server exchange messages encrypted with the keys to authenticate
- SSL certificate has been certified by a renowned authority
- HTTPS: HTTP secured with SSL/TLS
SSH - Secure shell
- Cryptographic network protocol to operate network services securely over an unsecured network
- Exchange of public & private keys to secure the exchange
- Client has the private key
- Server needs to have the associated public key
- Client & server exchange messages encrypted with the keys to authenticate
The SFTP protocol
- Send files over SSH
- ex: deploy a website to a server
- SFTP apps: FileZilla, Cyberduck, WinSCP, ...
Databases
- RDBMS (basis for SQL): MySQL, PostgreSQL, Hive, Oracle
- NoSQL:
- Filesystems: posix and object storage
- Documents store: MongoDB, ElasticSearch
- Key/value and sorted key/value stores: Redis, LevelDB
- Column families: HBase, Cassandra
- Graph DBs: JanusGraph (ex-TitanDB), Neo4J
Security
Editors, IDE
As a developer, the terminal being your partner and the editor is your best friend:
- Vim (Linux, macOS, Windows)
Free, one of the most powerful, many will say the most powerful, single file or project-oriented. - Atom (Linux, macOS, Windows)
Free project-oriented, minimalist, and productive UI (my day to day favorite editor), slow and memory hungry - VS Code (Linux, macOS, Windows)
Free most popular editor, most active community, and plugins development - Sublime Text (Linux, macOS, Windows)
Free, very fast, single file or project-oriented - BBedit (macOS)
Free version very powerful, very fast - Notepad++ Windows)
Free, almost a Windows standard, powerful and fast - WebStorm (Linux, macOS, Windows) Licensed, 30 days trial
- ...
Programmation paradigms
- "A way of programming"
- Common paradigms:
- Declarative: the program describes its desired results without explicitly listing commands or steps.
- Imperative: the control flow is an explicit sequence of commands.
- Functional: the computation proceeds by function calls, no global state
- Object-oriented: everything is an object, functions are methods and are executed with the object's context
- Event-driven: the control flow is triggered and determined by async actions
StackOverflow
- Huge data source
- Reactive community
- Any subject
- Lots of answered questions (> 1M !)
- Don’t forget the source code!
JSON format
- JSON is a subset of JavaScript, JavaScript is built upon JSON
- Data format
Valid JavaScript:
const user = {
firstname: 'Lucky',
lastname: `Luke`,
"password": "secret",
age: 42,
mood: 0.9,
languages: ['en', ['fr_FR', 'fr_CA'] , , ],
level: null,
friends: undefined,
};Valid JSON:
{
"firstname": "Lucky",
"lastname": "Luke",
"password": "secret",
"age": 42,
"mood": 0.9,
"languages": ["en", ["fr_FR", "fr_CA"]],
"level": null
}YAML format
- Human-readable data-serialization format
- Indentations are important!
- "Yet Another Markup Language"
The same as above JSON, but YAML:
firstname: Lucky
lastname: Luke
password: secret
age: 42
mood: 0.9
languages:
- en
- - fr_FR
- fr_CA
level: