На днях мой папа задал мне вопрос, который я бы никогда не ожидал от него.
"Как я могу выучить C ++?"
Моему отцу в этом году исполняется 56 лет, и компьютеры для него - далекая концепция. Он не знает, как правильно пользоваться телефоном, кроме телефонных номеров (без быстрого набора или контактов); хотя он начал изучать компьютеры немного лучше - до такой степени, что он знает, как открыть Интернет (в Windows) и просматривать информацию (и он успешно выполнил несколько заявлений о приеме на работу полностью в своем собственном режиме онлайн, из которых ему также предлагали должности ). Но все же, это слишком узкий опыт, чтобы на самом деле много значить.
Хотя он может не иметь фона, мой папа умеет читать. И я имею в виду чтение как навык, а не просто умение. У него практически нет образования в колледже (финансовые проблемы, семья и т. Д.), И ему посчастливилось закончить среднюю школу, но он все еще учился, чтобы стать мастером-электриком, и был таковым почти 30 лет. Он сделал то же самое с гитарой, научился играть на очень профессиональном уровне и получил высокую оценку за свое мастерство. В старших классах он взял книгу по тяжелой атлетике - и был единственным человеком в своей средней школе в то время, который официально квалифицировался как «спортсмен» по национальным стандартам.
Во всех случаях ему просто нужно было что-то прочитать. Чему его научить. Он впитывает информацию, как губка.
Я не сомневаюсь в мотивации моего отца или в способности делать это, поэтому моя общая цель просто:
Погрузи моего отца в мир компьютеров и приведи его на путь программирования.
Я твердо верю, что как только я проясню его основы, его навыки вождения и чтения заставят его продолжать в том же духе.
Поэтому я вас всех спрашиваю: с чего мне все это начинать? И каковы лучшие ресурсы там? Должен ли я заставить его запустить Linux вместо Windows? С ++ плохая идея?
Помните, ему нужно (ИМО) сначала изучить компьютеры, а затем получить первое понимание (опыт "Hello world") программирования.
Ради денег и, в первую очередь, я хотел бы получить бесплатные онлайн-ресурсы, которые он может читать, но, безусловно, приветствуются любые хорошие предложения в печатном или платном виде (которые я мог бы изучить позже, чтобы купить).
А также, я намерен начать его с C ++ (без Python, Java и т. Д.), Потому что я знаю это лучше всего и смогу помочь ему на протяжении всего пути с кодом. (У меня сейчас минимальные знания на других языках).
Изменить: я получаю много постоянных предложений по использованию Python. Единственная причина, по которой я хотел сделать C ++, заключается в том, что я ЗНАЮ это и могу быть ТАМ, когда моему отцу нужна помощь. Моим ОЧЕНЬ ПЕРВЫМ знакомством с программированием была Java. Я выучил Java, и у меня это получилось. Я открыт для других предложений, но, пожалуйста, обеспечьте эффективное применение ваших предложений.
РЕДАКТИРОВАТЬ № 2: Я понимаю, что мой подход / мышление / знания могут отсутствовать здесь. Я студент второго уровня бакалавриата CS. Если вы не согласны с чем-либо в моем посте, скажите мне, почему - дайте мне идеи, информацию - вот почему я спрашиваю в первую очередь. Сузить мою общую цель до конкретных достижимых целей.
Ответы:
Прежде всего, даже если вы лично хорошо знаете С ++, это ужасный, ужасный первый язык для начинающих, и я не могу рекомендовать достаточно сильно, чтобы держать его как можно дальше от него, если он хочет успешно научиться писать код. Обучение программированию - это не язык, а обучение умению выражать абстрактные требования в формальной логике. С ++ затрудняет фокусировку, потому что вы постоянно спотыкаетесь о языковые проблемы.
Если он хочет научиться выражать идеи в формальной логике, пойти на что-то, что делает это простым. Я бы выбрал Pascal (для разработки на уровне приложений) или Python (для работы на уровне сценариев), потому что они оба разработаны так, чтобы быть интуитивно понятными и легкими для изучения в качестве основных приоритетов. Если он действительно знает принципы написания кода, то, если он действительно заботится о C ++, он может его взять.
По той же причине не запускайте его на Linux вместо Windows, потому что тогда у него есть две проблемы, на которых нужно сосредоточиться: изучение Linux и изучение кодирования одновременно! Держите отвлекающие факторы к минимуму.
Что касается реальных ресурсов программирования, найти учебники в Интернете достаточно просто, но я обнаружил, что лучший способ научиться программировать - это программирование. Найдите что-то, что вы хотели бы сделать, а затем начинайте понимать, как это сделать.
Несколько лет назад я увидел игру и подумал: «Я мог бы сделать это, и я мог бы сделать это лучше». Поэтому я запустил Delphi и начал выяснять принципы. Я все еще изучаю новые вещи из этого личного проекта, и по пути я стал действительно хорошим программистом! Так что попробуй это; спросите своего отца, что он хотел бы сделать, если бы он мог программировать - и убедитесь, что это возможно, и достаточно мал по объему, так как у него еще нет опыта, - а затем сядьте с ним и начните выяснять с ним, как это сделать. Это.
И если у него есть какие-либо вопросы, получите ему учетную запись StackOverflow. :)
источник
Я думаю , что интерес вашего отца в C ++, безусловно , аккуратный , но он не был бы моим выбором для первого языка программирования - если он не имеет очень конкретное требование , что он заинтересован во встрече. (Даже в этом случае изучение C ++ после изучения другого, более простого языка может быть намного проще.)
Есть несколько вещей, которые важны для программирования:
Во многих отношениях синтаксис и семантика определенных языков близки к завершению навыков, необходимых для программирования. В конце концов, если вы близки к правильному, большинство компиляторов скажут вам, какую ошибку вы допустили - хотя для декодирования того, что конкретно говорят компиляторы, требуется опыт.
Итак, я бы посоветовал вашему отцу с первого взгляда взяться за гораздо более простой язык программирования: Ruby, Python, C, C #, Haskell и т. Д. (Haskell определенно труден для людей, которые программировали только императивные языки, но я Было бы любопытно узнать, испытывают ли полные новички такое же чувство "рыбы из воды".)
Придерживаться более простого языка заранее означает, что ваш папа будет иметь больший успех раньше, и ему будет легче «играть». Интерактивная петля REPL многих языков является отличным местом для изучения.
Как только ваш папа познакомится с функциями, классами, объектами, методами, то мелочи и нюансы C ++ не будут так подавляющими. Черт, даже начинать с C было бы проще: это не прощает , но есть меньше запутанных функций, о которых нужно беспокоиться.
Вам любопытно, что Linux против Windows; Я не уверен, что различие имеет большое значение. Если он уже знаком с той или иной средой, переключение - это еще одно препятствие. Если он не знает ни того, ни другого, я бы предложил Linux, но в основном потому, что установка хороших инструментов смехотворно проста:
apt-get install <foo>
работает в большинстве дистрибутивов, а не поддерживаемые дистрибутивыapt
часто предоставляют нечто подобное. Минуту спустя, ваш аккуратный новый пакет установлен, часто быстрее, чем мне понадобилось бы, чтобы найти надежный источник загрузки для предварительно скомпилированных двоичных файлов Windows, который не пахнет троянскими конями.источник