프로그래밍 언어를 공부한다는 것을 부모님 께 어떻게 설명 할 수 있습니까?


64

나는 현재 컴퓨터 과학 석사를 마치고 있습니다. 프로그래밍 언어, 특히 형식 시스템에 관심이 있습니다. 이 분야에 대한 연구에 관심이 있었고 다음 학기에는 주제에 관한 박사 학위를 시작할 것입니다.

이제 실제 질문이 있습니다. 컴퓨터 과학이나 관련 분야에 대한 사전 지식이없는 사람들에게 내가하고 싶은 일을 어떻게 설명 할 수 있습니까?

제목은 부모님, 친구 등에 게 내가하는 일을 설명조차 할 수 없다는 사실에서 비롯된 것입니다. 예, "모든 요점은 소프트웨어 개발자가 더 나은 소프트웨어를 작성하도록 돕는 것입니다. " 라고 말할 수 있지만, 이것이 실제로 유용하다고 생각하지는 않습니다. 나는 중세의 누군가에게 자동차 정비사라고 말하는 것처럼 느껴집니다. 그들은 단순히 내가 말하는 것을 모르고 그것을 향상시키는 방법은 말할 것도 없습니다.

누구든지 현실과 좋은 유추를 가지고 있습니까? "a-ha"순간을 일으키는 계몽적인 예? 컴퓨터 과학 (학문적) 경험이없는 60 세 이상으로 짧고 간단한 코드 스 니펫을 실제로 보여줘야합니까? 그렇다면 어떤 언어를 사용해야합니까? 여기에 비슷한 문제가있는 사람이 있습니까?


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
DW

3
패널을 올바르게 이해하면이 질문에 downvote와 하나 이상의 닫기 플래그가 있습니다. 의견을 남기면 개선 할 수 있습니다. 여기에 잠시 동안 숨어 있었지만,이 사이트에 적극적으로 참여한 것은 이번이 처음이며 일부 정책에 익숙하지 않을 수도 있습니다.
effeffe


1
나는 왜이 질문이 특정 문제와 관련된 질문보다 더 많은 투표를했는지 이해할 수 없어서 더 유용합니다. 이 질문은 터무니없고 엄청나게 투표되었습니다. 놀랄 만한!
nbro

2
@ nbro 나는 그 질문에 대한 논쟁의 여지를 얻지 못하고 특정 질문이 다른 질문보다 "더 유용하다"고 어떻게 결정했는지 잘 모르겠습니다.
effeffe

답변:


59

몇 분이 있다면 대부분의 사람들은 종이에 두 자리 숫자를 더하고 곱하는 방법을 알고 있습니다. 그들에게 그렇게하도록 요청하거나 (필요하다면 할 수 있음을 인정하도록) 요청하여 체계적으로이 작업을 수행함을 인정하도록 요청 하십시오. 이 수가 9보다 크면 캐리 추가하십시오. 그들이 무엇을해야하는지에 대한이 설명은 알고리즘 의 예입니다 .

이것이 사람들에게 단어 알고리즘을 가르치는 방법이며, 내 경험상 이것이 가장 좋은 예입니다. 그런 다음 컴퓨터가 수행해야하는 더 복잡한 작업이 있다고 생각할 수 있으므로 컴퓨터에 이러한 알고리즘을 제공하기 위해 명확한 언어가 필요하다는 것을 설명 할 수 있습니다. 사람들이 생각을 다르게 표현하기 때문에 프로그래밍 언어 가 급격히 확산되어 왔기 때문에 실수를 저지르기 어려운 언어를 디자인하는 방법을 연구하고 있습니다.

이것은 매우 잘 알려진 상황입니다. 대부분의 사람들은 자신이 실행하는 컴퓨터가 프로그램을 실행하거나 해당 프로그램이 사람이 작성한 소스 코드이거나 컴퓨터가 소스 코드를 '읽을'수 있거나 산술과 연관된 계산 만이 컴퓨터라는 개념을 알지 못합니다. (그리고 데이터 이동 및 네트워킹 등).

저의 연구는 양자 컴퓨팅에 관한 것이므로 사람들이 저에게 무엇을하는지 물어볼 때 저는 그것을 설명하려고하지 않습니다. 대신 양자 물리학이 존재한다고 설명하고 (보통 슈뢰딩거의 고양이와 한 번에 두 곳에있는 것들에 대해 들었습니다)이 이상한 물리학 때문에 더 빠른 계산이 가능할 수 있다고 설명하려고합니다.

내 목표는 그 사람이 자신보다 더 지식이 많고 자신이 존재하지 않았던 세상에 대한 흥분을 느끼게하지만 지금은 그들과 친숙해 지도록하는 것입니다. 나는 그것이 나의 특정 연구 질문을 설명하는 것보다 훨씬 더 가치가 있다는 것을 안다.


27
카드 덱을 정렬하는 것도 알고리즘 개념을 도입하는 쉬운 방법입니다.
Morwenn

