У який момент можна сказати, що я "вивчив" мову?


67

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


12
Я думаю, що слово, яке ви шукаєте, - "оволодіння" мовою, "вивчене" в цьому контексті є дещо дивним.
Пітер Б

7
"Слова для значення: коли ви отримаєте значення, ви можете забути слова." -
Чжуанцзі

9
коли вам не доведеться ставити це запитання, ви дізналися, що вам потрібно знати ...

1
@JarrodRoberson Це Чжуанцзі, який сказав це теж?
jadkik94

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

Відповіді:


70

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

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


15
Терміни, що розмовляють і вільно говорять, досить суб'єктивні, і хоча вони відповідають природній мові, важко зрозуміти, що вони означають при застосуванні до комп'ютерної мови. Хоча все-таки суб'єктивні, функціональні та ідоматичні можуть працювати краще. Функціональний означає, що ви знаєте синтаксис досить добре, щоб писати корисні конструкції, тоді як наявність ідіоматичних знань означає, що ви не тільки знаєте, як писати мовою, але і досить добре знаєте її, щоб використовувати ідіоми мови, наприклад використання usingв C # або b, a = a, bі генератори в пітоні. В іншому випадку +1.
Марк Бут

13
@MarkBooth Будь-яке опис, окрім балів на іспиті, буде дещо суб'єктивним. Сенс у тому, щоб використовувати знайомість, яку більшість людей вже має з рівнем знань людських мов, як приблизний посібник до знання комп'ютерної мови, і зробити це дружньо, що запрошує подальше дослідження. Розмовний C ++ - це скорочення "Я знайомий з основами, але вам може знадобитися допомогти мені з розширеним, незрозумілим або хитрим кодом".
Калеб

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

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

1
@Morg. Що за сміття. Програмування - це стільки, як спілкуватися з майбутніми програмістами (в тому числі і з вами), як і з тим, щоб розповісти комп’ютеру, що робити. Звичайно, просто писати один код, можливо, не потрібно буде добре повідомляти, але в реальному розумінні ваші наміри зрозуміти майбутнім утримувачам коду набагато важливіше, ніж змусити комп’ютер зробити правильну справу. У будь-якому випадку, ці коментарі більше не допомагають покращити цю відповідь, тому я б запропонував перенести це до Інженерії програмного забезпечення, якщо ви хочете обговорити його далі.
Марк Бут

25

Це залежить від того, хто просить

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

В основному я зіткнувся з двома архетипними масштабами, за якими люди судять про відповідь на питання "ти дізнався X?"

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

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

Отже, яка ваша аудиторія?


4
В інтерв'ю ви це знаєте, якщо знаєте. На робочому місці ви знаєте це, якщо Google це знає.
asfallows

3
В інтерв'ю це "я знаю це", якщо інтерв'юер носить краватку, і це "будь ласка, визначте", щоб знати ", якщо він цього не робить;). Чесно кажучи, більшість інтерв'ю запитують, чи є у "досвід", на який я легше відповісти "так"
keppla

18

Я думаю, що люди зосереджуються на остаточності слова «навчився», коли він ідеальний, це означає, що ти закінчив вчитися. І як все відзначили, мови програмування живий суті так само , як розмовних мов. Наприклад, хтось, хто мав повне оволодіння C # 2, подивився б на C # 3 за допомогою LINQ, Lambdas, varключового слова, ініціалізаторів об'єктів / колекцій та методів розширення, і виявив, що багато чого змінилося від того, що він дізнався в попередній версії. Те саме відбувається з C # 4 await, asyncключовими словами та іншими новими мовними конструкціями.

І ми просто говоримо тут синтаксисом. Ми забуваємо, що більшість мов є парними рамками . У C # є .NET фреймворк, у Java є власний фреймворк, як і у Ruby, C ++, PHP та PERL. Подумайте про рамки для мови як про лексику, а сама мова - лише синтаксис. Знання мови означає, що ви знаєте, як скласти речення з мови. Знання рамки означає, що ви можете добре себе виразити мовою. Нарешті, коли ви знаєте синтаксис та словниковий запас, вам потрібно вивчити ідіоми, щоб ви писали код як "носія мови".

Я б сказав, що існує кілька рівнів навчання.

  1. Hello World (ви можете писати самі рудиментарні програми.)
  2. Спеціаліст (ви можете писати основні програми, але вам потрібно регулярно звертатися до онлайн-довідки)
  3. Вільно (ви можете писати програми заздалегідь з потрібними посиланнями).
  4. Рідний динамік (ви можете писати розширені програми з мінімальною допомогою в Інтернеті; ваш код не можна відрізняти від коду іншого носія мови).

3
Нітпік: awaitце від C # 5, головна нова річ у C # 4 була dynamic.
svick

Ви маєте рацію ... Я постійно втрачаю інформацію про те, яка версія C # йде з якою версією .NET
Майкл Браун

7

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

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


2
Ідіоми змінюються, стилі змінюються від місця до місця, і справді мови змінюються з часом. Якщо ви не можете сказати, що ви "знаєте" чи "навчилися" такої мови, як C ++, доки не закінчите її вивчення, то дійсно дуже мало людей, які можуть стверджувати, що засвоїли C ++.
Калеб

1
@Caleb точно.
Майкл Браун

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

@Caleb, що гірше того, багато частин c ++ краще, якщо їх ігнорувати, як і Carmack, і Torvalds.
Морг.

3

Це скоріше фактор, заснований на думці. У всьому технічному плані "вивчене" означало б повне знання, як у вас, як слід було б, знати ВСЕ МОВУ.

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


2

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


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

2

Моя особиста відповідь на це - коли,

  1. Я знаю основи, щоб написати просту програму на рівні виробництва.
  2. Я витратив щонайменше 3 прямі години на вирішення проблеми, яка здавалася простою, але не була.

З цього моменту я б не називав це навчанням, а майстерністю.


1

У той момент, коли ваша програма чи компонент можуть читати пошту, тобто закон Завінських , де зазначено:

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

Це було оновлено, коли RSS став популярним для "... може читати RSS-канали", і, ймовірно, може бути оновлений цими днями до "... може читати канали Twitter". ;-)


0

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

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

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

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

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

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

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