Course Group Status Report


Programming Languages Group

Course no. Title Credit
Hours
Reqd (R)/
Elective (E)
CSE459.XX Programming Languages
for Programmers
1 R *
CSE655 Intro. to Principles of
Programming Languages
4 R
CSE755 Programming Languages 3 E
CSE756 Compiler Design &
Implementation
4 E
* : Students are required to take at least one 459.XX


1. Summary

Programming Languages is, of course, a central part of any CSE program. Indeed, many people outside the field have the mistaken impression that learning the syntax of a couple of languages and writing a couple of programs in each of them is all there is to CSE. Our courses have been designed so that students do learn to program in different languages; but at the same time, they also explore the conceptual foundations underlying different languages; develop a thorough understanding of implementation methods for languages; and are exposed to alternative programming paradigms such as functional and logic programming.

As explained in detail in section 2.3, courses in this group help us meet a number of EC 2000 Criterion 3 and CSE outcomes. Briefly, the variety of programs that students are required to design and implement to solve problems of varying difficulty, using ideas from discrete mathematics, formal languages, etc., ensures that these courses contribute toward meeting CSE program objectives 1a, 1b, and 1c and ABET criteria 3a, 3b, 3c, and 3e; the documentation that these systems require as well as the active class discussions that are a common feature of especially CSE655, enables these courses to contribute toward meeting CSE objectives 3a and 2b, as well as ABET 3d and 3g; the range of modern languages and tools that the students work with in these courses help these courses contribute toward meeting CSE objective 4a, and ABET criteria 3i and 3k; and the focus on ensuring that the students' programs are well designed and function correctly as well as discussions about common causes (such as memory leaks) for failures in real systems, help these courses contribute toward meeting CSE objectives 3c and 4a, as well as ABET criteria 3f, 3i, and 3k.

Students and faculty are generally satisfied with the courses in this group. For BS-CSE and BS-CIS majors, the most important course in the group is CSE 655; it is a required course for students in both programs. CSE655 brings together ideas from a number of earlier courses in the program such as Math366, CSE321, CSE560, and CSE625, and often addresses issues in a way that is directly related to actual practice in industry. As explained later in the report, there are also some problems with courses in the group that we are currently addressing. These problems, such as our inability to offer CSE 756 (Compiler design and implementation) have to do with lack of faculty in the area; the problem has been further exacerbated with the recent departure of Baumgartner from the department.



2. Detailed Analysis

Section 2.1 describes the individual courses in the group. Section 2.2 explains how the group is related to the rest of program. Section 2.3 explains how the group helps meet a range of ABET and CSE objectives. Section 2.4 provides information on the feedback we have received from students, recruiters, etc. about the courses in the group. Section 2.5 summarizes the changes we are considering in the various courses.

2.1 Summary of the courses

CSE459: This is a one-credit course intended to ensure that students learn the syntax of, and write some simple programs in, at least one other language than the one they have used in their earlier courses, especially CSE221, 222, and 321. As new languages become popular, we have tried to introduce corresponding 459's in response to student demand for them; an example of this is the new 459 course on Java. At the same time, CSE459 also allows us to meet the needs of our industrial partners by continuing to offer 459's corresponding to somewhat older languages used by legacy-systems; an example of this is the 459 course on COBOL. In addition, we have also used the 459 sequence to familiarize students with some important software tools such as (a few examples from the UNIX tools or whatever that 459 is); while some of these tools are not full-fledged programming languages, they provide convenient and widely used methods to solve common problems that would otherwise have to be solved by writing programs in a conventional programming language. Not surprisingly, these tools are widely used in industry and students who opt to take this 459 gain practice in using these important tools.

CSE655: This is the main course on programming languages. It is not a survey of languages; rather, the course is intended to ensure that the students gain a thorough understanding of the major concepts underlying different languages; use standard ways of describing programming language features; and gain an appreciation of alternate programming paradigms such as functional programming and logic programming. Students also gain a good understanding of ways of implementing languages such as compilers and interpreters, as well as run-time questions such as memory management. A common student project in this course is to implement a simple programming language; this allows students to gain a first-hand appreciation for problems ranging from parsing the input program, to detecting errors (both compile-time and run-time) in the program, to managing memory. Another common programming task is to have students design and implement a program in a language like SCHEME to acquire some facility for functional programming.

Students take this course in their senior year or late junior year. By that time many of them have had some industrial experience, either as interns or as part-time employees in local software companies. Naturally they bring to CSE655 their experiences with various languages, often leading to illuminating class discussions relating the CSE655 topics to actual industrial practice.

