About the Book
I want this text to serve two purposes: learning the C# programming language, and programming a sophisticated implementation of chess.
Why chess? The game is complicated yet familiar. Piece movements are easy to program, but with enough patterns and complexity to make effective demonstrations of various software engineering and architecture techniques. There will be many tricks to explore when deciding how to represent a chess game's state, and many of C#'s language features will simplify our designs and improve the cohesion and coupling of our code. We'll learn about design patterns when fitting chess into a generic board game-playing application, and find a visceral pleasure when we program a user interface for the game, complete with an artificial intelligence opponent. In short, chess (and board games in general) ties together a great number of topics in computer science, and the sophisticated implementation we'll cover in this book should provide a number of learning opportunities beyond simple proficiency in the C# programming language.
This book is a work in progress!
I plan to develop this book in five milestones:
- Milestone 1: the entirety of Part 2, and a few excerpts from Part 1. Designing a framework for modeling board games and playing them in a console application. Programming Othello and chess in particular. C# language features like collections and LINQ necessary for best practices in the model.
- Milestone 2: the rest of Part 1. Finish the C# language overview chapters, making the book more appropriate for those wishing to learn C# from the beginning.
- Milestone 3: a copy-edit and clarification pass on Milestones 1 and 2. I'll add more exercises, examples, and expand on topics based on early feedback.
- Milestone 4: the entirety of Part 3. Develop a GUI application for playing board games. GUI implementations of Othello and chess.
Milestones 1-4 are complete!
- Milestone 5: the entirety of Part 4. Build a general computer AI opponent for board games, integrated into the console and GUI applications. Performance tuning for chess implementations.
About the Author
Hi, I'm Neal! I am a lecturer in the Computer Engineering and Computer Science department at California State University Long Beach. What's a lecturer? We are faculty members who only teach, as opposed to professors who do research, publish, and administer a department. All the time that professors spend advancing the state of the art of computer science, I get to spend learning and practicing to be a better teacher.
I teach a lot of different courses: theory and mathematics classes like discrete math, algorithms, and data structures; programming-focused classes like introductory Python and intermediate Java and C++; and senior electives in programming language theory and design, search engine technology and information theory, and .NET development. My students know me (I think) as a challenging but fair instructor who demands a lot but provides the resources necessary for success to those who seek them.