ID:
PW:

     0 분
     7 분

프로그래밍 Tips
프로그래밍에 관한 Tip을 공유하는 곳입니다.


프로그래밍 언어 둘러보기.(뭐이리 많어?)
이석종  2022-01-29 12:04:39, 조회 : 169, 추천 : 32
- Download #1 : graph.png (41.1 KB), Download : 5


너튜브의 알고리즘에 의해서 며칠동안 구글링을 하고 있다.
Lisp 관련해서 검색을 했는데 결국 이렇게 되었다.

LISP --> 함수형 언어 --> Clojure --> Elixir  --> Erlang --> Golang

사실 Lisp을 쓴 것이 30년이 되어가고
LIsp이 인공지능을 위해 만들어졌다는 정도만 알고 있었다.

나는 AutoCAD에서 도면을 쉽게 그리기 위해 공부하고 사용한
사람으로서 그저 script언어로 사용하고 있었지, Lisp의 프로그래밍 언어로서의 의미는 살펴볼 이유가 없었다.

그런데 요즘 다른 언어들 (Python, javascipt)을 배우고
동시에 오랫만에 lisp으로 프로그램을 만들면서
그냥 autocad내에서 돌아가는 언어로서의 lisp이 아닌
프로그래밍 언어로서의 lisp에 대해서 궁금한 것들이 생겨
이것저것 검색을 하다보니 프로그래밍 언어의 종류에 대해서
읽어보게 되었다.

그러는 과정에서 함수형 언어에 대해서도 읽어보고 CPU의 발전에 대해서도 읽게 되었다.

요즘에는 언어들이 워낙 많아져서 어느 것을 배워야 하나? 어느 것을 써야하나? 고민하게 되는데 최근에 나는 나름대로 python과 javascript를 선택하는 것으로 나름대로 결론을 내린 적이 있다.

python은 워낙 많은 라이브러리들이 있으니 이것을 이용하기 위해서 그리고 배우기 쉬워서 오픈소스 운동(?)을 하기 좋을 것 같아서.
javascript는 모든 프로그램들은 결국 웹으로 올라갈 수 밖에 없기 때문에 웹브라우저 언어인 javascript를 선택(아니 필수)했었다.

이런 결정을 하고서 조금 아쉬웠던 것은
그동안 만들어 놓은 [다정다감] (물론 이미 20년전에 개발이 중단되긴 했지만)이 아까워서 lisp과 python을 호환이 가능한 방법을 찾아봤었다.

Hy라는 언어가 있었다. lisp와 python을 호환할 수 있는 언어였다. 내가 원하는 것은 최종적으로 python으로 코딩을 하는 것이 맞다고 생각했기 때문에 lisp 코드를 python코드로 번역(?)하기 위해 hy를 이용하려고 했었다.

언어들을 소스코드차원에서 번역해주는 프로그램들이 몇개 있었다. Visual basic을 python으로 번역해주는 프로그램도 써 본 적이 있다.

암튼. [다정다감]의 소스를 python으로 번역해서 CAD안에서 도면기능을 구현할 수 있을 것으로 판단했다. AutoCAD나 다른 캐드들에서도 python을 지원한다.

그런데 검색을 하다보니 lisp이라는 언어가 생각보다 강력하다는 것을 알게 되었다.  lisp으로도 웹서비스를 할 수도 있다는 것을 알게 되었다. 물론 내가 직접 웹서버를 운영해야 하는 불편함은 있겠지만 암튼 가능하다는 것이다.

여기까지 파악이 되자 lisp을 버릴 것이 아니라 그대로 사용할 수 있는 방법을 찾아볼까? 이렇게 해서 결국 계속 구글링을 하게 되었다 그러다 보니 lisp으로부터 파생된 또는 발전된 언어들을 접하게 되었다.

lisp계열의 언어 중에 최근에 나온 clojure라는 언어가 있었고 이 언어를 바탕으로 만들어진 luminus라는 웹프레임워크도 있었다.

