Common software terms Flashcards
spagetti code
multiple pages of nested if clauses and for loops with a lot of copy-pasted procedural code and no proper segmentation
ravioli code
hundreds of similar little pieces of logic, often classes or objects, without proper structure. If you never can remember if you have to use FurnitureTable, AssetTable or Table, or even TableNew for your task at hand, you might be swimming in ravioli code. The problem is that it tends to lead to functions (methods, etc.) without true coherence, and it often leaves the code to implement even something fairly simple scattered over a very large number of functions. Anyone having to maintain the code has to understand how all the calls between all the bits work, recreating almost all the badness of Spaghetti Code except with function calls instead of GOTO.
god object
an object that knows too much or does too much. Most of such a program’s overall functionality is coded into a single “all-knowing” object, which maintains most of the information about the entire program, and also provides most of the methods for manipulating this data. The god object is an example of an anti-pattern. The polar opposite of the god object is ravioli code.
lasagna code
Program structure characterized by several well-defined and separable layers, where each layer of code accesses services in the layers below through well-defined interfaces. Lasagna code generally enforces encapsulation between the different “layers”, as the subsystems in question may have no means of communication other than through a well-defined mechanism. Loosely coupled layering is generally desirable because it makes objects at each layer more interchangeable with existing or possible future implementations, but other types of changes to the code will actually increase in complexity as more layers are added and so an extensively layered architecture can be seen as an anti-pattern as well.
big ball of mud
Popularized in Brian Foote and Joseph Yoder’s 1997 paper of the same name. A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated.
Note: in Lisp, it can be used differently: to describe the malleability of a Lisp system.
write-only language
A programming language with syntax (or semantics) sufficiently dense and bizarre that any routine of significant size is too difficult to understand by other programmers and cannot be safely edited. Examples often cited: APL, Perl, Forth, and regular expression syntax.
WSGI
“wizgi”: The Web Server Gateway Interface: a simple and universal interface between web servers and web applications or frameworks for the Python programming language.
How do you pronounce Xindice?
pronounced zeen-dee-chay in your best faux Italian accent
polymorphism
(In software) Provides for multiple implementations of the same method
triple store
A database optimized for RDF triples.
Typically optimized for very many short data items.
OLAP
Online analytical processing. It’s an approach to answering multidimensional analytical queries.
POCO
Plain old CLR object
Often incorrectly expanded to “plain old C# object”, but it can be created in any language targeting the CLR.
Simple objects without inheritance or other attributes needed for a specific framework. In CLR, typically a non-Serviced Component.
CLR
Common Language Runtime. The runtime environment of .NET.
yesterday’s weather
(In Software development.) The principle that says you’ll get as much done today as you got done yesterday. In iterative projects it says that you should plan to do as much this iteration as you did last iteration.
http://martinfowler.com/bliki/YesterdaysWeather.html
COTS
“commercial off-the-shelf”. A Federal Acquisition Regulation (FAR) term defining a non-developmental item (NDI) of supply that is both commercial and sold in substantial quantities in the commercial marketplace, and that can be procured or utilized under government contract in the same precise form as available to the general public. E.g: computer sw (incl. FLOSS), construction materials.
FLOSS
“Free-Libre / Open Source Software (FLOSS)”. It is considered commercial software, even though some people mistakenly distinguish between commercial & free sw.
divide and conquer
Algorithm design paradigm based on multi-branched recursion. A divide and conquer algorithm works by recursively breaking down a problem into two or more sub-problems of the same (or related) type, until these become simple enough to be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem.
tail recursion
A tail call is a subroutine call that happens inside another procedure as its final action. A tail call doesn’t have to be recursive, but when it is, it’s tail recursion. S ignificant because they can be implemented without adding a new stack frame to the call stack.
functional programming
A programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. In functional code, the output value of a function depends only on the arguments that are input to the function, so calling a function f twice with the same value for an argument x will produce the same result f(x) both times. By contrast, in imperative programming, the function may change state data internally, and so might return a different value.
What are the byte prefixes?
In 2000, however, IEEE adopted the International Electrotechnical Commission (IEC) recommendation, which uses the metric prefix interpretation for prefixes like kB, where kilo means 1000 and not 1024. So:
How much is a gigabyte?
Depends on the context. For hard drive and networking, the “giga” part usually means the SI meaning of 1000. Referring to RAM sizes, it usually means 1024 3 bytes, i.e., an alias for gibibyte. File systems & software often list file sizes or free space in some mixture of SI units and binary units. Mac OS uses the decimal interp.
Technically, giga means 10 9 in SI, so it really means 1,000,000,000 byte s, i.e., a base 10 definition, not a base 2 definition.
When did the interpretation of “giga” change?
In 1998 the International Electrotechnical Commission (IEC) proposed standards for binary prefixes and requiring the use of gigabyte to strictly denote 1000 3 bytes and gibibyte to denote 1024 3 bytes. By the end of 2007, the IEC Standard had been adopted by the IEEE , EU , and NIST .
What are the proper base 2 prefixes?
1024: KiB kikibyte
1024 2 : MiB mebibyte
1024 3 : GiB gibibyte
1024 4 : TiB tebibyte
1024 5 : PiB pebibtye
1024 6 : EiB exbibyte
1024 7 : ZiB zebibyte
1024 8 : YiB yobibyte
What units are used by JEDEC?
The JEDEC memory standards are the specifications for semiconductor memory circuits and similar storage devices promulgated by the JEDEC Solid State Technology Association, a semiconductor trade and engineering standardization organization.
JEDEC Standard 100B.01 specifies common terms, units, and other definitions in use in the semiconductor industry. They use byte = 8 bits and
kilo, mega, giga = base 2 interpretations.
fencepost error
An off-by-one error. Also known as a telegraph pole or lamp-post error .
What is a megabit per second?
1,000,000 (not 1024*1024) bits per second, which works out to 0.125 MB/s.
What is “epoch time””?”
The Unix epoch (or Unix time or POSIX time or Unix timestamp ) is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z). Literally speaking the epoch is Unix time 0 (midnight 1/1/1970), but ‘epoch’ is often used as a synonym for ‘Unix time’. Many Unix systems store epoch dates as a signed 32-bit integer, which might cause problems on January 19, 2038.
sinkholing
Sinkholing is the term for taking control of the Internet address used in malware attacks so white hats can ensure that compromised computers don’t continue to report to servers operated by attackers.
What is a full stack developer?
It means a person who can work with databases, servers, systems engineering, and client work. Depending on what kind of client is needed that can mean a mobile stack, web stack, or native applications.
GPRS
General packet radio service. Packet oriented mobile data service on the 2G and 3G cellular communication system’s global system for mobile communications (GSM). Originally standardized by European Telecommunications Standards Institute (ETSI). Now maintained by the 3rd Generation Partnership Project (3GPP). Allows 2G, 3G and WCDMA mobile networks to transmit IP packets to the Internet.
EDGE
Enhanced Data rates for GSM Evolution ( EDGE ). Also known as Enhanced GPRS (EGPRS). A llows improved data transmission rates as a backward-compatible extension of GSM. EDGE is considered a pre-3G radio technology.
LTE
Long-term evolution. First generation of 4G networks in the US. (In South Korea, they deployed 4G in the form of Mobile WiMAX.) First came online in 2011/2012.
WIMP
Windows, icons, menus, pointers. It was coined by Merzouga Wilberts in 1980. It is not the same as GUI, because s ome GUIs are not based in windows, icons, menus, and pointers. WIMP interaction was developed at Xerox PARC (see Xerox Alto , developed in 1973) and popularized with Apple ‘s introduction of the Macintosh in 1984, which added the concepts of the “menu bar” and extended window management.
RAID
Redundant Array of Independent Disks
LVM
Logical Volume Management
What is Logical Volume Management?
A way to create logical volumes within the partition space of one or more physical drives.
RAID 0
This turns all your disks into a single unit with no redundancy. This has the highest read and write performance and the most usable space of any of the options, but the loss of a single disk means the loss of all data.
RAID 1+0
This turns all your disks into a single unit with all data present on two disks. The read speed is about the same as RAID 0, the write speed is halved (since you need to write each piece of data twice), and you only have half as much space available. The loss of a single disk has no impact on data availability and minimal impact on read/write speeds.
RAID 5
This turns all your disks into a single unit, with a parity value on one disk. The read speed is slightly lower than RAID 0, the write speed is much slower, possibly slower than the write speed of a single non-RAID disk (each write requires a read-modify-write cycle on at least two disks), and you lose one disk’s worth of space for parity information. The loss of a single disk can cause a major reduction of read speed (reconstructing the data that was stored on it requires reading data from all the other disks), but has no impact on data availability.
RAID 6
This has essentially all the advantages and drawbacks of RAID 5, except that it stores a fancier checksum in addition to a parity calculation, and can handle the loss of two disks without data loss.
VPS
virtual private server; a virtual machine sold as a service by an internet hosting company.