A
Abstraction
- Abstractions are used in software development to simplify complex systems and provide higher-level interfaces that are easier to work with.
- They hide the implementation details and provide a simplified view of how things work.
- However, in some cases, the underlying complexities or limitations of the system can become apparent or directly affect the user's interaction with the abstraction.
Abstract Syntax Tree
Assignment Operator
- assigning a value to a variable; typically achieved using the
=
symbol
Anti-pattern
- commonly occurring solution to a problem that generates decidedly negative consequences
- bad programming practices; what is frequently seen in attempt to solve the problem that does not solve a problem
API (Application Programming Interface)
- Facilitates communication between two machines
- how software talks to another software
- Stipulates what data can be exchanged
- typically API call is responded with data (payload) or http error code
Associative Array
- abstract data type that stores a collection of (key/value) pairs, such that each possible key appears at most once in the collection.
- It supports lookup, remove, and insert operations
Associativity and Precedence
precedence comes before associativity
Left-to-right vs Right-to-left
- Left-associativity (left-to-right) means that it is processed as
(a OP1 b) OP2 c
- Right-associativity (right-to-left) means it is interpreted as a
OP1 (b OP2 c)
Assignment operators are right-associative, so you can write:
a = b = 5; // same as writing a = (b = 5);
with the expected result that a
and b
get the value 5
. This is because the assignment operator returns the value that is assigned
- First,
b
is set to 5
. Then the a
is also set to 5
, the return value of b = 5
, aka right operand of the assignment.
It is interesting to note that, the order of evaluation is always left-to-right regardless of associativity and precedence.
The difference in associativity comes into play when there are multiple operators of the same precedence.
- With only one operator or operators of different precedences, associativity doesn't affect the output.
In the example below, observe how associativity affects the output when multiple of the same operator are used:
6 / 3 / 2
is same as (6 / 3) / 2
because division is left-associative.
- Exponentiation, on the other hand, is right-associative, so
2 ** 3 ** 2
is the same as 2 ** (3 ** 2)
- Thus, doing
(2 ** 3) ** 2
changes the order and results in the 64
Remember that precedence comes before associativity
- Mixing division and exponentiation, the exponentiation comes before the division.
- For example,
2 ** 3 / 3 ** 2
results in 0.8888888888888888
because it is the same as (2 ** 3) / (3 ** 2)
.
B
Bash
- common shell in the Linux system
Big-endian
- most significant bytes are stored before the less significant bytes
Bleeding edge
- category of technology so new that they could have a high risk of being unreliable and lead adopters to incur great expense in order to make use of them
C
CLI (Command Line Iterface)
interaction with a computer; faster to interact than GUI
Code coverage
- Code coverage is a measure of the degree to which the source code of a program is executed when a particular test suite is run
- (opinion) 80% is usually a good coverage percentage
- good coverage does not equal good tests
Combinatorics
Composite key
Construct
language feature which disrupts the normal progression to the next statement and conditionally or unconditionally branches to another location in source code
Containers
What are Containers
- Containers are packages of software that contain all of the necessary elements to run in any environment (includes dependencies such as specific versions of software and libraries required)
- containers virtualize the operating system and run anywhere (local and in cloud)
Container vs VMs
- Containers are much more lightweight than VMs
- Containers virtualize at the OS level while VMs virtualize at the hardware level
- Containers share the OS kernel and use a fraction of the memory VMs require
Contrib
Contrib name is for software that has been contributed to the project, but which might not actually be maintained by the core developers. Naming it "contrib" or "Contrib" is a long-established convention, but there's really nothing special about the name, and it's usually only used by fairly large projects. Incase of Django it's a package that contains some of the common functionality required by in web development
Control flow
- tells your program what code to execute conditionally (e.g. if, else if, else)
CURL (Client for URLs)
- command line tool and library for transferring data with URLs
D
Data Hydration
- is the import of data into an object. When an object is waiting for data to fill it, this object is waiting to be hydrated. The source of that hydration can be a data lake or other data source
De-duping
- technique for eliminating duplicate copies of repeating data
- improves storage utilization -> lower capital expenditure
Delimiter
- symbol to indicate where something begins and where it ends
Dynamic Programming
E
Endianness
- describes how data is stored in memory
- order in which a sequence of bytes is stored in computer memory
Execution context
- wrapper to help manage the code that is running (current running lexical environment)
F
Functional programming
- paradigm that treats computation as the evaluation of mathematical functions and avoids changing state and mutable data
G
Geofencing
- Combines awareness of user's current location with awareness of the user's proximity to location that may be of interest
- Longitude and Latitude based
God object
- in OOP, God object is an object that knows too much or does too much
- This is a discouraged design
Grokking
- understanding something so intrinsically that it becomes a part of you
Guard Clauses
Guard clause is a premature return (early exit) that "guards" against the rest of your code from executing if it's not necessary (based on criteria you specify)
# Example: Ruby if statement
def example_method(parameter)
if parameter == true
# code here
else
# code here
return nil
end
end
# Guard clause equivalent
def example_method(parameter)
return nil unless parameter == true # guard clause
# else code here
end
# Example: Ruby nested conditionals
def print_shipping_label(order)
if order.outstanding_payments?
nil
else
if order.address_incomplete?
order.send_address_reminder
else
if order.standard_shipping?
order.print_standard_shipping_label
else
order.print_priority_shipping_lable
end
end
end
end
# Guard clause
def print_shipping_label2(order)
return nil if order.outstanding_payments?
return order.send_address_reminder if order.address_incomplete?
return order.print_standard_shipping_label if order.standard_shipping?
order.print_priority_shipping_label
end
// Example: JS - Nested if statements
function getPayAmount() {
let result;
if (isDead) result = deadAmount();
else {
if (isSeparated) result = separatedAmount();
else {
if (isRetired) result = retiredAmount();
else result = normalPayAmount();
}
}
return result;
}
// Guard clause equivalent
function getPayAmount() {
if (isDead) return deadAmount();
if (isSeparated) return separatedAmount();
if (isRetired) return retiredAmount();
return normalPayAmount();
}
H
Happy Eyeballs
- Happy Eyeballs (also called Fast Fallback) is an algorithm published by the IETF that makes dual-stack applications (those that understand both IPv4 and IPv6) more responsive to users by attempting to connect using both IPv4 and IPv6 at the same time (preferring IPv6), thus minimizing common problems experienced by users with imperfect IPv6 connections or setups.
- The name "happy eyeballs" derives from the term "eyeball" to describe endpoints which represent human Internet end-users, as opposed to servers
Hook
- Hook is a functionality provided by a software for the users of that software to have their own code called under certain circumstances. That code can augment or replace the current code.
- In a generic sense, a hook is something that will let you, a programmer, view and/or interact with and/or change something that is already going on in a system/program.
- In programming, a hook is a place and usually an interface provided in packaged code that allows a programmer to insert customized programming.
- For example, a programmer might want to provide code that analyzed how often a particular logic path was taken within a program. Or a programmer might want to insert an additional capability. Typically, hooks are provided for a stated purpose and are documented for the programmer.
I
IDE (Integrated Development Environment)
Idempotence
Source
- An HTTP method is idempotent if an identical request can be made once or several times in a row with the same effect while leaving the server in the same state. In other words, an idempotent method should not have any side-effects (except for keeping statistics).
- Implemented correctly, the
GET
, HEAD
, PUT
, and DELETE
methods are idempotent, but not the POST
method
- All safe methods are also idempotent
- An HTTP method is safe if it doesn't alter the state of the server
- This will inevitably lead to same results when called multiple times (unless external state changing operation was performed in between)
Integration vs unit Test
L
Leaky Abstraction
- Abstraction that leaks details that it is supposed to abstract away
- Leaky abstraction is a concept in software development where the underlying complexities or details of a system "leak" through the abstraction layer intended to hide them.
- It occurs when the abstraction fails to completely shield the user from the underlying implementation details, resulting in the user needing to have knowledge or understanding of those details to effectively work with the abstraction
- When an abstraction leaks, it means that the user of the abstraction needs to understand and work with the underlying implementation details or bypass the abstraction altogether to accomplish their tasks. This can result in a loss of productivity, increased complexity, and potential frustration for the user.
Lexical environment
- where something sits physically in the code you write
Linting
- process of running program that will analyze code for potential errors
Little-endian
- least significant bytes are stored before the more significant bytes
LTS (Long Term Support)
- distribution stays stable. meaning, you will not get any major functional upgrades (at least none that break compatibility in any way), but you will get security enhancements
"We issue a new desktop and server release every six months. That means you'll always have the latest and greatest applications that the open source world has to offer. Ubuntu is designed with security in mind. You get free security updates for at least 18 months on the desktop and server.With the Long Term Support (LTS) version you get three years support on the desktop, and five years on the server. There is no extra fee for the LTS version, we make our very best work available to everyone on the same free terms. Upgrades to new versions of Ubuntu are and always will be free of charge."
M
Markup
- standard text-encoding system consisting of a set of symbols inserted in a text document to control its structure
- widely used formats: SGML, HTML, XML
- markup symbols can be interpreted by a device to control how a document should look when printed or displayed on a monitor
Middleware
- something that will run between the server receiving the request and server sending a response out to the client
Modal
- (in web development) is a popup that is displayed on top of the current page that deactivates all other page content
Monkey Patching
- Code that dynamically alters the behavior of existing objects; typically the ones outside of the program
N
Normalization
- The first goal during data normalization is to detect and remove all duplicate data by logically grouping data redundancies together.
- Whenever a piece of data is dependent on another, the two should be stored in proximity within that data set.
- By getting rid of all anomalies and organizing unstructured data into a structured form, normalization greatly improves the usability of a data set.
- Data can be visualized more easily, insights could be extracted more efficiently, and information can be updated more quickly.
- As redundancies are merged together, the risk of errors and duplicates further making data even more disorganized is reduced.
O
OP (Original POSter)
- internet forum or message boards' original poster
OOP (Object Oriented Programming)
- paradigm based on the concept of objects, which may contain data (in the form of fields/attributes) and code (in the form of procedures/methods)
ORM (Object Relational Mapping)
- a way for relational tabular data to be represented as an object so a code can interact with the structured data
- converting data between incompatible type systems using OOP. This creates a virtual object database that can be used form within the programming language
- in OOP, data management tasks act on objects that are almost always non-scalar values. by contrast, many popular database products such as SQL are not object-oriented and can only store and manipulate scalar values such as integers and strings organized within tables. ORM converts the object values into groups of simpler values for storage in the database
Overload (Function Overloading)
Feature of OOP where two or more functions can have the same name but different parameters
- In Function Overloading, the function name should be the same and the argument should be different
- Does NOT exist in JS because the latter function overrides the first
function printArg(arg1) {
console.log(arg1);
}
// this function overrides the one prior instead of overloading
function printArg(arg1, arg2) {
console.log(arg1, arg2);
}
printArg("something"); // "something undefined"
Functions of the same name with different implementations
- Used for:
- Doing the same thing for different types
- Example: Typescript generics
- A default version with fewer parameters and a complex version that allows more control via additional parameters
P
Paradigm
- a style of building the structure and elements of computer programs
Parity
- (from the Latin paritas, meaning equal or equivalent) is a technique that checks whether data has been lost or written over when it is moved from one place in storage to another or when it is transmitted between computers
Procedural programming
- paradigm derived from structured programming, based upon the concept of procedure call
- procedures, also known as routines, subroutines, or functions, simply contain a series of computational steps to be carried out
Projection Table
- When you have a stream of events (update-in-place), knowing where the "state" of the data is in, you need to roll up the data.
- The table showing the roll up the stream of data is projection table
R
REPL (Read, Evaluate, Print, Loop)
Runtime
- Stage of programming lifecycle where program runs alongside all external instructions needed for proper execution
- Example: ECMASCript
- ECMAScript is just a specification for a programming language
- Anyone can write a JS engine that ingests valid JS program and execute it
- Two most popular engines used are V8 (Google) and JS Core (Apple)
- Most JS programs need a way to access the outside world to perform useful tasks
- This is where runtime comes in.
- Runtime implements additional APIs that are made available to the JS program they execute
- Browsers ship with JS runtimes that implement a set of web-specific APIs that are exposed via window object
- Any JS code executed by the browser can use these APIs to implement interactive or dynamic behavior in the context of the current webpage
- Similarly, NodeJS is a JS runtime that can be used in non-browser environments like servers
Runtime vs Compile Time
Source
Compile time
is when a programming code is converted to a machine code (e.g. python to binary).
- During compile time the
compiler
check for the syntax, semantic, and type of the code
Runtime
is period of time when a software is running and generally occurs after compile time.
S
Scalar
- data type that holds only a single atomic value at a time (e.g. string, integer, float) opposed to complex data structure such as an array or object
- typically represented with a sigil when represented with a variable: $
SDK (Software Development Kit)
- More complete kit vs API
- Comprehensive collection of tools to enable developers to build applications faster
Semaphore
- variable or abstract data type used to control access to a common resource by multiple threads and avoid critical section in a concurrent system such as multitasking operating system
Sequence
- any python object that supports accessing elements by index
Shell
- Simply put, the shell is a program that takes commands from the keyboard and gives them to the operating system to perform
- program which actually processes commands and returns output
- also manages foreground and background processes
Signedness
- signedness of data type indicates whether a variable of that type is allowed to be a negative number
- if a numeric value is unsigned, it can only represent a positive or zero
Significant byte
- most significant byte is the byte with the largest value, usually on the far-left side of the string, or the first byte transmitted
Static Method
static method
is a method that belongs to a class
rather than an instance of a class
static method
is accessible to every instance of a class
whereas method defined in an instance can only be accessible from instantiated object
Symbolic Links
- Symbolic link or symlink is any file that contains a reference to another file or a directory in the form of an absolute or relative path and that affects pathname resolution
- Example are Git file diff system and shortcut files
Syntax parser
- program that reads your code and determines what it does and if its grammar is valid
- syntax parser is a part of compiler or an interpreter
Service
- In system architecture, service refers to software functionality or a set of functionalities with a purpose that different clients can reuse for different purposes
T
TCP vs UDP
Difference is in head of the line blocking
- When you send packages using TCP, it doesn’t show package 4 and 5 if the package 3 is missing (even if 4 and 5 have arrived)
- In QUIC, you forego that, so if you have 3 things in parallel, and packet 3 is missing, 4 and 5 are available, and that optimizes parallel data transfer on the same connection
Terminal
wrapper program which runs the shell
Traceback
text that gets displayed for an error
Triage
Initially reviewing and prioritizing faults in testing depending on their severity, effect, and urgency.
Tuple
Object of arbitrary types, ordered from left to right, does not allow changes to the tuple directly like lists (immutable)
- (in relational db) all data in a single row of record
Type casting
- type assignment explicitly done by the programmer
Type conversion
- type assignment done automatically by the compiler
V
Variables
- names that can be assigned a value and used to reference that value throughout the code
Vector
- A vector is a mathematical object that encodes a length and directio
W
Walking Skeleton
- tiny implementation/basic architecture of your system; proof of concept focuses on single functionality, but walking skeleton is a minimalistic end-to-end implementation
- walking skeleton should be an executable and shippable result that should be accompanied with tests
- it does not have to use the final architecture, but should link together the main architectural components
- advantage for devops: developing a shippable and testable code early in the project allows devops to set up CI chain early in the project, instead of rushing at the end of the project
Worker
- A worker is something you give a task and continue in your process, while the worker (or multiple workers) process the task on a different thread. When they finish they let you know about it via a call back method.