The course aims to help students gain experience
and confidence with concepts of computer programming that will allow them to
solve meaningful problems in a variety of fields.  Basic ideas of computer and software architecture
will be covered along with programming concepts such as flow, Logic, data
structures, and modularity. The core emphasis of the course is on the
following: 1) Programming Concepts – recognizing and understanding the
fundamental constructs present in all programming languages; 2) Design Methodology – Using abstraction to simplify complex
problems into concrete subtasks; 3) Algorithmic thinking – defining the
process used to glean information from data, and being able to convince oneself
of its correctness; 4) Literate Programming –
Writing programs which are clearly structured and can be read by a human
as well as a machine; 5) Methodical and efficient development  of 
computer  programs  using 
step-wise  refinement  and incremental testing and debugging