프로그래밍의 과정은 수학인가요?

gurumong의 이미지

프로그래밍의 과정은 수학인가요?

안녕하세요 전 29세 남자이고 올해 방송통신대학교 컴퓨터과학과에 입학하였습니다
입학 이전에 독학으로 C언어만 조금 했구요
나이때문에 졸업을해서 관련 업체로 취직이 과연 가능할까 하는 고민을 하고있습니다
아 사실 이 이야기를 하려는건 아니구요

학과 학우분들중에 프로그래밍을 전혀 모르시는 분들이 많습니다
저 처럼 졸업후에 관련 업체에 취직하려는 목표가 있으신것도 아닌데도
꾸준히 책을 보고 열심히 하시는 열의에 대단한 감동을 받았습니다

저도 부족하지만 어려워하시는 프로그래밍에 대해 도움을 주고 싶어서
레포트의 문제를 코드로 직접 작성해서 풀어주지는 못하더라도
이건 이렇게 해야한다고 핵심적인 부분의 로직을 알려주었는데
잘 이해를 하시질 못하시더라구요

그래서 잠시 그쪽의 입장에서 생각해보았는데
생각해보니 저의 풀이방법이 어떠한 과정을 거쳐서 얻은것이 아니라
그냥 제 머리에 직관적으로 떠오른 방법을 그대로 풀이한것이더라구요
그러니 이 문제는 이러하니 이런식으로 해결해야한다라는식으로 제대로 설명하기가 참으로 난감했습니다
전 그냥 떠올랐던 방법이 어느정도 썩 괜찬을꺼 같아서 그걸로 풀이를 한것이니 어쩔수 없는것이었죠

이런식이라면 프로그래밍이 전혀 수학적이지 않은것 같은데요
제가 이렇게 생각하는데에 어떠한 부족함이 있는지 잘 모르겠습니다
분명 프로그래밍의 과정은 수학이 아닙니까?

inniskun의 이미지

냐옹..

눈에 보이는 모든것은 보이지 않는 것들로 이루워져 있다.
Nobody reachs the Truth~*

pinebud의 이미지

수학 역시 일종의 언어라고 생각합니다. 예를 들면 물리학은 수학을 언어로 많은 생각을 표현하는 것 같습니다. 반면에 프로그래밍은 머리속의 아키택쳐나 알고리즘을 프로그래밍 언어나 다이어그램 같은 언어로 끌어내는 과정같습니다.

A rose is a rose is a rose..

semmal의 이미지

수학적이기도 하고, 수학적이지 않기도 합니다.

폰 노이만 기계는 어떠한 상태를 가지고 있고,
그 기계에 유저(사람이나, 다른 기계, 또는 또다른 프로그램)가 명령을 내림으로써, 컴퓨터 내부의 상태를 바꿉니다.
바뀐 상태는 다시 유저에 의해서 확인이 가능하지요.
이렇게 명령과 확인을 꾸준히 내려서 원하는 답을 얻어내는 방식으로 진행됩니다.
내가 명령하고, 상대방의 반응을 들여다보는 식으로 진행되기 때문에, Imperative Programming이라고 합니다.

함수형 기계는 lambda calculus라는 수학적인 시스템에 의해서 돌아갑니다.
이 기계에 함수와 값을 넘기면, 이 함수를 규칙에 의해 식을 분해(reduction)해 나가면서 답을 도출해 냅니다.
이렇게 함수를 풀어나가는 방식을 이용해서, 값을 도출해내는 방식으로 진행되기 때문에, Functional Programming이라고 합니다.

이 두 시스템은 서로 다른 방식이지만, 같은 입력에 대해 같은 결과를 얻을 수 있습니다.

그리고 현대에 이르러서는 명령형 프로그래밍에 함수형 프로그래밍이 더해지고, 함수형 프로그래밍에 명령형 프로그래밍이 더해지고 있습니다.

어느 쪽이 더 좋은가라는 물음은 훌륭한 떡밥입니다만, 분야에 따라 기호에 따라 다르다고 보면 됩니다.
개인적으로는 IO와 User Interface 측면에서 명령형이 더 유리하다고 보고, 프로그램을 수행하고 풀어내는 과정은 함수형이 더 유리하다고 봅니다만,
누구나 다르게 생각할 수 있습니다.

어쨌든, 프로그래밍은 수학적이기도 하고, 수학적이지 않기도 합니다.

