Hey HN, I am currently an undergraduate in CS and I have a bit of free time that I'd like to spend programming something. I learn best by working on some kind of project but don't know what to program. I'm not looking for a "resume builder" but if I could say "I made this for fun in my spare time and learned a ton" that would be a bonus. I am open to suggestions regarding language and platform.
So HN, let me hear your ideas of what I can work on so I can learn!
Edit: Like I said, I am open to suggestions and have no preference in regards to web apps or anything else.
You don't mention what type of applications you're interested in, Web apps or something else.
The most fun programming i ever did was for my Digital Image Processing class, mainly because the output was so visual. You might try something visual, graphics(a game perhaps), image processing(non photo realistic rendering of a pic).... you get the picture :-)
Edit: you might even do some visualization of data, using processing.js for example. This would not require much time and you can even share them as a web app.
My email address is in my profile if you want to email me. What languages do you know? Are you interested in web based projects? What other projects have you been doing? What other experience (besides programming) do you have?
It starts with a compiler for a language that only accepts integers and gradually extends it to support complex expressions, functions, closures, conditionals etc. Since the compiler is written in scheme and the target language has a lispy syntax, it completely skips the parsing step (using scheme's builtin reader). I really enjoyed this fact, since I find parsing to be the most boring part of a compiler. The fun comes after ;)
My first language implementation was an interpreter (interpreters are easier to write, although compilers are more satisfing when you start to benchmark the speed of the generated programs) written in C for a dialect of lisp. I chose lisp because it was easier to parse. The program was converted in an AST (abstract syntax tree) that was then directly evaluated. At first, there was no GC, no support for direct recursion, no closures etc. I started with something small and easy to implement and then incrementally extended it.
Golden rule when writing your first language implementation: keep your language simple. Keep the implementation straightforward to understand, even if it means that it is slow. Don't bother adding support for debugging or meaningful error messages. You can add those things later after you've grasped better how an interpreter/compiler works.
Hmm, that's interesting. The first example doesn't seem to work. I just get "#<unknown 0x00000007>". I wonder if it has to do with a difference with gcc.
Edit: Like I said, I am open to suggestions and have no preference in regards to web apps or anything else.