Предмети CS, які повинен знати студент [закрито]


34

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

Мені вдалося пройти свій коледж і також інтернувались у компанії, де я робив проект, і, на щастя, вони не турбувались про мої оцінки, оскільки вони були вище середнього.

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

Які ваші пропозиції? Як і для одного, алгоритми - це одна тема.


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

2
Я ненавиджу працювати з вашим типом ... jk (роду). Якби я був ти, я б спершу знадобився час, щоб переглянути речі, які ти повинен знати зі школи - таким чином, ти б не виглядав як ідіот під час свого наступного інтерв'ю. Після цього я б дізнався розумну кількість структур даних та алгоритмів, які виглядають так, як їх можна використовувати в реальному світі. Вам потрібно розібратися, де ти хочеш опинитися. Якщо розробник ігор, то вам, мабуть, потрібна лінійна алгебра, 3d графіка, обчислювальна геометрія. Загалом потрібно переглянути мінімум даних str, alg, database, os та компіляторів і продовжувати вчитися.
Робота

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

1
Нижче ви отримуєте безліч чудових відповідей на CS, але я думаю, обмеживши своє запитання таким чином, що вам не вистачає декількох найкорисніших речей, які я бачив за 15 років від мого отримання BSCS, що розрізнило людей які добре поступили в галузі: навички спілкування в невеликих групах та навички роботи в команді. Нерозумно, як здається, перейдіть до відділу мови / мови / театру і прийміть клас на кшталт "комунікації в невеликих групах" або "керівництво / управління командою / групою". Навіть якщо ви не плануєте займатися управлінням, навички, які ви отримаєте там, зроблять вас кращим інженером та членом команди.
таксі

Відповіді:


41

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

РЕАЛЬНА конструкція компілятора, де ви пишете власний сканер символів і аналізатор з нуля.

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

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

(І перш ніж хтось підскочить і скаже "добре, ви могли б використовувати lex і yacc ...", відповідь, можливо, - це багато що залежить від системи. У деяких випадках мови програмування були не C (наприклад, PL / M і Ада), в деяких випадках для платформи не було доступних Lex або Yacc. Знання основ означає, що рішення є під рукою, а не розгинати руки, намагаючись розібратися, як зігнути якийсь інструмент для вирішення проблеми.)


6
+1 Компілятори були одним з моїх улюблених курсів в університеті і завжди корисні. Я рідко використовував lex / yacc / bison, основи набагато конкретніше.
Увімкнення

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

Ви можете (і ТАКІ знаєте, як це зробити) написати генератор коду простою мовою C, або якоюсь іншою мовою, що не є OO. Потім урок написання дуже великих фрагментів процесуального кодексу та розбиття парсера / сканера / генерації коду на розумні та розумні фази.
quick_now

+1 Компілятори містять так багато моделей та принципів, що дозволять вам побачити дизайн та код у зовсім іншому світлі після того, як це зробили.
Ендрю Т Фіннелл

2
"Це те, що я думав, що ніколи не буду використовувати більше". Якби у мене був долар кожен раз, я говорив це собі, коли був молодшим ....
Нік Спріц'єр

37
  1. Структури даних / Алгоритми, особливо графіки. Кількість ситуацій у реальному світі, в яких мені вдалося використовувати алгоритми, пов'язані з графіком, мене здивувало. Зосередьтеся на знанні характеристик, коли структура даних або алгоритм є відповідними. Можливість бачити проблему і знати, наприклад, алгоритм динамічного програмування / жадібного, дуже важлива і може заощадити багато часу.

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

  3. Концепції ОС. Управління пам'яттю, планувальники тощо. Кожен розробник дійсно повинен добре розуміти операційні системи, враховуючи, що код, який ви пишете, постійно взаємодіє з ним.

  4. NetSec. Я стикався з дуже небагато розробників, які чітко розуміють основні проблеми безпеки при розробці (переповнення буфера, xss, SQLI тощо). Це дійсно необхідно, якщо ви хочете досягти успіху в галузі. Чудово, якщо ви можете написати наступну велику річ, але у вас не буде багато користувачів, якщо ви не захистите їх дані.

  5. Програмування парадигм. Знати характеристики та відмінності програм OO / Функціональне / Процедурне програмування. Один з найкращих занять з низької кваліфікації, який я коли-небудь мав, - це написання простих 20 перекладачів інструкцій для fortan, sche, prolog тощо на самих мовах. Саме експозиція справді може допомогти вам зрозуміти основні концепції розробки програмного забезпечення.


