Bookz

Содержание

Введение в анализ алгоритмов

Это второе, полностью обновленное и переработанное издание книги.

«Введение в анализ алгоритмов» будет
отличным учебным руководством и
справочником как студентов, так и для
разработчиков, ориентированных на
создание надежного кода. Материал в
книге изложен достаточно сжато, но, тем
не менее, он охватывает все необходимые
основы.

В книге рассмотрены традиционные для
информатики алгоритмы, такие как жадный
алгоритм, динамическое программирование,
«разделяй и властвуй». Но кроме того
автор рассматривает два класса алгоритмов,
которые часто выпадают из поля зрения,
— рандомизированные и онлайн-алгоритмы
(с упором на сами алгоритмы). И это очень
кстати, ведь первые повсеместно
применяются в криптографии, а вторые
необходимы в очень многих областях, от
создания ОС до прогнозирования фондового
рынка.

Алгоритм для обычных книг

Всё очень просто:

  1. Читаем автора и название;
  2. Задаем вопросы, ответы на которые мы хотим найти в книге;
  3. Пролистываем: разглядываем картинки, цитаты;
  4. Читаем содержание, оглавление, аннотации;
  5. Читаем книгу (чем быстрее, тем лучше);
  6. Выделяем основную тему;
  7. Выделяем факты и новизну;
  8. Пролистываем книгу;
  9. Опционально: записываем в табличку в экселе, о чем книга, кто ее посоветовал, стоит ли перечитывать и почему.

Если через полгода нужно будет вспомнить, что было в той книге, ее можно будет просто пролистать — этого будет достаточно. Работает отлично с книгами по психологии, переговорам, маркетингу, etc.

Увы, читать таким способом книгу Дэвида Флэнэгэна «JavaScript. Подробное руководство, 6-е издание» или ng-book бессмысленно и бесполезно. В голове не останется ничего, а время потеряется. И вообще, техника скорочтения для подобных книг скорее вредна, чем полезна.

Когда-то я занимался по книжке «Learn Ruby the hard way» (когда она еще была бесплатной). Главный ее принцип в том, что вам нужно перепечатать 100 программ. Конечно, часть из них нужно улучшить, но главное — это перепечатать 100 листингов. В процессе перепечатки неизбежны ошибки. А в процессе поиска и исправления ошибок приходит понимание того, что собственно в программе делается. Чуть позже я посмотрел курс на Coursera про то, как правильно выстроить процесс собственного обучения, и постепенно у меня сформировался собственный алгоритм чтения технической литературы.

Алгоритм для технической литературы

Выглядит он так:

  1. Формулируем задачу, которую мы хотим решить, прочитав книгу;
  2. Начинаем читать медленно и внимательно, перепечатывая каждый из приведенных листингов;
  3. Регулярно — раз в полчаса-час — делаем паузу и вспоминаем, что именно мы делали предыдущий час;
  4. Заканчивая очередную тему, смотрим, достаточно ли мы узнали для того, чтобы решить задачу;
  5. Медленно, но верно дочитываем до конца;
  6. Еще раз вспоминаем, про что была книга;
  7. Пишем программу, используя максимум того, что было в книге.

Формулируем задачу, которую мы хотим решить, прочитав книгу

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

Начинаем читать медленно и внимательно, перепечатывая каждый из приведенных листингов

Ключевое слово «медленно» — не нужно торопиться, особенно если в этой теме вы еще ничего не понимаете или понимаете не все. Здесь принцип тот же, что и с книжкой по ruby: ручной труд порождает ошибки —> ошибки порождают задачи –> решение задач тренирует мозг и добавляет понимания.

Регулярно — раз в полчаса-час — делаем паузу и вспоминаем, что именно мы делали предыдущий час

Как ни странно, пауза в 5-10 минут позволяет мозгу структурировать информацию, а значит лучше ее сохранить и оперативней доставать, если понадобится.

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

И если достаточно, то либо заканчиваем чтение (вернемся к этой книге, когда появится в этом необходимость), либо дополняем и расширяем задачу

Важно, что сделать это нужно до того, как вы начнете читать дальше: попробуйте дополнить задачу и придумать, как ее можно было бы решить в идеальном мире

Медленно, но верно дочитываем до конца

Ну или перестаем читать, потому что узнали все, что было нужно.

Еще раз вспоминаем, про что была книга

