Андрій Єршов: «Два вигляду програмування»

Ця замітка з'явилася на світло при міркуванні про розробку програмного забезпечення як людської діяльності. Якщо в цьому плані розглядати роботу програміста, то потрібно розрізняти два, як мені здається, досить різних її види: до однієї з них програміст відноситься як слуга, а до іншої — як господар.



Розвинемо цю тезу детальніше.

Коли я думаю про програміста як про господаря, я маю на увазі, що він програмує для себе. Маючи всі ресурси, всі кошти (віртуально або фізично — неважливо!) у своєму розпорядженні, він є єдиним і остаточним суддею своїх дій та їх результату.

Коли я думаю про програміста-слузі, то він мені уявляється насамперед у вигляді каналу зв'язку, що сприймає пред'явлену йому специфікацію завдання. Відповідальність програміста за правильність специфікації вельми обмежена, з іншого боку, він приймає на себе зобов'язання старанно реалізувати прийняті специфікації та видати клієнту програму-продукт (для разового рахунку або постійного застосування— неважливо!).

Природно, що це розходження помічалося багатьма. Ф. Л. Бауер [1] називає роботу програміста-слуги програмуванням за контрактом. Відповідно можна назвати роботу програміста-господаря програмування для себе. Е. Сандевал [2] розвиває близький підхід, виділяючи групу «кінцевих» програмістів. Іноді це розходження проводять, вживаючи для слуги і господаря терміни професійного і непрофесійного програмування відповідно. Таке трактування допустима, якщо ми будемо досліджувати соціальну сторону програмування як, наприклад, його професійну етику. Якщо ж говорити про програмування, маючи на увазі його внутрішній зміст, то в цьому випадку погляд на програміста-господаря як на непрофесіонала може призвести до непорозумінь.

Читати далі →

Швидкий старт кастомного docker-контейнера на платформі OpenShift

З'явилася необхідність створити хмарний сервіс і для реалізації цього проекту було обрано open source рішення OpenShift. Після успішного проходження Getting Started і деплоя HelloWorld, виникли несподівані труднощі: офіційна документація вимагає детального вивчення для вирішення такої простої задачі, як підняти свій готовий контейнер, з довільним змістом. Довелося трохи розібратися і нижче просте готове керівництво. Мається на увазі, що читач знайомий з docker, т. к. пояснень його команд в даному мануалі немає.
Читати далі →

Microsoft їде на "Страйк"! Промо-коди для охочих придбати квитки

Друзі, 22-23 квітня в Ульяновске відбудеться 5-я міжнародна IT-конференція «Страйк», яка в одному місці збирає експертів зі світу інформаційних технологій. Ми дуже любимо цю конференцію, щорічно відвідуємо і виступаємо спонсорами.



В цьому році компанія Microsoft традиційно взяла активну участь у підготовці активностей декількох секцій. Відразу декілька спікерів від Microsoft будуть чекати вас на «Страйку».

Гостем секції «Менеджмент і освіта» стане Микола Страх,  підприємець і трекер ФРИИ, експерт з BigData і Internet of Things.

22 квітня о 10:30 він відкриє Страйк своєю доповіддю «Акселератор ФРИИ і Майкрософт: від технологічного рішення до масштабованого бізнесу», а 23 квітня проведе майстер-клас під назвою «Студії цифрових рішень: внутрішні і клієнтські проекти. Як не зганьбитися і заробити гроші на стартапі».

Читати далі →

Розробка JavaScript API: 5 принципів написання вбудованих скриптів

Напевно, ви стикалися з принципами (нехай і суперечливими) про написання модулів і класів на JavaScript. Коли мені знадобилося написати вбудований в веб-сторінку скрипт, який надає API для роботи певного сервісу, то я не зміг знайти гідних рекомендацій про проектуванні подібних скриптів.
Отже, ось (досить очевидні) вимоги до скрипту, з якими я зіткнувся:
  • він буде вбудовуватися в сторінки сторонніх веб-додатків;
  • він повинен якісно виконувати свою роботу;
  • він повинен завантажуватися швидко;
  • він не повинен (непередбачене) впливати на роботу веб-додатки;
  • повинен відповідати вимогам безпеки;
  • … // багато чого ще :)
