LINUX.ORG.RU

Язык для обучения программированию


1

7

Понятно, что Java - наверное самый мэйнстрим на текущий момент, ну с C#(Mono)(я не рассматриваю здесь пыхпых, джаваскрипт и прочий веб), но мне известна(как и большинству местных) статья, что изучение с Явы вредно для мозгов.
И вот, столкнувшись с тем, что отданные под моё руководство студенты 3го курса не сильно способны заниматься программированием на С++, задумался, как решить эту проблему, избегая 2х тупиков - делать всё за них, и выгнать их.
Допуская, что производительность языка не нужна(хотя, ввиду того, что делаем мы в основном числодробилки, это очень сильно допущение) и вообще у нас под рукой кластер, какой язык посоветует ЛОР, помогающий развить мозг молодых учёных до уровня С/С++? Да и вообще, список годных для обучения, и негодных соответственно. Думал было python, но тем не в нём производительность недостаточная, а самому реализовывать затратные вещи на С пока не хочется.
Update: vb и delphi не Ъ ввиду того, что я то под линуксом сижу. Update 2: всё, наработанное за время использование предложенного языка, не хочется терять, поэтому хорошо бы, если б можно было соединять уже готовые вещи с C/C++. Насчёт pascal я просто никогда такого не желал, там такое есть?

★★★★

Последнее исправление: aptyp (всего исправлений: 2)

Язык для обучения программированию

воздух для обучения дыханию

anonymous
()
Ответ на: комментарий от AIv

Безусловно, проблемы начинаются когда ты инженер или научный сотрудник, а не программист (как я напр), ты пишешь на фортране, и тебе нужно что то из того что в фортране нету.

Если в фортране нету того что мне нужно, оно есть в питоне с вероятностью 99.999999999999%. И никаких проблем нету.

В численном моделировании активно используются библиотеки, написанные на c/c++, типа mpi, hdf, netcdf и т.д. Но их делают программисты. Самому чего-то там кодировать на сях не приходится никогда. Я бы не рекомендовал студентам этим заморачиваться, если они не собираются быть программистами.

yvv ★★☆
()
Ответ на: комментарий от yvv

Если в фортране нету того что мне нужно, оно есть в питоне с вероятностью 99.999999999999%. И никаких проблем нету.

Питон не панацея. Ну есть там что-то, нужное внутри числ схемы, и чего? Производительности то питона не хватит...

AIv ★★★★★
()
Ответ на: комментарий от AIv

Ммм, а pypy, его производительность?
Хотя бред, он просто быстрее стандартного питона.

aptyp ★★★★
() автор топика
Ответ на: комментарий от AIv

И потом, а как на фортране будет выглядеть схема, не укладывающаяся в одно выражение? Будет неск циклов (по числу выражений)? Но это же жутко неэффективно... или придется писать ручками явно цикл, то тогда какой тут выигрыш по сравнению с С?

Часто можно обойтись либо совсем без циклов, либо одним циклом, вместо нескольких вложенных. Если уж совсем никак, то можно сделать несколько вложенных, как на C, никто не мешает. Выигрыша по-сравнению с C в этом случае, естесственно, не будет.

Даже в приведенном примере схема неск странная, там часом не += ли нужно? И как это реализуется, без явного создания пользователем временной переменной (массива)?

Меня лично ни разу не колышит, как именно это реализуется. Фортран делает всё сам, самым оптимальным способом. В этом его прелесть.

yvv ★★☆
()
Ответ на: комментарий от KRoN73

Я ж написал специально «что-то, нужное ВНУТРИ числ схемы». Пока на питоне пишется верхний слой (интерфейс, работа с файлами и тд) все путем. Как только питон приходится дергать на каждый шаг в каждой ячейке - запасайтесь попкорном, никакой нампай тут не поможет (если задача актуальная, а не решение одномерного у-я теплопроводности напр.).

AIv ★★★★★
()
Ответ на: комментарий от AIv

И кстати, как в фортране с векторизацией (SSE, AVX)?;-)

По крайней в коммерческих компиляторах всё отлично, всё векторизуется автоматически. Как в gfortran не знаю, я его никогда не использовал

yvv ★★☆
()
Ответ на: комментарий от AIv

Как только питон приходится дергать на каждый шаг в каждой ячейке - запасайтесь попкорном

Про это я тоже писал выше. Если можно оставить на ночь считать, а утром снять результат — то это фигня, а не расчёт.

При чём 20 лет назад на такое вполне хватало интерпретирущего Бейсика на 2..3 МГц 8 бит процессоре.

Сегодняшний Питон на типичных машинах работает порядков на шесть быстрее.