Я смотрю оглавление и воспроизвожу в голове, о чем шла речь, потом просматриваю листинги и вспоминаю, какие там ошибки были у меня. Если встречаются очень объемные и сложные программы, то можно в самых сложных местах в каждой строке прокомментировать, что и зачем там происходит.

Важно! Пишем программу, используя максимум того, что было в книге

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

На этом мой алгоритм заканчивается. Если ему следовать, то можно извлечь из каждой книги максимум пользы. Но все же главное — это не забывать, что читать книгу хоть как-нибудь в 100500 раз полезнее, чем откладывать прочтение, чтобы все сделать правильно, но потом.

«Python для сложных задач: наука о данных и машинное обучение», Джейк Вандер Плас

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

Материал подойдет вам, если хотите использовать Python в сфере Data Science. Вандер Плас предполагает, что читатель уже имеет опыт в программировании. Задача автора — научить вас применять стек инструментов исследования данных языка Python для хранения, манипуляции и понимания данных. Рассматриваются библиотеки IPython, NumPy, Pandas, Matplotlib и Scikit-Learn.

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

Список ресурсов

  • medium.freecodecamp.org/the-top-data-structures-you-should-know-for-your-next-coding-interview-36af0831f5e3
  • www.geeksforgeeks.org/commonly-asked-data-structure-interview-questions-set-1
  • prog-cpp.ru/data-list
  • habr.com/post/267855
  • habr.com/post/273687
  • habr.com/post/150732
  • ruhighload.com/%D0%A7%D1%82%D0%BE+%D1%82%D0%B0%D0%BA%D0%BE%D0%B5+%D1%85%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B+%D0%B8+%D0%BA%D0%B0%D0%BA+%D0%BE%D0%BD%D0%B8+%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82
  • ru.wikipedia.org

«Python и анализ данных», Уэс Маккинни

Автор книги — разработчик программного обеспечения и бизнесмен. Именно он создал на Python библиотеку Pandas, которая используется для обработки и анализа данных.

В своей книге Уэс Маккини разбирает вопросы преобразования, обработки, очистки данных и вычисления на языке Python. Вся теория подкреплена практическими примерами и иллюстрациями — с ними легче усвоить информацию. 

В 2020 году вышло второе издание, где примеры кода переписаны под версию Python 3.6, добавлены сведения о последних версиях библиотек Pandas, NumPy, IPython и Jupyter.

Если вы уже знаете основы Python, разобраться в материале будет проще.

С++

Visual C++, MFC

Круглински, Уингоу, Шеферд. Программирование на Microsoft Visual C++ 6.0 для профессионалов (PDF, 54.4 МБ)

С++

  • ANSI. C++ International Standard (second edition, 2003-10-15) (PDF, 2.3 МБ)
  • Эккель. Философия C++. Введение в стандартный C++ (2-е изд.) (DJVU, 6.4 МБ)
  • Эккель, Эллисон. Философия C++. Практическое программирование (DJVU, 6.5 МБ)
  • Саттер. Решение сложных задач на C++. 87 головоломных примеров с решениями (DJVU, 3.8 МБ)
  • Саттер. Новые сложные задачи на C++. 40 новых головоломных примеров с решениями (DJVU, 3.6 МБ)
  • Страуструп. Язык программирования C++ (2-е, дополненное изд.) (PDF, 2.9 МБ)
  • Stroustrup. The C++ Programming Language (3rd edition) (PDF, 3.4 МБ)
  • Abrahams, Gurtovoy. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (CHM, 0.62 МБ)
  • Джосьютис. C++. Стандартная библиотека. Для профессионалов (DJVU, 4.8 МБ)
  • Джосьютис. C++. Стандартная библиотека. Для профессионалов (CD к книге) (ZIP, 0.14 МБ)
  • Vandervoorde, Josuttis. C++ Templates: The Complete Guide (CHM, 0.72 МБ)
  • Sutter, Alexandrescu. C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (CHM, 0.51 МБ)
  • Голуб. Веревка достаточной длины, чтобы выстрелить себе в ногу. Правила программирования на C и C++ (PDF, 1.29 МБ)
  • Meyers. Effective C++. More effective C++ (CHM, 2.0 МБ)
  • Дьюхэрст. Скользкие места C++. Как избежать проблем при проектировании и компиляции ваших программ (DJVU, 9.3 МБ)
  • Дьюхэрст. C++. Священные знания (DJVU, 6.7 МБ)

