Чи можна отримати міцну основу програмування, не відвідуючи коледж / університет? [зачинено]


28

По-перше, я вже шукав сайт і читав усі попередні теми "самоучки проти коледжу". Більшість відповідей захищали, що найкращим вибором є навчання в коледжі з двох основних причин:

  1. Вступ до коледжу дає вам папір, що є важливим для роботи на посаді, особливо у важкі економічні часи.

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

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

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

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

Як ви вважаєте, мій фонд був би міцним, або все ще бракує порівняно з тим, хто ходив до коледжу?


2
На цій планеті є, мабуть, принаймні одна людина. До речі, причина 1 все ще має значення. Коли всі інші рівні, "вони" все ще віддають перевагу тому, хто має більш офіційну освіту.
Робота

1
Я можу вам сказати одне, ви не дізнаєтесь, які тверді засоби в університеті.
Пітер Тернер


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

Відповіді:


17

Абсолютно точно. Так, це можливо. Звідки я знаю? Бо я це зробив!

Це важко. Не майте жодних ілюзій з цього приводу. Без репетитора, до якого не можна звертатися, коли справи не працюють, ви повинні самі з'ясувати проблеми. Можна багато чому навчитися, і якщо ви не самомотивовані або недостатньо віддані, ви не зможете це зробити. Для мене мені важко будь-що мотивувати, але мені подобається вчитись та програмувати настільки, що мені не доводиться боротись.

Деякі поради:

  • Вчіться, роблячи! Хочете дізнатися, як працюють двійкові дерева? Зробіть одну.
  • Зробіть, навчаючись. Поставте собі амбітні проекти, де вам доведеться вивчати нові речі, щоб їх виконати. Застереження: Якщо ви ставите перед собою занадто важкі проекти, тоді легко занепокоїтись, але якщо ви ставите перед собою занадто прості проекти, то ви не дуже навчитесь. Ви шукаєте зону з маслом.
  • Почніть з C. Мови на високому рівні роблять вас ледачим. Я б ніколи не пізнав С, якби спершу навчився пітона.
  • Вікіпедія повинна стати вашою першою точкою заклику для будь-яких концепцій, які вам потрібно вивчити.
  • Не має значення, якщо ви ніколи не закінчите жодного проекту, (зрештою, що закінчено). Набагато важливіше, що ви дізнаєтесь нове. Це не означає говорити, що ніколи не слід намагатися закінчити проект. Це може бути величезним мотиваційним поштовхом побачити щось, що ви зробили працюючим. Потрапити в сторону легко, не хвилюйтеся, якщо ви це зробите.

Звідки ви знаєте, коли закінчите? Що ж, ви здобуваєте диплом, тому що ви отримаєте досвід у програмуванні. Коли ви впевнені, що можете написати будь-яке програмне забезпечення, отримавши достатню кількість часу, тоді ви програміст, але це не означає, що вам слід припинити навчання.

Я, до речі, зараз страждаю від точки першого. Знаходитися далеко від будь-яких компаній, що займаються розробкою програмного забезпечення, також не допомагає.


Те ж саме. Я отримав диплом для роботи. Я не навчився занадто багато, в основному все, що я вже знав. Я дізнався, що я справді ненавидів Java більше, ніж я спочатку думав (довелося використовувати це для мого остаточного проекту), і у мене був один великий професор, який навчив нас з його особистого досвіду, де я навчився багато чого.
Ехо каже: Відновіть Моніку

@Echo, чи варто було це?
dan_waterworth

@Dan_waterworth, мені так подобається.
Ехо каже: Відновіть Моніку

Я думаю, що має набагато більше сенсу починати з мови програмування високого рівня, особливо з Python. Звичайно, це залежить від типів завдань, які ви хотіли б вирішити після того, як ви закінчите вивчати основи: якщо ви хочете займатися програмуванням жорстких систем, перейдіть по маршруту C, якщо ви хочете розробляти додатки для кінцевих користувачів, не робіть t не турбуйтеся з C та йдіть на щось на зразок Python.
Zsolt Török

