Можно ли получить прочную основу программирования, не посещая колледж / университет? [закрыто]

28

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

  1. Поступление в колледж дает вам документ, который необходим для посадки на работу, особенно в трудные экономические времена.

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

Вот мой вопрос: меня вообще не волнует причина 1, потому что у меня уже есть своя собственная компания (я создаю сайты / занимаюсь аффилированным маркетингом) и стабильное финансовое положение, поэтому я почти уверен, что мне не нужно будет оглядываться для работы.

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

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

Как вы думаете, моя основа была бы прочной, или все еще не хватает по сравнению с кем-то, кто учился в колледже?

Daniel
источник
2
На этой планете, вероятно, есть хотя бы один человек, который может. Кстати, причина 1 все еще имеет значение. Когда все остальные равны, «они» обычно предпочитают кого-то с более формальным образованием.
Работа
1
Я могу сказать вам одну вещь, вы не узнаете, что значит солидный в университете.
Питер Тернер
Дело в том, что на изучение программирования уходит десять лет , и некоторые из этих лет обучения в университете могут помочь.
Василий Старынкевич

Ответы:

17

Абсолютно точно. Да, это возможно. Откуда мне знать? Потому что я сделал это!

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

Несколько советов:

  • Учись на практике! Хотите знать, как работают двоичные деревья? Сделать один.
  • Делай, учась. Поставьте себе амбициозные проекты, в которых вам придется узнавать что-то новое, чтобы их завершить. Предостережение: если вы ставите себе слишком сложные проекты, то легко впасть в уныние, но если вы создадите себе слишком простые проекты, то вы многому не научитесь. Вы ищете зону масла.
  • Начните с C. Языки высокого уровня делают вас ленивым. Я бы никогда не выучил C, если бы сначала выучил Python.
  • Википедия должна быть вашей первой отправной точкой для любых концепций, которые вам нужно выучить.
  • Неважно, если вы никогда не закончите ни одного проекта (в конце концов, что закончено). Гораздо важнее, чтобы вы изучали новые вещи. Это не значит, что вы никогда не должны пытаться завершить проект. Это может быть огромным мотивационным стимулом, чтобы увидеть то, что вы сделали, работая. Легко отвлечься, не волнуйтесь, если вы это сделаете.

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

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

оборота dan_waterworth
источник
Тоже самое. Я получил степень за работу. Я не слишком многому научился, в основном все, что я уже знал. Я узнал, что я действительно ненавидел Java больше, чем я думал вначале (мне пришлось использовать его для своего финального проекта), и у меня был один великий профессор, который учил нас на своем личном опыте, где я многому научился.
Эхо говорит Восстановить Монику
@ Эхо, оно того стоило?
dan_waterworth
@Dan_waterworth, мне нравится так думать.
Эхо говорит Восстановить Монику
Я думаю, что имеет больше смысла начинать с языка программирования высокого уровня, особенно с Python. Конечно, это зависит от типов задач, которые вы хотели бы решить после того, как вы закончите изучать основы: если вы хотите заняться программированием в хардкорных системах, выберите маршрут C, если вы хотите разрабатывать приложения для конечных пользователей, не возиться с C и пойти на что-то вроде Python.
Жолт Тёрёк
не согласен с частью C Вы хотите остаться на высоком уровне абстракции. Вы можете утверждать, что C делает вас ленивыми, изучайте машинный код! если вам не нужна производительность на языке C, то все равно стоит остаться с python.
segfault
12

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

Sorantis
источник
1
Ну, у меня уже есть степень в области международной экономики, так что я эту часть покрыта.
Даниэль
1
У меня есть друг, у которого есть степень в каком-то <noname>, и он успешный программист на Flash / PHP. Я думаю, это все зависит от вас. Например, у меня есть степень по физике, но я разработчик программного обеспечения. Два года назад я решил получить степень магистра в области CS, просто потому, что хотел, а не потому, что мне это было нужно.
Сорантис
5
Образование в колледже научило меня в течение 1-2 дней осваивать новый компьютерный язык. Если вы уже можете сделать это, вы выучите большой урок.
apoorv020
1
Да, но вы должны быть совершенным автодидактом.
dietbuddha
3
Некоторым людям не нужно учиться учиться самостоятельно.
dan_waterworth
6

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

У меня была долгая карьера в области программного обеспечения без получения степени. К концу этой карьеры я занимал архитектурную должность, и старший архитектор моего проекта сказал, что мои знания в области программного обеспечения и компьютерных наук (это не одно и то же!) Легко эквивалентны тому, что я получил степень магистра в Университете Ватерлоо (один из них). из лучших канадских школ CS).

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

ПРОСТО МОЕ правильное мнение
источник
4

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

Марси
источник
3

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

В наше время мотивированный человек может выходить в интернет, и благодаря таким источникам, как MIT Open Courseware , составить курс независимого обучения, который даст им достаточно широкий круг знаний, и именно эта широта знаний, на мой взгляд, является что делает хорошего разработчика Тем не менее, тот, кто не так мотивирован, может найти, что он может получить, изучая один язык, и может быть в состоянии сделать это только по профессии.

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

