소프트웨어 사색

내 언어의 한계가 내 세계의 한계다

[하마] 이승현 (wowlsh93@gmail.com) 2022. 8. 30. 19:22

 

이 말에 대한 비트겐슈타인의 진정한 함의는 모르겠지만,  문장 자체를 그대로 생각해 보면 소프트웨어 개발과 정말 잘 맞는 듯 하다. 이에 따라서 개발자는 

- 영어를 잘 아는게 중요하다?
- 글쓰기를 잘 하는게 중요하다?
- 패턴을 잘 아는게 중요하다?


개발에 추상화란 매우 중요한 요소이다. 소프트웨어 개발에 있어서 추상화를 하기 위해 사용되는 단어들은 생각보다 어려운 단어들이 아니다. Convert, Proxy, Execute, Provider, Factory, Map, Command, Future, Journal, Match, Invocate, Filter, Channel등 근데 막상 개발 할 때 저런 중학생용 영어를 사용하는데 어려움을 겪는다.

즉 개발에 있어서 영어를 원어민처럼 하는거와는 상관 없어 보인다. 언어의 한계가 의미하는 바는 단어를 많이 아는지 와는 크게 상관없고, 흔한 그 단어들이 얼마나 나의 머리속에 잘 추상화되어 자리잡혀있는지가 중요해보인다. 물론 다양한 어휘를 적재적소에 잘 사용 했던 사람이 코딩을 함에 있어서 유리할 것이란 것은 자명하다. 소프트웨어 개발은 공학이기도 하지만 문학이기도 하니까...

글쓰기를 잘 하는 건 그런 추상화를 잘 하게 해주는데 큰 도움을 줄 것이다.
만약 당신이 구체적인 것들을 지칭하는 것에 대해서 공통적인  무엇을 뽑아내야 할 때 사용할 만한 단어를 생각해 내는 것은 
먼저 공통된 무엇인가를 뽑아낼 감각과 의지가 있느냐와 동시에 어떻게 그것을 구체화 할 것이냐에 대한 기능적인 지식이 있어야 할 것이다. 

예를들어 각 OS별로 버튼을 그리는 구체적인 방식은 다를지라도 공통적으로 draw 라든지 paint라는 메소드를 사용 할 것이며, 다양한 블록체인에 접근하기 위한 공통메소드로는 connect 라든지 sendTransaction 따위가 있을 것인데, 그것들의 구체적인 구현체를 선택할 때 사용 할 수 있는 인터페이스의 단어로는 Provider, Factory 등을 사용 할 수 있을 것 같다.


Factory.of("Metamask") ,  Factory.of("Windows") 라든지
Provider.of("Metamask"), Provider.of("Windows") 식으로 사용 할 수 있을 거란 말이다.

근데 이런 단어들을  떠올리게 하고 영감을 주는데 있어 도움을 주는 것은 평소에 읽기,쓰기를 많이 해본 인문학적 수련이나  수 많은 오픈소스를 읽는 것이겠지만 선현들이 만들어 놓은 잘 알려진 패턴을 학습하는게 가장 효율적이지 않을까?