In this assignment, we'll get a head start on our projects. You'll describe four potential project ideas and evaluate their suitability as a project. You'll also provide feedback on someone else's project idea.
Do this assignment individually: you must come up with and describe your ideas on your own. You may talk with other people, though, as you're generating ideas and describing them. If you're inspired by someone else's idea, that's totally fine! The two of you can write about the same idea (or that person can give you an idea). But once you decide you both like the idea, don't talk about it with each other until you've finished describing it. (That way, each of you can contribute your unadulterated thoughts.)
-
Have fun! This is your chance to play with the idea of language and perhaps come up with something that is both surprising and obvious.
-
There's no commitment: You're not promising to do any of these things for the project (although it's certainly nice if you come up with an idea that you really like and that makes for a good project). You have until Fall Break to settle on an idea for a project, so take your time.
-
If you have some ideas already, jot them down. Then, read the rest of the assignment. Then, set things aside for a day or two and let things sit in your brain. Then, come back and describe your ideas.
-
If you'd like some additional help coming up with ideas, here's lots of advice and suggestions.
-
Focus most of your attention for now on problems, rather than solutions. In particular--in most cases--it's premature to talk about an internal vs external language, compiler vs interpreter, or choice of host language. Instead, focus on the need that a language would address and why a language helps address that need.
You'll come up with four (potential) project ideas and write about them. Some of the ideas are free-form, some are subject to constraints:
-
Free-range idea #1: No constraints on this idea--it's all you! Describe this idea in
free-1.md
. -
Free-range idea #2: No constraints on this idea--it's all you! Describe this idea in
free-2.md
. -
No-computer idea: In class, I claimed that chess is a DSL, then tried to make a case for it. Pick something that you think could be a DSL but that you think it would take some effort to convince someone else in the class, because there's no computer involved. Describe this idea in
no-computer.md
. -
No idea: Describe a problem that involves computers whose solution is definitely not a DSL. Propose a DSL to solve it. Then write about how a DSL is a bad solution to the problem. (This might seem weird, but it'll help prevent us from applying the DSL hammer where it's not needed. If we know the limits of DSLs, we're more likely to come up with a project that is both suitable for this class and useful to people.) Describe this idea in
anti.md
.
In each of the files mentioned above, you'll find the same set of prompts. Don't erase anything from the starter file, and fill it in with your ideas and your thoughtful and well-written responses to the prompts. Be sure to answer every question in each file.
You're free to take ideas from existing DSLs, past projects, or other people, as long as you give credit and as long as your description and evaluation of the idea are your own. However, taking all your inspiration from the same source (e.g., existing DSLs or from other people) is not advised.
Good responses (i.e., responses that receive a 3) will:
- fully respond to every prompt in the starter file, and
- be well-written and easy to read, i.e., clear yet concise using good spelling, grammar, organization, and proper formatting, to convey a well-formed idea, and
- where appropriate, support your thoughts with references to material from class, from the domain of your project, or from other solutions in the same domain.
Great responses (i.e., responses that receive a 4) will additionally:
- be particularly insightful about the needs of the user and about the suitability of the idea as a CS 111 project ("insightful" means that you've clearly articulated all the angles, the benefits and drawbacks, risks, etc.), or
- describe a particularly novel use of language to solve a problem (e.g., something that no one has thought of before), or
- (for the "anti" idea) describe a project that, on the surface, seems totally appropriate as a project but for which you can provide a compelling case that it's not, or
- provide a fifth idea whose description would receive a 3 (to do so, create a new file with a name of your choosing, copy the questions into that file, answer the questions, and commit and push the file to your repository).
After the submission deadline, read over and comment on your critique partners' work. Be sure to comment on each of their ideas.
Here are some suggestions for critiques:
- What do you like about their idea(s)?
- Was there a need that was similar to one you thought of? If so, how are your thoughts about the problems similar to and different from your partners?
- Do you know anything about this domain? Do you know of existing DSLs that they didn't mention or do you have some expertise thinking about or writing programs for this domain? How might your experience augment your partner's thoughts on the domain?
- Answer the questions about suitability, scope, etc. of the project.
- Read the assignment, possibly including the advice for generating ideas.
- Think / come up with ideas.
- Write responses in each of the four files.
- Submit your work.
- Comment on your critique partners' work.