Intro to Haskell

     I decided over the last month or so that I didn't want to be a sysadmin, web programmer, or commercial Java/C coder. I came to the devastating realization that I wanted to participate in research and development and had no desire to create cutting-edge web-apps for 21st century insurance (insert boring field here) companies seeking new markets.

     In particular, I want to work on pushing the limits of AI. This was a very liberating realization in one way and terrifying in another. It meant I was free to devote my mind entirely to an elegant no-compromise language like Haskell or OCaml or Prolog etc. It also meant I would probably die broke or in-debt and would not get to enjoy the hedonistic retirement of my dreams. The reason I chose Haskell is simple: If I'm going to redefine the limits of AI, then (by definition) there are no currently-known or established methodoligies or programming frameworks that I must employ to achieve that goal. Therefore, I am free to choose my lingua franca based entirely on it's features as a language for expressing AI; Haskell seems to be ideally suited for pushing the boundaries of AI and many other programming paradigms. Thankfully, I'm still young enough to switch languages entirely (from my Python, C++, HTML/CSS background). I haven't advanced to mastery of any of those languages yet (not even close), so there's still plenty of time to ingrain FP best-practices into my fingertips.

     I'm in the very very early stages of the transition right now (summer 2012). My hard-won study techniques involve writing my discoveries out in a way that will be easy to read to my out-of-practice future self. This technique is sort of the thing that blogs were made for. So, you can follow my progress (or not) as I attempt to write a tutorial for Haskell while simultaneously learning Haskell for the first-time. Teaching a difficult subject is the best way to cultivate mastery in it. So, this is really a sort of experiment on my part to push the boundaries of self-education through the jounalistic method; as opposed to the traditional read, practice, memorize approach.

     Sure, there's bound to be all sorts of mistakes and misunderstandings throughout the tutorial. But, as an experienced proffessional technical writer, I've learned that this isn't always a bad thing. A major part of what we see as subject-mastery comes from observing how the master has apparently internalized the behaviour of the subject she steadies in a non-verbal way. This allows for very efficient action on the part of the master as well as the creation of a database of short-cuts that she can then use to help the novice to the next-level. It also means that a big part of what the master does is non-verbal. Non-verbal knowledge is difficult to write-out. If you don't believe me (and you're a guitarist), go to your local guitar-store and buy an instructional video from your favorite shredder. Sure you may learn a thing or two, but you will mostly be left with a sense of awe and a lingering feeling of hopelessness as you realize that your idol wasn't really able to impart that technique he/she employs to such spectacular effect.

     The truth is that, when it comes to didactic literature, method is the only teacher. That is to say, a good method is one that shows you how to accomplish a task from the point of view of the student, and NOT the master. Actually, in many cases the student is more aware of the challenges she faces then the master; mainly because those days are years or even decades past in the master's mind and as such, obscured by cobwebs. I have found that many of the best pieces I have written (technical or otherwise) were executed during my own learning process, while the 'iron' of my mind 'is still hot'. Then, when I gain a new more clear understanding of the processes at work, I can always go back and change what's been written; all the while being careful not to destroy the delicate and often tricky observations of my previous-self: the neophyte.

     So, check the Labels column on the right side of the page for articles which are tagged 'Intro to Haskell'. I'm starting from the ground up, misunderstandings and all; for all the world of Haskell to criticize and make fun of. If I'm particularly unlucky I will get some major concepts flat-wrong and confuse some people in the early stages of my progress through Haskell. However, if I'm lucky, I might finally bring a sorely-needed book into the world: An Introduction to Programming with Haskell. Of course, it's offered here for free, so there's no contract or obligation on my part. But, chances are that if I make some headway in my attempt to understand Haskell, you the reader will too!



   

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.