Assignment 1: Software development difficulties
Reflect on your software development experience. Oftentimes it is lots of
fun, but at times it can be frustrating.
1.
Think of a time
when some problem took you a lot of effort. Be specific: choose concrete
incidents that you remember, rather than describing a general type of problem.
It should not be trivially solvable by an
existing technique or tool, nor merely due to your ignorance or inexperience.
(But, some tools can help you more rapidly learn facts or overcome inexperience.)
Write 1/2 to 2/3 page discussing the problem. Give it a descriptive title.
Write
about the same amount of text on each of the following (number paragraphs in your writeup):
-
Describe the problem in sufficient technical detail for others to
understand why it was difficult. The topic sentence (that is, the first sentence) should be an informative summary or description of the problem.
-
Describe what methodologies and/or tools you used. Be specific about ways
in which they were helpful and ways in which they fell short.
-
Search for a tool or methodology that would solve your problem.
- If one exists,
you have learned something valuable, but don't write up that problem;
start over at the beginning and choose a different problem to write up.
(Note that sometimes a tool may claim to solve your problem, but it might only help part of it.)
-
If no tool exists that solves your problem, then describe the tool that
comes closest to solving your problem, and explain how it falls short.
-
Propose a tool that would solve your problem. It might be similar to, or
completely different from, the one that you described above.
Describe how it would work (this should not be magical, but should be
implementable). Think about the challenges of building and deploying such
a tool. Why do you think no one has built it already?
2.
Do the same thing, but with a different problem and solutions.
Choose two problems that are
different from one another; for example, they shouldn't both be about
any one activity/topic, such as requirements, coding, testing, debugging, performance,
documentation, etc.
3. At the end of the document:
-
List people or resources who helped you with this assignment.
(You don't need to mention web search, which you should definitely use.)
-
How many hours did you spend on this assignment?
Submit a two-page PDF file.
Use a font size of 10 or 11 points, and standard margins (1 inch).
This assignment will reward careful thought about interesting problems
and issues. Please introspect deeply and thoughtfully. Doing so will help
you in this class, and beyond.
Tips
The most common reason for low grades on this assignment is lack of
specificity. Don't let this happen to you!
-
The assignment asks for specific events in your life, not general
descriptions of an abstract problem. For example, don't say, "When
writing tests, it is hard for me to figure out all the corner cases",
or "A common problem in C programming is segmentation faults", or even
"During my summer internship I spent a lot of time trying to read and
understand ambiguous documentation."
-
Give concrete specifics about how the tools or methodologies you used
were useful or not.
-
Don't write generalities, or statements that would be equally
applicable to every problem or project. Every word you write should
convey insight about the unique characteristics
of your problem or project. For example, don't propose: "There should
be a public forum where people can ask and answer questions about tool
X", or "People should be careful when writing concurrent programs."
Another common problem is unsupported claims. Support every claim that you
make. For example, don't just say "Current techniques are not mature
enough to do it," without explaining why.