И если _тех_ возможностей хватало для решения подавляющего большинства практических задач, то сегодняшний спор Си++ vs Python на этом фоне просто смешон :) Тут смотреть нужно именно на сам язык. А то будет, как я писал выше. С переходом с Бейсика на Паскаль скорость возросла на пару порядков, но народ просто перестал писать программы :D

В случае с Питоном и Си++ ситуация примерно такая же. На Питоне писать проще — это и должно решать.

KRoN73 ★★★★★
()
Ответ на: комментарий от AIv

Я ж написал специально «что-то, нужное ВНУТРИ числ схемы».

Всё нужное внутри численной схемы есть в фортране. Он специально сделан для этого.

yvv ★★☆
()
Ответ на: комментарий от yvv

Меня лично ни разу не колышит, как именно это реализуется. Фортран делает всё сам, самым оптимальным способом. В этом его прелесть.

Горлум-горлум. Не хочется разбивать Ваши иллюзии, но так увы не бывает... откуда такая уверенность в «самом оптимальном способе» если не знаете деталей реализации?

Хорошо, какая эффективность у полученного кода? Скажем ур-е теплопроводности, 2D, самая простая числ схема Эйлера... на одну ячейку за шаг по времени приходится 3 умножения и 4 сложения, это 3-4 такта, + загрузки-выгрузки, операции по организации циклов... ну пусть 10 тактов. Векторизацию пока не используем. Это типа теоретического предела. Сколько тактов будет уходить у фортрановского кода сделанного самым оптимальным способом? Ы? Скажем область (2^12)x(2^12) шагов. Сбацайте да оцените? Одна строчка же...

AIv ★★★★★
()
Ответ на: комментарий от yvv

всё векторизуется автоматически

Вот это меня и пугает... «автоматически» и «оптимально» - это вообще то две большие разницы...

AIv ★★★★★
()
Ответ на: комментарий от KRoN73

Аналогично рассуждал Грэм http://www.computerra.ru/hitech/35042/ , но тем не менее строят кластера, mpi и прочее, ну это да, задачи уже другого масштаба.
Из-за *сложности* Паскаля перестали писать что ли???

aptyp ★★★★
() автор топика
Ответ на: комментарий от KRoN73

Про это я тоже писал выше. Если можно оставить на ночь считать, а утром снять результат — то это фигня, а не расчёт.

А если на С ставишь вечером и снимаешь утром, а на питоне на это уходит четыре года? Питон сливает С-ям от одного до трех порядков в среднем. Терли уже... оптимизировать надо суммарное время разработки и счета. Но подавляющее большинство актуальных задач считаются ну очень долго... потому что ростом выч. мощностей растут и задачи. Скажем в сейсмике 3D полноволновое моделирование делать умеют неск рабочих групп в мире, причем на кластерах (мы обходимся персоналкой).

3D код для кинетики плазмы в Холловском двигателе (оч актуальная тема) - в MIT просто диссеры защищают на 2D и доказывают что на совр уровне 3D создатбь невозможно...

А Вы про питон;-)

AIv ★★★★★
()
Ответ на: комментарий от vasily_pupkin

Вы так говорите, будто с С++ все прозрачно

Глде я такое говорил???? С++ ужасный и дико запутанный ЯП... но ничего лучше увы нету;-(

AIv ★★★★★
()
Ответ на: комментарий от AIv

Не хочется разбивать Ваши иллюзии, но так увы не бывает... откуда такая уверенность в «самом оптимальном способе» если не знаете деталей реализации?

Уверенность оттуда же, откуда и у людей, ездящих на БМВ, и не знающих деталей его устройства.

Этот язык создавался для высокопрозводительных вычислений. Операции с массивами и циклы в нём реализованы самым оптимальным образом. В нём нет конструкций, которые мешают компилятору оптимизировать код. Всё сделано специально, чтобы инженер не ломал себе над этим голову, а занимался своей непосредственной работой. Это очень правильный подход.

yvv ★★☆
()
Ответ на: комментарий от aptyp

Из-за *сложности* Паскаля перестали писать что ли???

Да. Порог вхождения в Паскаль много выше, чем в Бейсик. Для людей, у которых программирование не является целью разница получается очень большой.

До смешного доходит. Многие из тех, кто начинал изучать Бейсик в 1991-м, пишут на нём до сих пор (я о химиках, если непонятно ;)), те, кто в 1992-м начал изучать сразу Паскаль (у нас в институте с 1992-го на Паскаль перешли), после окончания курса информатики в программированию в основном больше не возвращались.

