Речі, які ви мали б навчитися в школі, але не звертали на це уваги [закрито]


42

Це запитання змусило мене подумати, що є краще питання.

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

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


16
Я шкодую, що не витратив більше часу на вивчення розмовних мов (просто натиснув на мене 10-20 років пізніше), але це не пов'язано з програмуванням.
LennyProgrammers

Відповіді:


36

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

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

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

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

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

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

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


1
ця відповідь не для ОП, а до її доповнення: чого б вони навчили вас краще / більш поглиблено
davka

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

3
Чи я єдиний, хто мчає, коли замість "навчати" використовується "навчитися"?
dr-jan

1
@ dr-jan: Дякую, що вказав на це. Відредаговано.
січня1111

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

120

Дівчата. Ви можете подумати, що я жартую, але це не так.

Не божеволійте і нічого, вам все-таки потрібно вивчити академічні речі. Але також потрібно провести деякий час, вивчаючи людей, оточуючих людей.

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


16
Мені б хотілося, щоб я міг дати більше таких результатів.
5аркс

3
Проводити більше часу з людьми, які взагалі не обробляють комп’ютери - це гарна річ (тм)
Роб Аллен

16
48+ людей, які підтримали це, просто тихо зітхнули на себе.
Джордж

Інакше знайте як "Користувачі".
Гері Віллоубі

61

Я відчуваю, що мав би вкласти приблизно 42% більше енергії в статистику.


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

4
@davka: Це трапляється частіше при тестуванні, особливо тестуванні продуктивності. Також в аналізі даних, яких у мене сьогодні багато.
FrustratedWithFormsDesigner

4
@davka - Я працюю в компанії, керованій даними, і хороший статистичний аналіз був би корисним для розробників, щоб вони могли представити свої висновки про те, "чому код x краще, ніж код y", або "так, я можу довести, що якщо ви дозволите мені вкласти гроші на покращення цієї речі, статистичний аналіз показує, що вона прискориться на x% '. Знання, як застосувати статистичні прийоми для проектування своїх експериментів, справді є ціллю тут.
wkl

3
Я думаю, що є 70 +/- 2% шансів, що я повинен був стати статистикою.
Захарій К

10
60% часу, це працює кожен раз.
Матвій

51

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


переповнення стека та ведення блогів мені дуже допомогли на цьому.
Свиш

36

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


9
+1. Я твердо переконаний, що для тих, хто не знає, як програмувати, функціональне програмування легше вивчити, ніж імперативне програмування, що імперативне програмування легко вивчити, якщо ви знаєте функціональне програмування, і що функціональне програмування важко вивчити, якщо ви вивчили спочатку імперативне програмування. Тому має сенс не тільки викладати функціональне програмування, але й спочатку це робити , а головне , не робити з нього такої великої операції ! Мені подобається, як це робить SICP. Перше завдання з’являється лише до декількох сотень сторінок, і ви навіть не помічаєте.
Йорг W Міттаг

1
+1. Схема відключила мене від функціональних парадигм протягом декількох років навчання в коледжі, оскільки я мав досвід C та C ++, перш ніж взяти курс. Я не перераховував це як щось, на що я відчував, що мені слід було б приділити більше уваги, тому що на моєму старшому курсі я пройшов курс мов і використав SML і дуже сподобався, і мені теж сподобалось Лісп. Напевно, просто досвід досвіду в коледжі, що полегшує мені зрозуміти, як використовувати ці парадигми. Зараз я також викладаю себе Скалу і дуже насолоджуюся цим. : D
wkl

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

34

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


2
Регулярні вирази повинні використовуватися лише як останній сценарій випадку
billy.bob

Так! Я пам’ятаю, як думав, як сильно я її тоді ненавидів… Навчився для класу і прибрав його з розуму, поки мені знову не знадобилося це через кілька років. Тоді я проклинав себе, бо мені довелося це знову вивчити.
Bmw

4
@ m.edmondson, регулярні вирази чудово підходять для простих завдань. Ви можете зробити щось не так, якщо ви використовуєте їх у своєму коді (зрештою, комбінатори розбору є набагато кращим), але для вашої типової пошуку та заміни в текстовому редакторі вони просто чудові.
SK-логіка

3
Регулярні вирази - чудовий інструмент для використання в командному рядку та в потужних редакторах, таких як vim чи emacs. Не тільки для використання в коді.
Стівен Полгер

1
@ m.edmonson, ні - регулярні вирази - це фантастичні засоби, які слід вибирати першими ! Для тих ситуацій, коли вони застосовуються - знаючи, коли вони не, - це те, де потрібен досвід.

