Что я упустил, не изучая компьютерные технологии?

Я работаю над написанием приложений на C# .NET для небольшой компании. Для тех из нас, у кого нет степени в программировании, что мы упустили, что может занять у нас годы, чтобы научиться учить себя?

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

15 ответов

Решение

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

Дискретная математика

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

Структуры данных и алгоритмы

Курсы по инженерному программированию обычно охватывают простые алгоритмические концепции, такие как рекурсия и разделяй и властвуй (быстрая сортировка и БПФ), и простые структуры данных, такие как связанные списки и деревья. Курс информатики по структурам данных и алгоритмам будет охватывать дополнительные алгоритмические концепции, такие как динамическое программирование, и дополнительные структуры данных, такие как графы.

Теория вычислений

Я знаю, что такие темы, как теория автоматов и полнота (P, NP и т. Д.) Определенно не были охвачены моей степенью EE.

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

Дискретная математика также может относиться к этой категории, а также, возможно, к статистике. Возможно, это тоже степень ЭЭ, этот ответ, возможно, слишком пессимистичен.:)

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

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

Мой вывод таков: знание - это знание. Вы можете получить его самостоятельно или посещая школу. Важно то, что у вас это есть, и у вас есть желание продолжать учиться независимо от того, ходите вы в школу или нет.

Подумайте о том, что вы не пропустили: девушки, вечеринки... просто шучу;)

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

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

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

Формальное обучение операционным исследованиям, вычислительной сложности, некоторым "продвинутым" алгоритмическим навыкам (очевидность кэша, извлечение данных и т. Д.) И культуре проблем параллелизма, которые обычно рассматриваются в курсах по ОС и программированию. Может быть, даже некоторые хорошие практики в программировании, но я думаю, что вы уже узнали это.

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

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

Вероятно, единственное, что вы упускаете, - это какая-то теория, хотя некоторые из них вы получите со своей степенью EE.

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

У меня есть степени в EE и Comp Sci с давних времен:) Есть определенно хорошие вещи, которые вы вынуждены изучать в программе компьютерных дипломов, но это еще не все. Есть конкретные вещи, которые вы не изучаете (различные java-пакеты, использование Studio для отладки, системы контроля версий, шаблоны, используемые в определенных средах). Но есть вещи, которые вы узнаете, которые являются хорошими фундаментальными знаниями, даже если вы не понимаете этого в то время (алгоритмы и т. Д., Как опубликовали люди).

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

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

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

Поэтому я бы всем рекомендовал, дипломированный или нет, читать книги и статьи о разработке программного обеспечения. На одном из моих выпускных курсов по разработке программного обеспечения мы читали такие вещи, как The Mythical Man Month, и это здорово. Мне также нравятся книги по созданию программного обеспечения, такие как Code Complete McConnell. Джоэл имеет хороший список рекомендаций на своем сайте:

http://www.joelonsoftware.com/navLinks/fog0000000262.html

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

Я бросил школу в 18 лет без какой-либо степени и уже 10 лет профессионально занимаюсь программированием на разных языках. Я задал этот точный вопрос нескольким людям, которые получили Comp. Sci. или степени разработки программного обеспечения. Пока что единственное, что я обнаружил, я пропустил, это общий жизненный опыт, который можно получить, посещая университет.

Я обнаружил несколько человек, которые сделали Comp Sci или подобное, а затем продолжил карьеру в несвязанной области. Возможно, курс Comp Sci поможет вам решить, действительно ли это для вас.

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

Я начал профессионально программировать на постоянной основе после окончания школы в 1984 году, и до начала 90-х не занимался никакими компьютерными курсами третьего уровня. Основными предметами, на которых я сосредоточился, были управление в области информационных технологий и дискретная математика, которые я нашел очень полезными. Фактическая часть программирования была довольно слабой, Паскаль из учебников. Однако некоторые классы базы данных были довольно хорошими, нормализация, реляционная алгебра и т. Д., Как и системный анализ и структурированный дизайн.

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

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

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


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

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

Другие вопросы по тегам