Bill Pringle - [email protected]

|  Home  |  News  |  Downloads  |  LDS  |  Talks  |  Famly History  |  Facebook  |  Games  |  Mobile  |  About Me  |

CSE 428 Semester Project

CSE 428 Home

Project Requirements

Write a collection of programs to assist your understanding of Programming Languages Concepts. These programs should perform similar tasks using multiple languages. Compare how different languages handle similar tasks. Explore how the same language can perform the same task in different ways. Then submit group and individual papers to illustrate your understanding of Programming Languages Concepts. The objective of these submissions is to convince the instructor that the team members understand the course subject material.

Each week, the team leader shall e-mail a status report to the instructor with copies to the entire team. This status report shall outline the progress of the team, including any difficulties they may be having. Please don't send this information as attachments; include the information in the body of the e-mail. The status reports provide an opportunity for the team to request assistance from the instructor. Failure to disclose problems during the semester may result in a penalty applied to the score of the group submission.

By all means, if someone on your team has experience with a language that nobody else on the team has, have them do something with that language and demonstrate it to the rest of the group. It is only by comparing different languages that you can understand Programming Languages Concepts.

Please remember that you will be graded not on the program(s), but rather how the paper illustrates your understanding of the course material.

The semester project can take one of several forms. You will be better off if your program handles numeric and text data in a variety of ways:

Write the Same Program in Several Languages
Write a program that reads data from the user and saves it to disk such that it can be read back in later. The program should be written using several different languages. Each program should have an export function (which might be identical to the save function) that saves the information in a format that the other programs can read. The program should be able to store several sets of inputs (e.g., information on several people).
Write Several Related Programs
Write several related programs that can exchange information between the programs. For example, one program might provide an interactive method for the user to specify something. That program could then save the information in a format that another program can read and process.
Write Different Programs Demonstrating the Same Features
Identify a group of Programming Language features (parsing, arrays, loops, dynamic data, error processing, etc.) to form the basis of your evaluation. Write programs in different languages that demonstrate how each language handles those features. The programs don't have to be complex or the same (or even similar). You may choose to write one small program for each feature, or combine several features into one program.
Extract Information from a File
Write a program to extract information from one or more text files and present the information in a different format. The program should involve a reasonable amount of parsing, and the different formats should also be in a different order. For example, read a file containing name, address, phone number, etc, which is sorted by name, and then display it in a different format sorted by zipcode. If possible, write this program in more than one language.
Write a Interpreter or Translator
Design a language to solve a specific type of problem. Write a program that reads commands written in this language and either solves the problem directly or translates the input file into a program written in some other language. Alternatively, you could write a program to analyze one or more programming languages, or to validate file formats (e.g., HTML or XML)

I can't say it enough: You are not being graded on the program, but on the paper. Please treat the above list as possible ideas, not a checklist.

Also remember that the course is Programming Languages Concepts, not Programming Languages. The goal is not to convince me you know several languages, but rather that you can compare the features of those languages. The goal is also not to convince me you know how to program, but rather that you understand the kinds of decisions that are made.

Don't spend time in your paper explaining how a language works. You can assume I understand the language unless you are using an obscure one. Don't spend time explaining how your program works. You would be better off explaining what language feature you used to do something within your program, and how it would have been easier (or harder) to use a different feature from language X, and why. If you tried doing something several different ways, discuss each method and discuss what made each method easier or more difficult, depending on the language feature(s) you used.

For example, when dealing with character strings in C, you can predefine their size (e.g., buf[BUFSIZ]) or use character pointers and allocate the necessary amount of memory (e.g., char *name; name = strdup(buf);) When parsing text, your input file can be in column format with fixed size fields or it could use delimeters to separate the fields. Some languages handle fixed length better than delimeters, while others don't, and yet others handle either about the same. What was your experience, and how do you rate the various languages for performing those types of tasks?

Sample Semester Projects

You are free to develop any type of program that you feel will assist you in learning Programming Languages Concepts. The following examples are intended to give you ideas, not restrict you in what you can do.

