Absorb Knowledge in 30 Seconds | Brain Bytes #1
Tags: webdev, programming, beginners, computerscience
Published: 2021-07-10 05:18:20

As a bootcamp grad, I lack some basic computer science knowledge and I noticed it quickly when discussing with my senior developer. 

Each time he talked to me about a notion I didn't know about, I would write it down together with an explanation.

# Absorb knowledge in 30 seconds

That's how I came up with [Brain Bytes](https://www.brainbytes.dev/) idea during Dev.to's hackathon in December 2020. 

Brain Bytes is a twitter-like web app in which I (and hopefully other people soon as well) write down those small bytes of knowledge.

I will share here every weekend the knowledge bytes I learned during the week so you can benefit from it as well.

# Brain Bytes so far

Here are the bytes I wrote so far:

### REPL (read-eval-print-loop)
Read-Eval-Print-Loop (REPL), also called language shell, is an **interactive way to talk to your computer**. The shell reads your input, evaluates it, prints a response, and waits for the next input.

### UI Tips
1. Don't reinvent the wheel
2. Create a natural flow (give a feeling to the users of going from left to right)
3. Colors have meaning (user primary and accent colors)
4. Have a single main action per screen
5. Separate action from navigation
6. Make your interface predictable
7. Use space to separate things
8. Build the UI for the user, not for the system

Reference: [Arjan Codes | Youtube](https://www.youtube.com/watch?v=uAQAgPSwZf0&t=535s)

### Stub
In software development, a stub is a **piece of code used to stand in for some other programming functionality**. A stub may simulate the behavior of existing code or be a temporary substitute for yet-to-be-developed code.

### Horizontal & Vertical Scaling
When the demand for your app increases, you need to scale your infrastructure to cope with that. Horizontal scaling (aka scaling out) means adding more machines to your infrastructure. Vertical scaling (aka scaling up) means adding more power to the existing machines in your infrastructure (e.g. CPU, RAM).

### Input / Output Operations
In computing, communication between two processing systems is based on I/O operations. Input operations are the signals/data sent from a controller towards a storage device. Output operations are reading and sending data from a drive to an external system. For example, I/O devices you know are mouses, keyboards, USB drives, printers, ...

### LAMP Stack
- **L**inus (operating system)
- **A**pache (web server)
- **M**ySQL (relational database)
- **P**HP (programming language)
LAMP was one of the first open-source software stacks and is still a common way to deliver web applications. Wordress and Drupal run on LAMP.

### HTTP Client
An HTTP client is a software used to connect to an HTTP server. A web browser is an HTTP Client.

### Polymorphic Association
In Ruby on Rails, a polymorphic association is an Active Record **association that can connect a model to multiple other models**. For example, we can use a single association to connect the Review model with the Event and Restaurant models, allowing us to connect a review with either an event or a restaurant.

Source: [Semaphoreci](https://semaphoreci.com/blog/2017/08/16/polymorphic-associations-in-rails.html)

### git reflog
Use the `git reflog` command (= reference logs) to see the logs of your commits. Useful in case of mistake to go back to a previous good-state commit with the `git reset --hard <commit>` command

### Single-responsibility principle
The single-responsibility principle (SRP) is a computer-programming principle that states that **every module, class or function in a computer program should have responsibility over a single part of that program's functionality**, and it should encapsulate that part.

### Monolithic application
In software engineering, a monolithic application describes a single-tiered software application in which the user interface and data access code are combined into a single program from a single platform.

### Prototype-based Programming
Prototype-based programming is a style of object-oriented programming in which behavior reuse (known as inheritance) is performed via a process of reusing existing objects that serve as prototypes. A "banana" object would be cloned from the "fruit" object and general properties specific to bananas would be appended. Each individual "banana" object would be cloned from the generic "banana" object (in a class-based paradigm, a "fruit" class would be extended by a "banana" class). 
**Javascript is a prototype-based programming language.**

# You are welcome to participate!

[Brain Bytes](https://www.brainbytes.dev/) is an open source project, so feel free to comment or reach out to me in any way should you want to participate in its development! As you'll notice, there is plenty to do!

And of course, you are more than welcome to [share your knowledge there](https://www.brainbytes.dev/)!

Thanks for reading me 🙏 ❤️