не згоден із частиною С. ви хочете залишитися на високому рівні абстракції. Ви можете стверджувати, що C робить вас ледачим, вивчіть машинний код! якщо вам не потрібна C-продуктивність, добре залишитись на python.
segfault

12

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


1
Ну, я вже маю ступінь міжнародної економіки, тому я цю частину охоплюю.
Даніель

1
У мене є друг, який має науковий ступінь в якомусь <імені>, і він успішний програміст Flash / PHP. Я думаю, все залежить від вас. Я, наприклад, маю ступінь фізики, але я розробник програмного забезпечення. Два роки тому я вирішив отримати ступінь магістра в КС, просто тому, що я цього хотів, а не тому, що мені це потрібно.
Сорантис

5
Моя освіта в коледжі навчила мене підбирати нову комп'ютерну мову за 1-2 дні з онлайн-підручників. Якщо ви вже можете це зробити, то ви засвоїли чудовий урок.
apoorv020

1
Так, але ви повинні бути відданим автодидактом.
дієтабудда

3
Деяким людям не потрібно самостійно вчитися.
dan_waterworth

6

Деякі люди процвітають в академічному середовищі і навіть вимагають від них навчання (як правило, як форми мотивації). Інші (як я) цього не роблять і навіть можуть вважати їх відкладеними.

Я мав довгу кар'єру в галузі програмного забезпечення, не отримуючи ступеня. До кінця тієї кар’єри я був в архітектурній ролі, і старший архітектор мого проекту сказав, що мої знання програмного забезпечення та інформатики (це не одне і те ж!) Легко еквівалентні магістрату з університету Ватерлоо (один з провідних шкіл CS в Канаді).

Звичайно, в моєму базі знань є деякі недоліки. Моїх математичних навичок достатньо лише, щоб не відставати від того, що я сьогодні навчаюсь. Я ненавиджу чисту математику і, як правило, не можу подумати, щоб бути в курсі останніх і найкращих. Це час від часу спричиняє моє розуміння речей (наприклад, Haskell), поки я не набув своїх математичних навичок на достатньому рівні для розуміння понять. Але факт залишається фактом, що інформація доступна без того, щоб я знаходився десь поблизу університетського КЗ або кафедри математики. Все, що я можу сказати, - це те, що іноді моя навчальна послідовність є неоптимальною - іноді мені доводиться відслідковувати та заповнювати якийсь основоположний матеріал, перш ніж продовжувати робити те, що я роблю.


4

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


3

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

У цей день і вік вмотивована людина може вийти в Інтернет, і завдяки таким джерелам, як MIT Open Courseware , зібрати курс незалежного дослідження, який дасть їм досить широку широту знань, і саме ця широта знань, яку я відчуваю, є що робить хорошого розробника. Однак хтось, хто не настільки самомотивований, може виявити, що вони можуть дістатись, вивчаючи єдину мову, і може просто здобути кар’єрний шлях.

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


2

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

Я беру неповні вечірні заняття, щоб отримати ступінь бакалавра з комп'ютерних інформаційних систем, але теорії CS не пропонується в цій програмі. Я здобуваю ступінь в основному, щоб мати "папір", оскільки це більше бізнес, ніж технічний, але це єдиний варіант для вечірніх занять.

Перевірте програмне забезпечення MIT Open Coursware . Це безкоштовно і є чудовим ресурсом для заповнення прогалин теорії CS / Math.


2

Я вважаю, що помилково думати, що коледж / університет за визначенням дасть вам хорошу основу програмування. Вони навчать вас багато теорії та багато різних способів думати про проблему. Це все добре і добре, але перетворення цієї теорії на практику - це інший набір навичок.

Єдиний ефективний спосіб навчити правильному застосуванню теорії - наставництво та заняття. Коротше кажучи, вам потрібно спробувати застосувати теорію якнайкраще, і покластися на когось із більшим досвідом, щоб дати вам конструктивну критику або направити вас у правильному напрямку. Ваш наставник не збирається робити свою роботу за вас, але допоможе вам краще робити свою роботу.

