Рубрика «философия программирования» - 2

Американцы вполне себе вложились в мировую и тем-более англоязычную литературу. Лучше сказать, что так называемый золотой век американской фантастики это один из последних витков развития мировой литературы, если не последний.

Философия программирования 11 — фантастика сегодня - 1

Читать полностью »

JavaScript в 2016 году: функциональное программирование пришло всерьез и надолго - 1В 2015 году вы могли заметить перемены в способе разработки приложений на JavaScript. Разработчики уходят от непредсказуемой архитектуры с мутабельным состоянием в сторону более предсказуемой иммутабельной архитектуры приложений.

С такими фреймворками как Backbone, было принято синхронизировать сами данные и представление данных – для этого приходилось вручную подписываться на нужные события dom. Такой способ был подвержен ошибкам и вынуждал использовать слишком много типового кода. Пришел Angular и исправил это с помощью автоматизированного двустороннего биндинга.

Но сейчас все движется в другом направлении.
Читать полностью »

Термин «О-большое», знакомый нам из курса матанализа, был введён Паулем Бахманом в конце XIX века для описания асимптотического поведения функций. В конце 1970-х Дональд Кнут придумал применять этот термин для оценки эффективности и ресурсоёмкости алгоритмов, благодаря чему с «О-большим» знакомо большинство программистов. Понимание асимптотики быстродействия и ресурсоёмкости даёт возможность выбрать наиболее подходящий метод решения задачи в зависимости от текущих потребностей. «Плохая» асимптотика позволяет сразу же отбросить неподходящий метод.

«А как всё хорошо начиналось...», или О пользе O-нотации не только для анализа алгоритмов - 1

Идею, которой я хочу поделиться, глубокой не назовёшь: скорее, она лежит на поверхности, но далеко не все её замечают.
Методами, похожими на анализ алгоритмов, можно пользоваться для того, чтобы оценить асимптотику характеристик системы управления проектом разработки программного продукта, таких как общее время и стоимость разработки дополнительной функциональности.

Читать полностью »

… но это нормально. Любое проектирование отстой. И всегда будет отстоем.

Если вы мне не верите, давайте объясню…

Ни один проект не переживает встречи с реализацией

Когда вы начинаете реализовывать то, что напроектировали, вы неизбежно сталкиваетесь с такими вещами в реальности, которые никак не соответствуют вашим первоначальным ожиданиям.

Данные, которые вы ожидали как обязательные в ответе внешнего сервиса, могут отсутствовать (или быть невалидными). Ожидаемая уникальность может оказаться совсем не уникальной на практике (даже в sha1 когда-нибудь случаются коллизии). Процессы, которые предполагались надежными, будут падать гораздо чаще, чем вы ожидали.

Это нормально.

В некоторых случаях вы можете просто затаймаутиться, выкинуть исключение или еще как-нибудь громко упасть. В других случаях приходится ослабить требования системы. Или добавлять дополнительный фильтрующий слой, который займется «очисткой» и передаст в систему уже правильный вариант входных данных.

Недостающие данные могут быть сделаны опциональными или заменены умолчальными.

Некорректные данные можно рассматривать как отсутствующие, либо записывать их «как есть» и добавить дополнительную провалидированную версию, которая присутствует только если оригинал валидный.

Ограничение уникальности можно Читать полностью »

Я наткнулся на этот прекрасный текст (под катом) в книге Вернора Винджа "Глубина в небе". Фрагмент меня впечатлил на столько, что я решил поделиться своими мыслями с общественностью. Не часто встретишь подобную проработку вопроса в художественной литературе. Местами, текст кажется слегка… простетским, но возможно это результат не самого хорошего перевода. На самом деле, текст достаточно глубокомысленный.

Еще по ходу чтения мне вспомнился Эдсгер Дейкстра с его знаменитой фразой: «Я денно и нощно молю, чтобы как можно больше моих собратьев-программистов нашли способ освободиться от проклятья совместимости» («I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility») из книги Смиренный программист (1972 sic!!!). А позже и Эрик Реймонд с своим Собором и Базаром (1997 год). Но текст Винджа не только о проклятье совместимости, на трех страничках поднят (и в общем то оставлен без ответов) целый пласт вопросов:

  1. Проблема совместимости в широком смысле;
  2. Проблема поддержки старого кода;
  3. Проблема зависимости человеческой жизни «от бесчувственных роботов» (с), к чему мы стремительно приближаемся;
  4. Проблема data mining`а вообще и поиска готового решения в бездонной бочке рецептов в частности (github, stack overflow?);
  5. Проблема «переписывания» старого кода (и плохого, и хорошего) — этот момент так и хочется перечитывать :);
  6. Проблема необъятности ИТ-технологий. Иногда говорят, что последний универсальный физик жил в середине пошлого века, имея ввиду Льва Ландау. Похоже сейчас наступает (или уже наступило) время, когда найти универсального программиста таки уже невозможно;
  7. В тексте нет слова хакер, ни в позитивной, ни в негативной коннотации. Но написано и об исследователях, и о тех преимуществах, которые можно получить зная те или иные backdoor`ы и о том, какую власть это может дать.
  8. и наверное это не все… :)

Складывается впечатление, что писал это человек, на своей шкуре прочувствовавший эти самые проблемы.
Хочу отметить, что «Глубина в небе» была написана в 1999 году, когда многое из того, о чем пишет Виндж еще не было проблемой, или вообще только показалось на горизонте.