Другой прикол — из моего потока, который начинал с Бейсика, около половины выпускников после окончания института работает в IT-области. Диапазон очень разный, от 1С-программистов до сисадминов. Но — IT. Из тех, кто выпускался пару лет спустя, в IT не работает почти никто. Тут уже с Бейсиком и Паскалём прямой связи не наблюдается, но на мысли может наводить :)

KRoN73 ★★★★★
()
Ответ на: комментарий от AIv

Вот это меня и пугает... «автоматически» и «оптимально» - это вообще то две большие разницы...

Тут не надо пугаться. Есть многочисленные тесты производительности разностных схем реализованных на разных языках. Всё легко ищется в гугл.

yvv ★★☆
()
Ответ на: комментарий от yvv

Уверенность оттуда же, откуда и у людей, ездящих на БМВ, и не знающих деталей его устройства.

Тогда поглядите из своей бэхи налево - вы летите под 200км/час, и вас как стоячего обгоняет запорожец... Проведите уже тест, к-й я Вам предложил.

Хочу Вам сообщить следующий факт - эффективность современных высокопроизводительных кодов сделанных «самым оптимальным образом» составляет проценты. Эффективность параллельных вычислений - как правило доли процента. Некоторым товарищам удается добиваться процентов на кластере, и это очень, очень хороший результат. Тем не менее есть методы позволяющие стабильно получать эффективность в десятки процентов, в т.ч. на кластерах... и к фортрану они никакого отношения не имеют;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

А если на С ставишь вечером и снимаешь утром

Это очень, очень узкий класс задач. Столь узкая ниша, что ориентироваться на неё глупо.

а на питоне на это уходит четыре года?

У тебя, похоже, очень слабые представления о Питоне.

Питон сливает С-ям от одного до трех порядков в среднем

Во-первых, не в среднем, а в максимуме: http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python...

Во-вторых, даже три порядка в твоём примере дадут не четыре года, а меньше года.

В-третьих, ты снова проигнорировал всякие numpy.

В-четвёртых, медленно работающая задача лучше не работающей вообще.

В-пятых, 20 лет назад учёным хватало производительности на шесть порядков меньше, чем у современного Питона :)

KRoN73 ★★★★★
()
Ответ на: комментарий от yvv

Я так понял Вы занимаетесь гидродинамикой? Жаль что Вы из Севастополя... а то бы я пригласил Вас на защиту бакалаврского диплома (этим летом), как раз по ГД. Вот там наверное будет про эффективность и тесты в т.ч.... ;-)

AIv ★★★★★
()
Ответ на: комментарий от aptyp

А говорят, что Pascal идеален для обучения)

Для обучения _программистов_ — возможно :) Не идеален, конечно, не неплох.

Но для многих, практикующих программирование, оно не является их целью. А только средством для решения непрограммистской задачи :D

...

Я сейчас навскидку могу вспомнить только одного знакомого не-программиста, который решал свои задачи на Паскале. И то прикол в том, что Паскаль он учил сам, ещё до института.

А вот программирующих на Бейсике (повторюсь, не-программистов) человек 6-7 назову.

Правда, одного из них я на Python собрался перетащить. А то он хочет графики всякие рисовать, а QBasic уже сильно устарел для этого :) Жаль только, что GASP под Windows крайне кривой, а на Linux товарищ не готов на старости лет переезжать :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Я сейчас навскидку могу вспомнить только одного знакомого не-программиста, который решал свои задачи на Паскале.

А кто же он тогда, если не программист, раз решает свои задачи программируя?

King_Diamond
()
Ответ на: комментарий от KRoN73

Это очень, очень узкий класс задач. Столь узкая ниша, что ориентироваться на неё глупо.

Какие же дураки те, кто строят кластеры и всякие суперкомпьютеры! А облачные вычисления то, а грид... Может Вы им об этом таки расскажете? А то они и не знают...

У тебя, похоже, очень слабые представления о Питоне.

Уууу... это железобетонный аргумент конечно. Но батенька, судя по Вашим постам, у Вас очень слабые представления о моделировании задач большой выч. сложности, и роли питона в оных. Вообще Вы меня веселите, спасибо;-)

не в среднем, а в максимуме

Гы... Вы может согласитесь, что это зависит от задачи?;-)

ты снова проигнорировал всякие numpy.

В задачах о которых мы говорим они помогут слабо, поверьте моему скромному опыту;-)

В-четвёртых, медленно работающая задача лучше не работающей вообще.

про эспоненциальные стенки что нить слышали? Напишите как код для моделирования девятимерного шредингера, и попытайтесь объяснить что он лучше чем его полное отсутствие.

