어느 시점에서 언어를 "배웠다"고 말할 수 있습니까?


67

몇 년 동안 프로그래밍을하면서 루비에서 C ++에 이르기까지 모든 것을 가지고 놀았습니다. 기본 구문 (루비)을 배우는 것부터 언어로 능력을 확장 한 몇 가지 주요 (나를 위해) 프로젝트를 완료하는 것까지 모든 것을 해냈습니다. 이러한 다양성 (그리고 진정한 언어를 배우는 것이 결코 멈추지 않는다는 사실)을 감안할 때, 언제 언어를 알고 있거나 배운 적이 있다고 말할 수 있습니까?


12
나는 당신이 찾고있는 단어가 "마스터 링"언어이고,이 문맥에서 "학습"은 약간 이상하다고 생각합니다.
Pieter B

7
"단어는 의미를위한 것입니다. 의미를 가지면 단어를 잊을 수 있습니다." - 장자
jfrankcarr

9
이 질문을 할 필요가 없을 때, 알아야 할 내용을 알게 될 것입니다.

1
@JarrodRoberson이 Zhuangzi도 그렇게 말했습니까?
jadkik94

2
LinkedIn에 따르면 기술 이력서에 프로그래밍 언어를 올리는 막대가 매우 낮습니다. 내 LinkedIn에 따르면 Java 코드를 본 적이있는 사람들은 기술 섹션에 편안하게 나열하는 것을 느낍니다.
Chris Dale

답변:


70

어느 시점에서 영어 나 프랑스어와 같은 언어를 "학습"했다고 말할 수 있습니까? 나는 대부분의 사람들이 당신이 언어를 사용하여 의사 소통 할 수있을 때 당신이 언어를 배웠다는 것을 받아 들일 것이라고 생각합니다. 모든 단어를 숙지하거나 모든 관용구를 이해할 필요는 없지만 사람들이 일상적인 대화에 사용하는 언어의 대부분을 아는 것이 좋습니다. 언어를 그 정도까지 "학습"한 후에는 매일 언어를 사용하면서 더 많은 것을 배우고 점점 더 많은 언어에 자신을 노출시킬 수 있습니다. 당신이 죽을 때까지, 당신은 여전히 ​​그 언어에 관해 알아야 할 모든 것을 알지 못하지만, 아무도 당신이 그 언어를 "학습"하지 않았다고 말하지 않을 것입니다.

제 생각에는 컴퓨터 언어가 있습니다. 유용한 프로그램을 작성할 수있을 때 C ++ 또는 Ruby와 같은 언어를 "알고"있다고 ​​말할 수 있습니다. 언어를 알고있는 정도를 수량화해야하는 경우 사람 언어에 사용하는 것과 동일한 용어를 사용하십시오. " 조금 C ++을 알고 있습니다 "또는 " 대화식 C ++을 알고 있습니다 "또는 " C ++에 능숙합니다 " 라고 말하면 긁어 모으기에 충분하거나 유용한 일을 수행하기에 충분하거나 전문가라는 것을 알 수 있습니다. 각기.


15
대화 적이고 유창한 용어 는 주관적이며 자연어에 적합하지만 컴퓨터 언어에 적용될 때 그 의미를 이해하기 어렵습니다. 여전히 주관적이지만 기능 적이고 관념적인 것이 더 잘 작동 할 수 있습니다. 기능적 의미는 유용한 구문을 작성하기에 충분한 구문을 알고 있음을 암시하지만 관용적 지식 을 갖는 것은 언어로 쓰는 방법을 알고있을뿐만 아니라 C #에서 사용 하는 것과 같이 언어 의 관용구 를 사용하기에 충분하다는 것을 의미합니다 using. 또는 b, a = a, b파이썬의 생성기. 그렇지 않으면 +1입니다.
마크 부스

