294 0 0 18 59 0 1년전 0

이야기로 풀어가는 자바 프로그래밍 가이드 북

개발,강의 경력 도합 30년 선배 개발자가 원리부터 제대로 이해하고 싶은 후배 개발자에게

수년간 미루던 도전의 이유 일론 머스크는 컴퓨터에 바퀴를 달았다. Tesla전기차와 첫 만남은 문화적 충격이다. 바퀴 달린 컴퓨터라는 접근과, SF영화의 한 장면을 연출하는 자동화된 공장… 변화의 중심에 있지만 변화에 너무 익숙해졌던 듯 하다. 닷컴 열풍 이후 20여년이 지난 지금, 또 한번의 변곡점에 진입하려 한다. 코로나는 IT의 영향력 강화에 가속을 붙인다. 미국의 자국으로 제조업 소환 정책은 IT의 범위를 넓혀간다. 미래는 빠르게 현재가 되어간다. Big Tech 기업의 실적 향상은 업무 환경과 높은 보상 수준과 동행한다. Software 개발이 비로서 창의성으로 인식되어 간다. 달라진 개발자의 위상은 많은 도전자들을 쌓아간다. IT기업의 높아진 위상은 개발자들에게 큰 기회로 이어진다..
수년간 미루던 도전의 이유

일론 머스크는 컴퓨터에 바퀴를 달았다.

Tesla전기차와 첫 만남은 문화적 충격이다. 바퀴 달린 컴퓨터라는 접근과, SF영화의 한 장면을 연출하는 자동화된 공장… 변화의 중심에 있지만 변화에 너무 익숙해졌던 듯 하다. 닷컴 열풍 이후 20여년이 지난 지금, 또 한번의 변곡점에 진입하려 한다. 코로나는 IT의 영향력 강화에 가속을 붙인다. 미국의 자국으로 제조업 소환 정책은 IT의 범위를 넓혀간다. 미래는 빠르게 현재가 되어간다.

Big Tech 기업의 실적 향상은 업무 환경과 높은 보상 수준과 동행한다. Software 개발이 비로서 창의성으로 인식되어 간다. 달라진 개발자의 위상은 많은 도전자들을 쌓아간다. IT기업의 높아진 위상은 개발자들에게 큰 기회로 이어진다. Silicon Valley 파견 근무는 영화 3idiots의 주인공과 닮은 인도 개발자와 어울릴 기회를 제공한다. 한국 복귀 후 Multi-millionaire 입성 소식을 전해 듣는다.

세계 곳곳에서 몰려든 인재들이 모여드는 Silicon Valley는 dotcom bubble과 2008년 금융 위기의 파고를 유유히 넘어선다. Steve Jobs 복귀, Amazon 등장, Google 영향력 확대는 IT가 생활 속으로 깊이 진입하도록 한다. IT는 ICT로 진화하면서 모든 산업의 필수재로 자리 잡는다. 최근 제조업 분야의 인력 부족은 자동화에 박차를 가하고 있다. IT는 제조 공정의 일부가 되어 간다. 가치의 크기는 영향력에 비례한다. 인재 흡수력은 미국의 이민 정책에까지 영향을 미친다. 준비된 개발자에게 미증유의 멋진 기회의 문이 열리고 있다.

수포자는 단순히 개인적 능력만으로 만들어지지 않는다. 개발자에 입문하려는 이들이 떠나야 했던 이면에는 안내인이 있음을 부인할 수 없다. 개발 현장에서 원하는 능력을 보여주는 개발자가 부족한 이유도 크게 다르지 않다. 우연히 서게 된 강단은 놀라움의 연속이다. 분명 C언어와 Java 선수 과목이라고 했지만, Network Program을 배울 준비가 된 수강생은 30명중 2명 정도다. 하루를 모두 투자하는 재 취업 과정에서 만난 현실은 2주간의 강의 일정 내내 고민을 던진다. 어디서부터 잘못된 걸까?

프로그래밍 Language는 Language다. 문법은 그저 거들 뿐.

