В какой момент я могу сказать, что «выучил» язык?

67

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

SomeKittens
источник
12
Я думаю, что слово, которое вы ищете, «освоить» язык, «выученный» в этом контексте немного странно.
Питер Б
7
«Слова для значения: когда у вас есть смысл, вы можете забыть слова». - Чжуанцзы
jfrankcarr
9
когда вам не нужно задавать этот вопрос, вы узнаете, что вам нужно знать ...
1
@JarrodRoberson Этот Чжуанцзы тоже это сказал?
jadkik94
2
Согласно LinkedIn, в вашем резюме по навыкам есть очень низкая планка для написания языка программирования ... Согласно моему LinkedIn, люди, которые раньше видели Java-код, по-видимому, чувствуют себя комфортно, перечисляя его в разделе своих навыков.
Крис Дейл

Ответы:

70

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

Так же, как я думаю, с компьютерными языками. Вы можете сказать, что «знаете» такой язык, как C ++ или Ruby, когда можете писать на нем полезные программы. Если вам нужно определить степень, в которой вы знаете язык, используйте те же термины, что и для человеческого языка. Скажите «Я немного знаю С ++», «Я знаю разговорный С ++» или «Я свободно владею С ++», чтобы обозначить, что вы знаете достаточно, чтобы пролистать, достаточно, чтобы сделать полезные дела, или что вы эксперт, соответственно.

Калеб
источник
15
Термины разговорный и свободный довольно субъективны, и хотя они соответствуют естественному языку, трудно понять, что они означают применительно к компьютерному языку. Хотя по-прежнему субъективно, функционально и сомнительно может работать лучше. Функциональность подразумевает, что вы достаточно хорошо знаете синтаксис для написания полезных конструкций, а наличие идиоматических знаний подразумевает, что вы не только знаете, как писать на языке, но и достаточно хорошо его знаете, чтобы использовать идиомы языка, такие как использование usingв C # или b, a = a, bи генераторы в питоне. В противном случае +1.
Марк Бут
13
@MarkBooth Любое описание, за исключением оценки на экзамене, будет несколько субъективным. Смысл в том, чтобы использовать знакомство, которое большинство людей уже имеют с уровнями знания человеческих языков, в качестве приблизительного руководства к знанию компьютерного языка, и сделать это дружественным образом, что требует дальнейшего изучения. Разговорный C ++ - это сокращение от «Я знаком с основами, но вам может понадобиться помочь мне с продвинутым, неясным или хитрым кодом».
Калеб
3
Хотя я думаю, что вы в основном правы, я думаю, что многие люди ошибочно полагают, что они выучили естественный язык, когда у них все еще плохой уровень. И это относится также к людям, которые говорят, что они изучили языки программирования.
Хайлем
Я думаю, что ваш ответ идеален, он даже показывает, насколько невозможно количественно оценить знание языка. Действительно, хотя свободное владение означает, что вы можете говорить практически о чем угодно, имея столько объяснений, сколько потребуется носителю языка, это не относится к тому факту, что большинство носителей языка не обладают десятой частью знания языка, которое есть у старых добрых писателей (нет , не Гарри Поттер или Дэн Браун, настоящий старый стиль, трудно читаемый материал). Как бы вы к этому обратились, если на самом деле никто не удосужился обратиться к языкам? и когда на самом деле это сильно влияет на производительность в программировании?
Морг.
1
@Morg. Какой полный мусор. Программирование - это не только общение с будущими программистами (включая вас), но и общение с компьютером, что делать. Конечно, простая запись одного кода, возможно, не требует хорошей передачи, но в реальном мире разъяснение ваших намерений будущим разработчикам кода гораздо важнее, чем заставить компьютер делать правильные вещи. В любом случае, эти комментарии больше не служат для улучшения этого ответа, поэтому я бы посоветовал перенести это в раздел Software Engineering Chat, если вы хотите обсудить его дальше.
Марк Бут
25

Это зависит от того, кто спрашивает

Человек, который спрашивает правдоподобно, имеет определенное представление о том, какой уровень квалификации ожидается от того, кто говорит, что он «выучил язык».

По сути, я столкнулся с двумя архетипическими шкалами, по которым люди судят об ответе на вопрос "ты изучил Х?"

Для большинства ботаников это вопрос с подвохом, чтобы отсеять позеров. Это уже продемонстрировано другими ответами на ваш вопрос;). Если вы говорите, что выучили его, вы не видите объема задачи, которая неявно является «совершенством», и, что еще хуже, вы терпите неудачу в смирении.

