Upgrade to Pro — share decks privately, control downloads, hide ads and more …

It Goes Wrong

It Goes Wrong

Presented on rannts #6
http://www.it52.info/events/2015-07-25-rannts-6

Links from the presentation:

* 68% software projects failed
http://www.iag.biz/images/resources/iag%20business%20analysis%20benchmark%20-%20full%20report.pdf

* No Silver Bullet — Essence and Accidents of Software Engineering
http://worrydream.com/refs/Brooks-NoSilverBullet.pdf

* Out of the Tar Pit
http://shaffner.us/cs/papers/tarpit.pdf

* Pyrsistent
https://github.com/tobgu/pyrsistent

* Are We There Yet?
http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

* The Database as a Value
http://www.infoq.com/presentations/Datomic-Database-Value

* PyPy STM
http://doc.pypy.org/en/latest/stm.html

* SOLID
https://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

* Dijkstra quote came from
http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1969.PDF

* Bret Victor - The future of the programming
https://vimeo.com/71278954

* Bret Victor - Inventing on principle
https://vimeo.com/36579366

* Glenn Vanderburg - Real Software Engineering
http://www.youtube.com/watch?v=NP9AIUT9nos

* Alan Kay - Programming and scaling
http://www.tele-task.de/archive/lecture/overview/5819/

* Zed A. Shaw - The Top 10 Ways To Scam The Modern American Programmer
http://www.youtube.com/watch?v=neI_Pj558CY

* Michael O. Church - Why “Agile” and especially Scrum are terrible
https://michaelochurch.wordpress.com/2015/06/06/why-agile-and-especially-scrum-are-terrible/

* Michael O. Church - Software’s management problem
https://michaelochurch.wordpress.com/2015/06/07/softwares-management-issues/

Sergey Arkhipov

June 25, 2015
Tweet

More Decks by Sergey Arkhipov

Other Decks in Programming

