BestProgrammer Conjecture
- 임의의 주어진 문제가 컴퓨터를 이용해서 풀 수 있는 것인지 없는 것인지 가장 빠른 속도로 알아낸다.
(->) discrete space에서 finite time, finite resource를 변수로 하는 함수의 값을 알아낸다.
- 풀 수 있다는 것을 알았을 때, 그 문제를 풀 수 있는 최적의 알고리즘을, 최고의 속도로 개발한다.
(->) 주어진 문제를 정의하고, 그 정의에 맞게 알고리즘을 연역한다.
- 조금의 실수도 없이 그 알고리즘을 최고의 속도로 구현해낸다.
(->) 알고리즘을 프로그램으로 바꾼다.
- 변경 사항이 있을 경우에는 최초로 돌아가서 다시 문제를 풀어 낸다.
(->) Feedback이 있다..
BestProgrammer는 이상의 조건으로 정리할 수 있고, 게다가 온갖 사회-문화적인 요소와 심리학적 요소도 그렇게 추상적이고 오직 뉴런만이 접근할 수 있는 분야는 아니다. 분명 우리 사회엔 UI에 대한 연구나 기준, 가이드라인이 있고, 그 결과 제시되는 요구사항도 꽤나 자세하다. 그런 조건들을 충족시킴으로서 오히려 (인간이 직접 하는 것보다) 쉽게 인격이 없는 어떤 것이 인간에게 편리한 프로그램을 만들 수 있을지도 모른다. --kz
직관적으로 BestProgrammer는 존재할 수 있다. 일단 Programming을 하는 행위를, 주어진 조건에 대해서 Sequence Of Instruction을 찾는 행위로 생각하면, NP-Hard, NP-Complete 정도의 Complexity를 갖는 문제로 생각되며, 이러한 문제를 완벽하게 풀어내고, 이에 대해 누군가 요구사항을 바꾼다고 해도 군소리없이 처음부터 다시 시작해나가는 그러한 프로그래머가 있다면,, 그가 바로 BestProgrammer다. TheBestProgram이 있다고 말하기는 힘들다. 왜냐하면, 언제나 바뀌는 요구사항과 새로운 도전이 존재하고 있기 때문이다. --naya
BestProgrammer가 무엇인지 정하기 위해서는 Programmer를 정의하고, Best의 기준을 정해야 한다고 생각합니다.
--최종욱
- Programmer를 일반론적인 문제 해결자로 정의하고, 각 기준(요구사항)은 상황에 따라서 다르다고 본다면 BestProgrammer는 존재할 수도 없으며, 있다고 해도 여럿일 것입니다.
- Programmer를 Program을 만드는 사람이라고 하고, Program이 수학과 같이 정해진 (또는 예측가능한) 입출력이 있는 작업단위이며, 기준도 객관적이라면 BestProgrammer가 존재한다고 봅니다.
--최종욱
TheBestProgram은 당면 문제를 해결하면 그만입니다. 전자든 후자든 사람이 치열하게 고민하는 과정을 시뮬레이션하는 프로그램이라면 근거 자료에 입각해 사람이 내리는 최적 판단과 유사한 판단을 내릴 수 있을 겁니다. 최적 답이 여러 개라면, 사실 그 답을 도출할 때까지 따른 논리가 여러 개인 셈이죠. 간단한 문젭니다. 일반적인 수론이라는 전제를 주고 1 두 개와 더하기란 동작을 지시하면 2가 나옵니다. 왜 1+1이 2뿐이냐고 묻는다면, 그건 유클리드라는 전혀 다른 전제를 도입한 논리이지 이전의 2가 나오는 논리나 논리 해결자에 문제가 있는 게 아닙니다. 물론 답은 하나가 아닙니다만, 한 논리에는 한 귀결만 있습니다. --kz
압축 프로그램에서도 rar은 오래 걸리지만 압축률이 좋고, zip은 짧지만 압축률이 약간 떨어집니다. 어떤 사람은 rar을, 어떤 사람은 zip을 좋아합니다. 이런 사례는 상당히 많다고 봅니다. 그리고 kz씨의 한 귀결만 있다는 말과 대치된다고 생각합니다. 어떻게 생각하십니까? --최종욱
rar과 zip의 압축 논리가 다르죠. --kz
그렇다면, 압축의 최고 프로그래머보다, rar이나 zip의 압축 논리를 잘 구현하는 최고 프로그래머가 있다는 말씀이십니까? 최고의 요리사보다는 세계에서 최고로 붕어빵을 빨리굽는 사람이 있다는 말씀으로 이해해도 되련지요. --최종욱
(지금 문맥이 어디인지 모르겠습니다. naya님이 언급하고 kz가 부연한 사람이 아닌 best programmer에 관해 얘기하는 게 맞습니까? 사람이 예술적인 코드나 환상적인 알고리즘을 짤 수 있는가는 여기서 전혀 고려할 사항이 아닙니다.) ZIP이 쓰는 압축 논리를 확실하고 빠르게 알고리즘으로 만들어내는 (사람이 아닐 수도 있는) 프로그래머는 가능하다고 봅니다. (이는 맨 위에 있는 naya님 글이 이미 전제하고 있죠) 그리고 물론 최고의 요리사란 건 없습니다. 호텔 요리장을 데려다가 길가 빵틀 앞에 세워두면 처음부터 귀신같이 알맞게 소를 넣고 탁탁 잘 뒤집으리라곤 생각할 수 없습니다. 퀘이크를 만든 카멕을 데려다 전혀 생소한 오라클 DB를 만들라고 하면 (굉장한 천재라니까 보통 사람보다야 낫겠지만) 처음부터 잘 하리라곤 생각할 수 없습니다. --kz
최고의 프로그래머를 판단한다는 것은, 그 프로그래머가 미래에 어떤 요구조건이 주어졌을 때 다른 어떤 프로그래머보다도 완벽하게 구현해낼 수 있다는 것을 의미한다. 미래는 예측할 수 없으므로 이 개념은 모순이다. 과거에 어떤 프로그래머가 최고의 프로그래머였는지를 판단한다는 것은, 같은 요구조건이 주어졌을 때 다른 어떤 프로그래머보다도 완벽하게 문제를 해결해냈음을 판단할 수 있다는 것이다. 모든 프로그래머는 서로 다른 요구조건을 대면해야 하고 서로 다른 요구조건을 구현해야 했으므로, 이 개념 역시 모순이다. --아무개
프로그래머에 대한 판단은 프로그램으로 평가 받는것이 옳다고 생각 합니다.
결국 최고의 프로그래머는 코드로 평가를 해야 겠지요.
그렇다면 좋은 코드란 오랫동안 다듬어진 코드라고 생각 합니다.
결국 오랫동안 다듬어질수 있는 가치있는 코드가 되기 위한 조건은
기계만이 아니라 사람도 잘 이해 할수 있는코드,
사람에게 유익한작용을 하는 코드 라고 생각 합니다.
피드백 하고도 관계가 있지만
기계가 코드를 생산해 내던 인간이 코드를 생산해 내던
단번에 위대한 코드를 생산해 낼수는 없으리라 생각 됩니다.
코드는 누구나 짤수 있지만 생명력있는 코드는 누구나 만들지 못하겠지요. -기상원
결국 최고의 프로그래머는 코드로 평가를 해야 겠지요.
그렇다면 좋은 코드란 오랫동안 다듬어진 코드라고 생각 합니다.
결국 오랫동안 다듬어질수 있는 가치있는 코드가 되기 위한 조건은
기계만이 아니라 사람도 잘 이해 할수 있는코드,
사람에게 유익한작용을 하는 코드 라고 생각 합니다.
피드백 하고도 관계가 있지만
기계가 코드를 생산해 내던 인간이 코드를 생산해 내던
단번에 위대한 코드를 생산해 낼수는 없으리라 생각 됩니다.
코드는 누구나 짤수 있지만 생명력있는 코드는 누구나 만들지 못하겠지요. -기상원
Program을 컴퓨터를 원하는 동작을 하도록 세팅하는 고전적인 의미에 초점을 두고 Programmer를 그 행위를 하는 사람으로 본다면 Best Programmer란 주어진 컴퓨터로 필요한 계산을 가장 효율적으로 처리하는 사람이겠죠. 즉 요구되는 h/w, 요구되는 시간, 요구되는 자금 하에서 요구하는 output을 산출하는 사람이겠죠.
처음에 예기된 조건은 Programmer보단 Computer Scientist에게 적당한 조건일듯 싶군요.
알고리즘 개발과 컴퓨터에 program하는 작업을 분리 시키면 이렇게 되지 않을까 생각합니다.
Programmer라는 직종은 Software Enginner쪽이 좀 더 가깝다고 생각합니다. -아무개
처음에 예기된 조건은 Programmer보단 Computer Scientist에게 적당한 조건일듯 싶군요.
알고리즘 개발과 컴퓨터에 program하는 작업을 분리 시키면 이렇게 되지 않을까 생각합니다.
Programmer라는 직종은 Software Enginner쪽이 좀 더 가깝다고 생각합니다. -아무개
BestProgrammer 논의에서 간과하고 있는 것은, 우리가 프로그래밍을 할 때 접하는 대다수의 문제는 비정형적(ill-defined) 문제라는 점입니다. n개의 자연수 중에서 가장 큰 숫자를 찾는 것과 같이 순수하게 정형적(well-defined)인 문제는 실세계에서는 극히 소수에 지나지 않습니다. As far as the laws of mathematics refer to reality, they are not certain; and as far as they are certain, they do not refer to reality. --AlbertEinstein