Pascal - точно нет. Сам язык считается очень хорошим для обучения, но увы, уже лет 20 как мёртв. Базовые концепции программирования вы на нём освоите, а вот все знания по синтаксису потом придётся выкидывать на помойку и учить заново.
По той же причине не стоит начинать изучение с Basic и ему подобных.
Есть семейства языков со своим "уникальным" синтаксисом, типа Pyton, Lisp и т.д., но если нет твёрдой уверенности, что дальше будете работать именно с ними, то тоже не советую. На начальном этапе цена переучивания синтаксиса очень высокая.
В общем, я бы рекомендовал начать с С-подобных языков. Из основных тут, собственно C, C++, C#, Java, JavaScript и PHP. Есть ещё ряд других, но они не на столько распространены.
JavaScript - отметаем сразу. Он делался "на коленке" и содержит в себе множество нелогичных конструкций с которыми приходится мириться современным разработчикам. Плюс это язык с так называемой "динамической" типизацией. Как язык для изучения основ использовать его точно не стоит.
Также, по причине "динамической" типизации, отметаем PHP.
Чистый C... я бы поспорил. С одной стороны, в начале будет тяжело из-за постоянных ошибок с утечками памяти и неправильной адресацией, но с другой, если освоите это, то дальше будет на порядок проще с пониманием нового.
С++, который ещё называют "C с классами" - то же самое, но добавляются концепции объектно ориентированного программирования. С точки зрения обучения основам принципиальной разницы нет.
Остаются C# и Java. Они "одноклассники", созданные прямыми конкурентами для решения бизнес-задач. Java больше распространён, у C# чуть более понятный и логичный синтаксис.
Дальше имеет смысл отталкиваться от задач. Если есть желание заняться, например, написанием игр, то всё-таки стоит начать с C/C++ и сразу развивать в себе навыки контроля памяти и прочих специфичных для C/C++ нюансов. Если же больше привлекает решение бизнес-задач, то смотрите, какие свзанные с этим конторы есть в вашем городе и целенаправленно затачивайте свои знания под это. Если у вас в городе, допустим, никто C# не практикует, то и изучать его смысла особо нет.
Anani Bareyan, а дальше что? У новичка через несколько месяцев обучения в голове будет 50% знаний по алгоритмике и прочим нужным вещам, а ещё 50% - по синтаксису. Это у матёрых спецов, которые в типовых ситуациях нужные алгоритмы уже на подсознании применяют, расклад может быть и 80/20, и 90/10 и даже больше, а новички хорошо, если те самые 50/50 распределение получат.
И после этого у них два расклада. Либо дальше сидеть на синтаксисе Basic'a, но нормальных языков промышленной разработки, по сути, нет (я в курсе про VB.NET, но про хоть сколько-нибудь массовое использование его на проектах даже близко не слышал), либо менять язык.
Переход с условного C# на условную Java, или с C на C# для новичка будет относительно дешёвым, так как синтаксически языки очень близкие. Да, заморочки будут, особенно если человек уже начал в глубину лезть, но в пределах разумного. А вот с бейсика перебраться на что-то С-подобное уже на порядок сложнее. Профи, да, сделает это без особого труда,пожертвовав примерно 10-й частью своих знаний. А вот новичку придётся выкидывать уже почти половину. И это критично.
Меня самого в своё время хорошо так помотало по пути Basic/Pascal/C в самом начале изучения программрования. И могу точно сказать, что с без этих перескоков всё было бы значительно легче. Можно было бы спокойно идти вперёд, не откатываясь назад каждый раз на несколько недель.
Александр К1, Изучать Small Basic нужно как раз ради алгоритмики и основ программирования. Каждый следующий язык изучать будет гораздо легче. И не обязательно зацикливаться на VB или VB.NET из-за схожести синтаксиса. Но изучив первый язык программирования Small Basic, начинающий уже поднялся на одну ступень. А если предложить начать изучать алгоритмику с Си-подобного языка программирования, не всякий начинающий может преодолеть такую высокую ступень, следовательно есть большая вероятность остаться на нулевом уровне.
Речь не о том, чтобы промышленно применять или зарабатывать на Small Basic, вопрос стоит, с чего начать, т.е, переформуливовав вопрос, с какого языка программирования стоит начать изучать алгоритмику и синтаксис. Алгоритмика и синтаксис это как стратегия и тактика, цель и способ достижения цели. Первичнее и важнее все таки цель, а не способ достижения.
Anani Bareyan, ну вот, предположим, что я новичок и ничего про программирование толком не знаю, но хочу разобраться. И есть базовые алгоритмы, которые мне надо освоить. Всякие там поиски, определение максимального и всё такое прочее.
В чём, с точки зрения написания алгоритма, у Small Basic преимущество перед С, или С#?
На сколько я знаю, в С на таком уровне можно запутаться ровно в двух местах: это забыть амперсанд при чтении данных и сделать выход за границу массива. Всё. Остальное уже либо будет проходить по категории «экзотика», либо будет связано не с языком, а с конкретным алгоритмом. И то, современные компиляторы на обе эти ошибки проверки делают, и выдают вполне вменяемые сообщения об ошибках. Нет, при желании извратиться можно всегда, язык позволяет, тут даже спорить не буду, но я как-то сторонник перманентного вырывания рук людям, пишущим конструкции вида i++ + ++i как в боевых проектах, так и в процессе обучения, поэтому проблем не возникало.
В С# ещё проще. Одной ошибки там нет в принципе, а вторую надо суметь воспроизвести, так как типичный проход по массиву идёт через запрос его длинны у него же. Да, за счёт скрытого присутствия ООП появляются конструкции через точку, но я честно не понимаю, в чём разница между условным Write, printf и Console.Write. Во всех случаях это функция, и объяснять, что такое Console во всех деталях вовсе не обязательно.
В результате та же алгоритмика на С и С# это далеко не что-то неподъёмное. Объяснял не раз и не два. Реально на пару узких мест обратить внимание, а дальше всё как в любом другом языке.
А вот альтернатива... Ну ок, выучил я на базовом уровне алгоритмы, умею теперь всякие максимумы/минимумы считать, пора переходить к реальным задачам... и тут выясняется, что мне надо заново учить язык. Пальцы по привычке пишут один синтаксис, а он немного другой, некоторые операторы поменялись радикально, и всё такое прочее. Плюс, меняется привычная среда разработки - привычные пункты меню переехали, сменились горячие клавиши, и всё такое прочее. В результате идёт довольно сильный откат назад. Нет, человек, освоивший алгоритмы, рано или поздно этот барьер преодолеет, но несколько недель обучения, как правило, идут псу под хвост. И причём, больше всего тяжести в преодолении такого барьера испытывают как раз люди, у которых и до этого наблюдались проблемы с синтаксисом. Так что те, у кого были шансы остаться на нулевом уровне из-за более сложного уровня С, здесь гораздо большие проблемы получат.
Anani Bareyan, и потом выкинуть его в помойку вместе с потраченным временем?
Alexv, Судя по Вашей логике, если Вы научились водить сначала на учебной машине, а потом только сели в свою машину, то учебу на учебной машине можно выкинуть на помойку вместе с потраченным временем?
Или давайте всю школу, по вашей логике, вместе с потраченным временем (10-11 лет) выкинем на помойку, ведь вы вуз окончили, а только затем начали работать и зарабатывать. По вашей логике, зачем школа нужна, надо после детского сада сразу получать профессию и работать, зачем 10-11 лет выкидывать на помойку?
Anani Bareyan, мне кажется, аналогия с автошколой правильная, только не вполне корректная по части сравнения учебная/личная машина. Не на столько языки близки. Даже для C++/C# я бы сказал, что речь идёт, как минимум, про сравнение механика/автомат. А для пары Basic/С-подобный язык правильнее, наверное, будет сравнение мотоцикл/машина. Причём сами выбирайте, какой язык машина, а какой мотоцикл - мне без разницы.
И там и там алгоритмы (правила дорожного движения) будет одинаковы. Если с ними разобраться один раз, то дальше с ними проблем, действительно, не будет. Но вот управление (среда разработки и синтаксические конструкции) будут сильно различаться. И просто так с одного средства передвижения на другое не пересядешь.
человеку который не разбирается в программирование бейсик и паскаль помогут понять саму суть программирования. но практической пользы эти языки не принесут. язык си это основополагающий язык для большинства других языков программирования. питон слишком специфичен, его круг задач тоже узок и скорее всего он не пригодится. так что остается только си
Алексей Шмелев, в целом, да, но тут уже начинается беда с компиляторами. Из моего опыта, после самых первых заданий на циклы/массивы самым лучшим заданием, которое толкает новичков активно расти дальше, является игрушка. На ней и кучу алгоритмов можно объяснять не абстрактно, а на практике показывая, зачем оно нужно, и у студентов мотивация очень сильно подпрыгивает по сравнению с условным перемножением матриц для решения абстрактных дифуров. И вот тут всё и встаёт колом. Старые добрые досовские компиляторы графику поддерживают только через прямое обращение к видеопамяти, что современная винда сильно не любит. По крайней мере лет 10 назад, когда эта проблема была актуальна для меня, я так и не смог найти компилятор с нормальным стартом досовской графики под виндой, который можно было бы спокойно отдать студентам-новичкам, не рассказывая им кучу всего про эмуляторы, виртуалки и иже с ними. А делать графику уже под Windows на том же Visual C++ - мрак полный, в плане того, что я знаю гораздо менее затратные способы отчислить большую половину потока.
У шарпа с этим, кстати, сильно проще и лет 10 назад было, и сейчас, с активным развитием того же Unity.
Вас спрашивают с чего начать и вы пишите "Также, по причине "динамической" типизации, отметаем PHP.". Так может он сначала принципиально разберется что к чему, а потом пихать ему Си. Дальше ""уникальным" синтаксисом, типа Pyton". Именно с питон, javascript, php начать проще всего.
Вы бы еще ассемблер посоветовали.
Punk Print, я не раз и не два слышал, что у человека, который пишет на языке со статической типизацией, переход на динамическую проблем не вызывает. А вот наоборот часто бывает очень больно. И наглядных примеров тоже хватало. Лично мне, в своё время, повезло - переход легко прошёл (я с бейсика начинал, потом паскаль, C, C++, немного PHP, C#, JavaScript), но примеры того, как PHP-шник пытался выучить C# я видел не раз, и очень часто это тяжело было.
Поэтому если есть желание целенаправленно уходить в веб, то начинать с JavaScript тоже вариант. Аналогично и для питона, или пхп - если есть понимание, что работа будет целенаправленно с ними - не вопрос. Но если мы говорим про классический подход к обучению, когда язык будушей работы заранее неизвестен, я бы всё-таки с "динамики" начинать сильно не рекомендовал бы.
Если действительно с нуля, однозначно Visual Basic. Он (Visual Basic for Aplication - VBA) встроен во все приложения Microsof Office: Word, Excel, Accses - это само по себе уже полезно, особенно для технарей, вынужденных вести расчёты. Один мой знакомый пишет вспомогательные программы для бухгалтеров. 30 тыр в месяц не напрягаясь, поскольку всё им давно уже написано.
Агдамов Александр, даже не знаю, как реагировать. Access, по факту, не используется практически нигде (я знаю, что есть отдельные организации, но я говорю именно про массовое использование), Excel ценен именно тем, что в нём можно кучу всего сделать без программирования, а макросы для Word давно уже стали притчей во языцах как способ распространения вирусов. Я уж не говорю о том, что макросы не переносятся в облачные документы, или в OpenOffice, блокируются большинством антивирусов по уже озвученной причине, да и сам Microsoft их использование настоятельно не рекомендует. Нет, я не спорю, что есть определённые узкие ниши в полузакрытых организациях, и я очень рад за вашего знакомого, который смог найти себе место под солнцем, но с точки зрения начала изучения программирования вы даёте людям очень плохую рекомендацию.
дельфи не язык, это платформа разработки. сказать учил дельфи это примерно как сказать учил визуал студию ну или phpstorm