그런데 lisp이라는 언어에 관해 구글링을 하다 보니 자연스럽게 함수형프그래밍언어에 대해서 접하게 되었고 요즘 나온 프로그래밍 언어들도 함수형 프로그래밍 기능들을 지원하고 있다는 것을 알게 되었다.

함수형 프로그래밍은 우리가 알고 있는 프로그래밍 방식과 달랐다. 우리가 배웠던 포트란 등의 대부분의 프로그래밍 언어들은 변수라는 것이 존재한다. i라는 변수를 선언하고 그 변수에 1을 넣었다가 2를 넣었다가 이렇게 한다. 하지만 함수형 언어에서는 한번 값을 넣으면 바꿀 수 없다. immutable이라고 한다. 변하는 것은 mutable이다.

처음에 이 문장을 보고 적지 않이 놀랐다. 당연히 프로그래밍이라는 것은 변수로부터 시작하는데 어떻게 값을 변화시키기 않고 프로그래밍을 하지?

결국 함수형 언어에서는 모든 것을 함수로 처리하는 것이었다. 물론 함수기능은 기존 프로그래밍 언어에도 있었다. 하지만 함수형 프로그래밍 언어에서는 함수의 의미가 훨씬 더 중요하다. 모든 것이 함수이기 때문이다.

암튼 함수형 프로그래밍 언어가 여러가지 이유로 요즘 핫하다고 한다.

그리고 lisp이 워낙 오래된 프로그래밍 언어이다 보니 lisp의 영향을 받은 언어들이 많았다. lisp이 순수한 함수형 언어는 아니지만 함수형 언어의 시조이고 다른 언어들이 lisp의 영향을 많이 받았다는 것이다.

에릭슨이라는 회사가 만들고 1998년 오픈소스로 공개한 Erlang이라는 프로그램 언어도 있었다. lisp의 영향을 받은 언어는 아니다. Erlang을 기반으로 돌아가는 2011년에 발표된 Elixir라는 언어는 함수형이 가능하다. 그리고 phoenix라는 웹프레임워크까지 갖추고 있었다.

그리고 구글에서 2012에 발표한 Go라는 언어도 있다.

여기까지 검색을 하다보니 너무 멀리 왔다는 생각이 들었다. 분명 읽기는 읽었는데 구분도 잘 안되고 내가 그 프로그램 언어들을 모두 쓸 것도 아니고... 암튼 지금까지 보면 프로그램 언어는 유행을 타는 것 같다.

그래서 유행 따라 프로그램을 갈아타야 할 때가 분명 있다. 내가 만든 기능들을 최신 프로그래밍 언어도 업그레이드 하고 그런 과정이 필요한 것 같다.

최근에는 CPU 속도의 한계에 봉착하면서 멀티코어로 방향이 잡혔기 때문에 언어에서 멀티코어를 지원하느냐에 따라 성능이 결정되는 모양이다 그래서 최근에 나온 Go 언어는 함수형을 지원하고 (순수한 함수형은 아니고 지원한다는 것) 동시성까지 지원하기 때문에 그래프에서 오른쪽 상단에 위치하고 있다.

우측상단의 언어들을 보면 C#, Clojure, Erlang, Go 이런 것들이 있다. 이 그림은 Go관련 사이에 올라와 있는 그림이다.

물론 내가 동시성이 필요한 프로그램을 만들 일도 없기도 하다. 그래서 프로그래밍 언어를 갈아탈 것도 아니다. 물론 지금 아니지만 나중에는 갈아타야 하는 상황이 올 수도 있지만 당장은 아니다.

그래서 지금껏 검색한 것들이 그냥 '이런 게 있구나'정도의 상식으로 남겨놓고 python과 javascript로 열심히 프로그램을 만들자.

결국 언어가 중요한 것이 아니라 내가 필요한 기능을 구현하는 '코딩'이 중요하다. 한번 만들어 놓은 코딩은 분명 다른 언어로 번역(?)이 가능할 것이다.

이제 그만 너튜브 알고리즘의 노예가 되지 말자! 끝!


  추천하기   목록보기

Copyright 1999-2022 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]