Алгоритмы: разработка и применение

Авторы: Джон Клейнберг, Эва Тардос.
Год издания: 2016.

Авторы этой книги — профессора теории вычислительных систем в Корнелльском университете. Клейнберг специализируется на алгоритмах, связанных со структурой сетей и информации. Его работы лежат в основе поисковых систем интернета. Тардос специализируется на графах и сетевых задачах.

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

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

Стеки

Придумал Алан Тюринг.

Основные операции

  • Push-вставляет элемент сверху
  • Pop-возвращает верхний элемент после удаления из стека
  • isEmpty-возвращает true, если стек пуст
  • Top-возвращает верхний элемент без удаления из стека

Вопросы

  • Реализовать очередь с помощью стека
  • Сортировка значений в стеке
  • Реализация двух стеков в массиве
  • Реверс строки с помощью стека

Очереди

Основные операции

  • Enqueue—) — вставляет элемент в конец очереди
  • Dequeue () — удаляет элемент из начала очереди
  • isEmpty () — возвращает значение true, если очередь пуста
  • Top () — возвращает первый элемент очереди

Вопросы

  • Реализовать cтек с помощью очереди
  • Реверс первых N элементов очереди
  • Генерация двоичных чисел от 1 до N с помощью очереди

Связанный список

ОднонаправленныйДвунаправленныйКруговой

Основные операции

  • InsertAtEnd — Вставка заданного элемента в конец списка
  • InsertAtHead — Вставка элемента в начало списка
  • Delete — удаляет заданный элемент из списка
  • DeleteAtHead — удаляет первый элемент списка
  • Search — возвращает заданный элемент из списка
  • isEmpty — возвращает True, если связанный список пуст

Вопросы

  • Реверс связанного списка
  • Определение цикла в связанном списке
  • Возврат N элемента из конца в связанном списке
  • Удаление дубликатов из связанного списка

Графы

Вопросы

  • Реализовать поиск по ширине и глубине
  • Проверить является ли граф деревом или нет
  • Посчитать количество ребер в графе
  • Найти кратчайший путь между двумя вершинами

Деревья

  • N дерево
  • Сбалансированное дерево
  • Бинарное дерево
  • Дерево Бинарного Поиска
  • AVL дерево
  • 2-3-4 деревья

«Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. » — Procs

Три способа обхода дерева

  • В прямом порядке (сверху вниз) — префиксная форма.
  • В симметричном порядке (слева направо) — инфиксная форма.
  • В обратном порядке (снизу вверх) — постфиксная форма.

Вопросы

  • Найти высоту бинарного дерева
  • Найти N наименьший элемент в двоичном дереве поиска
  • Найти узлы на расстоянии N от корня
  • Найти предков N узла в двоичном дереве

Trie ( префиксное деревое )

Вопросы

  • Подсчитать общее количество слов
  • Вывести все слова
  • Сортировка элементов массива с префиксного дерева
  • Создание словаря T9
  • Функции хеширования
  • Размера хэш-таблицы
  • Метода борьбы с коллизиями

Вопросы

  • Найти симметричные пары в массиве
  • Найти, если массив является подмножеством другого массива
  • Описать открытое хеширование

Алгоритмы

Фундаментальные пособия

  • Knuth. The Art of Computer Programming. Volume 1 (3rd edition) (DJVU, 6.0 МБ)
  • Knuth. The Art of Computer Programming. Volume 2 (3rd edition) (DJVU, 7.6 МБ)
  • Knuth. The Art of Computer Programming. Volume 3 (2nd edition) (DJVU, 7.7 МБ)
  • Кормен, Лейзерсон, Ривест, Штайн. Алгоритмы. Построение и анализ (1-е изд.?) (PDF, 4.5 МБ)
  • Седжвик. Фундаментальные алгоритмы (3-я ред.). Части 1-4 (DJVU, 15.0 МБ)
  • Седжвик. Фундаментальные алгоритмы (3-я ред.). Часть 5 (DJVU, 16.7 МБ)
  • Кнут. Искусство программирования. Том 1 (DJVU, 5.6 МБ)
  • Кнут. Искусство программирования. Том 2 (DJVU, 6.1 МБ)
  • Кнут. Искусство программирования. Том 3 (DJVU, 6.4 МБ)
  • Грэхэм, Кнут, Паташник. Конкретная математика (DJVU, 8.9 МБ)
  • Пападимитриу, Стайглиц. Комбинаторная оптимизация: алгоритмы и сложность (DJVU, 5.6 МБ)
  • Motwani, Raghavan. Randomized Algorithms (DJVU, 4.4 МБ)
  • Tucker. Computer Science Handbook (PDF, 27.0 МБ)
  • Mehlhorn, Sanders. Algorithms and Data Structures: The Basic Toolbox (PDF, 2.0 МБ)