신생아들이 언어를 배우는 과정을 관찰해 보자. 문법을 배우고 말을 하고 글을 쓰지 않는다. 엄마의 말을 흉내 내면서 시작한다. 영어를 문법으로 시작하고 언어가 지식으로 머물게 하는 비극은 Programming Language 교육 현장에서도 재연되고 있었다. 최근, 영어를 환경으로 제공하는 교육 방법이 힘을 받고 있다. 익숙해지고 나면 정확하고 효과적인 소통을 위한 어법을 연습하면 된다. 글을 쓰고 있는 필자도, 읽고 있는 독자도 문법을 고민하지는 않는다. 언어 구사 능력은 글을 쓴 경험과 읽은 양과 비례한다.

Java는 Programming Language의 한 종류다. Software를 구현하기 위한 툴을 Programming Language라 한다. 문법부터 시작한 많은 Software 개발 도전자 들은 - 10년 배운 영어를 외국인 앞에서 한마디도 못하는 사람처럼 - Computer 앞에서 얼어붙는다. 그리고 좌절한다. 충분한 가능성을 지니고 있었을지도 모르다. Language는 보고 듣고 따라하다가 익숙해진다는 점을 간과했을 가능성이 높다. 미국 여행하다 만나는 미국인들은 교육 수준과 무관하게 능숙하게 영어를 구사한다.

NASA에서 구현한 Artificial Intelligence용 Interpreter Source Code를 분석하는 행운을 누린다. Java를 만든 Sun Microsystems -현재는 Oracle-이 만든 Java OS Source Code를 분석하며 작업할 기회가 주어진다. 우아한 영어는 고급스러운 영어를 구사하는 이들과 어울리는 과정의 자연스러운 산물이다. Programming Language도 Language라는 사실을 강조하는 것으로 수업을 시작하곤 한다. 문법은 그저 거들 뿐.

펜으로 종이위에 코딩하는 방식의 수업을 들었다는 학생을 만나기도 한다. 빈칸 채우기로 Program 개발 능력을 확인할 수 있을까? 일본 해외 취업 과정에서 Java 교육을 담당했을 때 일이다. 이미 Java 개발자 자격증을 취득한 학생이 포함되어 있다. 실전에 필요한 개념을 담은 예제 중심 수업이 한달을 넘어가자, 심리적 불안감은 분노가 되어간다. 학창 시절의 학점은 높은 반면, IT 기업의 실무 면접에서 번번히 낙방하는 현실이 이해되는 순간이다.

Keyboard와 씨름 후에 눈앞에 펼쳐지는 결과는 성취감의 원동력이다. 상계동에서 천안까지 등교 시간에 머리를 스친 아이디어를 손가락을 부지런히 움직여 결과를 만들어내고 특별한 미소를 짓던 제자가 있었다. 건축학으로 전공을 바꾸려던 계획을 접고 개발자의 길을 씩씩하게 걸어가고 있다.

언어는 전달을 목적으로 한다. 그래서 컴퓨터 내부를 들여다본다.

Language는 Communication소통의 수단이다. 청자나 독자를 이해한면 더 멋진 Language 구사가 가능하다. Hardware에 내리는 작업 지시서는 Programming Language로 작성되어 있다. Hardware의 이해는 효율적으로 작업 지시를 할 수 있도록 한다. 전력 소비량을 줄여서 지구를 보호할 수도 있고, Memory를 필요량을 줄여서 비용 절감에 성공할 수도 있다. 컴퓨터 전공 학부에서 Computer Architecture(컴퓨터 구조)를 필수 과목으로 지정한 이유다. 다행히도, Software 개발자가 숙지해야 하는 Hardware 동작 원리는 단순하다.

다수의 학부에서 C언어를 가르친다. 간혹 복잡하고 다루기 힘든 C언어를 가르치는데 회의적 반응을 만기도 한다. C언어는 어렵다. 왜냐하면 Hardware와 밀착되어 있기 때문이다. 역설적으로 컴퓨터의 동작 원리를 이해하는데 유용한 Programming Language다. 그래서 Java를 중심으로 구성하지만, C언어를 때때로 소환할 예정이다. Java를 포함한 다수의 Programming Language들은 C언어의 복잡한 개념을 박스로 감추고 있다. C언어를 문법이 아닌 동작 원리 측면으로 접근한다면, 이후 새롭게 탄생할 언어를 이해하는데 도움이 되는 이유다.

태초에 정보가 있었다. 그리고 폭증하는 정보 처리 요구는 컴퓨터의 탄생 배경이다.

