An introductory course to computing or to computer science is taught in many faculties and departments of an academic institution. When it is taught in the social sciences, it is usually meant to teach computer literacy and the use of computers in daily and professional life. When taught in the natural sciences or exact sciences, it is mainly meant to teach scientific programming. How should an introductory course be structured, when taught in computer science departments? In what sense should it be introductory? Should it teach programming? What should be the first language taught? Should it involve coding or not ?
These questions are very well discussed in the professional literature see [DIJ], for example; also many introductory text books have been written, too numerous to refer to here. And yet, in most academic institutions, the first introductory course has not dramatically changed over the years, and it almost always involves the study of a programming language. Even if the teacher has introduction to algorithmics in mind, the emphasis in practice is on the technicalities of a programming language, coding and running programs on a computer.
There is an inevitable downward migration from university, influencing high school and teachers' college curricula and courses. So, obviously the first course in high-school programs or in teachers' certification study programs is also most often devoted to programming, not always serving as a real introduction to the field of computing.
We designed a somewhat different course, and integrated it into a study program leading to teachers' certification in computer science. The course constitutes a pre-programming introduction to algorithmics, not involving coding at all, nor the running of programs on a computer. The design of algorithms in our program is done by means of a multi-layered chart, which provides a visual description of an algorithm. We feel that this "no coding" approach, makes it possible to focus on more fundamental concepts, and to provide knowledge and skills of value that is independent of specific computers or programming languages.