

Ask HN: Working on a Project to Learn - dadoes

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!<p>Edit: Like I said, I am open to suggestions and have no preference in regards to web apps or anything else.
======
sidmitra
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.

~~~
dadoes
Alright, thank you for the input. I'll take it into consideration.

------
Freebytes
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?

~~~
dadoes
Hmm, I can't seem to see the email in your profile.

~~~
Freebytes
Oh, sorry. Please check again. It is in the About section. You need to convert
it from hex to ascii to see it.

------
stefano
Write an interpreter/compiler for your own little language. With your own
garbage collector.

~~~
dadoes
Heh, that's an awesome suggestion. Do you have any resources that would be
best for this? Probably the Dragon Book?

~~~
stefano
I found this to be a great introduction on how to write a compiler:
[http://www.cs.indiana.edu/~aghuloum/compilers-
tutorial-2006-...](http://www.cs.indiana.edu/~aghuloum/compilers-
tutorial-2006-09-16.pdf)

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 ;)

Another interesting read is [http://repository.readscheme.org/ftp/papers/ai-
lab-pubs/AIM-...](http://repository.readscheme.org/ftp/papers/ai-lab-
pubs/AIM-453.pdf)

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.

~~~
dadoes
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.

------
icey
I would suggest finding an open source project you like and contributing to
it.

