몇 년 동안 프로그래밍을하면서 루비에서 C ++에 이르기까지 모든 것을 가지고 놀았습니다. 기본 구문 (루비)을 배우는 것부터 언어로 능력을 확장 한 몇 가지 주요 (나를 위해) 프로젝트를 완료하는 것까지 모든 것을 해냈습니다. 이러한 다양성 (그리고 진정한 언어를 배우는 것이 결코 멈추지 않는다는 사실)을 감안할 때, 언제 언어를 알고 있거나 배운 적이 있다고 말할 수 있습니까?
몇 년 동안 프로그래밍을하면서 루비에서 C ++에 이르기까지 모든 것을 가지고 놀았습니다. 기본 구문 (루비)을 배우는 것부터 언어로 능력을 확장 한 몇 가지 주요 (나를 위해) 프로젝트를 완료하는 것까지 모든 것을 해냈습니다. 이러한 다양성 (그리고 진정한 언어를 배우는 것이 결코 멈추지 않는다는 사실)을 감안할 때, 언제 언어를 알고 있거나 배운 적이 있다고 말할 수 있습니까?
답변:
어느 시점에서 영어 나 프랑스어와 같은 언어를 "학습"했다고 말할 수 있습니까? 나는 대부분의 사람들이 당신이 언어를 사용하여 의사 소통 할 수있을 때 당신이 언어를 배웠다는 것을 받아 들일 것이라고 생각합니다. 모든 단어를 숙지하거나 모든 관용구를 이해할 필요는 없지만 사람들이 일상적인 대화에 사용하는 언어의 대부분을 아는 것이 좋습니다. 언어를 그 정도까지 "학습"한 후에는 매일 언어를 사용하면서 더 많은 것을 배우고 점점 더 많은 언어에 자신을 노출시킬 수 있습니다. 당신이 죽을 때까지, 당신은 여전히 그 언어에 관해 알아야 할 모든 것을 알지 못하지만, 아무도 당신이 그 언어를 "학습"하지 않았다고 말하지 않을 것입니다.
제 생각에는 컴퓨터 언어가 있습니다. 유용한 프로그램을 작성할 수있을 때 C ++ 또는 Ruby와 같은 언어를 "알고"있다고 말할 수 있습니다. 언어를 알고있는 정도를 수량화해야하는 경우 사람 언어에 사용하는 것과 동일한 용어를 사용하십시오. " 조금 C ++을 알고 있습니다 "또는 " 대화식 C ++을 알고 있습니다 "또는 " C ++에 능숙합니다 " 라고 말하면 긁어 모으기에 충분하거나 유용한 일을 수행하기에 충분하거나 전문가라는 것을 알 수 있습니다. 각기.
using
. 또는 b, a = a, b
파이썬의 생성기. 그렇지 않으면 +1입니다.
누가 물어 보느냐에 따라 다릅니다
적절하게 구하는 사람은 자신이 "언어를 배웠다"고 말하는 사람에게 어느 정도의 기술이 기대되는지를 알고 있습니다.
기본적으로, 나는 사람들이 "X를 배웠습니까?"라는 질문에 대한 답을 판단하는 두 가지 고전적인 척도에 직면했습니다.
대부분의 얼간이에게는 포즈를 잡는 것이 까다로운 질문입니다. 이것은 이미 귀하의 질문에 대한 다른 답변에 의해 입증되었습니다.). 당신이 그것을 배웠다고 말하면 당신은 과제의 범위를 보는 데 실패하는데, 그것은 암묵적으로 "완벽"하고, 훨씬 더 나쁜 것입니다 : 당신은 겸손에 실패합니다.
대부분의 상사들에게, 당신은 그들의 문제를 해결할 수 있다면, "배운 것" 입니다. 당신의 코드가 컴파일되면 종종 기준이 이미 충족됩니다. 겸손하게 자신의 질문에 대답하면, 그는 또한 친척 일 수도있는 포즈를 취하는 사람에게 과제를 배정하게됩니다.
그래서 청중은 무엇입니까?
저는 사람들이 "학습" 이라는 단어의 최종성에 초점을 맞추고 있다고 생각 합니다. 그것은 학습이 끝났다는 것을 의미합니다. 모두가 언급했듯이 프로그래밍 언어는 구어와 같은 살아있는 개체입니다. 예를 들어 C # 2를 완전히 익힌 사람은 LINQ, Lambdas, var
키워드, 객체 / 컬렉션 이니셜 라이저 및 확장 메서드를 사용 하여 C # 3 을보고 이전 버전에서 배운 내용과 크게 달라진 것을 알 수 있습니다. C # 4 await
, async
키워드 및 기타 새로운 언어 구성 에서도 마찬가지입니다 .
그리고 우리는 여기서 구문을 이야기하고 있습니다. 우리는 대부분의 언어가 프레임 워크 와 짝을 이루고 있다는 것을 잊어 버립니다 . C #에는 .NET 프레임 워크가 있고 Java에는 루비, C ++, PHP 및 PERL과 마찬가지로 자체 프레임 워크가 있습니다. 언어의 틀을 어휘로 생각하면 언어 자체는 구문 일뿐입니다. 언어를 아는 것은 언어로 문장을 만드는 법을 아는 것을 의미합니다. 프레임 워크를 알면 언어로 자신을 잘 표현할 수 있습니다. 마지막으로 구문과 어휘를 알고 나면 "원어민"으로 코드를 작성하기 위해 숙어 를 배워야합니다 .
여러 수준의 학습이 있다고 말하고 싶습니다.
await
C # 5에서 온 것으로 C # 4의 새로운 주요 기능은 dynamic
입니다.
언어를 배웠다고 거의 말할 수 없습니다. 그것은 당신이 그것에 대해 배우는 것을 의미합니다. 어리석은 일입니다.
구문 참조를 참조하지 않고 언어의 관용구를 맹렬히 어 기지 않는 코드를 작성할 수있을 때 언어를 사용하는 것이 좋습니다.
당신이 그 결함을 알기 시작할 때. 일단 언어를 배우기 시작하면 일반적으로 지금 배우는 일에 바쁘거나 언어가 실패하는 곳을 알아 내기 위해 많은 시간을 소비합니다 (물론, 부정적인 관점에서 배우기 시작하지 않는 한 언어의 악화 정도는 아닙니다) 지금까지 가장 좋아하는 언어와 비교됩니다). 나는 당신이 언어가 실패하는 영역을 심각하게 알기 전까지는 당신이 진정으로 언어를 모른다고 말하고 싶습니다.
애플리케이션 또는 컴포넌트가 메일을 읽을 수있는 시점 (예 : Zawinski 's law )은 다음과 같습니다.
“모든 프로그램은 메일을 읽을 수있을 때까지 확장을 시도합니다. 그렇게 확장 할 수없는 프로그램은 가능한 프로그램으로 대체됩니다.”Jamie Zawinski (이하“Law of Software Envelopment”)는 모든 유용한 프로그램이 툴킷과 응용 프로그램 플랫폼 ( 그는 메일러가 그것의 부작용 일 뿐이라고 말했다.
RSS가 "... RSS 피드를 읽을 수 있음"으로 인기를 얻었을 때 업데이트되었으며 요즘 "... Twitter 피드를 읽을 수 있음"으로 업데이트 될 수 있습니다. ;-)
나는 당신이 그것을 볼 수 없을 때 당신이 언어를 배운 것으로 생각합니다. 주기 및 데이터 액세스가 아니라 알고리즘의 워크 플로가 표시됩니다.
매개 변수 전달 및 배열 처리, 마술 매크로로는 트릭을 재생하지 않습니다. 자신의 코드를 친구 나 교사에게 보여줄 수있는 자체 마케팅 자료로 생각하지 말고 문제에 대한 이해와 컴퓨터에 대한 의사를 가장 읽기 쉬운 방법으로 표현하십시오.
"한 줄만 될 것"또는 "나는 바보가 아니며 연산자 우선 순위 ".
알고있는 클래스, 패턴 및 프레임 워크 API 수를 세지 마십시오. 이것이 인텔리전스, 참조 및 튜토리얼 및 Google의 목적입니다. 그러나 문제를 살펴보면 분할 할 수있는 부분과 해결해야 할 도구 및 알고리즘을 즉시 알 수 있습니다.
당신이 어떤 작품 이며, 우아 하고 작은 . 코딩을 즐기고 버그를 쉽게 찾을 수 있습니다. 그렇습니다. 마스터는 또한 사람이기 때문에 버그를 만듭니다. 그러나 코드 구조가 올바른 위치로 이끌 기 때문에 신속하게 찾을 수 있습니다.
그리고 마지막으로, 당신은 문제를 생각하고 분석하고 해결하는 법을 배웠습니다. 그들과 비교할 때 실제 언어는 보조 규칙이며 현재 규칙과 도구 상자입니다.