fender
19k
2020-10-29 06:39:48 작성 2020-10-29 07:45:39 수정됨
17
3518

저수준 지식과 수학에 대해


제 이전 글을 보신 분은 아시겠지만 저는 저수준이나 수학에 대한 지식이 부족하고 그런 내용은 분야에 따라 필요성이 달라지는 것이지 '개발의 기본' 같은 것이 아니다라고 생각했습니다.

운영체제, C언어 등 저수준 지식에 대한 부분은 갈수록 그런 확신이 드는데, 수학에 대해선 요즘엔 생각이 조금 달라지더군요.

프로그래밍은 결국 본질적으로는 추상화, 일반화의 기술이고 그런 관점에서 보면 수학이야 말로 가장 궁극적인 추상화의 방법이 아닌가 싶습니다.

예를들어 카테고리 이론 같은 걸 아는 사람의 경우 프로그래밍 언어를 이해하는 시각 자체가 근본적으로 달라지는 것 같습니다. 특히 요즘 함수형 접근이 인기를 얻는 것을 감안하면, 그런 분야의 수학적 지식은 단순히 게임 분야에서 좌표계 계산할 일이 많다는 식의 도메인적 응용을 떠나서 언어 자체에 대한 근본적 기반이 될 수 있는 내용이 아닌가 싶기도 합니다.

응용면에서도, 아마 딥 러닝 분야가 계속 발전함에 따라 일반 개발자들도 그런 기술을 제품이나 서비스에 접목하는 과정에서 선형대수 같은 지식을 필요로 할 수 있는데, 수학은 각 분야가 서로 밀접한 관계를 갖는 경우가 많다 보니 아무래도 수학적 기반이 튼튼한 개발자의 경우 개발을 배우는데도 유리함이 있는 것 같습니다.

요즘 저도 관련 내용을 조금씩 공부하면서 필요한 부분에 대한 수학 기초를 배우는 중인데, 학교 다닐 때 좀 열심히 해둘 걸 하는 후회가 됩니다.

그래서 왠지 지금 누가 묻는다면 C나 운영체제 같은 건 분야와 무관한 개발의 '근본 지식'이나 '기초' 같은 게 아니라고 자신있게 말하겠지만, 수학에 대해선 다른 대답을 할 것 같습니다.

