Як я повністю самостійно вивчаю інформатику? [зачинено]


46

Будучи повністю програмовим самоучком, мені хотілося б, якби я міг краще себе навчити самостійно вивчати курс інформатики, який викладав до типового класу CS.

Знайти різні ресурси в Інтернеті було просто, є звичайно посуд з відкритим курсом MIT , а також є курси Coursera зі Стенфорда та інших університетів. Є численні інші відкриті ресурси, розкидані по Інтернету, і кілька хороших книг, які неодноразово рекомендуються.

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

Проблема з Вікіпедією полягає в тому, що вона не говорить вам, що є суттєвим, але наполягає на тому, щоб бути повною базою.

Відкритий курс MIT для інформатики та електроенергетики. має величезний перелік курсів, який також не розповідає, які курси є важливими, а які необов'язкові відповідно до інтересів / вимог людини. Я не знайшов згадки про порядок, в якому слід вивчати різні предмети.

Що я хотів би - створити список, який я можу дотримуватися, як цей манекен

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

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

Було б дуже корисно, навіть якби хтось вказав на основні курси з курсу курсів MIT (+ основні предмети, які відсутні у MIT OCW) у рекомендованому порядку навчання.

Я перелічу повідомлення, які я вже пройшов (і я не отримав того, що шукав там)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - головна відповідь говорить, що вивчати cse не варто

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - вказує на MIT OCW

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming


Повністю? Всі цікаві теоретичні речі теж?

Так, мені справді подобаються цікаві теоретичні речі, я думаю, це збільшить моє розуміння теми (хоча це питання дискусій у моєму колі). Крім того, я відчуваю себе в спокої, коли мої друзі з CS дискутують про CS-речі або я їх дратую, задаючи занадто багато питань.
Optimus

2
Зауважте, що в навчальній програмі є деякі види "островів", де речі звисають разом. Наприклад, рідко потрібне обчислення лямбда в теорії графів. Також вважайте, що може бути непогано мати наставників навколо - ви живете поруч із відповідним навчальним закладом?

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

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

Відповіді:


24

Я бачив деякі матеріали курсу з MIT, і це було шокуюче погано . У них були навчальні матеріали, які вимагали VC5, пучки неявних глобальних змінних, що передають кольори як "синій" замість 32-бітного ARGB, не кажучи вже про 4x [0,1]. Я б не довіряв навчальній програмі чи коду тільки тому, що він походить від університету з великим іменем.

Мій диплом CS (від університету, який найкращий 10 у Великобританії за CS) складався з:

Перший рік:

  1. OOP - супер основи
  2. Комп'ютерні системи - такі речі, як двійкові представлення цілих чисел.
  3. Основна теорія реляційних баз даних
  4. Математика для CS - проста 2D та 3D геометрія.
  5. Трохи HTML / JS - повні речі для початківців
  6. Не менш крихітний PHP.
  7. Функціональне програмування

Другий рік:

  1. Юридичні проблеми в галузі таких обчислень, як закони, що обертаються навколо захисту даних користувачів
  2. Мови програмування - висвітлено ієрархію Хомського та лексику
  3. Операційні системи, мережі та Інтернет - в основному такі речі, як віртуальна пам'ять та пейджинги, стек IP
  4. 2D-комп’ютерна графіка - в основному лише доводить теореми основної математики
  5. AI - основні описи нейронних мереж, байєсівські системи вірувань тощо.
  6. Аналіз вимог - короткий огляд UML, функціональних / нефункціональних вимог.
  7. Командний проект

Третій рік:

  1. Аналіз алгоритмів - теорія складності, в основному
  2. Впровадження мов програмування - методики розбору LL / LR, CFG та подібні речі.
  3. Управління проектами програмного забезпечення - погляд на моделі Waterfall / Agile
  4. Міжнародна обчислювальна техніка - Unicode та інша локалізація
  5. Просунутий AI - не знаю, чесно, і я скоро отримаю іспит на нього
  6. 3D-комп’ютерна графіка - це, здебільшого, лише доведення теорем для матриць обертання тощо
  7. Системи на основі агентів - переважно про асинхронні агенти, що спілкуються, приймають групові рішення тощо.
  8. Мікропроцесорні програми - цифрова обробка сигналів
  9. Роботика - охоплює такі речі, як комп’ютерний зір та прийняття рішень на високому рівні

Як ви помітите, майже все - це «основи» чогось і майже нічого не висвітлюється на корисну глибину.