------------------------------
How many legs does a dog have?

tolkien의 이미지

대학와서 수학 과목만 2년정도 듣고나서
3년째 되니까 알게 되었던 것이...

1. 수학은 암기과목이다.
- 모르면 무조건 외운다. 풀이전체를...
- 프로그래밍도 처음에는 간단한 예제 또는 씀씀이를 외우는 것부터 시작한다.
2. 수학은 전혀 논리적이지 않다.
- 도무지 천재들의 생각을 따라가기 힘든 부분이 많다.
증명내에서 어느정도 가다가, 갑자기 기반으로 도약하는 ...
천재님들의 생각을 따라가는 것은 불가능하니 외우는 것외에는 답이 없다.

논리는 개뿔... 4년마치고 나면 증명을 어떻게 하면 쉽게 외우는가에 대한 요령만 생긴다.
- 프로그래밍도 개뿔... 유용한 routine을 머리속에 담고, 어떻게 써먹는가에 대한 요령이 생긴다.
3. 따라서, 국면 전환(?) 또는 논리 비약에 익숙해진다.
- 왜 그럴까? 고민 안함. 무조건 외운다.
- 프로그래밍도 대충 자세하게 뭐 따지지 않고, 기존 routine 또는 함수를 가져다 쓰고,
각 관계를 쓱쓱 엮는데 익숙해진다.
물론 왜 이렇게 해야합니까?라는 질문은 안한다. 모르면 외운다.

이런면에서 조금 유리한 것같습니다.

yojo1000의 이미지

옳지 않습니다.
수학이나 프로그래밍을 tolkien님처럼 암기로 때우시다보면 한계가 보이고 공부하기 싫어집니다.
이해를 해서 다른 문제에 적용할줄아는 능력을 길러야합니다.
수학은 사회, 역사, 또는 영어단어같이 무조건 외워야하는 분야가 아닙니다.

JuEUS-U의 이미지

- ㅅ-).........................................

chadr의 이미지

수학과 프로그래밍은 외우면 학교 점수는 잘 나오겠지만 현업에 나와서는 0점 맞을 확률이 높습니다.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

익명 사용자의 이미지

결국 외워서 점수가 잘나온다는 말도 현재 교육에 대한 문제인식에서 기인하군요.

cleansugar의 이미지

공식을 못 외우면 직접 재창안해야되는데 그건 학자급 실력이 있어야 한다는 뜻입니다.

어떤 종류의 기억상실증 걸리면 수학 못하는 것은 수학에 암기도 필요함의 증거 입니다.

기억은 모든 학습의 기본입니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

ydhoney의 이미지

수학에서 손 뗀지 10년이 되어가는데 와이프 수능준비 시키면서 조금씩 설명을 하기 시작해서 곧잘 미적분까지도 손쉽게 설명해내는 제 모습을 보고 놀랐더랍니다. 역시 억지로 외우지 않고 공부했던게 남아있었는지..:-)

그래서 혹시나 하고 대학 미적분 교재도 다시 슬쩍 봤는데..당시에 1학년 1학기 미적분은 공부에서 아예 손 놓고 일만 하던 시절이라 B학점 나오고..1학년 2학기 미적분만 A+이었는데..하여간 지금 다시 보니까..당시에는 뭐 이래 이러면서 화냈는데 지금은 그냥 편안하게 "아 당연히 이렇지.." 하고 보게 되더군요. ^^

warpdory의 이미지

아니 언제 결혼했어요 ?


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

ydhoney의 이미지

식은 안하고 법적으로만 질렀죠. 좀 됐어요 =3

36311의 이미지

1. 예전에 방송대 전산학과 강의를 TV로 잠깐씩 봤었는데요, 제 느낌으로는 수업 내용만 따라가면 세계 어디에 내놔도 부족함이 없는 프로그래머가 될 거 같았습니다. 오히려 자신이 가지고 있던 작은 지식이 방해가 될 수도 있습니다.

2. 수학이나 기타 자연과학, 인문학은 추상적인 차원의 문제를 다룹니다. 그에 비해 전산은 순차적인 처리로 구현합니다. 물론 상호 영향을 줄 수는 있습니다만, 전산에서 수학이 필수라고 하기는 어렵다고 봅니다. 단, 전산에서 다루는 주제, 예를 들자면 제작해야할 프로그램이 수학에 대한 이해가 필요한 것일 경우가 많습니다. 그러나 역시 전산 자체를 이해하는데 수학이 필요한 것은 아닙니다. 목수일에 역학을 꼭 알 필요는 없다랄까요.