33

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


2
Можливо, я просто не пишу достатньо складних матеріалів, але єдиний раз, коли мені довелося знати Big Big, був на інтерв'ю у високотехнологічній компанії. Тож, як я дізнався це 20 років тому, оскільки я не використовую, але раз на 10 років або близько того, я не пам’ятаю цього.
Білл Ліпер

2
@ Білл-лепер: Мій досвід полягає в тому, що Big-O - це не те, чим ти користуєшся кожен день, але це те, що коли ти знаєш про це, так часто допомагає тобі з’ясувати проблему, про яку ти не знав, що маєш, або інакше б не зрозумів. Якщо ви цього не знаєте, ви ніколи не маєте цих розумінь і не знаєте, чого вам не вистачає.
btilly

1
@bill, big-O - це лише формалізований спосіб сказати, що вам потрібно бути обережним, скільки петель ви накладете всередину на іншу, коли вам потрібно масштабувати. Більшість програмістів дізнаються це так чи інакше, не знаючи формальної назви.

23

Мені б хотілося, щоб я слухав те, що сказав мені мій вчитель, коли мені було 14 років. На жаль, я не можу сказати вам, що це було, тому що я не слухав.


21

Повинен бути курс з кінцевої мови та теорії автоматів.

Думав, що це занадто теоретично, поки моя робота не вимагала від мене зробити компілятор мови, що відповідає конкретній домені, з нуля.


4
Вау. Що ти точно робиш? Якщо ви не заперечуєте, я запитую =)
fouronnes

1
@otibom: Я працюю з напівпровідниками, і у нього є власні мови, характерні для домену, з досить жорсткими вимогами до продуктивності.
Fanatic23

18

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


UNIX? Це все ще викладають у коледжах?
apoorv020

1
Це повинно бути ... або добре, більше схожим на Linux. Будь-який програміст повинен знати трохи баш (або іншої оболонки).
Per Wiklander

17
  • Штучний інтелект / майнінг даних - взяв клас, нудьгував, через роки я самостійно вивчаю такі теми, як колективний інтелект. Аналіз великого набору даних - це велика справа в моїй роботі та попередніх роботах.
  • Теорія / дизайн баз даних - знову взяв клас, нудьгував, тому я сам вивчав речі про бази даних
  • Просто математика високого рівня та цікаві математичні прийоми взагалі - я взяв 4 класу обчислення, лінійну алгебру, статистику, ймовірність, дискретність ... але вважав, що я повинен був також зробити:
    • Числові методи
    • Передові статистичні методи, навіть такі речі, як ланцюги Маркова, - знову ж таки, пов'язані з аналізом великих наборів даних
  • Взаємодія між людиною та комп'ютером - у школі я не відчував, що це жодним чином корисно для того, чим би я займався на своїй роботі (мені подобалося працювати на низькому рівні чи поза кадром), але в будь-якій роботі, зручність у використанні була часом.
  • Друга мова - я завжди мав дар для мов, але в коледжі я не брав мови, і мені важко спробувати навчити себе японської мови.

13

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

Звичайно, я пішов до школи 20 років тому, і C вважався передовим у відділі електротехніки. Люди, що займаються CS, робили якісь роботи з Lisp та C ++, але, мабуть, не стільки OO, як, я би сподівався, відбувається з випускниками сьогодні.


11

Проектні документи

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


хтось інший БУДЕ їх писати, якщо я в цьому не добрий, саме так мені подобається.
Кевін

10

Друга іноземна мова. Російська в моєму випадку. Багато моїх книг, ресурсів тощо в цій мові в моєму просторі.


@FrustratedWithFormsDesigner так, але коли я був дитиною ... :)
lfx

Я вчився французькою та німецькою мовами особисто, і фактично провів деякий час у Німеччині. Це те, що кожен повинен випробувати.
Кен

12
Дійсно? Ресурси, пов'язані з програмуванням російською мовою? Я є носієм російської мови, але я навряд чи використовую це, коли шукаю речі з програмування. Більшу частину часу введення англійського запиту в Google отримує мені відповідь. Також технічні книги російською мовою часто є дуже поганими перекладами з англійської мови.
Діма

@Dima, яка ситуація зараз не знаю, але коли я був у колажі та в школі, кожен вчитель сказав це.
lfx

3
@FrustratedWithFormsDesigner: що я повірю. Напевно, є багато матеріалів, пов'язаних з математикою, російською мовою. Але якщо ви говорите про теми, пов'язані з комп'ютером, то вам краще знати англійську мову.
Діма

8

З боку CS речі:

  • Дизайн інтерфейсу користувача
  • Тестування
  • Контроль версій
  • Паралельність