1
+1 Цілий список необхідний, особливо (4), як і раніше, є таким важливим у сучасній епосі розповсюдження.
Увімкнення

1
+1 про структури даних / графіки даних. Кількість програмістів, яких я знаю, які не знають, як правильно користуватися Hashtable або чому пов'язаний список замість простого масиву в деяких випадках мене щодня дивує.
Мачадо

+1 для програмування парадигм. Добре розуміння контрастів між різними типами мов дуже допомагає.
apoorv020

19

Виконання вимог до випускних не обов'язково є достатнім для того, щоб бути кращим вченим-комп’ютером. Для типової навчальної програми коледжу, ось десять найкращих речей, які ви повинні обов’язково вивчити:

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

  2. Як написати доказ - Усі спеціалісти з інформатики повинні знати, як написати доказ. І дискретна математика, хоча частина добре збалансованого сніданку, не рахується. [Індукція - це лише одна методика доказування, і ви можете її дістати, не знаючи багато про докази.] Курс з алгебри або реального аналізу необхідний, щоб справді писати докази. А під алгеброю я маю на увазі теорію групи або абстрактну алгебру, а не курс, який ви пройшли в середній школі. Для повної вигоди візьміть алгебру та реальний аналіз в той же термін.

    Чому письмове підтвердження є важливим? Тому що це програмування! Подумайте, коли ви вперше навчилися програмувати: якщо для завдання потрібна відповідьifі цикл, ви, можливо, не мали б інтуїції щодо того, де їх помістити по відношенню один до одного. Але тепер те саме завдання здавалося б цілком природним. Написання доказу дуже схоже. Існує набір хитрощів, яких ви дізнаєтесь, і як тільки ви їх засвоїте, речі виглядають зовсім інакше.

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

  4. Ймовірність та статистика - Є деякі речі, які ви підберете лише належним чином, пройшовши курс. Разом з основними вимогами до CS (які повинні давати дискретну математику, єдину змінну та множинне змінне обчислення та лінійну алгебру) та алгебру та / або реальний аналіз, підбір статистики, ймовірно, дасть вам незначну роль в математиці. Статистика навчання може допомогти вам працювати з іншими вченими над їхніми проектами.

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

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

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

  8. P і NP - Гаразд, цей вже на вашому критичному шляху, але все одно зверніть увагу. Ви хочете бути впевнені, що можете виправити когось, коли він неправильно називає НП "не поліномом". Начебто!

  9. Теми з курсу, якого ви точно ненавидите - Це може бути курс CS, який ви вважаєте занадто низьким, занадто теоретичним, або не-CS курс, який ви вважаєте занадто заперечним, занадто жорстким або занадто нудним. . Якщо такий курс, як здається, є проблемою для вас, і ви виявляєте, що пояснюєте іншим, чому ви так раді, що вам не доведеться приймати так-то і так, це повинно сказати вам, що ви багато навчитесь взявши курс! Можливо, ви не дізнаєтесь матеріали курсу, але ви дізнаєтесь про власні обмеження та, можливо, більше про виправдання, які ви робите собі. [Підказка: Зазвичай вони слабкі.]

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

Мій підхід тут практичний, заснований на курсах, які ви можете насправді пройти. І я зосередився на навчальних цілях, які, ймовірно, будуть вивчені. Примітка. Ця відповідь була адаптована з публікації в моєму блозі про десять речей, які повинен вивчити кожен спеціаліст з інформатики .


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

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

Написання доказу - це як написання програми. Навчитися доводити, що, наприклад, * 0 = 0, схоже на FizzBuzz з математики (ну, можливо, це трохи складніше). Спочатку це здається залякуючим, але незабаром ви підбираєте маленькі хитрощі, як ви робили, коли навчалися програмувати. Докази можуть мати різні структури, які можуть допомогти вам мислити рекурсивно та структурно. Як я вже говорив, дискретний курс математики не перешкоджає його вивченню реальних доказів. Для цього вам потрібна теорія груп або реальний аналіз.
Макнейл