image
З реальної практики народилися принципи, описані нижче. Це не повністю унікальні ідеї, а скоріше збірка кращих практик, яких я бачив у чужих рішеннях, наприклад, в библиотечках google analytics і jquery.
Читати далі →

День народження Єршова

«Елітарність програмістів мені здається очевидною і в цьому поданні є цікавим викликом людству в цілому.»
— Андрій Петрович Єршов



«Суть проблеми в тому, щоб визнати, що програмування вимагає від людини кілька особливого погляду на світ, його потреби і еволюцію, особливої моральної підготовленості до свого обов'язку. Програміст — це солдат технічної революції і як такий повинен володіти революційним мисленням.»
— А. П. Єршов

Дональд Кнут згадував: «Це почалося ще коли я був студентом останнього курсу. Тоді тільки з'явилася книга Андрія «Програмування для БЕСМ», і ми, група студентів, змогли переконати викладача російської мови включити її в курс в якості одного з двох збірників текстів для вивчення наукової лексики».

Єршов потім водив дружбу з Батогом і Сеймуром Пейпертом, розробив Російська алгоритмічна мова, який народ за очі називав «Ершол». У 1985 створив серію навчальних телепередач для навчання програмуванню школярів (радянський MOOC), через рік звозив групу школярів-програмістів в Америку, а через рік прийняв у Новосибе відповідну делегацію американських школярів програмістів. (До речі, якщо ви знаєте учасників цих подій — відпишіться в коментах або в лічку.)

Сьогодні, разом з компанією Edison, пропонуємо всім відзначити день народження Андрія Петровича. Заслуги і внесок Єршова в радянських (і світовий) програмування описані в Википедии, мені ж захотілося заглянути трохи глибше і пошукати фото першоджерела. Пару годин покопався в архів. Знайшов дещо цікаве. Під катом — багато картинок і дві фундаментальні научпоп статті Єршова про важливість програмування.

А це Єршов і МакКарти якщо що:
image


Читати далі →

Шпаргалка Java програміста 7.2 Типові завдання: Обхід Map'и, підрахунок кількості входжень підрядка

image
У мене є хобі: я збираю різні рішення типових завдань в Java, які знаходжу в інеті, і намагаюся вибрати найбільш оптимальний за розміром/продуктивності/елегантності. В першу чергу по продуктивності. Давайте розглянемо таку типові задачі, які часто зустрічаються в програмування на Java як "обхід Map'и" і підрахунок кількості входжень рядків, різні варіанти їх рішень (включаючи "красиві" і не дуже) та їх продуктивність.
Англійські версії можна знайти на Stackoverflow: з обходу map's, за підрахунком входжень підрядків.
Так само раджу подивитися мій opensource проект useful-java-links — можливо, найбільш повна колекція корисних бібліотек Java та фреймворків.
Загальний зміст 'Шпаргалок'1. JPA і Hibernate в питаннях і відповідях
2. Триста п'ятдесят найпопулярніших не мобільних Java opensource проектів на github
3. Колекції в Java (стандартні, guava, apache, скарб, gs-collections та інші)
4. Java Stream API
5. Двісті п'ятдесят російськомовних навчальних відео доповідей і лекцій про Java
6. Список корисних посилань для Java програміста
7 Типові завдання
  7.1 Оптимальний шлях перетворення InputStream в рядок
  7.2 найпродуктивніший спосіб обходу Map'и, підрахунок кількості входжень підрядка
Читати далі →

Symfony: обробка запитів в API

image

