Rule 2 local copies and one in a different location (two for coding)
Tools: 1 local server (OpenSUSE), CrashPlan and git
The more I learn to program the more I hate loops.
The more I program, the less I care about tail calls.
Have to say I have been in the learn a new language phase and Scala keeps coming up everywhere. Right now Racket is my new main language to learn. Love it and I am thinking Scala would be a nice next step.
I have found that Racket was the programming language for me to self-learn functional programming. I tried other languages but Racket just seems to click with my thinking.
Hi, I’ve been teaching people Haskell for a couple years and I’m writing a book for teaching beginners Haskell with my coauthor Julie, who’d never programmed before learning Haskell.
I’ve been steering people away from LYAH for learning Haskell for quite some time now. We have better resources now. I already knew LYAH was problematic at the time, but my coauthor tried learning with LYAH and found it extremely frustrating and unfruitful. LYAH doesn’t work well for people that already know how to program either.
I explain some of this in my post about resources for learning Haskell.
What I do recommend is outlined in my guide.
There are certainly other excellent resources, but IMO LYAH is a fine book that I would recommend to anyone interested in learning Haskell.
This post is probably going to say more about me than I would like, but…
LYAH was actually the first book about Haskell that made Haskell approachable for me, in that it starts off nice and slow and takes its time to explain things. It doesn’t go off into la-la land like so many other Haskell resources (even those targeted at beginners). I’ve tried getting into Haskell with a beginner’s tutorial a couple of times over the years and this time with LYAH is the first time it makes sense and doesn’t have me cursing “Why? WHY? WHYYYYY?”.
This is not coming from a total newbie to programming. Not that I am very good, but I’ve been coding since I was 10 (I’m 41 now) starting with Basic, m68k assembly, C, C++, C#, Java, Perl, Python, Scheme and, my favourite, Common Lisp. There’s probably some more languages I’ve done, but in the former I’ve done some serious work. There’s a definite slant in the kind of languages I’ve used though.
I do not know why LYAH is so divisive, but I do know there’s different ways in how people learn. I’m mostly self-taught and I mostly learn by doing but for some reason LYAH’s way of talking & demoing at the reader and having the reader type in the REPL works well for me. I won’t pretend I know Haskell well now but LYAH has definitely made it easier for me to pick up resources that would have turned me away earlier.
Anyway, as an introduction to Haskell it seems fine. (And, yes, I have checked out bitemyapp’s resources in the past.)
My first attempt to learn Haskell was with LYAH and was not successful. The lack of exercices was quite problematic for my way of learning things and I learned a lot more going through exercism.io exercices at the time. But LYAH is not a bad book, the type what the author types way of learning is just not for me.
Then I discovered Chris (bitemyapp) guide which helped me tremendously with a really good learning path and a lot of more advanced resources.
Also what I’ve read from Chris & Julie’s upcoming book (http://haskellbook.com) is really good and you should get it :)
I got to meet bitemyapp at lambdaconf this month, hi bitemyapp! and I cannot agree.
Don’t get me wrong, that sun saying holy shit is a great invitation to haskell, but as far as useful information from the book, I can’t say I got a good amount out of it. I preordered bitemyapps’s book on teaching haskell and was really amused to start out doing lambda calculus problems.
I know that seems crazy but its the exact thing that helped me understand Haskell. LYAH is ok for a start, but I consider it at best a toe dip into the waters of functional programming. The biggest problem with LYAH, and almost every resource I can find, is that you aren’t given exercises to do.
That might seem contrived but learning how to program in a functional context isn’t something you can do by osmosis. You have to do it, teach a man to fish and all that. I don’t see a shortcut in this regard. LYAH exposes you to haskell, that is about it really. Understanding it is another matter.
LYAH is a fine book that I would recommend to anyone interested in learning Haskell.
Having run a lot of people through the process, I would not. There are a lot of options other than the core recommendation of cis194 -> NICTA Course I give people that would be better than LYAH. I explain those in the linked post.
cis194 -> NICTA Course
I’ve been witness to a lot of people burning out and giving up on learning Haskell, most of this was entirely unnecessary and because they were pointed to resources that didn’t work well. Nobody tests anything or really even cares if their recommendations are sound, let alone ideal.
If you learned Haskell from LYAH, I have news for you - you didn’t learn Haskell from LYAH. You were shown some code and then given over to the tender mercies of whatever blog posts you could find to explain things properly when something didn’t make sense.
There’s a natural tendency to apply redaction to the narrative of how we learned something and it must be resisted. We should examine how we actually learned things, when they actually made sense, and test methods of teaching material so that we can learn what really works well.
People need exercises to learn a programming language and LYAH has none. I have a lot more reasons (and an “n” much higher than 1) for steering people away from LYAH but this is the simplest and most grave objection I can present.
I’m not asking everyone else to care as much as I do about making Haskell less fearful and difficult-seeming, but I would ask that you consider why so many people have given up in the past.
There has always been a couple of reasons why I didn’t like LYAH. I tried learning from it a few months back and it really took me a month to even get through the first 12 chapters. I gave up after that because I found that the book was no longer helping me learn anything, mostly for the following reasons:
One of my criticism for learn you a haskell is that it tries so hard to be a dialogue that it loses the fact that a reference style of education has lots of value too. I wanted some way to compare type, newtype, datatype, class, and instance without having to have 5 pages open. A table or venn diagram would have been amazing but the format of the book tried to step so far away from that. There was no good valuable visualization either and i eventually chose to block them from my readings because they really didnt serve a purpose other than distraction.
Then I had sections like where I was introduced to the Data.List package which was just a dump of information that I wasnt supe how to really digest. Do I memorize this? Do I skim this?
Finally, i think what really hurt me was than there was no recap or chapter summary. I kind of just read, finish, and move on. I eventually really enjoyed Haskell but I realize that the de facto LYAH really isnt a good recommendation and would not recommend it to others in the future.
I really hope that there will be some book that is a dialogue for explaining the concepts but also a quick reference guide as well. I think some combination would really make such a material amazing.
I really hope that there will be some book that is a dialogue for explaining the concepts but also a quick reference guide as well. I think some combination would really make such a material amazing.
My coauthor wants to make a “pocket guide” counterpart to our main book, incidentally. I’ll share your comment with her :)
I think I honestly learned the most from just hanging out on the irc channel and asking (and answering!) questions. That and, as with everything, the documentation.
I did not find LYAH but have been more frustrated by it.
I am trying to learn more about functional programming and ended up finding Racket and ML to have clicked with me more than Haskel. Also I find cabal to be a nightmare in just my few months trying to use it.
One issue is Native looks and feels Web. Looking straight at the text editor Atom. It uses a lot of web hacks (Almost all of the web is just one giant hack IMHO) and feels slow and laggy. It is also more resource hungry than it should.
As a counter-example, Visual Studio Code is built on the same framework as Atom (Electron, formerly Atom Shell) yet performs quite well even on large files.
My personal theory is that GitHub just lacks expertise in building editors/IDEs, and that a company with that expertise won’t be inhibited by using web technologies.
See also GitHub Gui (Oh no he didn’t!). I’m actually a fan of it on Windows and Mac, but by golly it does have some hairbrained behaviour :) A classic example is not being able to edit text at all, so if I want to edit one line I have to go back to the IDE first. That then triggers an “auto refresh” in GitHub gui when I switch back to it which may change my current commit slightly so you have to then check your commit again before confirming it. On a similar note you can’t revert a single line easily, you have to commit all the lines you actually did want first, and then revert the file.
I hate to be the guy sort of putting down an article with the title “Be Kind”. So right here at the top, yes, be kind! That said, this person appears to have swung from one extreme to the other. Neither one being healthy.
I was just callously indifferent
Yep, being callously indifferent isn’t healthy or normal – even work “families” require some level of personal investment and understanding.
But believing deeply that I am responsible for how I make others feel…
Now he went to the other extreme, he is putting forth that he is responsible (in control of) how other people feel. That is IMHO, worse than being callously indifferent. At least when callously indifferent you view the other person as an equal. When you believe you can control someones emotional state, you are stripping that person of agency, dehumanizing them.
There is a middle ground between being “indifferent” to peoples emotions and believing you are in control of them. Maybe he is someone who isn’t great at working in the “gray area” so this is a useful model for him.
being callously indifferent isn’t healthy or normal – even work “families” require some level of personal investment and understanding.
You’d be amazed how long it takes some people to learn this. Many people never do–I would put it down to bad people management, which is absolutely endemic in the industry.
Now he went to the other extreme, he is putting forth that he is responsible (in control of) how other people feel.
“Responsible for” and “in control of” are not synonymous. I’m responsible for my team’s productivity, but I don’t directly control how they do their jobs. I mentor, I coach, I help make decisions, I try to identify the reasons for success and failure, but I’m absolutely reliant on the team to manage their own day-to-day tasks.
“Responsible for” and “in control of” are not synonymous.
One is required for the other. Without control, being responsible for something is nonsensical. You can’t control the weather, hence I can’t get mad at you if it happens to be too hot out today! You can try to be a good person, but you can’t control how others will feel, and to think you can diminishes them and aggrandizes you.
I’m responsible for my team’s productivity, but I don’t directly control how they do their jobs.
Sure you do. You choose not to use that control to micro-manage, but MANY managers DO love micro-managing, having direct control over how employees do their job. Additionally, you have control over WHO is doing that job – you can FIRE people who can’t be “controlled”. If an employee you had opened up every file and just typed “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA” in it all day – you might not be able to ever force that person to stop – but you WOULD fire them and replace them with someone you could “control”.
If you couldn’t fire your “I only type A’s” employee, and you were fired for his ineptitude, then you would be responsible without control, which would be terribly unfair.
I think the author probably meant something closer to “I am responsible for both the intended and the unintended impact of my behavior on the feelings and well-being of others”.
Maybe he did, but how does that make it better? I hope it was just a poorly written idea and he actually isn’t so arrogant or misguided to believe he controls others feelings.
Do you agree that to be responsible and accountable for something you have to be in control of it? Do you agree that me holding you accountable for things you have no control over would be both illogical and immoral? This idea of “being responsible for other peoples feelings” is toxic on both sides of the coin.
From the POV of the person who believes they can control others “feelings”: Believing you can control others emotional response is dehumanizing, it strips people of agency. Imagine for a moment if you actually COULD control other peoples feelings rather than just your actions, imagine the control you would wield over them, and in turn the level of responsibility that would go with it (Great power, great responsibility, etc) . Luckily, it is profoundly untrue, we decide how we process input and respond to events, we control our own emotions.
From the POV of the person who believes they can’t control their own “feelings”: Believing you can’t control your own emotional response is exceptionally dangerous thinking. Stalkers often believe that the victim is “responsible” for making them fall in love with the victim, and consider stalking a logical response. Domestic violence abusers often think the victim is “responsible” for making them angry, “Why do you make me hit you?”… lots of vile things are justified using this logic.
No matter how you slice it – believing Human A is responsible for the feelings of Human B is unhealthy. You control your actions, not how people respond to them, so just try to do the right thing according to the only mind you can know, your own. You are not responsible for (nor in control of) other peoples emotions, and they are not responsible for (nor in control of) yours.
I don’t think what you’re working from represents my beliefs or my proposed interpretation of the author’s beliefs.
I don’t think anybody intends to suggest stripping the agency from others. It’s clearly arrogant at best and insane at worst.
Instead, we’re talking about the operations of “civilization” as a technical concept—self-domestication, really. We are not at rights to do all that we might wish to because it is common knowledge that doing certain things does cause damage to others. We therefore collectively agree—implicitly and as a child, really, and the validity of mechanism here is something that could perhaps be debated, but its existence cannot be—that we will operate under certain rules and boundaries. The existence of these rules and boundaries allows us to feel safer around one another and operate more smoothly. Without them we would be forced to protect our own more clearly to the great detriment of society.
So Civilization means that we all operate under an implicit compact about what behavior is OK and we all agree to not build defenses against these things. And by “agree”, importantly, I clearly don’t mean that there’s a written contract somewhere. The exact notions of Civilization are vague and shifting and, importantly again, may be different in subgroups as they are from the population as a whole.
For instance, the compact says it’s alright to hug your close friends and family but not strangers. If you try to hug random strangers they may act violently toward it because they have established and maintained a defense to physical contact from strangers.
Anyway, long tangent aside, you obviously are not responsible for the feelings of others in the sense that you obviously do not have control over them. I agree with you completely here.
But you are responsible for the compact of Civilization and even the tiny variations which may exist in pockets of society like your workplace. If you violate this compact and thus cause harm to those around you—and yes, it was their choice to be open to this harm—then you are responsible for that.
And frankly, as demonstrated in this article, the typical way that Civilization accounts for those who persistently fail the compact is that it kicks them out.
[If this idea is interesting to you or seems copacetic to things that you feel or believe, then I highly recommend the following article by Kevin Simler. I feel I had some grasp for these ideas far before reading it, but the vocabulary and imagery developed really sticks with me in a great way: http://www.meltingasphalt.com/personhood-a-game-for-two-or-more-players/]
A responsibility to the social contract makes a lot more sense than a responsibility for others emotions. You control adhering to the social contract, hence can be responsible for it. Breaking the social contract can cause you to be judged regardless of if harm was imparted to anyone. Additionally, as you mentioned, it varies from place to place. I spent around a year in a half working on a tiny team building software in which bugs == dead human beings. His new watch words might be “Be Kind”, my teams was “Be Right”. The social contract on that team was all about brutal, unsparing honesty – both on the giving and receiving end.
My point (initially, all the way up there at the top) was that being “callously indifferent” and “emotionally manipulative” are the acts of the same underlying personality quarks. One is just significantly more effective, there is a reason we see so many sociopaths as top tier CEOs.
Also, the article was worth it just for the pictures but I didn’t really gain a new appreciation for anything, mostly basic social norms type stuff – I like the bit about the only way to make civilized people is with civilized people – the process oriented approach.
I think you’re essentially correct robots the difference between two kinds of social contracts, but I am unsure I can follow your assertion that one is strictly better than the other. I think it’s an incredibly complex question.
And ultimately, when it’s all said and done, this is what the story is about. A misunderstanding of the social contract led to unintentional damage to coworkers. The author was then asked to normalize.
I have been a manager for years in non-IT positions. The environment of the workplace was my responsibility and I for certain had control over the kind of environment I cultivated.
I am not a manager now (Gladly) but I am still responsible for how I make people feel about me. If I am not friendly or approachable than most people will feel I am not friendly nor approachable. I also go out of my way to help co-workers to complete their task that are not my responsibility. So people will feel like I am a team player. If people are behind in their own work they will not feel like I will criticize them, but I am there to help them out.
I strongly support what this article presented. and passed it on to my non-profit company’s upper management who has than sent it out to the rest of the management team. It is very important to understand that you have the ability to make people have a emotional response when they see you.
Well, we simply disagree than, I think your delusions of control over other peoples emotions is just that – a delusion, and harmful one at that. That said I hope you still try to be a good person, friendly and approachable, but not out of some odd idea that you can control how others feel. I have worked in large enough organizations to know that every action you take will likely make one person like you and one person hate you.
friendly or approachable
“Always talking with people, chatting, bullshitting… never working.”
I also go out of my way to help co-workers to complete their task that are not my responsibility.
“That guy props up these useless engineers, the reason they don’t get fired and replaced with decent engineers is that this guy is always propping them up, so everyone else has to do more work” <– this is a REAL problem in many organizations, hidden bad actors.
Just – anything you do is likely to make someone unhappy – that is life. Just be the person YOU think you should be.
It still seems like there has to be a way for containers to run in user space and not root. This is the main reason why I still run virtual machines.
I seriously want a container system for desktop but it can’t run as root.
WOW! I have died and hell has frozen over!
A developer tool for Linux and it works very well on my OpenSUSE box :)
Well actually I have always been a Microsoft indifferent and Anti-Apple biased.
Same here lol. I want vim keybindings though.
Next step will be for Microsoft to actually open source their code and make a Linux version. I would love to see Windows XV being Apache licensed. Hell I might even use it! …I mean Windows XV, not this funny looking code editor.
I am not a fan of BSD license for operating systems. I think the license difference over the years has always held back the project.
Having used BSD with my NAS I find it a great and stable OS and I liked the file structure of the system.
I still prefer Linux’s ecco-system. I have options to be as open sourced or pragmatic as I want with much more resources.
Why do you feel that a more open license hurts a software project, specifically an operating system?
It isn’t the Open License hurts BSD it is the BSD license is not open enough. The GPL and making any modifications MUST be shared is a better model for an OS than the BSD where you don’t have to share any modifications you do make.
Are you aware of a major vendor that withholds their modifications to one of the BSDs, which it would have been required to release under GPL?
On the contrary, Netflix seems to be doing just fine — they’ve even been employing full time one of the FreeBSD guys through Nginx, Inc. to specifically hack on nginx and FreeBSD, and my understanding is that they seem to be releasing all the FreeBSD parts rather promptly.
Even Oracle, the evil overlord of all evil overlords, has been releasing patches to pf(4) for quite a number of months now, even before it was noticed and reported by Peter.
Also on the contrary, during it’s useful-to-me life time, I still haven’t received any source code for my ZyXEL NBG4615, no matter how many times I’ve emailed ZyXEL, or even followed their official contact form, specifically for source code requests. Their general counsel seems to have provided a dropbox link or whatever, but it wasn’t convenient to me, and I haven’t heard from them since.
They release some chunks under the Darwin project. But it’s certainly not complete. I challenge you to try building it and running it.
Yeah, Darwin is essentially dead. There’s no Darwin OS anymore. Apple killed it quietly.
“More open” is a matter of perspective, just like “more free”. It’s a give-and-take with openness and freedom. Non-copyleft licenses being more open/free for proprietary developers means that the resulting software can be less open/free for users. Where one group gains freedom, another loses it.
It’s difficult to really pinpoint why Linux has all of the device drivers and OpenBSD doesn’t. It may be due to the GPL, but then again, Linux has decided to not enforce the GPL for nvidia drivers, and I don’t know of instances in which Linux’s copyleft convinced companies to provide drivers they would not have otherwise given.
The alternative explanation may be due to how OpenBSD refuses to accept drivers under NDAs and that Linux got popular during the initial years when the BSDs were fighting a lawsuit against AT&T. I don’t think anyone is making OpenBSD drivers whose source they refuse to disclose, other than perhaps nvidia.
It’s difficult to really pinpoint why Linux has all of the device drivers and OpenBSD doesn’t.
Not really. Look at how many of the Linux drivers are written and maintained by the companies that produce the hardware. Intel, Broadcom, Nvidia, etc. have Linux developers in their employ. There is code in the Linux kernel to support new Intel hardware before the hardware is even commercially available. Companies like RedHat make lots of money selling Linux, so they can afford to pay developers to work on Linux all day. Certainly Android being based off of Linux helped a lot, since those hardware vendors had to start developing Linux drivers.
There are not many companies making money off of OpenBSD (or at least, not making enough to hire developers to dedicate to it) so most of the work is done by volunteers. It’s a much smaller group of developers, which means less support and advocacy, which means less users, which turn into fewer developers, and so on.
Yes, I meant, it’s difficult to really pinpoint why this happened for Linux and not for some BSD kernel. Why did everyone start writing drivers for Linux? It’s clear many are doing it now, but how did the whole thing snowball?
Legal issues with the BSDs at the time, and GNU/Linux users are fairly zealous.
I am learning Haskel for the sole purpose of learning Functional Programing.
Cabal and the lack of pathing when I install Haskell on Linux and Windows is strange.
That Cabal fails so often. I really have a sour taste in my mouth and I am thinking I should just learn scheme.
I find GIT commands and its use to be dead on spot easy. If it isn’t easy on cli then the GUIs are really good also. If still have issues I can be the jerk and ask why are you using GIT? is there a use case for someone who doesn’t get GIT and needs a hand holding system like gitless that GUIs don’t already do?
From the paper I found it interesting as an attempt to design a set of VCS concepts, w/ associated nouns/verbs, that are sufficiently powerful but fairly simple and orthogonal. From that perspective the implementation on top of git is more of an interoperability thing, vs. designing your own repo format and trying to get people to use that. The website, though, pushes it more as a git front-end, so it’s a bit ambiguous what angle they’re going for.
I find GIT commands and its use to be dead on spot easy.
There are lots of people who disagree.
As for GUIs, the git GUIs I’ve seen are terrible - they’re either simple, but the abstractions are far too leaky (e.g. Github for X), or they expose every option in a way that’s just as complex as the CLI tools (e.g. gitk, SmartGit).
I use the Mac-only GUI Tower, and I love it. It is in the “expose every option” category of GUIs, but I still find it easier to use than the command-line.
Tower’s file diff viewer lets me stage only part of a changed file more easily than the command-line’s git add -i. While git status shows a staged file moving to a separate list, Tower just checks a checkbox next to the file, which I find easier to interpret. Unlike git status, Tower shows when you are in the middle of resolving a merge conflict, and lays out your options to resolve it or abort. And when you switch branches while you have uncommited changes, Tower offers to auto-stash the changes, instead of stopping with an error and making you do it yourself.
git add -i
Tower also simplifies the command-line interface by letting you choose what to interact with by clicking on it, instead of having to type out its full identifier. I can rename a branch just by choosing Rename from its right-click menu and editing the text field, rather than remembering the name of the branch, typing its old name, and and then typing its new name. Or I can rebase changes from master into a feature branch by opening the Rebase panel and hitting Return to accept master, which is selected by default, rather than typing git rebase master.
git rebase master
With all these conveniences, and the extra guidance of seeing what I am working with, I don’t miss the command-line at all.
So…. I have been planning on learning a functional language for this reason. My choice is scheme.
I was going Haskell than the idea that maybe go for something a little more “practicle” so I like doing things in R so I though Scala, but it is FP and OOP. Looked back at Haskell and just decided it is to big for my #1 purpose which is to change my thinking. MIT lessons on video from the 1980s and great books like Little Schemer and we I think I made the right choice.
I came to Haskell from Clojure, Lisp, & Scheme. I went through SICP long before I ever learned Haskell.
You’ll miss out on a lot if you don’t learn Haskell.
So if you could jump back in time what would you tell yourself to do to save yourself time in changing your thinking? Would you skip scheme and clojure? Would you do Scheme all over again and jump to Haskell?
I’d tell myself to learn PL, type theory, ML, Haskell, and category theory.
Well you cost me an hour of my life :P Thanks for the info and ML looks like it actually would be a great learning experience BUT it looks like the tools for learning the language are very limited.
Also when you say PL are you talking old school IBM language that caused me to lose my hair when I was 21 years old since we had to interface the IBM mainframe with 3 VAC and 100 mac on tolkin rings!!!!! That both leads quit the week I started working and I became the new lead! Thanks for me reviving my old ulcers!
Errr, I mostly just teach people Haskell and it’s what I use for my work. You asked what I would tell my past self, not what I would tell a stranger whose interests I know nothing of. Most people have a much stronger time preference in general and particularly for self-investment.
PL as in programming languages, theory, design, research. Most of what I’m interested in there dovetails with type theory.
I have a guide here for learning Haskell which is hammered out by a fair bit of experience. I’m also writing a book, but that’s not going to be available for awhile.
Sorry to make this such a long conversation.
My Interest: Learn Functional Programming solely to learn the thought process not to pick up a new language. I mostly do data analysis with R.
Although Haskell is pretty great, it’s a bit of a mountain at first. I would start with either OCaml or Erlang, both of which are a little easier to get into.
Erlang in particular has a tremendously and uniformly good “starter kit” in the form of learnyousomeerlang.com; working through that would get you pretty deep into the core ideas of recursion, folds, immutability, and how functional programming works in industrial practice.
If that’s not enough for you and you need to advance to the next level, Haskell is reachable from either of those base camps in a way that it might not be for the starter R practitioner.
Although Haskell is pretty great, it’s a bit of a mountain at first. I would start with either OCaml or Erlang, both of which are a little easier to get into.
I can’t wait to show this to my coauthor whose first and only programming language is Haskell.
Learning OCaml and Erlang will not teach you Haskell. There’s little overlap and you won’t obtain the same benefits.
Haskell is learnable for FP experts, people completely new to programming (like my coauthor on our book), and everyone in between.
OCaml and Erlang are worth learning for their respective strengths alone. They’re not a waiting room for Haskell and learning them first won’t save you any time.
The guy didn’t ask how to learn Haskell; if he did, I would wholeheartedly agree: he should start with Haskell. He instead asked: how to learn Functional Programming solely to learn the thought process. There are actually many significant overlaps in FP idiom between Erlang/ML-family languages and Haskell, as you well know. And, E(your coauthor) does not imply A(X) -> LearnsHaskellEasily(X). That said, really looking forward to your book and appreciate the github learning haskell repo, which I am slowly, but painstakingly, working through.
Check out Real World OCaml for a decent intro to a modern ML descendant.
But OCaml has Object Orient in its first letter :) I want to learn about Functional not for programming in that language but to learn to think that way.
The name is just marketing. The OO features feel bolted on and I get the sense that hardly anyone actually uses them.
Actually the object system in OCaml is quite interesting and is related to polymorphic variants, quite a useful and popular language feature. But it’s true that the OCaml community at large rarely uses objects and classes.
Ignore it. Most of “Real World” OCaml is just a different syntax and slightly different features of Standard ML where ML stands for Meta Language and was used to program a theorem prover. About as functional as you can get : )
More pertinently, OCaml is very “functional” even in its object system which is much more a system for “row types” than an object system like you might see otherwise. Then, atop that, it’s rarely used and often seen as a design smell.
Same exact story here as with @bitemyapp: came to Haskell from Clojure, and I’m currently rewriting everything we have from it. It’s THAT much of a qualitative jump if you’re planning on writing a ton of code that needs to survive the test of time and maintenance. If you’re going to be writing a few toy apps here and there, not sharing much code among them, it really doesn’t matter, do it in bash if you have to.
Tooling like this doesn’t shine until the size of your codebase becomes serious or you need to start shipping libraries around your projects with quickly changing interfaces.
I’ve been learning Haskell coming from just finishing SICP and working a lot in Clojure, and I’d do it this way again. I feel like SICP has so much awesome to offer that I wouldn’t have learned as richly if I’d skipped it. If you’re in the Philly area, I’m leading a study group for SICP, check us out at http://www.meetup.com/Clojadelphia/
That being said, everyone I think should learn both a lisp and macros really well, and then something like Haskell. Just to know both sides of the force.
Well I just live up the road in Allentown.
Coming from the other direction, I found knowing Haskell gave me a solid foundation for formalizing a lot of the things covered in SICP. The parts on system design and abstraction building lend themselves particularly well to algebraic formalizations, even if the book shies away from using math loaded words when possible.
I can’t see how a $29 book is needed to cover what seems like a longish blog post on Life Hacker. Am I missing something that makes this a subject more than one chapter or a blog post or two?
Well I will defend CSV. It is not a horrible format. A horrible format is XLS and oterh spreadsheet formats. I get the craziest text formats from my local government and my businesses data base provider that I can’t help but ask who is saying 40 gb csv is horrible?
If you want to convert it is fine but I think everyone is still thinking 1 gb is “Big Data” and well csv can really handle a lot of data if you just up your ram.
There are plenty of reasonable arguments both ways. One might say that CSV is bad because it is ill-specified or that RFC 4180 does not have wide adoption. Namely, many CSV parsers accept a superset of RFC 4180 and subtley differ in their semantics. Also, the CSV spec states that the text encoding is ASCII, which isn’t that helpful. And I’ve also heard people complain about Excel mangling CSV files, but I don’t know anything about that.
To your point (and in my experience), CSV works well in practice.
Meta point: I try to be upfront about motivation and limitations of my projects, and that’s all I was trying to do with this section of the README. It doesn’t mean that I’m endorsing the view that CSV is horrible, but it does mean that I recognize that as a reasonable criticism.
As a Head Start Technology person I would actually say that what he says is VERY practical educationally speaking. This push for STEM has had been a challenge to make things developmentally appropriate while also providing more science engineering and math. We have been modeling for year.
Example: Classroom shows intrest in helicopters (Normally it is always a castle at first) we than study helicopters and talk about it. Than we talk about their use and what problems they solve. When the students are ready and are excited we will build a helicopter BUT first we blue print and break down the plans for making it. We go with the child’s suggestions especially when we know it will fail. Then the child needs to de-bug and come up with a new plan (Teachers guide this part more so the child isn’t frustrated and gives up) and the solution is in place we complete the project. It normally takes around 2 weeks for this process BUT I would say that we model more than anything with 3-5 year old children and it works. To bad that most kindergarten’s are glorified 1st or 2nd grade and don’t cover these things anymore.
This sounds cool and all, but I think it breaks with the Unix tradition. It seems to be trying to do a lot of things, and not necessarily well.
way too flashy as well
If anyone who bashes systemd and installs this need to experience on temporary kernel panic.
Some people are probably gonna massively dislike this.
Another subset of people will probably enjoy it.
A third just don’t know or care what’s happening.
Myself, I’m not sure what to think of it.
I like it (ducks) I had the hardest time with the old system on init and well every time I did something would mean 15-120 minutes of looking up things on wikis and such. Now things are just very consistent. I learned systemd when Arch switched and I really get to do anything by reading the man page or just spamming tab.
I also feel like I’m one of the only people who thinks Git’s CLI makes perfect sense. I wonder if my reasons are the same.
I just wish “git commit yetunknownfile” just added the file as well.
See I find it safe to only add files I explicitly say add and I would never want anything added. I use GIT for my configs in my home pages (Each distro has it’s own branch). I also use git as a one man work flow so I have a different view of git but man I love it.