Я учусь на курсе CS.На каком предмете программирования мне следует сосредоточиться?[закрыто]
-
22-07-2019 - |
Вопрос
Что самое важное в это время?Я знаю, что смогу приобрести опыт программирования позже.Что из следующего мне следует изучить, чтобы стать хорошим программистом или аналитиком после окончания учебы?
- структуры данных
- алгоритмы
- разработка программного обеспечения
- низкоуровневые аспекты
- шаблоны проектирования и объектно-ориентированный анализ
[Редактировать]
Спасибо за ответы.Я хотел бы включить другие важные темы, которые послужат справочной информацией для других студентов:
- параллельное программирование
- операционные системы
[/Редактировать]
Примечание:Я думаю, что первым пунктом списка должен быть выучить английский язык
Решение
Все они.Все в вашем списке важно.
Другие советы
Лично я бы изучил следующее:
- Один C-подобный язык (C/C/C++/C#/Java)
- Один язык сценариев
- Один функциональный язык программирования
- Тем более, что мы переходим к многоядерному миру, это пригодится, поскольку позволяет проводить распараллеливание, выходящее за рамки того, что в настоящее время могут сделать другие языки.Например, на Erlang работают целые телекоммуникационные инфраструктуры.
- структуры данных
- Вы будете использовать их повсюду.Они не зависят от языка программирования, они понадобятся вам на протяжении всей вашей карьеры.
- Алгоритмы
- Скорее всего, они будут соответствовать вышеупомянутому элементу.Определенные структуры данных имеют определенные алгоритмы доступа к ним.
- Шаблоны проектирования
- Да, конечно, изучите различные шаблоны проектирования, но в то же время знайте, что они не являются конечной целью разработки программного обеспечения.
Все остальное в вашем списке также очень важно, поэтому, хотя я предлагаю перечисленные выше пункты, они не более важны, чем другие, которые вы перечислили.Это те предметы, которые мне хотелось бы получить в результате учебы, и мне грустно констатировать, что мне не предлагали их в виде занятий, но мне пришлось изучать их самому наряду со всей остальной курсовой работой.
Я думаю, что вы уже на правильном пути, поскольку в своем списке вы не упомянули ни одного конкретного языка.Я думаю, что это ошибка номер один, которую допускают студенты, изучающие компьютерные науки, — сосредоточение внимания на языке или парадигме.
Весь ваш список очень важен;единственное, что я бы добавил, это достаточно глубокое изучение многопоточности.В будущем это будет становиться все более важным:(Статья Арс-Техника)
Кажется уместным подключить сюда Джоэла ;-)
Все они обязательны!!
Что ты думаешь?Я ожидал, что вы будете выбирать между концентрацией внимания (например, игровой дизайн против безопасности и криптографии).
Вы не можете выбирать между «алгоритмами, ООП, структурами данных, разработкой программного обеспечения и т. д.».Это ОСНОВЫ!Вы должны выучить их все.
Я бы начал со структур данных и алгоритмов, здесь нет никакой конкуренции.ОО-дизайн полезен.Немного низкого уровня, да.Разработку ПО можно пропустить (с недоверием).
Кроме того, вот несколько идей:
- основы реляционной базы данных (не только «как использовать oracle», но и реальная реляционная алгебра)
- операционные системы
- компиляторы + интерпретаторы
- что-то в ИР (/генетических алгоритмах/нейронных сетях)
Да, я склоняюсь к «хардкорным» вещам CS.Напряженная работа, сверхтяжелые процессы и прочая ерунда с проектированием, которой вы достаточно скоро научитесь в промышленности, не нужно тратить на них свои образовательные ресурсы.:-)
Давайте посмотрим..
Вам нужно будет понимать сложность, структуры данных и алгоритмы, чтобы вы могли сделать важный выбор.К сожалению, вам нужно будет ДЕЙСТВИТЕЛЬНО понимать эти темы и решать сложные головоломки, потому что они играют гораздо большую роль на собеседованиях, чем в вашей реальной работе позже.Следовательно, это наиболее важные вещи, на которых следует сосредоточиться по практическим соображениям.
Разработка программного обеспечения, шаблоны проектирования и анализ очень важны (хотя я предвзят).К сожалению, за исключением шаблонов проектирования, вы не сможете изучить эти темы без активной практики над крупным проектом.Сосредоточьтесь на понимании понятий объектно-ориентированного программирования и понятия виртуальных функций/динамического связывания, поскольку они очень важны, и многие люди не понимают их должным образом.Сделайте все возможное, чтобы получить хорошую стажировку.
Все, что вы перечислили, является основными компонентами достойного образования в области компьютерных наук, хотя вам действительно следует добавить следующее:
- Операционные системы
- сеть
- Математика (вводные курсы по дискретному исчислению, алгебре, доказательствам, статистике)
- Базы данных
- Основы (конечные автоматы, регулярные выражения, машины Тьюринга и т. д.)
Вместе эти два списка дадут вам хорошее базовое понимание информатики, после чего вам следует выбрать еще несколько специальных тем (тех, которые вас больше всего интересуют).
- Искусственный интеллект
- Крипто/Безопасность
- Обработка/распознавание изображений/сигналов
- Составители
- Графика
- Игровой дизайн
- и т. д.
Вы обнаружите, что как только вы начнете углубляться в тему, все эти основные курсы, включая математику, начнут вступать в игру!Например, в настоящее время я изучаю распознавание изображений, и мне приходилось использовать и понимать вещи из статистики, искусственного интеллекта, исчисления, доказательств, алгебры, алгоритмов, структур данных, ООП и т. д.
Все в вашем списке важно, но вам также нужен правильный настрой.Вам нужно вникать в подробности того, как работает каждая вещь, которую вы изучаете, и почему это было сделано именно так, а не просто выполнять классное задание.Это то, что действительно даст вам преимущество как будущему специалисту.
- Многопоточность и распределенные системы.
- Как создавать удобные для пользователя приложения с красивым графическим интерфейсом.
Все это очень хорошо, но алгоритмы — хорошее начало.Возможно, вам даже стоит сначала изучить курс дискретной математики, посвященный теории.