Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Coding bat, project euler, python challenge for example are all amazing brain teasers that usually provide you with some learning material, ways to compact your code, and enhance your problem solving skills. At the end of the day, when you go through a few of those exercises, you learn something new, or you better understood a concept.

Are there similar exercises for OOP, MVC, MVVM, MVT, and so on type situations? In class it is usually taught to think of an object as a cat, part of an animal class. and you have mammals and so on. However, in real life, objects are more abstract, and harder to imagine and implement. The same could be said about MVC, MVVM, and MVT, where applying a small system is usually simple, but when the problem is scaled, it suddenly becomes a bit more daunting.

share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

One thing I know of for OOP is code kata, like the bowling game kata.

The thing about open-ended exercises for OOP is that you may interpret the domain in a number of ways, leading to very different design. Kata walk you down the garden path, but in doing so they can help you to realize how to frame your thinking, and discover the kinds of things you should be thinking about at certain stages in your design.

The effectiveness of things like the sudoku solver problem or the bowling kata at teaching ideas like TDD is debated, as is the classification of these exercises as "kata" (does going through them repeatedly really help you cement ideas? I'm not disagreeing, just posing the question), but going through them at least once can help.

share|improve this answer
add comment

Just think of something to build and built it. It should be a problem domain you understand well so that your time will be spent on architecture, interface design, programming and whatever other skills you want to practice.

Here are a few things I build to do this because this is how I move to a new language, and/or framework:

  1. A bug tracking tool. All developers should be familiar with these and what they need to do. These have the advantage of being a well known domain but can be simple to complex because you can include things like work flow, etc.

  2. A hobby inventory application. This is a good application to build if you want to get more familiar with CRUD functionality. For example, build an application to track the baseball cards you own, the antiques you have, etc. It really doesn't matter what you are tracking, you just want to keep the item you are tracking simple so that you can concentrate on learning about implemented CRUD functionality.

It really doesn't matter what you build, the idea is to keep the problem domain simple so that figuring out the functionality is a piece of cake.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.