Что для вас значит Искусственный Интеллект?
Для кого-то это умение колонки Алисы выбирать любимую музыку, для других — способность чата GPT помочь в написании курсовых работ, а для третьих — персонажи и боты в видеоиграх.
Тем не менее, современные технологии искусственного интеллекта (ИИ) активно внедряются в повседневную жизнь, в офисах и на производстве. Например, американская компания Amazon применяет искусственный интеллект для улучшения работы своих роботизированных складов, оптимизации процесса доставки заказов, персонализации рекомендаций покупателям и других задач.
Мы с подругой из Высшей школы экономики решили провести исследование по этой теме с целью улучшения рабочего процесса сотрудников.
Наш подход основан на опроснике, содержащем вопросы об использовании ИИ и уровне удовлетворенности сотрудников, чтобы выявить возможные взаимосвязи. Заполнение опросника займет всего 5 минут, и мы будем рады вашему участию)
Императивный и декларативный код
Всем привет, работаю java разработчиком 10 лет, хотел бы показать разницу между императивным и декларативным подходом на примере синтетической задачи по обработке списка чисел.
Императивный подход описывает последовательность действий с использованием конструкций языка - то есть позволяет описывать алгоритмы любой сложности. Декларативный подход описывает ожидаемый результат - а на практике состоит в написании кода, который интерпретируется дальше фреймворком.
Задан список чисел, на примере:
List<Integer> input = List.of(1, 2, 3, 4, 5);
Нужно найти сумму квадратов чётных чисел - значений элементов массива. Чётные числа это такие числа, которые делятся нацело на 2, то есть остаток от деления числа на два равен нулю. Чётные числа здесь 2 и 4. Их квадраты это 4 и 16. Искомая сумма 4 + 16 = 20.
Чтобы записать алгоритм в императивном подходе, потребуется объявить переменную-аккумулятор, которая будет содержать сумму, её начальное значение будет 0. Далее пройтись по всем элементам списка, для четных их них посчитать квадрат, и добавить его к текущему значению суммы:
int sumEven = 0;
for (Integer x : input) { //пройти по всем элементам
__ if (x % 2 == 0) { //для четных
____ sumEven += x * x; //посчитать квадрат и добавить к сумме
__ }
}
assertEquals(sumEven, 20);
Декларативный подход можно показать на примере использования апи java.util.stream. Последовательно указываются инструкции для фильтрации, преобразования и аккумуляции результата:
int sumEven = input.stream()
__ .filter(x -> x % 2 == 0)
__ .map(x -> x * x)
__ .reduce(0, Integer::sum);
assertEquals(sumEven, 20);
Декларативный подход более емкий, так как оперирует конструкциями высокого уровня, но менее гибкий. Его удобно использовать при решении стандартных задач. Желаю всем успехов в изучении программирования.
Опрос
Пикабу давно скатился в сборник слезовыдавливательных историй написанных практически 100% копирайтером (уж не знаю нахуя, но очень однотипно составлены они и всегда имеют элемент который должен зацепить), баянов, пересланных новостей, И КРАЙНЕ РЕДКО авторского контента, которым изначально он задумывался.
Я не питаю иллюзий по поводу того что наше общество умное и справедливое, и продвигает адекватные идеи и посты, вверх, а кал давит в минусах, но с уходом минусов как будто бы регуляция того что пост окажется в горячем и лучшем в гораздо большей степени перешла в руки администрации пикабу, вполне возможно что есть какие то подходы к тому чтобы прийти в администрацию и попросить их за деньги вывести текст в топ, по возможности (бесплатная идея к расследованию, возможно кто то обладает свободным временем, желанием, и хочет попробовать провести свои следственные действия в этом направлении и сделать из этого пост)
А может нам нужен новый пикабу просто, у нас тут достаточно много программистов, и например у меня планируется в июне свободное время, мы могли бы за месяцок сделать более менее прозрачный сервис (пока что не понятно нужно ли это, и если нужно то в чем именно будет фишка помимо возвращения минусов в обиход).
В общем пишите комментарии кто что думает по высказанным мною вещам, и прошу прощения за пунктуационные ошибки, по русскому в школе была 3.
Простейший клеточный автомат, симулирующий конкуренцию
Правило одно - каждый ход, клетка перенимает цвет случайной клетки вокруг себя.
Результат напоминает борьбу (наций, идей, культур, языков и т.п.) за территорию.
Если в симуляцию добавить границы, то цвета будут устойчиво занимать географические ниши. Как и в жизни.
Со временем, цветов становится всё меньше, а их борьба затягивается. Это похоже на сокращение числа живых языков в мире. В итоге, в симуляции останется только 1 цвет. Может, и в будущем, весь мир заговорит одинаково?
Клеточный автомат простой, но мне хотелось поделиться результатом. Если у вас есть идеи для экспериментов, пишите в комменты. Буду рад!
Алгоритмы с примерами на Python
Автор: Хайнеман Джордж
Год: 2023
Количество страниц: 302
Когда нужно, чтобы программа работала быстро и занимала поменьше памяти, профессионального программиста выручают знание алгоритмов и практика их применения. Эта книга — как раз про практику. Ее автор, Джордж Хайнеман, предлагает краткое, но четкое и последовательное описание основных алгоритмов, которые можно эффективно использовать в большинстве языков программирования. О том, какими методами решаются различные вычислительные задачи, стоит знать и разработчикам, и тестировщикам, и интеграторам.
Друг познается в чате
«Чат на чат» — новое развлекательное шоу RUTUBE. В нем два известных гостя соревнуются, у кого смешнее друзья. Звезды создают групповые чаты с близкими людьми и в каждом раунде присылают им забавные челленджи и задания. Команда, которая окажется креативнее, побеждает.
Реклама ООО «РУФОРМ», ИНН: 7714886605
Ответ на пост «Алгоритмы: Открытие тайн кода»
В чем я вижу проблему подобных статей, они “готовят” типичных “вхожденцев в айти”. Мне последние лет десять достаточно часто приходится собеседовать людей в основном на позиции от джуниора до экспа, реже на сеньора и заметил тренд на снижение уровня знаний у людей кто пришел в айти из других профессий, это где-то лет пять назад начало сильно провялятся, и если лет 15 назад люди которые переходили в IT из других профессий в частности алгоритмическую подготовку получали из чтения “нудных” книг типа Кнута, Кормена, чтения книг по дискретной математике и т.д, то сейчас онлайн курсы и различные статьи.
Если взять статью ТС про алгоритмы, в ней полная мешанина и все галопом, немного про сложность алгоритмов, чуть чуть про бинарный поиск, реализация в псевдокоде, реализация в С++.
Если идти по порядку, то даже для совсем новичков нужно понимание сложности алгоритмов, примеры вычисления сложности алгоритма, понятие амортизированной сложности и пример вычисления для вставки в конец массива с удвоением памяти при заполнении, это раздел чистой математики, поэтому при правильном подходе нужна отдельная статья (или даже несколько) только про сложность алгоритмов и “волшебную О”. Так же полезно разобрать вычисление сложности алгоритма на примере вычисления чисел фибоначи, алгоритма поиска наибольшего общего делителя, ханойских башен.
Второй момент бинарный поиск, сам по себе бинарный поиск предполагает работу с отсортированным массивом данных и поиск не только конкретного элемента, но также алгоритмы upper_bound/lower_bound все это тоже реализуется через бинарный поиск, в статье ни слова об этом. Сама реализация в псевдокоде, но при этом есть “заточки” на язык программирования, что не требуется для псевдокода, реализация на С/С++ сразу в плохом стиле, нет проверок входных параметров, используется знаковый тип для значения длины массива. Все это можно сказать, что не существенно, но это реально формирует “базу” у “вхожденцев”, они пишут небрежно код, используют копипаст, что потом очень сложно исправить.
Если автор просто тренируется писать технические статьи то это ок, если же он хочет сделать полезное дело и действительно помочь качественно войти в айти с хорошей алгоритмической подготовкой, то рекомендую изучить материал на том же stepik, курсера конкретно курсы по алгоритмам. Посмотреть книги того же Окулова http://publ.lib.ru/ARCHIVES/O/OKULOV_Stanislav_Mihaylovich/_... если мы говорим про русскоговорящий сегмент.
На основе изученных материалов составить свой полноценный курс по алгоритмам, плюс сам по себе теоретический курс без задач имеет не большую практическую ценность, тут нужно либо свою платформу организовывать что не дешево, либо просто ссылаться на всякие leetcode с конкретными задачами, где демонстрируется использование конкретного алгоритма.
Возможно идеальный курс должен решать какую то большую задачу , например разработка “database engine ” (но без SQL), тут как раз будут почти все алгоритмы: деревья, сортировки, хеши, всякие LRU-кеши, алгоритмы во внешней памяти, и т.д. Условно говоря первые полгода читаются статьи/лекции по сложности алгоритмов, базовые структуры данных и алгоритмы, потом постепенно шаг за шагом реализуется своя “СУБД” начиная с файлового стороджа (он же filepager), страничные/буферные кеши, B/B+ деревья, для упрощения можно выбрать простую транзакционную модель two-phase locking, более продвинуто и заодно применение алгоритмов на графах, это реализация графа ожидания (wait-for graph) для детекта взаимных блокировок транзакций, где то за год можно реализовать, естественно это будет сугубо студенческий проект ни какого продакшен уровня. Есть отличная книга, по которой прям можно делать такой курс:
Database Systems: The Complete Book by Hector Garcia-Molina Jeffrey Ullman
Можно упростить задачу и вместо СУБД делать реализацию “файловой системы”, естественно файловая система будет жить в user-space, в качестве диска использовать просто большой файл, в качестве бонуса можно прикрутить шифрование. В качестве идеи для вдохновения можно взять довольно старую книгу (но весьма актуальную для такой задачи):
Practical File System by Dominic Giampaolo