Я б не був розробником, який я сьогодні, без допомоги хороших наставників на початку своєї кар'єри. Робота над проектами з відкритим кодом - це хороший спосіб знайти деяких наставників, які будуть готові витратити деякий час на розкриття деталей. Принаймні, це був мій досвід. У моєї першої роботи з програмування я також мав наставника, який допоміг мені зрозуміти, як легко розробляти розширені програми.

То чи є користь для коледжу / університету? Так. Однак вони не обладнані, щоб допомогти вам перетворити теорію на практику, якщо ви не переймете її на себе. Якщо ви почнете намагатися застосовувати те, чого ви навчаєте, в університеті, ви можете почати задавати правильні типи питань, які допоможуть вам по-справжньому зрозуміти теорію на більш практичному рівні. Якщо ви зачекаєте, поки ви не працюєте, ви лише затримали цей важливий процес навчання.


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

2

Люди схильні переоцінювати важливість теоретичної основи, математики та алгоритмічних знань ІМО. Причини, через які програмісти підштовхують і інтерв'юють ці речі, полягають у тому, що вони самі «математики».

Тепер, звичайно, є деякі програми, де корисно знати, що таке "державна машина", або як використовувати пошук "Буер-Мур". Є навіть деякі проблеми, коли може бути корисним знати реальну математику, наприклад, якщо ви працюєте з фінансовими розрахунками або фізичними симуляціями.

Однак річ у 90% програмування взагалі не є жодним із них, не багато хто з нас займається жорсткими алгоритмічними розробками. Більшість речей, які вам потрібно навчитися, ви зможете навчитися під час проходження. Не потрібно будувати величезну споруду, а скоріше цікавити, як вирішувати різні проблеми.

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

Успіх у програмуванні - це не фундамент, а постійне розширення набору інструментів, а навчання, яке ви отримуєте, набагато вартіше, коли ви можете поставити його в контекст проблеми, яка справді потребує вирішення, а не просто чистого теоретичного дослідження.

Вам не потрібно знати все докладно, саме для цього є Google, StackOverflow та Wikipedia :) Однак ви знаєте, що існують різні інструменти та методи, щоб зрозуміти, що вони корисні та застосовні у вашій ситуації. Вам також потрібно набути досвіду знати, який інструмент найкраще застосувати. Фонди, як правило, псуються для початківців, оскільки вони не мають досвіду, чому певний інструмент був би корисним. Якщо у вас є великий досвід, деякі речі просто "клацнуть" на місці.

Я хотів би порекомендувати деякі речі:

  • Якщо у вас цього немає, починайте вивчати шаблони дизайну, це найпрактичніший і універсальний інструмент у вашій панелі інструментів.

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

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

  • Робіть складні та експериментальні проекти хобі, які підштовхують вашу майстерність вперед та змушують вас вивчати речі в контексті.


Ваша оцінка приблизно 90% програмування, що не має сильного теоретичного змісту, напевно, вірно. На жаль, більшість програмістів періодично стикаються з іншими 10%, тому це потрібно.
Орлінг

2

Одне, що коледж допоможе вам у тому, що у вас можуть виникнути труднощі самостійно, - це вміння читати та розуміти наукові науково-дослідні роботи, особливо математику. Однак навіть цього можна досягти самостійно, але це допомагає інструкторам та одноліткам керувати вами в процесі навчання, щоб отримати знання швидше та простіше.

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

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

Що стосується можливості застосувати знання, то це дуже індивідуалістично. Люди, які вступають до коледжу, можуть не в змозі застосувати принципи, а також хтось, хто не відвідує коледж. Є стара приказка: "Не важливо, що входить, а що виходить".

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


2

Я не думаю, що багато людей отримають настільки хороший «фундамент» через самонавчання, як і від вступу до університету, принаймні, не в ті ж часові рамки. Два роки читати випадкові книги та грати з проблемами з іграшками у вільний час не вийдуть на такий же рівень, як два роки цілеспрямованого навчання з організованою навчальною програмою. Чи вистачить вам цього, щоб обійтись? Цілком можливо. Але якщо ви дійсно хочете "настільки хорошого фундаменту, як хтось там", це займе більше двох років.

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


