Какой курс бакалавриата по информатике лучше всего готовит программистов к работе?[закрыто]

StackOverflow https://stackoverflow.com/questions/895165

Вопрос

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

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

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

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

Это было полезно?

Решение

Мне еще предстоит найти хороший курс CompSci, который адекватно готовит инженеры-программисты для рабочего места.Если вы найдете тот, который имеет следующее [хотя я сомневаюсь, что его можно назвать CompSci, это больше похоже на Real-World Software Design, что совсем другое дело].

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

Гораздо более полезный курс для инженеров-программистов включал бы столько (а возможно, и больше) следующих компонентов, которые я могу придумать в уме:

  • Язык программирования - основной поток программы, парадигмы, синтаксис и т. д.В основном этому учат довольно хорошо, поэтому я не буду слишком углубляться в эту тему.Хотя было бы полезно, если бы преподавали несколько совершенно разных классов языков программирования - например, я выучил C, Pascal и VB 3(?Точную версию не помню).Было бы гораздо полезнее, если бы программисты выучили хотя бы один функциональный язык, один императивный язык и один декларативный язык.
  • Отладка - При написании приложений nTier [которыми являются многие/большинство реальных приложений] было бы полезно иметь возможность выяснить где что-то идет не так, если необходимо, вплоть до уровня протокола.Для этого пригодятся инструменты анализа, такие как WireShark.
  • Устройства связи - XML, XQuery, XPath, XSL, XSD [поскольку они, похоже, используются очень широко].
  • Проектирование реляционной базы данных - Этому уже достаточно хорошо учат.
  • Настройка производительности реляционной базы данных - Простого проектирования таблиц недостаточно. Знание того, когда уместно индексировать определенные поля, а когда нет, также важно и, похоже, не рассматривается во многих курсах.
  • Нормализация данных Во многих случаях этому также учат достаточно хорошо.Хотя большинство студентов, кажется, выходят в реальный мир, извергая теории, которым их учили - «вы всегда должны использовать нормальную форму Бойса-Кодда» и т. д., фактически не задумываясь о последствиях этих теорий.Иногда в реальном мире у нас есть очень веские причины нарушить правила.
  • Оптимизация запросов - Написание базовых запросов часто оказывается за пределами зоны комфорта выпускников, поэтому следует учить оптимизации.Кроме того, следует обучать таким инструментам, как профилировщики запросов, которые помогут учащимся устранять проблемы с производительностью приложений.
  • Хранимые процедуры/триггеры - Я еще не встречал студента, который мог бы написать хранимую процедуру или триггер или эффективно использовать их.Выборы/объединения/вложенные выборки, похоже, являются пределом того, чему учат, когда дело доходит до проектирования запросов.
  • Основные алгоритмы - По моему опыту, этому очень хорошо учат, но многие студенты, похоже, не имеют ни малейшего представления о том, как решить, какие алгоритмы применимы к каким ситуациям, без указания «используя такой-то алгоритм, решите эту проблему».Было бы полезно, если бы вы могли сказать: «Решите эту проблему», и они такие: «Хорошо, у меня есть набор алгоритмов, которые будут полезны в этой ситуации, это лучший из-за x, y или z». Причина, и вот как ее можно применить для решения.
  • Рекурсия - Мне еще предстоит найти подход, который мог бы научить рекурсии, кажется, вы либо понимаете это, либо нет.Когда-нибудь я найду хорошую метафору, которая поможет понять это даже самому простому программисту.
  • Абстракция - Кажется, это то, что многие курсы замалчивают, несмотря на то, что это один из основных принципов ООП.
  • Рефакторинг кода - Зная когда рефакторинг и, что почти не менее важно, когда нет к.
  • Повторное использование кода - Кажется, что многие курсы выплевывают обезьянок вырезания/вставки - это нет что означает повторное использование кода!
  • Управления источником - Я не изучал систему контроля версий до своей 3-й или 4-й работы по программированию, и я лично не знаю ни одного инженера-программиста, который изучал бы систему управления версиями в рамках своего курса...почему это?
  • Резервное копирование и восстановление - Я не слышал ни о каких курсах, на которых этому учат.Сколько начинающих программистов потеряли всю свою работу, потому что они просто не думать о резервном копировании?Я знаю, что это было в прошлом, но не в последнее время.Дело не в том, что я не знал о необходимости резервного копирования, но, как говорится, «со мной этого никогда не случится».Это воля с вами произойдет, и я гарантирую, что это будет правильно, прежде чем вам придется продемонстрировать все, что вы только что потеряли!
  • Обслуживание файловой системы - Хорошо, на некоторых курсах это кратко замалчивается, но на многих нет.
  • Написание качественного технического задания на проектирование - Кажется, что это всегда представляет собой краткое содержание курсовой работы, но студента редко просят разработать ее самостоятельно.Написание объема работы и понимание шаблонов документов, похоже, выходят далеко за рамки большинства курсов по программному обеспечению.
  • Пользовательская документация - Пользователи думают не так, как вы, и если вы предоставите им программное обеспечение, которое «говорит само за себя» или «настолько просто, что даже идиот сможет его использовать», это взорвется вам в лицо.Есть известная поговорка: «Сегодняшнее программирование — это гонка между разработчиками программного обеспечения, стремящимися создавать более крупные и лучшие программы, защищенные от идиотов, и Вселенной, пытающейся создавать еще больших и лучших идиотов.Пока что Вселенная побеждает».Напишите пользовательскую документацию, которой сможет пользоваться восьмилетний ребенок — это может показаться болезненным, но как только это будет сделано, и навсегда, вы будете благодарить себя.
  • Техническая документация - т.е.Было бы полезно, если бы студенты могли использовать Sandcastle, nDoc или любые другие инструменты документирования.
  • Планирование тестирования - разработка тестов и программного обеспечения, позволяющего проводить тестирование.nUnit или аналогичный может стать отличным инструментом для преподавания на курсах по разработке программного обеспечения.На самом деле преподавание любой среда тестирования была бы лучше, чем не обучать чему-либо...как кажется, это так.
  • Тестирование FAT/SAT/UAT - Было бы полезно понять различные сценарии тестирования в реальном мире, такие как проверки работоспособности, заводские приемочные испытания и пользовательские приемочные испытания.Подписаться на ваше программное обеспечение так же важно, как и разработать его.Если вы не выполняете то, что клиент ожидал получить, вам не заплатят — независимо от того, насколько блестяще ваше решение с технической точки зрения.
  • Архитектура программного обеспечения - понимание различных компонентов реальных многоуровневых приложений, преимуществ и недостатков их использования.
  • Взаимодействие с пользователями - Возможно, это на самом деле не информатика, а умение разговаривать с людьми, которые не часто находятся на вашей волне и думают не так, как вы, это связано с общением, но на самом деле это то, о чем разработчикам следует знать. из.
  • Здравый смысл - Динь, динь, динь, динь - есть много программистов, у которых нет ни грамма этого!Курсы созданы для того, чтобы доказать, что вы можете думать самостоятельно. Я не понимаю, почему так много выпускников приходят в реальный мир, думая, что все, что им нужно сделать, это слепо применять правила, которым их учили, не задумываясь о причинах и последствиях.Повторю то, что сказал ранее: в реальном мире мы иногда находим очень веские причины для нарушения правил.Мы не следуем им слепо, но и не нарушаем их слепо.Разработка программного обеспечения — это искусство, и, как и все виды искусства, мы должны знать, когда мы можем, а когда нет, и, что не менее важно, когда нам следует, а когда не следует нарушать правила.Будучи выпускником, ты усвоил правила и доказал это.Теперь вам нужно делать то, чему вас действительно пытался научить курс – применять то, чему вы научились думать самостоятельно.
  • Прослушивание - Вы будете удивлены, сколько раз я вижу код, написанный потому, что разработчик «думал, что знает, чего хочет клиент», вместо того, чтобы на самом деле слушать, что говорит пользователь, и понимать его реальные потребности.
  • Понимание - Идет рука об руку с прослушиванием.
  • Навыки коммуникации
  • Разговор с технически некомпетентным - т.е.большая часть вашей пользовательской базы
  • Посредничество проекта - продавать свои идеи тем, кто выписывает чеки
  • Расстановка приоритетов - как решить, какие функции важнее других.
  • Бюджетирование - оценка времени
  • Тайм-менеджмент - как успеть сделать все вовремя, когда все вокруг тратят ваше время и не заботятся о сроках.Точно так же, как когда все твои друзья хотят, чтобы ты сходил в паб выпить пинту или десять, когда у тебя есть часть курсовой работы, которую ты еще не начал, и ты должен сдать ее к концу завтрашнего дня.
  • Ползучесть масштаба - когда сказать: нет, это не входит в спецификацию/бюджет.

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

