Size: a a a

Data science [ru]

2020 November 21
Data science [ru]
Git для профессионального программиста

Эта книга представляет собой обновленное руководство по использованию Git в современных условиях. С тех пор как проект Git — распределенная система управления версиями — был создан Линусом Торвальдсом, прошло много лет, и система Git превратилась в доминирующую систему контроля версий, как для коммерческих целей, так и для проектов с открытым исходным кодом. Эффективный и хорошо реализованный контроль версий необходим для любого успешного веб-проекта. Постепенно эту систему приняли на вооружение практически все сообщества разработчиков ПО с открытым исходным кодом. Появление огромного числа графических интерфейсов для всех платформ и поддержка IDE позволили внедрить Git в операционные системы семейства Windows. Второе издание книги было обновлено для Git-версии 2.0 и уделяет большое внимание GitHub.
источник
Data science [ru]
​​Самый сложный язык программирования

Многие люди, которые желают начать изучать программирование, интересуются – какой самый сложный язык программирования? Вопрос вполне понятен, ведь мало кто из новичков хочет выбрать сразу очень сложный язык и потратить на его изучение множество времени, не имея возможности применить свои знания на практике или даже подзаработать на этом денег. Все стремятся найти такой вариант для изучения, который бы при минимальных вложениях в самые краткие сроки начал бы приносить конкретный результат и прибыль. Но на самом деле подобная стратегия действий далеко не всегда бывает выигрышной.
Дело в том, что простые языки, изучаются очень многими людьми, поэтому конкуренция в попытке коммерциализировать свои знания здесь будет слишком большой. Типичные шаблонные действия с таким языком сможет выполнить любой нормальный студент ВУЗа, а более сложные операции требуют или неординарной находчивости, или же они просто невозможны в силу ограниченных возможностей самого языка. Поэтому выбирая для изучения простой язык программирования, человек заведомо существенно сужает горизонт своих будущих возможностей. Такие языки годятся только для образовательных целей и как базис для изучения более сложных вещей.
Самые сложные языки – обычно самые функциональные
Сортируя языки программирования по сложности стоит понимать, что, как правило, чем более сложный язык и дольше времени требуется на его нормальное усвоение, тем большие возможности и перспективы он предоставляет программисту. Вот некоторые такие языки:
C++. Постепенно устаревающий, но все еще очень функциональный и распространенный язык. Он довольно сложен в изучении, но при хорошем знании с его помощью можно писать не только программы на ПК, но даже и целые операционные системы или их модификации, разрабатывать игры. Он сочетает в себе возможности программирования низкого и высокого уровня. Также с помощью С++ можно работать с компьютерной графикой, писать драйвера на устройства, создавать программы для работы на серверах и многое другое;
PHP. Отличный язык для разработки веб-приложений и динамичных сайтов. Способен реализовать любую задумку веб программиста и представить предельно качественный и функциональный продукт;
С#. Си Шарп – это тоже непростой в изучении язык, но и он предоставляет программисту очень широкие возможности: создание офисных приложений, мобильных программ, использование в играх, веб-приложениях и других сферах.
В качестве заключения нужно сказать, что самый сложный язык программирования в мире – это понятие несуществующее. Каждый язык требует усилий по освоению. Если какой-то язык требует больших усилий и запоминания большего объема знаний, то это с лихвой окупается его большими функциональными возможностями.
источник
2020 November 22
Data science [ru]
Алгоритм заполнения шахматной доски

Достаточно простая, но тем не менее интересная задача для разминки программиста. Думаю, все видели, как выглядит шахматная доска, а также слышали выражение «расставить в шахматном порядке». На случай, если не видели, это поле, состоящее размером 8 на 8 клеток, имеющих разные цвета – черный и белый. При этом, клетки одного цвета не могут быть смежными, а расположены через одну: белый, черный, белый… как по вертикали, так и по горизонтали.
Мы выведем в шахматном порядке восемь строк по восемь символов в каждой. Черный цвет у нас будет изображать символ «X», а белый – «O».
Самое первое, что приходит в голову:
Создать двумерный массив соответствующего размера;
Двойным циклом заполнить одним белым цветом все поля;
Затем можно запустить еще дополнительные циклы, которые будут обходить нужные клетки и назначать «черный» цвет.
источник
Data science [ru]
Сингулярное разложение (Singular Value Decomposition)
Способ понизить размерность без потери значительной доли ценной информации. Если у вас есть исходная матрица с большим объемом данных, вы можете разложить ее на меньшие матрицы, которые будут обладать теми же свойствами. Это отличный способ получить полезный результат в шумных условиях или в тех случаях, когда информации, напротив, не хватает. 
Например, Netflix применяет SVD в своих рекомендательных системах, где объем исходной информации (количество фильмов в базе) несравнимо превышает объем информации рабочей (количество фильмов, которые посмотрел пользователь). Кроме того, таким образом оказывается удобно обрабатывать изображения и музыку, сжимая их с минимальным ущербом качеству.
источник
2020 November 23
Data science [ru]
Процедурные языки программирования