인류 최초의 문자는 수메르인이 작성한 차용증에서 발견된다. 문자의 목적은 정보를 담기 위함이다. 문자를 해독하면 의미가 파악된다. 정치, 경제, 사회, 철학 등 거의 모든 분야는 정보와 그 처리 과정이 포함되어 있다. 컴퓨터는 사람이 하던 수고를 덜어주는 수단이다. 더 많은 정보를 더 빠르게 처리할 수 있는 세상이 연다. IT는 Information Technology의 약자다. Big Data의 시대다. 테슬라의 핵심 경쟁력은 데이터라고 한다. 빅 테크 기업들은 한결 같이 정보 수집에 총력을 기울인다. 수집된 정보가 있어야 Deep Learning 도 가능하다

Data는 저장을 위해서만 존재하지 않는다. 처리 과정을 거쳐 Data는 Information이 된다. 처리에 용이하도록 Data를 관리하는 기술 역시 중요하다. 어떤 회사는 십 수년 전부터 정보 처리의 중요성을 알고 체계적인 정보 수집 및 저장한다. 또 다른 회사는 정보는 많지만 처리에 부적합하기 때문에, 수정 보완 과정을 거쳐야 한다. 개발자들 사이에도 동일한 차이가 나타난다. 유능한 개발자는 정보를 저장할 때부터 처리를 고려한다. 자료 구조론과 알고리즘은 저장 및 처리에 관한 이론을 담고있다. 이론의 함의는 시행착오를 겪은 정도에 따라 다른 깊이로 개발자에게 다가온다. 실패, 고민, 그리고 학습은 개발 실무의 강자를 낳는다. 실무 면접은 개발자의 일상을 주고받는 시간이다. 베테랑 면접관은 선수를 만나면 도파민이 충만해지는 순간을 경험한다.

예제가 중심에 설 수밖에 없다. 조금 욕심을 내 보자면, 책에서 소개하는 코드를 모두 직접 손가락을 움직여 경험해 보기를 권한다. Programming에 성공했을 때의 쾌감을 느껴보자. 인생 고통 총량 불변의 법칙이 있다고 한다. 처음에 힘든 만큼 뒤는 편안하다.

학습 방법에 대한 제안

프로그래밍이 처음이라면…

처음 Programming Language를 접한다면, 7장까지는 아주 가볍게 읽자. 용어에 익숙해지고, 전체적으로 어떤 내용이 있는지 파악하는 수준으로 읽어 내려가자. 일부 신선한 내용이 있고, 대체로 이해가 된다면 8장으로 넘어가자. 하지만, 모든 내용이 새롭고 감이 덜 왔다면, 다시 처음부터 읽어 보기를 권한다. 단, 이해가 안된다고 오래 머물지는 말자. 많은 책들이 앞부분만 까맣게 되고, 뒤는 새책으로 남는다. 이 책 만을 그런 운명에 놓이지 않기를 바란다.

천재 학습법이 있다. 전체를 보면 부분이 쉽게 다가오기도 한다. 특히 7장까지는 8장 이후에서 수시로 반복되는 내용들이다. 8장 이후를 읽어 가다가, 문득 7장까지 읽었던 내용이 와 닿는 순간을 경험하리라.다시 확인해 보고 싶어 진다. 그 순간 다시 읽자. 터널의 끝을 경험할 수 있다. 성취감은 진도를 나아가는 원동력이다.

8장부터는 ECLIPSE를 옆에 끼고 진행하자. 예제 Source Code를 읽으며 이해하자. 교재의 Code를 ECLIPSE에 Typing하고 Compile하고 실행하자. 수 많은 Compile오류 체험은 소중한 자산이다. Error Message를 만나지 않는 것은 실력 향상에 도움이 되지 않는다. 내공이 출중한 개발자의 IDE도 Error Message로 가득하다. 단, 빠르게 이해하고 수정한다. 경험이 가져다 준 결과물이다.