Project Description
GetInfo Program Write several similar programs in different languages that obtains and saves information from the user. The actual information can be anything, but examples would be phonebook or datebook entries, product information, sales results, etc. All programs should be able to read and write the same data files. Look at the GetInfo program from my Fundamentals class for some ideas.
Examine Features Write several small programs illustrating how various programming languages handle certain features (file I/O, parsing, conditional expressions, etc.). Pick a feature, then write sample programs to illustrate how the various languages deal with the feature. For example, write a small parsing program in several languages, then write programs to loop through arrays, etc. This project works well for groups without much programming background. You can use sample programs from various text books, manuals, etc. without having them be exactly the same.
HTML TOC Write a program to parse an HTML file, determine where the header tags are, and then build a new file with a table of contents. The Table of Contents should be in list form, and have links to the actual sections. (Don't forget to add a link to the top of the page at the end of each section.)
DrawTool Expand the DrawTool program so that it actually draws items. Define a command language to describe the drawings. Have one program allow the user to specify the drawing (perhaps with a GUI interface) and save the specifications using some language you have designed. Draw the figures on the screen and/or using PostScript.
Calculator Write a calculator program. The program should be able to read instructions from a file and execute them. If possible, support variables and macros.
Validate Format Write a program to validate a file format. For example, validate an HTML or XML file. Make sure that the tags match (e.g. for every <h1> there should be a </h1>). Your program can limit itself to syntax validation. If you have time, you can add some semantic checking.
Parser Design a simple language and write a parser for it. If possible, write several parsers, each in a different language and/or using a different parsing technique.


Suggested Topics for Paper

Following are some suggested topics to be addressed in your individual papers. This should be considered food for thought, not a checklist. You are not required or expected to address all of these topics. These are more to give you some ideas of things you can bring up in your paper. In fact, you are encouraged to come up with topics of your own.

Remember, you are not graded on the program, but on the paper. The objective of the paper is to convince me that you know a lot about Programming Languages Concepts. These topics are intended to give you some ideas of how you can demonstrate your understanding of the topic.

When discussing the following topics, take time to explain your decisions. For example, "I chose language X because it was easy to do Y" doesn't help. Take time to explain why you thought it was going to be easy to do Y. Explain your experiences with language X. Did it live up to your expectations and why? What did you learn about Programming Languages Concepts while doing your project?

Also, please don't just copy the lecture notes. I already understand Programming Languages Concepts; you don't have to explain it to me. I'm not looking for an impersonal paper on the topic, but rather your experiences, what you learned, and how you benefited from the course. Don't limit yourself to what you did right; that won't get you a better grade. What gets you a better grade is an honest assessment of your performance: what you did right, and what you did wrong. If you are able to identify what you did wrong, why it was wrong, and what you could have done better, you are more likely to get a better grade than if you just lucked out by making good decisions, but can't explain why they were good decisions.

How did the project increase your understanding?
Be specific. The statetment: "This course has helped me understand programming concepts" might be true, but you have to say more than that to convince me. For example, how did learning a concept in class help you implement a specific feature in your program? Is there something that was hard to do, and then you learned something in class that would have made it easier? Is there something you do at work that has been made easier because of something you learned in class? If so, talk about that.
How did your choice of language help/hinder your efforts?
Mention specific things you tried to do in your program. What features did one (or some) language have that the others didn't that made doing that thing easy? Why? What features did one language not have that made it hard? Why?
How could a different language/feature help/hinder your efforts?
Is there a language that you didn't have access to that has a feature that might have helped? Did you do something in one language that would have been very difficult (or easy) had you used a different language?
What decisions did you make and why?
These decisions should involve programming language concepts. For example, if you were going to handle strings did you use fixed length strings or variable length strings? Why? When parsing did you use fixed length fields or delimeters? Why? What other options were there? Why do you think those other options were worse or better?
Why did you choose the language(s) you used.
Simply saying "I chose language X because I knew it" doesn't help me understand your knowledge of Programming Languages Concepts. However, if you say "I chose language X because I felt it would be easy to do Y with it" is a good start. Then go on explain why you thought it would be easy to do Y, as well as your actual experiences, and an evaluation of how well your expectations were (or weren't) met.
How did your choice of Language Affect Your Design?
Especially if you wrote the same (or similar) programs in different languages, how did the similarities and/or differences between the languages affect how you implemented a particular task or algorithm. For example, one language might have a function that made it much easier to do something, while you had to do much more when using another language. Even if you didn't use another language, you can discuss how some features of the language that you did use compared with some of the languages you read about in the text, or heard about during the lectures. Of course, if you have actual experience, that is almost always better than theoretical discussions, even if you simply tried to write some portion of the program in another language.
What factors affected your choice of interface files?
When designing an interface between different programs, what factors affected your decisions? For example, how did the various languages reading and writing the interface files affect the format of those files? Now that the program is complete, what would you do differently and why?
What did you learn about Programming Languages Concepts?
What did you learn about Programming Languages Concepts while your worked on your project? Don't just list what language features you used, discuss how those features made it easier or more difficult for you. Discuss the trade offs in the various ways that certain capabilities are implemented in the different languages. What features would you have liked to have available? What would be the ideal language for your project look like?
How did your choice of language make things easy or hard?
For example, how did the different languages handle strings? What language(s) made it easiest for you to do what you wanted with strings? Why? What language(s) made it harder for you? Why? Compare how easy and/or hard it was to do the same kind of thing in each of the languages you used.
Design of Your Own Language
If you designed your own language, explain why you chose the format you did. What do you perceive the strengths of your language? What are the weaknesses of it? In what situations does your language perform well? What problems did you run into with the syntax when trying implement it? Even if you didn't implement your own language for the project, you can speculate on the features of the "ideal" language for what you attempted to do on your project. Is there some feature that the language you used lacked, but you feel would have made it easier to do something? Describe what feature you would add to the language. How would that feature affect the rest of the language?

