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

Мне очень нравится слой абстракции Бузина Андерсона , и я с нетерпением жду MYCrypto Дженса Альфке , чтобы достичь работоспособного состояния. Последний делает компетентную работу по разрешению использования в Mac OS X и iPhone с использованием одного и того же кода, хотя его функции имитируют лишь небольшую часть цепочки для ключей.

18
задан Bill the Lizard 15 September 2012 в 23:25
поделиться

17 ответов

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

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

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

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

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

24
ответ дан 30 November 2019 в 05:46
поделиться

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

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

1
ответ дан 30 November 2019 в 05:46
поделиться

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

1
ответ дан 30 November 2019 в 05:46
поделиться

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

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

1
ответ дан 30 November 2019 в 05:46
поделиться

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

В остальном просто будьте уверены в своих способностях. ,

1
ответ дан 30 November 2019 в 05:46
поделиться

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

1
ответ дан 30 November 2019 в 05:46
поделиться

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

В моем университете у нас было студенческое отделение Association of Computing Machinery специально для У нас и у студентов CS была студенческая организация, занимающаяся разработкой видеоигр. Эти организации помогли обучить студентов «реальному миру», пригласив спикеров из отрасли и заставив студентов работать друг с другом.

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

3
ответ дан 30 November 2019 в 05:46
поделиться

Дизайн базы данных

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

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

x Управляемое проектирование

1
ответ дан 30 November 2019 в 05:46
поделиться

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

3
ответ дан 30 November 2019 в 05:46
поделиться

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

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

2
ответ дан 30 November 2019 в 05:46
поделиться
  • Бизнес 101
  • Офисная политика 200
  • Ничто не может быть академическим в реальном мире

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

4
ответ дан 30 November 2019 в 05:46
поделиться

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

4
ответ дан 30 November 2019 в 05:46
поделиться

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

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

4
ответ дан 30 November 2019 в 05:46
поделиться

Компьютерные науки! = Программирование.

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

4
ответ дан 30 November 2019 в 05:46
поделиться

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

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

17
ответ дан 30 November 2019 в 05:46
поделиться

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

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

2
ответ дан 30 November 2019 в 05:46
поделиться

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

1
ответ дан 30 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: