Как читать книгу Вирт, Алгоритмы и Структуры данных школьнику?
Добрый день! Мне 15 лет и я хочу изучить язык C++. Сейчас я хочу пока что развиваться решая олимпиадные задачи на C++, когда уже поступлю в колледж тогда и буду что то разрабатывать пытаться. Мне посоветовали учить Pascal + Вирт, Алгоритмы и Структуры данных, я открыл эту книжку и ничего не понял, там какие то математические термины и всякие знаки которые я не понимаю. С 7 класса по 8 не проходили, сейчас перешел в 9 класс. Стоит ли мне читать эту книгу сейчас? или я могу спокойно изучать C++ а потом уже двигаться к алгоритмам? Я для начала изучение C++ выбрал сайт learncpp.com, и книгу С++ для начинающих. Шаг за шагом Герберт Шилдт, нормально мне подойдут эти материалы? если вы знаете какие нибудь хорошие книги для начинающих, напишите пожалуйста, буду благодарен.
Олимпиадные задачки, интерфейсы, несложные игрушки, приложения для решения каких-нибудь несложных задач (ежедневник, музыкальный плеер итд итп) - этого за глаза хватит на текущем этапе. Не нужно браться за книги слишком высокого уровня.
В любой кникже по алгоритмам обязательно используются символика ассимптотики (типа O(n)), это в школе вообще никогда не проходят, кроме возможно очень крутых школ с математическим уклоном. Подобную терминологию и сопутствующую теорию надо изучать или в рамках полноценной программы высшего образования (то есть пойти в институт учиться), или осваивать самостоятельно. Но на начальном этапе это не нужно. Как-то решил задачу - уже хорошо.
shurshur, тогда понял, сказали что не лезь в программирование без этой книге, не станешь программистом + будешь писать плохой код особенно работая на c++
Владислав Калужский, это нормально, я сам её никогда не читал. У нас были в университете практические занятия, где мы реализовывали какие-то методы сортировки (каждому студенту давали свой вариант), свои файловые системы (мне досталось на инодах с древовидной системой блоков), интерполяция функции одной и двух переменных, поиск собственных значений матрицы, QR/LU-разложения и всякое такое... Какие-то преподаватели давали основы TeX или сетевого взаимодествия (типа "напиши игру быки и коровы по сети"). Обучались на конкретных задачах, нередко математического содержания (по нашему основному профилю).
Советы по выбору книг. В C++ полному новичку лучше начинать с учебника Прата, Стивен "Язык программирования C++", она написана в формате учебника с упражнениями, поэтому должна быть доступна для понимания даже школьнику. Книгу критикуют за то, что неактуальна, что большая часть управления ресурсами происходит руками, небезопасно, а нужно пользоваться готовыми средствами. Но, по-моему, именно это и нужно новичку. С ней лучше получится понять, как работать с языком. Можно начать с Праты, потом читать Страуструпа (или читать параллельно). Можно было бы начать со Страуструпа, но у него тяжело написано для новичка. Его книги больше похожи на монографии, чем учебники.
Вместо Вирта можно посмотреть книгу Кормен "Алгоритмы: Вводный курс". Она написана очень подробно и точно подойдет новичкам. После неё можно читать большой учебник "Алгоритмы и структуры данных". Зацикливаться на Вирте нет смысла, потому что для работы нужны базовые компетенции, а не специализация в Паскале или глубокие познания в учебнике Вирта.
Есть проблема у всех книг на русском - неточности и просто ошибки перевода. Сейчас с этим намного лучше, чем лет 10 назад, поэтому лучше искать книги последних изданий. Ещё лучше учить английский и читать в оригинале.
code_panik, Кормен с математикой дружит, а я пока что ее нагоняю. Стивен прата у меня есть книга,читал до циклов. Сейчас начал читать Шилдта c++для начинающих шаг за шагом
Владислав Калужский, Какие именно значки тебе непонятны? Ты вообще язык изучал или решил сразу браться за алгоритмы? Базовый синтаксис языка надо знать, а также иметь опыт в решении "обычных" задачек типа "проведи робота по лабиринту".
Если с языком не знаком, пройди какой-нибудь онлайн курс, например, на stepik.org от Яндекса. Познакомишься с языком, набьёшь руку на массиве задач. Потом можешь за сложные темы.
Для изучения С++ алгоритмы не нужны.
По плюсам возьмите толстую книгу для новичков - Прата или Лафоре в качестве учебника подойдут.
Алгоритмы понадобятся на следующей стадии, когда язык будет более-менее изучен и появятся сложные задачи.
По алгоритмам много книг. Почему вам советуют именно Вирта, а не, например, Кнута? Кнут по круче будет и по забористей, а в ваших скринах из книги - школьная алгебра и геометрия, вы это уже должны знать. Возможно не узнаете в такой форме. Кстати сама по себе алгебра и геометрия к программированию особого отношения не имеют, используется там где это необходимо, но далеко не везде. Например, если вы решаете программой математические задачи (как в скринах), то без знания теории не обойтись. Но в реальном программировании не часто решают математические задачи, хотя иногда они встречаются в неожиданных местах.
Для начинающих есть "Грокаем Алгоритмы" - легкое введение в алгоритмы. В дальнейшем надо что-то по серьезней - Кормен хороший вариант или Вирт тот же. Но я бы Кормена взял.
И что бы вы не изучали в данный момент - больше практики. Выполняйте задания из книги, если возникают какие-то свои мысли/идеи пытайтесь их реализовать и т.д. и т.п.
res2001, С++ для начинающих. Шаг за шагом Герберт Шилдт подойдет? Вирта посоветовали мне другие люди,сказали это самый дефолт по алгоритмам, в 15 лет учи паскаль и эту книгу а потом иди на плюсы и все. Кнут для меня максимально будет сложен. Про книгу "Грокаем Алгоритмы" сказали что это полная безадрность, лучше понимай вирта и будешь силен в алгоритмах. Я думаю почитаю Шилдта потом Лафоре, Бьерне Страуструп "Программирование. Принципы и практика использования, а потом на скотт мейерс с++ и дальше на александреску.
Владислав Калужский, Про Шилдта я не в курсе.
Грокаем алгоритмы - это введение в алгоритмы или алгоритмы для начинающих. Чтоб сразу тема не отпугивала. В этой нише - книга норм. Да, после нее нужно читать еще что-то, но это можно будет отложить до того момента, когда почувствуете, что уже необходимо углубить знания.
Кнут - сложен даже людям с опытом программирования, я на это и намекал.
На счет изучать для начала паскаль - можно и паскаль, конечно, он проще С++. Только не паскаль, а Object-Pasal тогда уж. Но я бы не тратил время. Изучая паскаль, надо иметь ввиду, что вряд ли в реальности вы когда-нибудь будете работать программистом на паскале.
Но если уж хочется на простых примерах въехать в программирование и ООП, то можно взять питон - там вход еще проще паскаля и ООП есть. А потом С++, если захочется. Все таки питон и С++ живые языки, а паскаль скорее мертв, чем жив.
Вы можете читать все что угодно, если есть цель, то в принципе вы ее достигнете, если будете двигаться в нужном направлении, а не сидеть сложа руки. И не важно что будете читать. Можно просто гуглить. Но книги лучше все таки.
Владислав Калужский,
в книге Н. Вирта много математической нотации и она рассчитана, похоже, на студентов начальных курсов ВУЗа. Кроме того, нужно понимать основы языка Паскаль (а это совсем мало).
В действительности, основная проблема данной явно не в языке Паскаль, а в обилии математики. Даже с C++ или Python с тем же уровнем математики вряд ли книга пошла бы легче.
Так что, предлагаю взять книгу уровнем проще.
Хочу заметить, что в повседневном программировании не часто приходится использовать алгоритмы (правда, это зависит от отрасли). Самые распространённые структуры данных - это сочетание массива и ассоциативного массива.
Программирование в начале изучения - навык. Для него достаточно учебника, где простым языком написано, какие есть структуры и алгоритмы и как их использовать. Незачем лезть в издания, для прочтения которых требуется знание матана. Они - для тех, кто хочет разобраться, как оценить оптимальность использования тех или иных алгоритмов и структур.
Вы же и по методичке без всякой аналитики можете выучить синтаксис и начать практиковаться. Потом, если захочется, полезете глубже. Спойлер: многие и многие программеры до этого этапа не доходят никогда ;)
Если тебе интересно узнать как оно устроено под капотом, то бери книгу по-проще и читай. А если не особо интересно, то возьмись за написание какой-то логической или аркадной игры. Сухую теорию неинтересно учить, поэтому найди себе что-то интересное, где могут найти применения разные алгоритмы.
Я бы для начало изучил язык Cи в общих чертах, и в нем отрабатывал алгоритмы и структуры данных. Плюс он достаточно легкий всего 32 ключевых слов, а уже после перейти на С++ и изучать ООП, это классика перехода.