Top of Page

How to Get an "A"

Be sure to read the general guidelines for group projects.

Here are some suggestions, in no special order

The more languages the better
In general, the more different languages your team investigates, the better you will do. Learn as much as you can about the different languages. Compare them with each other. Make sure you talk about all of them in your paper; don't limit yourself to just the one(s) you used. For this course, it is probably better if you have a reasonable understanding of two languages than a thorough understanding of one.
Don't Fight the Language
Take advantage of each language. Don't try to do the exact same thing in each language, but rather try to solve the general problem. For example, if the program is to read and write text files, but somebody wants to write in PL/SQL, then for heaven's sake, use a database! SQL was designed to work with databases, so if you try to read and write text files using PL/SQL, you really aren't learning about the strengths of SQL. You could always import a text file into the database and export the data to a text file if you need to interface with other programs.
Share your knowledge
If you know any odd-ball languages that most people don't, make sure you share that information with your team mates. If it is really rare, then talk to me about giving a presentation to the entire class. Not only will you be helping others learn about a different language, you will find you learn more when you have to explain it to others.
Ask your programmer friends
If you have any programming friends, or work with programmers, then don't be afraid to ask them about what kinds of languages they know, what they are like, etc.
Take advantage of the Languages
Avoid detailed flow charts that prevent people from taking advantage of language features. For example, if you are using a language that will let you do something in one line that others would take five or six, then use that feature and show it to the others.
Look at my web site
Each semester, some student writes that they couldn't figure out how to do something, or I get e-mail asking how to do something. My response is often "Go to my web site and download ..." If you only download one thing, make is the "Parsing" examples, but the more you download, the better. Look at the many sample programs written in different languages. There is a checkbook program written in C, VB, and Java. There are several Tic-Tac-Toe games. Study them. Notice the differences. Read the "Readme.txt" files and see why I did it one way in one program, and a different way in another.
Don't just compare features
Don't just compare two languages. Anybody can do that. What do the differences mean? How does the way one language implements a loop make it easier or harder to do something compared to another language that uses a different type of loop? If some other language has some neat feature that your language doesn't, what can you do in your language to make up for that fact?
Don't just talk about what you did
Just don't describe your program. Discuss why you decided to write it the way you did, especially what language features made it easier to do. Mention how it would be easier or more difficult to do the same thing in other languages.
Talk about programming concepts, not programming languages
Focus your thoughts on the concepts, not the languages. For example, avoid talking about C, and then talking about VB, and then talking about whatever. Instead, talk about a concept, such as control structures. Talk about how different control structures affected the design and implementation of your project. Mention what languages support the varous features you are discussing, and perhaps how the different languages implemented those features, but stay focused on the concept, not the language.
This is especially important in your group paper. Try to avoid having the group paper divided up into sections, where there is a small blurb about each language. That is certainly the easiest way to write the paper, because each person can write the paragraphs that deal with the language(s) they used. However, if you take some extra time to consolidate what you have learned, and then write about that concept, with references to those languages that best (or worst) demonstrate the programming language concept you are talking about, your paper will be much better.
Don't confuse the implementation with the language
Don't forget that you should be comparing the languages, not the individual programs. Just because programmer A wrote some nifty code in language X, that doesn't mean that language X is necessarily better. It might mean that programmer A is better. The question is: could the same thing be done in language Y and Z also, even though programmers B and C didn't do that.
Don't confuse terminology with concepts
Don't say things like "C uses #include, while Java uses #import". So terminology is different, what about the concepts? Is there any real difference between the #include in C and the #import in Java? If so, then that is what you want to write about. Just because one language calls it a subroutine, another calls it a procedure, and another calls it a void function, that doesn't mean they are different. It just means they have different names.

Valid XHTML 1.0 Transitional Valid CSS!

© 1999-2014 Bill Pringle.      Hosting courtesy of CHCS Consulting.      This site best viewed with FireFox. Get Firefox!