Hacker School Day 2: 2/17/15
The day I discovered ^— this guy.
There’s some extremely choice books in here folks. Just to scratch the surface of some of the gems I’ve found in here:
- Compilers: Principles, Techniques, and Tools
- Pearls of Functional Algorithm Design
- Cryptography Engineering: Design Principles and Practical Applications
- Paradigms of Artificial Intelligence Programming: Case Studies in Common LISP
And that’s just the tip of the iceberg. I’m fairly certain that last night, and this is true, I had a dream that I walked over and all the books were basically gone.
I accomplished some of the things I wanted to. Finished up go-koans and learn go in x minutes, and started working through A Tour of Go. Also had an awesome Haskell workshop with Alan where we played around with the turtle library. Today I’ll be wrapping up some quick mobile additions to something I’ve been working on before I started HS, and will also be finishing up the Go tour and a few other go resources.
I had a few weird cases where I had no idea what go-koans was trying to have me do. Let’s look at this quick example.
I’m assuming that I had to push in prime numbers by calling findPrimeNumbers(ch) in aboutConcurrency. Something like:
I call that in aboutConcurrency but then I run into a deadlock. I’m assuming I’m suppose to call a go block here but I’m not sure how I’m suppose to wait so I don’t get a deadlock with no other information from the koan. Any ideas here folks? I have about a day worth of go experience at this point.
There was a point in the workshop where Haskell started to click, but then I maybe felt like I had no idea what I was talking about. Coming from Node.js and npm I was trying to wrap my head around the best way to start a project with Cabal.
Cabal is to Haskell as npm is to Node.js. After getting some tips, the proposed way to start up a new haskell project was basically:
cabal sandbox init
vim $PROJECT.cabal // to add dependencies
cabal install --only-dependencies
One thing I was hoping for that I could not find was the ability to have a `cabal install PACKAGE_NAME` automatically install the package into your sandbox and update your `$PROJECT.cabal` file. Is there anyway to do this?
I went digging on google but could not find any way. I found the `cabal list $SEARCH_TERM` command to search for packages that give you the latest version number.
Then I came across this little puppy, which helped clear things up a bit, but not really.
Next up I went and google “the proper way to start a haskell project” which led me to an awesome find with a lot of great outbound links that I’ll be digging into a bit more.
I guess my major critique with Haskell is it’s obsessive use of operator overloading (including infix operators). It’s the one thing I felt weird about with swift too. Coming back to a program, it’s incredibly hard to reason about exactly what something does when the operators are changing out underneath you.
Anybody have any comments on the above? Does it turn out to be a cool refreshing beverage after getting more use to the language?