사람들에게 알고있는 프로그래밍 언어를 물어보면 가장 먼저 나오는 대답은 아마도
파이썬, 자바, 자바스크립트, C, C++, C#등이 나오겠죠.
그렇다면 가장 오래된 상용프로그래밍 언어는 무엇일까요?
현역 프로그래머 구하기 힘들어서 방송으로 구인하는 1959년생 코볼? 아쉽게도 아닙니다.
정답은 1957년에 나온 포트란이라는 언어입니다..
그럼 이걸 누가쓰고있느냐?, 제가 쓰고 있습니다.
1. 포트란을 도대체 누가 쓰는가?
사람들이 가장 많이 사용하는 언어중 하나인 파이썬은 장점이 무궁무진하죠.
모가지가 돌아가든 날개가 퍼덕이든 아무튼 별 문제없이 날아가게 하는게 목적이라면 파이썬은 최고의 언어죠.
물론 제대로 만들면 더 제대로 날게 하는 것도 가능하구요.
코딩하기 쉽고 빠르며, 읽기도 쉽고, 다른 언어랑 호환도 잘되고, 온갖 다양한 기능을 구현할 수 있는 만능 언어입니다.
반대로 포트란은 잘하는 것이 딱 하나밖에 없습니다.
아주 많은 양의 계산을 빠르게 끝내기
(왼쪽에서 2번째가 포트란)
그림을 보면 알겠지만 파이썬은 물론이고 빠르기로 유명한 C보다도 더 빠릅니다.
물론 알고리듬을 병신같이 만들면 의미 없는 장점이지만, 좀 숙련된 사람은 다른 언어로는 따라올 수 없을만큼 빠른 포트란의 속도를 살릴 수 있습니다.
그렇다면 이 특성이 꼭 필요한 분야는 어디냐?
전산물리학, 기상학과 같은 분야입니다.
“기상기후 빅데이터 분석 플랫폼 날씨마루” 정부사이트에서는 포트란을 사용한 분석교육실습 자료를 제공하고 있습니다.
http://bd.kma.go.kr/kma2020/dta/edu/KBP57200_Fortran.do
이런 분야에서는 수치적분을 하는데, 쉽게말해 구간을 잘게 쪼갠 다음 각 구간마다 계산하기입니다.
그림으로 보면 이렇죠.
(고등학교때 배운 구분구적법이 생각났다면 아주 정확합니다)
당연히 잘게 쪼갤수록 계산값도 정확해지고 계산량도 많아집니다.
그림만 보면 100분할을 한다해도 100번만 계산하면 되니까 뭐 많지는 않아보이죠?
그런데 3차원으로 적분해야하는 문제라면 어떨까요? x,y,z축으로 쪼개야하니까 1003=100만번의 계산이 필요합니다.
여기에 시간에 대해서도 적분해야한다면? 다시 100배 해서 1억번!
더 정확한 계산이 필요해서 1000분할을 해야한다면? 1000억번의 계산이 필요하겠죠.
게다가 이런 분야에서는 단순히 숫자로 된 방정식을 푸는게 아니라 행렬로 되어있는 계산을 해야합니다.
파이썬을 쓴다면 내일 예보를 손자가 받게 할 수는 없으니, 포트란을 사용할 수 밖에요.
그런고로 포트란은 컴퓨터공학에서는 사실상 사용하는 사람이 없고, 물리학하는 사람들만 사용하는 언어가 되었습니다.
2. 다른 분야에서는 왜 안쓸까?
그 외 분야에서 안쓰는 까닭은 아주 간단합니다. 수치해석만 잘하거든요.
포트란을 배우다보면 프로그래밍 언어라기보단 초호화계산기라는 느낌이 듭니다.
수식계산은 아주 용이하지만, 그 외 다른걸 시도한다면… 물론 가능은 하겠지만 엄두도 나지 않아요.
빠른 속도를 필요로 한다해도 차라리 범용성이 뛰어난 C를 쓰지 포트란으로 구현하려고 하는 사람은 아무도 없죠.
냅킨이 있으면 그냥 닦으면 되지 (아무리 잘 작동한다고해도) 이지랄하는 장치를 만들 필요는 없잖아요?
3. 굳이 지금도 써야하나?
포트란이 빠르기야 하다만 컴퓨터 성능도 좋아진 시대에 물리학자들이 저런 고대유물같은 범용성없는 언어를 배울 필요까지 있나? 하는 의문이 들 수 있습니다.
현재에도 포트란을 사용하는 첫번째 이유는 병렬계산입니다.
(냉장고가 아니라 슈퍼컴퓨터입니다)
이런 무지막지한 양의 계산은 슈퍼컴퓨터를 동원해서 굴립니다. 심지어 한대가지고는 모자라서 몇대,몇십대를 동원해서 계산하지요.
컴퓨터를 많이 동원하는건 좋은데, 엄청나게 무거운 계산을 수십대의 컴퓨터에게 최대한 효율적으로 분배할 것인가 하는 점이 중요해지기 시작합니다.
포트란은 이에 대한 지원이 아주 잘 되어있습니다. openMP, MPI라고 해서 병렬계산시에 컴퓨터간에 어떻게 분배할지 정해주는 물건이 있는데, 이게 C와 포트란에만 지원됩니다
두번째 이유는 해당 분야에서 이미 많은 코드가 포트란으로 만들어졌다는 점.
아예 처음부터 만들어야한다면 모를까, 이미 나와있는 코드들을 변형해서 사용하거나 일부분을 가져와서 사용할 수 있다면 훨씬 편해지죠.
물리학 분야에서 이용되는 프로그램들은 겉부분은 C나 파이썬으로 써있더라도, 계산이 많이 필요한 핵심 부분은 포트란으로 짜여져 있는 경우가 부지기수. 이걸 좀 만져서 필요한 계산을 하는데에 응용할 수도 있습니다.
저 두번째 이유 때문에 물리관련 전공의 몇몇 대학원생들은 팔자에도 없던 포트란을 독학하게 됩니다.
+ 그 밖에도 일본은 아직 정부 전산 프로그램이 포트란….이라고….
4. 요약
1) 최초의 상용프로그래밍 언어는 1957년의 포트란이다
2) 수치해석을 아주 잘해서 물리학 관련 전공자들이 사용하고있다.
3) 수치해석만 잘해서 다른 분야에서는 안쓴다.
5. 그림 출처
en.wikiversity.org/wiki/Parallel_computing#/media/File:Summit_Supercomputer_2018.jpg
www.r-bloggers.com/2018/12/the-need-for-speed-part-2-c-vs-fortran-vs-c/
jdftx.org/SeparatedBands.html
livebook.manning.com/book/modern-fortran/chapter-1/v-1/
en.wikipedia.org/wiki/Rube_Goldberg_machine