Процедурные языки программирования - языки программирования, код которых можно разделить на процедуры.
Программирование – это очень объемная сфера знаний, изучить которую целиком не сможет ни один человек на свете. Сейчас существует более 120 различных языков программирования, каждый из которых в той или иной мере используется для решения своих специфических задач. Все языки делятся на разные типы. Очень видное место в свое время занимали так называемые процедурные языки программирования. Некоторые их них активно применяются даже сейчас.
Основная особенность языков процедурного программирования – их императивность, что означает создание четкого набора последовательных инструкций, которые должен поочередно выполнять компьютер. Парадигме императивности соответствуют такие главные характеристики
источник
Data science [ru]
Python Карманный справочник 

Этот краткий справочник по Python карманного типа обновлен с учетом версий 3.4 и 2.7 и очень удобен для наведения быстрых справок в процессе разработки программ на Python. В лаконичной форме здесь представлены все необходимые сведения о типах данных и операторах Python, специальных методах, встроенных функциях и исключениях, наиболее употребительных стандартных библиотечных модулях и других примечательных языковых средствах Python.
источник
2020 November 24
Data science [ru]
​​Языки программирования низкого уровня

Языки программирования низкого уровня или низкоуровневые традиционно появились первыми и в последующем стали базисом для развития всей ИТ индустрии. Они так называются потому, что в своих командах обращаются фактически напрямую к железу компьютера, его микропроцессору. Каждый процессор способен воспринимать определенный набор понятных только ему команд, поэтому к каждой модели немногочисленных устройств в то далекое время создавались свои языки. Изначально такие языки имели минимальный набор команд, и в отличие от высокоуровневых не имели такого большого количества абстрактных классов, разнообразного синтаксиса.
Все существующие языки программирования обычно делят на две большие группы: низкоуровневые и высокоуровневые. Сейчас большинство используемых языков относятся ко второй категории, но так было не всегда. Если смотреть историю развития программирования как можно ближе к ее истокам, то там картина была прямо противоположной.
Языки программирование низкого уровня, либо имеющие их возможности, активно применяются также и сейчас. Ведь только благодаря им возможно писать драйвера на компьютерное железо, подключаемые периферийные устройства, создавать операционные системы и ядра прошивок, а также многие другие важнейшие задачи. В военной сфере, инженерии, медицине программы должны управлять непосредственно определенными устройствами и их физическими параметрами, именно поэтому здесь также языки очень востребовательны. Список используемых сейчас низкоуровневых языков не такой большой, но, тем не менее, они все еще актуальны и способны решать важные задачи.
Некоторые представители низкоуровневых языков
Изначально первым языком программирования низкого уровня считается так называемый машинный код. Он имел вид набора последовательных команд, которые передавались на процессор в виде нулей и единиц. За нуль отвечало отсутствие электрического сигнала на устройстве, а за единицу – подача на него определенного импульса. Таким образом, череда сигналов заставляла процессор решать поставленные перед ним задачи.
Первые такие коды были способны заставить ЭВМ выполнять элементарные простые операции, куда относятся арифметические операции, передача между регистрами простейшей информации, сравнение двух или больше разных кодов и тому подобные действия. Позже машинные языки научились решать сложные задачи, то есть такие, которые состоят из набора элементарных команд. В зависимости от архитектуры процессора он может выполнять разное количество команд и с разной скоростью. Чтобы машинные коды работали нормально на нескольких представителях одного семейства процессоров, их начали разбивать на микропрограммы. Список языков машинного кода вряд ли возможно составить, ведь на каждый процессор и ЭВМ своего времени создавался свой язык.
источник
Data science [ru]
Artificial Intelligence - одно из самых трендовых направлений в IT-индустрии. Поэтому мы решили поделиться свежим каналом с большой базой знаний и богатым практическим опытом о применении Искусственного Интеллекта в бизнесе и tech стартапах - Новое Электричество.
источник
2020 November 25
Data science [ru]
Теоретический минимум по Computer Science. Все, что нужно программисту и разработчику.

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.
источник
Data science [ru]
Освой профессию будущего! Примерь на себя роль Data Scientist на бесплатном онлайн-интенсиве, который пройдёт с 30 по 2 декабря в 19:00 по московскому времени.