2
@Morwenn 사실입니다! 우리가 일상에서 실행하는 많은 알고리즘이 있습니다! 카드 취급은 알고리즘이며 트래픽은 많은 알고리즘 측면을 가지고 있지만 이벤트 기반이며 필수적이지는 않지만 요리는 자동 조종 장치에서 수행 할 때 알고리즘입니다. 내가 좋아하는 이유는 모든 사람들이 초등학교에서 같은 알고리즘을 배웠지 만 숫자 목록을 정렬하기 위해 사람들의 전략이 다양하고 체계적이지 않기 때문입니다. 한 벌의 카드가 어쨌든이하도록되어 주문 (그것은 마음 스페이드 전에입니까?)
Lieuwe Vinkhuijzen

개인적으로 양자 컴퓨팅에 대해 물었을 때 물리학을 완전히 피하는 경향이 있지만 일반적인 아이디어를 제시하려고 시도합니다 (양자 컴퓨터는 더 빠르거나 더 빨리 작동하지 않지만 일반 컴퓨터에서는 범위를 벗어난 방식으로 계산을 수행 할 수 있음). 그들이 어떤 식으로 물어 보면 SIMD 처리의 기본보기 (기본적으로 병렬 입력 데이터의 지수 크기에 액세스하기에 충분한 선형 자원)의 단순화 된 견해에 만족하는 경향이 있습니다. 결국 대부분의 알고리즘입니다.
Vee

당신은 단지 카드 이상으로 갈 수 있습니다; 나는 최근에 기본 삽입 정렬을 위해 너무 많은 것이 있기 때문에 생각조차하지 않고 정리 해야하는 용지 묶음을 정렬하기 위해 Quicksort의 변형을 사용하고 있음을 알았습니다.
JAB

@JAB 대단해! 그러나 아마도 당신은 이미 당신의 마음 뒤에 Quicksort를 알고있을 것입니다. 덧셈과 정렬을 설명 할 때의 장점은 모든 사람이 같은 덧셈 알고리즘을 가지고 있지만 평신도가 체계적인 정렬 알고리즘을 가지고 있지 않다는 것입니다. 반면에, 그것은 이점이 될 수 있습니다! 다른 알고리즘을 설명 할 수 있습니다. 이것은 cs 외부의 수학적 생각을 가진 누군가와 이야기 할 때 취하는 경로이며, 다른 시간 제한이있는 동일한 작업에 대해 다른 알고리즘의 개념을 넘어서며 하한이 어려운 이유입니다.
Lieuwe Vinkhuijzen

18

나는 이런 식으로 시도 할 것이다 :

프로그래머는 컴퓨터에게 수행 할 작업을 알려줄 수 있습니다. 그러기 위해서는 프로그래밍 언어를 사용해야합니다. 그것은 컴퓨터와 인간 모두가 이해하는 언어입니다. 예를 들어 Word 문서를 편집하고 키를 누르면 컴퓨터에서 누른 문자가 표시됩니다. 프로그래머가 다음과 같이 말하는 프로그램을 작성했기 때문입니다. 사용자가 "A"를 누르면 "A"를 문서에 넣습니다. 사용자가 "B"를 누르면 "B"를 문서 등에 넣습니다. 컴퓨터는 프로그래머가 작성한 프로그램의 규칙을 따릅니다.

때때로 프로그래머는 실수로 바보 같은 규칙을 씁니다. 어쨌든 컴퓨터는 어리석은 규칙을 따르려고하지만 잘못된 규칙을 따르는 경우 나쁜 일이 발생합니다. 예를 들어 Word 문서를 편집 할 때 갑자기 모든 것이 멈추고 컴퓨터가 더 이상 반응하지 않는 경우가 있습니다. Microsoft의 일부 프로그래머가 완벽하지 않은 프로그램을 작성했기 때문일 수 있습니다.

저의 작업은 다른 프로그램과 일부 수학을 사용하여 프로그램에 그러한 오류 및 기타 실수가 있는지 검사하는 방법을 개발하는 것입니다. 기본 아이디어는 실제로 프로그램을 실행하지 않고 프로그램이 실행될 때 어떻게 될지를 예측하는 방법을 알아내는 것입니다.

물론, 그것이 연구이기 때문에, 나는 한 번에 모든 것이 아니라, 이것의 작은 측면에 대해서만 노력하지만, 우리가 달성하려는 것의 큰 그림입니다.

필자는 해당 분야 (도메인 특정 언어)와 비슷한 스타일의 설명을 사용하고 있는데, "어떻게하면 컴퓨터를 사용하지 않아도 대화를 중단 할 수 없었습니다." 당신에게 "문제. 열쇠는이 경우 Word 문서와 같이 다른 사람이 관련시킬 수있는 예제에 도달 할 때까지 첫 두 문장을 가져 오는 것 같습니다. 회계사를위한 Excel, 보스를위한 Powerpoint 또는 게이머 나 웹 브라우저를위한 컴퓨터 게임 등과 같은 다른 사람에게 특별 사례를 제시하기위한 보너스 포인트.

이 피상적 인 수준을 유지할 필요는 없습니다. 당신 (그리고 다른 사람!)이 원한다면, 당신이 거기에서 정확히하고있는 일에 대한 세부 사항을 탐구 할 수 있습니다. 예를 들어 "현재 프로젝트에서 작년에 발명 한 것이 실제로 작동한다는 것을 수학적으로 증명하려고합니다. 즉, 프로그램이 실제로 의미하는 것과 프로그램이 의미하는 바를 매우 신중하게 정의해야합니다. 예측이 실제로 옳다는 것을 보여줄 수 있습니다. "