З усієї категорії:

  • Технічне письмо
  • Мовленнєве спілкування
  • Навички оцінки часу

+1 для тестування та контролю версій. Серйозно, ми багато чого чули, що тестування було дуже важливим ... ніколи насправді не навчились, як це ... (і це не було нашою виною. Ми просто ніколи нічого не мали про це насправді)
Svish

7

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


7

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


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

6

Електроніка

У школі у мене не було багато програм, пов'язаних із програмним забезпеченням . Ага - інформатика, але я її скасував. :) Але пізніше це було легко дізнатися. Тоді як електроніка, я часто її не розумію. Мікроконтролери, ШІМ, GPIO - wtf? Я б хотів, щоб я зрозумів речі.


Я взяв електроніку у (еквівалентній ЄС) середній школі, оскільки не було "чистого" ІТ-вибору. Я і сьогодні радий, що я не тільки знаю, як користуватися комп’ютерами та периферійним обладнанням, але і як вони працюють.
Вінсент Ванкальберг

5

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

Детальний курс пропонувався як факультатив, але довелося вибирати між цим та ШІ: тож насправді це не шкода.


5

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


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


4

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


4

Економіка. Це може бути нудно (і трохи жорстоко), але все одно це єдине, що є справді важливим у цьому суспільстві. Після цього статистика.


4

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

Компілятори мови операційних систем складання

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


3

Є близько десятка класів, які я хотів би взяти в коледж, але цього не зробив. Переважно не CS. Фотографія, Генеральний Хім, більше написання!


3

Смішна кількість людей, які говорять про вільне мистецтво: я був когнітивною наукою (філософія / CompSci / анатомія) ... Закінчив перехід на філософію / CompSci з важким неповнолітнім англійською мовою (я міг би отримати бакалавра, але не заважав брати 101-й я пропустив).

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

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


Чи можете ви поясніть, що ви мали на увазі під "моїми найкращими курсами AI - курси філософії"?
Марк C

@mark: «Cognitive Science», який був моїм оригінальним великим, в основному нічого , але AI, і в основному складається з філософії. Існує два види філософії: аналітична та континентальна. Усі дурні лайна континентальні. Аналітична - це логіка, гвинтик. наук, мовознавство і подібне лайно.
Satanicpuppy

+1: Я, як спеціаліст з філософії, взяв клас під назвою «Філософія розуму». Цей клас в основному був присвячений машинам Тьюрінга. Мій радник з філософії був спеціалістом з нижчих класів, а мій радник з юридичних наук фактично мав доктор філософських наук.
Морган Херлокер

+ 1: "Вам не доведеться пояснювати свою освіту". І там я був, думаючи, що в США / Великобританії все по-іншому ... я точно знаю, що ви маєте на увазі.
Raveline

3

Квадратичні рівняння та тригонометрія.

Дуже важливий при написанні програмного забезпечення для традиційних інженерних дисциплін.


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

@Ben. Вірите чи ні ... АЛЬКОМУ людям вдалося вступити в розробку програмного забезпечення, і не мають в ньому формальної підготовки. Це, мабуть, раніше "свого часу". Мені було одне .. Мені вдалося це навчитися, але це було б набагато легше, якби я звернув увагу в школі.
сердитийТіг

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

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

@guilio: Я з повагою не згоден. Кілька інженерів на вершині заробляють шалену суму грошей (ми їх зазвичай називаємо «винахідниками», але вони використовували інженерні навички для проектування продукту). Тоді є невелика група найбільш затребуваних медіаконсультантів. Потім решта компетентних інженерів, під ними некомпетентні інженери та рядові медіа-консультанти змішуються. І всі вони роблять більше, ніж ваш середній випускник коледжу зі ступенем математики, який викладає квадратичні рівняння до наступного врожаю інженерів.
Бен Войгт

1

Я не приділяв такої уваги компіляторам, як повинен був.


1

CS / Math: більше логіки, алгебри, теорії категорій. Більш фундаментальні та менш застосовані речі: розуміти застосовані речі, коли ви добре знаєте основи, набагато простіше, ніж навпаки, і більш плідно.

(У мене була статистика A, але пройшло багато часу, щоб пов’язати це з реальними потребами програмування, я багато що забув.)

«Гуманітарні науки»: природна мова, письмо, формулювання, розуміння та розуміння. Це не виглядає важливим, поки ви не приєднаєтесь до команди з більш ніж 2-3 колег-хакерів, тобто в так званому «реальному житті».


1

Комп'ютерна графіка (3d-рендерінг в opengl / directx)

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

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