13
@MarkBooth 시험 점수가 부족한 설명은 다소 주관적입니다. 요점은 대부분의 사람들이 컴퓨터 언어 지식에 대한 대략적인 지침으로 인간 언어 지식 수준에 대해 이미 알고있는 친숙 함을 사용하고 추가 조사를 유도하는 친근한 방법으로 수행하는 것입니다. 대화 형 C ++ 은 "기본 사항에 익숙하지만 고급, 모호하거나 까다로운 코드를 도와 주어야 할 수도 있습니다."의 약어입니다.
Caleb

3
나는 당신이 대부분 옳다고 생각하지만, 많은 사람들이 여전히 비참한 수준에 도달했을 때 자연 언어를 배웠다고 잘못 생각합니다. 그리고 그것은 프로그래밍 언어를 배운 사람들에게도 적용됩니다.
haylem

나는 당신의 대답이 완벽하다고 생각합니다. 심지어 언어 지식을 정량화하는 것이 얼마나 불가능한지를 보여줍니다. 실제로 유창함은 대부분의 원어민이 요구하는 것만 큼 많은 설명을 할 수 있다는 것을 의미하지만, 대부분의 원어민이 오래된 저술가들이 가지고있는 언어 지식의 10 분의 1을 가지고 있지 않다는 사실을 다루지 않습니다 , 해리 포터 또는 댄 브라운이 아닌 실제 오래된 스타일로 읽을 수 없음). 실제로 아무도 언어에 대해 언급하지 않았을 때 어떻게 해결하겠습니까? 실제로 프로그래밍의 생산성에 큰 영향을 미치는 경우는?
Morg.

1
@ 모그. 완전히 쓰레기. 프로그래밍은 컴퓨터에 무엇을해야하는지 알려주는 것만 큼 미래의 프로그래머 (자신 포함)와의 의사 소통에 관한 것입니다. 물론 간단한 코드 하나만 작성해도 의사 소통이 원활하지 않아도되지만 실제로는 미래의 코드 관리자에게 의도를 분명히하는 것이 컴퓨터가 올바른 일을하도록하는 것보다 훨씬 중요합니다. 어쨌든, 이러한 의견은 더 이상 대답을 개선하는 데 도움이 제공되지 않습니다, 그래서 우리는이를 취할 것을 제안 소프트웨어 공학 채팅 이 더 의논하십시오.
Mark Booth

25

누가 물어 보느냐에 따라 다릅니다

적절하게 구하는 사람은 자신이 "언어를 배웠다"고 말하는 사람에게 어느 정도의 기술이 기대되는지를 알고 있습니다.

기본적으로, 나는 사람들이 "X를 배웠습니까?"라는 질문에 대한 답을 판단하는 두 가지 고전적인 척도에 직면했습니다.

대부분의 얼간이에게는 포즈를 잡는 것이 까다로운 질문입니다. 이것은 이미 귀하의 질문에 대한 다른 답변에 의해 입증되었습니다.). 당신이 그것을 배웠다고 말하면 당신은 과제의 범위를 보는 데 실패하는데, 그것은 암묵적으로 "완벽"하고, 훨씬 더 나쁜 것입니다 : 당신은 겸손에 실패합니다.

대부분의 상사들에게, 당신은 그들의 문제를 해결할 수 있다면, "배운 것" 입니다. 당신의 코드가 컴파일되면 종종 기준이 이미 충족됩니다. 겸손하게 자신의 질문에 대답하면, 그는 또한 친척 일 수도있는 포즈를 취하는 사람에게 과제를 배정하게됩니다.

그래서 청중은 무엇입니까?


4
인터뷰에서, 당신은 그것을 알고 있다면 그것을 알고 있습니다. 직장에서 Google이 알고 있으면 알고 있습니다.
asfallows

3
면접에서 면접관이 넥타이를 착용하면 "알고있다", 그렇지 않으면 "알아야한다"를 정의하십시오.) 공정하게
말하면

18

