Зачем обычному программисту знать языки, на которых почти никто не пишет. Алексей Воинов, Яндекс
Upcoming SlideShare
Loading in...5
×
 

Зачем обычному программисту знать языки, на которых почти никто не пишет. Алексей Воинов, Яндекс

on

  • 10,832 views

Алексей Воинов, Яндекс ...

Алексей Воинов, Яндекс

Закончил МГТУ им. Н.Э.Баумана в 1998 году. Посвятил часть своей жизни свободному программному обеспечению. Замечен в любви к языкам, как к алгоритмическим, так и к человеческим, как к естественным, так и к искусственным. Работает в Яндексе с 2009 года, занимается разработкой Яндекс.Почты.

Тема доклада
Зачем обычному программисту знать языки, на которых почти никто не пишет.

Тезисы
Есть категория алгоритмических языков, которые большинство программистов считает в лучшем случае странными. Это такие языки как Haskell, *ML, Lisp, Q. «Странные» языки не приживаются в промышленной разработке софта, потому что они не дают возможности писать стандартный «промышленный» код. Однако они бывают очень хороши для придумывания приёмов, которые помогают улучшить промышленный код. Впоследствии многие из них становятся стандартными промышленными. Знание «странных» языков очень полезно, когда в силу внешних обстоятельств сделать промышленный код радикально лучше невозможно, но его можно улучшать небольшими шагами.

Statistics

Views

Total Views
10,832
Views on SlideShare
1,276
Embed Views
9,556

Actions

Likes
0
Downloads
19
Comments
0

21 Embeds 9,556

http://yac2011.yandex.ru 5942
http://yac2011.yandex.com 2118
http://events.yandex.ru 749
http://ya-events.narod.ru 392
http://tech.yandex.ru 161
http://external.events.test.tools.yandex-team.ru 52
http://web-chib.events.pavo.yandex-team.ru 46
http://events.indus.yandex.ru 41
http://web-chib.events.lacerta.yandex-team.ru 12
https://tech.yandex.ru 8
http://yakushevsky.events.lacerta.yandex.ru 8
http://yac.tadatuta.graymantle.yandex.ru 6
http://events.lynx.yandex.ru 4
http://target126g.load.yandex.net 4
http://yakushevsky.events.pavo.yandex.ru 4
http://yaconf2011.narod.ru 3
http://test1e.tech.yandex.ru 2
http://target122g.load.yandex.net 1
http://events.apus.yandex.ru 1
http://web-chib.events.lacerta.yandex.ru 1
http://events.yandex-team.ru 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Зачем обычному программисту знать языки, на которых почти никто не пишет. Алексей Воинов, Яндекс Зачем обычному программисту знать языки, на которых почти никто не пишет. Алексей Воинов, Яндекс Presentation Transcript

    • Зачем изучать языки,на которых почти не пишутАлексей Воиновразработчик-экспертYaC, Москва, 19 сентября 2011 года
    • О чём это? 2
    • Функциональные vs ИмперативныеПромышленные vs Академические 3
    • О чём это? 4
    • О чём это? 5
    • 6 6
    • 6+1 7
    • 8
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Общение Работа 9
    • Любопытство 10
    • clojure(def N (atom 0))(defn foo [] (dotimes [i 100000] (swap! N inc)))(defn start-threads [] (let [t1 (Thread. foo) t2 (Thread. foo)] (do (.start t1) (.start t2) (.join t1) (.join t2))))(defn main [] (start-threads) @N) 11
    • haskell или q?fact 0 = 1;fact N = N * fact (N - 1); 12
    • gambit-c (scheme)(define fifo (open-vector))(define (suspend-and-die!) (call-with-current-continuation (lambda (k) (write (call-with-output-string () (lambda (p) (output-port-readtable-set! p (readtable-sharing-allowed?-set (output-port-readtable p) serialize)) (write obj p))) fifo) (newline fifo) (force-output fifo) (thread-terminate! (current-thread))))) 13
    • whitespace ......».».$ ...»».»»»»$ ...»».»»..$ ...»».»»..$ ...»»..».»$ ...»..»...$ »$ ..»$ ..»$ ..»$ ..»$ ..»$ ..$ $ $ 14
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Работа Общение 15
    • Видение мира 16
    • Первый взгляд(define (factorial n) (letrec ((helper (lambda (n a) (if (<= n 1) a (helper (- n 1) (* a n)))))) (helper n 1))) 17
    • Что видят лисперы(define (factorial n) (letrec ((helper (lambda (n a) (if (<= n 1) a (helper (- n 1) (* a n)))))) (helper n 1))) 18
    • С + Assemblyprintf("%dn", (int *)2 + 3)); movl $2, %eax addl $12, %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf 19
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Работа Общение 20
    • Понимание 21
    • С++ / Schemestd::for_each(str.begin(), str.end(), phx::if_(phx::bind(std::isalpha<char>, _1, phx::construct<std::locale>())) [ phx::let(_a = phx::ref(char_counts)[_1]) [ ++_a ] ]); 22
    • Больше слов 23
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Работа Общение 24
    • Заимствование 25
    • Haskell + C++ 26
    • Scheme + Erlang = Termite(let ((me (self))) (spawn (lambda () (! me "Hello, world!"))))(?) Hello, world! 27
    • …?key=value&...string::size_type s = 0;string::size_type e = src.find("=");while(e != string::npos) { string::size_type a = src.find("&"); if(a != string::npos) { ... 28
    • …?key=value&...typedef iterator_range<string::iterator> Ir;std::vector<Ir> params;split(params, make_iterator_range(src.begin(), src.end()), _1 == &);BOOST_FOREACH(Ir& ir, params) { ... 29
    • …?key=value&...lazy_split_iterator s(src.begin(), src.end(), &), e;for_each(s, e, ... 30
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Работа Общение 31
    • Мы пишемплохой код 32
    • Есть причины некогда думать унаследованный код лень 33
    • Знаем больше больше видим лучше понимание знаем новые идеи не боимся их применять 34
    • Работаем лучше пишем чище пишем быстрее больше времени лучше код 35
    • Зачем учить? Любопытство Видение мира Понимание Заимствование Работа Общение 36
    • Круг общения 37
    • Повод похвастаться 38
    • Y-combinator 39
    • Зачем учить? Спокойный сон Больше информации Тренировка ума Хорошие решения Чистый код Признание и авторитет 40
    • Учите языки 41
    • Спасибо Алексей Воинов voins@yandex-team.ru http://voins.program.ru/yac.html Вопросы?