Хоча знання компліментів, безумовно, корисне, я вважаю, що знання доповнень є більш важливим для економіки.
ijw

1
@ijw: Що стосується економіки для студентів CS, Джоел має хорошу дискусію, яку варто прочитати: joelonsoftware.com/articles/CollegeAdvice.html
Macneil

8

Після розмови з парою представників компанії та друзів, у яких було багато інтерв'ю:

  • Бази даних
  • ООП
  • Алгоритми
  • Структури даних

мають тенденцію бути "обов'язковими" для нових найманих працівників (або, як вони сказали, "настійно рекомендуються" курси).

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

Сподіваюся, що це допомагає!


1
Погодився б з ООП та структурами даних.
apoorv020

4
Основні структури даних ... sooooooooooo важливі. БІЛЬШЕ важливе, я думаю, ніж OOP. Потрібно вміти продумати, як зберігати та впорядковувати інформацію. І якщо у вбудованій системі макет пам'яті ваших структур даних є предметом життя чи смерті.
quick_now

3
+1 для уроків математики. Вони також допомагають вам навчитися слідкувати за великими проблемами / системами.
Майкл К

1
Мережі також хороші.
Кейо

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

6

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

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

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

Крім того, це може бути не видно, тому деякі з них є важливими темами при розгляді структур даних та алгоритмів для певної платформи.


+1, оскільки ступінь інформатики дає вам досвід із широким спектром предметів / технологій. Просто не забудьте звернути увагу на курс розробки програмного забезпечення.
Містер Мураха

+1 Для складання завжди розумно по-справжньому зрозуміти, що відбувається внизу стопки. Було б добре, якби всі теж знали обладнання, але для багатьох це було б кроком далеко.
Орлінг

5

Є два способи відповісти на ваше запитання. Дозвольте спробувати і те, і інше. Перший спосіб - це подивитися на речі з потенційної позиції на ринку праці, навички кодування тощо. Ось ось мій список:

  1. Структура даних
  2. Аналіз алгоритму
  3. Об'єктно-орієнтоване програмування
  4. Або певний курс на C ++ або на Java
  5. Операційні системи
  6. Дизайн інтерфейсу користувача
  7. Паралельне програмування

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

  1. Кінцева мова та теорія автоматів
  2. Конструкція компілятора
  3. Теорія графіка
  4. Штучний інтелект

Не просто перелічіть набір курсів, які, на вашу думку, ви вважаєте важливими, наведіть причини та досвід, які ви диктували ваш список.

2

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

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

РЕДАКТУВАННЯ: У зв'язку з голосом, я відчуваю, як пояснюю свою відповідь. Я студентка з інформатики підсумкового курсу, і мій досвід базується на моєму стажуванні та співбесідах з провідними компаніями в цій галузі. На мій досвід, люди рідко вимагають використовувати складні алгоритми або кодувати дуже складні структури даних в інтерв'ю або на робочих місцях.

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


Будь ласка, надайте більш детальну інформацію про ваш досвід та чому хтось повинен пройти ці курси.

@Mark: Чи можете ви пояснити обґрунтування, що стоїть за головою?
apoorv020

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

@ apoorv020 Єдине викупне значення для використання програмної інженерії або практик проектування полягає в тому, що ви зазвичай будуєте проект середнього розміру (що б це не означало)? Що ви особисто навчились проходити ці курси?

Вони добре знати, але це не суб'єкти CS.
Томас Оуенс

2

Те, що я дізнався в коледжі, яким я користуюся щодня:

  • Об'єктно-орієнтована методологія проектування
  • Шаблони дизайну
  • Регулярні вирази
  • Основні алгоритми та аналіз
  • Структури даних

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

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

Поза межами відділу CS пройдіть курс письма. Гарні навички письмового спілкування є важливими для успіху.


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

Це було. Я вийшов з цього по техніці і пошкодував.
pwc