* 포럼 주제와 무관한 신변잡기를 반복해서 올리지 맙시다.
* 질문 게시판 만이라도 익명 글쓰기를 막아야 한다고 생각합니다.

snowall의 이미지

저는 수학 증명하듯이 프로그램을 만듭니다. 도달해야 할 목표 함수를 두고, 그 함수를 여러 단계로 쪼개서 각 단계별로 다시 함수를 만들죠. 만약 각각의 함수들이 모두 잘 작동한다면(=증명되었다면) 전체 함수도 잘 작동할겁니다.

프로그램을 만들 때 수학을 배운 것이 도움이 되는 경우가 많네요. 테크닉보다는 사고방식 측면에서요

피할 수 있을때 즐겨라! http://melotopia.net/b

qustus의 이미지

문제에 대한 접근법을 찾는 것은 직관적일 때가 많은 거 같습니다.
구체적인 해결책은 논리의 산물이고요..

ozhondk의 이미지

프로그래밍은 학문이 아닙니다. 수학은 학문입니다. 전산학같은 학문입니다. 전산학과에서는 프로그래밍은 하나의 실습과정일 뿐입니다. 전산학과 교수가 프로그래밍을 잘 한다고 생각하시나요? 웬만한 학생보다 못 합니다.

집 잘 짓는 목수가 건축학을 잘 알고 있다고 생각하시나요? 건축학에 일가견 있는 교수가 망치와 끌을 잘 사용할 수 있다고 생각하시는 것은 아니겠죠.

제가 아는 프로그래밍의 대가는 다른 분야도 그렇듯, 룰에 얽매이지 않고 프로그래밍에 많은 시간을 투자한 분들입니다. 그중에도 창의력이 풍부한 사람들은 명인이 되는 것이구요. 목수도 중급,상급이 있듯이요.

이게 제가 4년동안 전산학을 공부하고 얻은 결과입니다.

지금 어떤 일 하고 있냐구요? 전기공입니다. 전기배선하는 전기공말입니다.

그래서 수학은 암기과목이다라고 말씀하신 분의 진실된 마음을 잘 알고 있습니다.

ozhondk의 이미지

스스로에게 프로그래밍일을 좋아하는지 물어보시면 됩니다.

한국에서 프로그래밍 일을 하시는 많은 분들이 전산학을 공부한 분들은 아닙니다. 또 목수로 예를 드는데, 목수 되기 위해서 꼭 건축학을 배워야 하나요? 아니거든요.

빌게이츠가 전산학을 배웠나요? 안철수씨가 전산학을 배웠나요? 아니거든요. 그냥 직관적으로 프로그래밍을 하세요. 굳이 수학적으로 하실 이유가 전혀 없습니다. 그렇게 하실수록 창의성은 떨어지게 되어 있습니다.

퀘이크의 이미지

저도 프로그래밍 이제 본격적으로 공부하기 시작했어요. 아무래도 비슷한 상황에 처해 있는것 같은데, kldp에서 같이 동맹 맺읍시다. 컴퓨터공학과라니 부럽네요. 한번 인턴일을 한번 해보시거나 회사에서 알바해보세요. 그럼 흐름을 알 수 있지 않을까요?

ujuc의 이미지

저는 그냥 좋아서 공부하고 지금 c를 가지고서 이리저리 뒹굴고있지만요..^^..

수학을 해서 문제를 푼다는 과정보다는 그 논리적인 방법으로 적고 있다고 보면 될것같아요..
단지 그 수식방법이 얼마나 해봤냐에 따라서 변하지만요^^..

리눅스를 사용합니다.
프로그램을 배우고 있습니다.
리눅스가 편합니다.ㅡ.ㅡ;;;

silveracy의 이미지

깊이 파다보면, 결국 수학이 필요하게 됩니다.

어떻게 줄이거나, 원리를 찾거나, 일반화 시키거나 하는 대부분의 문제에 있어서 수학이 필요하게 되고,
이것은 효율로 이어집니다. 전 수학공부 제대로 안해서 후회하고 있습니다. ㅠ

