LINUX.ORG.RU

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


1

7

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

★★★★

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

Ответ на: комментарий от Rzhepish

Не, не вспоминал. Спасибо за напоминание)

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

CL

знатное /0
Ага быстро, думаю полгода мучаться будут, а так, что-нибудь другое за две недельки(основы), и начать клепать поделки сразу с пользой, ибо их главное дело - наука.

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

1. Прикладная математика и информатика, кафедра мат.моделирования
2. Они должны решать поставленные перед ними задачи - ОДУ решать, обратные задачки, параллельное программирование - OpenMP, MPI, CUDA, OpenCL;работа с бд. Если будут решать эти задачи, то пох на язык
3. Это не курс даже, дали студентов, нужно ими руководить.

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

Не, приматы у меня, и сам примат.

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

Ну тут то желание какое-то есть, иначе бы не пошли ко мне писать диплом)

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

После C на Java очень тяжко было писать, всё сковывало движения, равно как и на C после Scheme)
И недавно надо было на ЧМ метод Ритца писать и обязательная ООП довольно неприятно мешала, а так то да, ведь синтаксис в этой части у всех языков практически одинаков.

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

Мне нравится, нравился по крайней мере, и до сих пор теплота и ламповость ощущаю, но при любой возможности перехожу на C++ и что-нибудь повыше уровнем.
Это студентам не нравится С как язык для студентов, хотя может дело просто в мышлении.

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

Да у нас как бы тоже с первого курса С++ был, я не понимаю, почему на эту профессию идут люди, которые не умеют мыслить соотвествующе. Но делать нечего, и лучше поздно, чем никогда
Ссылочки полезные, спасибо.

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

Да что-то не сильно шлифовавшийся лет на 20 больше Фортран быстрее С, лично я недолго общался с ним, так как и IDE нормальной под линуксом нет(я надеюсь, что ошибаюсь), и его систему вывода тогда не осилил(77й использовал). Друг на венде окошки рисовал на нём - Вы бы видели его глаза:-)

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

Ну как новички - с предметной областью уже достаточно знакомы, чтобы на листке бумаги вручную посчитать, а вот автоматизировать этот процесс не могут, и всякие там явы и ады со строгой статической типизацией мне кажется не научат их программировать даже такие простые вещи.
А проблема ресурсоёмких задач - что делать, когда считает по часу, на C хотя бы минут 15 будет))

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

(я так понимаю, основная задача ТС не обучить студентов, а подпрячь сделать что-то для поиграться с кластером).

- ну практически да, но только я не могу этого сделать, если они не умеют этого делать. Да и жалко мне - столько лет учиться, и ничего не уметь в конце обучения, помочь хочу.

aptyp ★★★★
() автор топика

Ada, можно показать как процедурный так ОО подход, реализован в GCC, обработка ошибок на этапе компиляции, тем кто раньше занимался Pascal в аде будет полегче, при хорошем знании инглиша примеры реализации становятся легко читаемыми и понятными, достаточно переносим между платформами. Минусы - очень строгая типизация иногда аж бесит, мало русскоязычной литературы, мало графических тулкитов, мало вменяемых IDE.

splinter ★★★★★
()

Си, го и хаскель.

заниматься программированием на С++

Nope.

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

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

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

Вот от этого я и хочу их души спасти!
Какой то пессимистичный ты, что, обучения гены победить не может что ли?

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

хм, в таком разе лично я рекомендую связку Python/C++, ибо Python легко учится, а С++ не отягощённый строительным клеем и созданием правильной архитектуры приложения в целом на поверку оказывается нестрашным совсем языком

я наблюдал как преподаёт AIv с использованием данной связки - мне понравилось, здесь кстати, по треду выше были пособия по этому курсу, что я бы назвал дополнительным и большим плюсом, можно взять и сразу в бой (не надо сидеть писать лекции/семинары и голову ломать, думать как студенты воспримут тот или иной нюанс)

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

единственно что можно было бы поменять - так это вместо С++ втыкнуть С, будет попроще студентам объяснять, а С++ они потом сами догонят, если припрёт

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

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

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

Согласен, что Кормена и Кнута знать очень полезно, но вот спускаться ниже приматам до некоторого момента(в очень далеком будущем) нужно, если интересно, то пусть сами как нибудь.

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

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

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

А на чём молодым учёным писать ресурсоёмкие вещи, на фортране, тоже довольно примитивно на самом деле

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

Ну вот кстати из-за работы над *реально* полезным проектом и хочу обучать то,

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

«Нет» в смысле никто не написал? Конечно. Как и почти у всех остальных языков программирования.

Для других языков по крайней мере есть более менее полные работы на эту тему - для хаскеля есть публикации («An Operational Semantics for I/O in a Lazy Functional Language» и прочие), для си есть («A Formal Semantics for the C Programming Language»), для схемы тоже. Для CL нет ничего такого, т.е. «у CL есть <<такая-то>> формальная семантика» это гипотеза в крайне ранней стадии доказательства. Чисто интуитивно понятно, конечно, что должна существовать какая-то математическая модель в которой можно было бы выразить все тонкости CL.

Опять «обычно»?

А как ещё бывает? Обычно так:

