Skip to content
HomeVideos
AllLongsCategoriesPlaylists
BooksBlogsPodcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K

    Clojure for Java Programmers Part 1 - Rich Hickey

    ClojureTV

    2 HN recommenders · recommended in 5 months, 2013–2022

    YouTube

    1:48:13 · 131K views · Dec 17, 2012

    Rich Hickey introduces Clojure to the NYC Java Study Group in the first of a two-part talk. It covers reader syntax, core data structures, code-as-data, evaluation, special operators, functions, macros and sequences, assuming no Lisp background.

    Recommended as a clear, well-paced introduction to Clojure and Lisp ideas like code as data and macros, straight from the language's creator.

    Software Engineering & LanguagesFunctional programmingPython, Ruby & scripting languages
    1. 1:07:22
      Invited Talk - Guy SteeleClojureTV39K views • 9 years ago
    2. 1:28:59
      Clojure for Lisp Programmers Part 1 - Rich HickeyClojureTV25K views • 13 years ago
    3. 1:14:52
      Effective Programs - 10 Years of Clojure - Rich HickeyClojureTV176K views • 9 years ago
    4. 53:56
      Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojurejasonofthel33t119K views • 13 years ago
    5. 1:02:50
      The Language of the System - Rich HickeyClojureTV174K views • 13 years ago
    6. 1:03:29
      Maybe Not - Rich HickeyClojureTV181K views • 7 years ago
    7. 1:01:39
      "Simple Made Easy" - Rich Hickey (2011)ClojureTV434K views • 5 years ago
    8. 2:32:39
      Clojure Concurrency - Rich HickeyClojureTV73K views • 13 years ago
    9. 4:57
      Rich Hickey rants about HttpServletRequest in 1080p: Death By Specificity from Clojure Made SimpleFred Overflow43K views • 6 years ago
    10. 1:10:05
      Are We There Yet - Rich HickeyZhang Jian24K views • 7 years ago
    11. 1:02:26
      Solving Problems the Clojure Way - Rafal DittwaldClojure/north87K views • 7 years ago
    12. 45:00
      "Transducers" by Rich HickeyStrange Loop Conference116K views • 12 years ago
    13. 31:44
      The Value of Values with Rich HickeyInfoQ145K views • 14 years ago
    14. 32:44
      Clojure in a nutshell by James TrunkFunc Prog Sweden104K views • 5 years ago
    15. 1:16:14
      Spec-ulation Keynote - Rich HickeyClojureTV136K views • 9 years ago
    16. 1:50:07
      JSON Parser 100% From Scratch in Haskell (only 111 lines)Tsoding205K views • 6 years ago
    17. 1:18:42
      Web Development in Emacs, Common Lisp and Clojurescript - Emacs SGEngineers.SG14K views • 10 years ago
    18. 39:49
      Hammock Driven Development - Rich HickeyClojureTV333K views • 13 years ago
    19. 36:53
      Rails Conf 2012 Keynote: Simplicity Matters by Rich HickeyConfreaks220K views • 14 years ago
    20. 1:06:24
      Rich Hickey: Deconstructing the DatabaseInfoQ106K views • 14 years ago

    6 comments from Hacker News

    1. @JachJul 2013· in “How do I “think in AngularJS” if I have a jQuery background?”

      Indeed. Rich Hickey's 2-part presentation on "Clojure for Java Programmers" was a really slick presentation of a Lisp. (Focusing on the 'code is data' aspect from the beginning (at least once he starts talking about the language specifics themselves, he does spend a while motivating dynamic languages) rather than talking a lot about just higher order functions and macros and so on. He goes over the evaluation model and its difference from a Java/C++ model, he shows how to interop with Java... It's just a great talk.) Part 1: this video Part 2: [LINK] Slides: [LINK]

      Strongly recommendsView on HN
    2. @greggybJan 2022· in “Understanding the Power of Lisp (2020)”

      > So that's how I view Lisp macros - creating code on the fly and executing it. This is an incorrect assumption. In compiled Lisps[0], macros are a compile-time construct, which manipulate the data structures that represent your code[1]. All manipulation occurs at compile-time. In interpreted Lisps, macro evaluation is temporally intertwined with program execution, but the two phases are logically distinct. [0]: Compilation time in a Lisp is not necessarily similar to compilation in other languages. Working at a REPL does not imply that interpretation is happening. Clojure is an example of a Lisp that is exclusively compiled. Even when sending individual expressions to the REPL, they are compiled before being evaluated. [1]: From a reply elsewhere in this thread: this video See this video for an overview of the core of Clojure. The link starts with an overview of Clojure's data types and data structures (skipping the intro for the reasons behind Clojure). This leads directly into the evaluation model, which is based on the data structures of Clojure. Watch through ~1h:30m to get a feel for what macros are used for in Clojure's core. This gives a very good overview of the evaluation model for macros; this is generally applicable to Lisp macros outside of Clojure as well, though there are nuances to different dialects. I recommend that you start at the linked time, but if you want to jump straight to the evaluation model, you can jump to ~47m.

      RecommendsView on HN
    3. @greggybJan 2022· in “Understanding the Power of Lisp (2020)”

      From a Clojure perspective, here are a few things to think about and explore to help understand where the power and value of macros lie. 1. Clojure does not have all of its various conditionals as language built-ins. There is a single conditional construct built in to the language, if. The rest are all defined in terms of if. Function arguments are eagerly evaluated in Clojure. How do you write a short-circuiting function in Clojure? (when predicate consequent) as a function must evaluate both the predicate and the consequent. If consequent is slow to calculate then your whole when expression is as slow as consequent, even if predicate is false and we do not need consequent. when is a Clojure macro based on the if special form. 2. core.async is a mere library.[0] This implements CSP (same idea as Go's channels) and async programming (the sort of stuff that needs compiler support in other languages such as C# or Go) as a library. If Rich Hickey didn't write core.async, you could build this control flow yourself for async programming. In fact, you can create arbitrary control flow mechanisms using macros. Common Lisp's entire object system can be implemented in macros. 3. The only special forms in Clojure are def, if, fn, let, loop, recur, do, new, ., throw, try, set!, quote, and var. The rest of what you would consider the core of Clojure consists of functions and macros. Much of the control flow functionality is implemented in macros.[1] The core of macros is that they allow

      CitesView on HN
    4. @JachDec 2020· in “State of Common Lisp Survey 2020”

      > I'm explaining why Lisp is hard to learn. It is not hard to learn in general, there are too many counterexamples of people of all sorts and skills learning it without these issues you are having, learning it as their first, learning it later in their careers... (CL is big , I'll give you that, but each piece can be chewed one at a time and does not seem to be individually that difficult.) So I can hypothesize why it's hard to learn for you . My first guess is still that you aren't meeting Lisp in its own terms and are trying to make Lisp fit your mental model of some other language and its ecosystem. This isn't going to work, and the failure mode (if I'm right) has nothing to do with Lisp but with biases in general heuristics of learning. You don't need to "unlearn" the way you're used to doing things, but you do need to separate yourself from it for a bit until you actually grasp the Lisp (and its ecosystem's) way(s) and can then see the connections, tenuous and non-existent as some may be. I'll risk raising some of those connections below, but really, things need to be understood on their own terms first or you wind up with misconceptions. (I've seen it multiple times with Java/Python programmers getting confused at the other's "import" statement.) > strange terminology It's not Lisp's fault that it's old. Being old means it will have terminology that may be alien to what we have today with nothing today being a perfect fit, or alternatively sometimes it expresses mostly

      CitesView on HN
    5. @pgtOct 2020· in “An Intuition for Lisp Syntax”

      Lisp has only one rule called the Operational Form: (operator arg1 arg2 arg3 ...) The Operational Form is just a list denoted by parentheses. The operation or 'function' comes first, followed by its arguments or operands, e.g. (+ 1 2 3) => 6 The + symbol resolves to the plus function and is passed in the arguments 1, 2 and 3. Nested forms are evaluated inside-out: (+ 5 (- 10 6)) => 9 Traditionally, Lisp only has one data literal: `(linked lists)`, but Clojure adds `[square brackets for vectors]` and `{:curly brackets}` for hash maps. The colon denotes a keyword, which is a symbol which only ever resolves to itself and is commonly used for labeling things, e.g. keys in a map. Notice how the operational form is just a list with some symbols and data literals. In Lisp, the syntax for writing data structures and the syntax for writing code is the same syntax . And since a function operates on data and produces new data, what if a function could operate on code and produce new code , since code is just data? We call such a function a macro (and I don't mean Excel macros). Macros run at "compile-time" (technically 'read time') and the code output is executed at "run-time" (or during 'evaluation'). The benefit of macros is that if your language is missing a feature, you can add it. You can see this in practice by looking at the source code for the `and` and `or` logic functions in Clojure, which are typically built-ins, but in Clojure they are just macros bootstrapped on top of the

      CitesView on HN