Ссылка для бесплатной регистрации: 👉 https://clc.to/ofFQHQ.

За 3 дня ты научишься:
⚡️ исследовать данные с помощью языка Python;
⚡️ отличать Data Science от Machine Learning и Artificial Intelligence;
⚡️ строить модели для реальных кейсов.

Ведёт интенсив ведущий исследователь данных Сбербанка, математик-программист Анастасия Борнева.

🎉 Всех участников ждут подарки от издательства “МИФ”, а авторов трёх лучших проектов — гранты на обучение в онлайн-университете Skillbox!
источник
Data science [ru]
Трансформеры в Поиске: как Яндекс применил тяжёлые нейросети для поиска по смыслу
источник
2020 November 26
Data science [ru]
​​Что такое закон Мура?
«Закон Мура» относится к ряду связанных наблюдений и предсказаний, касающихся экспоненциального роста плотности и / или производительности электронных схем. Современное резюме, которое не соответствует исходным утверждениям Мура, состоит в том, что количество операций в секунду на каждый затраченный доллар удваивается каждые N месяцев, где N примерно равно 18.

Распространенные заблуждения
Закон Мура - это закон физики . Фактически, это эмпирическое наблюдение за развитием технологий; ничто не требует, чтобы это продолжалось, и, конечно, это не может продолжаться бесконечно. Увеличение тактовой частоты уже вышло на плато, и текущие улучшения в соотношении цена / производительность связаны с увеличением количества ядер (процессорных блоков) на одном кристалле.
Машины становятся быстрее так быстро, что придумывать лучшие алгоритмы. На самом деле, простые улучшения алгоритмов намного важнее, чем улучшения в оборудовании.

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

Распространенные заблуждения
Делать машины более мощными означает повышать их интеллект . Это очень распространенная тема в обсуждениях будущего ИИ, но, похоже, основана на путанице между тем, как мы используем слово «мощный» для описания человеческого интеллекта, и гораздо более простым значением слова «мощный» при описании компьютеров, т. е. количество операций в секунду.
источник
Data science [ru]
Может ли ИИ оценивать свои действия?

ДА - 53
👍👍👍👍👍 38%
НЕТ - 86
👍👍👍👍👍👍👍👍 62%
👥 139 человек уже проголосовало.
источник
Data science [ru]
⬆️ Правильный ответ ⬆️

Нет. Для того чтобы оценить действия, человеку помимо мыслительного процесса требуются моральные установки, эмоции и культурные нормы, которые меняются с течением времени. Технологиям это (по крайней мере, пока что) недоступно.
источник
2020 November 27
Data science [ru]
Какие алгоритмы нужно знать, чтобы стать хорошим программистом?

