This course is about programming and artificial intelligence. Depending on what school you're at, that could mean robots, neural networks, chess playing, etc.
At this school, this course is about
In particular, the main topic areas of this course are
This will include
Software engineering studies and manipulates the software development process. Programming is just one small part of that process:
This is a course on programming, not the entire development process, but it's about programming as a part of this process. This is not a course about throw-away code. Your coding will be evaluated on how well it supports testing and validation, team development, maintenance, and extension.
There are three fundamental criteria by which code is measured:
For this class, the most important feature of your code is clarity.
Large knowledge-based systems need lots of knowledge. That means you need to be able to build knowledge-management tools that many people can use to enter and manage large bodies of knowledge.
This class will discuss the following techniques for knowledge-management:
Large knowledge-based systems also need to work in a timely fashion. As knowledge bases get large, the simple approaches become too slow for practical use.
This class will discuss the following techniques for speeding up knowledge-based systems:
Delivered knowledge-based systems have to be maintainable, robust, and accessible to users.
Robustness means (1) the code as delivered works as promised, over a wide variety of situations, and (2) continues to work as promised when changed.
All systems have to be changed, but change is especially rapid and dramatic in knowledge-based systems, which are often the first of their kind in some application area.
The problem is ensuring the changes don't do more harm than good.
This class will discuss the following techniques for maintaining correctness under constant change are:
Comments?
Send me email.