The Who and What of C311


Anyone with an interest in understanding computer languages. Particularly someone who needs to broaden their understanding of how the choice of a programming language to solve a problem affects thinking about the problem solution. Background should include two semesters of programming that covers C, C++, Java style languages and basic data structures such as queues and lists (C201 and C202) and a computer structures course (C335).


The lecture topics cover the theoretical elements of programming languages as well as practice using important languages. A strong investigation is made of important language concepts such as interpreters, compilers, function calls, parameter passing, scope, language syntax specification, and simple parsing. Other important topics include exception handling, concurrency constructs, and simple network constructs.

Weekly exercises closely complement lecture topics. The exercises rely heavily upon the use of appropriate languages to test one’s understanding of concepts discussed in lecture. While the purpose of the course is not to train programmers in multiple languages, active learning involvement to understand language concepts is best promoted through using the computer which, for this course, translates to implementing programs. More specific information can be obtained by reading the following discussion of course goals or by examining exercises listed as home works on the course syllabus.

CSCI C311 Learning Goals

The learning goals of each computer science course strive to capture intended learning outcomes. The goals are expressed using the terms that follow. These terms describe the level of familiarity (most to least) with respect to various kinds of material and procedures.

Mastery means the student will be able to exhibit knowledge of the material and/or skill with the procedure, in a new but appropriate context, even when not instructed to do so. Familiarity means the student will be able to answer questions about the material and/or to use the procedure, in a new but appropriate context, when instructed to do do. Exposure means the student will have heard the term and/or seen the procedure, but may not be able to discuss or use it effectively without further instruction. The C311 learning goals cover important areas recommended jointly in a report by the Association of Computing Machinery (ACM) and the Computer Society of the IEEE in 1991 for university computing curricula. These international organizations were established to promote academic and professional excellence in the computer sciences. The complete baccalaureate curricula list consists of nine subject areas, of which a portion are covered in this course, primarily those areas which better prepare the student to succeed in subsequent Indiana University Southeast computer science courses and as professional computer scientists. Several supplementary areas are covered that have developed since publication of the curricula report. Many of these subjects listed below will often recur in subsequent courses and at a level requiring further understanding.

  • Mastery

    1. PL3 - Representation of data types - 2 hrs.

    2. PL4 - Sequence structures including if, select, do loops, for. 1 hrs.

    3. PL4 - Parameter passing and side effects. 3 hrs.

    4. PL4 - Exception handling - 1 hrs.

    5. PL5 - Mechanisms for sharing and restricting access to data. 2 hrs.

    6. PL5 - Static versus dynamic scope. 1 hrs.

    7. PL5 - Type checking disciplines; polymorphism versus overloading, static versus dynamic. 2 hrs.

    8. PL6 - Run-time storage management, stack allocation and its relation to recursion. 2 hrs.

  • Familiarity

    1. PL1 - History and overview of programming languages. 2 hrs.

    2. PL2 - Virtual machines. 2 hrs

    3. PL8 - Context-free grammars. 2 hrs.

    4. PL8 - Application to recursive descent parsing. 1 hrs.

    5. PL9 - Comparison of pure interpreters vs. compilers; operation and use. 2 hrs..

    6. PL12 - Addition of parallel programming constructs. 2 hrs.

    7. PL12 - Problems involving contention for resources. 1 hrs.

  • Exposure

    1. PL9 - Lexical analysis and parsing, symbol table handling, code generation, optimiation. 2 hrs.

    2. PL11 - Overview of functional and object-oriented paradigms and languages. 2 hrs.

    3. PL11 - Designing programs with these paradigms; run-time environment, flow of control. 3 hrs.

    4. PL11 - Example programs and applications. 2 hrs.

    5. PL11 - Advantages and disadvantages. 2 hrs.

Design of C311 to Achieve These Goals

Computer science demands competency in a range of skills. Therefore, students benefit from the guided practice in the environment of a university class. To facilitate this, C311 includes the following:

  1. Students complete weekly programming assignments aimed at developing the foundational skills and exposure to multiple language paradigms.

  2. Class time is divided between instructor lecture, discussion, and class assignments. Students work in small teams during class to analyze and explain program behavior, suggest improvements, and discuss implementations in other paradigms. Individual student questions serve to guide the class discussion.

  3. Multiple language paradigms are examined and practiced with in depth comparison between procedural and object-oriented approaches.

  4. Programming exercises are available as Web-pages and are discussed in class when assigned using the pages available to the student.

  5. Most questions arise when students are working on exercises outside of class. Students are encouraged to contact the instructor directly or by emailing their questions and code of the troublesome exercise for guidance.

  6. In recognition that problem solving is often an iterative process, assignments that are less than perfect can be submitted for instructor evaluation, refined and resubmitted for additional credit.