Олимпиадные задачи

  • Меньшиков. Олимпиадные задачи по программированию (DJVU, 4.4 МБ)
  • Меньшиков. Олимпиадные задачи по программированию (CD к книге) (ZIP, 4.0 МБ)
  • Окулов. Программирование в алгоритмах (DJVU, 3.6 МБ)
  • Долинский. Решение сложных и олимпиадных задач по программированию (DJVU, 2.9 МБ)
  • Скиена, Ревилла. Олимпиадные задачи по программированию (DJVU, 5.3 МБ)

Строки

  • Гасфилд. Строки, деревья и последовательности в алгоритмах (DJVU, 12.1 МБ)
  • Smyth. Computing patterns in strings (DJVU, 26.4 МБ)
  • Crochemore, Rytter. Jewels of Stringology (DJVU, 2.6 МБ)
  • Crochemore, Hancart. Automata for matching patterns (pdf, 0.44 МБ)

Компиляция, интерпретация

  • Aho, Lam, Sethi, Ullman. Compilers: Principles, Techniques and Tools (DJVU, 5.7 МБ)
  • Mogensen. Basics of Compiler Design (PDF, 0.81 МБ)
  • Пратт, Зелковиц. Языки программирования: разработка и реализация (4-е изд., 2002) (DJVU, 5.7 МБ)

Алгебра, теория чисел

  • Ribenboim. The New Book of Prime Number Records (DJVU, 11.0 МБ)
  • Shoup. A Computational Introduction to Number Theory and Algebra (version 2) (PDF, 3.5 МБ)
  • William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery. Numerical Recipes: The Art of Scientific Computing (PDF, 20.4 МБ)

Вычислительная геометрия

  • Препарата, Шеймос. Вычислительная геометрия. Введение (DJVU, 4.5 МБ)
  • Андреева, Егоров. Вычислительная геометрия на плоскости (PDF, 0.61 МБ)
  • Mount. Lecture notes for the course Computational Geometry (PDF, 0.77 МБ)
  • de Berg, van Kreveld, Overmars, Schwarzkopf. Computational Geometry: Algorithms and Applications (2nd, revised edition) (DJVU, 3.7 МБ)
  • Chen. Computational Geometry: Methods and Applications (PDF, 1.14 МБ)
  • Скворцов. Триангуляция Делоне и её применение (PDF, 2.5 МБ)
  • Miu. Voronoi Diagrams: lecture slides (PDF, 0.14 МБ)
  • Held. Voronoi Diagram: slides (PDF, 1.35 МБ)

Графы

  • Ahuja, Magnanti, Orlin. Network flows (DJVU, 13.8 МБ)
  • Приезжев. Задача о димерах и теорема Кирхгофа (PDF, 1.18 МБ)
  • Thorup. Unidirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time (PPT, 1.10 МБ)
  • Eppstein. Finding the K Shortest Paths (PDF, 0.18 МБ)
  • Sokkalingham, Ahuja, Orlin. Inverse Spanning Tree Problems: Formulations and Algorithms (PDF, 0.07 МБ)
  • Ahuja, Orlin. A Faster Algorithm for the Inverse Spanning Tree Problem (PDF, 0.10 МБ)
  • Brander, Sinclair. A Comparative Study of K-Shortest Path Algorithms (PDF, 0.16 МБ)
  • Gabow. An Efficient Implementation of Edmonds Maximum-Matching Algorithm (PDF, 2.7 МБ)
  • Bender, Farach-Colton. The LCA Problem Revisited (PDF, 0.08 МБ)
  • Майника. Алгоритмы оптимизации на сетях и графах (DJVU, 4.0 МБ)
  • Mehlhorn, Uhrig. The minimum cut algorithm of Stoer and Wagner (PDF, 0.12 МБ)
  • Оре. Теория графов (DJVU, 4.3 МБ)
  • Харари. Теория графов (DJVU, 8.7 МБ)
  • Stoer, Wagner. A Simple Min-Cut Algorithm (PDF, 0.20 МБ)
  • Lovasz, Plummer. Matching theory (PDF, 9.9 МБ)
  • Tutte. The Factorization of Linear Graphs (PDF, 0.47 МБ)

