Во-первых, я уже обыскал сайт и прочитал все предыдущие темы «самоучка против колледжа». Большинство ответов защищали, что поступление в колледж было лучшим выбором по двум основным причинам:
Поступление в колледж дает вам документ, который необходим для посадки на работу, особенно в трудные экономические времена.
Поступление в колледж дает вам прочную базу программирования, обучая вас принципам, которые будут важны независимо от того, какой язык / путь вы выберете.
Вот мой вопрос: меня вообще не волнует причина 1, потому что у меня уже есть своя собственная компания (я создаю сайты / занимаюсь аффилированным маркетингом) и стабильное финансовое положение, поэтому я почти уверен, что мне не нужно будет оглядываться для работы.
Я беспокоюсь о причине 2 хотя. То есть я хочу быть уверенным, что у меня будет такая же прочная основа программирования, как и у любого другого, и мне интересно, возможно ли это с самообучением.
Предположим, что я уделяю время изучению самых основ, таких как дискретная математика, разработка алгоритмов, логика программирования, компьютерная архитектура, сборка, программирование на С, базы данных и структуры данных - в основном с использованием книг, онлайн-ресурсов и большого количества кодирования. Скажем, я провожу 1-2 года, изучая эти основы.
Как вы думаете, моя основа была бы прочной, или все еще не хватает по сравнению с кем-то, кто учился в колледже?
Ответы:
Абсолютно точно. Да, это возможно. Откуда мне знать? Потому что я сделал это!
Это трудно. Не имейте никаких иллюзий по этому поводу. Без наставника, к которому можно обратиться, когда что-то не работает, вы сами должны решить проблемы. Есть чему поучиться, и если вы не будете мотивированы или недостаточно преданны, вы не сможете это сделать. Мне трудно быть мотивированным на что-либо, но мне так нравится учиться и программировать, что мне не приходится бороться с самим собой.
Несколько советов:
Как вы знаете, когда вы закончите? Ну, причина, по которой вы получаете степень, заключается в том, что вы станете опытным в программировании. Если вы уверены, что можете написать любое программное обеспечение за разумное количество времени, тогда вы программист, но это не значит, что вы должны перестать учиться.
Кстати, я сейчас страдаю от первого пункта. Быть далеко от компаний-разработчиков программного обеспечения тоже не помогает.
источник
Я думаю, самое важное назначение колледжа / университета - научить вас, как учить вещи самостоятельно. Неважно, будь то программирование, физика, химия, математика и т. Д. Университет научил меня, как учиться без посторонней помощи.
источник
Некоторые люди процветают в академической среде и даже требуют, чтобы они учились (обычно как форма мотивации). Другие (как я) этого не делают и могут даже расстраивать.
У меня была долгая карьера в области программного обеспечения без получения степени. К концу этой карьеры я занимал архитектурную должность, и старший архитектор моего проекта сказал, что мои знания в области программного обеспечения и компьютерных наук (это не одно и то же!) Легко эквивалентны тому, что я получил степень магистра в Университете Ватерлоо (один из них). из лучших канадских школ CS).
Конечно, в моем пуле знаний есть некоторые недостатки. Моих математических навыков достаточно, чтобы не отставать от того, что я изучаю сегодня. Я ненавижу чистую математику и, как правило, не могу быть в курсе, чтобы быть в курсе последних и самых лучших. Это время от времени мешало моему пониманию вещей (как, скажем, Haskell), пока я не поднял свои математические навыки до уровня, достаточного для понимания концепций. Но факт остается фактом: информация доступна, и я не нахожусь рядом с университетским факультетом или математикой. Все, что я могу действительно сказать, - это то, что иногда моя последовательность обучения является неоптимальной - мне иногда приходится возвращаться назад и заполнять некоторый основополагающий материал, прежде чем продолжить то, что я делаю.
источник
Я думаю, что ваша основа будет прочной, если у вас есть дисциплина, чтобы сесть и научить себя всему этому и работать на примерах. У меня есть степень, но это в области инженерии, а не компьютерных наук. Я работал с большим количеством отличных профессиональных программистов, которые научили себя всему, что им нужно знать. Самостоятельное обучение - это то, что вам нужно в любом случае, чтобы стать хорошим программистом, поскольку всегда появляются новые технологии, которые вы не изучали в школе.
источник
Как и в большинстве вещей в жизни, мой ответ твердый, это зависит от человека . Я твердо верю, что вам не нужна степень бакалавра, чтобы быть программистом; однако, исходя из моего опыта, колледж имеет тенденцию выставлять людей на проблемы и идеи, с которыми они могут не столкнуться самостоятельно в ходе независимого обучения.
В наше время мотивированный человек может выходить в интернет, и благодаря таким источникам, как MIT Open Courseware , составить курс независимого обучения, который даст им достаточно широкий круг знаний, и именно эта широта знаний, на мой взгляд, является что делает хорошего разработчика Тем не менее, тот, кто не так мотивирован, может найти, что он может получить, изучая один язык, и может быть в состоянии сделать это только по профессии.
Как я уже говорил ранее, я чувствую, что именно широта знаний делает хорошего разработчика, поскольку это означает, что они столкнулись с большим количеством проблем и развили свои навыки решения проблем. Вам не нужно идти в школу, чтобы получить эту широту знаний, но школа определенно помогает в этом отношении, так как программа хорошей степени заставит вас развивать широту знаний.
источник
Как программист, я постоянно играю с не относящимися к работе API и языками (Ruby on Rails, Python, Node.js и т. Д.). Я делаю это больше для интереса, чем для работы. У меня есть 2 диплома, но даже после 10 лет программирования на Java / JEE я обнаружил, что действительно скучаю по теории степени бакалавра (Big O, Algorithms, Descrete Math и т. Д.).
Я посещаю вечерние уроки неполный рабочий день, чтобы получить степень бакалавра в области компьютерных информационных систем, но в этой программе не так много теории о КС. Я получаю свою степень в основном за «бумагой», потому что это больше бизнес, чем технический, но это мой единственный вариант для вечерних занятий.
Проверьте MIT Open Coursware . Это бесплатно и является отличным ресурсом для заполнения пробелов в теории CS / Math.
источник
Я считаю, что ошибочно думать, что колледж / университет по определению даст вам хорошую основу для программирования. Они научат вас большому количеству теории и различным способам решения проблемы. Это все хорошо, но превращение этой теории в практику - это другой набор навыков.
Единственный эффективный способ научить правильному применению теории - наставничество и выполнение. Короче говоря, вам нужно попытаться применить теорию как можно лучше, и полагаться на кого-то с большим опытом, чтобы дать вам конструктивную критику или направить вас в правильном направлении. Ваш наставник не собирается выполнять вашу работу за вас, но поможет вам лучше выполнять свою работу.
Я не был бы разработчиком, которым я являюсь сегодня без помощи некоторых хороших наставников в начале моей карьеры. Работа над проектами с открытым исходным кодом - это хороший способ найти наставников, которые захотят потратить некоторое время на изучение деталей. По крайней мере, это был мой опыт. У меня также был наставник в моей первой работе по программированию, который помог мне понять, как разрабатывать легко расширяемые приложения.
Так есть ли польза для колледжа / университета? Да. Тем не менее, они не могут помочь вам воплотить теорию в жизнь, если вы не возьмете ее на себя. Если вы начнете пытаться применять то, что вы изучаете, в университете, вы можете начать задавать правильные типы вопросов, которые помогут вам по-настоящему понять теорию на более практическом уровне. Если вы ждете, пока не приступите к работе, вы просто отложили этот важный процесс обучения.
источник
Люди склонны переоценивать важность теоретического обоснования, математики и алгоритмических знаний ИМО. Причины, по которым программисты выдвигают и берут интервью у этих вещей, заключаются в том, что они сами являются «любителями математики»
Сейчас, конечно, есть некоторые программы, в которых полезно знать, что такое «конечный автомат» или как использовать поиск «Booyer-Moore». Есть даже некоторые проблемы, когда полезно знать некоторую реальную математику, например, если вы работаете с финансовыми расчетами или физическими симуляциями.
Однако дело в том, что 90% программирования, как правило, не является чем-то из этого, не многие из нас занимаются жесткой алгоритмической разработкой. Большинство вещей, которые вам нужно выучить, вы можете узнать по ходу дела. Не нужно строить огромное здание фундамента, а нужно постоянно интересоваться, как решать различные проблемы.
Я на 100% самоучка, и у меня никогда не было проблем с алгоритмами. Я работал над финансовыми системами, и даже это было выполнимо без каких-либо более глубоких теоретических математических навыков.
Удача в программировании - это не основы, а постоянное расширение вашего инструментария, а то, что вы получаете, приобретает гораздо большую ценность, когда вы можете поместить его в контекст проблемы, которая действительно требует решения, а не просто теоретического исследования.
Вам не нужно знать все подробно, вот для чего нужны Google, StackOverflow и Wikipedia :) Однако вы должны знать о существовании различных инструментов и методов, чтобы понять, что они пригодны и применимы к вашей ситуации. Вы также должны получить опыт, зная, какой инструмент лучше всего применять. Фонды, как правило, избалованы новичками, поскольку у них нет опыта, почему тот или иной инструмент будет полезен. Если у вас большой опыт, некоторые вещи просто «защелкнутся».
Некоторые вещи, которые я бы порекомендовал, хотя:
Если нет, начните изучать шаблоны проектирования, это самый практичный и универсальный инструмент в вашем наборе инструментов.
Прочитайте некоторые общие обзоры различных алгоритмов, если вам интересно, просто чтобы вы знали, что там, когда вам может понадобиться
Узнайте о распараллеливании и многопоточности (и некотором функциональном программировании). Возможность поддерживать несколько ядер сегодня важна и скоро станет недостижимой, поэтому это важнейшее знание.
Выполняйте сложные и экспериментальные хобби-проекты, которые продвигают ваши навыки вперед и заставляют вас изучать вещи в контексте.
источник
Одна вещь, с которой колледж может помочь вам в том, что вы можете столкнуться с трудностями самостоятельно, - это способность читать и понимать научные исследования, особенно математику. Тем не менее, даже это может быть достигнуто самостоятельно, но это помогает иметь инструкторов и сверстников, направляющих вас в процессе обучения, чтобы получить знания быстрее и проще.
Как общий программист информационных систем, вы вряд ли будете читать научные статьи, чтобы преуспеть. Современные информационные системы довольно просты, и большинство интенсивных алгоритмов, таких как поиск, сортировка и индексация, выполняются системами баз данных. Пока вы понимаете концепции, у вас не должно быть никаких трудностей.
Если вы решили заняться более сложными областями программирования, такими как разработка микрооперационных систем, разработка компиляторов, искусственный интеллект и т. Д., То способность читать и понимать исследовательские работы может иметь решающее значение для быстрого и эффективного внедрения систем.
Что касается возможности применять знания, это очень индивидуально. Люди, поступающие в колледж, могут не иметь возможности применять эти принципы, а также те, кто не поступает в колледж. Есть старая поговорка, которая гласит: «Не важно, что входит, а что выходит».
Подводя итог, знания, которые вы получаете, поступая в колледж, могут помочь вам лучше понять и общаться с академическим миром. Тем не менее, знания могут быть достигнуты без поступления в колледж. Наличие ученой степени облегчает убеждение других в том, что вы знаете, что делаете, и можете понять научные исследовательские работы.
источник
Я не думаю, что многие люди получат такую же «основу» через самообучение, как если бы они поступили в университет, по крайней мере, не в те же сроки. Два года чтения случайных книг и игры с игрушечными проблемами в свободное время не приведут вас к тому же уровню, что и два года целенаправленного обучения с организованной учебной программой. Достаточно ли вам этого, чтобы обойтись? Вполне возможно. Но если вы действительно хотите «такой же хороший фундамент, как и любой другой», тогда это займет больше двух лет.
Чтобы не обескураживать вас, это определенно не будет пустой тратой времени. Я просто не очень уверен, что многие люди могут собрать два года обучения в колледже за два года, ведя собственный бизнес и имея какую-то личную / семейную жизнь.
источник
Я профессионально развивался в течение десятилетия без степени. Когда я беру интервью у людей, меня интересует их способность решать проблемы и кодировать. Сказав это, есть некоторые компании / роли, на которые я не отвечаю только потому, что они настаивают на степени. У некоторых консалтинговых компаний есть такая политика, потому что они могут продать вам больше для клиентов
источник
Если вы играете в игру чисел, те, у кого есть степень, получают лучшую работу и платят
Не каждый, кто получил степень, узнал / вспомнил что-нибудь.
Большинство людей не нашли бы время, чтобы выучить большую часть теории / фона / основ, как если бы они пошли в колледж. Возможно, ваши родители поддержат вас через 4 года самостоятельной работы; все остальные должны устроиться на работу.
Недостатком будет то, что если у вас есть степень CS, а у вас нет определенного уровня, вас могут рассматривать как обладающего низкой мощностью. Посмотрим правде в глаза, если вы не получили его за 4 года кормления с ложечки, вы не разберетесь в этом, удерживая и работая полный рабочий день. Исключения конечно.
источник
Если вы действительно хотите зарабатывать на жизнь в области разработки программного обеспечения без степени, я предлагаю вам обратиться в местный университет. Получите от них список курсов, которые необходимы для получения степени. Подавляющее большинство университетов будет иметь эту информацию по запросу, а также краткий обзор / учебный план / список книг для каждого из курсов. Спуститесь по этому списку. Посмотрите книги, о которых идет речь. Посмотрите, какие темы они охватывают. Если вы видите что-то покрытое, чего вы не понимаете, купите / проверьте книгу и изучите ее. В конце этого процесса вы должны, по крайней мере, знать, что вы знаете, а что нет, и быть достаточно конкурентоспособными со своим средним выпускником колледжа (который, возможно, спал / обманывал на некоторых из этих курсов в любом случае).
источник
Да и нет. Некоторые вещи трудно понять без учителя. Обычно это более математически.
Я верю - и все еще верю после помогал начинать специализацию CS как TA - что любой человек без умственной отсталости может научиться кодировать на уровне PHP / Java / C #. В принципе это не сложно.
Также, в этом отношении, это сборка и другие технологические области, которые вы упоминаете. Это детали реализации, которые полезно знать.
Структуры данных, алгоритмы, цифровой дизайн, компьютерная архитектура и алгебра баз данных довольно сложны, если обучение глубокое.
источник
Я не сомневаюсь, что целеустремленный и целеустремленный человек мог бы получить прочную основу, но если вы решите не получить ученую степень, вы упустите множество аспектов, которые улучшат ваше развитие. Одна из этих вещей и, возможно, самая важная - это общение с единомышленниками, с которыми вы можете обменяться идеями и концепциями. Также очень приятно иметь возможность выслушать опыт инструкторов, у которых есть ценные мудрости, которые они могут передать, а иногда могут выправить неправильно понятые концепции в одном или двух предложениях. Приятно иметь возможность уточнить концепции во время первоначального раскрытия, а не впитывать в себя неправильные идеи и разбирать их позже.
источник