12

대부분의 사람들은 요리법을 이해합니다. 지침을 따르면 괜찮은 식사를 할 수 있습니다. 그러나 때로는 지침을 따르기가 어려울 수 있습니다. 예를 들어, perogies를 만들 때 Grandma 's Polish Perogies :

perogies를 요리하려면 : 가볍게 소금물을 끓인 큰 냄비를 끓입니다. 한 번에 하나씩 perogies를 떨어 뜨립니다. 그들은 정상에 뜰 때 행해진 다. 너무 오래 끓이지 마십시오. 슬롯 형 스푼으로 제거하십시오.

Yikes. 우리에게 할머니의 친절한 조언을 검토합시다. 한 번에 하나씩 떨어 뜨리십시오 ... 그래서 그들은 냄비에있는 시간이 서로 다릅니다. 알았다. 그들은 정상에 뜰 때 행해진 다 . '그들'은 몇 명입니까? 내가 올라갈 때 각각을 잡을 수 있습니까? 80 %가 상단으로 뜰 때까지 기다린 후 모두 가져 옵니까? 이것은 부정확합니다. 너무 오래 끓이지 마십시오. 너무 오래 걸리지 않도록 멍청해질 때를 어떻게 측정합니까? 5 개가 동시에 상단에 나타나면 모두를 가져올 시간이 있습니까?

그리고 날 믿어, 나는 내 하루에 많은 perogies를 망쳤다. 이것은 perogie cook이 전에 겪었던 심각한 문제입니다. 그러나 가장 기본적인 분석에서도 발생하는 이러한 문제에도 불구하고 사람들은 여전히 ​​똑같은 방법으로 페로를 만들 수 있습니다. 그러나 더 많은 배치의 perogies를 성공적으로 만들고 더 적은 배치의 perogies를 실패시키기 위해 우리가 할 수있는 일이 있습니까?

누군가가 레시피를 더 안정적으로 만드는 데 전문적인 사람이라면 웅장하지 않습니까? "우리는 perogies를 파이프 라인으로 만들어 물 밖으로 튀어 나올 수 있습니다!" 또는 "우리는 perogie에 특별한 염료를 첨가하여 당연히 먹을 수 있으며, 다른 색조를 부여하고 가장 어두운 염료를 가장 많이 습득 할 수 있습니다. 우리는이 레시피를 가지고 잠재적 문제를 해결할 수있는 전문가를 원합니다. 전 세계의 페로 기 요리사의 삶은 더 쉬울 것이며 개가 먹는 멍청한 파스타 감자 덩어리가 줄어 듭니다.

프로그래머는 항상 레시피를 따릅니다. 그러나 때로는 그들이 사용하는 장비, 사용하는 지침 및 그들이 사용하는 해석이 원하는 호화로운 식사를 만들기 위해 함께 모이지 않습니다. 고맙게도 프로그래머의 삶을 더 생산적으로 만들기 위해 경력을 바치는 사람들이 있습니다. 귀하의 경우 프로그래머가 사용하는 도구 중 하나 인 언어를 전문화하여 언어를 개선하려고 노력했습니다.


7

다음은 엄마에게 이것을 설명하는 방법입니다.

사람들은 프로그래밍 언어를 사용하여 컴퓨터에 명령을 내립니다. 컴퓨터가하는 모든 일은 프로그래머가 프로그래밍 언어로 작성한 일부 컴퓨터 코드를 통해 수행됩니다.

예를 들어, 버튼을 눌렀을 때 TV 채널을 변경하려면이를 위해 프로그래밍 언어로 코드를 작성해야합니다. 랩톱, 스마트 폰 및 컴퓨터와 관련된 모든 작업에 대해서도 마찬가지입니다.

프로그래머가 모든 프로그램을 작성하는 데 사용할 수있는 단일 프로그래밍 언어가있을 수 있습니다. 그러나 이것은 사실이 아닙니다. 모든 유형의 응용 프로그램에 대해 서로 다른 프로그래밍 언어가 있습니다.

일부는 웹 사이트를 구축하는 데 사용되고 다른 일부는 Microsoft Word와 같은 랩톱 응용 프로그램을 구축하는 데 사용됩니다.

다른 프로그래밍 언어가 많은 이유 중 하나는 일부는 다른 것보다 일부 작업에 더 적합하기 때문입니다. 또 다른 이유는 일부 언어가 다른 컴퓨터에서 사용되도록 설계 되었기 때문입니다. 따라서 항상 스마트 폰용으로 작성된 코드를 가져 와서 랩톱에서 실행할 수는 없습니다. 또한 일부 프로그래머는 여러 언어로 프로그래밍 할 수 있고 많은 언어가 신속하게 새로운 언어를 배우거나 학습 할 수 있지만 모든 프로그래머는 일부 언어를 다른 언어보다 더 잘 알 수 있습니다.

따라서 프로그래밍 언어는 컴퓨터를 작동시키는 핵심 기술 중 하나입니다. 잘 설계된 프로그래밍 언어는 프로그래머의 생산성을 크게 향상시킬 수 있습니다. 또한 보안을 개선하고 프로그래밍 오류, 버그 및 결함을 줄일 수 있습니다.

