Пікірлер
@kodosunofficial
@kodosunofficial 2 сағат бұрын
Man, your videos helped me, please don't stop upload it
@DaveRoberts308
@DaveRoberts308 13 күн бұрын
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_phyzix
@phyzix_phyzix 19 күн бұрын
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-qz1cu2qm5y
@user-qz1cu2qm5y 20 күн бұрын
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..
@Achy1les
@Achy1les 22 күн бұрын
Great video. Except that mathematical operators in Lisp are not operators, but functions themselves...
@laughingvampire7555
@laughingvampire7555 27 күн бұрын
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
@idkwhattonamethisshti
@idkwhattonamethisshti 27 күн бұрын
No
@stretch8390
@stretch8390 Ай бұрын
The python shade haha great video.
@spacelem
@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
@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
@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
@notyourbusiness2672 Ай бұрын
Sound effect: eavesdropping in a public toilets in the 50's 👌🏻
@Siroitin
@Siroitin Ай бұрын
Coolio! Next you could analyze long repeating patterns and make new keybindings for those?
@sammytalks7215
@sammytalks7215 Ай бұрын
yes! that's the plan. the hope is that these will turn out to be things that _should_ be emacs commands :D
@weavermarquez1271
@weavermarquez1271 Ай бұрын
Very excellent! I'm excited to start collecting my data, we'll see how it goes ^^
@JH-pe3ro
@JH-pe3ro 2 ай бұрын
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
@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-ui8my9zs7o
@user-ui8my9zs7o 2 ай бұрын
Long formate is great!!
@junghanacs
@junghanacs 2 ай бұрын
wow thanks
@matthewhutton5701
@matthewhutton5701 2 ай бұрын
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 :)
@ratfuk9340
@ratfuk9340 2 ай бұрын
This is awesome lol
@9s-l-s9
@9s-l-s9 2 ай бұрын
Really cool :D Also like the idea of using information theory for UI analysis.
@tanko.reactions176
@tanko.reactions176 3 ай бұрын
it feels like the compiler writer of lisp implemented the AST and then was too lazy to continue, called it a day.
@jongeduard
@jongeduard 3 ай бұрын
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.
@iNuchalHead
@iNuchalHead 3 ай бұрын
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?
@vaibhawc
@vaibhawc 3 ай бұрын
But you can't create AI using lisp. yet.
@christopheroliver148
@christopheroliver148 3 ай бұрын
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.
@christopheroliver148
@christopheroliver148 3 ай бұрын
"...we managed to create a language that accomplishes neither." Ouch! My sides! /me ∉ pythonistas
@christopheroliver148
@christopheroliver148 3 ай бұрын
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.
@wredue3733
@wredue3733 4 ай бұрын
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-fr1no2ir3r
@user-fr1no2ir3r 4 ай бұрын
Great tutorial, don't stop make video like this, please
@iamlenb
@iamlenb 4 ай бұрын
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_wood
@east_wood 4 ай бұрын
my ears
@partypooper2591
@partypooper2591 4 ай бұрын
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.
@saymehname
@saymehname 4 ай бұрын
Thanks for this
@alex146
@alex146 4 ай бұрын
R is actually pretty good lang
@spacelem
@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 :)
@alex146
@alex146 4 ай бұрын
That is mind-blowing!
@seventhtenth
@seventhtenth 5 ай бұрын
first, we gonna get to lisp macros next time and I am excited as freak
@praveenraj9713
@praveenraj9713 5 ай бұрын
Wonderful!
@Yupppi
@Yupppi 5 ай бұрын
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.
@sammytalks7215
@sammytalks7215 5 ай бұрын
the videos are intended for a wide audience, but I personally have a pure math background lol
@Yupppi
@Yupppi 5 ай бұрын
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.
@ratfuk9340
@ratfuk9340 5 ай бұрын
1:56 lol
@arunray2986
@arunray2986 5 ай бұрын
Wow, I love that smile. Infectious!!😂
@kylewollman2239
@kylewollman2239 5 ай бұрын
This made fp so much clearer to me. I've been struggling to really grasp it. Thanks!
@cromwellbostjr.9052
@cromwellbostjr.9052 5 ай бұрын
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?
@sammytalks7215
@sammytalks7215 5 ай бұрын
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-dc9zo7ek5j
@user-dc9zo7ek5j 5 ай бұрын
Great summary, Python is just bad for anything more complex, but the wide range of packages fix it and they make it usable.
@CultKosmosa
@CultKosmosa 5 ай бұрын
You’re talking like a boring robot, can’t even finish a video
@ronnierocket2869
@ronnierocket2869 6 ай бұрын
"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".
@sammytalks7215
@sammytalks7215 6 ай бұрын
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
@ronnierocket2869
@ronnierocket2869 6 ай бұрын
"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.
@mingyenwu9621
@mingyenwu9621 5 ай бұрын
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?
@LeChatNoirDansLaNuit
@LeChatNoirDansLaNuit 6 ай бұрын
ClojureScript with reagent is really nice
@jmisc
@jmisc 7 ай бұрын
1:58 i didnt expect that,lol
@erictobin2583
@erictobin2583 7 ай бұрын
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. 🙂
@sammytalks7215
@sammytalks7215 7 ай бұрын
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
@KohuGaly
@KohuGaly 8 ай бұрын
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.