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.
© 1999-2014
Bill Pringle.
Hosting courtesy of
CHCS Consulting.
This site best viewed with FireFox.