Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Sharov, Вы писали:
Pzz>>>Может, Go?
S>>С нуля? 10-11 летним? Надеюсь, это шутка была...
Pzz>А чем, собственно, Go хуже питона или паскаля?
Он как бэ сложней, и я бы не сказал, что это язык "общего пользования". Это язык для всяческих параллельных активностей и организации их взаимодействия. Он конкурирует с эрлангом, растом и т.д. Эрланг явно на язык для ознакомления не тянет. Плюс синтаксис у Го не самый удачный, на мой взгляд. Я бы начал либо с питона -- куча курсов для всех уровней, либо с Паскаля -- классика, мой первый язык в вузе.
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Пиши с отступами — иначе не будет работать... Pzz>>Мне больше нравится подход golang, когда редактор сам форматирует программу в читабельный вид при первой возможности, и попробуй откажись. LVV>С этим я согласен, но что-то не видать сред для обучения, которые учитывали бы неопытность новичков.
Что же это за среда должна быть? С несколькими разными интерфейсами, разной степени детальности? И вероятно с учебным курсом, который состоит не из одной линии обучения, а из нескольких — для учащихся разного уровня.
Здравствуйте, Sharov, Вы писали:
S>Он как бэ сложней, и я бы не сказал, что это язык "общего пользования". Это язык для всяческих параллельных активностей и организации их взаимодействия. Он конкурирует с эрлангом, растом и т.д. Эрланг явно на язык для ознакомления не тянет. Плюс синтаксис у Го не самый удачный, на мой взгляд. Я бы начал либо с питона -- куча курсов для всех уровней, либо с Паскаля -- классика, мой первый язык в вузе.
Он как бэ сложный в некоторых местах, а в основном — наоборот, очень простой.
И если этих мест не касаться, то эта сложность из него не прет.
Питон, на мой взгляд, вообще плохо подходит для обучения. Во-первых, я не люблю динамически типизованных языков, хотя готов согласиться с тем, что это мое личное мнение. Во-вторых, его стиль жизни предполагает активное использование миллиона доступных для него библиотек на все случаи жизни, а в них надо уметь ориентироваться, а это как-бы не совсем для начинающих. В третьих, его идеомы включают в себя весьма нетривиальные штучки из функционального программирования, а с этим я бы тоже не стал торопиться. Ну и тех, кто использует отступы вместо begin/else или фигурных скобок — я бы с такими людьми плохо поступил, будь моя воля
Что до паскаля, он 1) мертв 2) нет такого языка "паскаль", есть много несовместимых диалектов, и все они более-менее мертвы 3) в синтаксисе его есть забавные ошибки. Например, то, что вызов функции без параметров синтаксически неотличим от получения значения переменной, это очень само по себе мило, и, если не ошибаюсь, имеет интересное последствие в виде того, что функция не может вернуть указатель на функцию, потому что если она его вернула, и он без параметров, то как понять в точке вызова, он сам нам нужен, или результат вызова этой функции?
Кроме того, исполезование Go позволяет поиграться с многопоточностью очень простым образом, без необходимости сломать себе мозг (многие ли программисты реально умеют писать многопоточные программы?), что само по себе весьма полезно.
Что до синтаксиса Го, лично мне он очень нравится, но это вопрос вкуса. И очень нравится его совершенно концлагерная среда разработки, навязывающая один единственный идеологически верный стиль форматирования текста, не прощающая лишних или недостающих запятых и неиспользуемых импортов и переменных, хотя первые два дня меня это сложно передать, как раздражало. Наверное, это стокгольмский синдром
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Sharov, Вы писали:
S>>Он как бэ сложней, и я бы не сказал, что это язык "общего пользования". Это язык для всяческих параллельных активностей и организации их взаимодействия. Он конкурирует с эрлангом, растом и т.д. Эрланг явно на язык для ознакомления не тянет. Плюс синтаксис у Го не самый удачный, на мой взгляд. Я бы начал либо с питона -- куча курсов для всех уровней, либо с Паскаля -- классика, мой первый язык в вузе.
Pzz>Он как бэ сложный в некоторых местах, а в основном — наоборот, очень простой.
Pzz>И если этих мест не касаться, то эта сложность из него не прет.
Я не против Го, сам его пытаюсь изучать. Во всяком случае, это следующий язык, после js, в который я инвестирую свое время. Всякие C# версии 78 мне уже не так интересны.
Но выше я уже написал, что это язык уровня Эрланга. Т.е. не для новичков. И создавался он для задач, которых Вы предлагаете не касаться.
Pzz>Питон, на мой взгляд, вообще плохо подходит для обучения. Во-первых, я не люблю динамически типизованных языков, хотя готов согласиться с тем, что это мое личное мнение. Во-вторых, его стиль жизни предполагает активное использование миллиона доступных для него библиотек на все случаи жизни, а в них надо уметь ориентироваться, а это как-бы не совсем для начинающих. В третьих, его идеомы включают в себя весьма нетривиальные штучки из функционального программирования, а с этим я бы тоже не стал торопиться. Ну и тех, кто использует отступы вместо begin/else или фигурных скобок — я бы с такими людьми плохо поступил, будь моя воля
МИТ перешел, все перешли на питон. Огромная пользовательская база, поэтому новичку будет где подсмотреть. Т.е. особого менторства не надо. Куча онлайн курсов. Мне Го нравится больше.
Pzz>Что до паскаля, он 1) мертв 2) нет такого языка "паскаль", есть много несовместимых диалектов, и все они более-менее мертвы 3) в синтаксисе его есть забавные ошибки. Например, то, что вызов функции без параметров синтаксически неотличим от получения значения переменной, это очень само по себе мило, и, если не ошибаюсь, имеет интересное последствие в виде того, что функция не может вернуть указатель на функцию, потому что если она его вернула, и он без параметров, то как понять в точке вызова, он сам нам нужен, или результат вызова этой функции?
В Паскале вообще с указателями проблема, там если не ошибаюсь, надо не хило приседать, чтобы их использовать. А уж делегаты всякие... Но как язык для начального знакомства очень ничего. Поскольку язык для знакомства -- поиграться, познакомится со структурами данных и т.д., проблем с диалектами возникнуть не должно.
Pzz>Кроме того, использование Go позволяет поиграться с многопоточностью очень простым образом, без необходимости сломать себе мозг (многие ли программисты реально умеют писать многопоточные программы?), что само по себе весьма полезно.
Если в многопоточность не умеют многие профессиональные программисты, чего уж о новичках говорить
Здравствуйте, Sharov, Вы писали:
S>Но выше я уже написал, что это язык уровня Эрланга. Т.е. не для новичков. И создавался он для задач, которых Вы предлагаете не касаться.
А что такое "язык уровня Эрланга"? Эрланг, как язык, является языком семества ML, при этом динамически типизованный, что само по себе занятно, и чисто функциональный, в том смысле, что в нем все "переменные" immutable.
Go, в то же время, является строго типизованным императивным языком из семейства Си, в котором есть чуть-чуть функциональщины в виде замыканий, причем никто не заставляет ими пользоваться, а immutable данных в нем нет вообще.
В сущности, в Go очень мало новых концепций, за что любители языков, включающих в себя новейшие достижения академической компьютерной науки вполне справедливо (со своей позиции) его критикуют. Эрланг в этом смысле гораздо "современнее".
Что делает их языками одного уровня?
S>МИТ перешел, все перешли на питон. Огромная пользовательская база, поэтому новичку будет где подсмотреть. Т.е. особого менторства не надо. Куча онлайн курсов. Мне Го нравится больше.
Как раз питоний стиль "найди две готовые библиотеки и склей их с помощью третьей", по-моему очень плохо подходит для обучения. Тоже можно сказать про JS и т.п.
S>В Паскале вообще с указателями проблема, там если не ошибаюсь, надо не хило приседать, чтобы их использовать. А уж делегаты всякие... Но как язык для начального знакомства очень ничего. Поскольку язык для знакомства -- поиграться, познакомится со структурами данных и т.д., проблем с диалектами возникнуть не должно.
Я извиняюсь, но в Паскале нет делегатов. В каком-то из диалектов (борландовском?) может и есть, но у Вирта никаких делегатов не было.
Pzz>>Кроме того, использование Go позволяет поиграться с многопоточностью очень простым образом, без необходимости сломать себе мозг (многие ли программисты реально умеют писать многопоточные программы?), что само по себе весьма полезно.
S>Если в многопоточность не умеют многие профессиональные программисты, чего уж о новичках говорить
Многопоточность в стиле Тони Хоара — вещь простая для понимания, за то и ценится. Другой вопрос, что в реальной взрослой программе может возникнуть вполне обоснованная потребность отойти от этой модели. Например, из соображений эффективности. Но вот это-то как раз новичку изучать не обязатекльно.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Sharov, Вы писали:
S>>Но выше я уже написал, что это язык уровня Эрланга. Т.е. не для новичков. И создавался он для задач, которых Вы предлагаете не касаться.
Pzz>А что такое "язык уровня Эрланга"? Эрланг, как язык, является языком семества ML, при этом динамически типизованный, что само по себе занятно, и чисто функциональный, в том смысле, что в нем все "переменные" immutable.
Pzz>Go, в то же время, является строго типизованным императивным языком из семейства Си, в котором есть чуть-чуть функциональщины в виде замыканий, причем никто не заставляет ими пользоваться, а immutable данных в нем нет вообще.
Pzz>В сущности, в Go очень мало новых концепций, за что любители языков, включающих в себя новейшие достижения академической компьютерной науки вполне справедливо (со своей позиции) его критикуют. Эрланг в этом смысле гораздо "современнее".
Pzz>Что делает их языками одного уровня?
Они "призваны" решать один класс задач. Они, если угодно, конкуренты. Решают они эти задачи, как выше уже описано, совершенно по-разному, но задачи, породившие эти языки, крайне близки, до степени неразличимости.
Для меня советовать Го это как советовать Эрланг. Да можно и с Хаскеля начать. А че такова?
Здравствуйте, Sharov, Вы писали:
Pzz>>Что делает их языками одного уровня?
S>Они "призваны" решать один класс задач. Они, если угодно, конкуренты. Решают они эти задачи, как выше уже описано, совершенно по-разному, но задачи, породившие эти языки, крайне близки, до степени неразличимости.
Что значит, "призваны"? Go — это язык из мира веба, а ерланг — из мира телекома. Это совершенно разные миры с совершенно разными задачами и взглядами на жизнь.
S>Для меня советовать Го это как советовать Эрланг. Да можно и с Хаскеля начать. А че такова?
Я советую исходя из того, каков сам язык, а не что о нем думают маркетологи. Эрланг, как язык, гораздо ближе к Хаскелю, чем к Го.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Sharov, Вы писали:
Pzz>>>Что делает их языками одного уровня?
S>>Они "призваны" решать один класс задач. Они, если угодно, конкуренты. Решают они эти задачи, как выше уже описано, совершенно по-разному, но задачи, породившие эти языки, крайне близки, до степени неразличимости.
Pzz>Что значит, "призваны"? Go — это язык из мира веба, а ерланг — из мира телекома. Это совершенно разные миры с совершенно разными задачами и взглядами на жизнь.
Общее в их природе -- языки создавались под нагруженные задачи. Что веб, что телеком обработка огромного числа запросов одновременно. Это их фундаментально общее. Подход к решению задачи разный, да.
Здравствуйте, Sharov, Вы писали:
S>Общее в их природе -- языки создавались под нагруженные задачи. Что веб, что телеком обработка огромного числа запросов одновременно. Это их фундаментально общее. Подход к решению задачи разный, да.
У них даже взгляды на то, что должно происходить, если нагрузка превышает рассчетную, разные.
В мире телекома такого вообще не должно происходить, если происходит — это катастрофа. А в случае катастрофы можно все взорвать, уйти на получасовую перезагрузку, потребовать переустановки софтвария и хардвария, вообще все, что угодно.
В мире веба разрешается, и не считается чем-то зазорным, отбрасывать с ошибкой отдельные запросы, но вся система в целом должна сохранять живучесть при любых обстоятельствах.
Когда телефонная станция не работает полдня, об этом вряд ли напишут в газете. Когда пару часов не работает гугль или скайп, об этом и по телевизору расскажут (если телевизор заодно не перестанет работать).
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Sharov, Вы писали:
S>>Общее в их природе -- языки создавались под нагруженные задачи. Что веб, что телеком обработка огромного числа запросов одновременно. Это их фундаментально общее. Подход к решению задачи разный, да.
Pzz>У них даже взгляды на то, что должно происходить, если нагрузка превышает рассчетную, разные.
И? Ну да, дьявол в деталях. Но для меня это сути не меняет.
P>>Начинать нужно с реальной машины тюринга, хотя бы из лего, а потом ассемблер, сишечка и протоколы, можно немного крипты.
М>Как вариант — начинать с книги Петзольда "Код". Но бпюсь, что ваш набор для пятиклассника слишком трудным выйдет, парень звезд с неба не хватает
Тебя троллят.
Моё мнение — только не Паскаль, он слишком сложен. Первым языком программирования должен быть интерпретируемый язык со слабой типизацией, лаконичным и читабельным синтаксисом, поддержкой процедурного стиля. ПривеМир должен выглядеть примерно так:
print 'Hello world!'
Паскаль хорош в качестве второго языка программирования.
Здравствуйте, yenik, Вы писали:
Y>Моё мнение — только не Паскаль, он слишком сложен.
Скорее — слишком прост. И мёртв, то бишь не развивается. Один разработчик поддерживает единственный компилятор в качестве хобби, даже времени править ошибки библиотек у него тупо нет.
Y> Первым языком программирования должен быть интерпретируемый язык со слабой типизацией, лаконичным и читабельным синтаксисом, поддержкой процедурного стиля.
У меня первым был язык калькулятора МК-61. Синтаксис весьма лаконичный: каждая команда — два хекса, вполне читабельный, вызов процедуры и выход из неё тоже были. А о типизации начинающему можно поначалу не особо задумываться, ну числа и числа.
Y> ПривеМир должен выглядеть примерно так:
ПриветМир нужен только чтобы понять общую структуру программы и способ вывода. А при наличии неплохого REPL и интуитивного интерфейса он излишен. Результат вычисления и так останется на экране.
Y>Паскаль хорош в качестве второго языка программирования.
Это раньше был, когда плюсы на 8086 еле ворочались. Сейчас они стали лучшим вторым языком.
На самый крайний случай вторым можно взять Питон — это современный бейсик с человеческим лицом.
Кто советует на Паскале на олимпиадах выступать — пусть сам каждый раз любую сортировку, не говоря уже о всяких деревьях, руками пишет. А учить сначала его, чтобы к олимпиадам перейти на нормальный язык — это уже слишком хитрая многоходовочка.
Здравствуйте, De-Bill, Вы писали:
LVV>>А, понятно. LVV>>У нас городская (или областная?) проходила — разрешали на всем.
DB>Всё сильно зависит от проводящих олимпиады. На некоторых и на PHP разрешают. В любом случае, у Pascal есть целый ряд преимуществ. Он не перегружен библиотеками, в отличие от java и подобных. Он компилируемый, т.е. работает реально в 5-10 раз быстрее, чем python и подобное (а на олимпиадах это важно), он не слишком низкоуровневый, как C, и не слишком высокоуровневый, как python. Плюс к этому статическая типизация, и строгая типизация.
"Не перегружен библиотеками" — это как раз минус.
Стандартные структуры данных — делай сам вместо использования чего-нибудь библиотечного.
С точки зрения самообразования это может быть и хорошо, но для олимпиады как правило не очень.
VC>"Не перегружен библиотеками" — это как раз минус. VC>Стандартные структуры данных — делай сам вместо использования чего-нибудь библиотечного. VC>С точки зрения самообразования это может быть и хорошо, но для олимпиады как правило не очень.
При составлении задач на IOI разница в библиотеках учитывается. И если задача решается, например, применением красно-чёрных деревьев, то эта же задача должна решаться и без их применения. В итоге, на олимпиаде, практически не встречаются задачи из разряда "примени стандартную библиотечную функцию", зато встречается куча задач, которые требуют умения стандартные алгоритмы реализовывать, чтобы не применить их, а реализовать с некоторыми модификациями.