После перерыва в 6 лет снова начал писать на C++ (раньше писал на нем больше 10 лет). После C# впечатление шага назад.
Одно не пойму - зачем на 1 курсе давать C++. Язык сложный, очень гибкий...
На C# я могу объяснить, что вывод на консоль это Console.WriteLine. А на C++ мне надо объяснять что такое using namespace, что такое include и т.д. и т.п. И дальше выбор - или идти с cout и объяснять модификаторы, либо с printf, что ничем не проще.
А ввод с консоли это вообще отдельная песня...
Или вот вызывают pow(i, 2). Если i типа int, то компилятор говорит что не может выбрать метод между параметрами double и float. Студенты от этой ошибки просто шалеют. Или pow(i, 1/3) - тут другая радость. Разумеется что 1/3 приводится к целому и ничего не работает. Объясняю что надо писать (float)1/3, чтобы им было понятно что это дробь и компилятору тоже. Мне это понятно, но человеку только пришедшему... хорошо если с pascal в запасе... вот так вот по голове...
Рассказал что if (a=1) это типовая ошибка. Что & и && это разные опреаторы. Разумеется не помогает. Все равно ошибаются.
7 comments:
Добрый день! У меня мой "путь" ) был: Pascal -> C -> C++ -> C#
И конечно, мне кажется, что Pascal в этой цепочке бог бы быть и пропущен, но сразу делать скачок (учить С++) не зная основ процедурного программирования - это как учить интегрировать, не научив умножать..
Это, ведь как я понимаю, вынуждает делать программа преподавания в ВУЗ-е...
http://www.stolyarov.info/pvt/anti_c
Дейкстра в свое время сказал хорошую фразу "Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации". То же самое можно сказать и про C#. И я как студент хочу сказать спасибо что мне давали С++ на первом курсе. Хотя я понимаю что вам было-бы проще объяснять студентам более простые языки, но тогда при упоминании С или тем более асемблера получившиеся "программисты" приходили бы в ужас.
Про бейсик согласен, правда с оговоркой, что речь про тот бейсик, про который писал Дейкстра. Сейчас бейсик поддерживает классы, ООП и т.д. Если он чем-то уступает C#, то не намного. Просто на нем не привычно писать.
Проблема C++ не в том, что он "страшнее", а в том что он позволяет сделать то, что делать не положено, да и не нужно. Зачем например писать if (a=b) ? Ну наверное можно придумать - кратко получается - и подсчитал и проверил. Но сколько часов отладки стоит такая ошибка? Стоит оно того? А забытый break в switch? Тоже ведь можно использовать в коде. Но потом кто-то другой смотрит на это и не понимает - это бага или так и надо? Хочешь написать переход - напиши его явно.
Цель профессионального прораммиста не в синтаксисе языка. Мне без разницы на чем писать. Цель - в идеях. В том КАК писать код. А это вложить в голову проще когда не нужно тратить время на проблемы, возникающие из-за вседозволяющего синтаксиса.
Я не против C++. Это отличный язык. Более того - есть задачи, которые можно решить красиво только на нем. Но, IMHO, не эффективен для изучения как первый язык.
Не мог пройти мимо :) Насчет первого языка для изучения - Вы правы,но вроде все изучали в школах Pascal - это,так сказать, начало начал :) Лично я еще в 10 классе стал ходить на курсы в APTECH (или COMTECH, запутался уже в их названиях), года полтора произучал основы логического программирования на с++. Давалось не так уж трудно, хотя иногда так заклинивало, что, например, никак не мог понять чего от тебя требуют, когда объясняли как упорядочить элементы массива по возрастанию. Не тот возраст, наверное, для изучения такого языка.
Но на первом курсе можно давать с++ я думаю, просто далеко не все на первом курсе понимают куда пришли.
Вроде все сказал что хотел :)
Иванов Дмитрий, ученик 141 группы КНИиТ :)
Ну многие и 5му курсу не понимают куда пришли и зачем :)
Проблема в с++ только в том, что тратится очень много времени на мелочи, которых давно нет в других языках. Вполне можно было бы двигаться дальше, а приходится долго топтаться на одном месте.
PHP нынче тоже поддерживает объекты и ООП, там есть куда идти. Надо только понимать куда надо идти и зачем. Доберемся и до ООП тоже.
С++ необходим при обучении. Конечно с него нельзя начинать обучению азам программирования, для цели раньше как нельзя кстати подходил Паскаль, сейчас наверное за основу можно взять и C#. Хотя несмотря на это С++ помогает многое переосмыслить и более аккуратно писать код. Вспомнить хотя бы сколько требуется времени, чтобы склмпилировать достаточно серьезное приложение и на завершающей стадии получить ошибку.
Post a Comment