Computer Science from UCCS Started software career in 1996 Passion for dynamic systems design & impl. Software as a process of creative synthesis combining art and science • • • • •
or to the conventions of its genre; self-referential. combining form: denoting position behind, after, or beyond denoting something of a higher or second-order kind • • •
workspaces that can be used in the compiler environment of your choice. SWIG: “Simplified Wrapper and Interface Generator” Parser-Generators: Lex, Yacc, Flex, Bison Templates for Eclipse, XCode, Visual Studio Protocol Buffers, Corba, ActiveX, IDL Markdown, Textile, Haml, Jade, Less, Sass, Stylus • • • • • •
creates, describes, or implements other objects. related: reflection, (structural) recursion, meta-object protocol in languages like C++ and Java, the meta- object protocol is defined by the language, while in Objective-C it can be tailored. • • • •
Meta-object protocol in the context of Python, Lua, Lisp, Smalltalk, Cola object-oriented programming prototype-oriented programming (under a generalized understanding) • • • •
All objects have a class. An object’s class must also be an object. As all objects have a class, and a class is an object, what class is the class of a class? • • • •
concepts: data and the next instruction. Meta-* disciplines are the art of abstracting these fundamentals to models that suit the way we want to think about computing. Goal: improve tradeoffs [cost, time, quality] by investing in abstraction to leverage features, productivity, and uniformity. • • •
smarter instead of harder. e.g. the same reason you use a computer language over assembly When you want to think about the problem space from a higher level abstraction similar to abstraction to a map/reduce operation from an explicit loop • • • •
will yield >2x over the lifetime cost of manual process. When the meta tools are already built Templates, macros, factories, extension Experience comes from practice • • • •
Days to years Software: compile, link, initialize, runtime, hot path. Time Scale: Milliseconds to hours Hardware: fetch, execute, store, branch Time Scale: Picoseconds to seconds • • • • • •
impl. by key, arg types, values, or internal state commonly stored in associative mappings Also known as message sending Smalltalk, Objective-C, RPC Actors & Coroutines (Erlang, IO, Scala) • • • • • •
provide extension points: observe subclass creation observe instance creation observe instance restore (pickling) Just add instances to the namespace that support the observation protocol • • • • •
matter? Did you avoid explicit cases by your impl.? Higher-order thinking, be it functions, composition, or meta-*, can all help you avoid “the giant switch statement” • • • •
compile-time expansion, initialization, runtime and structural composition. Non-explicit control flow can lead to “magical” feeling of action-at-a-distance Can be similar to tracing through async event driven or queue based systems. • • •
your software system. Keep it simple to explain and review Implement test suites and write documentation that anticipate questions and likely changes. Keep the people who will be maintaining the system in mind. • • • •