Структуры данных

  • Tarjan. Efficiency of a Good But Not Linear Set Union Algorithm (PDF, 0.63 МБ)
  • Tarjan, Leeuwen. Worst-Case Analysis of Set Union Algorithms (PDF, 1.55 МБ)

«Искусство программирования»

Дональд Кнут

У третьего (актуального) издания на английском языке семь томов. На русский переведено четыре из них: две части первого тома, второй и третий, а также том 4А.

Перевод с английского — И. В. Красиков, С. Г. Тригуб, Ю. Г. Гордиенко

Издательство «Вильямс», 2020 год, 720 + 160 + 832 + 960 с.

Оригинальное название: The Art of Computer Programming by Donald Knuth

Зачем читать: чтобы прокачаться в вычислительной математике и анализе алгоритмов.

Сложность:        

Самый классический и самый фундаментальный труд в нашей подборке: многотомник от всемирно признанного гуру в области программирования, автора 19 монографий и более сотни статей.

Труд настолько фундаментален, что в первой книге больше математики, чем программирования: математическая индукция, степени и логарифмы, матрицы и определители — вот это всё. Попадаются задания вроде «докажите утверждение» или «найдите простую замену для сложной формулы» — Кнут считает, что, прежде чем пользоваться готовыми чужими решениями, нужно разобраться в азах.

Далее в этом и последующих томах автор учит анализировать и оценивать алгоритмы, даёт «золотые решения» классических задач (сортировка, поиск, обход деревьев) — и сравнивает, чем хорошо и плохо каждое. Всё это помогает выбирать оптимальные вычислительные стратегии в реальных проектах.

Заметки на полях: читать непросто, но нужно. Тем более что про классику алгоритмизации и вычислительную сложность до сих спрашивают на серьёзных собеседованиях. А первый том «Искусства» даже завершается цитатой Билла Гейтса:

«Если вы смогли дочитать это до конца, вы определённо должны отправить мне своё резюме».

Алгоритмы для начинающих

Это учебное пособие предназначено для людей, не имеющих бэкграунда в продвинутых темах математики и информатики. Упор в книге делается на задачи и жизненные примеры. Разбираемые алгоритмы представлены в виде псевдокода и легко могут быть реализованы на любом языке программирования, включая Python.

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

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

«Бизнес-моделирование и анализ данных. Решение актуальных задач с помощью Microsoft Excel», Уэйн Лесли Винстон

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

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

«Рефакторинг. Улучшение проекта, существующего кода»

Мартин Фаулер

Перевод с английского — И. В. Красиков

Издательство «Вильямс», 2019 год, 448с.

Оригинальное название: Refactoring. Improving the Design of Existing Code by Martin Fowler

Зачем читать: чтобы разобраться, когда применять рефакторинг, а главное — как это делать и не развалить весь проект.

Сложность:    

Рефакторинг — это, по сути, улучшение проекта после того, как код написан. Однако рабочее кредо многих программистов (и их начальников) звучит так: «Работает — не трогай». Они не хотят тратить деньги и время на изменение программы, если результат не виден снаружи. Так и появляются проекты с многочисленными костылями и заплатками в критичных местах, копится технический долг. Со временем всё это становится нежизнеспособным.

Фаулер пишет о типичных проблемах в коде и о том, как их исправить: шаг за шагом, начиная с написания тестов и заканчивая последовательным улучшением исходников.

«Говори на языке диаграмм», Джин Желязны

Автор книги — директор по визуальным коммуникациям в консалтинговой компании McKinsey. Учит сотрудников оформлять презентации и доклады.

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

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

Если вы уже работаете аналитиком и эти книги для вас слишком простые, посмотрите на литературу более сложного уровня.

«Статистика для всех», Сара Бослаф

Автор рассказывает про основные статистические методы, знание которых облегчит жизнь аналитика. Сара Бослаф говорит, что создавала книгу больше для тех, кто хочет понимать результаты статистической обработки данных. А не только узнавать, как пользоваться конкретными методами или углубляться в математику при помощи статистических формул. 