Другие советы

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

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

Информатика != Программирование.

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

Ничто не сравнится со знаниями, полученными при создании проектов, на самом деле не имеет значения, какой это курс: если вы проходите курс по реляционным базам данных, создайте проект библиотечной системы, если вы изучаете язык ассемблера, создайте что-то вроде инструментов для ПК с 32/64-битной сборкой. .

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

Самыми важными и актуальными являются не курсы CS.Вам нужно будет хорошо общаться.Какие бы курсы вы ни прошли, чтобы стать лучшим слушателем/читателем и лучшим писателем/оратором.

  • Бизнес 101
  • Офисная политика 200
  • В реальном мире нет ничего академического.

На самом деле, приступая к работе по программированию, от вас не ожидают, что вы станете старшим разработчиком с первого дня.Изучение некоторых основ кодирования, безусловно, потребует от вас длительного пути, но на подъеме я вижу, что немало студентов, изучающих информатику, испытывают трудности в реальном мире, потому что они действительно не знают, во что ввязываются в первый день.Они борются с бизнес-областями и не понимают, почему они делают то, что делают.Они не знают, с кем общаться с другими бизнесменами.

На этот вопрос сложно ответить, но я думаю, что есть одна вещь: мешает программистам во многих программах CS не хватает практического кодирования.Знать теорию информатики важно, но я думаю, что многие сугубо теоретические программы CS терпят неудачу из-за того, что не требуют упражнений по программированию на занятиях.Например, я видел много классов ИИ, которые требуют исследований и статей, но не требуют кода.На мой взгляд, чрезвычайно важно понимать теорию информатики, но не менее важно уметь ее применять.

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

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

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

