  A standing challenge in undergraduate Computer Science curricula is the
teaching and learning of computer programming. Through this paper which is an
essay about programming, we aim to contribute to the plethora of existing
pedagogies, approaches and philosophies, by discussing a specific feature of
our approach in teaching principled programming to undergraduate students, in
their first semester of studies, namely the utilization of pictures, both
text-based and raster-based graphics. Although the given course has evolved
substantially over the thirty years of its delivery regarding the programming
languages (Miranda, C, C++, Java) and paradigms (functional, imperative,
object-oriented, combination of procedural and object-oriented) used, the
discussed visual feature has been maintained and steadily strengthened.
  We list abstraction, problem decomposition and synthesis, information hiding,
reusability, modularity and extensibility as key principles of problem solving
and algorithmic thinking. These principles are closely aligned with the
advocated computational thinking techniques of problem decomposition, pattern
recognition, pattern generalization and algorithm design. We aim for our
students to familiarize themselves with all the above principles through
practical problem solving. Our ongoing inquiry has been whether the problem
domain of pictures is contributing valuably towards this aim. Moreover, an
added-value is that students get a glimpse of computational complexity in a
visual, empirical way.
  The presented work is not related to visual programming, since the students
write their programs textually and not graphically; it's the output of their
programs which is in visual form. Our approach though is loosely related to the
classical paradigm of turtle graphics. However, our focus is Computer Science
majors, who should be able to design and build turtles and other objects and
not just use them. Indeed, the programming principles course helps them to do
both and also to appreciate the multitude of algorithmic ways for producing the
same visual output. Currently the given programming principles are approached
both from a procedural, process-based and an object-oriented, concept-based
perspective and the course uses the Java language. Through the presented
example problems, we aim to show the appropriateness of the visual domain of
pictures for supporting the learning of principled programming. The problem
domain of pictures is abundantly rich with potential examples to draw from.
Moreover, as reported in the literature, female students may show higher
interest towards visual problem domains in programming classes, in relation to
other problem domains. We plan to investigate this conjecture in the context of
our broader aim to encourage more females to follow university studies in
computer science; in this paper only a cursory finding is presented, that bears
some relation to what is reported in the literature.