CSE755: This is a continuation of CSE655. It focuses on the theoretical foundations underlying programming languages, in particular on questions having to do with such topics as program verification and denotational semantics of programming languages. CSE755 is geared toward graduate students but some undergraduates with a strong interest in foundational questions, especially those considering graduate studies, take this course as an elective.

CSE756: This is also a continuation of CSE655. Students in this course study, in depth, the various problems in implementing compilers for programming languages and study various possible solutions. They put these solutions into practice by designing and implementing a compiler for a standard imperative programming language. This is a fairly demanding and extensive programming task and brings together ideas that students have seen in a variety of courses, from CSE560, CSE625, and CSE655. This course usually sees a mixture of undergraduate and graduate students.

2.2 Relation to rest of the program

CSE459: The pre-requisite for CSE459 is CSE321 (or CSE314 for Information Systems majors); by the time students have completed CSE321 (or 314) they have had considerable software development experience in one language. As a result, they are able to handle CSE459 with no difficulty.

CSE459, usually 459.21 or 459.22, is a pre-requisite for a number of courses such as CSE662, CSE677, etc. that have programming labs that use C or C++. Again, given the students' software development experience from CSE321, 459.21 or 459.22 provides the students with the appropriate programming skills needed to complete these labs.

CSE655: The pre-requisites for CSE655 are CSE560 and 625 (which in turn has Math366 as a pre-requisite). CSE625 provides students with the formal machinery (such as context free grammars) needed to gain a thorough understanding of the concepts underlying various languages, and to serve as a basis for suitable implementations of the languages. And the discussion of functional programming in 655, given the essential and natural role that recursive thinking plays in this discussion, builds on the exposure that students have had to recursion in earlier courses, including Math366 and 625.

CSE560 provides students with a conceptual model of the underlying hardware including the memory, so that students can appreciate the constraints that language implementations have to work with. Too, the solid software development experience of CSE560, including the need for proper documentation, serves the students well in their 655 project. Thus the pre-reqs are preparing students well for CSE655.

CSE655 serves as a pre-requisite for CSE721, CSE755, and CSE756. CSE721 is a course on Parallel computing (which relatively few undergraduates take); CSE655 prepares students for this course by ensuring that they have a thorough understanding of sequential programming languages and implementation questions concerning them. CSE755 as described earlier in this report builds on CSE655; it focuses on the formal foundations of programming languages; CSE756, also as described earlier, continues the 655-discussion of implementation of languages. CSE655 is serving the needs of these courses well.

CSE755: The pre-requisite for CSE755 is CSE655. CSE655 provides students with both the formal machinery concerning context-free grammars of languages, as well as the maturity in terms of having a good grasp of general language concepts including run-time issues. The understanding of automata theoretic ideas that students gain in CSE625 (which is a pre-req for CSE655) also helps students in CSE755 since this course builds on those ideas. Finally, students get to see, in CSE755, the precise basis for ideas such as pre- and post-conditions, as well as loop invariants, that they have been exposed to since CSE221.

CSE755 is a pre-requisite only for research seminars (CSE788.XX and CSE888.XX); these are primarily geared towards PhD students, so almost no undergraduates take these courses.

CSE756: The pre-requisites for CSE756 are CSE625, CSE655, and CSE680. CSE756 builds on the material in both CSE625 and CSE655. Parsing techniques etc. used in CSE756 are heavily dependent on finite state automata and other mechanisms that form the main topic of CSE625; the interpreter project in CSE655 also requires students to do parsing but the grammar of the underlying language is sufficiently simplified that students do not need to see many of the complexities that they see in CSE756 and that are unavoidable in a real compiler. CSE756 also, of course, builds on the 655 material, in particular run-time mechanisms appropriate for static scope languages since students implement in such mechanisms in their 756 compiler project. CSE680 is less directly connected with 756; nevertheless, many of the data structure and algorithms that students study in 680 have important connections to the kinds of structures and algorithms they use in 756.

CSE756 is not a pre-requisite for any other course.

In summary, the pre-requisites for the courses in the group are satisfactory. And the few courses that have courses in the group as pre-reqs are satisfied with the courses.

2.3 Relation to program objectives

The courses in this group play a key role in meeting both CSE program objectives as well as ABET Criterion 3 objectives. In section 2.3.1 we consider the CSE objectives that this course group helps us meet, and in section 2.3.2 we consider the ABET objectives.