그리고 기본적으로 이것은 제가 연구하는 것입니다 : 프로그래밍 언어의 다른 부분이 프로그래머의 생산성에 어떤 영향을 줍니까? 특정 언어의 어떤 부분이 웹 사이트의 코드를 작성하기에 더 좋습니까? 왜 어떤 언어는 다른 언어보다 인기가 있습니까?

이러한 질문이 난해하고 평범한 사람의 일상 생활에서 멀리 떨어져있는 것처럼 보이지만 그 반대의 경우도 마찬가지입니다. 프로그래밍 언어에 대한 연구는 컴퓨터를 사용하는 모든 제품이나 서비스에 필수적입니다. 그리고 오늘날 그것은 거의 모든 것을 의미합니다.)


7

가장 좋은 방법은 인간 언어와 유추하는 것입니다.

프로그래밍 언어는 컴퓨터에 명령을 제공하는 데 사용됩니다. 인간 언어는 다른 사람들에게 아이디어를 전달하고 우리 자신의 생각을 형성하는 데 도움이됩니다. 사피어 - Whorf 가설은 사용하는 언어가 당신의 생각에 영향을 미치는 것을 말한다. (Sapir-Whorf 가설이 참이되는 정도에 대해서는 논란의 여지가 있지만, 프로그래밍 언어를 논의 할 때 그 사실을 받아 들일 수 있습니다. 그렇지 않으면 박사 학위를 포기할 수도 있습니다. 😜)

다양한 인간 언어가 있으며, 일부는 우리가 이국적이라고 생각하는 기능을 가지고 있습니다. 예를 들면 다음과 같습니다.

  • 일부 언어에서는 진술이 자신의 경험, 자신의 추론, 의견, 추측 등으로 인한 것인지 여부와 같이 모든 진술에서 증거 를 표시해야합니다 .
  • 어떤 언어 는 응집에 의해 큰 단어를 형성합니다. 각 단어는 문법적 역할에 대한 많은 정보를 인코딩하도록 고도로 수정 될 수 있습니다. 다른 언어 는 단어를 전혀 수정하지 않으며, 그 정보를 표현하기 위해 단어 순서 나 입자에 의존합니다.
  • 언어의 어휘 크기가 다릅니다 . 일부 언어에는 할례 만으로 번역 할 수있는 단어가 있습니다 (예 : 엄친아 ). 일부 언어에는 다른 언어가 빌려 올 정도로 좋은 표현이 있습니다 (예 : Schadenfreude).
  • 일부 언어 에는 왼쪽 / 오른쪽 개념이 없습니다. 북쪽 / 남쪽 / 동쪽 / 서쪽으로 모든 것을 표현해야합니다.
  • 일부 언어 에는 숫자가 없습니다. 언어는 또한 일반적인 색상 이름수에 따라 다릅니다 .
  • 언어는 표현형에 따라 다릅니다. 예를 들어, 음절 비율은 다양하며 일본어는 간단한 음절을 많이 사용하는 반면 중국어는 느리지 만 정보는 톤으로 인코딩합니다.
  • 언어는 정보 밀도가 다릅니다 . 중국어-영어-프랑스어 번역을 보면 중국어 버전이 종이에 매우 압축되어 있고 프랑스어가 가장 많은 공간을 차지한다는 것을 알 수 있습니다.
  • 영어와 같은 일부 언어는 무차별 적입니다. 누구나 다른 언어에서 자유롭게 단어를 빌려 영어로 번역 할 수 있습니다. 프랑스어와 같은 다른 언어에는 변화에 저항하는 표준화기구가 있습니다. 예를 들어 아이슬란드는 본질적으로 매우 보수적입니다.

거기에 가장 객관적으로 말하는 언어는? 대답은 수행하려는 작업에 따라 달라질 수 있습니다.

  • 라디오를 통해 비밀리에 의사 소통을한다면 Navajo 가 좋은 선택입니다. (좋아하는 "쓰기 전용"언어를 언급하십시오.)
  • 미래 세대에 경고를 쓰려고 노력하고 있고, 몇 천 년 후에 그 비문을 이해할 수 있어야한다면, 중국어를 사용하고 싶을 것입니다. 영어 (마지막 천년에 걸쳐 크게 바뀌었지만 매우 널리 알려져 있음) (C와 JavaScript는 아마도 "영원히"살 것입니다.)
  • 많은 호모 폰을 가지고있는 중국어는 치기에 좋습니다. (펄시)
  • 아마도 중립이 중요 할 것인데,이 경우 에스페란토를 선택할 수 있습니다. (자바는 휴대 가능하도록 설계되었으며 C는 덜 이식 가능합니다.)
  • 아마도 당신은 완전한 정밀도로 생각을 표현해야 할 것이며, 자연어로는 충분하지 않을 것입니다. 당신은 Ithkuil 에 의지해야 합니다 !
  • 문화적으로 큰 차이와 특정 단어가 포함 된 문화적 의미 때문에 일부 언어 쌍 (예 : 아랍어-영어 ) 간에 번역하기가 매우 어려울 수 있습니다 . 마찬가지로 일부 아이디어는 개념이 존재하지 않기 때문에 특정 컴퓨터 언어로 쉽게 표현되지 않습니다 (예 : 꼬리 재귀).