(alex + happy)/parsec/whatever + data Syntax = ...

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

Семантика есть у _ данной конкретной лисп-машины_ в _данный конкретный момент времени_.

Семантика не может быть «в данный момент», это тебя кто-то обманул.

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

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

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

Для других языков по крайней мере есть более менее полные работы на эту тему

Во-1, я сказал «почти». Во-2, они именно что «более-менее», а если честно — модели сферического коня в вакууме.

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

Семантика не может быть «в данный момент», это тебя кто-то обманул.

Ну, во-первых - ты скажи, что именно подразумеваешь под семантикой? Потому что исходя из твоих слов - явно не то, что все остальные. Во-вторых - если конкретный момент времени не фиксировать, то никакой семантики у CL быть не может тем более.

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

Что за чушь ты несешь? Конечно, можем. Если есть код и есть операционная семантика - то мы можем сказать, что делает этот код. Но ладно, я тебе подыграю и переформулирую: «если есть кусок кода с данными, то нету никакого способа сказать, что делает этот код, и вообще - является ли этот код кодом на CL».

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

Haskell проще C, если мозг ещё не забит фигнёй. По крайней мере, не будет неестественных конструкций типа x = x+1.

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

По крайней мере, не будет неестественных конструкций типа x = x+1.

Отсутствие возможностей определить индуктивный типы вроде списков или натуральных чисел - на мой взгляд, намного более неестественна, чем невинные шалости вроде «x = x + 1» (которое в хаскеле есть, кстати).

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

что именно подразумеваешь под семантикой?

Под операционной семантикой — интерпретацию валидной программы как последовательности элементарных операций.

Во-вторых - если конкретный момент времени не фиксировать, то никакой семантики у CL быть не может тем более.

Конечно может. CL никак не отличается от остальных языков в этом смысле.

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

Конечно можем. Раз есть (все) данные, значит, есть и состояние лисп-машины. Что ещё надо-то?

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

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

Гм. Это ты с C сравниваешь?

«x = x + 1» (которое в хаскеле есть, кстати)

Есть, только не работает. Ну, если специально об этом не побеспокоиться.

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

А что в этой конструкции неестественно, я понимаю, для функционального стиля то да, а так, в математике то есть)

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

Под операционной семантикой — интерпретацию валидной программы как последовательности элементарных операций.

Я не вижу нигде в этом определении запрет на возможность семантики быть «в данный момент». Почему то, как мы интерпретируем программу, не может зависеть от момента времени?

Конечно может. CL никак не отличается от остальных языков в этом смысле.

Давай пойдем от противного. Допустим, все так, как ты говоришь. Давай тогда возьмем некую валидную программу на CL. Ну например - твою фотографию в формате jpg. В зависимости от фазы луны данная программа либо задает функцию, считающую факториал, либо выводит «hello world». Т.о. одна и та же программа в зависимости от конкретного момента времени интерпретируется совершенно по-разному. Но ведь семантика не может зависеть от момента времени! Значит она должна интерпретироваться одинаково. Как же решить это противоречие?

Конечно можем. Раз есть (все) данные, значит, есть и состояние лисп-машины. Что ещё надо-то?

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

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

Гм. Это ты с C сравниваешь?

Нет, я ни с чем не сравниваю, я просто говорю о некоторых аспектах хаскеля, которые совершенно неестественны.

Есть, только не работает. Ну, если специально об этом не побеспокоиться.

Ну то есть все-таки при желании работает?

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

А проблема ресурсоёмких задач - что делать, когда считает по часу

Дожили... Было время, когда час расчётов на оптимизированном ассемблерном коде немного считалось. Вот несколько суток расчётов — это уже много было :D А так, если перед сном запустил, а утром результат забрал — то это и не в счёт :)

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

Тем не менее всё равно, работа химика(химическими задачами занимаюсь) начинается после расчётов же, и чем они быстрее, тем лучше. А может с другой стороны тут скорость написания важнее, чтобы больше думать. хз. Вы как думаете?)

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

Я помню, как с первого же занятия на первом курсе нас нагрузили православным Си. При том, что факультет не был программерским.

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

Я не вижу нигде в этом определении запрет на возможность семантики быть «в данный момент».

«Последовательность».

Т.о. одна и та же программа в зависимости от конкретного момента времени интерпретируется совершенно по-разному.

Нет, конечно. Интерпретируется одинаково, но на вход поступают разные данные. Программа на ЛЮБОМ языке имеет право делать IO и менять своё поведение соответственно.

Во-первых, нужно состояние окружающей вселенной

Любой программе, делающей IO, оно нужно. На CL или не на CL.

И с чего ты взял, что если «есть все данные», то есть и состояние лисп-машины?

Состояние лисп-машины — часть данных, естественно.

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

Нет, я ни с чем не сравниваю,

А речь идёт о сравнении C с хаскелем.

Ну то есть все-таки при желании работает?

При желании-то можно из хаскеля вообще бейсик сделать.

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

Ну а как циклы делаются, или я ошибаюсь?
вообще интересно было бы почитать теоретическую основу функционального программирования, на fprog.ru где-нибудь есть список, не знаешь?

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