SlideShare a Scribd company logo
1 of 31
A few words about me
 Name: Nikolay Mozgovoy
 Developer in Sigma Software since 2013
and mentor since 2016
 Teacher in KhAI (Department Of Computer
Systems, Networks And Cybersecurity)
 GGJ Ukraine prizewinner (2016, 2017)
 GGJ Site organizer (Kharkiv)
 MSCSD: App builder
 Caught Lisp
LISP:
Back to the future
(A tribute to 60th anniversary)
Long term languages trends (TIOBE)
LANGUAGE 2018 2013 2008 2003 1998 1993 1988
Java 1 2 1 1 15 - -
C 2 1 2 2 1 1 1
C++ 3 4 3 3 2 2 5
Python 4 7 6 12 23 18 -
C# 5 5 7 8 - - -
Javascript 7 10 8 7 19 - -
Perl 11 8 5 4 3 12
LISP 31 11 15 13 8 4 3
Why language matter?
It is practically impossible to teach good
programming to students that have had a prior
exposure to BASIC: as potential programmers
they are mentally mutilated beyond hope of
regeneration.
Edsger Wybe Dijkstra
Why language matter?
Computer programs are all just text. And the
language you choose determines what you can
say.
Programming languages are what
programmers think in.
Paul Graham
John McCarthy
In 1960, John McCarthy published a
remarkable paper in which he did for
programming something like what Euclid did
for geometry. He showed how, given a handful
of simple operators and a notation for
functions, you can build a whole programming
language
Paul Graham
LISP Origins
A programming system called LISP (List
Processor) has been developed for the IBM
704 computer by the Artificial Intelligence
group at M.I.T. The system was designed to
facilitate experiments with a proposed system
called the Advice Taker, whereby a machine
could be instructed to handle declarative as
well as imperative sentences and could exhibit
“common sense” in carrying out its instructions.
John McCarthy
Original LISP Syntax
 S-Expressions (for “symbolic expression”): ( · ) + an infinite set of atomic symbols:
AB
(A · B)
((AB · C) · D)
(A·((B ·(C · NIL)) ·(D · NIL)))
 M-Expressions:
car[x]
car[cons[(A · B);x]]
 cons (“construct”)
 car (“contents of address register”)
 cdr (“contents of decrement register”)
LISP VS Fortran/Algol ancestor
var animals = new[] { "dog", "cat", "rat" };
void PrintAnimals()
{
foreach (var animal in animals)
{
Console.WriteLine(animal);
}
}
PrintAnimals();
#lang racket
(define animals (list "dog" "cat" "rat"))
(define (print-animals x) (map print animals))
(print-animals)
LISP Innovations
 IF Statement
 Garbage collection
 Function as a first-class datatype
 Lambda-expressions
 Functional programming
 Homoiconic syntax + eval
 Metaprogramming
 Continuations
 Multiple dynamic dispatch (aka Multimethods)
 Recursion
 Lisp machines (HLLCA)
Primary dialects
 Scheme (1970)
 Common LISP (1984)
 Clojure (2007)