В-пятых, 20 лет назад учёным хватало производительности на шесть порядков меньше, чем у современного Питона :)

Ну а когда то и компьютеров не было... Вы меня слышите, але? СЕЙЧАС У УЧЕНЫХ СОВСЕМ ДРУГИЕ ЗАДАЧИ. Или Вы считаете, что компьюетер нужен тока для вебни, гуйни и возни с БД?

AIv ★★★★★
()
Ответ на: комментарий от KRoN73

даже три порядка в твоём примере дадут не четыре года, а меньше года.

Три порядка отнюдь не предел...

AIv ★★★★★
()
Ответ на: комментарий от AIv

Какие же дураки те, кто строят кластеры и всякие суперкомпьютеры!

Какие же дураки те, кто строит карьерные самосвалы, когда есть велосипеды?

Ты правда, считаешь, что вопрос обучения программированию и вопрос строительства суперкомпьютеров должны обсуждаться в одной теме? :D

у Вас очень слабые представления о моделировании задач большой выч. сложности, и роли питона в оных

У Вас очень слабые представления о том, какие вычислительные задачи встают перед среднестатистическим непрограммистом.

Напишите как код для моделирования девятимерного шредингера

Вы очень удивитесь, но это не единственная задача, встающая перед обычным химиком или биологом.

СЕЙЧАС У УЧЕНЫХ СОВСЕМ ДРУГИЕ ЗАДАЧИ

Вах-вах, как страшно! Радио пришло, а счастья нету...

KRoN73 ★★★★★
()
Ответ на: комментарий от AIv

Три порядка отнюдь не предел...

Правильно. Иногда разница составляет десятки процентов.

KRoN73 ★★★★★
()
Ответ на: комментарий от AIv

компьюетер нужен тока для вебни, гуйни и возни с БД?


игры же забыли
весело тред развивается однако

aptyp ★★★★
() автор топика
Ответ на: комментарий от AIv

Тем не менее есть методы позволяющие стабильно получать эффективность в десятки процентов, в т.ч. на кластерах... и к фортрану они никакого отношения не имеют;-)

Эти методы имеют отношение к вычислительной математике. Фортран - это инструмент, который специально предназначен для реализации этих методов.

yvv ★★☆
()
Ответ на: комментарий от KRoN73

Ты правда, считаешь, что вопрос обучения программированию и вопрос строительства суперкомпьютеров должны обсуждаться в одной теме? :D

Ну на самом обучаемые имеют близкое отношение к суперкомпьютерам.

aptyp ★★★★
() автор топика
Ответ на: комментарий от King_Diamond

Жесть какая-то с движком ЛОРа. Я пользователя King_Diamond не игнорирую, но сообщения не показываются по умолчанию :-/

Так что сорри, если ответ не замечу.

А кто же он тогда, если не программист, раз решает свои задачи программируя?

Химик-технолог.

Программист — это, всё же, не тот, кто помогает себе программированием в решении задач, а тот, кто занимается программированием как основной задачей.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ты правда, считаешь, что вопрос обучения программированию и вопрос строительства суперкомпьютеров должны обсуждаться в одной теме? :D

Я считаю, что человека которого учат писать числодробилки (!!!) должны учить писать на вещах, которые позволят ему в перспективе делать что то серьезное. Или Вы предлагаете учить водителя карьерного самосвала ездить на велосипеде, а там по приходе на производство его научат и баранку крутить?

У Вас очень слабые представления о том, какие вычислительные задачи встают перед среднестатистическим непрограммистом.

Сам такой и весь наш сектор такой. Я вообще кафедру холодильников заканчивал...

AIv ★★★★★
()
Ответ на: комментарий от AIv

Три порядка отнюдь не предел...

Измерять писи надо аргументированно. Раз уж вы точно знаете про порядки тормозов питона относительно <нужное подставить>, необходимо показать публике конкретную, решаемую вами задачу, где всё так и есть, как вы говорите. Иначе это цитирование чужих заблуждений.

King_Diamond
()
Ответ на: комментарий от King_Diamond

необходимо показать публике конкретную, решаемую вами задачу

в этом треде уже дважды было

shty ★★★★★
()
Ответ на: комментарий от yvv

Эти методы имеют отношение к вычислительной математике. Фортран - это инструмент, который специально предназначен для реализации этих методов.

Хочу Вас расстроить - ЭТИ методы к вычматам никакого отношения не имеют (ну кроме своего обоснования), а имеют прямое отношение именно к реализации кода (алгоритмам обхода области). И фортран там увы никаким боком не получится использовать... именно потому, что он слишком примитивен на уровне пользователя и именно потому, что в нем используется автоматическая оптимизация которое на самом деле создает ужасно не.эффективный код.