결국 컴퓨터의 모든 것이 기계 언어로 번역되지만 작업에 적합한 언어를 선택하면 소프트웨어의 생산성, 안정성, 성능 및 민첩성에 크게 영향을 줄 수 있습니다. 우리는 "심각한"프로젝트를 위해 Ada 또는 Java와 같은 구속력이있는 언어를 선택하고, 최대 위축을 위해 Ruby 또는 Perl을 선택 합니다. 데이터베이스를 쿼리 할 때는 SQL이 일반적인 언어입니다. 자신의 C 코드를 작성하는 것은 바보입니다.

이러한 비유를 바탕으로 함수형 프로그래밍, 형식 안전성, 형식 유추 등과 같은 아이디어를 몇 시간 동안 설명 할 수 있습니다.


1
이것의 한 가지 어려움은 일부 사람들이 자신의 자연 언어에 대해 실제로 반영한 적이 없다는 것입니다. 따라서 언어 예제는 프로그래밍 언어의 개념처럼 일부 사람들이 이해하기가 거의 어려울 수 있습니다. 그 사람이 (적어도) 이중 언어라는 것을 알고 있다면, 전망이 더 나을 것입니다 ....
TextGeek

@TextGeek 영어로도 방언이 있습니다. 사람들은 이중 부정 및 전치사와 같은 언어 규칙에 대해 논쟁합니다. 언어는 항상 논쟁의 여지가있는 방식으로 항상 진화합니다. 문자 메시지의 인기는 새로운 약어로 이어졌습니다. 미국 영어에서는 "-gate"접미사를 추가하여 명사를 스캔들로 바꿀 수 있습니다. 언어 혁신과 다양성을 높이기 위해 이중 언어를 사용해야한다고 생각하지 않습니다.
200_success

3
  • 컴퓨터 언어는 인간 언어와 다소 관련이 있습니다. 그들은 표준 / 공통 / 공유 단어를 사용합니다. 수천 개의 인간 언어, 일부 소멸 된 언어, 다른 언어가 활성화되어 있으며 시간이 지남에 따라 어휘와 사용법이 지속적으로 발전하고 있다고 생각하십시오. 어떤 사람들은 이전에는 표현할 수 없었던 개념을 표현하기 위해 새로운 유용한 단어를 만듭니다. 컴퓨터 언어와 인간 언어의 또 다른 겹치는 부분은 문법 입니다. 영어와 같은 일부 언어는 문법이 매우 복잡합니다. 모든 다른 시제 와 그것들을 지배 하는 복잡한 규칙 을 고려하십시오 . 다른 언어들도 같은 시제를 갖지 않습니다 . 또 다른 상관 관계는 말의 일부 와 관련이 있습니다.예를 들어 명사, 동사, 부사, 형용사 등의 범주 는 컴퓨터 언어의 유형 과 다소 유사 합니다. 이전에 고려되지 않은 다른 언어 범주의 언어로, 또는 다른 언어 등에서 나온 새로운 언어 부분의 조합으로 새로운 언어를 만드는 것을 상상해보십시오. 언어학은 예를 들어 Chomskian 언어 이론의 esp와 같은 컴퓨터 과학과 관련이 있습니다.

  • 소프트웨어 및 하드웨어는 종종 엔진기계 와 관련이 있으며 심지어 이름을 따서 명명됩니다. 복잡한 24/7 생산 시스템을 수정하는 것은 비행기가 비행하는 동안 엔진을 바꾸는 것과 같다는 오래된 소프트웨어 비유가 있습니다. 또한 제트 엔진은 매우 복잡하며 상호 교환 가능한 부품 의 대규모 정밀 사양이 필요 합니다여기에는 하드웨어를 제어하는 ​​컴퓨터 언어와 유사합니다. 제트 엔진을 만드는 방법을 정확하게 설명하는 문서의 모든 복잡성을 상상하십시오. 모든 부품, 구성 방법, 구성 방법, 조립 방법 등. 이들은 정확한 형식 / 구조 / 전통적인 규칙을 사용하여 엔지니어에 의해 작성 / 컴파일됩니다. 소프트웨어는 이것과 다소 유사합니다.

  • 기계, 과학 또는 수학 교육 또는 자녀가없는 사람이 기본 개념과의 여러 측면 이해할 수있는 튜링 기계를! 놀라운 창조물. 튜링이 타자기 및 / 또는 텔레타이프 머신에서 영감을 얻은 것으로 의심됩니다. 하나는 상태 테이블을 설명하고 곱셈을 계산하는 샘플 상태 테이블을 보여줄 수 있으며 누군가 Turing 머신의 youtube 애니메이션이 곱셈과 같은 기본 계산을 계산하는 것을 볼 수 있습니다. 상태 테이블 이 언어를 계산하거나 문자 그대로 결정할 수 있으며 입력을 말 그대로 단어 라고 합니다 . 실제로 튜링 머신 은 언어로 단어를 받아 들입니다.그런 다음 곱셈을 계산하는 두 개의 상태 테이블이 있지만 하나는 다른 것보다 훨씬 빠르거나 효율적이며 연구에는 더 나은 상태 테이블 개념을 찾는 것이 필요합니다. 상태 테이블을 효과적으로 구축하는 방법을 파악 하려면 대형 상태 테이블의 내용을 요약 한 프로그래밍 언어 가 필요 합니다 ! 컴파일러는 큰 상태 테이블로 프로그래밍 언어로 작성된 코드를 변환합니다.

  • 정렬 알고리즘은 컴퓨터 과학에 대한 훌륭한 진입 수준의 은유입니다. 각 정렬에 대해 다른 명령어 목록 ( 일명 알고리즘) 을 볼 수 있습니다 . 버블 정렬이 무엇인지, 삽입 정렬이 무엇인지 배울 수 있고, 카드 한 벌을 사용할 수 있습니다. 이제 다른 명령어 세트에 중점을두고 엄격한 구문 등을 가지며 조건부 논리, 루프, 변수 등의 기본 공통 / 구조 가있는 수학적 문장처럼 정확한 언어로 작성해야한다고 생각하십시오 . 이 정확한 사양의 기술은 컴퓨터 언어에 관한 것이라고 설명하십시오., 일부 다른 언어는 동일한 알고리즘을 생성 할 수 있지만 이러한 언어에는 심도있게 연구되는 미묘한 문체 변형이 있습니다.