В качестве критики хочется отметить, что Виндж прошел мимо ИИ (и сильного и слабого, вообще мимо пробежал, даже нейронные сети не затронул) и свел преимущества ИТ к производительности. Так же в тексте не ощущается присутствие мегакорпораций (хотя конечно «Глубина в небе» не относится к киберпанку), если не считать Кенг-Хо таковой. Нет патентных войн, не затронуты вопрос копирайта и проблема закрытых проприетарных разработок, исходные коды к которым так и не были опубликованы.

Не о программировании, но о стандартах

Дальше в той же главе затронут интереснейший вопрос галактического вещания с целью распространения собственных технологий. Зачем? Стандартизация. Распространение собственного языка и собственных стандартов и технологий, что позволит с одной стороны подтянуть отсталые цивилизации до приемлемого для торговли уровня, а с другой снизить затраты на коммуникацию и обеспечение совместимости и как следствие облегчит торговлю и повысит маржинальность. Интересно, знал ли Виндж на момент написания книги о стандартизации корабельной оснастки английского флота времен великих завоеваний, позволившей снизить затраты на ремонт и обслуживание? А о распространении английского языка в качестве делового, научного и т.д.? Англичане учили (заставляли учить?) местных аборигенов своему языку. Аналогично поступали испанцы и французы. И сейчас английский, испанский, французский, португальский имеют очень широкое распространение. А вот голландцы считали, что аборигенов не нужно учить своему языку. Много ли мест на земном шаре, где говорят на голландском кроме самой Голландии?
Сейчас обучение английскому поставлено на поток по всему миру. Использование стандартизированных методик и учебников, стандартизированных экзаменов и шкал оценок. Только ли частный бизнес?

Ниже привожу наиболее интересный отрывок из текста. В романе еще много всего интересного, не относящегося к программированию, не даром он собрал несколько премий. Так что рекомендую к прочению, причем в оригинале, попавшийся мне перевод не очень хороший.
Приятного прочтения :)
Читать полностью »

Мой код никого не интересует. Я был повержен в шок, когда осознал это в процессе работы программистом. Я тратил много времени на оттачивание своего кода, пока не понял, что он никого не интересует, ведь в зачет идет не сам код, а продукт. Принятие программистом этого факта приведет к повышению продуктивности и ценности его работы.Читать полностью »

Разница между продуктом и проектом в том, что при разработке продукта есть план, а при разработке проекта есть исследования. Если у вас есть какая-то не решённая проблема, скажем вы ещё не решили какую базу данных использовать в своём проекте, то вам понадобится этот вопрос изучать, то есть исследовать. Это называется technology research. Исследование, это вовсе не обязательно, что-то совершенно новое в мировом масштабе, если вы строите мост, то вам надо исследовать грунт в данном конкретном месте, и пока этот грунт не исследован, мост, как продукт, ещё не существует, пока что это — проект. Ещё не известно, какой грунт, а значит не известно из чего делать мост, как его укреплять, невозможно посчитать бюджет и распланировать график работ.Читать полностью »

Кто умеет копировать, тот умеет ДЕЛАТЬ. Это сказал Леонардо да Винчи. Видите ли, вы исходите из своих представлений, о том, что такое ХР, винда, операционка. Люди как рассуждают:

— Мне было ещё мало лет у меня стояла ХР, вот были золотые деньки, но тепереча не то, что давеча. Новые времена, современное ПО. Не понимаю, зачем копаться в старье? Вы бы хоть делали клон десятой винды, но куда с вашей то скоростью, вы его сделаете лет через 100.

Но если люди копируют старое ПО, это ещё не значит, что они ретрограды или некрофилы. Во-первых они это делают сейчас, находясь в современных условиях, зная все тенденции и направления. Во-вторых, устаревание софта вообще вещь крайне контр-интуитивная. Например, в самых современных приложениях есть куски кода написанные более двадцати лет назад, и, заметьте, — никто не собирается их переписывать. Это информация, она не изнашивается, как изнашиваются метал или дерево. Но людям свойственно своё бытовое восприятие переводить на вещи нематериальные и требующие совершенно иного взгляда. Понимаете? Информация. Это не вещь. Сравнивайте со стихами Пушкина.
Читать полностью »

Коллеги, добрый день!

Не секрет, что на Хабре и не только регулярно публикуются статьи Пола Грэма. Подборка тут.

Битые ссылки имеются, но дело Ленина Грэма живет, практически все статьи сохранились по каким-нибудь другим адресам, в том числе — в ЖЖ.

Учитывая, что автор является подлинным экспертом в теме IT-бизнеса, интересуемся: существует ли потребность (или даже необходимость) в издании следующей книги мэтра?

Антология Пола Грэма - 1

Читать полностью »

Представьте себе конвейер с программистами: сели люди за одним круглым столом, один огромный монитор во всю стену, и у каждого ещё свой обычный.

Первый: тоном капитана звездолёта, — нужна функция connectToDB() в главном файле.
Второй: — открываю — открывает нужный файл, находит функцию.
Первый: — что здесь происходит?
Третий: — запускаю — ставит брейкпойнт, запускает приложение, в момент останова произносит: — dbinstance в порядке — выводит значение на экран --, remotePort равен 8999, — это значение тоже видно на экране.
Первый: — странно, надо бы профилировать этот вызов.
Третий: — ок — диктует четвёртому — новая строка 123 console.time(), 125 console.timeEnd()
Четвёртый: набирает, — готово.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js