Если вы опытный специалист, то материал, возможно, не будет для вас новым. Но в некоторых главах разбираются понятия, которые вы не встретите во вводной литературе по статистике. Книга написана понятным языком, информации много: алгоритмы статистических вычислений описаны подробно. Диаграммы, формулы, практические задачи дополняют каждую главу книги.

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

5 лучших книг по программированию на C (рекомендованных сообществом программистов)

1. Руководство для начинающих по программированию на C

«Руководство для абсолютного новичка по программированию на C (3-е издание)» Грега Перри и Дина Миллера призвано помочь новичкам писать мощные и красивые программы на C, не становясь экспертами в этом языке. Это лучшая книга по программированию на c. Книга – это быстрый способ войти в зону комфорта с языком Си с пошаговыми инструкциями. Книга состоит из 32 глав, в каждой из которых обсуждаются основные концепции программирования на C, а также даны ясные и краткие примеры, которые помогут вам лучше понять. В каждой главе кратко обсуждается концепция (концепции), а затем сразу же переходит к кодированию, следуя практическому подходу, а не теории. Читатель изучает такие концепции, как организация программ, хранение и отображение данных, переменные, операторы, ввод-вывод, функции, строки и многое другое.

Книгу курировали известные авторы и редакторы различных известных книг по программированию на протяжении многих лет. У Грега Перри более 75 книг, связанных с компьютерами и программированием. Между тем, Дин Миллер имеет более чем 20-летний опыт издательской деятельности и создал такие книги-бестселлеры, как «Научите себя за 21 день» и серию книг «Unleashed».

2. Язык программирования C (2- е издание)

Несмотря на то, что книга была первоначально опубликована четыре десятилетия назад в 1978 году, «Язык программирования C» Брайана В. Кернигана и Денниса М. Ричи по-прежнему считался священной книгой для программистов на C любого уровня подготовки и считался одним из лучших. книги для изучения программирования на C. Книга состоит из сложных упражнений, которые охватывают все важные концепции языка Си и помогают вам стать опытным программистом на языке Си.

Книга является совместной работой Кернигана и Ричи, последний из которых является создателем языка C и считается пионером в компьютерном программировании. Эта книга служила спецификацией языка в течение многих лет после ее выпуска, поскольку в ней были представлены некоторые особенности языка и описан следующий стандарт ANSI C. В нем четко и кратко объясняются такие концепции языка C, как типы, операторы, выражения, поток управления и функции. Хотя он охватывает концепции, он просто объясняет их использование, а не то, что они собой представляют. Следовательно, прежде чем вы начнете читать эту книгу, необходимы фундаментальные знания программирования. Второе издание книги, выпущенное в 1988 году, авторы заявили, что улучшили описание важнейших концепций и функций. В новой редакции также есть новые примеры,

3. Научитесь Си на твердой основе

«Learn C the Hard Way» Зеда А. Шоу – это четкое и прямое введение в современное программирование на C. Книга составлена ​​таким образом, что является идеальным выбором для всех программистов, которые хотят изучать программирование на C и стремятся улучшить свои навыки. Книга не только поможет вам изучить программирование на C, но также познакомит вас со многими новыми навыками, которые востребованы в мире программирования.

Книга заработала себе имя в мире программирования C из-за открытого кода, который она предоставляет своим читателям, а не только необходимого кода для небольших программ; книга включает реальный код, который вы можете увидеть в проектах на Github. Читателю придется проработать весь код один за другим, чтобы понять программирование на C, практически без участия рук. В книгу включены 52 прекрасно разработанных упражнения, которые помогут вам овладеть строгими приемами защитного программирования – навыком, который поможет вам в любом языке программирования, которым вы овладеете в будущем.

Помимо концепций программирования, таких как файлы, компоновщики, массивы, строки, функции, распределение памяти, библиотеки, структуры данных, стеки и очереди, в книге также обсуждаются такие навыки, как защитное кодирование, отладка, автоматическое тестирование, незаконный доступ к памяти и взлом и взлом своего кода. К книге прилагается DVD, содержащий более 5 часов видеолекций и учебных пособий, которые идеально дополняют книгу.

Совершенный алгоритм. Основы

Тим Рафгарден — профессор информатики, член института Data Science при Колумбийском университете. Серия книг «Совершенный алгоритм» (англ. Algorithms Illuminated) написана им на основе онлайн-курсов, которые он ведет на платформах Coursera и edX.