11
5
  • 댓글 17

  • 반응콩
    57
    2020-10-29 08:32:49
    수학 기초는 어떻게 공부하고 계신지 여쭤봐도 될까요? 
  • fender
    19k
    2020-10-29 08:41:42 작성 2020-10-29 08:41:59 수정됨

    반응콩 // 머신 러닝 입문서를 보면서 그 때 마다 모르는 개념이 나오면 구글링으로 여러 문서를 찾아보는 식으로 진행 중인데, 수학 기초 관련해서는 이 사이트가 제일 유익했습니다:

    https://www.mathsisfun.com

  • 힘내라마소
    1k
    2020-10-29 09:23:14

    흔히 말하는  '수학을 잘 해야한다'의 뜻이 공식을 외워서 사용하는 수학이 아니라고 생각하고 있습니다.

    수학은 어떤 명제에 대해 증명하고 검증하는 논리적 사고를 위해서 공부하라는 것이라고요.

    말씀하신대로 실제로 수학 공식이 필요한 프로그래머는 드물다고 알고있습니다.

  • ercnam
    5k
    2020-10-29 09:31:15

    어찌보면 공교육의 폐해죠...

    영어교육은 같은것도 문법에만 메달리니 뭐 죽어라 공부해도 원어민이랑 말한마디 못하잖아요.

    요즘(요즘도 아니죠?) 코딩교육 공교육에 도입한다 뭐 말 많은데

    아마 교과서 까보면 변수선언 메소드 이런거만 죽어라 외우게 시킬듯 ㅋㅋㅋ

    딱 기술면접 보기에는 좋게 가르칠듯 합니다.

  • fender
    19k
    2020-10-29 09:41:07 작성 2020-10-29 10:43:27 수정됨

    힘내라마소 // 기본적으로 동의합니다만, 단순히 수학도 논리적 사고를 필요하고 개발도 논리적 사고를 필요하니 알아두면 도움이 된다는 수준보다는 훨씬 더 밀접한 관련이 있다고 생각합니다.

    예를들어, 함수형 언어에서 접하는 펑터나 모나드 같은 개념도 수학에 기반한 것이고, 객체지향의 타입 같은 개념도 집합의 측면에서 이해할 수 있습니다.

    물론 그런 것을 모르면 개발을 못하는 것은 아니지만, 본문에서 언급한대로 프로그래밍을 최대한 추상화라는 측면에서 본다면 결국 그 기반이 되는 수학적 정의를 알고 있다면 더 깊이 있는 이해가 가능하지 않나 싶습니다.

    주력으로 하는 계층에 따라 저수준의 복잡성은 하위 계층의 라이브러리나 프레임워크 등이 대신해줄 수 있지만, 추상화는 (최소한 아직까지는) 개발자가 스스로 해야하는 것이니까요.

    그리고 응용 분야 또한 딥 러닝 기술이 대중화 된다면, 마치 지금 개발자라면 HTML을 한 두 번은 다뤄야 하는 일이 생기는 것 처럼, 비슷하게 인공지능과 무관한 분야의 개발자도 관련 기술을 응용해야 하는 작업이 빈번해질 것으로 생각합니다.

    그런 차원에서 본다면 앞으로는 지금보다 개발자에게 선형대수 같은 수학적 기반이 더 중요해질 수도 있다는 생각도 듭니다.

  • 힘내라마소
    1k
    2020-10-29 09:44:30

    fender 그렇군요. 공부하면 할 수록 알아야할게 많단 걸 새삼 느끼고 갑니다.


  • 74794C6565
    6k
    2020-10-29 10:47:40

    좋은 글과 좋은 사이트 추천 감사합니다. 


    저도 최근들어 기초 과학 분야에 대한 중요성을 새삼 깨닫고 있는 중인데

    중고등학교때 그냥 수능 잘보려고 아무생각 없이 달달 외우기만 했던 걸

    왜 그런 공식이나 현상이 일어났는지 원리나 근원, 상세 내용을 차분히 보다 보면 

    좀 과장되게 말하면 세상에 대한 시각이라해야 하나  

    그런게 좀 달라지는것 같습니다. (뒤늦게 찾아온 중2병? ㅋㅋㅋ)


    수학적으로 어떠한 개념이 있고 그걸 응용한 어떤 기술이 있다는걸 안다면 

    어떤 프로그램의 제작 접근 방법도 달라질 확률이 높겠죠. 


    영화 콘택트(2016) - 원제 Arrival 에서 보면 언어에 따라 가치관이나 사고방식이 

    달라진다라는 내용이 있는데 그거랑 유사 한거 같다라는 생각도 해봅니다. 


    기본 베이스에 머가 들어 있냐? 즉 OS가 머가 깔려 있냐에 따라 운영되는 프로그램도 

    달라지게 되고 결국 뱉어내는 결과물은 전혀 다르거나

    같은 결과물이라도 중간에 들어가는 리소스나 시간이 다르게 적용되는경우도 있기 떄문에 

    중요하다고 봅니다. 

  • frente
    77
    2020-10-29 11:16:32

    저도 일을 하다 보니 수학 필요성을 많이 느끼겠더라구요. 

    확률, 선대, 최적화 등등 하다 보니 지금은 1학년때 했던 미분적분학 강의까지 보고 있습니다. 이런 것도 배웠었구나 싶더군요. 그 때로 돌아가면 참 열심히 할 것 같은데 말이죠 ㅎㅎ

    해석학 강의도 있길래 조만간 들어볼 생각합니다. 완전히 새로운게 아니더라도 모르던 구멍을 자꾸 채워나가는 재미도 참 큰 것 같구요. 시간만 많으면 더 깊이 보고 싶은데 아쉽기만 하네요 ㅎ

  • 매운만두맥주
    1k
    2020-10-29 11:56:14 작성 2020-10-29 11:57:22 수정됨

    그럼 fender님이 느끼시기에 현재 수준에서, 그리고 미래에 증가할 수 있는 프로그래밍과 수학의 관련도를 생각했을 때,

    수학은 어느 정도 깊이로 아는게 적당하다고 생각하시나요?

    다다익선이라고 깊게 알 수록 좋겠지만, 시간 같이 현실적인 여건을 고려해서요.


    fender님이

    '저수준 지식이 고수준에 상당한 도움이 된다'는 얘기를 부정하신(?) 것과는 달리 

    '수학이 프로그래밍에 도움이 된다'라는 말한다는 건,


    단순히

    저수준과 고수준의 관계에서 "구조적으로 저수준이 고수준을 지탱하고 있다"

    라는 차원에서 벗어나서,

    수학적인 개념이나 지식 자체가 직접적인 프로그래밍 활용도에 영향을 미친다는 것이고 

    앞으로 그러한 색채가 짙어질 것이라는 것 같은데


    그렇다면 프로그래밍 언어나 각종 클래스들이 '수학적인 개념에 기반해있다'라는 차원을 벗어나

    그것을 활용하는데 수학 지식들이 더욱 중요해질 것이다. 이렇게 생각하시는건가요


    그럼 현재 현업이시고(업계 현황같은걸 저보다는 훨씬 잘 아실..) 이런 생각을 가지게 되신 fender님이 보실 때, 

    어느 수준의 수학 지식이 필요하다고 생각하시나요?  고등학교 과정?? 

    아니면 인공지능이나 딥러닝을 이해하는데 필요한 개론수준의 수학지식 정도면된다고 생각하시나요?



  • ISA
    3k
    2020-10-29 12:36:53

    C야 이해가 가긴하는데 c보다는 메모리관리나 효율성(시간복잡도)가 근본 지식이겠죠... 거의 모든 분야에서 어느 정도 신경써야하니까 운영체제가 근본이 아니라는 말은 어느 생각에서 나온지 궁금하네요? 어떤점이 그런걸지

    사실 전 모든 학문의 근본은 철학(사유)라고 보는 입장입니다. 생각하고 탐구하지 않고 학문이라는게 나올 수 없으니까요.

    수학적 사고가 중요하다는 글 잘보았습니다.

  • fender
    19k
    2020-10-29 12:51:26 작성 2020-10-29 12:51:48 수정됨

    매운만두맥주 // 본문 내용으로 짐작하시겠지만 제 경우는 수학 지식이 깊지 않아 깊이 있는 의견을 제시하긴 어렵다는 점은 고려해주셨으면 합니다.

    그런 전제로 제한적인 제 개인적 경험을 바탕으로 말씀드리면, 우선 프로그래밍 이론과 응용 부분으로 나누어 생각할 필요가 있을 것 같습니다.

    이론에 대한 부분은 특히 함수형 프로그래밍이 인기를 끌면서 필요성을 느끼게 된 부분인데, 함수형 프로그래밍의 경우는 패러다임 자체가 수학의 범주론에 기반하는 만큼, 수학을 알면 원론적인 차원에서 개념을 이해하는데 도움이 됩니다.

    프로그래밍 패러다임은 기본적으로 문제를 추상화해서 이를 해결할 수 있는 코드를 작성하고, 그런 코드의 단위를 어떻게 조합해서 보다 복잡한 덩어리를 쌓아 올릴 수 있는지에 대한 방법론인데, 함수형 패러다임은 수학의 함수를 추상화의 기본 단위로 삼아 함수의 합성을 통해 이를 해결하려는 접근이고, 범주론은 이러한 접근 방법에 대한 이론적 기반을 제시하는 관계입니다.

    저도 이제 공부를 하는 입장이지만, 위와 같은 관계가 있다보니 함수형 프로그래밍에 대한 문서를 읽다 보면 기반이 되는 수학 개념과 관련 용어가 빈번하게 등장하다보니 본문에 언급한 바와 같이 생각의 변화를 경험하게 되었습니다.

    응용부분에서는 지금도 분야에 따라 필요한 수학적 지식의 종류나 수준이 달라진다고 생각합니다만, 앞서 언급한 대로 딥 러닝이 대중화 될 것을 생각하면 선형대수 같은 건 알아두면 여러모로 개발에 도움이 될 일이 많은 것 같습니다.

    저 같은 경우 회사에서 SVG를 다루는데, SVG의 좌표계 변환에 필요한 행렬에 대한 기본 지식이 취미로 3D 관련 코딩을 하는데도 그대로 적용 가능한 경험을 했습니다.

    그리고 최근에 딥 러닝 기초를 배우면서, 역시 동일한 지식이 왜 행렬의 연산이 데이터 사이의 숨은 연관 관계를 찾아내는 작업에서 핵심 역할을 하는가 같은 내용을 이해하는데도 상당히 도움이 된 것 같습니다.

    이제 범주론이나 선형대수 같은 걸 기초부터 배우는 입장에서 그 중요성을 역설하는 건 민망하긴 합니다만, 개인적인 경험에 대한 공유 정도로 이해해주셨으면 합니다.

  • 매운만두맥주
    1k
    2020-10-29 13:01:26

    fender 

    오.. 알겠습니다. 답변 감사합니다.

  • 7이닝
    805
    2020-10-29 13:16:04

    딥러닝 데이터 분야 접목하다보니 수학을 빼놓고서는 설명이 안됩니다.

    힘들긴 하더라고요

  • daywalker
    1k
    2020-10-29 15:45:10

    저수준의 지식 또한 파고들수록 재미가 있습니다.

    어셈블리, OS구조, 컴퓨터 구조 등등을 공부하다보면 개발할 때는 몰랐던 것들에 대해

    깨달음(?)같은 것도 얻기도 합니다.


  • fender
    19k
    2020-10-29 15:55:39

    daywalker // 네, 저수준도 매우 깊이 있고 재미있는 분야라고 알고 있습니다. 다만 전 취향 때문에 개인적으로 거리를 두는 편이고, 가끔 분야와 무관하게 저수준을 모르면 고급 개발자가 못 된다던가 그런 주장에 대해서만 강하게 반대 의견을 낼 뿐입니다.

  • 스텁
    2k
    2020-10-29 17:12:15

    공감합니다. 다만 딥러닝도 API 만 쓰면 되는 때가 옱텐데요.

    알고리즘, 컴구, OS 를 몰라도 괜찮은 개발자가 되는것과는 상관없다 와 같이

    수학 몰라도 괜찮은 딥러닝 개발자가 되는것에 크게 지장이 없다라는 이야기가 재현된다에 한표 던져봅니다 ㅎㅎ

  • fender
    19k
    2020-10-29 17:30:25 작성 2020-10-29 17:31:26 수정됨

    스텁 // 네, 소프트웨어 기술은 그렇게 발전하는 게 맞는 게 아닌가 싶습니다. 지금도 텐서플로 위에 케라스가 있듯이 나중엔 그 위에도 다양한 고수준의 무언가가 올라갈 것이고, 어쩌면 그 마저도 인공지능으로 대체될지도 모르겠습니다.

    아마 그 때가 되면 딥러닝의 원리 같은 걸 따지는 건 전문 분야로 분화할 것이고, 그 위에서도 나름대로 각각 분야에 맞게 규칙과 계층을 쌓아 올리면서 발전할 것 같습니다.

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.