1
왜 이것을 다운 보트합니까? 많은 통찰력이 있다고 생각합니다. 모든 요점에 동의하지는 않지만 여기에는 많은 가능성이 있습니다. +1
effeffe

3

당신은 단순히 "컴퓨터를 가르치는 사람들을 도와주고 있습니다"라고 말합니다

아이디어는 프로그래머가 컴퓨터로 프로그램을 사용하여 일을하도록 가르치고 당신이 그들을 돕는 것입니다. 컴퓨터에 대해 이미 알고 있다고 가정하면 효과가 있다고 생각합니다.


"컴퓨터에 대해 조금 알고 있다고 가정하면 효과가 있다고 생각합니다." 요점은 대답을주의 깊게 읽으면 컴퓨터의 실제 작동 방식에 대한 실마리가없는 사람들에게 내가하는 일을 설명하는 것이 주요 문제라는 것을 알게 될 것입니다 .
effeffe

@effeffe : 그러나 그들은 컴퓨터가 존재한다는 것을 알고 있습니까? 또한 컴퓨터 자체를 전혀 사용하지 않은 경우에도 "프로그램", "응용 프로그램"또는 "앱"이라고하는 것이있을 수 있습니다. 따라서 단순화를 위해 프로그래밍은 컴퓨터가 따를 수있는 지침을 작성하여 앱을 만드는 것입니다. 당연히 프로그래밍의 세부 사항 이나 개선 방법에 대해 이해하는 데 많은 시간과 지시가 필요 하지만, 컴퓨터와 프로그램이 시간이 지남에 따라 더 나아진다는 것을 알면 적어도 컴퓨터에 대해 "약간"을 알게됩니다.
Steve Jessop

3

비교를 사용하고 싶지 않다면 Lieuwe가 제기 한 "알고리즘"이 아이디어를 전달하는 것이 매우 훌륭하다고 생각하지만 인간과 컴퓨터 사이의 오해를 줄이고 싶다고 말할 수 있습니다. 결국, 당신은 언어를 다루고 있으며, 그것은 인간에게 매우 기본적인 것입니다. 그렇다면 왜 컴퓨터가 당신이 말하고 싶은 또 다른 마음 인 척하지 않습니까?

인간은 컴퓨터를 만들었으므로 컴퓨터의 정신이 어떻게 작동하는지 알고 있습니다. 그러나 컴퓨터는 보통 우리의 마음이 어떻게 작동하는지 "알지"않습니다. (또는 우리가 실제로 의도 한 것은 많은주기 동안 코드의 허풍 속에 행복하게 사는 복잡하고 정교하게 만들어진 버그를 작성할 때였습니다.) 따라서, 우리가 그들과 통신하는 데 사용하는 언어를 개선하는 것은 우리에게 달려 있습니다. 오해 가능성을 줄입니다. 그리고 그것이 당신이하는 일입니다. 물론 맞춤법 검사 나 문법과 같은 비유는이 맥락에서 매우 환영합니다.


3

다음은 유용한 두 가지 유추입니다.

  • 내 작품은 음악 표기법에 대한 새로운 접근 방식을 탐색하는 것과 다소 비슷합니다. ( ) 우세한 표기법 시스템은 상당히 정교하지만, 작곡가, 연주자에 대한 시간 / 노력 / 오류를 줄이거 나 우세한 시스템에서 어색하거나 표현할 수없는 것을 허용하는 대안을 탐색하는 것이 중요합니다. 심지어 다른 유형의 사고를 장려하기 때문에 새로운 작곡으로 이어집니다. (이것은 사람들이 새로운 것을 채택하도록 설득하는 데 어려움이 있다는 것을 이해하기 쉽게 만듭니다.)

  • 저는 업계의 사람들을 위해 더 나은 도구 를 디자인하도록 돕고 있습니다. 무선 드릴, 레이저 절단기 및 3D 프린터 (60 년 전에는 없었 음)와 같은 혁신을 통해 제조 산업의 사람들이 도움을받는 것처럼 소프트웨어 개발 산업의 사람들은 더 강력하고 더 정확하며 더 강력하거나 사용하기 쉬운 프로그래밍 언어 및 기능.


2

아마도 언어를 공부해야 할 이유가있을 것입니다. 그 이유를 사용하십시오. 예 :