Я думаю, для багатьох не секрет, що компонент Form погано підходить для роботи в API,
кожен винаходить свій велосипед на заміну, одним з таких велосипедів я вирішив поділитися. На звання «кращого рішення» я не претендую, але якщо моє рішення комусь буде корисно, або я отримаю нові знання – буде дуже здорово.

Читати далі →

Конференція Ladies Code: Дівчата в IT 26 квітня в Москві

Вже зовсім скоро ми AppTractor.ru проводимо у Москві конференцію Ladies Code. Мета нашої конференції — підтримати жінок у їх прагненні розвивати технології і поділитися кращими прикладами побудови успішної кар'єри в ІТ.


Читати далі →

Шпаргалка Java програміста 7.1 Типові завдання: Оптимальний шлях перетворення InputStream в рядок


У мене є хобі: я збираю різні рішення типових завдань в Java, які знаходжу в інеті, і намагаюся вибрати найбільш оптимальний за розміром/продуктивності/елегантності. В першу чергу по продуктивності. Давайте розглянемо таку типову завдань, які часто зустрічаються в програмування на Java як "перетворення InputStream в рядок" і різні варіанти її вирішення.
Подивимося які обмеження є у кожного (вимоги підключення певної бібліотеки певної версії, коректна робота з unicode і т. д.). Англійську версію цієї статті можна знайти в моїй відповіді на stackoverflow. Тести в моєму проекті на github.
Загальний зміст 'Шпаргалок'1. JPA і Hibernate в питаннях і відповідях
2. Триста п'ятдесят найпопулярніших не мобільних Java opensource проектів на github
3. Колекції в Java (стандартні, guava, apache, скарб, gs-collections та інші)
4. Java Stream API
5. Двісті п'ятдесят російськомовних навчальних відео доповідей і лекцій про Java
6. Список корисних посилань для Java програміста
7 Типові завдання
  7.1 Оптимальний шлях перетворення InputStream в рядок
Якщо ви ще не бачив, раджу подивитися статтю Список корисних посилань для Java програміста, на мій погляд найбільш корисна з усіх моїх статей на даний момент.
Читати далі →

Динамічна онтологія. Як інженери Palantir пояснюють це ЦРУ, АНБ і військовим

Компанія Palantir є четвертою по крутості приватною компанією Кремнієвої долини (після Uber, Xiaomi і Airbnb). Поки Palantir збирає інформацію про все на світі, ми збираємо інформацію про нього. Разом з компанією Edison продовжуємо розслідування можливостей платформи Palantir.



ИТишники додумалися як ефективно «монетизувати математику і алгоритми» (Сегалович, Бакунов), PayPal Mafia додумалася як монетизувати гаджети Феанора філософію (капіталізація Palantir — 20 мільярдів доларів).

У десятихвилинної лекції співробітник компанії Palantir розповість про центральну концепцію їх системи — динамічну онтологію.


0:00 Привіт, я Ашер Синенски, інженер по розгортанню технологій Palantir. Я поговорю про динамічної онтології.
0:08 Очевидно, зараз, ці два слова виглядають для вас досить туманно, сподіваюся, що до кінця розмови ви зрозумієте, який сенс ми в них вкладаємо.
0:17 Перед тим як переходити до справи, поясню: у багатьох людей проблеми зі словом онтологія. Що ми розуміємо під цим словом?
0:24 Якщо ви подивитеся на корені цього слова, то воно утворене від грецьких «онтос» (буття) і «логія» (вивчення чого-небудь). По суті, онтологія – це категоризація світу.
0:34 Є багато термінів, які люди використовують для опису цього: таксономія, схематизатор моделі даних. Але ми використовуємо це, в більш широкому сенсі, як ідею, що ми дійсно категоризируем світ якимось чином.
0:43 Ідея про побудові онтології для вивчення світу не нова. Першим, хто затвердив цю ідею, був мужик на ім'я Платон. Ідея Платонівського реалізму, в основному, про те, що є реальні речі, а є наше уявлення про речі.

Читати далі →