A significant amount of the software written today, and more so in the future, interacts with naturally occurring data — text,
speech, images and video, streams of financial data, biological sequences — and needs to reason with respect to concepts that
are complex and often cannot be written explicitly in terms of the raw data observed. Developing these systems requires software
that is centered around a semantic level interaction model, made possible via trainable components that support abstractions
over real world observations.
Today’s programming paradigms and the corresponding programming languages, though, are not conducive for that goal. Conventional
programming languages rely on a programmer to explicitly define all the concepts and relations involved. On the other hand,
in order to write programs that deal with naturally-occurring data, that is highly variable and ambiguous at the measurement
level, one needs to develop a new programming model, in which some of the variables, concepts and relations may not be known
at programming time, may be defined only in a data driven way, or may not be unambiguously defined without relying on other
concepts acquired this way.
In Learning Based Programming (LBP), we propose a programming model that supports interaction with domain elements at a semantic
level. LBP addresses key issues that will facilitate the development of systems that interact with real-world data at that
level by (1) allowing the programmer to name abstractions over domain elements and information sources — defined implicitly in observed data, (2) allowing a programmer
to interact with named abstractions (3) supporting seamless incorporation of trainable components into the program, (4) providing
a level of inference over trainable components to support combining sources and decisions in ways that respect domain—s or
application—s constraints, and (5) a compilation process that turns a data-dependent high level program into an explicit program,
once data is observed.
This chapter describes preliminary work towards the design of such a language, presents some of the theoretical foundations
for it and outlines a first generation implementation of a Learning based Programming language, along with some examples.