Metaprogramming
(defn pow2 [x] (* x x))
(defn inc [x] (+ x 1))
(def strategy (read-string "[pow2 inc inc]")) ; user input
(def input (read-string "12")) ; user input
((apply comp (eval strategy)) input) ; 196
Metaprogramming (2)
(defn drive-to-home [] "driving to home")
(defn drive-to-work [] "driving to work")
(defn drive-to-garage [] "driving to garage")
(defn recharge [] "recharging")
(defn get-driving-program []
`(drive-to-home drive-to-work recharge drive-to-garage))
(map #(println (%))
(map eval (get-driving-program)))
Macros: definition
#lang racket
(define-syntax (show-this stx)
(print stx)
(syntax(void)))
;#<syntax:3:2 (show-this (quote (+ 1 2)))>
A macros is a syntactic form with an
associated transformer that expands
the original form into existing forms.
To put it another way, a macro is an
extension to the LISP compiler.
Using macro you can create:
 New language features
 DSL
Macros: creating missing constructs
;while macros application
(define x 10)
(while (> x 0) do
(displayln x)
(set! x (- x 1)))
; prints 10, 9, 8 , 7, 6, 5, 4, 3, 2, 1
;while macros definition
(define-syntax while
(syntax-rules (do)
[(while cond do body ...)
(let loop ()
(when cond body ...
(loop)))]))
Macros: changing evaluation strategy
;while macros application
(take 5 Nat)
; '(1 . #<promise:...0>)
(!! (take 5 Nat))
;'(1 2 3 4 5)
#lang lazy
;sequence: a_(n+1) = f(a_n)
(define inf-seq
(lambda (a0 f)
(cons a0 (inf-seq (f a0) f))))
(define natural
(inf-seq 1 (lambda (x) (+ x 1))))
Macros: changing type system
;This code will fail to compile
;Type Checker: type mismatch
expected: Integer
(define test (λ () (factorial 7.5)))
#lang typed/racket
(: factorial : Integer -> Integer)
(define (factorial n)
(if (<= n 0)
1
(* n (factorial (- n 1)))))
Macros: getting rid of parentheses (t-expressions)
#lang sweet-exp typed/racket
define: factorial([n : Integer]) : Integer
if {n <= 1}
1
{n * factorial{n - 1}}
factorial 5 ;- : Integer 120
#lang sweet-exp racket
define factorial(n)
if {n <= 1}
1
{n * factorial{n - 1}}
factorial 5 ;120
Continuations
(define (f return)
(return 2)
3)
(display (f (lambda (x) x)))
; displays 3
(display (call-with-current-continuation f))
; displays 2
Continuation is an abstract
representation of the control state of a
computer program
The "current continuation" is the
continuation that, from the
perspective of running code, would be
derived from the current point in a
program's execution
Continuations (2)
(test) ; 1
(the-continuation) ; 2
(the-continuation) ; 3
; store the current continuation
; (which will print 4 next) away
(define another-continuation the-continuation)
; reset the-continuation
(test) ; 1
(the-continuation) ; 2
; use the previously stored continuation
(another-continuation) ; 4
(define the-continuation #f)
(define (test)
(let ((i 0))
; call/cc calls its first function argument, passing
; a continuation variable representing this point in
; the program as the argument to that function.
; In this case, the function argument assigns that
; continuation to the variable the-continuation.
(call/cc (lambda (k) (set! the-continuation k)))
; The next time the-continuation is called, we start here.
(set! i (+ i 1))
i))
Multiple dynamic dispatch
(require multimethod)
(struct asteroid ())
(struct space-ship ())
(define-generic (collide a b))
(define-instance (
(collide asteroid space-ship) a b)
(println "Asteroid collided with the space ship"))
(define-instance (
(collide space-ship asteroid) a b)
(println "Space ship collided with the asteroid"))
Multimethods are functions that can
have many different implementations
depending on the types of arguments
they are invoked on. For example, a
generic add function might have
different implementations for adding
scalars and vectors.
Projects implemented in LISP
 EMACS
 Autodesk (3D creation and editing suite)
 Mirai (3D creation and editing suite)
 Maxima (computer algebra system)
 Viaweb (Yahoo Store)
 ITA Software (Google Flights)
 NASA Deep Space 1
 https://franz.com/success/
Rich Hickey & Clojure
We should aim for simplicity because simplicity
is a prerequisite for reliability.
The benefits of simplicity are: ease of
understanding, ease of change, ease of
debugging, flexibility.
Rich Hickey from Simple Made Easy
Full Clojure Stack
LISP Quotes
In a Lisp program, you can write a program
that writes Lisp programs so it has a kind of
open future; now, no… no-one actually does
that yet, but it’s still possible. In the other
languages, it's almost… you can’t write a C
program that will write a C program, it’s just…
there aren’t any verbs of the right kind, so to
me programming hasn’t changed much in 50
years because they got locked into this…
strange set of limitations.
Marvin Minsky
LISP Quotes
The most powerful programming language is
Lisp. If you don't know Lisp (or its variant,
Scheme), you don't appreciate what a powerful
language is. Once you learn Lisp you will see
what is missing in most other languages.
Richard Stallman
LISP Quotes
OOP to me means only messaging, local
retention and protection and hiding of state-
process, and extreme late-binding of all things.
It can be done in Smalltalk and in LISP.
LISP is the greatest single programming
language ever designed, the most important
idea in computer science.
Alan Kay
LISP Quotes
LISP has been jokingly described as "the most
intelligent way to misuse a computer". I think
that description a great compliment because it
transmits the full flavor of liberation: it has
assisted a number of our most gifted fellow
humans in thinking previously impossible
thoughts.
Edsger Wybe Dijkstra
If Lisp is so great, why it is unpopular?
 There were too many dialects
 LISP was too demanding for mainstream hardware in the ’70s
 In languages, as in so many things, there's not much correlation between
popularity and quality
 Languages are not merely technologies, but habits of mind as well, and
nothing changes slower
Resources
 Structure and interpretation of computer programs
 http://web.mit.edu/alexmv/6.037/sicp.pdf
 Hackers and painters
 Google Play Books
 Amazon
 Realm of Racket
 http://www.realmofracket.com/
 Living Сlojure
 Oreilly
 Practical Common Lisp
 http://www.gigamonkeys.com/book/

More Related Content

What's hot

Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming FundamentalsShahriar Hyder
 
Large Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptLarge Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptOliver Zeigermann
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalkkim.mens
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyTypesafe
 
INTRODUCTION TO LISP
INTRODUCTION TO LISPINTRODUCTION TO LISP
INTRODUCTION TO LISPNilt1234
 
Kotlin hands on - MorningTech ekito 2017
Kotlin hands on - MorningTech ekito 2017Kotlin hands on - MorningTech ekito 2017
Kotlin hands on - MorningTech ekito 2017Arnaud Giuliani
 
Maclennan chap5-pascal
Maclennan chap5-pascalMaclennan chap5-pascal
Maclennan chap5-pascalSerghei Urban
 
Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) wahab khan
 
Intro to Kotlin
Intro to KotlinIntro to Kotlin
Intro to KotlinMagda Miu
 
Introduction to functional programming
Introduction to functional programmingIntroduction to functional programming
Introduction to functional programmingKonrad Szydlo
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvmArnaud Giuliani
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?Tomasz Wrobel
 

What's hot (20)

LISP: Introduction to lisp
LISP: Introduction to lispLISP: Introduction to lisp
LISP: Introduction to lisp
 
Prolog & lisp
Prolog & lispProlog & lisp
Prolog & lisp
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
 
Meta Object Protocols
Meta Object ProtocolsMeta Object Protocols
Meta Object Protocols
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Large Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptLarge Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScript
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 
INTRODUCTION TO LISP
INTRODUCTION TO LISPINTRODUCTION TO LISP
INTRODUCTION TO LISP
 
Kotlin hands on - MorningTech ekito 2017
Kotlin hands on - MorningTech ekito 2017Kotlin hands on - MorningTech ekito 2017
Kotlin hands on - MorningTech ekito 2017
 
Maclennan chap5-pascal
Maclennan chap5-pascalMaclennan chap5-pascal
Maclennan chap5-pascal
 
Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence)
 
Intro to Kotlin
Intro to KotlinIntro to Kotlin
Intro to Kotlin
 
Invoke Dynamic
Invoke DynamicInvoke Dynamic
Invoke Dynamic
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Introduction to functional programming
Introduction to functional programmingIntroduction to functional programming
Introduction to functional programming
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvm
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
jsbasics-slide
jsbasics-slidejsbasics-slide
jsbasics-slide
 

Similar to LISP: назад в будущее, Микола Мозговий

SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.Ruslan Shevchenko
 
Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Does Java Have a Future After Version 8? (Belfast JUG April 2014)Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Does Java Have a Future After Version 8? (Belfast JUG April 2014)Garth Gilmour
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesEelco Visser
 
Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabDiana Dymolazova
 
On being a professional software developer
On being a professional software developerOn being a professional software developer
On being a professional software developerAnton Kirillov
 
Threading Is Not A Model
Threading Is Not A ModelThreading Is Not A Model
Threading Is Not A Modelguest2a5acfb
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesDominic Graefen
 
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...PROIDEA
 
Evolving as a professional software developer
Evolving as a professional software developerEvolving as a professional software developer
Evolving as a professional software developerAnton Kirillov
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisFastly
 
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Codemotion
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011Thadeu Russo
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойSigma Software
 
Scala as a Declarative Language
Scala as a Declarative LanguageScala as a Declarative Language
Scala as a Declarative Languagevsssuresh
 

Similar to LISP: назад в будущее, Микола Мозговий (20)

SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.
 
Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Does Java Have a Future After Version 8? (Belfast JUG April 2014)Does Java Have a Future After Version 8? (Belfast JUG April 2014)
Does Java Have a Future After Version 8? (Belfast JUG April 2014)
 
Clojure intro
Clojure introClojure intro
Clojure intro
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
 
Антон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLabАнтон Кириллов, ZeptoLab
Антон Кириллов, ZeptoLab
 
On being a professional software developer
On being a professional software developerOn being a professional software developer
On being a professional software developer
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 
Threading Is Not A Model
Threading Is Not A ModelThreading Is Not A Model
Threading Is Not A Model
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love Parantheses
 
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...
Atmosphere 2016 - Krzysztof Kaczmarek - Don't fear the brackets - Clojure in ...
 
Evolving as a professional software developer
Evolving as a professional software developerEvolving as a professional software developer
Evolving as a professional software developer
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
 
Beyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic AnalysisBeyond Breakpoints: A Tour of Dynamic Analysis
Beyond Breakpoints: A Tour of Dynamic Analysis
 
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011
 
Rits Brown Bag - TypeScript
Rits Brown Bag - TypeScriptRits Brown Bag - TypeScript
Rits Brown Bag - TypeScript
 
Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
 
Scala as a Declarative Language
Scala as a Declarative LanguageScala as a Declarative Language
Scala as a Declarative Language
 
Presentation1
Presentation1Presentation1
Presentation1
 
Introduction to r
Introduction to rIntroduction to r
Introduction to r
 

More from Sigma Software

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsSigma Software
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"Sigma Software
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Sigma Software
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Sigma Software
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Sigma Software
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Sigma Software
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Sigma Software
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Sigma Software
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Sigma Software
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Sigma Software
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Sigma Software
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challengesSigma Software
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Sigma Software
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Sigma Software
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Sigma Software
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creationSigma Software
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themSigma Software
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Sigma Software
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Sigma Software
 

More from Sigma Software (20)

Fast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIsFast is Best. Using .NET MinimalAPIs
Fast is Best. Using .NET MinimalAPIs
 
"Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur""Are you developing or declining? Don't become an IT-dinosaur"
"Are you developing or declining? Don't become an IT-dinosaur"
 
Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"Michael Smolin, "Decrypting customer's cultural code"
Michael Smolin, "Decrypting customer's cultural code"
 
Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...Max Kunytsia, “Why is continuous product discovery better than continuous del...
Max Kunytsia, “Why is continuous product discovery better than continuous del...
 
Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"Marcelino Moreno, "Product Management Mindset"
Marcelino Moreno, "Product Management Mindset"
 
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
Andrii Pastushok, "Product Discovery in Outsourcing - What, When, and How"
 
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
Elena Turkenych “BA vs PM: Who' the right person, for the right job, with the...
 
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
Eleonora Budanova “BA+PM+DEV team: how to build the synergy”
 
Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"Stoyan Atanasov “How crucial is the BA role in an IT Project"
Stoyan Atanasov “How crucial is the BA role in an IT Project"
 
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
Olexandra Kovalyova, "Equivalence Partitioning, Boundary Values ​​Analysis, C...
 
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
Yana Lysa — "Decision Tables, State-Transition testing, Pairwase Testing"
 
VOLVO x HACK SPRINT
VOLVO x HACK SPRINTVOLVO x HACK SPRINT
VOLVO x HACK SPRINT
 
Business digitalization trends and challenges
Business digitalization trends and challengesBusiness digitalization trends and challenges
Business digitalization trends and challenges
 
Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"Дмитро Терещенко, "How to secure your application with Secure SDLC"
Дмитро Терещенко, "How to secure your application with Secure SDLC"
 
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
 
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
Тетяна Осетрова, “Модель зрілості розподіленної проектної команди”
 
Training solutions and content creation
Training solutions and content creationTraining solutions and content creation
Training solutions and content creation
 
False news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid themFalse news - false truth: tips & tricks how to avoid them
False news - false truth: tips & tricks how to avoid them
 
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
Анна Бойко, "Хороший контракт vs очікування клієнтів. Що вбереже вас, якщо вд...
 
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
Дмитрий Лапшин, "The importance of TEX and Internal Quality. How explain and ...
 

Recently uploaded

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 

Recently uploaded (20)

SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 

LISP: назад в будущее, Микола Мозговий

  • 1.
  • 2. A few words about me  Name: Nikolay Mozgovoy  Developer in Sigma Software since 2013 and mentor since 2016  Teacher in KhAI (Department Of Computer Systems, Networks And Cybersecurity)  GGJ Ukraine prizewinner (2016, 2017)  GGJ Site organizer (Kharkiv)  MSCSD: App builder  Caught Lisp
  • 3. LISP: Back to the future (A tribute to 60th anniversary)
  • 4. Long term languages trends (TIOBE) LANGUAGE 2018 2013 2008 2003 1998 1993 1988 Java 1 2 1 1 15 - - C 2 1 2 2 1 1 1 C++ 3 4 3 3 2 2 5 Python 4 7 6 12 23 18 - C# 5 5 7 8 - - - Javascript 7 10 8 7 19 - - Perl 11 8 5 4 3 12 LISP 31 11 15 13 8 4 3
  • 5. Why language matter? It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Edsger Wybe Dijkstra
  • 6. Why language matter? Computer programs are all just text. And the language you choose determines what you can say. Programming languages are what programmers think in. Paul Graham
  • 7. John McCarthy In 1960, John McCarthy published a remarkable paper in which he did for programming something like what Euclid did for geometry. He showed how, given a handful of simple operators and a notation for functions, you can build a whole programming language Paul Graham
  • 8. LISP Origins A programming system called LISP (List Processor) has been developed for the IBM 704 computer by the Artificial Intelligence group at M.I.T. The system was designed to facilitate experiments with a proposed system called the Advice Taker, whereby a machine could be instructed to handle declarative as well as imperative sentences and could exhibit “common sense” in carrying out its instructions. John McCarthy
  • 9. Original LISP Syntax  S-Expressions (for “symbolic expression”): ( · ) + an infinite set of atomic symbols: AB (A · B) ((AB · C) · D) (A·((B ·(C · NIL)) ·(D · NIL)))  M-Expressions: car[x] car[cons[(A · B);x]]  cons (“construct”)  car (“contents of address register”)  cdr (“contents of decrement register”)
  • 10. LISP VS Fortran/Algol ancestor var animals = new[] { "dog", "cat", "rat" }; void PrintAnimals() { foreach (var animal in animals) { Console.WriteLine(animal); } } PrintAnimals(); #lang racket (define animals (list "dog" "cat" "rat")) (define (print-animals x) (map print animals)) (print-animals)
  • 11. LISP Innovations  IF Statement  Garbage collection  Function as a first-class datatype  Lambda-expressions  Functional programming  Homoiconic syntax + eval  Metaprogramming  Continuations  Multiple dynamic dispatch (aka Multimethods)  Recursion  Lisp machines (HLLCA)
  • 12. Primary dialects  Scheme (1970)  Common LISP (1984)  Clojure (2007)
  • 13. Metaprogramming (defn pow2 [x] (* x x)) (defn inc [x] (+ x 1)) (def strategy (read-string "[pow2 inc inc]")) ; user input (def input (read-string "12")) ; user input ((apply comp (eval strategy)) input) ; 196
  • 14. Metaprogramming (2) (defn drive-to-home [] "driving to home") (defn drive-to-work [] "driving to work") (defn drive-to-garage [] "driving to garage") (defn recharge [] "recharging") (defn get-driving-program [] `(drive-to-home drive-to-work recharge drive-to-garage)) (map #(println (%)) (map eval (get-driving-program)))
  • 15. Macros: definition #lang racket (define-syntax (show-this stx) (print stx) (syntax(void))) ;#<syntax:3:2 (show-this (quote (+ 1 2)))> A macros is a syntactic form with an associated transformer that expands the original form into existing forms. To put it another way, a macro is an extension to the LISP compiler. Using macro you can create:  New language features  DSL
  • 16. Macros: creating missing constructs ;while macros application (define x 10) (while (> x 0) do (displayln x) (set! x (- x 1))) ; prints 10, 9, 8 , 7, 6, 5, 4, 3, 2, 1 ;while macros definition (define-syntax while (syntax-rules (do) [(while cond do body ...) (let loop () (when cond body ... (loop)))]))
  • 17. Macros: changing evaluation strategy ;while macros application (take 5 Nat) ; '(1 . #<promise:...0>) (!! (take 5 Nat)) ;'(1 2 3 4 5) #lang lazy ;sequence: a_(n+1) = f(a_n) (define inf-seq (lambda (a0 f) (cons a0 (inf-seq (f a0) f)))) (define natural (inf-seq 1 (lambda (x) (+ x 1))))
  • 18. Macros: changing type system ;This code will fail to compile ;Type Checker: type mismatch expected: Integer (define test (λ () (factorial 7.5))) #lang typed/racket (: factorial : Integer -> Integer) (define (factorial n) (if (<= n 0) 1 (* n (factorial (- n 1)))))
  • 19. Macros: getting rid of parentheses (t-expressions) #lang sweet-exp typed/racket define: factorial([n : Integer]) : Integer if {n <= 1} 1 {n * factorial{n - 1}} factorial 5 ;- : Integer 120 #lang sweet-exp racket define factorial(n) if {n <= 1} 1 {n * factorial{n - 1}} factorial 5 ;120
  • 20. Continuations (define (f return) (return 2) 3) (display (f (lambda (x) x))) ; displays 3 (display (call-with-current-continuation f)) ; displays 2 Continuation is an abstract representation of the control state of a computer program The "current continuation" is the continuation that, from the perspective of running code, would be derived from the current point in a program's execution
  • 21. Continuations (2) (test) ; 1 (the-continuation) ; 2 (the-continuation) ; 3 ; store the current continuation ; (which will print 4 next) away (define another-continuation the-continuation) ; reset the-continuation (test) ; 1 (the-continuation) ; 2 ; use the previously stored continuation (another-continuation) ; 4 (define the-continuation #f) (define (test) (let ((i 0)) ; call/cc calls its first function argument, passing ; a continuation variable representing this point in ; the program as the argument to that function. ; In this case, the function argument assigns that ; continuation to the variable the-continuation. (call/cc (lambda (k) (set! the-continuation k))) ; The next time the-continuation is called, we start here. (set! i (+ i 1)) i))
  • 22. Multiple dynamic dispatch (require multimethod) (struct asteroid ()) (struct space-ship ()) (define-generic (collide a b)) (define-instance ( (collide asteroid space-ship) a b) (println "Asteroid collided with the space ship")) (define-instance ( (collide space-ship asteroid) a b) (println "Space ship collided with the asteroid")) Multimethods are functions that can have many different implementations depending on the types of arguments they are invoked on. For example, a generic add function might have different implementations for adding scalars and vectors.
  • 23. Projects implemented in LISP  EMACS  Autodesk (3D creation and editing suite)  Mirai (3D creation and editing suite)  Maxima (computer algebra system)  Viaweb (Yahoo Store)  ITA Software (Google Flights)  NASA Deep Space 1  https://franz.com/success/
  • 24. Rich Hickey & Clojure We should aim for simplicity because simplicity is a prerequisite for reliability. The benefits of simplicity are: ease of understanding, ease of change, ease of debugging, flexibility. Rich Hickey from Simple Made Easy
  • 26. LISP Quotes In a Lisp program, you can write a program that writes Lisp programs so it has a kind of open future; now, no… no-one actually does that yet, but it’s still possible. In the other languages, it's almost… you can’t write a C program that will write a C program, it’s just… there aren’t any verbs of the right kind, so to me programming hasn’t changed much in 50 years because they got locked into this… strange set of limitations. Marvin Minsky
  • 27. LISP Quotes The most powerful programming language is Lisp. If you don't know Lisp (or its variant, Scheme), you don't appreciate what a powerful language is. Once you learn Lisp you will see what is missing in most other languages. Richard Stallman
  • 28. LISP Quotes OOP to me means only messaging, local retention and protection and hiding of state- process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. LISP is the greatest single programming language ever designed, the most important idea in computer science. Alan Kay
  • 29. LISP Quotes LISP has been jokingly described as "the most intelligent way to misuse a computer". I think that description a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. Edsger Wybe Dijkstra
  • 30. If Lisp is so great, why it is unpopular?  There were too many dialects  LISP was too demanding for mainstream hardware in the ’70s  In languages, as in so many things, there's not much correlation between popularity and quality  Languages are not merely technologies, but habits of mind as well, and nothing changes slower
  • 31. Resources  Structure and interpretation of computer programs  http://web.mit.edu/alexmv/6.037/sicp.pdf  Hackers and painters  Google Play Books  Amazon  Realm of Racket  http://www.realmofracket.com/  Living Сlojure  Oreilly  Practical Common Lisp  http://www.gigamonkeys.com/book/

Editor's Notes

  1. What's wrong with VB and similar languages? I think they do not promote wishful thinking.
  2. John McCarthy is famous as AI pioneer. (AI term itself belongs to him) The mentioned article is Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I
  3. S-Expressions are AST itself
  4. while statement is missing by default
  5. Lisp/Racket uses Eager evaluation by default, but connection of the lazy module swathes it to Lazy
  6. LISP/Scheme/Racket are dynamically typed languages, but you can change it
  7. Combining different langusages
  8. What's wrong with VB and similar languages? I think they do not promote wishful thinking.