AIv ★★★★★
()
Ответ на: комментарий от KRoN73

Программист — это, всё же, не тот, кто помогает себе программированием в решении задач, а тот, кто занимается программированием как основной задачей.

Мой скромный опыт шепчет - проще научить специалиста кодить, чем научить ремесленника-кодера решать задачу.

King_Diamond
()
Ответ на: комментарий от AIv

Или Вы предлагаете учить водителя карьерного самосвала ездить на велосипеде, а там по приходе на производство его научат и баранку крутить?

Вообще-то, тут львиная доля темы про обучение именно _не_-программистов. И я с самого начала подчёркиваю этот контекст. Безусловно, при подготовке велосипедистов навыкам вождения карьерного самосвала обучать их смысла нет.

Более того, при обучении программистов не вижу смысла глубоко изучать работу с суперкомпьютерами, так как основная часть программистов с этим и близко не соприкоснётся.

Я вообще кафедру холодильников заканчивал...

Так что, разработчиков холодильников нужно учить работе на суперкомпьютерах?

KRoN73 ★★★★★
()
Ответ на: комментарий от King_Diamond

Мой скромный опыт шепчет - проще научить специалиста кодить, чем научить ремесленника-кодера решать задачу.

+100500. нет, + 200500! От т.н. программистов никакого толку в числ моделировании на само деле нет - они предметной области не знают. А я себя давно уже программистом считать перестал, я стока всего там не знаю... паттерны-шматтерны всякие;-(

AIv ★★★★★
()
Ответ на: комментарий от AIv

А обучить программистов сложнее, чем самому научиться кодировать?
Просто я то собственно от прикладной математики к предметной области иду, и не сильно на меня жалуются, может потому что маленький+умненький)

aptyp ★★★★
() автор топика
Ответ на: комментарий от KRoN73

Более того, при обучении программистов не вижу смысла глубоко изучать работу с суперкомпьютерами, так как основная часть программистов с этим и близко не соприкоснётся.

Там ТС Вам выше сказал - они именно самосвальщиков делают, и вопрос был про них. А так... конечно питону учить все 5 лет, полностью согласен.

Так что, разработчиков холодильников нужно учить работе на суперкомпьютерах?

Холодильников - это низких темп. и сверхпроводимости. Меня кстати программировать учили только на 1м и 2м курсах на С/С++. Остальному учился сам.

AIv ★★★★★
()
Ответ на: комментарий от King_Diamond

Мой скромный опыт шепчет - проще научить специалиста кодить, чем научить ремесленника-кодера решать задачу.

Вот потому спор и идёт в контексте обучения программированию специализирующегося в другой области. Я, чисто на своё примере, с точки зрения химиков-технологов :)

А про то, как настоящих «ремесленников-кодеров» учат я и не в курсе, среди моих знакомых-программистов нет ни одного, который бы изучал программирование как самоцель :)

KRoN73 ★★★★★
()
Ответ на: комментарий от aptyp

А обучить программистов сложнее, чем самому научиться кодировать?

Учить всегда сложнее;-) Они у Вас уже предметную область знать должны, наск я понимаю - общая физика + какие то числ методы до Вас же были... Нужно учить конкретным специфическим приемам + ну совсем общие базовые вещи (типа стек/куча, списки/вектора/ассоциативные массивы - ну что б они знали что такое есть). ну практики, практики побольше... дальше правильные пропорции сами найдутся.

AIv ★★★★★
()
Ответ на: комментарий от aptyp

А обучить программистов сложнее

Пардон, что влезаю опять. А что такое учить программистов? Первые ЭВМ, вообще то, сделали для вполне конкретных задач - расчётов атомной бомбы и атомного ректора. Работали на этих машинах физики, использовали ЭВМ как обычный инструмент, как логарифмическую линейку, в конце концов, только шустрее работающую. Почему сейчас что то должно быть по другому?

King_Diamond
()
Ответ на: комментарий от King_Diamond

Как бы посложнее стали линейки, и появилась задача обслуживать эти линейки, вот и всё. Именно обслуживающие, улучшающие их и есть *чистые программисты*

aptyp ★★★★
() автор топика
Ответ на: комментарий от KRoN73

А про то, как настоящих «ремесленников-кодеров» учат я и не в курсе

В том то и дело, нет таких специалистов «ремесленники-кодеры» (они же программисты), они есть только в голове обывателя, далёкого от каких либо задач, серьёзнее выкладки товара на прилавке. Отсюда и легенда, и обман людей, и дискредитация профессии.

King_Diamond
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.