Transcript

  1. Чистота ← Все очень плохо Инженерия — не искусство создавать.

    Скорее, это искусство не создавать. Или искусство делать хорошо за один доллар то, что любой растяпа сделает за 2. ― Arthur Mellen Wellington.
  2. Мотивационный слайд ← Все очень плохо Мы как программисты ―

    Мы — инженеры нового поколения; ― Меняем мир к лучшему; ― Меняем жизнь людей к лучшему; ― Обустраиваем новый технологический уклад; ― Получаем много денег;
  3. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  4. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  5. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  6. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  7. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  8. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  9. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  10. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ―
  11. Проблемы, которые мы обсуждаем ← Все очень плохо Проблемы, которые

    мы решаем: ― Vim vs Emacs ― Linux vs Windows ― Tabs vs spaces ― Python vs Ruby ― Angular.js vs React.js ― RDBMS vs NoSQL ― node.js ― Meteor ― Ada initiative
  12. Наши проблемы ← Все очень плохо Наши проблемы ― Проблемы

    коммуникаций; ― Проблемы методологий; ― Проблемы разработки;
  13. Проблемы коммуникаций ← Все очень плохо ― Нам приходится разговаривать

    с живыми людьми ― Цели менеджмента и цели программистов расходятся ― Взгляды на продукт у менеджмента и разработки различные ― Мы не умеем оценивать время ― Мы — коты, и нас нужно пасти
  14. Проблемы методологий ← Все очень плохо ― 1940-1969 — ???

    ― 1969 — Software Engineering conference (NATO, Garmish, Germany) ― 1970 — Managing the Development of Large Software Systems (Dr. Winston W. Royce) ― 2000 — XP (Kent Back) ― 2001 — Agile Software Development with Scrum (Schwaber, Beedle) ― 2003 — Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Anderson) ― 2003 — Rational Unified Process (IBM, Rational)
  15. Проблемы методологий ← Все очень плохо ― 1940-1969 — ???

    ― 1969 — Software Engineering conference (NATO, Garmish, Germany) ― 1970 — Managing the Development of Large Software Systems (Dr. Winston W. Royce) ― 2000 — XP (Kent Back) ― 2001 — Agile Software Development with Scrum (Schwaber, Beedle) ― 2003 — Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Anderson) ― 2003 — Rational Unified Process (IBM, Rational)
  16. Waterfall ← Все очень плохо I believe in this concept,

    but the implementation described above is risky and invites failure.
  17. Waterfall ← Все очень плохо An implementation plan to manufacture

    larger software systems, and keyed only to these steps, however, is doomed to failure.
  18. RUP ← Все очень плохо Rational Unified Process ― Establish

    and document requirements; ― Design and document the module structure; ― Design and document the module interfaces; ― Design and document the uses hierarchy; ― Design and document the module internal structures; ― Write programs ― Maintain
  19. RUP ← Все очень плохо […] the picture of the

    software designer deriving his design in a rational way from a statement of requirements is quite unrealistic. No system has ever been developed in that way, and probably none ever will. ― David Parnas;
  20. SCRUM ← Все очень плохо ― Business-driven development; ― Дает

    возможность работать только на одном уровне; ― Разработан исключительно для маленьких команд в небольших организациях; ― Много ложных срабатываний в определении низкой производительности; ― Агрессивный маркетинг;
  21. Краткая выжимка ← Все очень плохо 1940-2015 (75 лет) ―

    Мы поняли, что инженерная культура лучше бизнес- культуры; ― Люди с большим опытом заняты все той же работой, что и люди с низким опытом; ― Мы тратим на совещания все столько же времени (Waterfall = Scrum); ― Эффективность совещаний остается прежней и столь же сомнительной; ― ~70% проектов все так же проваливается;
  22. Hofstadter's law ← Все очень плохо Hofstadter's law It always

    takes longer than you expect, even when you take into account Hofstadter's Law.
  23. Programming, motherfucker ← Все очень плохо Programming motherfucker (Zed A.

    Shaw) ― Fill the to-do list; ― Select the task; ― Do; ― Repeat until it finished.
  24. Сложность ПО ← Все очень плохо Сложность бывает ― Естественная

    (Accidental); ― Привнесенная (Essential); No Silver Bullet — Essence and Accidents of Software Engineering (Fred Brooks) Out of the Tar Pit (B. Mosley, P. Marks)
  25. Python ← Все очень плохо def qsort(arr): if not arr:

    return [] less = [el for el in arr if el < arr[0]] more = [el for el in arr if el >= arr[0]] return qsort(less) + [arr[0]] + qsort(more)
  26. Clojure ← Все очень плохо (defn qsort [[pivot & xs]]

    (when pivot (let [smaller #(< % pivot)] (lazy-cat (qsort (filter smaller xs)) [pivot] (qsort (remove smaller xs)) ))))
  27. Python ← Все очень плохо def qsort(arr): if not arr:

    return [] with arr_lock: less = [el for el in arr if el < arr[0]] more = [el for el in arr if el >= arr[0]] return qsort(less) + [arr[0]] + qsort(more)
  28. Python ← Все очень плохо def qsort(arr): arr = copy.deepcopy(arr)

    if not arr: return [] less = [el for el in arr if el < arr[0]] more = [el for el in arr if el >= arr[0]] return qsort(less) + [arr[0]] + qsort(more)
  29. Python ← Все очень плохо def qsort(arr, first_time=True): if first_time:

    arr = copy.deepcopy(arr) if not arr: return [] less = [el for el in arr if el < arr[0]] more = [el for el in arr if el >= arr[0]] return qsort(less, False) + [arr[0]] + \ qsort(more, False)
  30. Python ← Все очень плохо def qsort(arr, first_time=True): if first_time:

    arr = copy.deepcopy(arr) if not arr: return [] less = [el for el in arr if el < arr[0]] more = [el for el in arr if el >= arr[0]] return qsort(less, False) + [arr[0]] + \ qsort(more, False)
  31. Наконец-то про Рича Хикки ← Все очень плохо В терминах

    Рича Хикки ― Идентичность (Identity) — логическая связка группы значений; ― Значение (Value) — чем является объект в какой-то момент времени; ― Состояние (State) — набор всех идентичностей в какой- то момент времени; ― Время (Time) — относительный порядок значений в идентичности. ― Are we There Yet? ― The Database as a Value
  32. ФП в реальном мире ← Все очень плохо Что удалось

    выкрасть из ФП: ― Иммутабельность строк ― Streams в Java 8 ― Лямбды ― Функции высшего порядка Дополнительно в Python: ― Ленивые коллекции (генераторы) ― Списковые выражения (сахар вокруг map, filter, reduce) ― Частичное применение (functools.partial) ― …
  33. Проблемы ООП ← Все очень плохо Основные проблемы ООП: ―

    Идентичность смешивается со значением; ― Значения меняются внезапно и неконсистентно; ― Для консистентных изменений мы используем локи (привет 70е); ― Сложность состояния тождественна равна непредсказуемости и несогласованности изменения состояния;
  34. Clojure STM ← Все очень плохо (def acc1 (ref 100))

    (def acc2 (ref 200)) (println @acc1 @acc2) (defn transfer-money [a1 a2 amount] (dosync (alter a1 - amount) (alter a2 + amount) amount)) (transfer-money acc1 acc2 20) (println @acc1 @acc2)
  35. Чистота ← Все очень плохо Хороший дизайн — такой, в

    котором программу более невозможно разорвать на отдельные куски.
  36. Сложность ПО ← Все очень плохо def finish_task(task): update_db(task) ...

    how_to_finish = finish_task how_to_finish = cleaning_leftovers(how_to_finish) how_to_finish = sending_email(how_to_finish) how_to_finish(task)
  37. Чистота ← Все очень плохо Testing shows the presence, not

    the absence of bugs ― Edsger Dijkstra (1969, the first conference on software engineering)
  38. Ссылки ← Все очень плохо ― Все презентации Рича Хикки

    (Rich Hickey); ― Bret Victor — The Future of programming; ― Bret Victor — Inventing on principle; ― Glenn Vanderburg — Real software engineering; ― Alan Kay — Programming and scaling; ― Zed A. Shaw — 10 Ways To Scam The Programmer; ― Michael O. Church — Why “Agile” is terrible ― Michael O. Church — Software’s management problem ― Richard Hamming — The Art of Doing Science and Engineering ― Alfred North Whitehead — Process and reality;