2.3.1 CSE Objectives

This group of courses strongly contributes toward meeting CSE objectives 1a, 1b, 1c, and 4a; moderately toward objectives 3a, 3c, and 4b; and to a limited extent toward objective 2b.

By allowing students to apply, in a new programming language, the skills they have gained in CSE321, CSE459 contributes toward meeting CSE objectives 1a and 1c. In CSE655 students gain a thorough understanding of important concepts underlying programming languages and how they are implemented; thus it contributes very strongly towards meeting objective 1a. Objective 1b is also met strongly since students rely heavily on ideas from discrete mathematics from Math366 and CSE625. And since the students practice what they learn on the programming projects and other homework assignments, 1c is also strongly met. CSE755 also contributes toward 1a and 1b, by providing students with a thorough understanding of the mathematically sound foundations underlying key programming language constructs. And CSE756, because of its extensive use of formal, mathematical ideas underlying programming languages and algorithms built on these ideas, contributes toward CSE 1a, 1b, and 1c.

By providing coverage of languages that students are likely to use in their future employment, CSE459 contributes strongly towards meeting CSE objective 4a. Much of the material in CSE655, dealing with implementation problems of realistic languages is directly related to actual practice in the software industry, so CSE655 also strongly contributes toward meeting 4a. CSE756 also contributes substantially toward meeting 4a since the techniques employed as well as the tools used (such as lex and yacc) in this course are frequently used in industry.

The documentation that is required to accompany the various programming tasks in these courses, from the relatively simple ones in CSE459 through the much more involved programs in CSE655 to the compiler project in CSE756 all allow us students to improve their (written) communication skills. The frequently interactive nature of the CSE655 lectures helps willing students to participate in expressing ideas in a group setting, and thus improve their oral communication abilities. Thus these courses help us meet objective 3a to a moderate extent.

The attention paid in CSE655 to such problems as memory leaks that may occur unless appropriate steps are taken in language implementation, as well as usability problems resulting from poorly designed syntax or user interfaces, and the professional responsibility of software engineers to pay attention to such problems, helps this course contribute toward meeting objective 3c. In addition, and indeed even more important, is the concern for ensuring that the software they design, such as the interpreter that students build in CSE655, functions correctly. All of these concerns also form an important part of the compiler project in CSE756, so that course too contributes toward this objective.

The focus, in CSE755, on foundational issues underlying programming languages, as well as the facility that students gain in CSE655 and CSE756 in using mathematical tools such as regular and context free grammars helps these courses prepare interested students for advanced studies in good graduate programs, thereby contributing toward meeting objective 4b.

The frequent classroom discussions in CSE655 involving students with a range of backgrounds (including some with several years of industrial experience) improves the ability of students to work with people with different backgrounds. Further, in both CSE655 and CSE756, students are encouraged to (and do) carry on extensive on-line discussions (on dedicated newsgroups) about problems they encounter in their projects. Thus these courses help us meet objective 2b to a limited extent.

The contribution that these courses make toward meeting various CSE objectives is summarized in the following table:

CSE
1a
CSE
1b
CSE
1c
CSE
2a
CSE
2b
CSE
3a
CSE
3b
CSE
3c
CSE
4a
CSE
4b
XXX XXX XXX   X XX   XX XXX XX

2.3.2 ABET Criterion 3

This group of courses strongly contributes toward meeting ABET criteria 3c, and 3k; moderately toward criteria 3a, 3b, 3f, 3g, and 3i; and to a limited extent toward 3e.

The variety of programs that students design and implement to solve problems of varying difficulty in CSE459, CSE655, and CSE755, contribute strongly toward meeting criterion 3c. Further, the range of languages and tools that the students not only use in these courses but also analyze (in CSE655 and CSE756), strongly contributes toward meeting criterion 3k.

The use of precisely mathematical concepts such as regular expressions and context free grammars in CSE655 and CSE756, and the even more detailed mathematical basis that CSE755 builds on, help these courses contribute toward meeting criterion 3a. The need for debugging and correcting problems in the systems that the students design and implement in these courses contributes toward meeting criterion 3b. The focus on building correctly functioning software, as well as the attention paid in CSE655 to common sources (such as memory leaks) of problems in software systems and ways of avoiding these problems, help the students understand the professional responsibilities of software engineers, contributing toward 3f. The documentation that students are expected to provide for the systems they design in these courses, as well as the frequent class discussions in CSE655 help these courses contribute toward meeting 3g. Further, the range of (to them) new languages and tools that students in these courses have to explore and use, makes a contribution towards stressing the importance of life-long learning, criterion 3i.

