| ask | new | about | settings | login
  • [-]  fogus 3 days ago link
    Dr. Gray wrote "Transaction Processing"[1] that has proven indispensable in my career and a generally great book. I didn't know the man, but he influenced me deeply from afar. RIP.

    [1]: http://www.amazon.com/Transaction-Processing-Concepts-Techni...

    Reply
  • [-]  fogus 6 days ago link
    The best part about the general population attempting to learn to code is that there may be fewer people who think programming is magic.
    Reply
    • [-]  glesica 6 days ago link
      Exactly. This. <arbitrary Internet jargon indicating agreement>.

      This article is the best-articulated explanation of why programming should be a core part of the college, and even K-12 curriculum I have ever seen. I just can't agree more.

      An anecdote.

      When my girlfriend was still in school she needed to collect a great deal of data for a project. It was available for sale from industry groups and such, but she didn't have tens of thousands of dollars for a membership. So she resigned herself to harvesting it manually.

      When I noticed what she was doing I pointed out that I could make this process easier for her by writing a small computer program. A few lines of Javascript and Python later she had her data, and in a small fraction of the time it would have taken her otherwise.

      I explained, in general terms, what was going on in the program and why it worked the way it did, and explained some of the changes I could make if she needed it to work differently. The programming involved here was not in any way difficult or clever. The interesting thing was that she had never even considered the fact that her problem could be solved using computer programming.

      She commented to me a couple months later, after I'd helped her with a couple other small problems in the same vein, that she had started to see problems that could be solved easily with a little bit of code everywhere she went. I didn't coach this response out of her, she was honestly amazed at what could be accomplished and she continues to view the world differently because of this exposure.

      Now, she certainly hasn't become a "computer programmer" since (and she likely never will). But gaining a basic understanding of what can be accomplished using programming tools has actually changed the way she views problems.

      Edit: I noticed people are concerned that having too many people with just enough knowledge to screw things up might be a bad thing. In my girlfriend's case the opposite has been true. She hasn't all of a sudden decided she can solve every problem by writing some code (or convincing someone else to write code).

      On the contrary, she actually has a better appreciation for how computer programs work and why writing a new one may not be a good idea in all cases. For example, she understands why a custom application requires maintenance, and that maintenance isn't just some trivial thing that you hire an intern to take care of. In fact, she has actually talked her boss out of having new applications created because she realized that the projects would likely end in failure.

      Reply
      • [-]  tomcorrigan 6 days ago link
        You have missed the point. Your girlfriend did not need to learn to program in order to discover what can be achieved with a basic program.

        For the common woman or man the revelation of computing comes from seeing what can be achieved, not how it is achieved.

        Reply
        • [-]  angersock 6 days ago link
          You cannot in good faith separate the what from the how when passing on the "revelation of computing". To do so promotes ignorance among the populace.
          Reply
    • [-]  freehunter 6 days ago link
      It was basically one of the best days of my life when I was explaining to my grandmother a project I did at work. I said "I wrote some computer magic to make this job easier". She pointed to my laptop and said "can you show me? Can you explain how this works?" My grandmother was a homemaker wife to a farmer her entire life, and uses the computer simply for email and pictures of my newborn niece.

      She might not be able to write a single line, but when I was explaining it at a very high level going through the code, it felt like she was trying to see how the computer would think. She's still of the belief that a computer can think on its own and we're simply asking it to do something for us (like you would a horse on a farm), but she really did want to know how I could teach a computer to do something it didn't know how to do before.

      Reply
    • [-]  AndrewDucker 6 days ago link
      Exactly. If more people have an intuitive understanding of what "coding" is then that makes professional coders' lives a lot easier.
      Reply
    • [-]  sasha-dv 6 days ago link
      But the worst part is that we may have more of unskilled and unaware of it.
      Reply
    • [-]  craigvn 6 days ago link
      Considering the proliferation of religion, there are bigger magic issue facing the world than coding.
      Reply
  • [-]  fogus 12 days ago link
    You can achieve the same experience by ripping the discs you've bought. The question is do people actually do that?
    Reply
    • [-]  CWIZO 12 days ago link
      No they don't.
      Reply
      • [-]  dfxm12 11 days ago link
        Yes, we do.
        Reply
  • [-]  fogus 12 days ago link
    People still buy DVDs? How quaint.
    Reply
  • [-]  fogus 19 days ago link
    All amazing questions -- you've managed to identify many gray areas of the graph. This graph is the seed to a large research project and will likely change as the research proceeds.
    Reply
    • [-]  kibwen 19 days ago link
      What sort of research project? I'm also curious where you draw the line regarding "traditionally functional" languages with respect to multiparadigmatic languages.
      Reply
  • [-]  fogus 19 days ago link
    Odersky himself has implied that Scala was prompted by Clojure in its recent persistent structure implementations. However, this influence is motivational rather than via copied code (as stated at http://stackoverflow.com/a/3108380). Although Odersky does mention the word "copied" in an interview that I had with him, but that state of affairs may have changed (http://blog.fogus.me/2010/08/06/martinodersky-take5-tolist/).
    Reply
    • [-]  dons 19 days ago link
      My guess was that it was going to be the container library, rather than the language itself. If libraries are included, then Clojure-inspired HAMTs are in Haskell as well. But really, Clojure, Haskell and Scala are all just implementing Bagwell's ideas, http://lampwww.epfl.ch/papers/idealhashtrees.pdf whose feasibility was shown in Clojure.

      See e.g. for Haskell, originally as http://www.haskell.org/pipermail/haskell-cafe/2010-February/... and now as http://www.haskell.org/wikiupload/6/65/HIW2011-Talk-Tibell.p...

      However, your graph will be much more complicated if libraries are allowed to influence each other, rather than strictly considering language features.

      Reply
      • [-]  fogus 19 days ago link
        > My guess was that it was going to be the > container library, rather than the language itself.

        This walks a thin line for sure and in Scala the line is almost microscopic. I'll keep it for now since my reasoning was the same as the Erlang->Scala influence. A core language library that is rarely viewed as other than a core feature.

        Reply
        • [-]  soc88 17 days ago link
          I disagree with that. There is great attention between language features and functionality shipped in the standard library. This http://clojure.com/blog/2012/04/19/take5-daniel-spiewak.html might also be of interest.
          Reply
  • [-]  fogus 19 days ago link
    I'm definitely open for display ideas. DOT source is located at https://gist.github.com/2576547 and is forkable.
    Reply
  • [-]  fogus 19 days ago link
    That is a very nice graph. I was shooting for a more comprehensive graph, but as you see at the cost of comprehension.
    Reply
    • [-]  lukeschlather 19 days ago link
      Why did you include Fortran and Algol? I'm curious what warrants their inclusion, but not BASIC or ADA or a variety of other languages... they certainly don't meet the textbook definition of "functional."
      Reply
  • [-]  fogus 34 days ago link
    The Clojure/core team helped tremendously by many brilliant people volunteering fixes, features, and docs -- just like now.
    Reply
    • [-]  asmala 34 days ago link
      Indeed, the developer base around Clojure and core libraries seems to have reached a critical mass so the continuity in that front is no longer a real concern.

      However, I think the question was about projects built with Clojure, i.e. how to ensure that future developers in the company I work for will be able to continue where I left off? The global Clojure talent pool, while growing, is still on the small side (e.g. compared to even Ruby).

      Reply
      • [-]  rbxbx 34 days ago link
        I think this is a moot point, as we've seen time and time again using technologies such as Clojure/OCaml/Haskell/Etc is a boon for hiring great talent, not the other way around.

        http://janestreet.com/minsky_weeks-jfp_18.pdf See part 4 "Personnel" for Jane Street's experience hiring OCaml devs.

        Reply
        • [-]  asmala 34 days ago link
          An excellent point. Definitely something we should all keep in mind when promoting cutting edge tech choices.

          That said, I don't think the matter is quite that straightforward where I come from; I would imagine Clojure dev head count in the whole of Finland is in the low double digits. If I were making business decisions involving future staffing, I would not feel confident I could replace the (hypothetical) only in-house Clojure dev in this job market.

          Reply
          • [-]  puredanger 34 days ago link
            We have a team of Clojure devs and I think all but one of us has learned Clojure "on the job". Clojure is not hard to learn, imho.
            Reply
          • [-]  pron 34 days ago link
            But what's the number of good developers? I think the point is that good developers can learn whatever language they need. You don't need to hire Clojure developers.
            Reply
            • [-]  greiskul 34 days ago link
              Yes, thats something that some people don't seen to get. Good developers not only can learn new languages as needed, but they will learn new languages and idioms with time, else they will quickly become obsolete.
              Reply
          • [-]  rbxbx 34 days ago link
            I'm also a pretty big proponent of distributed teams :)

            That said, as others have noted, if you're hiring quality people, there's no reason they can't learn Clojure on the job. Plus if you make an investment in your people they're more likely to be invested in you ;)

            Reply
  • [-]  fogus 35 days ago link
    Thank you for that. I will now find out the real implementations of Haskell's pure, <$>, and join.
    Reply
    • [-]  Tyr42 34 days ago link
      Well, here's the type signatures for each:

          pure (== return) :: (Applicative f) => a -> f a
          <$> (== fmap) :: (Functor f) => (a -> b) -> (f a -> f b)
          join :: (Monad m) => m (m a) -> m a
      
      All of these are polymorphic, and example in the case of lists would be

          pure x = [x]
          odd <$> [1,2,3] == [True, False, True]
          join [[1,2], [3], [4,5]] = [1,2,3,4,5]
      Reply