뭐 대충 코더 하고, 내가 만들고 싶은거 대충 만들면 된다 그러면 뭐 공부 안해도 됩니다만,

효율적인 프로그래밍, 계획적인 프로그래밍, 제대로 된 알고리즘 이런거 공부할려면 수학공부하십시오.

lovewar의 이미지

전 프로그래밍이란것을 자료처리라고 이해합니다.

자료를 처리하는 방식은 꼭 수학적일 필요는 없지만 논리 또는 명세서등이 필요로 하는 일이지요.

일을 하는데도 절차가 있듯이, 프로그램밍하는데도 각자의 절차가 있지 않을까 생각합니다.

그분이 어떤 경험을 갖고 있는지를 먼저 이해한다면 설명을 좀더 잘할수 있지 않을까 하는 생각을 합니다.

-- 덧붙이는글 --
처음 접할때는 이해가 안되는 부분들이 참 많았던 것 같습니다.
왜 이런 자료형을 사용해야 하는지, 왜 메모리에서 자료를 가져와야 하는지..
왜 이런 로직을 사용해야 하는지 등등.. 참 많은것이 이해되지 않았던 기억이 나는군요.

익명 사용자의 이미지

1. 수학 그 자체를 계산하는 프로그램 (e.g. wolframalpha, matlab, etc)
-> 미적분을 못하는데 미적분 계산기를 만들 수 있을까요? 벡터의 개념 없이 벡터 계산기를 만들 수 있을까요?

2. 많은 연산을 필요로 해서 마구 짜면 하나 처리하는데 수십만년씩 걸리는 프로그램 (e.g. 거의 모든 종류의 시뮬레이터, DB, 이미지/영상/사운드 처리, 암호화, etc)
-> 사실 아주 간단한 데이터를 처리하는 프로그램이 아니고서야 거의 대부분의 이 항목에 해당됩니다만,
현실에서는 이런 부분을 라이브러리 또는 기성화된 솔루션의 사용으로 커버하죠.
문제가 되는 것은 이러한 기성화된 솔루션이 커버해주지 못하는 부분을 직접 만들어야 할 때가 되겠습니다.

물론 라마누잔 타입의 사람들은 수학적 베이스 없이 짜는 것도 가능하다고 생각되고,
대부분의 프로그래머들은 직접적으로 이러한 것들을 설계할 능력이 없지만 밥은 다 먹고 삽니다.

thepath의 이미지

우선 컴퓨터 프로그래밍의 세계에 오신 것을 환영합니다.
프로그래밍이나 수학은 사유의 산물이라는 공통분모가 있습니다. 수학에서 간결하고 여러 현상을 잘 설명하는 수식을 아름답다라고 말 할 수 있다면 군더더기없이 잘 짜여진 코드도 아름답다라고 말 할 수 있습니다. 백줄의 주석보다 한 줄의 코드를 읽고 생각할 수 있다면 더 바랄게 없지요. 수학도 연습문제를 풀어보면서 이해하듯이 프로그래밍도 흔히 말하는 삽질! 실행해보고 오류발생하여 실패하면 다시 시도해보는 무모하다싶은 도전정신이 필요합니다.
학우들에게 설명해보면 자신이 짠 코드의 버그를 발견할 수도 있고 더 나아가 페어 프로그래밍도할 수 있겠지요.

neogeo의 이미지

로직 만드는거 만큼이나, 디버깅 기술 타이핑 기술 툴 다루는 기술이 중요합니다. 프로그래머라면 자신의 사고 속도에 방해받지 않을정도의 툴에 익숙함도 지니고 있어야 제대로 개발 할 수 있죠.

결국 반복 연습과 새로운것을 자꾸 써보는 수 밖에 없습니다.

Neogeo - Future is Now.

angpang27의 이미지

적극추천합니다요

고통이 지천에 있다한들 어이해 멈출수있더냐

interoasis의 이미지

우리과 교수님이 자주 하시는 말씀이 있죠.
너희는 코더가 되러 여기온게 아니라 설계자가 되려 여기에 온거다.

코더의 경우는... 모르겠습니다. 수학이 필요한지 안한지,, 하지만 학부의 커리큘럼을 차근차근 밟아가고 있는 제 입장에선 설계자에게 수학은 필수불가결한 요소라고 생각됩니다. 우리학교 커리큘럼에선 4년내내 수학과목이 한자리이상씩 차지하고 있습니다. 그리고 그게 어떻게 컴퓨터라는 종합적인 분야에 적용되어가는지도 보여주죠.