Данная статья содержит не только самые распространенные алгоритмы и структуры данных, но и более сложные вещи, о которых вы могли не знать. Читаем и узнаем!
Я предполагаю, что вы знаете как минимум один язык программирования и такие понятия, как объект и указатель. Алгоритмы и структуры данных будут перечисляться по степени их сложности.
Для начала давайте начнем с линейных структур данных и алгоритмов
Массивы
Связный список
Стек
Очереди
Перейдем к базовым алгоритмам
Сортировка - Сортировка слиянием, Сортировка вставками, Быстрая сортировка, Несколько взаимных перестановок.
Умножение матриц (Не обязательно реализовывать, главное - знать алгоритм)
Основные алгоритмы просеивания
Беззнаковая математика, включая умножение и деление
Алгоритм Евклида для нахождения НОД (наибольший общий делитель), Модульная инверсия, Быстрое возведение в степень
Числа Фибоначчи с матричным умножением
Нормальное распределение и математическое ожидание
Статистика – среднее вероятностное значение случайной величины, медиана, дисперсия, теорема Байеса
Также можно изучить популярные алгоритмические методы:
Алгоритмы декомпозиции – Бинарный поиск, Нахождение подмассива с наибольшей суммой элементов
Жадные алгоритмы – Выбор задач, кодирование по алгоритму Хаффмана
Динамичное программирование – Цепное матричное умножение, Алгоритм решения задачи по укладке ранца
Линейное программирование – Максимизация параметра, Линейное время сортировки
Криптографические алгоритмы – Алгоритм Манакера по нахождению длиннейшей подстроки-палиндрома, алгоритм нахождения наибольшей общей подпоследовательности (LSC), расстояние Левенштейна
Теперь перейдем к типичным нелинейным структурам данных
Деревья – Бинарное дерево, Дерево общего вида, Наименьший общий предок
Бинарное дерево поиска – Симметричный обход, Обход по уровням, Нахождение k’ого наибольшего элемента, Диаметр, Глубина, Количество узлов и т.д.
Динамическая память – Динамический массив, Двоичная куча, Пирамидальная сортировка
Алгоритм объединения-поиска
Хеш-таблица – Метод нахождения коллизий (Linear Probing), Открытая адресация, Предотвращение коллизий
Рассмотрим графы
Список смежных вершин графа, Матрица смежности графа, Взвешенные рёбра графа
Основные алгоритмы обхода – Поиск в ширину, Поиск в глубину и т.д.
Алгоритмы нахождения кратчайшего пути - Алгоритм Дейкстры, Алгоритм Флойда-Уоршелла, Алгоритм Беллмана-Форда
Минимальное остовное дерево - Алгоритм Крускала, Алгоритм Прима
К данному моменту вы должны быть хорошо знакомы с программированием, так как для дальнейшего прочтения и углубления в данную тему вы должны знать больше, чем студент.
Усложнённые деревья и графы
Сбалансированные деревья – AVL-дерево, Красно-черное дерево
Heavy-light декомпозиция, Б-деревья, Дерево квадрантов
Усложнённый граф – Минимальный разрез, Максимальный поток
Максимальное покрытие – Теорема о свадьбах
Гамильтонов цикл
Рёберный граф/ Линейный граф
Сильно связные компоненты
Главный подграф, Покрытие вершин, Задача коммивояжёра – Алгоритм аппроксимации
Продвинутые криптографические алгоритмы:
Алгоритм Кнута-Морриса-Пратта
Алгоритм Рабина-Карпа
Префиксные и суффиксные деревья
Автоматизация суффиксов – Алгоритм Укконена
Высшая математика
Быстрое преобразование Фурье
Проверка простоты
Вычислительная геометрия – Задача поиска ближайшей пары, Диаграмма Вороного, Выпуклая оболочка множества точек
Общие продвинутые темы:
Выполнение обхода всех комбинаций/перестановок
Поразрядная обработка
Ссылка на оригинальную статью
источник
Data science [ru]
Изучаем алгоритмы: полезные веб-сайты.

Веб-сайты, которые вам стоит использовать, чтоб выучить классические алгоритмы:
A Visual Guide to Graph Traversal Algorithms — Интерактивная визуализация показывает, как работает алгоритм поиска в глубину графа.
Algomation — Поучительное и анимированное описание алгоритмов.
Algorithm Visualizer — Тонны анимированых алгоритмов (с кодом, конечно же), можно также создавать свои алгоритмы.
Algorithms Visualization — Коротенькая статья, посвящённая визуализации алгоритмов.
Big-O Cheat Sheet — Сложности повседневных алгоритмов, используемых в анализе данных.
Data Structure Visualizations — Визуализируйте поведение структур данных и делайте операции с ними.
Geeks for Geeks — Много-много хорошо объяснённых и реализованных алгоритмов.
Rosetta Code — Хрестоматия по программированию, цель которой — показать использование множества алгоритмов и структур данных в разных языках программирования.
источник
2020 November 28
Data science [ru]
​​Изучаем алгоритмы: онлайн-курсы.

Бесплатные и качественные курсы онлайн:
Algorithms: Divide and Conquer, Sorting and Searching, and Randomized Algorithms - Основные темы: асимптотика ("Большое О(х)"), сортировка и поиск, разделяй и властвуй, а также другие разные алгоритмы.
Algorithms: Graph Search, Shortest Paths, and Data Structures - Основные темы: структуры данных, графы и их применения.
Algorithms: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming - Основные темы: жадные алгоритмы и динамическое программирование.
Algorithms: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them - Основные темы: кратчайший путь, NP-полные задачи и что это все значит для разработчика.
Algorithms, Part 1 — Этот курс затрагивает необходимую информацию об алгоритмах и структурах данных, в которой нуждается каждый программист, который серьезно относится к своему делу. Курс рассказывает о структурах данных, сортировке и алгоритмах поиска.
Algorithms, Part 2 — Вторая часть курса, которая сфокусирована на жадном алгоритме и динамических парадигмах, а также на NP-полных задачах.
Khan Academy Algorithms — курс по алгоритмам, созданный Томасом Корменом и Девином Балккомом.
MIT-6-006 — Хорошо описанные алгоритмы.
MIT-6-046j — Такой же курс, как и предыдущий, только с другими алгоритмами.
MIT-6-00sc — Простое и понятное введение в алгоритмы.
Udacity Intro to Algorithms — Курс по алгоритмам на Python.
источник
Data science [ru]
​​Разработчики выпустили восьмую версию языка программирования PHP