@Orbling: Часто на невеликих кафедрах (на відміну від великих у державних школах) просто не вистачає лекторів, щоб вимагати кожної основної теми. Наприклад, у моїй школі бази даних були факультативом.
Macneil

@Macneil: На моєму курсі курс первинних баз даних був обов'язковою умовою (охоплював усі основи: моделювання ER, нормальні форми, SQL (не тільки базовий SQL, з'єднання / вкладені тощо), розміщення індексу тощо), остання, більш складна , курси баз даних були факультативними (я думаю, їх було три). Я ніколи не обирала їх приймати, тому що я вважала, що це речі, які я можу засвоїти самостійно легше, ніж інші курси, які я пропустив би. Подумайте, я замість цього взяв просунутий АБО.
Орлінг

@pwc: Гадаю, ви пам’ятаєте, чому ви вийшли з нього, а не як?
Орлінг

2

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

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

    Практично все в обчислювальних технологіях повертається до обробки даних за допомогою алгоритмів. Зверніть особливу увагу на масиви та хештелі, оскільки вони, безумовно, є найбільш корисними структурами даних для загального користування, але списки та дерева та графіки (ну, списки дерев з обмеженим доступом, а дерева - обмежені типи графіків) також бути важливим. Крім того, розуміння алгоритмів є життєво важливим для створення коду, який не є страшним. (Інакше ви будете робити дуже жахливі речі, наприклад, використовуючи алгоритм O ( n 3 ), у якому O ( n log n ) буде робити це.) Якщо ваш рівень CS не має обов'язкового DS + курсу на ньому, це не CS. Або інженерія програмного забезпечення. Або навіть просто програмування.

Крім цього, курс, який я вважав найбільш корисним протягом багатьох років у кількох галузях:

  • Паралельність

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

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

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


1

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

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


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

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

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

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

1

Я думаю, вам слід вивчити наступне:

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

ООП: - Це хліб і масло. Обов’язково. Книги, якщо ви хочете запитати: Ваша перша книга повинна бути: - очоліть спочатку OOAD, потім ви можете перейти до книги Грейді Буха та книги Івара Якобсона

Структури даних та алгоритми: - Дуже важливо розвивати логічне мислення та мислення.

Мені цього достатньо. Це ніколи не надто пізно. :)


1

Як хтось, хто регулярно опитує кандидатів на програмування, і хтось, хто після 12 років перебуває у цій галузі, я б запропонував наступне

  • Дизайн бази даних та SQL: Дивно, що багато програмістів не знають простий SQL, а ті, хто має хороші навички SQL, є безцінними. Можливість створити хорошу базу даних може бути не корисною для компанії, яка має наборну структуру баз даних, для стартапів та компаній, що проходять зміни, це ОБОВ'ЯЗКОВО!
  • Шаблони дизайну. Вони просто допоможуть вам прийняти кращі рішення щодо гарного дизайну
  • OOP: Зазвичай це попередній запит на більшість курсів, але це допоможе.
  • Алгоритми: Оскільки так мало людей знає, що таке рекурсія, не кажучи вже про те, коли це може врятувати їм багато складного кодування
  • Структури даних: Більшість сучасних мов займаються цими матеріалами для вас, але розуміння їх є запорукою гарного дизайну.

Потім кілька додаткових занять читайте:

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

1

ВЗАЄМО , на це питання немає жодної хорошої відповіді.

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

Зараз там є програмне забезпечення всіх видів. Наприклад, використовуючи wikipedia як джерело узагальнення, ми можемо зустріти 3 великі узагальнення :

  • системне програмування
  • програмне забезпечення
  • програмне забезпечення

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

а як щодо програмного забезпечення ? тут, як писала wikipedia, ви можете скористатися компіляторами коду, налагоджувачами, інтерпретаторами, посиланнями, текстовими редакторами, тому курс з автоматизованої теорії, теорії мови, мови та компіляторів може бути корисним.

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

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

З мого досвіду, я інженерія системного та прикладного програмного забезпечення в галузі безпеки (ви хочете пройти курс безпеки?) Починаючи з невеликого досвіду програмування, я все цікавіше в алгоритмах та розподіленій системі, і знову відчуваю незручно в простоті програми, яку я писав загальним призначенням (sniffer, система виявлення вторгнень у мережу, діссектор протоколу та детектор тощо).