그래서 1학년때 미적분을 등한시해버린 저는 요즘 눈물이 마를날이... 아, 이게 아닌데..-_-;

ozhondk의 이미지

설계를 잘 하려면, 구현을 잘 하는 사람이 설계를 해야 하는 법입니다.

코더와 설계를 구분지으려 하지 마세요. 저도 그 말에 속아 결국 실패한 프로그래머가 되어 버렸습니다. 교수의 자리에서 하는 말을 학생의 입장에서 이해하면 안 됩니다.

semmal의 이미지

완전히 동의하기는 힘드네요.

구현을 잘 하는 사람 모두가 설계를 잘하지는 않습니다.
설계를 잘하는 사람은 보통 구현을 잘하기는 합니다만,
실제로 설계를 잘 못하는 사람이, 설계를 잘하는 사람보다 더 빠르게 프로그램을 만들어 내기도 합니다.
문제는 더 빠르게 만들지만 고치기는 더 힘든 경우도 많습니다.
바로, 설계가 잘못되었기 때문에 말이죠.

어쨌든 제 경험상, 구현능력과 설계능력은 서로에게 도움을 주기는 하지만 원래 다른 능력이라고 봐요.

SICP를 보면, 프로그래밍과 수학은 둘 다 요약(추상;abstraction)을 통해서,
복잡한 문제를 더 간단하게 만들면서, 문제를 풀어 나갑니다.
또한, 프로그래밍과 수학은 둘 다 논리적인 사고방식으로,
여러 문제간의 복잡한 관계를 명확하게 표현하는데 도움이 됩니다.

프로그래밍에서 요약을 잘하는 사람은,
모듈을 잘 만들거나, 오브젝트를 잘 만들거나, 클래스를 잘 만들어냅니다.
프로그래밍에서 논리적인 사고를 잘하는 사람은,
서로 다른 모듈, 오브젝트, 클래스간의 관계를 잘 정의할 수 있습니다.

결과적으로 방대한 양의 프로그램이라도,
기능이나 의미에 따라 잘 묶여있는 상태로 만들어지고,
각각의 다른 묶음들과의 관계도 깔끔하게 정리가 되어,
간단하게 추적을 하거나 수정을 할 수 있게 됩니다.

전, 설계를 잘하기 위해서, 요약과 논리를 익히기에 "충분할 정도의" 수학 지식은 필요하다고 봅니다.

------------------------------
How many legs does a dog have?

ozhondk의 이미지

semmal님의 수준에서 말하는 설계가 아니었습니다. 오해 없으시기 바랍니다.

제가 학생때, 프로그래밍의 중요성을 간과한 적이 있습니다. 그 때가 생각나서 댓글을 단 것입니다. 학생이라면 공부한 내용들을 정리차원차 꼭 프로그래밍 해보는 습관을 기르는 것이 중요할 것 같습니다.

ozhondk의 이미지

저는 잘 모르겠습니다.
구현을 많이 해봐야 설계능력이 생긴다라는 말도 있고 해스리..

semmal의 이미지

와우에 비유하자면, 닥치고 렙업하는 사람과, 퀘스트 동선을 잘 이해해서 근방의 퀘스트를 받아서 한방에 처리하는 사람의 차이입니다.
퀘스트 동선과 맵위치, 퀘스트를 하기 위한 몹을 알아야, 후자의 행동을 할 수 있습니다.
물론, 저렙은 아는 것이 없어서 후자의 행동을 할 수 없습니다.
하지만 고렙이라고 전부 다 후자처럼 생각하지는 않지요.
한때, 닥치고 렙업하는 행동이 필요하기는 하지만, 그건 필요조건일 뿐이라는 말이지요.

와우와 프로그래밍의 차이점이라면,
와우는 퀘스트동선을 가르쳐주면 충분히 써먹을 수 있을만큼 익히기 쉽지만,
프로그래밍은 대단히 복잡하고, 외우는 게 거의 불가능합니다.

그렇기 때문에, 수학적인 개념이 잡혀있는 사람이,
복잡한 프로그램에서 패턴을 찾아내거나, 복잡한 개념을 보다 단순한 개념으로 만들어가는데 유리하다고 봅니다.

------------------------------
How many legs does a dog have?