Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
ToolsEither code or software that is used by developers in running or building software.
FrameworkCode, typically written by someone else, that can be used to speed up development and provide structure to project code.
LibraryCode, typically written by someone else, that can be used to provide a specific solution.
ServiceCode, typically written by someone else, that usually runs on another machine and provides a specific solution.
HardwarePhysical electronics which programs run on. This includes integrated circuits, logic gates, CPUs, transistors, but can often refer to just “computer parts”. Hard in that these parts are set and not changeable.
FirmwarePrograms that reside in a special location on hardware and determine how it behaves. Firmware is usually changeable but with difficulty and updates are not part of day-to-day operation of the device.
SoftwarePrograms that run on top of hardware in day-to-day operation. Is “soft” in that it is easily changeable, simply place a new copy of the program on the machine and run it.
DebuggerA development tool available in most programming languages that allows developers to inspect what is going on inside of a running application.
BreakpointA technique to allow a debugger to pause a running program when a particular line of code executes.
LoggingA technique to generate a record of what an application did as it ran. Useful in analyzing an application that is misbehaving.
Memory / Random Access Memory (RAM)Hardware on a computer where data is stored in the short and medium term. All running applications are typically stored here.
ProfilingA set of techniques used to analyze the performance and memory use of an application.
Call stackAs a program runs, functions may call other functions. The call stack at any point in time is all functions that have been called and have not yet completed. This is typically represented physically in memory as well.
Chrome DevtoolsTools provided by the Chrome browser, useful in debugging, profiling, and otherwise working with in-browser JavaScript.
Package ManagerA tool provided available in many programming languages that makes it easy to download and use library code from the internet.
Text EditorA class of tool commonly used in writing of source code. Usually relatively light-weight with simple features like syntax-highlighting
Integrated Development Environment (IDE)Application that in addition to being a text editor, typically contains many other tools for working with a specific programming language or type of application.
Visual Studio Code / VS CodePopular open source text editor originally by Microsoft. Extensions written in JavaScript. Works well with any language and is distinct from the Visual Studio IDE
AtomPopular open source text editor originally by Github. Extensions written in JavaScript.
SublimePopular open source text editor. Extensions written in Python. Is lightweight and fast and hence became very popular in the early 2010s but stalled due to long times between updates.
VimPopular and old open source text editor and key binding system. A version of Vim (Vi) is almost always available and can run in the terminal. Extensions written in Vimscript. Known for complex but ergonomic key bindings.
EmacsPopular and very old text editor. One of the oldest still maintained pieces of Open Source software. Known for complex key bindings and a huge set of available extensions. Extensions written in Lisp.
IntelliJPopular IDE by Jetbrains with free and paid versions. Commonly used for development in Java and related technologies.
EclipsePopular open source IDE known for a large amount of available plugins and extensions. Commonly used for development in Java and related technologies.
Visual StudioIDE by Microsoft used almost ubiquitously by people developing .Net applications.
Syntax HighlightingFeature of text editors where the editor has basic understanding of the programming language being used and uses color to emphasize parts of it in a helpful manner.
Code FormatterFeature of most text editors where the editor can automatically indent and reformat existing code in a way natural to the programming language.
Key bindingsFeature of many applications where keyboard combos and shortcuts can be used to quickly trigger other features rather than clicking through a menu. Very common in text editors.
SnippetsFeature of most text editors which allow you to store and quickly generate commonly used code patterns.
Source CodeProgramming code that is typed into and can be open and modified via a text editor.
Central Processing Unit (CPU)Piece of a computer that executes program instructions. For example loading data to a memory location or performing a mathematical operation.
Compilation / CompilerThe process of/tool for transforming source code into a format (typically binary) ahead of time that gives instructions to the CPU and can be executed directly.
Interpretation / InterpreterThe process of source code being compiled and executed line-by-line as the program runs. This can enable techniques like code that rewrites itself as it runs.
RuntimeA feature of many programming languages where the language itself must be installed, and then the installation executes your program rather than it running directly
Just In Time Compilation (JIT)Technique used by runtimes which combines compilation and interpetation. Typically includes a step that transforms source code to intermediate bytecode which is than converted to CPU instructions on the fly.
Virtual MachineAn application that can emulate another computer, run an operating system, other applications, and even malware in isolation without it affecting the host computer. Examples: Virtualbox, VMware, Parallels
Intermediate BytecodeA format some languages compile source code to that runs on an idealized CPU. When the code is executed by a runtime, a just in time compilation step converts this to something that can execute on that specific computer.
Low level languageA programming language that focuses on providing users with maximal control of the underlying hardware even at the expense of speed of development. Examples: C, C++, Rust, Assembly, VHDL.
High level languageA programming language that focuses on being expressive and easier to achieve common tasks in even at the expense of more control of the computer. Examples: Ruby, Java, Python, C#.
Integrated circuitA reconfigured set of electronics on a microchip or board. Many distinct components are typically permanently connected together. Any modern piece of electronics will have many of these.
VHSIC Hardware Description Language (VHDL)A low-level programming language used in electronics design and FPGA programming.
Field Programmable Gate Array (FPGA)An integrated circuit that a very very simple program can be stored in directly that will modify what sort of electrical outputs the chip will give in response to inputs. Commonly used in very low level hardware.
Complex Instruction Set Computer (CISC)A style of CPU design that can do more complex operations. Can usually do complex day-to-day things faster but uses more power and generates more heat. Example: Intel 386 or AMD processors.
Advanced RISC Machine (ARM)A slightly more advanced RISC processor that usually offers very low power consumption but is capable of running a simple Linux operating system. For example used in Raspberry PI.
Reduced Instruction Set Computer (RISC)A style of CPU design that can do less complex operations. These are typically slower in operation but can carry other advantages like drastically reduced power consumption.
AssemblerA half-step above binary machine code, typically just a representation of it that can be modified in a text editor. Raw instructions to the CPU. Specifics often vary by CPU model.
ExecutableAn application that can be run directly by users. This is opposed to libraries and applications you run by executing the language interpreter (eg Python) or bytecode VM (eg Java).
Assembly / dllA file that contains compiled code that cannot be run directly, but can have its code loaded and run by an executable.
GNU Compiler Collection (gcc)Free and open source toolset by the GNU project. Commonly used for compiling C and C++ though can support several other languages.
GNU ProjectProject founded by Richard Stallman, dedicated to open and free software. This includes a license, software, and political activism.
MIT LicenseSoftware license commonly used by open source and library developers that grants users ability to do almost anything they want with the software while indemnifying the software creator from any liability.
Free as in Speech not BeerSlogan of the GNU Project. Philosophy that software should not only be free of cost, but that users should be able to do anything with it that they choose including inspecting and modifying source and redistribution
Open Source Software (OSS)Software where the source code can be examined and improvements contributed by anyone. Usually, but not necessarily, free of charge or restrictive license.
Creative CommonsOrganization and set of licenses that typically make creative works available for others to consume and share. Several different versions of different restrictiveness levels exist.
General Public License (GPL)License maintained by the GNU project that makes software free as in speech and beer. Imposes the additional restriction that derivative works must be under similar license terms.
DevOpsLoose term for a software practice aiming to unify software development and operations such as deployment, monitoring, and testing into a single process and often even team.
Data WarehouseA specially designed database common in larger businesses which has the goal of aggregating large amounts of disparate data. The focus is on reporting rather than directly supporting applications.
Database Administrator (DBA)A role within many organizations which is responsible for the proper operation of the organization’s main data storage systems. Frequently involves query optimization, data architecture, warehousing, and backups.
DockerSoftware and company that uses the (originally) Linux-based concept of containers to create isolated and portable environments for code. Similar in application to a very lightweight virtual machine. Popular in DevOps.
Docker SwarmSoftware from the Docker corporation for orchestrating multiple docker containers
VagrantOpen source scripting tool for configuring and maintaining virtual machine and container environments. Often used by system administrators and devops.
AnsibleOpen source configuration management, provisioning, and deployment software. Often used by system administrators and devops teams for managing large clusters of real and virtual machines.
KubernetesOpen source software for orchestrating multiple containers (including but not limited to Docker). Typically compared and preferred to Docker Swarm.
ScriptingWriting a short program - typically in a simple high level language - to automate a specific task.
Build ServerType of software that can download source code from a repository and automatically run it through compilation, automated tests, code analysis, and optionally deployment. Commonly used by devops.
Continuous IntegrationSoftware engineering practice where work from multiple developers is merged (integrated) frequently - often several times a day. Often indicates a build server that fires on any code changes to the central repository.
Continuous DeploymentPractice common in Agile process where the full deployment of an application is scripted and automatically triggered by the build server.
Best PracticesRules of thumb and common practices and techniques that are likely to lead to success in a context. For example best practices of a classroom might be to take notes.
Agile Manifeso2001 manifesto by many industry leaders. Composed of four value statements and twelve principles for a better software development process.
Software Development Lifecycle (SDLC)The concept of an explicit and intentional process that a software development team will follow to go from design to implementation to deployment and support of an application.
AgileBroad category of software development processes with an emphasis on adaptation, customer involvement, and early delivery, with incremental improvement of the product.
SOLID PrinciplesAcronym for five object oriented software design principles popularized by Uncle Bob Martin.
WaterfallA term coined for a traditional (eg. physical product) development process applied to software with a design phase followed by development, then testing. Originally proposed as a counter-example that wouldn’t work well.
Rational Unified Process (RUP)Software development process framework created by IBM. While similar to Agile, tends to be much more prescriptive with defined phases and roles.
ScrumPopular software development process featuring techniques like sprint planning, daily stand-ups, retrospectives and a scrum coach to ensure process is followed. Often (mis)applied half-heartedly or only in part.
Code reviewCode quality technique where a team member will review batches of source code changes before they get merged with everyone else’s changes. Often implemented as all code should be reviewed by at least one other person.
Pair ProgrammingCode quality technique where two similarly-skilled developers sit at one computer and write code in collaboration immediately discussing and reviewing each other’s work.
KanbanSoftware development process based on manufacturing process pioneered at Toyota. Considered part of the Agile family, focuses on identifying issues early and continuous improvement and delivery.
User StoryCommon technique for distilling requirements. Composed of a statement of a problem a user in a role might have and possible solution. As a __ I want __ because __. A placeholder for a conversation about requirements.
Design PersonaDesign technique for distilling requirements. Helps visualize real users and their problems by drawing up and referring to detailed profiles of fictitious users.
WireframesDesign technique where a rough sketch of the eventual user interface is drawn out and used as a starting point for discussions. Wireframes are quick to create and iterate and unrefined to denote that work is in progress.
Minimum Viable Product (MVP)The smallest feature set that could possibly still be of use. In Agile, it is common to develop the MVP first, distribute it to users, then use feedback to drive future requirements.
Prototype (agile)Technique for distilling requirements where a rapidly-built, partially functional version of the application is created with the intent of getting feedback from users and throwing it away.
SprintTechnique common in agile where work is conducted in units of a few (typically 2) weeks. Work is selected, estimates are given, work, testing, and deployment conducted, and any problems reviewed all within the sprint.
Stand-upTechnique popular in the agile development process where a short daily meeting is held where every team member reviews their work and any impediments. Physical standing is preferred to keep the meeting short.
RetrospectiveA meeting held at the end of a sprint to discuss and decide on process improvements. A core part of an agile software development process.
Don’t Repeat Yourself (DRY)A software development maxim to avoid creating multiple instances of redundant code. When similar code is needed in two different places prefer to use one of the abstraction features of your programming language.
You Ain’t Gonna Need It (YAGNI)A programming maxim to avoid coding things that you don’t have a direct and immediate need for because in all likelihood, things will change and you will not end up needing it.
Law of Demeter / Principle of least knowledgeProgramming rule-of-thumb that a piece of code should minimize how much it needs to know about how any other piece of code works. Ideally, code should only know about and talk to the structures it uses directly.
Single Responsibility PrincipleProgramming principle that a unit of code (function/class/script) should ideally have one responsibility. The only reason it should change is if one of its business requirements change. The S in SOLID.
Open/Closed PrincipleProgramming principle that a unit of code should be easy (open) to extend if requirements are added but only need to change (closed) if its own business requirements change. The O in SOLID.
Liskov Substitution PrincipleObject oriented design principle that a subclass should not substantively change (though additional behavior is fine) behavior in a superclass. The L in SOLID.
Interface Segregation PrincipleObject oriented design principle stating that an interface should only expose methods that are likely to be used at the same time. Implementing many interfaces is fine, but interfaces should be small. The I in SOLID.
Dependency Inversion PrincipleObject oriented design principle that code components (function/class/script) should not directly reference other components but should be passed in via a module or constructor injection system. The D in SOLID.
(Uncle) Bob MartinSoftware developer and speaker that evangelizes Test Driven Development and SOLID programming principles.
Software TestingThe field or action of ensuring that code does what is needed of it. Includes manual testing by QA, developers, beta users, automated testing, unit testing, and generated tests.
Unit TestingDevelopment technique for improving code quality. Automated tests are written to call a small bit of code and verify its behavior. The definition of unit is often debated, but tends to be small and highly focused.
Test Driven Development (TDD)Practice of writing testing code - typically unit tests - before implementing features. Can result in better quality software design as it forces requirements to be stated and understood very explicitly.
Behavior Driven Development (BDD)Style of test driven development with an emphasis on naming tests in a style that business people can understand. Defines a unit testing unit as a concrete behavior or feature that business people care about.
Integration testsAutomated tests that validate proper behavior of multiple parts of the system together. Often used to test how the user interface interacts with the back end by mimicking a user interacting with the application.
Automated testingThe practice of writing automated checks that code functions as it should. Includes unit testing, approval testing, integration testing, and an other automation.
Executable SpecificationA subset of BDD where developers create mini programming languages that are simple enough for business people to specify - or at least be able to understand the code - of how a program should behave.
Acceptance testingTesting conducted by the product owner of quality assurance team with the specific goal of accepting the feature as completed or not.
Quality Assurance (QA)A role and typically a job position for someone who tests that software works as it should. Can be anywhere from bottom-of-the-totem to a specialist who is integral part of the software development process.
Code CoverageAn automated tool that measures what percentage of your codebase is executed by automated tests. Sometimes used as a metric of quality but high ratings can be misleading.
Mutation TestingA tool that modifies code and runs tests repeatedly. If code can be modified significantly and tests still pass then flagged for further investigation. Useful for finding missed use cases automatically.
MicrosoftOne of the wealthiest software companies in the world. Makes money from Windows Operating System, Azure Cloud Services, Microsoft Office, and other properties. Founder is Bill Gates but no longer heavily involved.
AppleOne of the wealthiest software companies in the world. Makes money from iPhones, iPads, and Mac computers. Devices use iOS or OsX operating systems. Founded by Steve Wozniack and Steve Jobs.
GithubWebsite used by many developers to back up their git source code. Introduces many social open source concepts to the masses. Popularized Git, invented Atom text editor. Owned by Microsoft
KaggleWebsite prevalent in the data science space. Companies give them data sets and Kaggle runs contests for analysis and insights based on the data.
Hacker OneWebsite prevalent in the cybersecurity space. Hired by companies to run bug bounty programs where hackers can be rewarded for finding and reporting security vulnerabilities in popular software.
GitlabOpen source software product and website that can host git source code (similar to Github) but provides many other features as well.
AtlassianCompany that provides many popular development services including Bitbucket source control hosting, Jira issue tracker, and Crucible code review tool
StackOverflowPopular Q&A website created by Jeff Atwood and Joel Splonsky. Aims to be a knowledgebase for all questions developers might ask. Has spin off Stackexchange sites for Q&A on non-programming topics.
Venture Capitalist (VC)Type of company that invests in growing companies. VC firms typically look to invest large amounts of money in businesses with high growth potential and can obligate companies to providing high returns on investment.
Angel InvestorAn individual or group that invests their own money in an early stage company in exchange for an ownership stake. Typically smaller amounts of money and less pressure than venture capital investment.
Alphabet Inc.Parent holding company of Google Inc and other related companies like Waymo and DeepMind. Created in 2015 after a restructuring of Google.
Oracle CorporationMassive software company that owns a very popular enterprise data system, the Java trademark, and various cloud services.
SlackChat program and website commonly used for chat in online groups and companies with a significant remote work-force.
AzureMicrosoft’s cloud services platform. Offers hosting, renting of virtual machines, databases, build systems, source control, and all manner of infrastructure as a service.
Amazon Web Services (AWS)Amazon’s cloud services platform. Offers hosting, renting of virtual machines, databases, build systems, AI, and all manner of infrastructure and utilities as a service. Currently the most popular SaaS provider.
Software as a Service (SaaS)Business model where clients pay a fee in order to use online software without installation. Typically the software is administrated via a web interface and updates are applied instantly and continuously.
Website HostCompany that provides computers that serve up a web application to the internet. Often a large company like AWS but can be managed in-house by anyone with a good internet connection and a consistent IP address.
AWS LambdaExtremely cheap service provided by Amazon where you can set up a program to run whenever a certain url is hit. These must be simple but can be useful for integrating other services with custom code.
Application Programming Interface (API)A defined way of interfacing with software. Often used to refer to how internet services (eg Google Maps) might be used by other applications but can be the documented way of interacting with any code.
Internet Relay Chat (IRC)An older but still popular chat system which is completely free and open for anyone to implement or use and fully distributed with no central location.
HerokuA website that offers scalable hosting and other useful tooling. Specializes in hosting Ruby and Node web applications.
TopCoderA website that runs programming competitions where participants can win cash paired with a software subcontracting and consulting business.
ApacheAn incorporated community dedicated to open source. All Apache projects are published under the Apache license, similar to MIT.
CloudflareA company that provides world-wide infrastructure for scaling web applications. Provides CDN, caching, encryption, and denial-of-service protection to many businesses and individuals. Competitor with Akamai.
AkamaiFirst content delivery platform company on the market and still a popular infrastructure for extremely large web application scaling. Competitor to Cloudfront.
Dot-com BubbleHeavy market speculation in early internet companies and then the subsequent crash that occurred between 1997 and 2001. Many large companies went out of business. Heralded the beginning of advertising supported content.
International Organization for Standardization (ISO)International umbrella organization for a variety of standardization bodies. For example ISO 8601 defines an unambiguous format for serializing dates and times across any time zone.
Unity 3DPopular, free (but not Open Source) engine and development environment useful for creating all manner of video games and 3d experiences on all manner of platforms. Typically programmed in a modified version of C#.
Unreal EnginePopular 3d engine used by many first person and other 3d video games.
NetscapeCompany and web browser that was a web pioneer throughout the 1990s. Lost the browser wars to Microsoft and were purchased by AOL in 1998. Browser was reborn as Firefox. Many alumni are very influential in the industry.
Id SoftwarePioneering video game company started by John Carmak, John Romero, and others. Created Commander Keen, Wolfenstein 3d, Doom, and Quake.
FacebookCompany founded in 2004 by Mark Zuckerberg. Initially a social network for university students, now has over two billion monthly active users. Holding company acquired WhatsApp, Instagram, Occulus VR, and many others.
TrelloTask tracking web application initially created by Fog Creek software and purchased in 2017 by Atlassian. Focuses on enabling a lightweight Agile process that mimics physical post cards on the wall.
Design PatternsA set of terms used by developers to discuss common ways of structuring and using their code. Examples include factory, composite, visitor, decorator, and many other patterns.
HackingThe act of playing and experimenting with a system to see how it works or building on top of it.
Black HatAttacking a system with malicious intent.
White HatAttacking a system with the intent of discovering gaps in security which can then be reported and used to improve the system.
Model View Controller (MVC)Popular and frequently misapplied design pattern which recommends creating separate components for the data, views of the data, and components that stitch these together and allow user interaction.
Model View View Model (MVVM)Design pattern commonly used in user interfaces where data in an object constantly reflects the state of the UI. User interactions change the object and changing the object modifies the interface.
Object Relational Mapper (ORM)Pattern often used for interfacing with SQL/relational databases. The ORM provides a way to interact with language objects and maps changes automatically to the underlying database tables.
Model-bindingDesign pattern heavily associated with MVVM. When a user interacts with inputs, values are automatically synchronized to an object.
Distributed Denial of Service (DDoS)Attack on computer systems which directs to it a large amount of internet traffic from a variety of sources. The system cannot handle all requests or distinguish attack from legitimate traffic and becomes inaccessible.
Unidirectional DataflowPopular pattern for building user interfaces where every user interaction triggers code that change a single model. The user interface is then recalculated completely from this model. Popular in frameworks like ReactJs.
MicroservicesArchitectural pattern where a large system is designed as a set of independent smaller applications which talk to each other. Each has its own team and is free to make its own technical decisions. Similar to SOA.
Service Oriented ArchitectureArchitectural pattern similar to microservices where a system is designed as a series of cooperating services. These tend to be more tightly coupled than microservices but can also share code more easily.
N-Tier / Onion ArchitectureArchitectural pattern where a central “domain” encompassing the application’s core logic interacts with a variety of surrounding services. These in turn might be surrounded by yet other services that interact with them.
Domain Driven Design (DDD)Architectural philosophy and set of design patterns that recommend studying the way the business operates and mirroring its language in code as well as finding natural seams to break out independent contexts.
PixelA color at a certain location in a raster image grid. Often corresponds directly to a physical LCD crystal dot that composes a monitor screen.
Raster Format ImageCategory of image file format that encodes the color of each pixel that composes an image.
Vector Format ImageCategory of image file format. Stores the image as a description of its visual elements (eg “a line from point 100, 200 to 600, 1200”). Examples: svg, eps, stl
bitThe smallest piece of information possible. Either a true or false, in hardware often whether an electrical signal exists at a certain time or not. Digital storage is a series of billions of bits in order.
byteA fixed number of bits - usually 8. It is more useful to talk in terms of bytes than bits since it can represent more values (eg 2^8 = 256 as opposed to just 2).
SerializationThe process of converting a data in running code into a series of bytes that can be stored or transmitted to another system. The same data can be loaded into running code later.
BinaryA process of serializing any data. Focuses on bits rather than bytes. Binary serialization sizes are usually smaller but more difficult for developers to modify directly for example with a text editor.
Text EncodingA process of serializing text data to a binary format. Usually involves a large table that maps each character to a number which are then converted to binary using a variety of methods.
UnicodeA very large, international standardized table that aims to map any known text character in any written language to a unique number. Maintained by the unicode consortium. A row in this table is known as a code point.
UTF-8Binary serialization of numbers (typically generated from a unicode mapping) that optimizes for situations where numbers 0-127 (2^(8-1)) are most common. Variations like UTF-16 and UTF-32 are often used internationally.
ASCIITable of 127 common English-language characters and a number associated with each. Frequently used in the early days of computing. For compatibility, the first 127 values of the Unicode table are identical.
YAMLFormat often used for storing simple structured data. Optimized to be human readable and easily editable with a text editor.
XMLRelatively complex and verbose format used for storing data. Has many features such as the ability to denote relationships. Optimized for ability to represent all types of data while remaining somewhat human readable.
XSLTLanguage for transforming XML into other formats. Can be used to convert XML to HTML, Latex, and many other formats. Often used to modify XML storing configuration data to store configuration for a different environment.
JSONFormat often used for storing simple structured data. Optimized to balance being human readable and easy to edit, while simultaneously being a subset of JavaScript and hence valid code.
INIOlder format often used for storing very simple configuration data. Supports very little structure (eg it is not possible to denote an array) but is very easy to read and edit manually.
NetworkingThe act, field, or industry of joining many computers so that applications running on these may communicate with each other. Typically used to describe the lower level activities of how data reaches its destination.
Secure Socket Layer (SSL)Older industry standard set of encryption protocols that can encrypt content as well as verifying that content received has not been modified in transit, this depends in part on certificate authorities.
Transport Layer Security (TLS)Protocol that replaces SSL after SSL v3. Uses pre-installed certificates and the certificate authority system to ensure that traffic is both encrypted from people spying on the wire and not modified in transit.
Certificate Authority (CA)A company that is in the business of selling SSL/TLS certificates used as a key to encrypt network traffic. Some reputable certificates are pre-installed and new certificates can be vouched for by established CAs.
Let’s EncryptAn organization launched in 2016 that serves as a certificate authority and provides a free, automated way of verifying and generating your own certificate. The goal is to promote encryption for the entire internet.
Open Systems Interconnection Model (OSI model)Conceptual model of how data is transmitted over the network. Composed of seven layers each of which are responsible for a conceptual step. Eg. the network layer defines how data finds its way along the network.
Transmission Control Protocol (TCP)Specific protocol used by web traffic to ensure data can be sent across a complex network, arrive at its destination, and be assembled into the correct order. Used to transmit text, images, email, HTTP, etc.
User Datagram Protocol (UDP)Specific protocol used by web traffic to send data across a complex network. Unlike TCP, it does not ensure that all data arrives at the destination. Used for transmission of media like audio and video.
Internet Protocol (IP)System of addressing computers connected to a network. Requests are routed to the connected computer with a given IP address. Composed of four numbers 0-255 separated by a dot (eg
Internet Protocol version 6 (IPv6)Version of IP using 128 bits (“standard” IPv4 uses 32) allowing for far more IP addresses to be available. Represented as a group of hex digits with a colon separator (eg 2001:0db8:0000:0042:0000:8a2e:0370:7334).
Domain Name System (DNS)A system of distributed lookup tables that map a domain name (eg to an IP address. A web request will look up the IP address for the requested url domain name before being sent out over the internet.
Domain Name RegistrarA company that sells domain names. When one is sold, it is added to the company’s lookup table and will eventually be visible in other registrar’s lookup tables as well. Looking up an address (DNS Lookup) is free.
Top Level Domain (TLD)The last “.com”, “.org”, “.biz”, “.uk”, etc part of a domain name. TLDs are regulated by the ICANN organization and have to follow certain rules (eg the UK manages .uk, universities manage .edu).
Content Delivery Network (CDN)Business which distributes content in a geographically optimized manner. For example an image requested from a CDN will be sent from a nearby (in network terms) server.
pingSimple command line program available on most computers. Used to determine if a computer at a network address is available and as a quick and dirty measure of how long it might take to respond to a request.
traceroute / tracertCommand line utility that is used to visualize the route over the network that network traffic might take to another computer. You can see a limited amount of information on each computer it passes through.
nmapCommand line utility used to find all devices connected to a network and what services can be accessed on these.
Packet SwitchingWhen data is sent across a network it is broken up into a series of packets each of which is sent to the destination independently. TCP guarantees a packet is delivered via a retry system. UDP allows packets to get lost.
Network Data PacketThe unit of data which is sent across a network. Each packet is akin to a mailed piece of a jigsaw puzzle. When all are received, the puzzle can be completed and presented to the user.
HubA piece of network hardware that broadcasts any signal received to all connected devices.
SwitchA piece of network hardware that listens for data packets, reads what connection each packet is addressed to and sends that packet only to that connection.
RouterA piece of hardware that connects two or more networks together. When receiving data, the router itself is treated as a destination for data. It then modifies the packet to work on the other network.
ModemA device for sending data between two points of a network by modulating an analog signal that is demodulated into a digital signal on the other end.
Port (Networking)A virtual or physical connection available on a computer system which can hook up to a network of some sort. Typically numbered and managed by the Operating System.
MetadataData about other data. For example a header that precedes a bunch of data that tells you the subject, or how much data there is, or what format it is in.
Word Wide Web / WWW / WebThe technical idea and set of standards that web browsers and web servers use to communicate, transmit, and display data. Initially pioneered by Sir Tim Berners Lee and grew rapidly in the 90s.
Hypertext Transfer Protocol (HTTP)Protocol defined by Tim Berners Lee for how the data and metadata in web communications should be structured. Requests have a verb and url, responses a status code, all can have text headers and a text or binary body.
Headers (World Wide Web)Standard for how to send metadata alongside HTTP web requests. Consists of a series of text keys and values. Some keys are defined to have special meaning for networks or browsers.
HTTPSHTTP protocol wrapped by TLS or (in the past) SSL encryption protocols. Encrypts sensitive data and ensures cryptographically that web requests haven’t been modified in transit.
HTTP/2Update to the HTTP protocol that supports features like the ability to handle multiple requests on a single connection and the ability to push additional data to the client beyond what was requested.
REpresentational State Transfer (REST)Set of recommendations on how to structure URLs and how to use HTTP verbs in order to create APIs on the web. Focuses on treating the server as a set of resources that a client can read or modify.
Origin (Networking)When making a web connection, the protocol, domain, and port portions of the url. Not the path (eg the part following `.com/`) or parameters.
Single Origin Policy (SOP)Security policy implemented by browsers where code running on a web page that requests data from a different origin is strongly limited in what it can do with the received data.
Cross Origin Resource Sharing (CORS)A header that can be added to web responses that will result in browsers relaxing their single origin policy and allow others to integrate with and use your data directly.
Content Security Policy (CSP)Web browser feature allowing the setting of headers onto an HTML document that limit the sort of network activity is allowed to code running on the page. Good idea to set specifically as can prevent XSS vulnerabilities.
Programming LanguageA syntax that could be used to organize instructions to the computer. Includes a compiler, interpreter and/or runtime necessary for executing the code and usually a “common library” of helper functions.
ElmProgramming language used as an alternative to JavaScript for writing web applications. Transpiles to JavaScript but bears little similarity, is functional with an advanced type system more closely remembling Haskell.
RProgramming language used frequently in data processing, analysis, and visualization. Supports easy denotation of mathematical operations and working with sets of data. Often used with the R-studio software.
MathematicaA programming language and IDE software used frequently in data science and analysis work. Invented and developed by Stephen Wolfram and is proprietary.
ErlangEstablished functional programming language developed for programming network switches. Focuses on modeling things as a cluster of actors. Can be hot-patched, spread among multiple machines, and parallelized easily.
ElixirA functional, strongly typed programming language joining the lightweight syntax of Ruby with the powerful programming model of Erlang.
PhoenixA web framework for Elixir that is based in concept on Ruby on Rails. The underlying tech is very different however, supports parallelization and has seen incredible performance compared to other platforms.
COBOLAn older procedural programming language that runs largely on old mainframe computers. Considered an ugly and difficult language but can pay well as a career due to many programs and limited developers working in it.
LispOlder functional dynamically typed programming language still in occasional use today. Progenitor of many other languages. Structures code as a set of s-expressions. Focuses on meta-programming, code that generates code.
C#Flagship programming language of Microsoft. A strongly typed, class-based, relatively verbose language. Started as a clone of Java but has gradually incorporated powerful features from other languages.
Visual Basic .NetLanguage closely related to c#. Runs similarly and can do most c# things but with a visual basic syntax. In some ways a misguided attempt to make a language that is easier to learn by being more verbose.
ClojureOpen source language that runs on the JVM and inter-operates natively with Java. Syntactically a form of Lisp, it is dynamically typed functional, and focused on meta-programming.
KotlinProgramming language created by Jetbrains for the JVM. It is strongly typed with a focus on readable, minimal syntax and adding a thoughtfully curated set of features from other languages.
Objective-CStrongly typed, relatively verbose programming language used primarily in iOS development.
CRelatively simple low level language that is commonly used in working directly with devices or in areas where heavy manual optimization is required. Used in core parts of operating systems, web browsers, game engines.
C++Programming language that evolved C by adding a class system. Used in many places where C is used as well as for application development. A progenitor of c#, Java, Objective-C, and many other languages.
HaskellFunctional programming language mostly used academically. Has an extremely robust type system that can be used to mathematically prove code free of certain types of errors. Focuses also on controlling side-effects.
JavaScriptDynamic, weakly typed, prototype-based programming language that runs in web browsers, is therefore a cornerstone technology of the web. Also runs on servers as NodeJs. More closely related to Scheme and Self than Java.
TypescriptProgramming language heavily inspired by C# that rather than compilation is transpiled (converted) to JavaScript code that can run in any browser. Focus is on being possible to add great tooling to coding for the web.
BASICVery old programming language from the 60s. Focus was to make it easier (as opposed to Assembly) for non-developers to write software. Relatively limited but further versions like visual basic could do much more.
Visual Basic (Classic)Software and programming language created by Microsoft in the 90s for writing Windows applications. Included the ability to visually create a UI which generated the proper code. Syntax was initially based on BASIC.
ScalaFunctional programming language that runs on the JVM platform. Often used instead of Java. Focus is on making functional programming to Java developers while adding many nice to have features.
HTMLNot a programming language but a way of marking up text with other text that a web browser can display as a web page. HTML doesn’t do anything but defines the structure of all parts of a document.
Cascading Style Sheets (CSS)System created in the 90s for allowing users to control what their web documents will look like when appearing in browsers. Composed of a secondary document of “display suggestions” for different elements.
Scalable Vector Graphic (SVG)Popular format for raster images. Similar in style to HTML but focused on drawing line images. Can be used in many places with HTML and CSS to provide drawings, animations, and effects.
PowershellProgramming language used in scripting of Windows systems. Dynamically typed with full access to the .Net runtime and focus on being accessible. Commonly used for system administration and automation.
PerlFamily of dynamically typed programming languages that saw heavy use in Linux system scripting in the 90s and early 2000s. New version Perl 6 is very different. Know for its terse style, difficult for beginners to read.
SwiftA strongly typed, popular programming language created by Apple. Initially created as an alternative to Objective-C for iOS development, now being used elsewhere. Known for being elegant with powerful low-level features.
PrologA logic programming language used often as a rules engine. Can evaluate a series of preprogrammed true statements about a system to answer questions about it.
PHPA dynamically typed, class-based language prevalent in the development of server-side web applications. Often mocked for being confusing and inconsistent yet runs much of the world’s most popular web software.
LAMP StackA popular combination of open source technologies for making PHP applications. Runs PHP with a MySql database, using the Apache web server on the Linux operating system.
RubyEstablished, object-oriented, dynamicly typed programming language written to optimize for “developer happiness”. Used for scripting and web development Ruby on Rails is by far the most popular framework in use.
Ruby on RailsPopular web framework used by Ruby developers. Developed in the mid 2000s and influenced many subsequent web frameworks with ideas of convention over configuration and making working with REST simple.
ActiveRecordORM library for working with and managing a database often used in Ruby. Integrates tightly with Ruby on Rails. Occasionally criticized for the limitations it imposes on data models using it.
RakeBuild system used in the Ruby ecosystem. Used to express the order in which different scripting tasks must occur.
gemLibrary stored in the central Ruby package manager. Many Ruby programs stitch together many gems to create complex applications.
JVMCommand line utility used for managing which version of Ruby is used to run an application. Has been very influential on similar version mangers in other languages.
PythonEstablished dynamicly typed scripting language. Attempts to optimize for consistency and productivity. Has a massive set of community libraries especially in data science and Machine Learning.
DjangoA server-side web framework for building HTML and processing input and storing data in a database that is popular when working in Python. Seen as a Python analog to Ruby on Rails.
FlaskA minimal web framework for creating web server applications popular when working with Python. Similar to Ruby’s Sinatra framework, provides very basic features and lets Flask plugins add features.
PyPIPython Package Index. A centralized repository of Python libraries as install-able packages.
Jupyter NotebooksA notebook based programming environment. Used largely with Python but supports many programming languages. Useful for creating interactive documentation, or just interactively exploring some data or library.
PipA Python tool used to install Python packages into the current Python environment.
PipenvA Python tool that creates and manages a Python “virtual environment” per application which isolates it and its packages from external changes.
SqlAlchemyPython package that is an Object Relational Mapper for working with the database in a class-oriented manner.
JavaOpen source language and runtime. A strongly typed, class-based, relatively verbose language. Very popular since the mid 90s. Trademark and implementation now owned by Oracle. Sometimes used interchangeably with JVM.
Java Virtual Machine (JVM)Java runtime which takes the bytecode from JVM-based language compilation and executes it on the target machine, adapting it to the specific model of CPU as it runs. Provides features like memory management.
SwingJava framework for building user interfaces. Frequently used for Desktop systems.
Spring BootJava framework for rapidly building well structured web server applications. Analogous to Ruby on Rails but runs on the JVM.
SpringPopular open source Java framework for inversion of control.
MavenBuild and packaging tool popular in the Java space.
.NetUsed to refer both to the broader Microsoft .Net ecosystem and, to the virtual machine used by it (similar to the JRE), and to the various utility libraries built in as the .Net Framework.
ASP.NetA system for creating web servers that run on .Net. Typically not used directly but with an additional framework such as Webforms, Asp.Net Mvc, Blazor, etc.
WinformsA UI system for building windows desktop applications. While still in use, mostly deprecated in favor of WPF.
NugetA package manager and central repository used by .Net projects to distribute and install reusable libraries. Similar to Python’s pip, Ruby’s gems, or Node’s npm.
WebformsA framework for building server-side web applications on .Net popular in the early 2000s. Created specifically to ease the transition for VB6 developers to the web. Widely considered complex and difficult to work with.
Windows Presentation Foundation (WPF)A framework for creating user interfaces on .Net. Used primarily for programming windows desktop applications.
Windows Communication Foundation (WCF)A framework for communicating between applications where at least one of the applications is .Net. Usually used for building HTTP web services but supports many other communication mechanisms.
.Net StandardA standard for what sort of functionality must be provided by a virtual machine and standard library for it to be considered .Net and be compatible with other .Net systems. .Net Core is the reference example.
.Net CoreAn alternate implementation of .Net Framework complying with the .Net Standard. Focus is on keeping everything modular and on enabling .Net development for Linux and OSX.
MonoAn open source implementation of .Net Standard that can run on any operating system. Powers the Unity 3d engine and used in many other places.
Asp.Net Web ApiPopular open source .Net web framework created by Microsoft. Focused on making it easy to build REST APIs that take in and return data.
Entity FrameworkOpen source ORM library by Microsoft. Has two modes: Database First - which will generate classes from a database; or Code First - which adapts a database to a custom code model. Includes a migration system.
ECMAScriptOfficial name of the standard usually referred to as JavaScript. “JavaScript” is a trademark of Oracle, but the language standard is maintained by the ECMA European standards organization.
Douglas CrockfordAuthor of JavaScript, the Good Parts; a popular book about using JavaScript the “right” way with good programming practices. He also formalized the JSON format.
Brendan EichInvented the JavaScript language in ten days while at Netscape and has participated actively in its development, in the Firefox web browser, and in the development of the Brave browser.
User Interface (UI)The part of your application a user is meant to interact with. Can be a web graphical interface, an app ui, cli commands, REST endpoints, or even just code. Whoever your user is, the way they interact with your code.
User Experience (UX) DesignThe act of field of analyzing how users interact with a system and optimizing their experience. Often focuses on accessibility, intuitive design, and making things simple but not necessarily easy.
Isomorphic CodeCode written in such a way that it can work either in a client or server environment. Occasionally these patterns are used on the web to speed up “first render” of web applications.
WebassemblyExtension to JavaScript which allows using web browsers to run code compiled to a wasm low level code. Can allow programming in languages other than JavaScript in web browsers as well as highly performant web apps.
Web Browser Web WorkerWeb browser technology that allows JavaScript on the page to parallelize work while retaining the safety of running JavaScript.
Web Browser Service WorkerWeb browser technology that allows custom code to run at the network request layer. Can be used to implement custom caching strategies, stub things out, and optimize network traffic.
Progressive Web App (PWA)Set of web technologies that when used together can generate an experience in a web application indistinguishable from an installed natively written app.
TranspilationAct of taking code written in one high level programming language, and converting it to equivalent code in another high level programming language. Used commonly by JavaScript developers eg with Babel.
MinificationAct of transpiling code optimizing it for as little text characters as possible. Usually involves removing whitespace and auto generating short, terse names. Very common in JavaScript development.
BundlingAct of combining web assets (eg JavaScript files) into a single asset that can be transferred in single connection.
Babel (JS)Technology used by web developers that takes JavaScript code and modifies it to equivalent code usable with older versions of JavaScript. Used so that you can use new language features but still support older browsers.
WebpackTechnology used to provide JavaScript modules, transpilation of features, serving and bundling of JavaScript, CSS, and image files.
NpmPackage manager that runs on NodeJs projects and is used almost ubiquitously by JavaScript projects. Known for an extremely large repository of shared code, much of it however is of uneven quality.
YarnAn alternative to the npm installer that provides more options while still using the central npm repository of code.
EslintA tool used in JavaScript development to monitor code for stylistic and other easily verifiable errors. Useful for catching mistakes early and enforcing a common style within a team.
PrettierA tool used in JavaScript development. Similar to Eslint, but instead of just warning developers of a violation, will actually modify code to fix it.
UI FrameworksA category of library focused on helping to create graphical user interfaces. The point of a UI framework is to make it simple to create, modify, and share custom UI components. Examples include Angular, React, VueJs.
ReactJsPopular UI library that makes creation of components as easy as a JavaScript function. Introduced the concept of jsx and markup-in-code. Focuses on providing a controlled, straightforward manner for changes to UI state.
BackboneJsOlder JavaScript UI framework, one of the first that popularized an MVC-style workflow for building JavaScript-driven user interfaces.
AngularOpen source UI Framework maintained by Google. Regarded as opinionated and verbose but powerful. Typically written using the Typescript programming language and focuses on providing lots of Angular-specific tooling.
AngularJsOlder version of Angular often referred to as Angular 1.x or <2. Prior to Angular 2, AngularJs had a very different model. While still used, there is much less tooling available and higher discipline required to do well.
VueJsPopular JavaScript UI framework using the same technology as ReactJs with a focus toward providing common use cases and patterns that work out of the box.
React NativeA technology that allows writing ReactJs-style code in JavaScript that can be compiled into a native, cross-platform, mobile app. Focus is on bringing the ReactJs componentization model to mobile development.
IonicA technology that allows writing Angular code in Typescript or JavaScript that can run as a cross-platform, mobile app. Focus is on providing many components out-of-the-box and a robust development environment.
FlutterAn open source technology created by Google that allows writing code in the Dart programming language that compiles into native, cross-platform, mobile applications. Focus is on performance and good development tooling.
Database / Database Management System (DBMS)A category of technology used for systems for which the primary task is to reliably store large amounts of data. Typically users don’t interact with these directly, but with programs that wrap one or more DBMSes.
GraphQLA specification for querying and modifying data. Often used for building web APIs.
ODataA specification, maintained by Microsoft, that can be used for building web APIs. An OData api can usually be queried via LINQ.
Prepared Statements / Parameterized SQLTechnique for interacting with SQL databases from a programming language. If used properly, will render a system immune to SQL Injection attacks.
Database MigrationsA system - typically a code library - for synchronizing a database system structure with changes required by the codebase. Used to automatically generate and update databases on deployment.
CacheThe act of or system for storing copies of data in order to make subsequent access for it faster. Allows an explicit decision on the tradeoff between data being up to date and fast to access. See CAP Theorem.
Relational DatabaseUmbrella term for a type of database technology based in design on set theory and interaction via the SQL language. Is the most popular category of database and is often seen as a good default.
Database SchemaUsually refers to relational databases; the defined structure of the data being stored. Design requires great care as mistakes can lock a system into a sub-par structure. Typically considered part of development.
Sql ServerA type of relational database system created by Microsoft and popular in systems using Microsoft technology. Most versions require a moderately priced license to use in production.
Oracle (Database)A type of proprietary relational database system created by Oracle Corporation. Known for being expensive but with good features and support. Used frequently in enterprise business scenarios.
MySqlOpen source relational database popular in the PHP community. Focus is on balancing light weight footprint and professional features. Acquired by Oracle resulting in multiple maintainers forking it to the GNU MariaDb.
PostgresPopular open source relational database. While more difficult to work with than MySql, the focus is on being fully featured and it provides a large and robust community of available plugins.
SqlitePopular open source relational database. Only has the most basic features but is extremely portable - the entire database is a simple file and unlike most others, doesn’t require an always-running service.
NoSqlAny type of database that does not use Sql and is not relational. Mostly distinguished historically as relational database theory had a lot of its math worked out and resulted in relational databases developing first.
Document DatabaseCategory of database system with a focus on storing documents. Unlike relational databases these do not usually have a schema and can be very fast but also less flexible for querying.
MongoDbType of OSS document database where documents are stored as JSON objects. Optimized for fast writes and a quickly growing and changing data storage needs. One of the first NoSql database systems to see common use.
CouchDbType of open source document database. Optimized for running anywhere and providing the ability to synchronize multiple copies in multiple configurations.
ElasticsearchType of open source document database. Optimized for extremely fast and robust search across a variety of synchronized “indexes”. Good solution for caches and for a fast, powerful search interface.
Key / Value StoreCategory of database where every bit of data can be looked up by a unique identifier key (but the data itself can usually be any structure). Commonly used for caching systems.
memcachePopular open source key/value database. Is extremely fast but not durable - data is loaded in memory and goes away when the process restarts. Commonly as a caching layer for web applications.
RedisOpen source key/value database. Fast, distributed, and optionally durable, it is commonly used for caches, aggregations, and as a messaging queue.
RiakKey/value database with a large set of robust features focused on distributed computing.
Neo4jA type of graph database. Neo4j focuses on storing entities and their relationships. Can be used to efficiently query deep relationships such as querying information on friends of friends.
Responsive DesignDesign philosophy commonly considered on web pages. Styles should respond to the capabilities (typically screen size) of the medium they’re viewed on. Elements should rearrange themselves to fit optimally.
FlexboxCSS feature useful for creating web page layouts that adjust well to changes in screen size.
CSS-GridCSS feature useful for creating complex web page layouts. As of 2018, this feature has moderate support in web browsers.
BootstrapCSS and JavaScript framework for building rich, responsive web pages. Initially led the charge in Responsive design but many of its features now have excellent built-in alternatives.
SASS / SCSSOpen source styling language similar to CSS that can be converted to the CSS equivalent. Contains many often requested CSS features such as functions, calculations, nested selectors, and variables.
LESSOpen source styling language similar to CSS that is converted to the CSS equivalent. Similar to Sass but simpler and has more options for how to run.
Polyfill (Web browsers)A bit of CSS and/or JavaScript code that - if a certain feature does not exist in the web browser - will mimic it for running code. (Eg. Some browsers don’t support sessionStorage, which can be added with JavaScript.)
AutoprefixerTool for writing CSS. You configure the browsers to support and use all modern CSS features. Autoprefixer creates versions of your CSS that will work in your target browsers.
PostCSSTool for writing CSS. Similar to Autoprefixer but can do more due to the ability to shim features with JavaScript polyfills.
StylelintTool for writing CSS. Analyzes your stylesheets and make suggestions on likely errors based on a built-in set of rules.
CSS FrameworkType of CSS library that assists with creating UI elements like dropdowns and dialogs. Usually also proposes a manner of structuring and maintaining a large CSS codebase.
BulmaPopular open source CSS framework that uses flexbox techniques to create a flexible and responsive design. Bulma is modular and designed to only have certain portions included.
Source ControlA category of tool used by developers to safely store checkpoints of their code. This is a core tool used often to make backups, run code experiments, deploy code, and collaborate.
Commit / Check In (Source Control)A source control term for a checkpoint. Once a commit is made, it is possible to revert code to that exact state at any point in the future.
Branch (Source Control)A source control feature where developers create parallel histories of work both originating from a common commit.
Distributed Version Control System (DVCS)A type of source control system where everyone with a copy of the code holds a copy of the entire history. One is as valid as the other and there is therefore no “central” system except when agreed upon by convention.
GitCreated by Linus Torvalds, is an extremely popular distributed source control system with a focus on maximum flexibility for teams. Users can make checkpoints while offline, branch easily, and merge entire histories.
Mercurial / HgA distributed source control system similar in capabilities to Git but with an added focus on an intuitive command line interface and exposing only commands that do not modify history by default.
Feature BranchingThe practice of creating a branch any time a developer starts work on a new feature. The feature can therefore be developed in isolation of other work and merged when complete.
Concurrent Versioning System (CVS)An older but historically significant centralized source control system. CVS used a central server for synchronization between developers, and rather then commits only tracked histories of individual files.
Subversion (SVN)A centralized source control system using a central server for synchronization between developers. SVN was explicitly designed to address shortcomings in CVS. While popular for a while, now mostly supplanted by Git.
Team Foundation System (TFS)A system provided by Microsoft nominally for source control. However it also includes reporting and project management features. The source control part can use Git as an engine or its own SVN-like system.
Subversion Check OutThe term for getting code at a particular checkpoint so that it can be experimented with, fixed, analyzed, or otherwise worked on.
Pull RequestFeature of websites such as Github that host DVCS. Essentially a user interface over a request to pull in changes from a cloned repository. Often used as a time for collaboration and code reviews.
ForkFeature of websites such as Github that host DVCS. Process of creating a copy of the code in your own account that you have access to commit to. A fork is usually used as a point of origin for a pull request.
Clone (Source Control)Act of downloading and creating a cloned repository - a full copy of the full history of the project. When using DVCS, it is typically done once by each new team member when they initially “get a copy” of the code.
Merge (Source Control)When there are parallel histories of code changes either due to purposeful branching or developers making changes without awareness of each other, a merge is used to resolve differences and join the histories.
PushWhen using DVCS, a push is the process of saving your code history to another repository that was previously cloned and that you have write access to. Used often to backup code and share changes with teammates.
Git AddWhen using Git, changes you want to commit have to be added to the index / staging area using this command. Only changes stored in the index will be committed.
Pull (Source Control)When using DVCS, the process of pulling in changes from another source. A pull request is literally a request that a project owner pull in changes from a previously cloned repository.
RebaseA technique for modifying history in DVCS systems. Often used in workflows popular in open source, can for example be used to compress a sequence of many changes into one which can be useful for anyone viewing history.
Stage (Source Control)A generic term for preparing changes that will be stored by source control.
Ignore file (Source Control)A file used to configure source control. Used to define files that will not be stored in commits. Frequently used to ignore configuration files, passwords, and results of builds.
AccessibilityDesigning application and web UIs in such a way so that they can be used by blind, deaf, and otherwise disadvantaged people.
World Wide Web Consortium (W3C)The standards organization of the Web. Founded by Tim Berners Lee and composed of multiple committees, organizations, browser vendors, and standards bodies.
Web Accessibility Initiative (WAI)An effort lead by the W3C to improve accessibility on the web for people with disabilities.
Web Content Accessibility Guidelines (WCAG)A series of guidelines published by the W3C as part of the Web Accessibility Initiative. Specifies how to build web pages that are optimized for use by people with alternative devices, especially the disabled.
Cyber-SecurityAn umbrella term for all manner of hacking, defensive security, policy writing, and enforcement that has to do with attacking and keeping computer systems safe.
Tailored Access Operations (TAO) UnitAn elite hacking group within the NSA often concerned with offensive operations. Together with various other “white hat” groups is occasionally referred to as the “Equation Group”.
PhishingA category of typically black hat behavior where individuals are tricked into revealing private information using a computer, telephone, email, or some other communication medium.
OWASPOrganization that maintains lists of common attacks on internet-connected systems and their associated defensive remedies.
Common Vulnerabilities and Exposures (CVE)A public database of known cyber-security vulnerabilities and disclosures. Vulnerabilities can be referred to the their CVE identifier eg. CVE-2017-9805 is the Apache Struts vulnerability used in the hacking of Equifax.
SQL InjectionA common type of vulnerability where an attacker crafts input that may cause a system’s database to do unwanted things such as delete or reveal sensitive data. Preventable through the concept of parameterized queries.
Cross Site Scripting (XSS)A common type of vulnerability where an attacker crafts input that may allow them to take over the browser of others viewing data on the same page. Used often to steal credentials and gain unauthorized access.
Cross Site Request Forgery (CSRF)A type of vulnerability where a malicious web page tricks a user’s browser into sending requests to another website in a way that is indistinguishable from the user triggering those requests on purpose.
Side channel attackAn attack on a system via the analysis of its implementation. For example stealing a password by listening to key-press sounds and their timings.
RansomewareA category of attack - often in the form of a virus locking all files and computers behind a password - where the attacker extorts money from the target to cease the attack.
Buffer overflowVulnerability in systems where inputting too much data can be used to cause unplanned code to execute potentially taking over the system.
ShellshockA vulnerability in the Bash CLI which allows attackers to escalate privileges by exploiting the fact that many tools use environment variables inappropriately to share functions.
HeartbleedA buffer overflow vulnerability in the popular OpenSSH open source software that enables attackers to execute code on a server you do not control. Still commonly seen due to the difficulty of updating many IoT devices.
Meltdown & SpectreA timing side channel attack possible on many CPUs and can enable an attacker to steal data from other running applications. Demonstrates the limits of CPU speeds and optimization tradeoffs.
WannaCryA worldwide series of attacks distributed via a virus using Windows bug known to but previously undisclosed by the NSA. This bug was revealed by the Shadow Brokers.
Shadow BrokersA mysterious hacker organization that appears to be in possession of hacking tools stolen from the NSA. It occasionally releases these publicly while selling others for a nominal fee.
Cryptographically SecureAn system which can be mathematically proven to be secure. This typically refers just to the system’s encryption, it can still usually be compromised by attacking people and side channels.
Public / Private Key EncryptionA category of encryption system (eg RSA, Elliptical Curve) which allows anyone to encrypt a message in a way that only the private key holder can read it. A core part of TLS/SSL.
Operating SystemsA piece of software that enables applications to run on and use hardware in a manner by building to an abstraction of a computer and enabling running of multiple applications simultaneously.
Microsoft WindowsThe most popular Operating System in the world created by Microsoft. The earliest versions of Windows date back to the 1980s and was formative in developing the computer interfaces we commonly use.
UnixA family of multitasking operating systems. These systems are characterized by modular design and the “Unix Philosophy” of many simple tools that each do one thing well.
OsXA series of operating systems developed by Apple for running software on their desktop computers. Based on FreeBSD Unix and is therefore a cousin of Linux systems.
iOSAn operating system created and maintained by Apple for running software on Apple’s mobile devices. Is in turn a type of Unix operating system.
LinuxA category of operating system based on work by Linus Torvalds to create a kernel that is a free GNU version of Unix. Almost 600 variations of Linux - called distributions - exist.
AndroidAn open source operating system created and maintained by Google. This is a type of Linux that is optimized for running on mobile and low-power devices while enabling app distribution eg via the Google Play store.
DebianA open source Linux distribution with a focus on security, and stability, and on running primarily free software. Not very focused on being beginner-friendly.
UbuntuA popular open source Debian-based Linux distribution produced and maintained by Canonical. Focus is on being a good consumer operating system capable of replacing Microsoft Windows for common usage.
Chrome OSAn operating system created by Google for running Chromebook laptops. A variant of Linux, it is optimized for being a fully-featured always-online desktop system that can install and run applications from the Play Score.
Red HatA multinational company that produces and maintains Linux-based open source software including the Red Hat Linux distribution. Often associated with large companies running enterprise versions of Linux.
FedoraAn open source Red Hat-based Linux distribution. Focused on providing a good experience for end-users it is in many ways an alternative and a competitor to Ubuntu
BashAn extremely popular Unix/Linux “shell”. This is the application that allows users to run “command line commands” and interact with the file system, operating system, and various system utilities.
ZshAlternative to Bash, Zsh is largely similar but adds many improvements and features to standard Bash shell.
Process (Operating System)The way that an operating system allocates resources and executes a program. Includes security features to prevent one running application from reading information from or affecting the execution of other processes.
Thread (Operating System)A technique provided by operating systems and programming languages which allow applications to take advantage of multiple CPU cores and run pieces of code in parallel to - but still interacting with - each other.
KernelThe core of an operating system, runs in a privileged mode. Other applications interact with the kernel which manages their access to computer resources.
Kernel SpaceMemory is typically segregated into User Space (where applications run) and Kernel Space. This is where the operating system and low level device drivers live. Code here can inspect and modify other applications.
Thread SchedulerPart of an operating system that is responsible for scheduling when code in a thread should be sent to a CPU to continue execution. Will often stop threads to give others a chance to run and manages their priorities.
Service / DaemonAn application that is constantly running in the background. This is typically managed by the operating system which will restart them as needed and might give these applications special treatment.
HypervisorSoftware providing the platform to run and manage virtual machines. Some operating systems include an optional hypervisor that can be enabled and others (eg Virtualbox) provide their own.
Internet of Things (IOT)A very broad umbrella term for the fact that more and more everyday devices are being both computerized and hooked up to and accessible via the internet.
Raspberry PiSeries of ultra-cheap (often just a few dollars), low-power computers that can nevertheless run applications and full operating systems like Linux. Often used in education and robotics.
ArduinoA series of GNU integrated circuit designs and a company that creates these as hardware. Focus is on hobbyist-enabling, interoperable circuits that can be used in sensors and devices to interact with the real world.
TableauCompany that produces products useful in data visualization. These are all common tools in the fields of data science and business analysis.
Business AnalystThe role on a software project of distilling requirements into something developers can work on. This can be the responsibility of a PM, designer, developers, or a dedicated position.
Data ScienceThe growing field of analyzing large amounts of data in support of making it easier for business to make decisions. Frequently filled by statisticians, and/or people trained in machine learning techniques.
Big O NotationA system of analyzing and denoting the execution speed of an algorithm. Commonly used to analyze whether a given algorithm will be fast enough with large amounts of data.
AlgorithmA set of instructions - typically in code - on how to solve a specific type of problem.
Data StructuresA general term for the sort of low level structures that a given programming encourages people to use to solve problems. Examples are arrays, linked lists, trees, and certain uses of classes.
TreeA data structure where each node contains references to others with no cycles or backreferences forming a tree-like structure of branches leading to leaves. Often used as a way of storing data so as to be search-able.
B-TreeA tree data structure used frequently in storing data in a search-able, store-able, and modifiable format.
Linked ListA common data structure for representing a list of items that can be added to rapidly with no limitations on adding items. Can be viewed as a tree where each node can only point to one or zero other nodes.
Conditional / If / Branching logicLogic in code that evaluates code that checks for a condition and causes one bit of code to run if the condition is true and optionally another if false.
Looping CodeLogic in code that will cause a certain bit of code to repeat until a condition is met.
RecursionProgramming technique where a function runs itself. Recursive functions typically have a conditional where one branch recurses (calls the function again) and the other does not. Especially common in functional languages.
Tail Call Optimization (TCO)Feature of some programming languages where a recursive function can be written in such a way that it will be optimized by the language to run with minimal resource usage similar to a loop.
Type TheoryAcademic field of study of the sort of things that it is possible for typed programming languages to do. Advances in the theory often get picked up by highly typed programming languages such as Haskell, Scala, and F#.
Garbage CollectionA feature of many programming languages where the developer doesn’t have to manually allocate and deallocate bits of memory, instead the runtime will track what is used and occasionally clean up what is not.
CachingThe act of optimizing programs by storing previously seen inputs and outputs so that algorithms can return results that are already known rather than using resources to rerun.
Cache InvalidationCached results are not necessarily valid forever. Invalidation involves deciding when to remove results from a cache. Considered one of the hardest practical problems in programming as it varies on a case-by-case basis.
ComputabilityComputer science concept that a given problem can be solved with a reasonably efficient algorithm. Some problems are non-computable. Example: it is often to impossible to analyze a program to see if it will terminate.
Constraint SatisfactionA type of problem where multiple desired outcomes are proposed and an algorithm’s purpose is to balance between these to provide a sufficiently good solution.
Quantum ComputingA type of hardware and software which uses aspects of how sub-atomic particles behave to drive computation. In theory, quantum computers can be used to solve many traditionally unsolvable problems.
Universal ComputerTerm for a theoretical machine that can be used to run any traditional (non-quantum) program.
Turing MachineA theoretical model for how a universal computer might work proposed by Alan Turing. Meant as a thought exercise as implementation would be impractical. Sometimes used interchangeably with “universal computer”.
Lambda CalculusHeavily mathematical model for a universal computer proposed by Alonzo Church. Contains only the concept of functions which can be invoked with parameters and defined in terms of their parameters and other functions.
Von Neumann / Princeton ArchitectureA theoretical model proposed by John Von Neumann for how a universal computer might be practically implemented with a CPU, Memory, Storage, and I/O mechanisms. Almost all modern computers are based on this.
Alan TuringInfluential British mathematician and cryptography expert who did a great deal of the early work inventing and establishing the field of computer science as well as being key in cracking Nazi communication codes in WWII.
John Von NeumannImmensely influential Hungarian-American mathematician who invented much of the field of computer science. Is considered one of the greatest mathematicians of all time and worked for the Manhattan Project in WWII.
Alan KayInfluential computer scientist and programmer known for his work in the Smalltalk language, user interface design, and object oriented programming. Also known for his witticisms.
Douglas EngelbartAmerican engineer, user experience designer, and internet pioneer. Known for developing the mouse and hypertext and a vision for the future of computing that in many ways has still not come to pass.
Tim Berners LeeBritish internet pioneer who invented HTTP, HTML, conceived of, wrote the first software for, and popularized the web, developing many of its standards and setting up standards bodies to evolve these.
Donald KnuthAmerican computer scientist and author of the influential Art of Computer Programming. Often cited for his aphorisms and his opposition to software patents.
Functional Programming (FP)Programming paradigm often enabled by language features which emphasizes careful control of state changes, abstraction via composition of simple functions, and often type theory. Sometimes considered too academic.
Functional Reactive Programming (FRP)A technique used by functional languages which emphasize immutability to communicate with the outside world by modeling all inputs as streams of events that aggregate new states.
Object-Oriented Programming (OOP)Term emphasizing the use of objects grouping behavior and data as the main unit of abstraction. Easier to create components but harder to control application state. Often confused with the language feature of classes.
Aspect Oriented Programming (AOP)Programming paradigm where units of code are decorated with declarative statements that transform or add functionality at run or compile time.
Actor ModelProgramming paradigm where most aspects of the program are encapsulated into stand alone “actors” that run independently of each other and simply receive and send messages. Used frequently in simulations and modeling.
Imperative / Procedural ProgrammingProgramming paradigm - often considered the most basic - where statements focus on changing application state rather than describing effects or building a higher model. Procedural implies heavy use of functions for this.
Logic ProgrammingProgramming paradigm where the developer writes down a series of statements about the input and then asks questions. The runtime is able to figure out how to answer best given the constraints. Example: Prolog.
Machine Learning (ML)Computer science field about using statistical analysis techniques to infer connections and categorization. These techniques are often used to make suggestions or decisions based on analyzing large amounts of data.
Artificial Intelligence (AI)Superset of the field of machine learning including study of building artificial consciousness, playing games, parsing language, recognizing objects, and complex planning and modeling.
Turing TestThought experiment posed by Alan Turing as a description of “Strong AI” where a person interacts via text with either another person or computer and the goal for the machine is that the person cannot tell the difference.
Supervised LearningCategory of machine learning where a system is given “training data” with inputs and (manually created) desired outputs. This is used to detect patterns. Typically tested against a separately held testing set of data.
Unsupervised LearningCategory of machine learning where a system is designed in such a way where simply running it might generate insights. For example, AI that learns to play chess by playing against itself.
Genetic AlgorithmA technique for creating a sufficiently good algorithm for solving a problem. Involves creating programs that are capable of generating your algorithm, evaluating their output, then mixing the best performing ones.
Neural NetworkA (usually large) network of interconnected simple physical or logical circuits called neurons where the output of one affects input into the others. Often trained to recognize patterns from large amounts of data.
Back-propagationSupervised learning algorithm used in neural network design to gradually adjust neuron weights in a way that discovers a relatively ideal set of weights for training data.
Dropout (Machine Learning)Technique used in training neural networks where neurons will be removed from the system during training. Used to prevent network “over-training” where training data is memorized rather than detecting patterns.
TensorflowOpen source library and platform for machine learning developed and used internally by Google. Commonly used for building fast neural networks. Frequently used via hosting on the the Google Cloud platform.
PytorchOpen source Python library for machine learning tasks such as neural networks and natural language processing. Used and maintained by Facebook and often compared to Tensorflow.
function (coding)Bit of labeled code that can be invoked via its label to run from various parts of a program. Primary manner of removing duplicate code. Functions can both take input and return values to the invoking code.
closure (coding)A function defined inside another function when running would have access to variables in the function that contains it. The containing function is then called a closure.
function argument (coding)A value that is being passed into a function. Specifically refers to invoking of the function. When talking about the what the function does with it, the term is “parameter”.
interface (coding)A defined contract for one or more methods that can be guaranteed by the compiler to exist on an object. Interfaces can be viewed as defining the role an object can play within an application’s architecture.
implements (coding)A class implements an interface when it can guarantee to implement all methods an interface requires. This ensures that objects created from the class can be used in the role defined by the interface.
inherits / extends (coding)Feature of class based languages which allows creation of new classes by copying and adding features to existing ones. The resulting web of class structures is called an inheritance hierarchy or tree.
variable (coding)A named “slot” in a running program that can point to or contain various values. Often implemented as a bit of memory on the execution stack that stores a value or points to another memory location.
partial applicationCoding technique where a new function is generated by supplying some - but not all - of another function’s parameters. The resulting function can be made to run by providing the missing parameters.
module (coding)Central concept of many languages where code can be isolated from the effects of other code. Can include code from other modules and define code that can be included from itself.
namespace (coding)A naming convention where code structures can be grouped under a label that acts to group and organize related code. Namespaces can often be nested inside each other.
constant (coding)A labeled value used throughout code. Might be implemented similarly to a variable or by the compiler inserting the actual value everywhere it is used. The key feature is the label can never point to another value.
class (coding)Feature of class-oriented languages where a template for objects can be defined. This will contain data and predefined functions (called methods when in a class) that can operate on that data.
constructor (coding)In class-oriented languages, a function that will run when creating (constructing) an object from a class template. Often used for initialization and to ensure the object has all the data to be in a valid state.
super / base (object oriented coding)When a class is constructed from another via inheritance, the super (also called base) keyword is also used to refer to features of the parent class that might be overridden in the current object.
field / attribute (object oriented coding)A piece of data that is associated with an object. All instances of that object get their own copy of the field.
property (object oriented coding)A code structure that behaves like a field while allowing developers to write custom code that runs when trying to read or set its value.
method (object oriented coding)A function associated directly with an object, methods typically have full access to all fields of an object,
static (object oriented coding)Concept in class-oriented programming where a field, property or method can be associated directly with the class itself, not instantiated objects. Often considered the same as using the class itself as a namespace.
mixin (coding)The ability to copy data or behavior from another object or class into a new one. Often used in languages that support multiple inheritance (ie classes can inherit from multiple classes at once like in Python.)
decorator / attribute / annotation (coding)Concept from aspect-oriented and declarative programming where a function, class, field, or other code structure can be “tagged” with the label of another bit of reusable code that will modify its behavior.
hashset / dictionary / MapA commonly used data structure which associates keys each with a value. Makes it easy to detect duplicates, and look up values by a lookup key.
generator / enumerableProgramming technique where a sequence is implemented not as an array or linked list, but as code that can generate the next value in the sequence. These can be enumerated similarly to any other sequence of values.
iterator / enumeratorAn alternate way of working with a sequence (generator, array, or another structure). Provides a stateful structure where a method can be called explicitly to advance the current value.
expression (coding)A bit of code that when run produces a value that can be stored or passed. In many languages every valid bit of code is an expression. When code does not produce a value, it is called a statement.
expression tree / abstract syntax tree (AST)Code that has been parsed and tokenized and is itself represented as a data structure. Usually a step in compiling or interpreting a program, but can also be used to inspect code or even add abilities to it.
s-expressionCode written with a LISP-like syntax. This simple syntax means that code as written is already an expression tree. Makes it trivially easy to do meta-programming where the code can be inspected and change as it runs.
loop (coding)Code structure available in most languages where a bit of code can be made to run repeatedly until some condition is met. Notably loops do not use recursion which is a bit more limiting but far more optimized.
whileCode structure used to repeatedly run a bit of code until some condition is met. Usually the code block will make changes to a variable and that variable will be tested on each iteration to see if the loop should exit.
foreachCode structure which will draw items from an iterable sequence, store each value in a variable, and run some code on that item.
for loopAnother form of a while loop. This code structure is often used for running a bit of code on all items in an array and as such can be used as a limited foreach loop.
scope (coding)When a variable is declared, its scope is all other bits of code that can access its contents without having them explicitly passed.
global scopeVariable where its scope is all code in the application. Commonly considered bad coding practice as it is incredibly hard to trace and modify code that does this. Many languages heavily discourage the use of globals.
static / lexical scopingScoping style where a variable is accessible from inside anywhere where it is defined. This can be a block, or some other way of delimiting a variable definition. Alternative to dynamic scoping.
dynamic scopingScoping style where a variable is accessible from anywhere in the current call stack. Rarer than static scoping but used for creating extremely extensible software (eg Emacs).
block scopingThe scope of all variables is tied to its containing “block”. Functions, if, and while blocks typically create blocks, but blocks can also be declared in code manually. Most common form of scoping.
public accessibilityScope for a field, property, or a function that can be used by any code with access to the containing module or object.
private accessibilityScope for a field, property, or a function that can only be used from within the same module or object.
protected accessibilityScope for a field, property, or a function that can only be used from within the same module or - in the case of class-oriented languages - by objects created from classes that inherit the containing class.
stringData type available in most programming languages used to represent text of arbitrary length. Strings typically but not always can contain any character and be of most lengths.
integer / int (data type)Common data type representing a non-decimal number. Typically implemented in 32 bits meaning that it can be used to represent any integer between -1*2^31 and 2^31.
float / single (data type)Common data type representing a number that can be used in floating-point arithmetic - the ability to do decimal calculations of a reasonable precision. A typical implementation is stored in 32 bits of memory.
double (data type)Common data type representing a number that can be used in floating-point arithmetic. Takes more memory (usually 64 bits) but provides a far greater degree of precision than floats or ints.
boolean / boolCommon data type representing a boolean value - either true or false. Often implemented as just a single bit of memory.
arrayData type available in most languages used to represent a sequence of known (but usually changeable) length. Can contain any type of item, and items can be referenced by their index number in the array.
primitive (programming languages)Refers to a built in “basic” data type (eg int, string, bool, float, double) as opposed to a more complex data type, typically constructed from many primitives and/or other complex types.
map / selectMany languages provide these functions for transforming a sequence by running a function on each item in it and using the function’s output as an item in the new sequence.
filter / whereMany languages provide these functions for narrowing down items in a sequence by running a function on each item, if returning true the element will be present in the resulting sequence, otherwise it will not.
reduce / aggregate / foldA feature of many languages that will transform a sequence to a single value. In many ways a superset of map and filter as both can be implemented as a reduce operation.
generics (programming languages)A language feature where a type can be used as a type or method parameter to construct new compiled and type-safe types or behavior.
Koans / Code KataAn exercise where developers do a programming exercise over and over down to repeating key strokes with the goal of training muscle memory for certain techniques.
immutable dataData structures - often used especially in functional programming languages - where once created, the data within the structure is constant and can never be modified.
Simple not EasyCode design guideline that interacting with a bit of code need not be easy, but it should be as devoid of unnecessary complexity as possible.
Loose couplingCode design guideline that code should be grouped into components and that different components should not depend on each other directly.
high cohesionCode design guideline that code should be grouped into components and that conceptually related code should be grouped together.
Convention over configurationStyle of code design when building a complex program where, rather than extensive configuration, the code makes reasonable assumptions and allows overriding these assumptions for minimal configuration.
ACIDAcidity, Consistency, Isolation, Durability. Many databases ensure operations will always leave the database in a valid state; even when they fail. Some trade off aspects for other benefits, while some support all four.
CAP TheoremConsistency, Availability, Partition Tolerance. The mathematical truth that a distributed system can never be all three: all queries return consistent data, be always online, and support distribution among many nodes.
Composition Over InheritanceCode design guideline to whenever possible refactor common code to its own component referenced by simple variables or properties rather than using inheritance.
MonadAn academic term for a code structure that isolates side effects in a functional paradigm language.
Extreme Programming (XP)A formulation of the agile software development process created by Kent Beck. In XP, beneficial practices like test driven development and pair programming are taken to the “extreme” and done 100% of the time.
Side-effects (coding)A bit of code that when run, creates an effect other than just the function return. Can be output to a screen, write to a file, a network request, or just modifying a global variable.
Pure function / Side effects-free codingA function that when run will return a value with no side effects. This is often encouraged to do as much as possible as pure functions are much easier to reason about and to optimize.
Embedded SystemA system where the software is deployed along with the hardware and not intended for users to attempt to modify, or even install extensions or applications on.
EcmascriptOfficial name of the JavaScript language. “JavaScript” is a trademark of the Oracle Corporation whereas the actual syntax is defined by the ECMA standards body.
Progressive Web Application (PWA)Term for an application using a broad set of newer web browser features that aim to enable a website to behave more like an installed application, especially on mobile.
AjaxTerm for using JavaScript in a web browser to fetch data from a web-server using the XmlHttpRequest or fetch functions.
Single Page App (SPA)Web application that - rather than the full page request and redraw lifecycle - heavily relies on the technique of loading new data via Ajax and redrawing the page with JavaScript.
JavaScript Object Notation (JSON)A subset of JavaScript syntax used to define simple objects. This syntax is straightforward and commonly used as a serialization format for saving and transmitting data as well as for storing configuration values.
JSON Web Tokens (JWT)A cryptographically-secured serialization format that can contain JSON data, be read by anyone, but be generated only by certain authorities. Often used as a way of passing authentication information to apis.
Server-ClientArrangement of at least two systems where one (the server) stores data and takes responsibility for updating it consistently, and the other (the client) handles fetching, displaying, and sending requests to update data.
Back EndRefers to typical “server work” such as data validation, core business logic, data and domain modeling, distributed system planning, system administration, and deployment.
Front EndRefers to typical “client work” such as user interface design, ui logic and componentization, performance tuning, over-the-line security work, and api design. Often used to refer to all work done with web browsers.
Domain Specific Language (DSL)A programming technique where the developer constructs a library that can be used to more easily express concepts used in a specific domain. Often used to help less technical people to define business logic.
CookiesA web browser feature invented by Lou Montulli to ease the burden of storing session data in URLs. A browser can be set to send a bit of data along with every request. Often used for authentication and tracking.
Es6Term for a broad set of Ecmascript/JavaScript features spec’ed out in “version 6”. While some had been in browsers and libraries much longer, and some lag behind, the bulk were rolled out in most browsers around 2015.