rjzii
источник
2

Как программист, я постоянно играю с не относящимися к работе API и языками (Ruby on Rails, Python, Node.js и т. Д.). Я делаю это больше для интереса, чем для работы. У меня есть 2 диплома, но даже после 10 лет программирования на Java / JEE я обнаружил, что действительно скучаю по теории степени бакалавра (Big O, Algorithms, Descrete Math и т. Д.).

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

Проверьте MIT Open Coursware . Это бесплатно и является отличным ресурсом для заполнения пробелов в теории CS / Math.

Хит Лилли
источник
2

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

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

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

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

Берин Лорич
источник
Согласен. Почти все деловые программы, которые я делал, были сродни работе в торговле, как плотник. Я думаю, что трек для ученика / подмастерье / мастера программирования был бы более полезен, чем университет, чтобы научиться программировать.
cfeduke
2

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

Сейчас, конечно, есть некоторые программы, в которых полезно знать, что такое «конечный автомат» или как использовать поиск «Booyer-Moore». Есть даже некоторые проблемы, когда полезно знать некоторую реальную математику, например, если вы работаете с финансовыми расчетами или физическими симуляциями.

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

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

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

Вам не нужно знать все подробно, вот для чего нужны Google, StackOverflow и Wikipedia :) Однако вы должны знать о существовании различных инструментов и методов, чтобы понять, что они пригодны и применимы к вашей ситуации. Вы также должны получить опыт, зная, какой инструмент лучше всего применять. Фонды, как правило, избалованы новичками, поскольку у них нет опыта, почему тот или иной инструмент будет полезен. Если у вас большой опыт, некоторые вещи просто «защелкнутся».

Некоторые вещи, которые я бы порекомендовал, хотя:

  • Если нет, начните изучать шаблоны проектирования, это самый практичный и универсальный инструмент в вашем наборе инструментов.

  • Прочитайте некоторые общие обзоры различных алгоритмов, если вам интересно, просто чтобы вы знали, что там, когда вам может понадобиться

  • Узнайте о распараллеливании и многопоточности (и некотором функциональном программировании). Возможность поддерживать несколько ядер сегодня важна и скоро станет недостижимой, поэтому это важнейшее знание.

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

оборота конрад
источник
Ваша оценка около 90% программ, не имеющих сильного теоретического содержания, вероятно, является правильной. К сожалению, большинство программистов периодически сталкиваются с остальными 10%, поэтому это необходимо.
Orbling
2

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

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

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

Что касается возможности применять знания, это очень индивидуально. Люди, поступающие в колледж, могут не иметь возможности применять эти принципы, а также те, кто не поступает в колледж. Есть старая поговорка, которая гласит: «Не важно, что входит, а что выходит».

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

K Рея
источник
2

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

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

TMN
источник
Я сделал. Фактически, основная часть моего обучения была значительно меньше, чем за 2 года (около 6 месяцев), но я регулярно делаю 60-70 часовые недели.
dan_waterworth
Согласитесь с TMN. В ОБЩЕМ ваше формальное образование не имеет представления о том, где вы окажетесь, оно имеет определенное количество МОЛОДЕЖИ (то есть имеет тенденцию охватывать большую часть территории). Мой пример из предыдущего поста: я никогда не думал, что буду использовать Compiler Construction, которая была частью моего курса. Оказывается, спустя 20 с лишним лет я был одним из самых важных курсов, которые я когда-либо делал. Теперь проблема в том, что для тех, у кого нет этих знаний в затылке - вы не знаете, чего не знаете. И этот уровень невежества делает вас менее эффективными в долгосрочной перспективе.
quick_now
1

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

Иан
источник
В основном это проблема, когда наем осуществляется через отдел кадров. Лучший способ справиться с этим - создать бизнес-социальную сеть ИТ-менеджеров, которые знают вас или, по крайней мере, вас, и позволяют попытаться обойти процесс «фильтрации» кадров. Другими словами, люди без дипломов, как правило , должны лучше сами продавать свои навыки и услуги, а не подавать заявки на рекламируемые должности. Большинство компетентных ИТ-менеджеров будут нанимать на основании солидного послужного списка и репутации (т.е. рекомендации от того, кому они доверяют) Не ожидайте получить государственную работу. Это редкость в наше время
mctylr
1

Если вы играете в игру чисел, те, у кого есть степень, получают лучшую работу и платят

Не каждый, кто получил степень, узнал / вспомнил что-нибудь.

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

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

JeffO
источник
1

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

GWLlosa
источник
1

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

Да и нет. Некоторые вещи трудно понять без учителя. Обычно это более математически.

Я верю - и все еще верю после помогал начинать специализацию CS как TA - что любой человек без умственной отсталости может научиться кодировать на уровне PHP / Java / C #. В принципе это не сложно.

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

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

Пол Натан
источник
0

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

Дейв Б.
источник