The problems that students design programs for in these courses tend to be fairly precisely defined, with the students only working on designing appropriate solutions. But in CSE655, especially when working on their functional programming project, students have to formulate the problem in a rather different form than they are used to since the basic primitives of functional programming are quite different from the ones the students have been used since their beginning courses. This helps contribute toward meeting criterion 3e. Similarly in CSE755, students have to reformulate the question of correct behavior of programs into a very precise and formal characterization before they can attack the problem; this again contributes toward 3e.

2.4 Feedback

On the basis of comments in SET's (Student Evaluation of teaching) of the indivicual courses, students seem generally quite satisfied with the courses in this group. Several students find the CSE755 a bit too theoretical, and we are exploring ways to address this. For example, during Winter '99, Gerald is attempting to introduce a number of programming labs in the course.

The courses, with the exception of CSE755 which is geared toward foundational issues, seem to be meeting the needs of industry; regular campus-recruiters have commented that they are generally happy with the preparation our students have in this important area by the time they graduate. One comment that we have often heard from these industry people is that we should make sure that courses like the 459 course on COBOL continues to be offered since large parts of industry have a heavy investment in it. We should also continue to be aware of the possibility of offering new 459's in new languages and other software tools as appropriate. Possible examples are Tcl/Tk, Perl, Python etc.

Students have often complained about the textbooks for some of the courses in the group, especially for CSE655 and 755. While many books are available, they tend to be either superficial surveys, or deeply theoretical discussions of mathematical models of languages. Most instructors have been supplementing the current CSE655 text (by Sebesta) with their own notes. We will continue looking for alternatives. The textbook problem is particularly serious for CSE755; our ideal book for this course would build the theoretical concepts but at the same time draw the connections to practice. CSE459 and 756 have suitable textbooks available.

2.5 Possible changes

The possibility of introducing some programming labs in CSE755 has already been mentioned in section 2.4. We are also considering making some changes in CSE655. Typing-related issues, especially the possibility of type inferencing as in ML has not received much attention in our courses. One possible change in CSE655 would be to replace Scheme by ML for the functional programming lab. While this would allow us to explore typing issues, the flip side is that ML is perhaps not as well suited for an undergraduate course as is Scheme. Perhaps a better alternative would be to explore typing issues (via ML) in CSE755 and continue to use Scheme in CSE655. We will discuss this change in the coming quarters. CSE655 probably also needs some additional changes to take into account the changes that have been implemented in the Software spine. It should be possible to increase the attention paid to Object oriented issues. (It is also worth noting that we had, in fact, introduced a 3-credit course, CSE694P, that focussed on OO issues, using C++. The course was offered three times (each time taught by Soundarajan). The course was well received, but with the recent changes in the Software spine, the need for a full course on this topic is no longer there; hence CSE694P is no longer being offered. But we plan to borrow on the experiences of that course to improve the coverage of OO issues is CSE655.)

CSE756 is in good shape. Since there is a substantial programming project in this course we have briefly talked about making this a capstone design course. One difficulty here is that CSE756 introduces a number of new ideas that are used in the student project, the design and implementation of a compiler. This goes against our capstone design course guidelines (of not covering too much new material but rather focusing on the design). One possibility would be to move some portion of the current CSE756 to CSE655 so that 756 can devote more time to design issues.

CSE459 is working well. We need to be on the lookout for possible topics for new 459's.



3. Conclusions

The Programming Languages group is a key component of the CSE program and help us meet a number of objectives of the program as well as a number of the ABET Criterion 3 objectives. The courses, as they stand, are doing reasonably well; students are generally satisfied with the courses, some key industry requirements are being met by the courses, and there is strong faculty commitment to the courses.


Course Coordinator Recent Instructors
459.XX Sinha? (459.11)
Sinha? (459.21)
Rountev? (459.22)
Rountev? (459.23)
Davis (459.31)
Reeves? (459.41)
Shen? (459.51)
Curtin, Joseph, Parent(?), Wei Du, Yingjie Li
655 Soundarajan Baumgartner, Soundarajan, Mathis
755 Rountev Rountev, Soundarajan
756 Rountev ??

People involved in preparing report: Neelam Soundarajan, Nasko Rountev, Bob Mathis.

Date of report: December 2004


Neelam Soundarajan
December 2004.