오늘은 학원 2일차다.
어제와 마찬가지로 S/W의 전체적인 이론, 개발에 필요한 최소한의 지식들을 공부하고 있다.
오전 시간에는 그래디 부치의 강연을 보았다.
그의 강연은 총 3가지의 흥미로운 소주제로 구성이 되어있었다.
소프트웨어는 왜 '개집'부터 '도시'까지 모든 것이 될 수 있을까?
개발자들은 흔히 코딩을 단순히 '기능구현'으로 보지만, 그래디 부치는 소프트웨어의 복잡도에 따라 우리가 취해야할 태도가 다르다고 말하였다.
개집(Doghouse): 작은 토이 프로젝트는 일단 빠르게 만드는 것이 중요하다.
실패해도 다시 허물고 금방 지으면 그만이기 때문이다.
집(House): 내가 실제로 거주하는 집 처럼 나의 서비스가 된다면 이야기가 달라진다.
내가 직접 살아야 하는 집을 지을 때는 유지보수와 안정성을 고려한 설계가 필수적이기 때문이다.
도시(City): 대규모 시스템은 이미 완성된 도시를 리모델링하는 것과 같다고 말하였다.
기존 주민(기존 코드/사용자)을 배려하며 점진적으로 진화시켜야 하며, 무작정 새로 짓는 방법은 위험하다고 한다.
그렇기 때문에 내가 지금 작성하고 있는 코드가 '개집'인지, 아니면 '도시'인지를 먼저 인지를 해야 한다라는 것이다.
프로젝트의 성격에 맞는 방법론을 선택하는 것이 엔지니어링의 기초이자 시작인 것이다.
하드웨어의 보조 도구에서 '미러 월드(Mirror Worlds)'의 창조자로
소프트웨어의 역사는 추상화의 역사라고 한다.
과거 소프트웨어는 그저 숫자를 처리(Numeric)하고 기계를 제어하는 수단이었지만 이제 소프트웨어는 우리가 살아가는 세상과 닮은, 혹은 완전히 새로운 미러월드를 만들어낸다라는 것이다.
우리는 하드웨어라는 무대 위에서 소프트웨어라는 '숨겨진 글쓰기'를 통해 가능성을 그려내고 있다.
단순히 코드를 짜는 것을 넘어, 우리가 어떤 세계를 구축하고 있는지 고민해야 할 시점이라는 것이다.
내가 앞으로 짜게 될 코드가 정말 새로운 시대를 구축해나가는 하나의 틀이 될 수도 있을 거라는 생각이 조금은 들면서 코딩 공부의 중요성에 대해 다시 한 번 생각하는 강연이었다.
인공지능 시대, 개발자의 역할은 '구현'에서 '교육'으로
최근 AI가 기하급수적으로 발전하게 되면서 세상을 뒤흔들고 있다.
코딩을 손으로 직접 쓰는 시대에서 이젠 AI에게 명령만하면 하나의 독자적인 프로그램이 만들어지는 시대가 온 것이다.
가장 흥미로운 변화는 시스템이 이제 결정론적(Deteministic)이지 않다는 점이다.
과거에는 우리가 정의한 논리대로 시스템이 움직였다면, 이제는 우리가 '가르치고 학습하는' 신경망 기반의 시스템이 주류가 되고 있기 때문이다.
강연자인 부치는 신경망 학습을 아이를 키우는 과정에 비유했다.
우리가 가르친 것보다 더 기묘하고 때로는 통제불가능한 결과가 나오기도 하며 스스로 생각하고 예측하기 어려운 방향으로 튀는 경우도 간혹 있기 때문이다.
그렇기 때문에 미래의 개발자는 코드를 작성하는 사람을 넘어, 시스템이 올바른 방향으로 학습하도록 돕는 '교육자'이자 '도구 제작자'가 되어야 한다고 한다.
소프트웨어는 단순한 기술적 결과물이 아니라 미래의 가능성을 담을 이야기인 것 같다.
내 손으로 직접 하드웨어에 나의 생각과 기대, 가능성 등을 불어넣으며 내가 상상한 그 이상의 것들까지도 기대해 볼 수 있는 시대에서 나는 어떤 코딩을 통해 세상에 내 이야기를 알리고 싶은지에 대해 깊이 생각해 볼 수 있는 강연이었다.
오후 시간에는 S/W의 설계와 관련한 내용들에 대해 배웠다.
S/W 아키텍처
먼저, S/W 아키텍처란 건축 용어에서 나온 말로 '구축 양식', '구축 스타일'을 의미한다고 한다.
아키텍처는 소프트웨어의 형태와 용도를 결정한다고 한다.
아키텍처 패턴은 크게 4가지로 나눌 수가 있는데
이렇게 나눌 수 있다고 한다.
그 외에도 브로커 패턴, 피어투피어 패턴 등등 여러가지 패턴들이 존재한다고 한다.
S/W 설계 방법론
다음은 소프트웨어의 설계다.
가장 중요한 점 중 하나는 바로 소프트웨어를 어떻게(How) 설계할 것인가라고 볼 수 있는데
이렇게 3가지로 나눌 수 있다고 한다.
구조적 설계란 체계화된 구조를 바탕으로 소프트웨어를 설계하는 방식으로 프로세스를 중심으로 진행하며 분할과 정복이라는 특징을 가지고 있다고 한다.
구조적 설계의 가장 큰 특징은 하나의 목적을 달성하기 위해 분할된 프로세스를 만들어 하나씩 정복하는 절차를 진행한다 이다.
객체-지향 설계는 소프트웨어를 객체의 모임으로 보고 이를 중심으로 개발하는 설계다.
현대적 S/W 설계의 표준이라고 볼 수 있다고 한다.
이렇게 설계에 대한 이론을 공부한 뒤 간단한 활동을 하나 진행해 보았다.
바로 프로세스 정의하기 활동인데 예시인 팬케이크 만들기를 참고해 계란말이 만들기를 적어보았다.
1단계: 재료 준비하기
하위 프로세스
2단계: 조리
하위 프로세스
3단계: 예쁘게 담기
하위 프로세스
이렇게 총 3개의 단계로 나눈 뒤 하위 프로세스들을 부여해주며 설계에 있어 기본적인 뼈대를 만드는 방법을 배웠다.
단계별로 나누어 진행한다라는 점이 굉장히 편리했고 하위 프로세스들을 더 꼼꼼히 자세히 작성해야 설계 후 실제 제작을 할 때 편할 것이라는 생각이 들었다.
이번 실습을 통해 설계의 중요성에 대해 알게 되었다.
멋지네요