저는 사람들이 "학습" 이라는 단어의 최종성에 초점을 맞추고 있다고 생각 합니다. 그것은 학습이 끝났다는 것을 의미합니다. 모두가 언급했듯이 프로그래밍 언어는 구어와 같은 살아있는 개체입니다. 예를 들어 C # 2를 완전히 익힌 사람은 LINQ, Lambdas, var키워드, 객체 / 컬렉션 이니셜 라이저 및 확장 메서드를 사용 하여 C # 3 을보고 이전 버전에서 배운 내용과 크게 달라진 것을 알 수 있습니다. C # 4 await, async키워드 및 기타 새로운 언어 구성 에서도 마찬가지입니다 .

그리고 우리는 여기서 구문을 이야기하고 있습니다. 우리는 대부분의 언어가 프레임 워크 와 짝을 이루고 있다는 것을 잊어 버립니다 . C #에는 .NET 프레임 워크가 있고 Java에는 루비, C ++, PHP 및 PERL과 마찬가지로 자체 프레임 워크가 있습니다. 언어의 틀을 어휘로 생각하면 언어 자체는 구문 일뿐입니다. 언어를 아는 것은 언어로 문장을 만드는 법을 아는 것을 의미합니다. 프레임 워크를 알면 언어로 자신을 잘 표현할 수 있습니다. 마지막으로 구문과 어휘를 알고 나면 "원어민"으로 코드를 작성하기 위해 숙어 를 배워야합니다 .

여러 수준의 학습이 있다고 말하고 싶습니다.

  1. Hello World (가장 기본적인 프로그램을 작성할 수 있습니다.)
  2. 능숙 (기본 프로그램을 작성할 수는 있지만 정기적으로 온라인 도움말을 참조해야 함)
  3. 유창함 (일부 참조가 필요한 고급 프로그램을 작성할 수 있습니다).
  4. 원어민 (최소한의 온라인 도움말로 고급 프로그램을 작성할 수 있으며, 코드는 다른 원어민의 코드와 구별 할 수 없습니다).

3
Nitpick : awaitC # 5에서 온 것으로 C # 4의 새로운 주요 기능은 dynamic입니다.
svick

네 말이 맞아 ... 나는 C #의 어떤 버전이 .NET의 어떤 버전과 함께되는지 계속 잃어
Michael Brown

7

언어를 배웠다고 거의 말할 수 없습니다. 그것은 당신이 그것에 대해 배우는 것을 의미합니다. 어리석은 일입니다.

구문 참조를 참조하지 않고 언어의 관용구를 맹렬히 어 기지 않는 코드를 작성할 수있을 때 언어를 사용하는 것이 좋습니다.


2
숙어는 변하고 스타일은 장소마다 다르며 실제로 언어 자체는 시간이 지남에 따라 변합니다. C ++을 배우기 전까지 C ++과 같은 언어를 "알거나"배웠다고 말할 수 없다면 실제로 C ++을 배웠다고 주장 할 수있는 사람은 거의 없습니다.
Caleb

1
@Caleb 정확하게.
Michael Brown

3
그렇게 배우면 어리석은 모국어조차 모릅니다 (최소한 대부분의 사람들에게도)
superM

@Caleb, 그보다 더 나쁘다. Carmack과 Torvalds가 지적한 것처럼 c ++의 많은 부분이 무시 될 때 더 낫다. 그래서 모든 cpp를 배운 것이 정확히 유익하지는 않다.
Morg.

3

이것은 의견 기반 요소에 가깝습니다. 모든 기술 용어에서 "학습"은 언어의 모든 것을 알고있을 것으로 예상되는 완전한 지식을 가지고 있음을 의미합니다.

그러나 프로그래밍 세계에서는 목표 / 작업을 완료하기 위해 언어로 유창하게 프로그래밍 할 수 있는지 여부가 더 중요하다고 생각합니다. 그것은 아마도 당신이 언어에 익숙하다면 의미 할 것입니다. 물론 몇 년이나 몇 년 동안 대학을 다니고 학위를 취득 할 수는 있지만, 그 사실 만 주목할 필요가 있습니까? 언어를 배웠다고 말할 수있는 시점을 정의합니다.


2