Як ви кислимо дізналися з теоретичної інформатики! Ви пропускаєте ці курси? : P

Ви навчилися, наприклад, що вся комп'ютерна мова може бути вмонтована в набір обчислюваних математичних функцій, і, наприклад, якщо ваш досвід пройшов мій той самий шлях, незабаром вам буде незручно в цьому маленькому наборі обчислень і, як я, ви можете почати бачити, як розвивається програмне забезпечення не настільки привабливе та дивовижне, тому що той самий ПРОЕКТУВАННЯ ПАТЕРНУ знову повертається (ви дотримуєтесь курсів з дизайну?), і, наприклад, ви можете почати більше цікавитись ЧОМУ і ЯК мова може бути переведена на математичну функцію та почати дізнайся, що комп'ютерна мова не така вже й складна! наприклад, ви можете швидше здивуватися особистості та психології, і зможете більше зацікавитись цим та стати хорошим менеджером проекту! Ви проходили курси щодо життєвого циклу програмного забезпечення?

Отже, що таке ОБОВ'ЯЗКОВИЙ курс у вашій кар'єрі CS?

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

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

подивіться пояснення у вікіпедії.

весело провести життя :)

мої 2 копійки.

вибачте за мою дійсно погану англійську.


1

Руками вниз номер один, на якому студенти CS повинні вільно володіти - це англійська.

Без розуміння розмовної та писемної англійської мови ви назавжди опинитесь у неприємності.

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

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

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


1

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

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

Що я б сказав, я взяв, що мені здається корисним:

  • Дизайн RDBMS - RDBMS сидять за більшості систем та сайтів, і ви повинні розуміти принаймні основи того, що відбувається (я дізнався це на роботі).
  • Основний дизайн інтерфейсу - всі найкращі програмісти, з якими я працював, могли створити корисну програму, яка не була неприємною як пекло. За винятком одного, але він є винятком, який підтверджує це правило.
  • Деякі базові програми - а я маю на увазі базові. Я навчився деяких C (для обробки зображень та вбудованих систем), деяких мов складання (про які я забув протягом тижнів після закінчення курсу) і деяких Pascal (базовий обчислювальний курс був стандартним для всіх інженерів). Під час інтерв'ю я вражений тим, як мало хто з випускників Центру може дійсно програмувати будь-яким способом, комерційні організації вважали б корисним, тому я не чекаю багато, але я очікую, що вони знають основи.
  • Логіка - я навчився цьому за допомогою цифрової електроніки, математиків через теорію, CS дисципліни через програмування, але як би ви її засвоїли, ви повинні добре зрозуміти це, оскільки стільки зводиться до неї.
  • Комунікативні навички - я провів пару курсів в університеті за межами свого фактичного ступеня, навичок презентації та напористості. Дуже багато здорового глузду, але ніколи не завадить говорити про розумні речі кілька разів.
  • Основи бізнесу та бухгалтерського обліку. Деякі програмісти діють так, як це не має значення, але, на мій погляд, це важливо для кожного, хто працює в компанії - саме так гра працює, і вона буде контролювати ваше життя, чому б вам не хотілося знати хоча б зачатки як і чому відбуваються речі?

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


0

До списку я також додам кілька основних курсів з людських ресурсів / психології.

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

Знайте свого ворога, щоб ви могли захистити себе.


-1

1-й рік:

  1. Базовий OOP мовою високого рівня
  2. Структури даних

2-й рік:

  1. Компілятор, ви створюєте просту нульову форму
  2. Паралельність

3-й рік:

  1. Алгоритм
  2. Операційна система, ви додаєте функціональні можливості та вдосконалення до простої
  3. Формальна мова

4-й рік:

  1. Мережі
  2. Розподілена система
  3. Інтерфейс користувача
  4. Розширений компілятор
  5. Розширена операційна система
  6. Штучний інтелект
  7. Комп'ютерна графіка

Ці курси повинні забезпечити багато теорії та практики кодування.


-2

Дивно, що ніхто не згадував архітектуру комп’ютерів.


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