컴퓨터와 응용 프로그램을보다 저렴하고 사용하기 쉽고 안전하게 만들려고합니다.

그것이 관심을 끌만 한 것이라면 조금 더 깊이 들어가십시오. 그러나 추론 거리를 잊지 마십시오. 대부분의 사람들은 학생의 기존 경험과 지식에서 너무 멀리 떨어진 것을 설명하는 데 큰 어려움을 겪습니다.

언어는 컴퓨터 사다리에 있습니다. 설명하려는 사람들은 알고리즘 이 무엇인지 알지 못하며 , 알고리즘을 나타내는 다른 방법이 다소 유용하다는 것은 훨씬 적습니다. 충분히 부드럽게 가면 무엇이든 설명 할 수 있지만 "프로그래밍 언어 RnD"와 같이 "깊게"설명하려는 경우 여러 계층을 거치도록 준비해야합니다. 설명하는 사람들이 이미 수학을 잘 다루는 데 도움이되지만 컴퓨터 지식만큼 드문 경우입니다. :)

유추를 쉽게하십시오. 그들이 돕고있는 것처럼 그들은 소리 만해도 내 경험에서, 그들은 일반적으로 혼란에 추가 당신이 그들이 큰 도움이 것 같아요. 프로그래밍 언어는 변호사가 말하는 것과 비슷하지만 프로그래밍과 변호사 모두를 아직 이해 하지 못하는 사람들에게는 그다지 도움이되지 않습니다 . 추가 도움이 필요하면 예제가 충분히 잘 작동하지만 설명하려는 사람 (그리고 정확히 무엇을 연구하고 있는지)에게 예제를 제공해야합니다.

어떻게 0으로 나눌 수 없는지 아십니까? 컴퓨터 가 0으로 나누 려고 시도 하지 않도록하기 위해 노력하고 있으므로 누군가 실수를 할 때 충돌하지 않습니다.


▲ 단계적이고 온화한 접근을 제안합니다.
PJTraill

1

나는 가장 좋은 유추가 당신이 말하고있는 사람에 맞춰져 있다는 것을 알았습니다. 그들은 화가입니까? 당신이하고있는 일이 어떻게 더 나은 브러시를 만드는 법에 대한 이론을 탐구하는 것과 같은지 토론하십시오.이 분야 만 600 년이 아니라 60 년입니다! 승마? 수년에 걸쳐 작업 별 말굽 개발과 비교하십시오.

그들이 실제로 더 잘 이해하고 싶다면, 내가 가장 좋아하는 방법은 세금 양식을 작성하는 방법과 각 줄의 지침에 대해 이야기하는 것입니다. 저는 20 세 이상의 대부분의 사람들이 IRS Form 1040에 대해 어느 정도의 경험을 가지고 있음을 알았습니다. 그리고 여러분이 작성하는 상자는 변수 할당에 관해 말하는 것과 아주 잘 어울립니다. 그런 다음 소프트웨어는 분당 약 20 억에 해당하는 것으로 나타났습니다. 컴퓨터 언어를 공부하고 있다면 사람들이 왜 더 나은 지시가 실제로 중요한지 이해하기 쉽습니다. =)

여전히 관심이 있다면 흐름 제어를 설명하기 시작하는 시점에 관한 것입니다. 일반적으로 Form 1040에 대한 흐름 제어에 대한 논의가 끝날 때마다 그들은 모두 흥분하기 시작하고 내 아이디어를 정부에 아직 팔았는지 묻기 시작합니다!

나는 종종 임베디드 시스템에 대해 이야기하기 때문에 때로는 빵 한 덩어리 (또는 500)를 요리하는 로봇과 Form 1040 비유를 병합 할 것입니다. 어떤 이유로 든 IRS 세금 양식에서 입에 좋은 맛을 남길 수있는 물건을 만드는 것이 어떤 사람들에게는 정말 힘든 일입니다.


1

부모님에게는 컴퓨터가 있습니다. 아마 하나는 아니지만 많은 것입니다. 데스크톱 컴퓨터 나 랩톱, 전화 또는 iPad가있을 수 있습니다. 그렇지 않은 경우 세탁기 나 비디오 레코드, DVD 플레이어 또는 컴퓨터가있는 물건이 있습니다.

그렇지 않다면, "죄송합니다.하지만 컴퓨터 없이는 완전히 삶을 살 수있었습니다. 그래서 제가하고있는 일을 설명 할 수는 없지만 세상은 변하고 있습니다. 당신은 저를 믿어야합니다. 내가 뭘하는지 알아

만약 그들이 어떤 종류의 컴퓨터를 가지고 있다면, "이것은 컴퓨터이며, 마술로만 작동하는 것이 아닙니다. 어떤 영리한 남자 나 여자가 컴퓨터 작동 방법을 알려주는 프로그램을 작성했기 때문에 효과가 있습니다. 이 영리한 남자와 여자는 정말 힘들고 내가하고있는 일은 그들이 일을 더 쉽게하도록 돕는 것입니다. "


-1

얼마 전 나는 컴퓨터 경험이 거의 없거나 전혀없는 사람들이 쉽게 이해할 수있는 프로그래밍에 대한 좋은 비유가 뜨개질 레시피를 쓰는 것이라고 결정 했다 .

