Frequently asked questions about the summer 2001 course.
Here is some information about the course.
Q. What will the text be?
A. I'm recommending two texts:
Q. What will the project be?
A. This year's project will be similar to last year's project, but not identical. Thus I am not in a position to post detailed specifications yet. However, below there is an outline of the project.
In short we will produce a simulation of a multi-robot environment. The robots must work together to achieve a common goal in the face of a changing, unpredictable, uncooperative environment. To make this even more fun, the environment will be a soccer field and the robots's goal will be to win a game of soccer. However the problems of simulating and controlling multiple agents are certainly not limited to sports, and you should recognize that while we are working on a game, it is representative of problems and solutions that go well beyond games.
The simulation of the game will be conducted by 3 programs operating concurrently and communicating over the Internet. One program (the environment simulator) will be responsible for updating the position and velocity of the ball and each player, for monitoring that the rules of the game are adhered to, keeping score, and displaying the state of the game. The other two programs (the team controllers) will each control one soccer team by sending requests to the environment simulator.
Each student team will be responsible for designing, implementing, and testing two programs: a simulator and a controller. At the end of the course, we will be able to pit the controllers against each other in a friendly competition. Obviously it is important that all environments operate very similarly and that the communication protocol be fixed for all teams; these aspects will be tightly specified by me. However the functioning of the controllers may be highly creative.
This year I plan to include some rigorous testing as a component of the course.
Q. What Languages and OSs can we use?
A. Because we will use the Internet to communicate and will avoid implementation dependant binary formats, any language/OS/computer combination can be used as long as the computer is on the Internet. This will be a team decision. However, I will only provide support for C++ under Windows NT/95/98/2K and Java under Unix or Windows NT/95/98/2K. This support includes some graphics and networking software components. I most recommend C++ or Java, and Windows, since we have the best tools for these environments. Since Java is becoming an important language in the world, and is generally easier to use than C++, I will provide a few lectures on Java. In 1999, somewhat to my surprise, every team choose Java, and I think none regretted it. In 2000, all but one team chose Java.
Q. How will the project be marked?
A. Software Engineers (worthy of the term) do not just sit in a cubical for months and then deliver an executable. The project will be composed of phases (analysis, design, low-level design, implementation, testing) each ending with the production of some deliverable (documentation, tests, or code). The deliverables will be due at points throughout the term. The final mark will be based on the sum of the marks of the deliverables plus a mark for competition performance.
Q. How will teams be composed?
A. I've found the optimal team size is around 4 to 5. Any larger --- team communication breaks down. Any smaller --- workload becomes too much. In order to balance the teams with respect to experience and perceived ability, the teams will be selected by a draft system. A number of team leaders will be picked by me, and the teams will then be selected by the leaders in a privately held picking session.
Q. But I want to be on the same team as my best buddy.
A. By mutual aggreement, any two students can form a pair, which will be picked together.
Q. Can I slack off and let my team mates do all the work?
A. Yes, but don't expect to get marks as high as theirs. Any slacking off should be brought to my attention during the term. At the end of the term, I will ask for a confidential report from each student about the team-work of their group. Students who clearly did not pull their weight can expect a mark commensurate with the effort they put in. (Conversely heroic efforts may be rewarded with higher marks.) In the past I've handled differences in workload somewhat informally. This year I am thinking about setting aside a large block of marks to be divvied up by means of a formal peer evaluation.
Q. Is the project all there is?
A. No. In past years every student had give a presentation to the class. Also there will be a lecture component on some of the fundamentals of software engineering, and perhaps some films and guest lectures.
In the past there have been no exams, and I can't foresee any this year.
Q. How can I get ready for the course?
A. Since it builds on earlier courses, you should already be prepared. E.g., you will use data structures, software design, UML notation, algorithms, etc. The last two years, most teams have chosen to work in Java. So picking up a book on Java and reading it will not hurt and may help. It's a useful language in many segments of the industry (dominant in some), and a pleasant enough language, so, even if you don't use it in this course, it may come in useful later in life, and in any case Engineers who claim to know programming should know a few languages well.
Q. Then what books on Java would you recommend?
A. I haven't reviewed a lot of books on Java and there are a lot out there. One that I have read and found useful is Core Java by Cornell and Horstman. The latest edition is in two volumes. Volume one seems to cover everything you might need for Software Engineering, except maybe some internetworking and graphics stuff, which I'll make optional anyway. A word of warning: reading some of the reader reviews at amazon.com, I found, while most people liked the book and some raved, a surprising number hated it vehemently. However, no one who hated it would suggest a better book.
A different sort of book is Object-Oriented Software Development in Java: Principles, Patterns, and Frameworks by Xiaoping Jia. It doesn't try to teach every aspect of Java and its libraries, but it trys, and succeeds in, relating Java to software design and object oriented design, in particular.
Q. Wouldn't real robots be more fun?
A. Yes, but simulating the real world is an important application of software engineering. Nevertheless, here is what you can do:
|Up to Theodore Norvell's Courses page|