Я зробив. Насправді основна частина мого дослідження була значно менше ніж за 2 роки (приблизно 6 місяців), але я регулярно роблю 60-70 годинних тижнів.
dan_waterworth

Погодьтеся з TMN. У ГЕНЕРАЛІ ваша формальна освіта не має уявлення, де ви закінчитесь, вона має певну кількість ЛИШНОСТІ (тобто, як правило, охоплює багато території). Мій приклад з попереднього допису: я ніколи не думав, що буду використовувати Конструктор компіляторів, який був частиною мого курсу. Виявляється, через 20 років я був одним з найважливіших курсів, які я коли-небудь робив. Тепер біда в тому, що для тих, хто не має цих знань на потилиці - ви не знаєте, що не знаєте. І цей рівень незнання робить вас менш ефективною в довгостроковій перспективі.
quick_now

1

Я професійно розвивався протягом десятиліття без ступеня. Коли я опитую людей, мене цікавить їх здатність вирішувати проблеми та кодувати. Сказавши це, є деякі компанії / ролі, на які я не маю права лише тому, що вони наполягають на науковій освіті. Деякі консультанти мають таку політику, оскільки вони можуть продати вас за більшу кількість клієнтів.


Це здебільшого проблема, коли найм здійснюється через відділ кадрів (HR). Найкращий спосіб впоратися з цим - це побудувати ділову соціальну мережу ІТ-менеджерів, які знають вас або принаймні з вас, і дозвольте спробувати посилити процес «фільтрації» HR. Іншими словами, людям без наукових ступенів, як правило , потрібно краще продавати свої навички та послуги, а не подавати заявки на рекламні посади. Більшість компетентних ІТ-менеджерів наймуть, грунтуючись на надійному досвіді та репутації (тобто рефералі від того, кому вони довіряють). Не сподівайтесь отримати власну роботу. Сьогодні це рідко
mctylr

1

Якщо ви граєте в гру з цифрами, ті, хто має ступінь, отримують кращу роботу та оплату праці.

Далеко не кожен, хто здобув науковий ступінь, нічого не вивчив / запам'ятав.

Більшість людей не піде на час, щоб вивчити багато теорії / передумов / основ, як це було б, якби вони пішли до коледжу. Можливо, ваші батьки підтримали б вас через 4 роки самостійного навчання; всі інші повинні влаштуватися на роботу.

Недолік може бути, якщо ви отримали ступінь CS, а не мали певного рівня, ви можете вважати, що маєте низькі сили. Давайте зіткнемося з цим, якщо ви цього не отримали за 4 роки годування ложкою, ви не зрозумієте це на стороні, тримаючи роботу на повний робочий день. Винятки, звичайно.


1

Якщо ви дійсно хочете заробляти на життя в галузі розробки програмного забезпечення без ступеня, я пропоную вам звернутися до місцевого університету. Отримайте від них перелік курсів, які потрібні, якби ви отримали ступінь. Переважна більшість університетів матиме таку інформацію, доступну на запит, а також конспект / навчальний план / список книг для кожного з курсів. Перейдіть до цього списку. Знайдіть книги, про які йдеться. Подивіться, які теми вони висвітлюють. Якщо ви бачите щось, що ви не розумієте, придбайте / огляньте книгу та вивчіть її. В кінці цього процесу вам слід принаймні знати, що ви знаєте, а що не знаєте, і бути досить конкурентоспроможним зі своїм середнім ступенем коледжу (який, можливо, спав / обманював якийсь із цих курсів).


1

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

Так і ні. Деякі речі жорстоко важко зрозуміти без вчителя. Зазвичай це більш математичні речі.

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

З цього приводу це також не збірка та інші технологічні сфери, які ви згадуєте. Це деталі впровадження, які добре знати.

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.