좋은 뜨개질 레시피에는 동일한 명령어 목록에 여러 크기가 포함되어있어 루프와 if 문을 제공합니다. 뜨지 않는 사람들은 읽을 수 없으며 오류가 포함되어 있으면 잘못 정렬 된 패턴이나 여분의 슬리브가 생깁니다. 레시피 작성자로서 잘못된 스웨터를 기준으로 레시피가 잘못된 위치를 찾아서 수정하는 것은 사용자의 몫입니다.

그런 다음 "나는 뜨개질, 코바늘로 뜨개질, Nålebinding 및 유사한 방법으로 레시피가 어떻게 다른지 살펴보고"(실제로 하는 것에 대한 비유가 필요한 곳)를 배우는 예제를 사용할 수 있습니다 .


asker는 프로그래밍을 공부하지 않습니다. 그들은 프로그래밍 언어의 디자인을 연구하고 있습니다.
David Richerby

@DavidRicherby 이것이 조리법이 다양한 유형의 핸디 워크 를 찾는 방법을 살펴 보는 OP의 예를 사용하도록 제안한 이유 입니다. 분명히 이것들도 매우 다릅니다.
Thorbjørn Ravn Andersen

-1

마술이야!

기술적 배경이없는 사람들이 소프트웨어 / 프로그램 작성 / 소프트웨어 엔지니어링의 의미가 무엇인지 물어 보면 마법이 무엇인지 말해 줄뿐입니다. 마술사들은 특정 작업을 수행하기 위해 밀교 언어로 주문을 할 수 없으며 지팡이를 흔들고 마술 같은 일이 발생합니다. 나는 난해한 언어로 특정 주문을 내놓지 않고, 마우스를 흔들고, 마법 같은 일이 일어납니다 (관심되는 한).

그들이 확신하지 못하면, 나는 그들에게 스마트 폰을 켜고 스마트 폰의 어떤 것이 실제로 작동하는지 말해달라고 요청했다. 그들은 보통 말합니다. "저는 몰라요. 버튼을 누르면 물건이 생깁니다." 그런 다음 나는 그들에게 말합니다. "그렇습니다.하지만 실제로 무슨 일이 벌어지고 있는지 알고 있습니다. 해리 포터가 지팡이를 흔들며 말하면서 '호 커스 포커스'와 같은 말입니다." 이것이 완벽하게 합법적 인 설명이라고 생각하십시오.

거의 모든 사람이 해리포터가 누구인지, 무엇을하며 무엇을 특별하게하는지 알고 있습니다 (적어도 그는 마술사이고 마술로 강력한 일을 할 수 있음). 마술사들은 마법을 더욱 강력하게하기 위해 새로운 언어로 주문을 작성해야한다고 설명 할 수 있습니다. 좋아하는 소비자 기기에서 더 큰 마법을 생성 할 수있는 더욱 강력한 마법사를 생성하기 위해 더 강력한 마법 책을 만드는 과정을 연구하고 있다고 말할 수 있습니다. 다들 고맙습니다.

에픽 실패

그것이 실패하면, 나는 요리법 예제로 넘어갑니다. 솔루션의 불균일은 적어도 사람들에게 고양이를 껍질을 벗기거나 케이크를 굽는 방법이 여러 가지라고 가르쳐주기 때문에 이것은 프로그래밍을 그렇게 만드는 것의 일부입니다 교활한. 또한 사람이 CPU 위치에 놓 이도록하고 때로는 이해하지 못할 수있는 지침을 따르는 데 도움이됩니다 (대부분의 사람들은 베이킹 소다와 베이킹 파우더의 차이를 알지 못하며 조리법에 다른 이유가있을 수 있습니다).

막 다른 골목

저는 수학을 예로 사용하는 것을 좋아하지 않습니다. 수학을하려면 단계가 무엇인지 이해해야하기 때문입니다. 맹목적으로 지시에 따라 많은 수학을 할 수는 없습니다 (물론 가능하지만 인간이 일반적으로 배우는 방식은 아닙니다). 나는 평신도가 이해하기에는 너무 기술적이기 때문에 예를 들어 분류를 좋아하지 않습니다. 정렬 예제를 이해할 수있는 사람과 이야기하고 있다면 아마도 프로그래밍에 관한 아이디어를 이미 알고 있었을 것입니다.


1
나는 이것이 질문과 어떤 관련이 있는지 알지 못한다. 구체적으로, 유형 이론을 평신도에게 설명하는 방법을 묻는 질문이 있으며, 유형 이론 수학입니다.
David Richerby

아마도 슬프게도 아닐 수도 있지만 일반적으로 프로그래밍 은 전 세계 인구의 99 % 이상에게 닫힌 책입니다. 나는 프로그래머가 아닌 사람들이 프로그래밍없이 프로그래밍을 이해하도록 노력하는 데 오랜 시간을 보냈다. 다양한 유형의 시스템의 복잡함과 진미 함을 설명하는 것은 같은 사람들에게 아 원자 입자 물리학을 설명하는 것과 유사합니다. 눈이 흐려지고 아마도 공손 할 것입니다. 그리고 그것은 괜찮습니다-그들은 그것을 이해할 필요가 없으며, 모든 가능성에서 그들은 그것을 이해하지 못한다고 걱정하지 않습니다. 우리가하는 것으로 충분합니다. :-)
Bob Jarvis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.