У них (из книги Питера ван дер Линдена Expert C Programming: Deep C Secrets), перевод мой.
В Йельском университете профессор Алан Перлис (один из авторов Алгол-60) давал такое задание (на неделю) своим студентам.
Решите каждую из следующих задач:
1) Прочесть строку и вывести все перестановки ее символов.
2) Задача о восьми ферзях (напечатать все расстановки восьми не бьющих друг друга ферзей на шахматной доске).
3) Дано число N, напечатать все простые числа, не превосходящие N.
4) Написать подпрограмму умножения двух матриц произвольного размера.
На каждом из следующих языков:
1) C
2) APL
3) Lisp
4) Fortran
Любая из этих задач была бы вполне разумным заданием по предмету, который был всего лишь одним из многих изучавшихся. Но здесь от нас требовалось, чтобы мы сделали их все за неделю, на всех языках, которые некоторые из нас никогда до этого не видели!
У нас (преподает сей деятель на ВМК МГУ), перевод не требуется.
…язык Си категорически недопустимо использовать в качестве языка начального обучения программированию
Подробнее — в PDF того же автора:
http://www.stolyarov.info/files/anti_c_v03.pdf
Вкратце — студенты не хотят учиться, а хотят, чтобы преподаватель «разжевал» им весь материал.
Сам не раз был свидетелем того, как студенты уже на зачете (!) начинали «качать права», мол, преподаватель был обязан научить лично их решать те задачи, которые будут даваться в качестве зачетных (это вообще безотносительно предмета). Кроме того, слышал о печальной истории изучения Java на втором курсе мехмата МГУ. Оказывается, на третьем-четвертом курсе, когда курс «Программирование и работа на ЭВМ» (с Java) превращается в «Практикум на ЭВМ» (не очень сложные с точки зрения программирования вычислительные задачи на C или FORTRAN), студенты жаловались, что их не научили языку C. Необходимый для сдачи «Практикума» объем языка C — это максимум две первых главы тоненькой книжечки Кернигана и Ритчи. Ничего сложного даже для бывшего джависта там нет. Тем не менее, надо нажаловаться, вместо того, чтобы хоть немного «самообразовываться».
PS Естественно, что даже в случае изучения на первом курсе C и C++ вместо Java подавляющее большинство студентов даже к третьему курсу совершенно не умеет программировать даже в том минимальном объеме, который требуется на мехмате. Но формальных поводов нажаловаться на «злого препода» — меньше.
При этом использовать Fortran и Pascal для обучения программированию действительно нельзя: они загружают голову студента мёртвыми парадигмами.
FORTRAN, кстати говоря, никто и не использует для обучения. В «Практикуме на ЭВМ» это скорее такая «дань традиции» — его до сих пор любят использовать специалисты по численным методам (но они не программисты, а математики).
Я лично не знаю никого, кто решал те задачи на фортране.
Мехмат МГУ этим наслаждался (и возможно, наслаждается сейчас).
Кстати, задачи, предложенные профессором, к программированию в современном его понимании никакого отношения не имеют.
Если книжка написана в 1994 году, когда автор уже был начальником одного из отделов в Sun (конкретно — разработка компиляторов), то однозначно, о «современном понимании» тут речи вообще не идет.
Тут хохма, скорее, в том, что в первой, третьей и четвёртой задаче кодинг сам по себе крайне туп и ничему не учит (хотя на хабре какой-то школьник разродился постом про оптимизацию перемножения матриц на яве под x86), а вот _правильные_ алгоритмы решения данных задач, эээ, не всегда доступны пониманию студентов первого и даже второго курса.
> кодинг сам по себе крайне туп и ничему не учит
Это задачи для студентов, которые (в лучшем случае) освоили к моменту начала этого курса азы работы в Unix. И учат их пока что тупому кодингу, чтобы if с for не путали.
Потом, тупо и тривиально (для человека, знакомого с императивными языками — да хоть тем же Basic) решения получаются только на C и FORTRAN. На Lisp все уже несколько сложнее, на APL… Там приведено решение на APL для третьей задачи, состоящее из одной коротенькой строки (с комментарием: You can see why they don’t have an «Obfuscated APL competition» — there is no need, it already comes this way.).
Курс алгоритмов читается отдельное. Не уподобляйтесь русским преподавателям и не несите херни.
Процес обучения подразумевает: ознакомление, научение, выработку навыков, контроль знаний.
> язык Си категорически недопустимо использовать в качестве языка начального обучения программированию
Это правильно. Знать его надо, потому что это язык для эффективного низкоуровнего программирования, который будет всегда. Но учить его первым нельзя. Традиционно в институтах первым учат Паскаль, он приучает к системному подходу, дисциплинирует.
> Традиционно в институтах первым учат Паскаль, он приучает к системному подходу, дисциплинирует.
Традиционно в наших институтах учат Borland Pascal по книжке Фаронова. Он приучает к использованию доисторической среды разработки и последующему переходу на Delphi.
Лично я видел только одну более-менее правильную отечественную книжку, где учили чему-то похожему на программирование с использованием Паскаля. Все остальное — перевод руководства к стандартной библиотеке фирмы Borland.
http://sch57.msk.ru/book2.htm
ftp://ftp.mccme.ru/users/shen/progbook2/progbookpdf.zip