Showing posts with label History of Future. Show all posts
Showing posts with label History of Future. Show all posts

Software Prototyping is for Prototypers

"Mathematica is a great system for software prototyping". Is it? Only? Or as well?
Many years ago, when the idea of software prototyping was born first we thought of throwaway prototypes. Later we were more specific and distinguished:

  • explorative prototypes - those to better understand user interaction patterns
  • experimental prototypes - those to clarify the decomposition type, software architecture and complexity by drilling down to critical functionality
both close-ending, thrown away. There are many other types and dimensions of prototypes with different notions.
With the availability of development workbenches and tools we went into

  • evolutionary prototyping - build the system by refining it and stretching and expanding its operational environment, this might be incremental or extreme ... 
IMO, this is the past.
We now should think of evolutionary system development. Choose a universal working environment to create software systems in one flow by flatten the dimensions components, variants and revisions to revisions. Multi-strategy, multi-model, multi-datasource, multi-timeframe, cross-platform, multi-front-end, .....
Mathematica. It is a development platform integrating computation in any workflow supporting many technology platforms. If you view processes as computation you sit down, describe and get immediate results. This is the start point of an innovative spiral. It is more than refining, stretching and expanding.
Use the insight you get in step n to abstract, systematize, simplify or expand in step n+1.....

It is All Numbers

I remember a statement of a physicist, "there is no reality, only numbers", which made me brooding.
In Mathematics we have special functions, symbols we know by name, meet quite often, know their form, shape and behaviour. From the simple Sin, Cos, Exp, .. to the Meijer G-Function, which is very general. Some of them are good friends, we can artistically create derivatives, integrals, .. when they dominate in expressions, equations and use them as Ansatz for, say, solving differential equations. New special functions expand the domain of closed form solutions. 
Closed form solutions are elegant, but usually they do approximate only small domains. In the vast majority of the cases you need numerical schemes to make the predictions and simulate your models. 
To model, say, the material flows, chemical reactions, and conservation of  energy in, say, a blast furnace you need to solve systems of dozens of coupled nonlinear PDEs. They need to be solved numerically.
Mid 90ies, I entered into partnership with MathConsult  specialized in the sw development of advanced numerical schemes. In 1996 we were lucky being asked to develop some convertible bond tools for a London-based trading desk. Andreas Binder, CEO, of MathConsult managed to design a model solver based on Adaptive Integration in a one day workshop; a method based on Green's functions and an adaptive gridding and time-stepping. 
When we decided to make UnRisk, we decided to integrate high-end numerical schemes into Mathematica and combine strengths of symbolic and numeric computation.

I Declare ...

Mid 70ies, starting my career at voest alpine, first developing an off-line programming system for CNC machine tools, I became finally responsible for "Factory Automation Software". Factory automation is about transforming rough material into finished parts, assemble and finish them. 
Machine and robot programmers did not want to program imperatively, by  "Goto XY", "Mill Circle", but declarative by "Mill Pocket", "Drill Cycle", "Pick Part", "Place Part" .. To providing such high-level, task-oriented programming techniques, our compilers and runtime systems needed to calculate a lot of coordinates, paths, kinematic and dynamic system behaviour implicitly and make manufacturing decisions related to machine models, tools, .. based on strong reasoning. 
In the 70ies, Assembler-->FORTRAN-->CNC-Language--->Part-Manufacturing Languages were a matter of develop-compile-go cycles.
In modern declarative environments we can think of language extensions, kernel extensions, link structures and plug-in API's. Mathematica is built by C++, but UnRisk is built on top of Mathematica extending Mathematica's declarative environment into the universe of financial derivatives and risk analytics. In UnRisk users declare  "Instrument-Groups", "Contract-Features", "Pay-Offs", "Scenarios" and use one super-function "Valuate" that acts as generic interface for all valuations.  Developers, say in interest rate research of a bank, can build their environment on top of UnRisk. The development cycle becomes compute-develop-deploy.
It is my strong belief that the choice of such techniques will drive "domain-specific languages" in all type of domains, from biology to finance.

Symbolic Parallelisation

