Computer Programming

Languages Skill Subgroups Skill Modifiers Software Development Hacking
There are many different programming, query, and scripting languages in use in the MetaCyber setting, that must be purchased separately as indicated by the adjoining table.
  • LANGUAGES (bought individually for 1 point)
    • Enoch (E) / Enoch Plus (E+)
    • Freestyle (FS)
    • Logical Design Syntax (LDS)
    • Logical Query Syntax (LQS)
    • Packet Frameset Router Code (PFRC)
    • Pix-it
    • Sidewinder (SW)
    • VarDim 3.3 (VD3)
    • Widget v12 (W12)
    • WidgetScript (WScript)
    • Wide-zone Switch Operation (WSO)
    • Other (Specify)
A brief description of each of the languages is provided below.
A character must know at least one language, at normal cost, in order to apply their otherwise theoretical Computer Programming skill to a practical use.
Characters take a -4 skill penalty when using Computer Programming for a task using a language they don't know. However this penalty is lessened if the character knows a similar language at the GM's discretion, but is never completely removeable. Penalty Skill Levels cannot be purchased to apply to this penalty.
The term computer language is a more expansive and alternate term for the more commonly-used term programming language. It includes a wide variety of languages used to communicate with computers and includes query, markup, and scripting languages, machine / byte codes, and even configuration files with special syntaxes.
A brief high-level glossary of terms is provided to help non-computer programmers understand key concepts sufficiently to roleplay a character with the Computer Programming skill.
MACHINE LANGUAGE: A system of instructions and data executed directly by a computer's central processing unit. Machine code may be regarded as a primitive (and cumbersome) programming language or as the lowest-level representation of a compiled and/or assembled computer program. Programs in interpreted languages are not represented by machine code however, although their interpreter (which may be seen as a processor executing the higher level program) often is. Machine code is also referred to as native code, a term that, in the context of an interpreted language, may refer to the platform-dependent implementation of language features and libraries. Practically no one programs in a pure machine language.
ASSEMBLY LANGUAGE: A much more readable rendition of machine language, called assembly language, uses mnemonic codes to refer to machine code instructions, rather than simply using the instructions' numeric values. Practically no one programs in a pure assembly language.
HIGHER GENERATION PROGRAMMING LANGUAGES: A programming language is an artificial language that can be used to control the behavior of a computer. Programming languages, like human languages, are defined through the use of syntactic and semantic rules, to determine structure and meaning respectively. However unlike human languages, programming languages are logic oriented and are intended to allow the declaration of precise commands that ultimately can be evaluated and / or executed by a machine. Programming languages vary in their complexity, flexibility, functionality, design orientation, and difficulty to use, as well as what they are best used for. Thus rather than there being one all-purpose universal programming language, there have practically always been a plethora of them, with adherents and detractors. In the MetaCyber setting there are many different dominant / common programming languages currently in widespread use.
PROCEDURAL PROGRAMMING: A programming paradigm based upon the concept of the procedure call. Procedures, also known as routines, subroutines, methods, or functions simply contain a series of computational steps to be carried out. Any given procedure might be called at any point during a program's execution, including by other procedures or itself.
OBJECT ORIENTED PROGRAMMING (OOP): is a programming paradigm that uses reusable and individually defined "objects" and their interactions to design applications and computer programs. Programming techniques may include features such as encapsulation (internalizing dependencies vs. relying on mutable global dependencies), modularity (seperation of concerns into small task-oriented parts that can be mixed together for different effects), polymorphism (use of well-known interfaces / contracts allowing different implementations to be consumed safely by other code that understands the interface), and inheritance (ability to make more specialized derived classes by inheriting from existing classes).
OOP vs PROCEDURAL PROGRAMMING: The focus of procedural programming is to break down a programming task into a collection of variables, data structures, and subroutines, whereas in object oriented programming it is to break down a programming task into objects. OOP languages generally include procedural aspects, though across a more complicated concept of scoped accessibility. The reverse is generally not true; procedural programming languages do not usually have object oriented aspects; however some languages have been able to "graft on" an OOP flavored syntax and defer handling of it to the compiler or interpreter to translate the code into something usable by the run time environment. This is typically referred to as psuedo-OOP.
FUNCTIONAL PROGRAMMING: A programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast with the imperative programming style that emphasizes changes in state. Functional programming languages, especially purely functional ones, have largely been emphasized in academia rather than in commercial software development. Note that many non-functional programming languages can be made to exhibit functional behaviors if necessary (usually through function pointers or delegation). Also note that "functions" exist in procedural and OOP languages; the precise nuance of what the word means are contextually different between the paradigms, though related -- pure functional programming uses nothing but stateless chained functions while "non-functional" programming may use functions but not exclusively and they are not necessarily "pure".
METACYBER FUNCTIONAL PROGRAMMING: In the MetaCyber setting no major commercially oriented language is purely functional in nature, but all versions of Widget after v3 inclusive, Enoch Plus via the "f" extention library (E+f), and Freestyle from v1 beta up all support functional style programming at need. A number of academic, domain-specific, and specialized proprietary languages are functional as well.
QUERY LANGUAGE: Query languages are computer languages used to make queries into databases and information systems. Query languages typically focus around mechanisms to identify data and / or patterns of data and while it is a gross simplification they can usually be thought of as filtering mechanisms. More advanced query languages include syntax for basic conditional and even procedural logic, and most query languages provide various mechanisms to transform and / or manage data. Of particular note in a MetaCyber campaign, going after data will most likely require use of one or more query languages; the most common query language in use in the MetaCyber setting is Logical Query Syntax (LQS).
SCRIPTING LANGUAGE: A common programming task is known as scripting, or connecting / exercising diverse pre-existing components to accomplish a new related task. Those languages which are suited to scripting are typically called scripting languages. Many languages for this purpose have common properties: they favor rapid development over efficiency of execution; they are normally implemented with interpreters rather than compilers; and they are often strong at communicating with program components written in other languages. However, scripting languages are typically specialized and only meaningful within some larger context. There are many different kinds of scripting syntaxes. Among other things, scripting languages are often used to set up login scripts, which makes it a subject of interest to hackers. The most common general scripting languages in use in the MetaCyber setting are VarDim Lite (VDL) and WidgetScript (WScript). The most common script language used for security and network administration is the special purpose Enterprise Administration Script Interpreter (EASI, referred to as "easy script"); this is treated as "Other Software".
MARKUP LANGUAGE: A classic concept in computer science revolves around recognition that there is a difference between data and how it is presented to a user. The same data can be presented many different ways; the directions for how to do so are effectively a form of meta data -- information that describes or decorates other information. This is typically called "markup". The needs of describing how to layout and display data vary widely by intent, and can be highly specialized. This has lead to the creation of numerous "markup languages" specific to different presentation targets. Markup languages are generally easy, relatively harmless, and of limited interest to serious software developers. In the MetaCyber setting these types of "languages" are essentially handwaved; any character with a Computer Programming or Computer Usage Skill of at least 11- should be able to puzzle out basic markup relevent to the subgroups of those skills they already have without needing to pay additional points for the ability.
Enoch (E) and its successor Enoch Plus (E+) have been around for over two decades, and are ideal for handling critical, resource intensive processes. It is widely used for robust applications of many sorts, and most operating systems on the market. However it is a very "heavy" language, relatively slow to develop in, and has been losing popularity with developers for many years. However, a tremendous amount of foundational software is written in one or the other and for certain lower-level programs there is arguably no better language to write them in (despite many attempts to make an "E-killer" language over the years).
Most people only bother to learn it anymore if they plan to work on legacy systems, operating systems, or for companies that are slow to adopt newer technologies. E is mostly Procedural while E+ is an "interesting" mix of Procedural and Object Oriented methodologies, but both rely heavily on common libraries to achieve most of their efficiencies and raw processing power; a big difference between the two is that E+ allows the creation of new libraries, and the overriding of common libraries, and E+ has built in hooks to work with NSDL where as E requires a lot of hackwork to be compatible with NSDL (which is often buggy besides). E+ supports semi-interactive debugging and has many debugging options.
Of interest to hackers and breakers, a lot of firmware is coded in E, including some electronic locks.
Freestyle (FS) is framework based, relatively lightweight, and flexible technology that relies on the use of syntax independent core functionality interfaced via syntax "Styles", which are all made to work together via syntax specific compilers. Using decompilers it is even possible to translate code from different syntaxes into a syntax of choice, making this technology very easy to use. Styles are available mimicking the syntaxes and primary features of most other major programming languages; most strongly supported are an Enoch Plus Style called FS-E+, and a Widget v12 Style called FS-W12.
Because of this assimilation oriented design Freestyle is easy for programmers of differing backgrounds to use collaboratively (though there are still practical limits), and though relatively new with only three years on the market FS has gained a sizeable following. Which isn't surprising since FS was purposely designed to "take the best ideas" from the dominant development platforms in use when it was created and "leave the rest in the Disposer", according to several people involved in the design team. FS supports very powerful and feature rich almost fully interactive debugging, and multiple levels of logging making it perhaps the easiest of all languages to debug in.
Logical Design Syntax (LDS) is strongly associated with LQS. However where LQS allows the analysis and manipulation of data in a database, LDS allows the creation and manipulation of the database objects themselves. However, only higher end database systems support LDS; lower end products use wizards or interfaces to accomplish the tasks, hiding the underlying commands from the user.
The LDS standard is more closely complied with by the systems that use it than LQS is however, with only very minor difference across most flavors. LDS has no support for debugging.
Logical Query Syntax (LQS) is the defacto standard for the vast majority of databases. Older databases, twenty years and more, have widely divergent means of querying against, analyzing, and modifying data, but practically all modern databases support some variation of LQS. Though there are subtly different flavors, and some implementations support more or less built in functions, and none of the flavors exactly match the LQS standard, they are all 80 to 95% the same so that there is a high degree of knowledge carry over between them. LQS has no support for debugging.
Packet Frameset Router Code (PFRC) is used primarily for the configuration and administration of network "backbone" hardware. This is not a fully fledged programming language; it has a limited set of commands that are supported by network related hardware in accordance with strict standards. However, due partially to its terseness, the macro execution nature of the commands, and sensitivity to subtle differences arising from specific sequencing  it can be a very tricky language to actually use.
Typically as a security measure PFRC is not usable remotely on many critical devices; a person needs physical access to a device to alter its code. PFRC is often referred to as "Phreak" or variations on that theme in the industry. PFRC has no support for debugging instead relying on a more industrial-oriented "diagnostic" model. The diagnostics produce arcane metrics and low-level system codes that are heavily reliant on expert interpretation. There is a high degree of job security built into the model.
PFRC is used in a lot of infrastructure hardware and other low-level physical devices and is very far removed from higher level, user interface oriented software. It is not founded in traditional higher level computer science design concepts, being focused on much more concrete principles.
More technicians and IT engineers know it than software developers, but because of its heavy use in infrastructure some hardcore hackers learn it and can cause serious and very subtle harm to hardware they can get physical access to by mucking around with PFRC settings at the device level.
Pix-It is a language whose primary purpose is the definition of visuals. It is generally only used to create special effects and on screen visuals for the entertainment and media industries, for game design, and to provide foundations for NSDL Wrappers to make NEC. Pix-It is a component based technology oriented around the idea of Rendered Object Components (ROCs); each individual object or unit is rendered and compiled separately to form individual components that can be instantiated, composed, and controlled by a more traditional code engine.
Most code engines consuming Pix-it ROCs are written in a sublanguage of Enoch or Enoch Plus which basically use a stripped down selection of the common Enoch libraries plus a couple of Pix-it specific libraries. These sublanguages are often called P or P+ in the industry, though these are not official product names. A character that knows both Enoch and Pix-It is proficient with this sublanguage. 
Pix-It supports a debugger of a sort, but due to the component oriented model and the unforeseeable ways in which individual units can be consumed the debugger isn't very useful beyond determining if a bug is internal or not. Rigorous and expensive to develop test harnesses are required to truly test Pix-It objects, leading to a big dichotomy between high quality (well tested) and low quality (poorly tested or untested) ROC's, the associated costs, and so forth.
Sidewinder (SW) is a lightweight OOP game design language. Its main innovation is a good selection of basic pre-defined objects that are useful for relatively simple games, such as pixel mapping, pathing detection, random determinations, score keeping methods, time keeping and hooking, and bots with extensible behaviors. There are a lot of limitations on what SW based games can do, but within those limitations it is possible to make some fun and decent looking "arcade" style games relatively quickly.
The most common outlet for such games is on Personal Data Assistants, and a pocket industry exists to produce games for this market. SW games are too limited to be used for fully immersive NEC, but they can be made NET enabled, allowing things like NET based "face to face" tournaments similar to chess matches back in the old days.
There is no practical or business use for SW games. Sidewinder has no support for debugging, but it does support verbose error logging.
VARDIM 3.3 (VD3)
VarDim 3.3 (VD3) is the final iteration of a popular midweight programming language. VD 3.3 is a combination of modular Procedural and psuedo-OOP, and its primary strength was being designed specifically to allow rapid application development, with a verbose and human-friendly syntax and integrated code helpers. It has NSDL hooks built into it, and can even generate low to mid quality NSDL Wrappers for compiled applications with a built in wizard. The basic syntax and logic were also externalized into what was called VarDim Lite (VDL) and used as a scripting or macro language in many office applications.
VD 3.3 was innovative for its time, but since it makes it easy for people without fully fledged formal computer science educations to generate applications that are crude but powerful via wizard code and drop-in components, it has something of a stigma associated with it among some "real" programmers. The shocking permissiveness of the toolsets and compiler also allow some very questionable code to be compiled, which contributes to this stigma as well. However, despite this stigma it is possible for a person that knows what they are doing to write some very good software with VD 3.3.
 It primarily competed with Enoch Plus, relying on its rapidity if development and a business model using less well compensated programmers to contend with the more robust but slower to develop industry juggernaught, and contributed heavily to the weakening of Enoch Plus as the premiere development platform.