그래도, 원하는 결과를 만나지 못했다면 또 하나의 기회의 문 앞에 서 있음을 믿자. Debugger를 제대로 체험하자. 원하는 결과를 얻었다 하더라도 Debugger로 다시 확인해 보면 좋다. 하지만, 성공하면 그냥 지나치고 싶은 마음은 인간의 본성이다. 그래서 원하는 동작이 이루어지지 않고, Debugger를 사용해야만 하는 상황이 비일비재하다면, 복이다. 진정한 개발자는 다른 개발자가 작성한 Code의 오류마저 찾아 낸다. Debugging 내공이 출중하기 때문이고, Debugger는 내공 축적의 길을 열어준다.

세번째. 평균적으로 어법이 조금씩 눈에 들어오는 시점이다. 이미 어법의 매력에 빠졌다면, 스스로를 크게 칭찬하자. 아니라면, 필자와 같은 정상 범주다. 만약 감이 덜 온다면, 평소에 논리 사고 연습이 덜 되어 있었을 가능성이 높다. 하지만, 1~2번 정도 더 반복하면 눈이 떠진다. 나중 된 자 먼저 되리라.

Debugging을 반드시 하자. Memory의 Data가 눈에 그려지도록 하는 과정이다. Algorithm 오류를 잡아내는 능력을 키우는 코스다. 진정한 능력은 실행 과정에서 발생하는 오류를 찾아내는 능력이고, 이 능력은 Debugging이 키운다.

이제 Programming Language 학습 경험이 있는 수준이다. 아니 넘어섰을 가능성이 높다. 배웠지만 모르는 자격증 취득자도 많으니까.

Programming Language 학습 경험이 있다면…

Hardware와 Software의 조화를 느끼며 읽자. 예제 code는 typing 하고 실행하자. Compile error에 집중하자Debugging을 통해 Data Structure(자료구조)와 Algorithm의 진행을 느껴보자. 막히는 부분이 학습의 시작 지점이다. 처음부터 막힌다면 백의 종군하자.

Object Oriented Programming 이후 …

Object Oriented Programming를 이해하고 있는데 이 책을 열었을 가능성은 낮다. Object Oriented Programming은 이해하기 쉽지 않다. 문법은 그나마 단순하지만 Object Oriented Design은 상당한 내공을 요한다. 실무 현장에서 조차 Java의 탈을 쓴 Procedural Programming은 쉽게 만날 수 있다. 하지만, 제대로 설계만 하면 이보다 더 아름답고 효율적이다.

그리고 나서 Generic과 Nested Class를 공부하자. 이 부분을 모른다고 Object Oriented Programming이 불가능하지는 않다. 하지만, 제대로 이해하면 정보를 다루는 차원이 달라진다. 명문장을 읽을 때의 감동을 느낄 수 있다.

마지막으로 Thread다. Java는 Server개발에 많이 사용하고, 다중 처리는 Server의 기본이다. 다중처리는 정보 공유로 인한 다양한 문제를 야기한다. 이해한 자는 문제를 찾을 수 있지만, 그렇지 않다면 끝없는 미궁으로 빠져든다. Network Program을 예제로 Thread를 경험해보자.

백과 사전식 서술이 아니다. 그래서…

새로운 개념을 담은 책을 읽을 때면 포스트 잇을 준비한다. 외울 수 있으면 좋겠지만, 용량이 부족한 뇌를 탓하면서 나만 알아 볼 수 있는 제목을 적은 포스트 잇이 책 옆으로 삐쭉 튀어 나오도록 한다. 퇴사를 하던 날, 후배 사원이 포스트 잇 견출지로 너저분한 책을 가슴에 품고 의미 심장한 눈빛을 보낸다.

나름의 방식으로 필요한 내용을 쉽게 찾을 수 있도록 해 두면 좋다.
대학 : 홍익 대학교 전기 제어 공학과
대학원 석사 과정 : 서울 대학교 제어 계측 공학과 / 인공 지능 관련 논문

기업 경력
국내 기업 : LG 전자 기술원 / LG 반도체
해외 기업 : Sun Micorsystems / OpenTV 등

강의 경력
국민 대학교
서울 산업 기술 대학교
단국 대학교 등

Java 관련 경력
Sun microsystems의 Java Processor 개발 Project에서 OS Porting 관련 개발
Java Network Programming (LDAP 등)

㈜유페이퍼 대표 이병훈 | 316-86-00520 | 통신판매 2017-서울강남-00994 서울 강남구 학동로2길19, 2층 (논현동,세일빌딩) 02-577-6002 help@upaper.net 개인정보책임 : 이선희