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

Привет, меня зовут Марат Зимнуров и я тимлид в кросс-функциональной команде HR Admin Tech Авито. Наверняка, вы уже сталкивались с термином «функциональное программирование» (ФП). Если посмотреть на популярные доклады (например, на HolyJS), тема функционального программирования раскрыта довольно поверхностно: immutable-структуры, transitions — и всё. В русскоязычном сегменте нет нормального baseline-гайда, с которого можно начать, да и в англоязычном ситуация не лучше: пара разрозненных курсов и несколько докладов про иммутабельность и монады от хаскелиста.

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

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

Но чтобы понять, что на самом деле происходит, надо задать фундаментальный вопрос: что отличает живого разумного человека от небиологического разума?Читать полностью »

Предисловие

На Хабре есть много статей, часть из которых, как мне показалось, относится к обзорным, а часть к детальным реализациям. Первый вид чаще характеризуется словосочетанием «на подумать», второй — представляет собой статью‑справку. Данная статья больше относится к первому виду.

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

Решил перейти на Go. Причина простая — видел вакансии с зарплатой выше 100 тысяч, и почти везде Go. Я до этого писал в основном на Python. Немного Django, немного микросервисов, WordPress. Закончил онлайн-школу, работаю уже третий год. Решил, что пора прокачиваться и становиться программистом-полиглотом.

Вот мой опыт и небольшие замечания по языку:

Первый шок — это main

Когда я писал на Python, всё было просто: написал функцию — она работает. Хочешь — запускаешь что-то напрямую. Хочешь — импортируешь. А в Go сразу надо делать package main, потом func main(), и только внутри уже можно что-то писать.

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

По мотивам статьи: Пиши простой код / Хабр

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

ПредПредисловие:
Читать полностью »

Я работаю программистом 12 лет. Последние 2 года в мобильной разработке, а до этого php со всей своей экосистемой, фронт-энд - по мере необходимости.

И проблема конфликта между красотой кода и быстротой реализации новых фич давно меня занимала. Раньше были разговоры и даже холивары на эту тему. Однако сегодня поднимать этот вопрос уже моветон.

И вот конкретный пример.

Для мобильной разработки пользуюсь таким замечательным продуктом как Android Studio. И решил давеча отключить ненужные плагины в настройках. Снял галочки напротив плагинов которые для меня не нужны, IDE не предупредила ни о каких возможных проблемах.

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

Дао программирования - 1

Книга 1: Безмолвная пустота

Сказано мастером-программистом: "Уходи, когда поймёшь как найти код ошибки в трап фрейме"

1.1

Нечто загадочное сформировалось, зародилось в безмолвной пустоте. Оно одиноко ждёт без движения. Оно замерло, но постоянно двигается. Оно — источник всех программ. Я не знаю его имени и назову его Дао программирования.

 Если Дао прекрасно — операционная система прекрасна.
 Если операционная система прекрасна — компилятор прекрасен.
 Если компилятор прекрасен — приложение прекрасно.
 Пользователь доволен и в мире царит гармония.

Дао программирования уносится вдаль и возвращается с утренним ветром

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

Программисты много говорят про сложность решений. Мы можем часами размышлять о правильных шаблонах, красивых абстракциях и цепочках зависимостей. Однако, давайте поговорим открыто, всегда ли сложность обусловлена решаемой проблемой? Не оказываемся ли мы в плену наших стереотипов и убеждений?

Имитация Сложности — Антиномия Простого и Сложного - 1

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

Привет!

Предлагаю вашему вниманию перевод статьи «Language Layers» автора Robert C. Martin (Uncle Bob).

image

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

Наши программы моделируют мир. Каждый, принявший постулаты ООП близко к сердцу, быстро столкнется с тем, что процесс моделирования в рамках этого метода принципиально не поддается детерминации. Обсудим подробнее.

Здесь и далее я буду рассматривать общекнижный пример с сотрудниками предприятия, писать будем на чем-то СИ-подобном. Наследовать класс Сотрудник (Employee) от класса Человек (Person) – прекрасная идея, особенно если хранить данные исключительно в памяти: SQL имеет некоторые проблемы с наследованием таблиц, но речь не об этом — ООП со своим иерархизмом, агрегациями, композициями и наследованиями предлагает идеальный способ организации данных. Проблемы с методами.

За каждым методом бизнес-логики стоит факт мира, который этот метод (чаще не в одиночку) моделирует. Факты программирования – это операции: дальше будем называть их так. Делая метод членом класса, ООП требует от нас привязать операцию к объекту, что невозможно, потому что операция – это взаимодействие объектов (двух и более), кроме случая унарной операции, чистой рефлексии. Метод ВыдатьЗарплату (PaySalary) может быть отнесен к классам Сотрудник (Employee), Касса (Cash), БанковскийСчет (Account) – все они равнозначны в праве владения им. Дилемма о расположении методов сопутствует всему процессу разработки: неловкое ее разрешение может оказаться критичным и даже фатальным.

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


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