Three years ago plans for VD4 were killed, and instead all of the best features of VD3 were conflated into Freestyle (FS). There is a Style for VD3 syntax, but most of the conveniences of the VD3 toolset that allowed very lazy coding have been reigned back and more formal design is enforced. As a language that has been obsoleted in the last few years, there is little to no new development being done with it, but there are still legacy applications in place. Support for VDL or something very like it also continues to live on in many applications, making it a useful language to be familiar with at times. VDL has no support for debugging. VD3 has fully interactive debugging with adequate but simple debugging tools; however it's overly permissive compiler allows things to slip into releases that blow up at run time.
WIDGET v12 (W12)
Widget v12 (W12) is the current iteration of an OOP based language with a thirty odd year history. However, the versioning is misleading; the only thing v1 and v12 have in common is the basic idea of being object oriented. Beyond that, they diverge sharply in implementation. v11 was a watershed version for the language, with a heavy shift towards a more Enoch Plus like syntax, but adapted towards a "pure" object oriented approach.
However v11 was rushed to market to staunch the loss of share to E+, but was lacking some key pieces that had been core to the Widget concept for many years and touched off bitter complaints among its developer community.
In response v12 was released roughly a year later with a more complete feature set and some allowances (syntactic sugar) for the older v10 style syntax. After some hesitancy, v12 was deemed to be solid by the community, and soon was hyped as an E+ killer. It was the "hot" language for about a year, before the release of Freestyle (FS), which assimilates many of the best features of W12 and has eaten into its user base over the last three years.
W12 still has a reasonable market share, and most new apps written three to four years ago were written with W12, making it a useful language to know. Widget v12 has semi-interactive debugging, solid debug tools, and perhaps too much logging.
There is also a very sparse scripting language that has stood the test of time called WidgetScript (referred to as WScript), modeled after the syntax and composition of Widget v10. It has been in use for almost a decade and finds widespread use in all sorts of unexpected places, from custom utilities, to hacks, automation software, scheduled tasks, and as part of internalized scripting support for software written in the last three versions of Widget. It is technically a seperate language (or more accurately a subset) with its own quirks, but anyone that knows Widget can figure it out at need. The reverse is not necessarily true; a person that only knows WScript would likely struggle with the more advanced concepts used in fully fledged Widget based applications.
Wide-zone Switch Operation (WSO) is, like PFRC, primarily used to configure network "backbone" hardware and related devices piggybacking on its standard. Originally intended purely to handle complex switching tasks to optimize the flow of network traffic, its ability to manage communications in a hyper-efficient fashion made it very usable for other interconnectivity tasks and the standard was expanded over the years to increase this compatibility, but the name was not changed. It is commonly referred to as "Wizzo" in the industry, as are those who are good at using it.
This language is more script-like than PFRC, and supports some basic conditional programming, making it more flexible. It's syntax is also less terse and more easily understood than PFRC, and WSO supports basic authentication security, allowing many devices that use it to support remote administration of some functionality. WSO has no support for debugging, but does support explicit logging if a programmer writes it in.
A lot of security oriented devices are coded in WSO, including some electronic locks.
There are many other programming languages that have been used in the past, and some lesser or niche languages still being used in the modern day in the MetaCyber setting. The GM should feel free to invent such other languages as they feel will enrich their campaign, decide what they are used for, and characters can learn those languages exactly the same as one of the languages defined above. Similarly there are also some proprietary corporate languages that particularly paranoid or IP fixated corporations require their core technologies to be coded in; each must be paid for separately.