Я бы сказал, что это связь между системами баз данных и курсом по разработке программного обеспечения.Ни один из этих курсов не является обязательным для получения степени бакалавра в моей школе, но его могут пройти студенты.Большинству программистов знание баз данных, вероятно, более необходимо, чем знание алгоритмов.Работа в проектной команде, даже над курсовым проектом, может помочь вам понять динамику команды и то, как работать в командной среде.

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

Двумя наиболее важными для моей работы по специальности «Инженер-программист» в Университете Шеффилда были модуль «Software Hut» на 2-м курсе, который в течение семестра включал в себя команды, создающие программный продукт для реального клиента.Я думаю, что было три разных клиента, и команды соревновались друг с другом, чтобы создать для них лучшую систему.

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

Проектирование базы данных

Функциональное программирование

Объектно-ориентированного программирования

x Продуманный дизайн

Я считаю (как английский ИТ-директор), что день в офисе стоит недели в школе, и поэтому, если вы найдете способ получить некоторый опыт, оно того стоит.

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

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

Лучшие программисты сразу после колледжа?Пока в школах не начнут преподавать такие понятия, как связность, связанность, хорошие практики программирования, контроль версий, управление конфигурациями, современные модели разработки — я так не думаю.Обычно я вижу самообучающихся, которые хотят поступать правильно, обучаясь самостоятельно или, если им повезет, их нанимают в организацию, которая проповедует и практикует хорошие вещи.

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

Очевидно, общая комбинация

  • Дискретная математика (ваша логика, теория графов, немного теории чисел и повторяемости)

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

  • Программная инженерия (управление программными проектами, работа с существующими компонентами, работа в парах или в группе, контроль версий, шаблоны и т. д.) так

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

    подготовит вас к большинству задач программирования.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top