Man, your videos helped me, please don't stop upload it
@DaveRoberts30813 күн бұрын
Lisp will never die. It’s too fundamental. Sure, dialects will change, Maclisp to Scheme to Common Lisp to Clojure, etc., but the core ideas are all still there.
@phyzix_phyzix19 күн бұрын
term is a much better shell built into emacs. I have it bound to a function that calls (term "/bin/zsh") so that I can use zsh.
@user-qz1cu2qm5y20 күн бұрын
Hi Sammy I think you can find a niche by doing videos around Clojure. Basics, Tutorials, Gotchas, Culture around it, Job market, comparisons, tooling, etc..
@Achy1les22 күн бұрын
Great video. Except that mathematical operators in Lisp are not operators, but functions themselves...
@laughingvampire755527 күн бұрын
I have doubts about the opinion that "Emacs out of the box sucks" I think of it more as a framework to make text driven applications with support for GUI, if you see the customize interface and the type of GUIs controls that allows is almost like a browser of the 1990s
@idkwhattonamethisshti27 күн бұрын
No
@stretch8390Ай бұрын
The python shade haha great video.
@spacelemАй бұрын
I've tried several times to get into Emacs (partly because it seems to work much better for integrating with REPLs than Vim/tmux). I'm a Vim user, so I can tolerate a certain degree of living in the 70s, but the Meta key is something that Emacs desperately needs to move on from, because it makes Emacs literally painful to use. Keyboards haven't had a Meta key since Lisp machines, and it was to the left of the Ctrl, not the thumb bendingly awful position of the Alt key on modern IBM keyboards. CUA mode is a step in the right direction, but still. And when the first thing you have to do is remap all the commands just to not experience pain... eh. I know one obvious solution is to remap the otherwise badly placed CapsLock to Alt, but I use the Colemak DH keyboard layout which remaps CapsLock to Backspace, and I cannot figure out how to undo that, so I just end up not using that key. However, if I ever do try again, I'll certainly take another look at your setup.
@spacelemАй бұрын
I'm fascinated by FP, and have tried to incorporate aspects of it. Unfortunately, a lot of my work is stochastic simulation of epidemics, where you have a population that changes *randomly* over time, and you want to capture various bits of information about it (e.g. maybe poll the population at regular intervals, record the time(s) an individual gets infected and recovers etc.). This is so natural in procedural, e.g. population X=X0; t=0; while (t<t_end) {calculate stuff; update t and X; record poll; etc.}, but this state fiddling is anathema to FP. I have looked, but haven't really come across any examples of FP in these sorts of cases, to learn from. Guess when I do figure it out it'll be up to me to share my findings! Also I remember how Guido decided that TCO wasn't going to happen in Python. Given that he's not been the BDFL for almost 5 years now, maybe that might change in the future?
@spacelemАй бұрын
Julia might fit the place where Python failed. It looks a lot like Python (although with end tags instead of syntactic whitespace, and n-dim arrays are easy to work with), but it has powerful macros, inspired directly by Lisp. Plus it has strong performance.
@notyourbusiness2672Ай бұрын
Sound effect: eavesdropping in a public toilets in the 50's 👌🏻
@SiroitinАй бұрын
Coolio! Next you could analyze long repeating patterns and make new keybindings for those?
@sammytalks7215Ай бұрын
yes! that's the plan. the hope is that these will turn out to be things that _should_ be emacs commands :D
@weavermarquez1271Ай бұрын
Very excellent! I'm excited to start collecting my data, we'll see how it goes ^^
@JH-pe3ro2 ай бұрын
I've converged on the "What They Teach In Harvard Business School/What They Don't Teach In Harvard Business School" approach to programming: Use Forth to talk to a real machine. Use Lisp to avoid talking to a real machine. Use both together and you have all of programming.
@aoeu256Ай бұрын
You can have a readmacro that you can bind to a key on emacs or whatever editor to be able to change S-expressinos to postfix and back again. Postfix is nice if you see the stack so you can see the intermediate values, but LISP is better for reading. Also you can use Chinese symbols and put the words in a tiny ruby script and maybe change the ruby script to give you sample test values seeing how they move through your code.
@user-ui8my9zs7o2 ай бұрын
Long formate is great!!
@junghanacs2 ай бұрын
wow thanks
@matthewhutton57012 ай бұрын
Super interesting! Very useful insight that the keys most needing re-binding were the ones that were most annoying, suggesting that annoyance-drive-reconfiguration isn't a bad approach. Great work :)
@ratfuk93402 ай бұрын
This is awesome lol
@9s-l-s92 ай бұрын
Really cool :D Also like the idea of using information theory for UI analysis.
@tanko.reactions1763 ай бұрын
it feels like the compiler writer of lisp implemented the AST and then was too lazy to continue, called it a day.
@jongeduard3 ай бұрын
This video is quite a while ago now, but if I may give my 2 cents here, I would like to say something about the old debate of purity. I believe the most important point about purity is that it's all about Separation Of Concerns. Pure languages as a whole like Haskell have some problems in how practical they are to use in real life software development. So what I believe is that at function level, you want to decide if it becomes a pure function or not, and express that clearly in the name and type of it. You can often keep most code in pure functions, which just yield values in predictable ways. Actual `work`, like modifying environmental things, files, stored data, etc. can be placed in decidated, centralized procedures in a program. And such a procedure may return void or unit (this depends on the language), or when applicable rather a success or error result status. So I strongly believe in well organized, mixed paradigm programming. I believe Rust does this totally right for example.
@iNuchalHead3 ай бұрын
I've always thought that FP can be achieved via any of the other programming paradigms if and only if you write them correctly. BUT the _point_ of FP is that a functional rubric is *enforced* by the grammar and runtime, therefore guaranteeing code safety. Does that sound right?
@vaibhawc3 ай бұрын
But you can't create AI using lisp. yet.
@christopheroliver1483 ай бұрын
BTW: I like the addition "for better or for worse." Writing well in Lisp requires taste. It's way too easy to make a real dog's breakfast of ill-considered macros. N.B. I am by no means considering myself as exemplary here. I'd have to be firing on all cylinders if I were to contemplate writing a macro for anything but my own consumption; I'm generally too stupid to do better.
@christopheroliver1483 ай бұрын
"...we managed to create a language that accomplishes neither." Ouch! My sides! /me ∉ pythonistas
@christopheroliver1483 ай бұрын
The startup time comment is interesting. On my boxes, I often stop emacs, but my init does a lot with autoload, and chances are that the emacs files are cached in memory anyhow, so save for an inital cold load, emacs starts about one second. Since I run it via emacsclient, if I don't kill the session, the startup is basically instantaneous. I think if I had NVMe on my boxes, I wouldn't even find the cold-load time that painful. It certainly starts up much more quickly than a cold-load of firefox.
@wredue37334 ай бұрын
there is no evidence that these properties are better. functional programs measurably have as many bugs as imperative and oo programs. If these things are not producing a benefit, why make things more difficult for you and for the computer?
@user-fr1no2ir3r4 ай бұрын
Great tutorial, don't stop make video like this, please
@iamlenb4 ай бұрын
Neo: "Woah... I know Macros!" Sammy: "Show me.." Sammy: "This is Emacs REPL. It's similar to the programming environment of the Matrix It has the same basic rules, rules like abstraction, compilation. What you must learn is that these rules are no different than the rules of the underlying assembly. Some of them can be bent. Some of them can be broken."
@east_wood4 ай бұрын
my ears
@partypooper25914 ай бұрын
I struggled with this video because the sound level went up and down. Otherwise, you shared some interesting ideas. Thank you for taking the time to make and share this video.
@saymehname4 ай бұрын
Thanks for this
@alex1464 ай бұрын
R is actually pretty good lang
@spacelemАй бұрын
I used to hate R when I first used it back in 2007, but having used it as my primary language at work for the last 3 years, it's become (as you say) actually pretty good. It's not quite my favourite language (that's Julia), but it gets stuff done and makes it easy to do. Plus once you get the hang of FP, your programs start looking really nice! I don't do any linear modelling, my work is all non-linear modelling, stochastic simulation, and making quality plots :)
@alex1464 ай бұрын
That is mind-blowing!
@seventhtenth5 ай бұрын
first, we gonna get to lisp macros next time and I am excited as freak
@praveenraj97135 ай бұрын
Wonderful!
@Yupppi5 ай бұрын
This video is aimed at pure mathematicians, right? I can't explain the intensity of functional programming and particularly haskell otherwise. Not that I'd argue against it being good to expand your probelm solving views and perspectives by learning some functional programming. Even C++ is getting more and more functional style support. Lambdas, algorithms, ranges, pipelining, pattern matching etc. Because it's just useful.
@sammytalks72155 ай бұрын
the videos are intended for a wide audience, but I personally have a pure math background lol
@Yupppi5 ай бұрын
The python comment was funny. We also managed to create Rust later that actually does accomplish many features of both successfully and is impossible to write and get to compile. But when/if it does, it's beautiful and the code looks nice on top of running fast. I can see why people used lisp. And I can see why people don't use lisp. Especially I can see why people wouldn't read other lisper's programs (because when you create a new language inside a language, you essentially create a barrier where you're only technically using the language you announce using, the other person can't speak it). I really wish the comparison in 2020's was not java though. I think something else would be more representative and universal of the basic structure differences. Although can't argue that there's been a lot of java in the last 10 years or so.
@ratfuk93405 ай бұрын
1:56 lol
@arunray29865 ай бұрын
Wow, I love that smile. Infectious!!😂
@kylewollman22395 ай бұрын
This made fp so much clearer to me. I've been struggling to really grasp it. Thanks!
@cromwellbostjr.90525 ай бұрын
Good video, but you kinda lost me in the beginning. I thought Lambda Calculus was a model for a Turing Machine; I didn't know they were separate back then. Can someone enlighten me further?
@sammytalks72155 ай бұрын
They were developed as two different ways to mathematically study what was possible on a machine (though Church was Turing's thesis adviser). After some time, they were shown to be _equivalent_ in the sense that each model could be used to implement the other one. It's sort of like how Python and Java are two different programming languages, but you can implement a python interpreter in Java, and a Java compiler in Python.
@user-dc9zo7ek5j5 ай бұрын
Great summary, Python is just bad for anything more complex, but the wide range of packages fix it and they make it usable.
@CultKosmosa5 ай бұрын
You’re talking like a boring robot, can’t even finish a video
@ronnierocket28696 ай бұрын
"importantly the return statement is a complete description" So? Everytime I watch a video on functional programming, I am left with one of two questions "what is functional programming" or "what is the benefit of functional programming". I sometimes wonder if I am already programming in a functional style and just don't see a reason to call it "functional".
@sammytalks72156 ай бұрын
If the return statement is a complete description of everything that happens in a function call (no mutability or global state), then certain optimizations are guaranteed to be safe, like - Caching - Parallel calls what's important is that in the functional world, it doesn't matter _how_ the function is implemented, as long as the mapping of inputs to outputs stays the same. you can't get this in the mutable world, because of the way the specific implementation might interact with the outside world. it also makes the function easier to understand and test, because the API surface is smaller. i.e. you don't have to test the function for every possible context/state of the world, you only need to test the mapping of inputs -> outputs. I also answer this more specifically in part 2 of this video: kzbin.info/www/bejne/bHjKlGR4gLNrndk
@ronnierocket28696 ай бұрын
"Caching" This constitutes mutating state. Also, at least for the things I work with, caching isn't going to help as the amount of memory needed for the hash map exceeds the available amount of RAM. After watching your second video, I am left with the conclusion that functional programming contradicts itself and is fundamentally impure. There is state somewhere, that state has to get mutated and all that functional programming accomplishes is moving around where the state is that gets mutated.
@mingyenwu96215 ай бұрын
I'm wondering, what is the functional programming guidelines when you absolutely need to change the state of a variable? Where or how do you change it?
@LeChatNoirDansLaNuit6 ай бұрын
ClojureScript with reagent is really nice
@jmisc7 ай бұрын
1:58 i didnt expect that,lol
@erictobin25837 ай бұрын
Thanks for this video! Is there a place I could download the code and experiment? I am interested in seeing your thoughts on a Mongo DB backend. Appreciated. 🙂
@sammytalks72157 ай бұрын
Unfortunately I don't think I saved the code for this one, but I'll try to put up github links in future videos. As far as mongodb, I think it's a good choice for quick development/smallscale applications because it's easy to set up, and it lets you dump JSON, which lines up well with how I represent objects in my application logic. If you want to scale up, you have to think more carefully about: - what type of information you're trying to represent - what types of operations need to be fast. (e.g. SQL is a much more mature language for aggregation and join operations) Often you'll want to pick a storage solution that's appropriate for the particular problem you're trying to solve. MongoDB is the first DB I learned to work with, and I think it was good for me, because I got to get up and running building my little project without thinking deeply about relational databases. I sort of learned the fundamentals of backend-development first, and then deep-dove into relational databases later. Hope this helps! :D
@KohuGaly8 ай бұрын
Saying that functional programming is more limiting is not really true. Yes, you are not allowed to do some operations that you can do in imperative. However, it also allows you to do some operations that would be unsound in imperative code, because you can rely that the code you're calling is not allowed to do some operations. It's not more or less limiting than imperative - it's just a different tradeoff. A very appealing tradeoff, might I add, because generally the bigger your codebase gets, the more your code calls other code to do work instead of doing it directly.