Для большинства боссов вы «выучили это», если вы можете решить их проблемы , критерий часто уже встречался, если ваш код компилируется. Смиренный ответ на его вопрос приведет к тому, что он назначит задачу проблемнику, который также может быть родственником.

Итак, какова ваша аудитория?

keppla
источник
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
Nitpick: awaitиз C # 5, главной новой вещью в C # 4 была dynamic.
svick
Вы правы ... Я продолжаю терять, какая версия C # идет с какой версией .NET
Майкл Браун
7

Вы редко можете сказать, что выучили язык. Это означает, что вы уже узнали об этом, что ... глупо.

Сказать, что вы знаете язык, - это хорошо, когда вы можете писать код, который явно не нарушает идиомы языка (возможно, после недели уничтожения знаний) без ссылки на синтаксис.

Telastyn
источник
2
Идиомы меняются, стили меняются от одного места к другому, а сами языки со временем меняются. Если вы не можете сказать, что «знаете» или «выучили» такой язык, как C ++, до тех пор, пока не закончите изучать его, то мало кто действительно может заявить, что выучил C ++.
Калеб
1
@ Калеб точно.
Майкл Браун
3
Если вы так учитесь, значит, вы не знаете даже своего родного языка, что тоже глупо (по крайней мере, для большинства людей)
superM
@Caleb, что еще хуже, многие части c ++ лучше игнорируются, как указывали Кармак и Торвальдс - так что ... изучение всего cpp не совсем полезно.
Морг.
3

Это скорее фактор, основанный на мнении. Во всех технических терминах «Изученный» будет означать, что вы обладаете полным знанием того, что и вы должны знать ВСЕ о языке.

Тем не менее, в мире программирования я считаю, что это больше, если вы можете свободно программировать на языке, чтобы выполнить задачу / задачу. Это также, вероятно, означает, что вы знакомы с языком. Конечно, вы могли бы пойти туда и получить диплом после нескольких лет колледжа, но это только чтобы быть замеченным? Вы определяете, когда вы можете сказать, что выучили язык.

сельдь
источник
2

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

Иван Ворас
источник
Я не могу согласиться с этим. Это может быть справедливо для первого или двух изучаемых вами языков - вы можете просто не знать, что искать, поэтому даже самые грубые ошибки в дизайне неотличимы от правильного способа выполнения задач. Как только вы выучите несколько языков, вы должны начать видеть языковые недостатки вскоре после того, как начнете изучать новый. Но на некоторое время в своем развитии вы ошибочно приравниваете «другое» к «неправильному». Пока вы не изучите несколько языков каждого основного типа (процедурный, OO, функциональный, декларативный ...), ваши непосредственные суждения будут подозрительными.
Уоррен Янг
2

Мой личный ответ на это когда,

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

С этого момента я бы не назвал это обучением, но мастерством.

dukeofgaming
источник
1

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

«Каждая программа пытается расширяться, пока не сможет читать почту. Те программы, которые не могут так расширяться, заменяются теми, которые могут расширяться ». Автор Джейми Завински (который назвал это« Законом разработки программного обеспечения »), чтобы выразить свою убежденность в том, что все действительно полезные программы испытывают давление с целью превращения в наборы инструментов и платформы приложений ( вещь почтовика, он говорит, является только побочным эффектом этого).

Это было обновлено, когда RSS стал популярным для "... может читать RSS-каналы" и, вероятно, может быть обновлено в эти дни на "... может читать Twitter-каналы". ;-)

dodgy_coder
источник
0

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

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

У вас есть привычки, которые помогут вам избежать множества ошибок, просто следуя им, например: используйте {} блоки кода и () в выражениях, даже если вы абсолютно уверены, что «это будет только одна строка» или «я не дурак и знаю порядок приоритета оператора ".

Вы перестаете считать, сколько классов, шаблонов и API интерфейсов вы знаете. Это то, что intellisense, ссылки и учебники, и Google для. Но когда вы смотрите на проблему, вы сразу же знаете, на какие части ее можно разделить, и какими инструментами и алгоритмами вы их решите.

То, что вы делаете, работает , элегантно и мало . Вы наслаждаетесь кодированием и легко находите свои ошибки. Да, мастера также делают ошибки, потому что они люди - но они находят их быстро, потому что их структура кода приводит их в нужное место.

И, наконец, осознайте: вы научились думать, анализировать и решать проблемы; по сравнению с ними реальный язык является второстепенным, просто текущая коробка правил и инструментов.

Лоран Кедвес
источник