당신이 그 결함을 알기 시작할 때. 일단 언어를 배우기 시작하면 일반적으로 지금 배우는 일에 바쁘거나 언어가 실패하는 곳을 알아 내기 위해 많은 시간을 소비합니다 (물론, 부정적인 관점에서 배우기 시작하지 않는 한 언어의 악화 정도는 아닙니다) 지금까지 가장 좋아하는 언어와 비교됩니다). 나는 당신이 언어가 실패하는 영역을 심각하게 알기 전까지는 당신이 진정으로 언어를 모른다고 말하고 싶습니다.


나는 그것에 동의하지 않습니다. 당신이 배우는 첫 번째 언어 나 두 가지 언어가 사실 일 수도 있습니다. 무엇을 찾아야할지 모를 수도 있습니다. 따라서 가장 번거로운 디자인 실패조차도 올바른 일을하는 방법과 구별 할 수 없습니다. 몇 가지 언어를 배운 후에는 새로운 언어를 배우기 시작한 후 곧 언어 결함을 볼 수 있습니다. 그러나 개발 과정에서 잠시 동안 "다른"과 "잘못된"을 잘못 인식하게됩니다. 각 주요 유형 (절차, OO, 기능적, 선언적 ...) 의 몇 가지 언어를 배울 때까지 즉각적인 판단이 의심됩니다.
워렌 영

2

이것에 대한 나의 개인적인 대답은

  1. 간단한 프로덕션 수준의 프로그램을 작성하기위한 기본 사항을 알고 있습니다.
  2. 나는 단순 해 보였지만 그렇지 않은 문제를 해결하기 위해 최소한 3 시간을 보냈습니다.

거기서부터 나는 그것을 학습이라고 부르지 않고 숙달이라고 부릅니다.


1

애플리케이션 또는 컴포넌트가 메일을 읽을 수있는 시점 (예 : Zawinski 's law )은 다음과 같습니다.

“모든 프로그램은 메일을 읽을 수있을 때까지 확장을 시도합니다. 그렇게 확장 할 수없는 프로그램은 가능한 프로그램으로 대체됩니다.”Jamie Zawinski (이하“Law of Software Envelopment”)는 모든 유용한 프로그램이 툴킷과 응용 프로그램 플랫폼 ( 그는 메일러가 그것의 부작용 일 뿐이라고 말했다.

RSS가 "... RSS 피드를 읽을 수 있음"으로 인기를 얻었을 때 업데이트되었으며 요즘 "... Twitter 피드를 읽을 수 있음"으로 업데이트 될 수 있습니다. ;-)


0

나는 당신이 그것을 볼 수 없을 때 당신이 언어를 배운 것으로 생각합니다. 주기 및 데이터 액세스가 아니라 알고리즘의 워크 플로가 표시됩니다.

매개 변수 전달 및 배열 처리, 마술 매크로로는 트릭을 재생하지 않습니다. 자신의 코드를 친구 나 교사에게 보여줄 수있는 자체 마케팅 자료로 생각하지 말고 문제에 대한 이해와 컴퓨터에 대한 의사를 가장 읽기 쉬운 방법으로 표현하십시오.

"한 줄만 될 것"또는 "나는 바보가 아니며 연산자 우선 순위 ".

알고있는 클래스, 패턴 및 프레임 워크 API 수를 세지 마십시오. 이것이 인텔리전스, 참조 및 튜토리얼 및 Google의 목적입니다. 그러나 문제를 살펴보면 분할 할 수있는 부분과 해결해야 할 도구 및 알고리즘을 즉시 알 수 있습니다.

당신이 어떤 작품 이며, 우아 하고 작은 . 코딩을 즐기고 버그를 쉽게 찾을 수 있습니다. 그렇습니다. 마스터는 또한 사람이기 때문에 버그를 만듭니다. 그러나 코드 구조가 올바른 위치로 이끌 기 때문에 신속하게 찾을 수 있습니다.

그리고 마지막으로, 당신은 문제를 생각하고 분석하고 해결하는 법을 배웠습니다. 그들과 비교할 때 실제 언어는 보조 규칙이며 현재 규칙과 도구 상자입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.