3 ms·
Some concrete things you can do to learn, just based on what I've found enjoyable and worthwhile: Solve some Project Euler problems, then read other solutions
by mbrubeck 17y ago
Some concrete things you can do to learn, just based on what I've found enjoyable and worthwhile:
Solve some Project Euler problems, then read other solutions in the forums and try to implement some of the algorithms and optimizations you find there. This will force you to learn some basic algorithms and some math, and expose you to a wide variety of concepts and techniques. (Yes, I am constantly pimping this on HN.) http://projecteuler.net/ http://projecteuler.net/
Learn a new programming language or two every year. By learning extremely different languages (C, Lisp, Haskell, Io, Forth, Mercury, J...) you'll learn to think in a lot of different ways. But even before that, just translating what you know into a different context will help force you to learn the names and underlying forms of most of the fundamental building blocks: data structures, closures, higher-order functions, polymorphism...
http://learnyouahaskell.com/ http://learnyouahaskell.com/
Read research papers related to your field. When you don't understand something, follow the citations or look it up in Wikipedia. If you don't know what to read, start at ACM Queue and see what's interesting. Then branch out into other publications.
http://queue.acm.org/ http://queue.acm.org/
Watch lectures from MIT OpenCourseWare, especially 6.001 (Structure and Interpretation of Computer Programs, taught by the authors). Among other things, you'll learn how to build a simple interpreter and compiler. http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/ http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Compute...
- dannyr 17y agoProject Euler looks good. I actually prefer solving problems rather than reading alone. I'm coming from a .Net background where a lot of things are abstracted from you. I haven't done low-level languages for a long time. I guess it's time to do it.
- deleted 17y ago[deleted]
- kuszi 17y agothere is one disadventage: you can not compare the memory usage/runtime of your code to others. Try SPOJ (Sphere Online Judge) it supports also C# if you like.