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
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.