views:

473

answers:

9

Hey,

I'm currently taking a class on software development. The main aspect of the class is going through the development cycle on a fairly complex project. This project has to be complex enough to take 4 people a semester to do. I was wondering if anyone had some good ideas. I'll list two ideas we had below.

  1. A multithreaded client/server game room. Everything would be stored on a central server, which the user would log into using a username and password. They would have their own profile, keeping track of things like: games played, won, lost, maybe some user info, etc. This would also be a meeting area for players. Games would be stored on the server, which could be downloaded by the users and users could play against each other over the network. We would develop our own communication protocol and standard interface to make connecting to the server/network straightforward for game development. These would be fairly simple games (Chess, connect four, maybe a board game or something)

  2. A bittorrent client implemented in java possibly with an adobe flash or air frontend.

I'm really not sure how difficult either or these projects would be to implement, so if anyone has experience with either, comments would be great.

Also, any other suggestions would be nice. Since this is a semester long project I really don't want to get stuck doing something I absolutely hate, and I'd also like something that is going to be challenging but not impossible...

Thanks!

+3  A: 

My best suggestion is do something you're interested in, even if someone has already done it (and let's face it; they probably have for just about everything).

Don't do something so complex you get overwhelmed. The biggest motivator in your own projects is seeing results. The biggest motivator is the end being so far away you get demoralized.

So pick something simple that you can knock up in a few days. If that works out extend it. And keep extending it. As you see it get better and better, it'll be far easier to motivate yourself to continue.

Now that doesn't mean you can't pick something that won't take months to do. It just means that the progress has to be staggered as linearly as possible.

By this I mean, take a 3D graphics engine. I did some of that stuff years ago and one of the biggest problems is that it's the sort of thing where you have to write about 80-90% of the code before you see the first frame. That's hard to do.

Now take a simple database (not sexy I know). You could probably knock up some simple tables and indexes in a matter of days. But from there you can improve performance, add features, etc. There's nothing better than being able to spend a few days on something and demonstrably increasing its functionality and performance.

The best projects are made of many small steps not a few very large steps.

cletus
I think you meant "biggest demotivator" (2nd para, 3rd sentence).
gkrogers
A: 

I like option one, you probably only have time to do that kind of things while you are in the school, I think 4 people for four months is enough time, start by designing and get the documentation done and then build the basic features leave the bells and whistles for the end in order to adjust the project scope in case you have problems to finish it.

Have you think in a cell phone game using java technology...maybe you could sell it later ;)

Rulas
A: 

These projects you listed are waaaaay too big.

Shawn Simon
+1  A: 

My recommendation would be this: don't think about the idea at all. Think about what everyone's expertise is, how they work together, who is reliable and who is a slacker, etc., and figure out a project that fits that. Most undergraduate teams fail because they focused on an idea rather than on the actual competencies and work style.

When selecting class projects, it is important to think about how you guys will be working on it. For example, will you be working in pairs? Will each person work at a different time on the computers in the dorm room? Do you guys work a lot together, or are you just randomly assigned?

Student teams are rarely cohesive, and there is a lot of time loss as people try to coordinate a meeting despite wildly different schedules. Imagine one guy has a window from 4 to 8, and another has to go for a meeting from 6-7... You need a project that can be split into four parts on which each person can work independently.

This means you essentially need to take Conway's law into account. Conway's law essentially states that if you divide a project into several teams, the architecture of the system would reflect it. This can be a bane for some projects, but great for others (projects that are naturally decomposable).

Neither of the projects that you described can easily be split into four...

Also, you need to be extra careful to not be reinventing the wheel. There are popular high-quality libraries for some of the functionality that you're describing.

Feel free to contact me directly (see my profile for my contact info). If you tell me more about your skills and team, I may be able to help you choose or filter out project ideas.

Uri
I emailed you at the email on your website.
Wayne
+1  A: 

The only real problems I see with the project ideas you mention is that not many people have implemented either one, so you'll have trouble finding resources on either one.

I suggest you try something like a Web browser, an email client, or a C compiler. Sure, they've been done a million times before, but that actually works in your favor. You'll have tons of online resources to draw upon. Another advantage is that these are applications you'll have no trouble using while you develop them, and you'll learn a lot by implementing them.

Bill the Lizard
Even if you only write a front-end, a C compiler would be extremely difficult for four students to write in a semester with no compiler experience. I would imagine that a web browser would be just as hard, if not harder.
Jay Conrod
They would have to decide on the features they want to implement. They could compile C to Java byte code, or they could make a browser that renders plain HTML only (no CSS or Javascript support). Either one should be quite possible for four people in a semester.
Bill the Lizard
A: 

Just as an update:

I implemented something fairly similar to the first this summer (minus the database storing user info part, and the downloading the games from the server) So I have some experience with creating networked games and having them be located at a central location. Remember, I'm not talking about something amazing, just something that is functional and looks kind of pretty.

The second project was done by a guy I work with for the same class. He told us it was the most work he has ever done for a class and that we should probably steer clear of it. But at the same time, his group did it, so it is possible.

Wayne
+2  A: 

How about a 3D ray-tracer? The algorithm is fairly simple, so you can write a basic one in the first few weeks and then build more functionality into it as time allows. As the semester goes on, you can add more advanced stuff like textures or bump maps. You can improve the implementation by using multi-core or GPU acceleration. Working on a progressive project like this prevents you from ending up with something that's 95% written but 0% working at the end of the semester. It will also keep you interested.

Another benefit is that you will get beautiful visual results. This will guide you during your implementation, since you'll be able to see what's going wrong. It will make for an impressive final presentation as well.

Jay Conrod
A: 

A suggestion to get the team motivated: build something for the iPhone or Android. That way, you also get a ready audience for your software.

Btw, your Java BitTorrent client idea reminds me of Vuze.

Zach Scrivena
A: 

Hey All,

Just as sort of a random end of semester update on this...I'm working in the group with Wayne and we decided to do the Bittorrent Client. We ended up dividing our group of four into two teams consisting of two people each: One group for the backend and one group for the frontend.

I ended up working on the frontend and implemented it in Adobe Flex with a combination of BlazeDS, Java, Hibernate, mySQL, Tomcat, and a little bit of PHP. If anyone is interested in how we implemented this, feel free to ask. I may post a little guide on how this all came together this summer sometime.

Oh and btw, everything appears to be working so thats always good.

tkeE2036