In 1989, I found STRAND 88, a parallel declarative language for writing programs that was portable across a broad range of parallel computers. A key language feature made it possible to interface to C. I wanted to understand the principles,  limitations and traps of parallel declarative programming in early stages. One of STRAND's objectives was to specialize on symbolic computation. Consequently, I conducted a trial-project: parallelization of a symbolic computation library, written in C, by STRAND 88 (performed at RISC). STRAND worked very well. But at that pioneer time parallel computation had a babylonian mix of architectures, sytems, middleware ad languages. Finally STRAND went from the market. They were too early?
Mid 90ies, I had the great luck to start a cooperation with Roman Maeder (now Director of HPC at Wolfram). In 1998, he developed the Parallel Computing Toolkit for Mathematica, the base of gridMathematica now on version 7  . It now extends Mathematica 7 wich has built-in parallelism. Its Leightweight Grid Manager, makes it easy to manage a networked pool of remote computation kernels.
But the core of Roman's tool is symbolic parallelism, making Mathematica's unprecedentedly clean-designed declarative language, a parallel declarative language. It enabled us to parallelize the machine learning framework and UnRisk in a few lines of code and to test parallelization approaches across scenarios for speed-up maximization.

A Theorem Prover that Computes?

Why do we want to prove a theorem? Because we are lazy. We do not want to test infinite many cases, we want verification for all cases at once. The objective of Bruno Buchberger's Theorema project is to let the computer construct the proof. An automatically generated proof of the shown theorem, see here . The proof is white-box (readable) and it uses an external operation (Simplify) provided by Mathematica. Theorema is built on top of Mathematica. We could have done this proof easily by hand, but if we look at the Nontrivial Example... ? The long-term objective of the Theorema project is to produce a complete system which supports the mathematician in creating interactive text books. This covers the mathematical problem solving cycle including specification, exploration, creating ideas, proving and programming.
Programming? Simplified, the constructive proof that the Groebner Bases are result of correct equivalence transformations (of the original system of polynomials) is a program which computes them. The automatically generated proof is computational.
To my knowledge, Mathematica was selected for Theorema because it allows to define your own syntax, its pattern matching mechanism and comprehensive solvers.

Eliminate Quantifiers

Later 80ies. I met George E Collins (University of Madison - cooperating with RISC). His research field: Quantifier Elimination for Real Closed Fields by Cylindrical Algebraic Decomposition. His research team developed a system. The objective: ask a question like "For all Circles C1 and C2, is there an intersection point P12 of C1 and C2?" and get an answer showing the conditions (no-1-2) and how to calculate (a closed form solution).
Mathematics is quantifier elimination? When you write an equation, you have in mind to solve it. And even if you do not explicitly ask it, you might have "Is there, so that ..?", "under conditions ?", with constraints ?", ... in mind. To answer such questions, you need an input interpreter, a mathematical knowledge base, a computational engine and a result reporter?
Over 20 years later, Wolfram has introduced Wolfram Alpha the computational-knowledge engine. Fruit of challenging research, a clear concept carried by a symbolic language to represent anything and the algorithmic power to do any kind of computation, Mathematica!, and massive data. And it takes questions people ask in natural language, suppressing the "Is there..?", "under conditions?", "which constraints?".... NOT a search engine. NOT a content representation. A computational-knowledge engine, If you want, a general quantifier eliminator?  

Dance with Symbols?

Early 70ies. I started my math studies at JKU in Linz. Great luck that Bruno Buchberger started to teach there. He was (one of) the most influencing researchers of Symbolic Computation. It fit perfect into my interest: Algebra.
In brief SC deals with the manipulations of symbols, like mathematical expressions, geometrical objects, logical expressions, molecule structures, electronic circuits ... or even programs by computers. Bruno's Groebner bases are a perfect example of the requirement to dance with symbols: you solve a linear system by manipulating the base and bring it into a convenient form ("triangulation"). Manipulation by arithmetic. Bruno generalised this for polynomial rings (instead of base vector, he needed to deal with special ideals and complex elimination properties). Manipulate means transforming algebraic symbols. 
In non Mickey-Mouse cases, finding such a base without a computer is "impossible". Bruno: Mathematics is (only) essential, if you can do it by computer. I say, PLUGGED. 
Mathematics and computer science? Abstract data types are related to universal algebras. In a Ring (R, +,*), +,* are operations which results stay in-house. They encapsulate. All instances inherit Ring properties. And implementations of  +, * are independent of the interface (polymorphism). In my master thesis I studied "Free Algebras". They represent the language aspect of Algebras. The interface.
After my studies I made a career in factory automation. 1987 Bruno founded RISC . Factory automation deals with geometry, machine operations, robot tasks, operation, production and risk management, .. technical objects which are manipulated by programmable technical systems. I cooperate with RISC from the beginning. 
This influenced not only my problem solving capacity but my way of thinking. And finally my business life.