Первая часть серии представляет собой
доступное введение в основы алгоритмов.
Объяснение не привязано к каком-либо
языку программирования. В этой книге
автор рассматривает асимптотический
анализ алгоритмов и нотацию О-большое
(а также Омега-большое и Тета-большое),
парадигму «разделяй и властвуй»,
рандомизированные алгоритмы и, конечно,
несколько самых известных алгоритмов
сортировки.

В этой книге читатели также найдут
упражнения на закрепление материала и
разборы решений.

Computer Science aka Теоретическая Информатика

Перефразируя @ne555, законы математики, как и физические законы, нельзя поменять в новых версиях.

Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ (первое издание 1990г. и ещё без Штайна).

Эта книга является первой в моём топе среди всех IT книг (и вообще среди всех нехудожественных книг). Монументальный труд по алгоритмам. Написана очень хорошим и понятным языком. Алгоритмы не только описаны на псевдокоде, но ещё и тщательно разжёваны. А так же в каждой главе есть упражнения для закрепления материала. Книга настолько хороша, что если вы качественно изучите только эту книгу, (сделаете упражнения и самостоятельно реализуете большинство алгоритмов) и не прочитаете больше ни одной книги, то вы будете в программировании лучше большинства выпускников IT-вузов нашей страны (это моё оценочное суждение, основанное на опыте проведения собеседований). Тут недавно проскакивала статья о том, как не надо изучать программирование от @nsnurlan. Так вот, я убеждён, что человек, прочитавший (и понявший!) эту книгу от корки до корки и осиливший самостоятельно реализовать процентов 70 изложенных в ней алгоритмов (ну хорошо, хотя бы половину) на любом понравившемся языке программирования, способен получить работу программистом.

Дональд Кнут. Искусство программирования.

Ещё один монументальный труд, который берёт своё начало из шестидесятых годов. Сам труд давно стал классикой, а его автор – живой легендой. Несмотря на то, что она до сих пор пишется и дорабатывается, первые тома абсолютно не потеряли своей актуальности. Следует отметить, что книга имеет высокий порог входа и может отпугнуть некоторых людей. Например, в ней в начале первого тома в качестве упражнения «со звёздочкой» предлагается доказать великую теорему Ферма. Я бы рекомендовал эту книгу тем, кто хочет углубиться в хардкорную информатику так, чтобы мозги закипели.

Иосиф Владимирович Романовский. Дискретный анализ.

Книга, предназначенная для старшеклассников и студентов 1 курса , регулярно переиздаётся. У меня дома второе издание 2000 года, так что она из прошлого века. Можно сказать, что она является введением в информатику, после неё читать книгу Кормена становится несколько проще.

Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты.

Классический учебник по компиляторам. Если вы собираетесь всерьёз заняться разработкой компилятора, эта книга, как раз, то, что надо. Но я рекомендовал бы её начать читать только после того, как вы освоите базовые алгоритмы, например, по книге Кормена.

Дэн Гасфилд. строки деревья и последовательности в алгоритмах.

Если мне надо что-то вспомнить про строковые алгоритмы, я всегда сначала обращаюсь к этой книге. Если вам потребовался свой класс строки, вы теперь знаете, куда идти.

Фрэнк Харари. Теория графов.

Ещё один классический труд, который никогда не устареет. Можно, конечно, сказать, что это книга по чистой математике, и в ней не обсуждаются алгоритмы поиска пути в графе, но математика и теоретическая информатика настолько переплетены, что сложно сказать, где кончается одно и начинается другое. Хотя, на мой взгляд, теоретическая информатика является разделом математики, но это уже философский вопрос

Тем не менее, графы являются важной частью информатики и (программирования в целом), и, порой, в разработке ПО появляются задачи, для решения которых не хватает знаний из книги Кормена

Григорий Михайлович Фихтенгольц. Основы математического анализа.

Куда же без матана.

Ломоносов

математик Алексей Савватеев про экономику и теорию игр, но к программированию тоже применимо.

Борис Павлович Демидович. сборник задач и упражнений по математическому анализу.

Я сейчас очень рад тому, что, когда я учился в университете, у меня не было Wolfram Mathematica (не знаю, умела она тогда аналитически брать интегралы или нет; кажется, не умела, но это не точно) и я все положенные 70 интегралов взял сам.