Группа энтузиастов во главе с датским программистом Лердорформ Расмусом выпустили восьмую версию скриптового языка программирования PHP. Релиз состоялся 26 ноября 2020 года, почти на год раньше, чем планировалось. По сравнению с предыдущей версией PHP 8 получил несколько серьезных улучшений, включая применение JIT-компилятора и существенную доработку «синтаксического сахара», позволяющую уменьшить объем шаблонного кода.
Разработка языка программирования PHP ведется с 1995 года. Основной сферой его применения является разработка динамических веб-сайтов с исполнением кода на серверной стороне. При этом доступна и компиляция программ, написанных на PHP, для исполнения на UNIX-операционных системах и в среде Windows. Существенное влияние на синтаксис PHP оказали несколько языков программирования, включая C++ и Java.
Наиболее существенным изменением в версии PHP 8 стало использование JIT-компилятора. Он позволяет переводить код программы в машинный код в режиме реального времени непосредственно во время исполнения программы. Таким образом для некоторых случаев удается повысить скорость исполнения приложений. В случае с PHP 8 наибольший прирост скорости с помощью JIT-компилятора достигается при выполнении математических операций.
Еще одним практичным улучшением в PHP 8 стало добавление выражения match. В целом оно работает аналогично традиционному switch, однако, в отличие от последнего, использует строгое сравнение значений. При этом результат работы match может быть сохранен в переменную и использован в дальнейшем или возвращен, например, с помощью функции echo. В отличие от switch, выражение match работает с однострочными выражениями, не требующими конструкции break.
В PHP 8 также появились именованные аргументы для использования в библиотеках или ассоциативных массивах. Это нововведение, в отличие от PHP 7, использует самодокументируемые аргументы, что позволяет использовать их в любом порядке, пропуская необязательные параметры. Это положительно сказывается на читаемости кода и его объеме, особенно если речь идет об использовании библиотек, работающих с булевыми параметрами.
Еще в PHP 8 появилась возможность использовать структурные метаданные с нативным синтаксисом PHP вместо аннотаций PHPDoc. Благодаря этому, например, при написании метаданных можно будет использовать подсказки среды разработки. Кроме того, в PHP 8 стали возможными одновременное объявление и инициализация свойств в конструкторе класса. В некоторые случаях это позволяет сократить объем кода втрое.
Наконец, еще одним существенным изменением в PHP 8 стало использование нового оператора Nullsafe, который записывается занком ? после обрабатываемого элемента. Это избавляет, например, от необходимости прописывать проверку на null для каждой переменной, используя вместо этого последовательность вызовов с оператором Nullsafe. В этом случае, если хотя бы один элемент возвращает значение null, вся последовательность вернет null.
С более полным списком нововведений в PHP 8 и документацией по ним можно ознакомится в сообщении о релизе.
источник
2020 November 29
Data science [ru]
Алгоритмы и структуры данных.
Извлечение информации на языке Java
Аллен Б.Доуни

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

Научитесь работать со структурами данных, например, со списками и словарями, разберитесь, как они работают.
Напишите приложение, которое читает страницы Википедии, выполняет синтаксический разбор и обеспечивает навигацию по полученному дереву данных.
Анализируйте код и учитесь прогнозировать, как быстро он будет работать и сколько памяти при этом потреблять.
Пишите классы, реализующие интерфейс Map, пользуйтесь при этом хеш-таблицей и двоичным деревом поиска.
Создайте простой веб-поисковик с собственным поисковым роботом: он будет индексировать веб-страницы, сохранять их содержимое и возвращать нужные результаты.
источник
Data science [ru]
Вспомним математику!

При составление формул используется такой знак ∑.
Давайте вспомним, сумму чего именно так можно обозначить.

Это сумма всех цифр от 1 до 100. - 130
👍👍👍👍👍👍👍👍 97%
Это сумма двух цифр: 1 и 100. - 4
👍 3%
👥 134 человека уже проголосовало.
источник