4 ms·
Ask HN: Working on a Project to Learn
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.
- sidmitra 17y agoYou 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 17y agoAlright, thank you for the input. I'll take it into consideration.
- Freebytes 17y agoMy 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?
- icey 17y agoI would suggest finding an open source project you like and contributing to it.
- stefano 17y agoWrite an interpreter/compiler for your own little language. With your own garbage collector.
- dadoes 17y agoHeh, that's an awesome suggestion. Do you have any resources that would be best for this? Probably the Dragon Book?
- stefano 17y agoI found this to be a great introduction on how to write a compiler: http://www.cs.indiana.edu/~aghuloum/compilers-tutorial-2006-09-16.pdf http://www.cs.indiana.edu/~aghuloum/compilers-tutorial-2006-... 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-453.pdf http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-... 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 17y agoHmm, 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.