  For effective use of edge computing in an IoT application, we need to
partition the application into tasks and map them into the cloud, fog (edge
server), device levels such that the resources at the different levels are
optimally used to meet the overall quality of service requirements. In this
paper, we consider four concerns about application-to-fog mapping: task
placement at different levels, data filtering to limit network loading, fog
fail-over, and data consistency, and reacting to hotspots at the edge. We
describe a programming language and middleware we created for edge computing
that addresses the above four concerns. The language has a distributed-node
programming model that allows programs to be written for a collection of nodes
organized into a cloud, fog, device hierarchy. The paper describes the major
design elements of the language and explains the prototype implementation. The
unique distributed-node programming model embodied in the language enables new
edge-oriented programming patterns that are highly suitable for cognitive or
data-intensive edge computing workloads. The paper presents result from an
initial evaluation of the language prototype and also a distributed shell and a
smart parking app that were developed using the programming language.
