CSCI-104 был одним из первых курсов CS, которые я прошел, когда перешел в USC. У меня было несколько проблем с этим. Я все еще делаю.

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

Невыполненное обещание

Название курса «CSCI-104: структуры данных и объектно-ориентированное проектирование» предполагает, что нас также учат проектировать программы, правильно используя объекты и наследование, что технически верно, но, честно говоря, ложь. Нас учили тому, как работает наследование и полиморфизм, но не тому, как применять наследование и полиморфизм. Нас не учили, как писать хороший код и использовать эти шаблоны для создания хорошего программного обеспечения. Это напрямую привело к тому, что CSCI-201, класс после CSCI-104 и класс, в котором я являюсь главой CP, стал все более катастрофическим из-за студентов, пишущих спагетти, неподдерживаемый и непригодный для повторного использования код. .

Неспособность сделать акцент на передовой практике кодирования

Оценка в CSCI-104 далека от совершенства. Невероятно незначительная ошибка в вашем коде может привести к тому, что вы, возможно, провалите все тестовые случаи, что принесет вам большой жирный ноль за задание и полное игнорирование других аспектов вашего кода, таких как дизайн кода. Повышение уровня доступно за счет определенного вычета баллов за каждую измененную строку. Кто-то скажет, что это справедливо, и это правда, если вы просто будете хорошо писать и писать идеальный код, то вы получите 100% за каждое задание. Однако если вы не заметили, просто сказать людям «гуд гуд» в реальной жизни не сработает.

Дело в том, что CSCI-104 не признает и не подчеркивает важность хороших методов кодирования и фокусируется исключительно на правильности. Представьте себе следующий сценарий:

  • Тот, у кого отличный дизайн кода — слабая связь, внедрение зависимостей и все прибамбасы, совершает небольшую ошибку и заставляет этого человека проваливать все тестовые примеры, в конечном итоге получая 80% после изменений и обновлений кода.
  • Тот, кто пишет ужасный спагетти-код без учета читабельности и вообще не может быть повторно использован или расширен в будущем, проходит все тестовые случаи и получает 100%.

Проще говоря, я не думаю, что это хоть в малейшей степени справедливо. Это побуждает студентов писать код, который просто работает, игнорируя передовой опыт, что совершенно нормально, если все знают, почему код работает, и осведомлены об упомянутых методах. Однако правда в том, что некоторые студенты не знают, почему код работает (кроме того, что «его написал ассистент» или «я только что все перепробовал») и не заинтересованы в передовом опыте. Все, что имело значение, — это получить эти тестовые случаи. Это до боли очевидно в CSCI-201, прямом продолжении CSCI-104. Студенты вслепую говорят, что глобальные переменные плохи, не зная, почему. Метод main из 500 строк (и это все) тоже не является чем-то из ряда вон выходящим.

Серебряная подкладка

Хорошая новость заключается в том, что CSCI-104 постоянно развивается. К концу моего семестра CSCI-104 оценщики разделили оценку за задание на два элемента: проверка кода и тестовые примеры. Это, безусловно, шаг в правильном направлении, но, судя по тому, что мы с коллегами видим в качестве сотрудников курса CSCI-201, по-прежнему крайне необходимо усилить акцент или, возможно, обеспечить соблюдение правил надлежащей практики кодирования.

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

Давайте работать вместе, чтобы это изменить.