views:

218

answers:

10

Hey guys this question might seem very specific but I am in need of some ideas for a project to do for my last month or so in my AP Computer Science class. I've been looking at some college final ideas and a lot of them just seem plain boring. At first I thought about writing a IRC client in JAVA but I wouldn't really be learning anything "new" that would help me in the future. Then I thought about doing IPhone/touch apps (I don't have an adroid phone and I can easily get my hands on an itouch) but I would need ideas to make apps for that.

I want to do something that is going to feel trivial and need some explanation but will also help me in the long run learning new concepts in computer science. If you guys could help out I would greatly appreciate it. I really only have a month to do this project so try to keep the project inside of that range. Also, I don't mind learning new languages.

Thanks :)

Edit: My main programming language is JAVA since I've been using it for the past year and a half. I also know C++ (very little) and PHP (fairly well).

+1  A: 

An IRC app probably would actually teach you several new things, most of which would be helpful later on, like standards, specs, networking, threading, etc. but it would take a lot more than a month.

What language(s) do you know now? If you know Java, and now how to do a GUI, then you could try writing a game. Tic-tac-toe would be fairly simple, you could do it in a month, and, to spice it up, have an AI play against you, or have human vs. human, a choice between the two.

That way, you'd learn about different data structures, enforcing game rules, at least some optimization, and, if done right, creating your own API, allowing a human to control via one set of input (the GUI) and the AI via another (decision making, no GUI)

Slokun
I have mainly been using JAVA for the past year and a half but I do have experience in C++. I also know PHP fairly well.
zamN
I'm either going to pursue the IRC client or Tic Tac Toe for this project. Thanks for the help :)
zamN
A: 

Once we had to do an application that allowed users to view short clips. Once that the clip has been played, the application displays a list of clips from which the viewers could choose (by voting through SMS) which clip to view next. We did the whole deal in Java. You might also want to include a database that stores clips and maybe even users and manage the database through Hibernate. We used SMS Lib to allow SMS capability to the application.

npinti
A: 

We did the game Battleship for a freshman college programming class. The benefits are similar to what Slokun mentioned, but you can really go crazy with AI in Battleship. Or if you want to go the UI route you could spend a lot of time here as well. And at a core, it's really not that difficult of a problem to keep track of game details.

Kyle
I tried Pacman... it was ridiculously funny because the first few versions had very efficient ghosts that hunted you down and cornered you. :)
Mayo
A: 

Rather than do a small project from scratch, you might consider contributing a useful feature to some open source project. That way you won't be spending so much of your time on just building basic infrastructure.

Christopher Barber
My teacher wants us to do these project on our own so open source would be a no-go but I do want to contribute to open source during my summer (after june) when I have nothing better to do! :)
zamN
Who says you cannot add a feature to an open source project "on your own"? Is it really that your teacher doesn't want you to build on an existing code base or that he/she just wants to know you did all of the work? If the latter, you could still go open source as long as you can demonstrate your check-ins are your own work. Building on existing projects is common in college and graduate work, so I don't wee why it would be excluded in your case.
Christopher Barber
A: 

Checkers might be fun and you could add in an AI element to it since it's simple enough to make a complete decision tree.

brian
A: 

Introducing the class to interesting public APIs (like having them create a twitter client or a weather app) would help them immensely in the real world.

brian
A: 

Perhaps a mini database server. Key/value store, with threads and a network socket. There are a lot of interesting twists you can do here (caching, concurrency, how to store on disk, how to survive a crash). By keeping it key/value you're keeping the complexity relatively low.

Yann Ramin
+1  A: 

I think that the most "complete" kind of software you can make, and learn a lot, is a game. Games use a lot of computer science areas, like network, storage, database, graphics, threads, math, physics, AI and so on. Even a simple network game will require you to cover many areas, so I think it's worth trying it.

eMgz
+1  A: 

Here's a bit of a zany one, but who knows: go functional! Maybe take something like Haskell and do up a quick project, maybe an interpreter for a simple language.

There are numerous tutorials and books online. Write Yourself a Scheme in 48 Hours is pretty efficient. Combine that with some lessons from Real World Haskell and I don't think learning an entirely new programming paradigm AND getting a useful program out of it in one month is impossible.

Advantages here? One, you'll learn a totally new way of programming, the functional style. A lot of advocates say it will really open your mind to new programming ideas, and I think Haskell definitely opened my eyes to some new concepts. Two, you'll learn a lot about lexing and parsing, and the general first steps into how a computer language works. Three, come on, how cool of a project is that! You write your own language and interpreter for it!

CodexArcanum
A: 

Although not as excited as some of the game ideas, there are several things you could build that are highly relevant in todays IT world, would lead you to learn things that are valuable, and can be accomplished to varying degrees in the time-frame/Languages you suggested.

  • Simple Message Broker (Ex. Xml/B2B Purchase Order Exchange)
  • Simple Message Bus (Ex. Publish/Subcribe, could use this to send your IRC messages)
  • Distributed Store (Ex. Cache, Hashtable, Data-Grid, etc),
  • 'Durable' Point-To-Point Queue
  • Simple Case Management System (Ex. CRM)
JoeGeeky