71 karma · joined September 20, 2015
* I look at the readme if it exists
* I pull down the project and run any setup steps (install dependencies, start up database, etc).
* If there are tests, I try to get the tests to run (this may lead to additional setup)
* Once I get the tests to run, I make sure they are all passing
* If it's an application (as opposed to a library) I will get it up and running on my computer and play around with it as a user.
* Finally I will start scanning the source code - Starting with the main app, and digging down where it seems relevant.
* If I am looking for some specific functionality, I let that guide my perusal of the source, otherwise it's just looking at the major pieces - routes, views, models, etc. to get a feel for what the relevant parts of the app are.
They'll have a certain way they are checking a few cases (and maybe a couple tests), but they don't have the foresight to really try to break things. They will also make assumptions about how the code will be called, what entities will exist at that point, etc. that just don't hold in reality.
This typically manifests in code that works fine when they use it, and all the tests pass, but it breaks as soon as it gets up on the staging server, or as soon as somebody else tries to use it.
Also: Not listening to feedback from senior devs. Drastically underestimating the complexity of what they are working on.
In addition to the classes, I've been trying to use it to write small programs and whatnot.
While I can't use Haskell at work, I can say working with it more regularly has definitely improved the JavaScript code I write on the job.
The act of trying to build something that works is an incredible learning experience, and will teach you a lot about whether or not programming is something you should pursue.
Do you like solving problems? How stoked are you when you figure out the cause of your bug? Would you pursue it even if it wasn't lucrative?
Project Euler has some good puzzles, they are somewhat math related but cover a lot of interesting concepts and can be fun to work through.