Речі, які насправді варто було зробити, важливі:

  1. OOP-, а потім ще деякі, а потім ще деякі
  2. Функціональне програмування - також дещо більше. Спробуйте вибрати мову на зразок C ++ або C #, де вам не доведеться заново вивчати синтаксис та інструменти тощо, щоб охопити обидва стилі.
  3. Про частину ОС - віртуальну пам’ять добре знати, як і в режимі ядра проти користувальницького режиму. Пропустити сегментацію та стек IP.
  4. Аналіз вимог - повинен бути корисним для будь-якого проекту
  5. Аналіз алгоритму - знаючи, що таке алгоритмічна складність, як зменшити її, і яка складність є звичайними операціями.
  6. Моделі управління проектами програмного забезпечення - багато магазинів Agile, а багато старих досі використовують моделі у стилі Waterfall.
  7. Міжнародні обчислення - Unicode є важливим

Речі, які варто було зробити, необов'язково:

  1. Мови програмування - ієрархія Хомського, інструменти лексингу та розбору. Пропустіть теорію за парсерами LL або LR - LR-аналізатор може прийняти практично будь-яку реалістичну однозначну CFG, і коли вона не може, документація вашого генератора аналізатора розповість вам про це.
  2. 3D графіка. Я не маю на увазі "Доведіть, що це формула матриці обертання", витрачає час, я маю на увазі фактичний матеріал "Це вершина шейдера" або GPGPU. Це весело, цікаво та різне.
  3. Деякі з матеріалів AI є цікавими потенційними полями та конвеєрними маршрутами.

Те, що важливо, але я все одно не висвітлював це:

  1. Конкурс - необхідно знати, принаймні основи, для когось у 2012 році.

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


3
@ ThorbjørnRavnAndersen: Теорія - це інструмент для написання коду, не більше того. Теорія нічого не варта, якщо ви не можете використовувати її для вдосконалення коду.
DeadMG

3
@Optimus: Переважна більшість теорії не може допомогти вам зробити кращий код.
DeadMG

3
Теорія - це основа для того, щоб знати, який код можна записати, а що ні.

17
У цій публікації є кілька дуже хороших порад, але ви занадто догматичні щодо того, щоб оголосити деякі поля марною тратою часу. Сьогодні існує велика різноманітність в програмуванні завдань, і те, що трата часу на одну роботу, може бути важливою для іншої роботи. Замість того, щоб просто відхиляти щось, як марну трату часу, було б корисно описати види розвитку, в якій ви брали участь.
Чарльз Е. Грант

4
Я робив багато інтерв'ю за останні кілька років, і, здається, найбільший розрив в коледжах в цих днях полягає у викладанні структур даних та алгоритмів. Другий найбільший розрив - у розумінні того, як інструменти реалізуються всередині країни. На мою думку, заняття із використання певного інструменту - це марна трата часу. Немає сенсу знати синтаксис C ++, якщо ви не можете пояснити, коли використовувати хеш-таблицю та коли використовувати дерево.
Gort the Robot

5

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


Я розглядаю це, але виявив їх вимоги досить стислими. і де довгий перелік курсів?
Optimus

1
web.mit.edu/catalog/degre.engin.ch6.html Це великий список. CS позначається як 6.3
кам'яний метал

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

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

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

5

Спробуйте рекомендації з інформатики 2001 р. З ACM / IEEE, пов’язані тут: http://www.acm.org/education/curricula-recommendations

разом із оновленнями CS 2008 року.

Сторінка 17 звіту за 2001 р. Має зручну діаграму, яка підкреслює всі "основні" знання та все ще перелічує факультативи.

Бакалаврська програма не встигне охопити навіть курси, які вважаються основними цими рекомендаціями, тому вони об'єднають деякі категорії разом і дозволять студентам вибирати серед них (наприклад, Операційні системи, Мови програмування та Інженерія програмного забезпечення потрапляють Програмне забезпечення та студенти вибирають доріжку).

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


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

Для ледачих цей список містить: Дискретні структури (DS) Основи програмування (PF) Алгоритми та складність (AL) Архітектура та організація (AR) Операційні системи (OS) Net-Centric Computing (NC) Мови програмування (PL) Human-Computer Взаємодія (HC) Графіка та візуальні обчислення (GV) Інтелектуальні системи (IS) Управління інформацією (IM) Соціальні та професійні питання (SP) Інженерія програмного забезпечення (SE) Обчислювальні науки та числові методи (CN).
Дамієн Рош

-4

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

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

І, звичайно, ти ознайомишся з git, що ще краще.


5
-1: Незважаючи на те, що він цінний, це не піддає йому теоретичних аспектів інформатики, які він повинен знати.
Кен Блум

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