- Acceptance Tests
- Testing of the complete application to confirm that it meets the project specification
- Methods that can access a private attribute. These methods control access to the attributes and can enforce value validation to make sure the attribute is properly constrained.
Application Programming Interface
- A collection of methods that provide the public interface to a subsystem used in your application.
- When we process a program written in Assembly Language, we use a tool called an assembler to convert the program into machine language the processor actually understands. We compile our programs.
- Assembly Language
- A human readable form of machine language. An assembler converts code written in this language into machine language. These languages are processor specific.
- A graphical representation of a user. Often an image, but it can be a cartoon-like character as well. To make the web more personal (and less anonymous), sites like Gravatar help users show their chosen avatar on many web sites. I consider this usage part of setting up a professional image.
- Baby Step
- A software development process that focuses on making very small changes to your code, followed by a quick test using the compiler to make sure you can run your code, and a run that generates output you can inspect to see how your changes are working. The key to this is doing this sequence often.
- Blasting Code
- An old school method of software development. This method involves long sessions of writing code with few attempts to test the code. The result is often long sessions fixing typing mistakes, followed by long sessions with a debugger trying to figure out why things do not work.
- A fork in the development road where a new feature is developed separate from the main line of development. Eventually this new line of development will be merged back into the main line.
- Camel Case
- A naming convention where the name is made up of multiple words, each with the first letter capitalized, and spaces removed. For example: CamelCase.
Content Addressable File System
- A scheme used by Git to store documents based on a hash code generated from a file’s contents. The hash code is used to form a directory name where the file is stored.
- Change Script
- This is a chunk of code that can be used by an appropriate tool to convert one product into another one. These scripts are the heart of source code control systems. The Unix tool diff is used to create such scripts.
- Create a copy of files living on a remote server for your local use. This creates a working copy of the project. You may (or may not) have rights to make changes and push them back up. It is common to clone project hosted on services like GitHub so you can use the code or study it. You can update your local copy at any time to keep up with changes in the project.
- Code of Conduct
- Every profession has a defined set of rules they expect members of that profession to follow. Most of the time, these rules are common sense, but they are defined to make sure every member understands what the profession seeks to present itself to the public. You are expected to know these rules and follow them when you join the profession. Look into each profession’s primary organization for guidance. For computer folks, this is probably the Association for Computing Machinery.
- A series of space-separated text items handed to the operating system. The first of these items is the name of some program (which may be internal to the operating system) you want to run. The rest of the items are called parameters which are processed by the program and control exactly what that program does.
- Command Line
- A simple text line on your screen where you can type in a command to the operating system.
- Short chunks of text added to program code that seeks to explain when is going on. Far too often, this text just repeats what the code actually says, making them useless. Comments should explain the “why” of a block of code.
- push to a remote server.
- The process of generating a marker that records the state of a project at that moment in time. SCCS systems generate a change script that can be used to restore your project to the exact form is has at this moment, even as the project continues on in its development.
- When we process a program written in a high-level programming language, the tool we use is called a compiler. That tool converts our program into the machine language the processor actually understands.. We say we compile our programs.
- A situation where two different versions of a single project asset exist. The differences must be resolved before the asset can continue to exist in the combined project.
- Content Addressable File System
- A system that stores objects with names based on the contents of those objects. Used by Git internally to store version information.
- Context Free
- A programming language must be defined in such a way that figuring out what should come next (tokens) can be figured out without studying the context in which the token appears.
- On most systems, when you right-click on something, you bring up a menu that is sensitive to the context of the thing you are pointing to. That menu lets you perform tasks common to that thing!
- Continuous Integration
- A testing technique where a project is automatically tested on a number of build systems to verify that the project is running properly. By testing automatically, developers can spot major problems that cause errors on specific platforms quickly.
- A small file containing information needed to reconnect you to a web server automatically. Cookies often store log in credentials. It is vital that you never allow your personal cookies to be saved on a public machine. Doing so gives others complete access to your accounts. Parameter Parameters A block of text (no spaces allowed, unless the block is enclosed in quotes) that is passed to a program or a sub-program. If passed to a program and there are more than one parameter needed, they are usually separated by spaces. If passed to a sub-program, they are usually separated by commas.
- This is the flow of electrons through a circuit. Moving electrons generate heat and electromagnetic waves as a by-product of this motion.
- Data Alignment
- Modern processors work best when data is aligned so that the data item fits in a natural data chunk the processor will fetch. Misalignment problems occur when a single data item requires two memory accesses to access.
- A service that updates DNS tables used by Internet services to map domain names to addresses. These services are helpful if your network address changes often, as it might if you are working from home and want to set up a server.
- A software development tool that is used to step a program one line at a time, then allows the developer to inspect the internal state of the machine as the program runs. They are a vital, and often under-used tool in programming.
- After the processor has fetched part of an instruction, it decodes that part to determine what additional information it needs to do its work. If it needs more data from memory, that data will be read from memory into internal registers. As part of this step, the complete size of the instruction is calculated, and the IP register is updated to point to the next instruction in memory.
- A tool can read two files and show the differences between them. It can also create a patch file that can be used to convert one of them into the other.
The operating system on most computers, today, uses tree-like structure to store files. The top of this tree, called the root of the tree, is a directory (or folder as Microsoft want us to call it). The name of this directory is either “/” on a Linux/Mac system, or “” on a Windows system.
A Directory is a container that can hold either files (objects that contain only data, such as text, images, of other binary data) or other directory objects (called subdirectories). Subdirectories have names that follow the rules for the operating system. Any directory or subdirectory can hold files of further subdirectories, giving the entire file system a (upside down) tree-like structure.
Domain Name Service
- A phone book like service that maps domain names, like www.pylit.org, to an IP address.
- Domain Name
- Servers on the Internet are all part of some registered domain, which has a name associated with it. I own pylit.org for example. The last part is used to brand the kind of domain I am part of, in this case a non-profit organization. The first part is often chosen to identify the company involved. You can add a machine name to the front of this name. Often www is tacked on to identify a web server where the companies website is found.
- Many programs keep settings in a hidden file in the user’s home directory. Exactly what these file hold depends on the program. It is common to manage these files in some way. I keep mine on my GitHub account at https://github.com/rblack42/dotfiles.
- Drag and Drop
- A modern method of constructing programs, or executing commands by dragging an icon on the screen and dropping it onto another place. Learning how all of this works can make you highly productive!
Extended Backus-Naur Form
- A notation used to define the syntax of a programming language. The notation is designed to be context free meaning there are no places where figuring out what comes next in a program depends on the context of the program. Usually, the rules can tell what is coming next by simple looking at the next token in the program
- Environment Variable
- Named strings managed by the command line processor. These strings are available to programs and are commonly used to set up data for a variety of purposes.
- In spite of the negative connotations of the term, we say a computer executes a program. The program that can be run is called executable.
- We call the act of actually processing something in a computer executing that something. The something can be a single Machine Instruction, or a complete program. We are a brutal race of beings, aren’t we?
- Using a special register called an Instruction Pointer (or IP, the processor reaches into the system memory at the address designated by the IP register and fetches a defined number of bytes which form all or part of the next Machine Instruction to be processed.
- Finite State Machine
- A system whose operation is defined as a set of states and transitions from one state to the next.
- Flow Chart
- A form of diagram showing the logic of a program. These diagrams have been around for almost as long as computers have been available. They are a great way (but not the only way) to visualize how your program will “flow” and think about what will happen when you run the program.
- A service that will provide your image when you log into a number of web sites. That image can be viewed by others to make sure they recognize the you they are communicating with. I consider using such a service part of setting up a professional image.
Graphical User Interface
- A user interface were the mouse and windows are used to control applications.
- A string of characters generated using a has function that is applied to all of the content of some object. These strings are often used to detect if the object has been altered in any way.
- Most operating systems “hide” file names that start with a dot ”.”. These normally contain configuration information that should not be modified unless you know what you are doing You need to use a special command to display these files when generating a directory list.
- A language designed to be compiled into a low-level form like machine language is called a high-level language. Such languages are designed to be machine independent. C++ is a high-level language.
- High-Level Language
- Most programming languages are designed to help humans instruct a machine in how to solve some problem. These languages do not care what processor they will run on, and are called machine independent. You use a compiler designed to convert your high-level code into machine language for a particular processor. Different compilers support different machines.
- Home Directory
- Most operating systems create a directory you are to use for all of your files on that system. This directory is tied to the user account you log into when you access that system. On Windows, this is the directory where your “My Documents” folder is found, usually a place like C:\Users\username. On Linux systems the directory will be in /home/username. On Macs, it will be in /Users/username.
Integrated Development Environment
Integrated Development Environments
- A collection of common programmer’s tools integrated into a single application with features that can greatly speed up program development. Unfortunately, typical IDE systems are complex and may not support all the languages you use, or be available on all the platforms you use.
- A single instruction that a given processor can execute is called a machine instruction, or just an instruction. A set of Machine Instructions make up a Machine Language
- Instruction Pointer
- Processors use a special register to keep track of the address in memory where the next machine instruction to be processed can be found. This register is called the instruction pointer, or just the IP register.
- Integration Tests
- Tests of a set of units to confirm that they work together properly.
- Processors normally run programs using a simple four step process called “Fetch-Decode-Execute-Store”. When the machine is at the point where it is about to fetch another instruction, a signal can stop the action, and cause the machine to jump to a block of code that handles the signal. The signal is called an interrupt, since it interrupts the normal flow of a program. The code that deals with the signal is called an Interrupt Handler. Hopefully, interrupts are short enough that the interrupted program does not notice the delay!
- Internet Protocol. This term refers to the “dotted-quad” number assigned to your machine when it is connected to a standard network. You can determine your “IP number” by running ipconfig on a PC, or ifconfig on either a Mac or Linux system.
- The delay between when an action is started and when it completes. In computing, this is usually measured in clock cycles.
- A phase in transforming your program into a final executable file where one or more object files are combined with system libraries` to build a final executable file. The tool that does this work is called a linker.
- Literate Programming
I form of documentation where program fragments are included in a literate document designed to explain how a program is developed. Those fragments are extracted from the documentation and combined into a normal form that can be processed by programming tools. This is the exact opposite of traditional documentation where the code is littered with comments that try to accomplish the same thing. These comments are often neglected and become meaningless.
The creator of this concept is Donald Knuth. If you claim to be a software developer, you owe it to yourself to read his work.
- A language that is very primitive, often tied to a specific processor. Assembly language and Machine language are low-level languages.
- Machine Dependent
- Languages are either specific to a processor (low-level languages) or independent of any processor (high-level languages).
- Machine Language
- The low-level binary language a particular processor understands. Machine Language is a set of very simple instructions that the processor can execute. These languages are designed by the processor manufacturer, and are unique to that processor (or processor family). Usually that manufacturer designs an Assembly Language to go along with their machine language, but you are not required to use that language. As long as your assembler generates correct machine language, your code can run on that processor.
- Master Branch
- The primary development branch in a project managed with a SCCS.
- Master Copy
- Development teams usually set up a server for use by the team. A copy of the project files is kept on this server and all team members make sure to synchronize their work with this server. We push your changes to the server, and pull changes down from the server, so we can see work done by other members of the team. Command Line A simple text line on your screen where you can type in a command to the operating system.
- Combining two distinct development procedures into one. This may result in conflicts that must be resolved.
- Mock Object
- A program component that implements the interface to a complex subsystem sufficiently well to enable testing of code that uses the real subsystem.
Network Time Protocol
Network Time Synchronization
- Servers on the Internet with access to very accurate (usually based on atomic vibrations) time signals, keep track of the current time and can report that time to your system using a simple protocol. Most machines connected to the Internet can be set up to synchronize their view of the current time with these servers. (The software can even account for the time it takes for those signals to reach your machine!)
- Object file
- A file containing machine code for a particular machine, but missing some references needed to build an executable file. Several object files are combined, resolving the missing references to build a program. Usually, some of those unresolved references are resolved by searching a system library that accompanies the transformation tool (compiler) or the operating system. Only when there are no unresolved references can your program actually execute.
- Old School
- The place where old methods were learned. These methods are any methods not accepted as modern by current workers.
Object Oriented Programming
- A design technique where the fundamental program components model objects from the real world the application is to serve.
Other People’s Code
- You should study code written by other folks, especially those who seem to do the job well. Eventually, you will learn how to write well respected code and become the author of what others read. Just make sure you give credit for anything you decide to incorporate into your projects, and respect the license that goes with the code.
- An open-source project is freely made available to the public in source code form. Such projects are usually protected by a license of some kind, designed to protect the rights of the author(s).
- All general purpose machines need a piece of software to manage the hardware of the system. Typically, these programs provide a user interface to make controlling the machine simple. No on buys a system just for the OS. Instead, you pick an OS based on the applications you need to use to do real work (or play) on that system.
- It is possible to program the clock on some systems so it runs faster than advertised by the manufacturer. You might get more speed out of your system by doing this, but you also might reach a point where the signals are not getting where they need to be in time, and the results are totally unpredictable.
- Values passed to a sub-program for it to use in it’s work.
- Problem Statement
- Every programming project should start with a problem statement that you analyze to see exactly what you are supposed to create. Your job is to create a solution to some problem. You may need to go to the originator of the statement to clarify things, and you should do this rather than guess at what is really wanted.
- Professional Image
- You have an image on the Web. Like it or not, this image follows you everywhere, even into the first job interview. Are you proud of that image? May folks post the most outrageous junk on their FaceBook pages, thinking no one but their “Friends” look at it. Not so! Unfortunately, your potential employer might check you out and not like what they see. Your choice. I recommend making sure you look like someone others want to employ, or at least someone who does more with their lives than just keep everyone informed about every aspect of your life on FaceBook! YMMV!
- Provisioning Tool
- These programs help system administrators install and manage systems by automating the previously tedious process they used to perform. There are several tools in this category: Puppet, Chef, and Ansible are all popular open-source today.
- When working with an SCCS master server, we push your changes to the server, and pull changes down from the server, so we can see work done by other members of the team.
- Real World
- A fictitious place everyone claims exists. In this world things work perfectly (or at least better than in your present world!)
- Modify a programs code to improve its quality without changing how it works. This is a clean-up step in development designed to keep ugly code out of a project, and use best-practices in how code is presented.
- Rewriting your code to make it simpler, and easier to understand without changing how it works. Your regression tests will tell you if you are doing this right!
- A place inside the processor where data can be stored. There will be a number of such places in each processor Instead of addresses, these locations will have names. We refer to those names in assembly language programming.
- Regression Test
- Testing to make sure a project is moving forward, not backward.
- A file system that serves as a database for a source-code control system like Subversion or Git.
- A simple markup language designed to make documentation readable with no processing. Processing tools like SPhinx can turn documents written in this markup into HTML or PDF output that looks very nice!
- Another term for version. A revision captures the state of a collection of assets (files) at a particular moment in time. :term:Source Code Control Systems` track the changes from one revision to another by creating change scripts that can convert the older version to the newer one.
Source Code Control System
Source Code Control Systems
- Distributed Source Code Control Systems A tool used to track changes to all files involved in a development project. Most such tools use a central server. The distributed tools can function with no server as long as team members can communicate directly over the Internet. Typical tools are Subversion and Git
- Programs designed to control computers are often called scripts. Most scripts are written using simple languages like bash on a Linux system or Python.
- Semantic Analysis
- The process of taking a properly formed construct in a programming language and converting it into another form the has the same meaning as the original construct. Typically, a tool like a compiler transforms your high-level code into machine language the processor can actually run.
- A properly written programming language construct causes the computer to do something. Exactly what that something is is called the semantics of that construct. You must understand the semantics in order to make sure you use that construct properly. This is called picking the right tool for the job!
- This term refers to the meaning of a construct in a programming language. Only a construct that passes the syntax analysis phase of transformation has any meaning.
- The “old fashioned” way of controlling a computer. On Windows systems, this involves opening a window where you can type in commands. On Mac and Linux systems, you open up a Terminal program.
- Side Effects
- Functions usually operate as self contained blocks of code. They get information from the outside world through the parameter list, and produce results that are returned to the caller as return values. If the function modifies anything in the outside world as it performs its task, these are called side effects. Generally, these are bad things, and should be avoided.
Solid State Drive
- Most hard disks use a rotating metal disk coated with a magnetic material that records the zeros and ones. A modern (and a bit expensive) alternative is to use electronic circuits similar to flash memory, but much faster, to store the bits. Since these drives are much faster than traditional hard disk drives, some systems use them to store the operating system, so the machine boots fast. If you have enough money, an SSD might be the only drive you have.
The exact configuration of a collection of items that make up some system. That set of items can grow or shrink over time, and individual items may be changed. At any moment in time, the entire collection is in some configuration.
The operation of many systems can be described exactly by a sequence of specific changes from one state to the next. Such a system is called a Finite State Machine.
- Once a single Machine instruction has been completed, any new data produced by that instruction needs to be written to a final storage location, clearing the processor to move on to the next instruction. We say we store that data, or retire the instruction.
- Style Guide
- A document specifying the style to be used to projects in some organization. These guides lay out how program code should be presented, how variable names are formed, or how files should be organized to meet standards everyone in the organization will follow. Some of these guides can be extensive, others, very informal.
- The formal rules that define how to write a construct in a particular programming language. These rules are simple and precise.
- This is a term referring to exactly what a statement in a programming language looks like when written in a program.
- Syntax Analysis
- The process of examining each construct in your program to make sure it is properly formed. Only when this is true can the analysis tool move on the semantic analysis to figure out what each construct means. The tool that checks the syntax is called a syntax analyzer, usually part of a compiler.
- Syntax Diagram
- A visual representation of a rule in EBNF. These rules define the syntax of a language.
- System Clock
- The master timing device on all computers. The processor uses the clock to synchronize the execution of machine instructions.
- System Library
- A file containing references needed by programs to connect to operating system of language specific functions.
- System path
- Most operating systems search for files to execute by examining directories listed in a system variable called the PATH.
- A special marker used to identify particular revisions in a software development process.
Test Driven Development
- A software development process where any change to the code is preceded by the creation of a test that will demonstrate the operation of the code after the change is made. The development process becomes one of generating code that passes the test.
- Test Driven Design
- A fictitious design technique where we practice TDD with no design in mind. This might be a bottom-up technique where interesting subassemblies get produced that might be useful in a larger project. Basically, this seems like a bad idea.
- Texas Four-Step
- All computer processors use a four step process to do their work. The four steps are called Fetch, Decode, Execute, and Store (or Retire.
- In syntax analysis, your program is broken up into a number of tokens, a term describing one item that is “indestructible” in the language. For example the keyword “if” is a single token, so is an integer number, or a curly bracket, or the “>>” symbol used in C++.
- A unit is a basic component of a program. Typically this is one function or a class. We test these units to verify that they work as we intend.
- Unresolved Reference
- When you try to link your program and there are references to items that cannot be found, we say these are unresolved references. The final executable file cannot be constructed in this case. System Library System Libraries Files containing code needed by a program to actually complete the transformation of a high-level language into machine language. In these libraries, we find code for input and output, code needed to interface with the operating system, etc.
Uniform Resource Locator
- The specific location of a web “resource”, which is normally a web page, but can be a file or anything that your browser can download to your system using the web protocol named HTTP.
- A configuration used by Apache to manage web servers controlling multiple websites
- A program that emulates a real machine accurately enough to run real programs for that machine.
- A program running on a host computer that emulates a real machine well enough that operating systems and applications can run inside them. This effectively isolates the environment inside the VM from the host computer.
- This is a measure of the “force” driving electricity through a circuit. Think of pressure in a water pipe.
Virtual Private Server
- A virtual machine set up on a remote server in such a way that a user can use the VM as a private serer. This arrangement is commonly used by companies to make more effective use of physical servers. Multiple VPS systems can run on one physical machine. Companies like Rackspace and Amazon offer access to such systems.
- Working Copy
- When using an SCCS system, the copy maintained on a remote server is usually treated as a master copy. Any local copies are called working copies. When you leave any work session, you should try to make sure the remote and working copies are identical. This will prevent problems later!
Web Server Gateway Interface
- A standard protocol used to host Python applications on web servers