Комментарии 76
Идёте и гугл, яндекс или чем вы пользуетесь и забиваете там запрос: «бесплатные онлайн курсы программирования» и выбираете просто по описаниям 5 разных языков. Почитайте про разные, может что-то зацепит. Если что-то зацепило, всё выбор сделан, берите это.
Серьезно? Советовать начинающему, вообще без опыта, выбрать язык по впечатлениям из гугля или википедии? Или по описаниям курсов? Это же почти 100% гарантия ошибиться.
>Вся статья о том что конкретный выбор не имеет значения.
Вот я и сомневаюсь. Если вы выберете в качестве первого языка Хаскель, или скажем Lisp (любой из), у вас в итоге будет совсем другой набор базовых навыков, чем если вы выберете тот же javascript (и пойдете в сторону веба). Психологические барьеры зачастую очень сложно преодолеть, я не думаю, что все люди такие же, как вы или я, и им легко свой выбор в любой момент поменять, и взяться за другое направление.
Выбор не имеет значения (почти) только если вы выбираете между очень похожими, и скажем так, обычными языками. Ну там, Java или C# — наверное все равно, переход на другой не будет так уж сложен (хотя экосистемы уже очень разные).
Ну то есть, в целом наверное можно согласиться, что начать можно с чего угодно — но результат все-таки будет отличаться. Если меня спросить, то я бы пожалуй сказал, что стоит взять сразу два или даже три языка, возможно разных, и попробовать с ними поиграться. В мое время это были скажем Алгол-60, Фортран, PL/1, ассемблер S/360 (причем три из них де-факто процедурные, и похожие), а сейчас можно и что-то поинтереснее найти для начала.
Мне вот далеко не очевидно, что это не будет результатом просто хайпа вокруг языка. То есть будет выбран язык не самый подходящий, а тот, о котором больше шумят. Модный, по-простому говоря. Более того, начинающий просто не сможет сам оценить, что на самом деле важно и интересно, а что — словесный мусор.
Как раз в этом направлении я бы ожидал, что начинающим дадут более конкретный совет — пусть даже не слишком детальный. Ну типа «Попробуйте Rust, если хотите писать что-то близкое к железу, но не на C», или «Попробуйте Хаскель, если вам нравится математика» (я тут упрощаю и утрирую, конечно же).
Ещё важный момент, чтобы была IDE, которую можно скачать и начать пользоваться, а не танцевать вокруг неё с бубном.
И чтобы эта IDE не была хуже блокнота и консоли, как, например, то, что поставляется с Питоном.
Для меня Ваше утверждение звучит дико.
Искренне не понимаю какие такие барьеры сложно преодолеть, и какие такие трудности возникают в чтение спеки на новый язык.
Лично у меня: машинные коды(в восьмиричной системе!) Урал-1, потом Алмир, фортран-4, ассемблер 8080, Бейсик в нескольких инкарнациях, Алгол-60, ассемблер Электроника-60, Паскаль, а вот дальше уже Lisp(это для AutoCAD), Forth(это для обработки измерений в реальном времени), Си и разные ассемблеры, Lua. Я пишу довольно редко и всегда для управления каким-либо железом, почти всегда в реальном времени, поэтому С++ никогда не пользуюсь, хотя знаю конечно, и вообще ООП с железом плохо дружит. Более высокие уровни я всегда сплавляю другим, сам смотрю только архитектуру и дизайн
В своем будущем. И потом не разберетесь, не надейтесь. Потеряете интерес, и уйдете в эффективные менеджеры. Хотите сказать, что такой сценарий невозможен?
>«Сначала учи это, а потом это» — ну не интересно это
Я совершенно согласен, что интерес (для начала) — это очень важно. Но обучение не может строиться на одном интересе, потому что ему свойственно пропадать. Иногда нужно усвоить некоторые фундаментальные вещи, возможно сложные для понимания. Или когда сразу не очень понятно, зачем они нужны.
Фактически, автор предложил пустить все на самотек. Я не могу доказать, что такой подход верный, или наоборот. Вряд ли такое вообще можно доказать. Но я считаю, что учить (и учиться) можно и нужно иначе. Скажем, нужно давать человеку принципиально разные языки. Даже если он никогда не будет писать на лиспе — нужно попробовать, как это делается. Нужно посмотреть на язык с реально мощными типами данных, желательно статически типизированный. И на другой язык, типизированный динамически. Попробовать разные подходы. Во-первых, это как раз реально интересно. А во-вторых, понимание, что одни и теже вещи можно делать разными способами — это очень полезно в перспективе.
Потеряете интерес, и уйдете в эффективные менеджеры.
Значит судьба такая.
Но обучение не может строиться на одном интересе, потому что ему свойственно пропадать.
Если интерес пропал — значит он не настоящий.
Если интерес приходится создавать искусственно, то нужно ли учиться?
Да, в моей вселенной интерес (и у детей, и у обучаемых, когда я преподаю) всегда приходится создавать, или как минимум поддерживать исскусственно.
Простите, но здесь речь, кажется, о самообразовании?
Человек хочет стать программистом по зову души или сугубо ради денег? Если первое — то он не перегорит. Если второе — то зачем нам такой программист?
Человек хочет стать программистом по зову души или сугубо ради денег?
Обычно в одном программисте прекрасно сочетается и то, и другое. Но не суть важно, этот самый зов души возникнет не на пустом месте. Профессия — это не девушка, к ней не бывает любви с первого взгляда за счёт выброса гормонов. Сначала надо как раз заинтересоваться с чьей-то помощью, потом опять же таки попробовать с чьей-то помощью, а уже после этого может возникнуть «зов души».
Сначала надо как раз заинтересоваться с чьей-то помощью
И почему это мне ничья помощь не потребовалась? Читал книжку про компьютеры, узнал, что бывает такой BASIC. Решил попробовать — понравилось. Всё.
Сам процесс разработки и написания кода доставляет удовольствие. Это необходимое и достаточное условие, чтобы стать программистом.
И почему это мне ничья помощь не потребовалась?
Таких как вы, среди миллионов программистов, в пределах статистической погрешности. И половина из них тут на Хабре :)
Мне это странно. Если человеку не интересно программировать, то может ему не надо становиться программистом? Зачем себя насиловать?
Помощь в обучении — это понятно, это нужно. Но помощь в поддержании интереса — это что-то выходящее за рамки моего понимания.
Мне это странно. Если человеку не интересно программировать, то может ему не надо становиться программистом? Зачем себя насиловать?
Потому что человеческое восприятие, оно не полярно. Да, бывают исключения, когда кто-то сам загорелся идеей, сам разобрался, сам довёл до конца. У меня, например, было точно так же, я вырос в семье горного мастера и химика, безнадёжно далекой от электроники в целом, и от вычислительной техники в частности. Но мне как-то случайно мама три с лишним десятка лет назад купила детскую книжку про кружок программирования на калькуляторах, я «загорелся», и отец, нифига не понимая собственно в этом деле, но видя мой интерес, подарил мне на день рождения МК-61.
А все остальные вокруг меня пришли в программирование другим путём. Кто-то просто пошел в институт, потому что специальность была популярная, кто-то курсы закончил, у кого-то семья ИТшников. И они хорошие программисты, никто себя не насилует, но без человека, который их заинтересовал, будь-то родители, преподаватели и так далее, они не стали бы программистами. И даже я сам, не будь той книжки (или какой-то другой такой же), чёрта с два стал бы программистом.
Это вопрос сложный. У меня ребенок вообще не думает про деньги. Хотя пора бы уже думать, на что собирается жить уже совсем скоро. Если деньги при выборе не единственный стимул — то это не самый плохой вариант, мне кажется.
А что касается разных языков, то да, это безумно интересно когда встречаешь что-то абсолютно новое, и пока хоть что то не сделаешь на этом языке (для себя, исключительно для себя) не успокоишься. Лично у меня одно из самых ярких воспоминаний, как я сражался с обратной польской нотацией и таки справился с нею.
Технологии и подходы меняются очень быстро
Ну как «очень быстро»? Только в период интенсивного роста в каком-либо направлении. Например, недавно так росла веб-разработка, но пик уже пройден, сейчас идёт стабилизация. Во многих остальных сферах ИТ вы будете спокойно использовать технологии и подходы десятилетней давности ещё лет пять-десять. Поэтому эта «аксиома» — нифига не аксиома
Любые расчёты по интересующей его теме. Я, вот, в Бейсике на ДВК орбиты рассчитывал.
К списку полезного в вузе я бы добавил теоретическую информатику: алгоритмы, конечные автоматы, машина Тьюринга, методы оптимизации и всякие P = NP. Не то чтобы оно было нужно постоянно, детали все давно забыты, но знание о принципиальной возможности или невозможности решения задачи весьма полезны. Помогает не биться линий раз в стену невозможного и не сдаваться перед преодолимыми сложностями.
Перечисление есть во всех остальных статьях для новичков, а в этой ценный совет про получение удовольствия от процесса.
Первый язык программирования оказывает очень серьёзное влияние на формирование стиля написания кода. После JavaScript или Python придётся долго и больно отвыкать от вседозволенности, провоцируемой языками с динамической типизацией, а после C — от трюкачества и повсеместного использования побочных эффектов и адресной арифметики.
Потому, если говорить об императивных языках, для начального обучения нужен предельно простой язык с минимумом «магии» (например, this в ООП — это уже «магия») и максимально жёсткой статической типизацией. В первой редакции учебника Вирта использовался Pascal, во второй — более простой (и при этом более мощный) Modula-2, в актуальной — ещё более простой (и, опять же, более мощный) Oberon-07.
Выбирать надо не язык программирования, а качественный учебник программирования — который будет учить не особым случаям и исключениям из правил в модном языке, а основам алгоритмики
Боюсь, любой учебник с основами алгоритмики в качестве старта для программирования напрочь отобьёт желание программировать у кого угодно.
после C — от трюкачества и повсеместного использования побочных эффектов и адресной арифметики
Вот как раз перейти с С/Паскаля на что-то менее строгое (не знаю, можно ли термин «строгий» применить к С, конечно) намного проще, чем наоборот.
Боюсь, любой учебник с основами алгоритмики в качестве старта для программирования напрочь отобьёт желание программировать у кого угодно.Если даже предельно простой Вирт может отбить желание, значит реального желания и не было.
Вот как раз перейти с С/Паскаля на что-то менее строгое (не знаю, можно ли термин «строгий» применить к С, конечно) намного проще, чем наоборот.Паскаль (если это именно классический Pascal, а не PascalABC.Net) — отличный учебный язык. Но С таковым не является: практически любой ЯВУ со статической типизацией будет строже, чем C; плюс придётся учить те базовые вещи, которые в С отсутствуют: начиная с передачи по ссылке и представления о том, что массивы — полноценный тип данных, а не синтаксический сахар для адресной арифметики.
Если даже предельно простой Вирт может отбить желание, значит реального желания и не было.
Понимаете, желание программировать никогда не бывает желанием сортировать массивы или делать бинарный поиск. Желание программировать — это всегда желание создать что-то конечное, будь-то игрулька, мессенджер, бот и так далее. Основы алгоритмики, это лишь одни из многих инструментов для достижения цели. Поэтому надо сначала учить именно язык, среду разработки и библиотеки, на примерах создания чего-то осязаемого, а в процессе — заглядывать на нужные для этого алгоритмы.
если это именно классический Pascal
Давайте исходить из того, что реализаций классического Паскаля не существует. Паскаль, на котором человек будет учиться, это либо FreePascal/Delphi, с указателями и прочим добром, либо PascalABC.Net.
плюс придётся учить те базовые вещи, которые в С отсутствуют
О, это как раз намного проще. Я не считаю, что С — такой уж хороший язык для обучения, тот же Паскаль намного более подходит. Но изучив С, человеку очень легко изучать другие языки. Как раз за счёт того, что появляется полное понимание, как внутри работают более сложные типы.
Понимаете, желание программировать никогда не бывает желанием сортировать массивы или делать бинарный поиск.Желание написать роман никогда не бывает желанием выучить правила грамматики русского языка. Но без знания этих правил любой текст превратится в нечитаемый набор букв.
Основы алгоритмики, это лишь одни из многих инструментов для достижения целиНет, основы алгоритмики — это те базовые знания программирования, без которых любой проект превратится в кучу кривых велосипедов.
реализаций классического Паскаля не существуетFreePascal/Delphi прекрасно понимают код, написанный на классическом Pascal. Тогда как на PascalABC.Net этот код вызовет кучу предупреждений. Но главное даже не этом, а в том, что в Pascal/FreePascal/Delphi присваивание — оператор, а в PascalABC.Net — операция (как и в C, кстати) и одно это разрушает принципы, на которых построены и классический, и объектный Pascal.
с указателямиВ классическом Pascal указатели тоже есть, только там они всегда явные. Что намного лучше для обучения, чем «здесь играем, здесь не играем» Delphi.
изучив С, человеку очень легко изучать другие языки. Как раз за счёт того, что появляется полное понимание, как внутри работают более сложные типы.Изучив C первым языком, человеку придётся долго и мучительно переучиваться писать качественный код на языках, в которых C'шного трюкачества нет. Что касается понимания работы сложных типов, то для этого куда полезнее вторым языком изучить основы ассемблера.
Желание написать роман никогда не бывает желанием выучить правила грамматики русского языка. Но без знания этих правил любой текст превратится в нечитаемый набор букв
Сейчас, в 21 веке, несложно быть успешным программистом, не прочитав ни единой книги по алгоритмике. Хорошо это или плохо, вопрос отдельный. Но несложно, это факт. Есть какие-то исключения, области, где алгоритмика до сих пор нужна, но это именно исключения. В 99% случаев вам, чтобы софт нормально работал, надо просто знать «кирпичики» библиотек, которые есть на вашей платформе. И метод sort() будет для вас прекрасно сортировать, даже если вы понятия не имеете про алгоритмы сортировки.
Изучив C первым языком, человеку придётся долго и мучительно переучиваться писать качественный код на языках, в которых C'шного трюкачества нет.
Наоборот, если человек приучен писать качественный код на С, он везде будет писать качественный код. А если не приучен, то совсем не важно, на каком языке он пишет :)
Сейчас, в 21 веке, несложно быть успешным программистом, не прочитав ни единой книги по алгоритмике.Можно быть успешным кодером, умеющим собирать из готовых библиотек код, решающий шаблонные задачи. Только вот к программированию это никакого отношения не имеет.
И метод sort() будет для вас прекрасно сортировать, даже если вы понятия не имеете про алгоритмы сортировки.Только до тех пор, пока решаемые задачи позволяют более-менее эффективно использовать встроенную сортировку. Как только попадётся что-то нетривиальное, выбивающееся из «средней температуры по больнице», под которую делаются стандартные библиотеки, о встроенном методе sort придётся забыть.
Впрочем, сортировки надо изучать не для того, чтобы каждый раз писать свой велосипед, а для того, чтобы на их примере учится понимать применимость алгоритмов для разных входных данных, учиться оценивать эффективность собственного кода.
если человек приучен писать качественный код на С, он везде будет писать качественный кодПроблема только в том, что научиться писать качественный код на C, как первом языке, многократно сложнее, чем на Pascal или на Go. Качество кода — это прежде всего дисциплина кодера. И чем больше вольностей позволяет первый язык, тем сложнее привить эту дисциплину. А в плане бесконтрольности и вседозволенности хуже С только ассемблеры и модные языки с динамической типизацией.
И чем больше вольностей позволяет первый язык, тем сложнее привить эту дисциплину.
Дело не в этом. Дисциплину в принципе невозможно привить до тех пор, пока размер исходников не переваливает за десяток килобайт. На учебных примерах это не постигается.
Пока сам не начнёшь путаться в собственном коде — не прочувствуешь, зачем нужны стандарты кода. А в программе длиной 5 кб запутаться невозможно.
while (*b++ = *a++);
содержит три!!! побочных эффекта в одном простейшем выражении. Так не получится написать ни в Pascal, ни в Go. Но в C это абсолютно нормальная и даже поощряемая практика.Язык, в котором можно написать
a ^= b ^= a ^= b;
, провоцирует учащегося писать именно так. А там, где более «строгие» языки выдадут сообщение об ошибке, в C будет никак не отображаемое UB — при котором ошибочный код может выдать правильный результат: учащийся даже не поймёт, что совершил ошибку.Можно быть успешным кодером, умеющим собирать из готовых библиотек код, решающий шаблонные задачи. Только вот к программированию это никакого отношения не имеет
Разделение на «кодеры» и «программисты» — штука совершенно надуманная. Причём надуманная, как правило, чуваками, которые хотят выделить свою значимость и профессионализм в сравнении с кем-то, пишущим нечто более примитивное. На самом деле все они программисты, и те, кто тензорные вычисления для задач ИИ сочиняет, и те, кто формы для главбуха Марьи Ивановны шлёпает.
Как только попадётся что-то нетривиальное, выбивающееся из «средней температуры по больнице», под которую делаются стандартные библиотеки, о встроенном методе sort придётся забыть.
Сейчас у 99% программистов что-то настолько нетривиальное за всю историю и не попадётся, а если вдруг попадётся, у них либо в команде найдётся кто-то, кто решит, либо так пустят в продакшен, а пользователи скушают.
И чем больше вольностей позволяет первый язык
… тем вероятнее юный падаван, приступив как-нибудь к разбору собственного кода, написанного полгода назад, поймёт, что он сделал не так, и начнёт писать нормально. А язык, который сам по себе не позволяет писать говнокод, не научит и понимать, почему говнокод — это плохо.
Как выбрать первый язык программирования, гайд желающим начать программировать