tag:

프로그램과 프로그래밍에 대해

2018년 7월 25일

Bjarne Stroustrup 책을 읽고 있는데 단순하면서도 마음에 남는 말이 참 많다.

Our code must be maintainable … A successful program “lives” for a long time (often for decades) and will be changed again and again. … Only a failed program will never be modified.

코드는 꼭 유지보수가 가능해야 합니다. … 성공적인 프로그램은 오랜 시간을, 종종 수십 년을 “살며” 계속 변경됩니다. … 실패한 프로그램은 절대 수정되는 일이 없습니다.

To be maintainable, a program must be simple relative to its requirements, and the code must directly represent the ideas expressed.

유지보수가 가능하려면 프로그램은 프로그램의 요구사항에 비해 단순해야 하며 코드는 아이디어의 표현을 직접 드러내야 합니다.

A program is a precise representation of our understanding of a topic.

프로그램은 우리가 주제를 어떻게 이해하는지를 알려주는 정확한 표현(representation)입니다.

Think about the problem itself, rather than your incomplete solution.

자신의 불완전한 해결책보다 문제 자체에 대해 생각하세요.

Programming is part practical, part theoretical. If you are just practical, you will produce non-scalable, unmaintainable hacks. If you are just theoretical, you will produce unusable (or unaffordable) toys.

프로그래밍은 실용적인 부분과 이론적인 부분이 있습니다. 만약 당신이 실용적이기만 한다면 당신은 확장하기 어렵고 유지보수 하기 어려운 코드 덩어리를 만들 겁니다. 반대로 이론적이기만 하면 사용 불가능한 (또는 감당하기에 너무 비싼) 장난감을 만들게 됩니다.


이 챕터 끝에 길을 잃은 기분이 들 때 이 책을 꺼내서 이 챕터를 다시 읽으라는 말에 울컥했다. 요즘 앞으로 어떤 개발을 해야 할지, 어떤 시장에서, 환경에서, 어떤 언어로 할지 고민이 많다. 다시 처음부터 시작하는 기분에 더 갈피가 잡히지 않는 것 같다.

웹 외의 환경은 해본 적이 없기도 하고 학교 가면 하게 될 것 같아서 cpp를 한동안 볼 것 같다. 영어도, 수학도 준비해야 하고. 적어보니 바빠야 하는데 막상 하나 제대로 하지 못하는 것 같고. 이렇게 고민에 고민을 더한다.

내 기분 속여서 하려고 노력하기보다 어떻게든 꾸역꾸역 해야 할 때가 온 것 같다. 빨리 방향도 생각도 다듬어졌으면 좋겠다!

히트 리프레시

2018년 6월 18일

지금의 마이크로소프트는 이전의 MS가 보여줬던 모습과는 확연히 다르다. 오픈소스로 공개하는 많은 결과물과 다양하면서도 견고한 서비스를 제공하는 클라우드, 유기적으로 통합된 프로덕트는 커다랗고 정적인 회사라는 내 생각의 틀을 바꿨다. MS의 CEO로 사티아 나델라가 선임된 날을 기억한다. 그 날 이후 달라진 MS를 보면서 단순히 CEO의 차이로 이렇게 체질을 바꿀 수 있는 것일까 하고 그동안 생각했었다. 사티아 나델라의 책 <히트 리프레시>를 읽으면서 지금의 MS이 되기까지의 과정을 엿볼 수 있었다.

조직이 어떻게 생각하고 행동할지를 문화가 결정한다고 하지만 문화의 틀을 빚는 주체는 개인이다.

책은 사티아 나델라의 이야기로 시작해 CEO가 되기까지 어떤 삶을 살았고 어떤 역할을 맡았는지 설명한다. 그리고 미래에는 어떤 기술이 주목받고 그 변화의 중심이 되려면 어떤 비전을 갖고 준비해야 하는지 풀어간다. 사티아의 독특한 이력도 흥미로웠고, CEO가 되기 전에는 클라우드 부문에서 Azure를 만드는 과정, CEO가 된 이후에 체질을 바꾸기 위한 과정도 인상적이었다. 책 전체에서 강조된 “공감”이라는 키워드를 조직에 녹이기 위해 어떤 일을 했는지 잘 설명하고 있다.

어떻게 해야 우리 기술로 우리 정체성에 말을 걸고 우리 사용자에게 유일무이한 가치를 부여할 수 있을까?

지금까지 내가 해왔던 일을 생각해보면 기술의 끝단에 서서 기술을 비지니스에 녹이고 사용자에게 제공하는 역할을 해왔다. 이 책에서 언급한 변화 앞에서는 어떤 역할을 하는 사람이 되어야 하나 고민된다. 일반 사용자를 대상으로 하는 도구를 만드는 일도 즐거운 일이지만 기술적 깊이가 있는 일은 아직 안해봐서 그런지 해보고 싶은 마음이 크다. 나는 어떤 역할로 어떤 위치에서 무슨 일을 해야 하는가 끊임없이 되물어보게 한다.

사람이든 조직이든 사회든 스스로 새로고침을 해야 하는 순간이 찾아온다. 그 순간이 오면 다시 열정을 불러일으키고 새로운 마음으로 목표를 재설정하고 치열하게 고민해야 한다.

무슨 일을 해야하나 생각을 오래 해온 탓에 그저 관성적인 고민이 아닌가 싶기도 했다. 치열하게 고민한다는 말이 울렸다. 새로고침을 해야 하는 순간이 왔다.

사람들이 변화에 저항하는 근본적인 이유는 미지에 대한 두려움 때문이다. 정말 중요하지만 확실한 답이 없는 질문은 사람들을 두렵게 한다.

앞으로 무슨 일을 해야 하는가, 이 질문은 늘 두렵다. 본문에서는 이 질문을 마이크로소프트에 던졌다. 서버 중심의 환경에서 클라우드로 나아가기 위해 두려운 질문을 마다하지 않았다. 또한 책에서는 미래를 대비하기 위한 기술로 인공지능, 증강현실 그리고 양자 컴퓨팅을 꼽았다. 이런 기술을 사용한 서비스가 하루가 다르게 나오고 있고 삶을 변화하고 있다. 나는 이런 질문에 어떻게 답할 것인가.

책을 읽은 후에도 여러 번 뒤적이게 된다. 고민이 많은, 지금의 나에게 답을 바로 주는 것은 아니지만 고민을 어떤 방향성과 동력을 갖고 해야하는지 알려주고 있다. 남은 한 해도 여러가지 변화가 있을 예정인데 고민 속에서도 하나씩 잘 해결해가고 싶다.

C# 으로 배우는 적응형 코드

2018년 4월 12일

요즘 사무실에서 비는 시간이 좀 많이 있어서 책을 가져다두고 읽었다. 가볍게 읽으려고 읽었던 책을 가져가야지 했는데 지금 회사에서는 C#을 전혀 쓰지 않고 있으니 리마인드도 할 겸 읽게 되었다. 베타리딩을 포함해서 3번째 읽는데 그래도 또 배우는 게 많은 건 전에 열심히 안 읽어서 그런 걸까. 이번에는 읽고 기억하고 싶은 키워드라도 적어놔야지 싶어 표시해둔 부분을 여기에 옮겼다.

이 책은 어떤 방식으로 구조를 짜야 좋은 적응력을 가진 코드를 작성할 수 있는지 설명한다. 크게 세 부분으로 볼 수 있는데 가장 먼저 애자일 방법론과 적응형 코드를 작성하기 위한 배경적인 지식을 쌓는다. 그리고 SOLID 패턴에 대해 여러 예시를 들어 설명한 후, 마지막으로 실무에서 적용하는 예시로 마무리한다.

1부에서는 어떤 방식으로 작성하면 코드 의존성이 강해지는지, 어떤 계층적인 접근을 해야 유연한 구조를 구성할 수 있는지 풀어간다. 이런 흐름에서 왜 인터페이스를 도입해야 하고 디자인패턴이 어떻게 코드에 유연함을 더하는지 확인한다. 이런 구조의 코드를 어떻게 테스트하고 리팩토링하는 과정을 통해 개선하는 부분까지 다뤘다.

C#을 기준으로 설명하고 있어서 어셈블리를 어떻게 구성해야 한다거나 nuget을 구성하는 방법이라든가 하는 부분은 좀 거리감 있게 느낄 수도 있는데 요즘은 대다수 언어가 어떤 방식으로든 이런 부분을 지원하고 있으니 그렇게 맥락이 멀게 느껴지지 않았다.

의존성 관리(p. 66)에서 어떤 게 코드 스멜인지 알려주고 그 대안을 잘 설명하고 있다. C#에 매우 한정된 부분이긴 하지만 CLR의 어셈블리 해석 과정도 흥미로웠다.

여기서는 계층화를 점진적으로 진행하는 과정(p. 96)이 특히 좋았다. 인류 발달 과정 설명하듯 하나씩 짚어가며 어떤 이유에서 분리했는지 설명하고 있어서 최종 단계만 보면 막막할 수 있는 계층을 이해하는데 도움이 되었다.

2부에서는 SOLID 패턴을 하나씩 실질적인 예시와 함께 설명했다. 리스코프 치환 원칙을 설명하는 부분(p. 253~)이 재미있었다. 계약 규칙에서는 사전 조건과 사후 조건을 작성하는 방법과 불변성을 어떻게 유지해야 하는지 설명했다. System.Diagnostics.Contracts를 사용해서 각 조건을 기술하는 방식도 참 깔끔하다. 그리고 가변성 규칙에서 공변성과 반공변성을 짚고 넘어갔는데 제네릭이 어떤 식으로 동작하는지 이해하는데 많이 도움 됐다.

인터페이스 분리도 유익했는데 질의/명령을 인터페이스로 분리하는 부분도 좋았다. 의존성 주입은 이미 부지런히 쓰고 있었지만, 생명주기(p. 346)를 설명하는 부분은 다소 모호하게 생각했던 IDispose를 다시 살펴볼 수 있었고 이 인터페이스를 어떤 방식으로 생명주기 관리에 적용하는지 배울 수 있었다. 이 부분은 실무에서 좀 더 많은 사례를 접해보고 싶다.

예전에도 좋아서 추천 많이 했는데 또 읽어도 좋아서 추천하고 싶다. C#도 부지런히 해서 실무에서 다시 쓸 기회가 왔으면 좋겠다.

신입 PHP 개발자가 읽어야 하는 책

<바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서>를 읽고.

2018년 3월 7일

나도 신입으로 일을 시작했을 때 혼자 인터넷 검색창을 붙들고 코드와 씨름한 경험이 있었다. 작은 회사에서 유일한 개발자라 물어볼 선임도 없었고, 문제는 어떻게든 기간 내에 해결해야 하는 상황이 많았다. 모두가 신입 시절을 거치는 동안 그런 벽을 마주할 때가 있을 것 같다. 넘어야 할 산은 높고 나는 너무나 작게만 느껴지는 그런 경험을 거치고서 각자 지금의 자리에 있지 않나, 생각한다. <바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서>라는 책 제목을 보는 순간에 그 신입 당시의 기억이 먼저 떠올랐다.

바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서 표지

개발을 코드를 작성해서 실행하는 일이라고 단순하게 설명할 수 있지만, 현실에서는 그렇게 간단하지 않다. 코드를 어떻게 잘 작성하는가도 중요한 주제지만 그만큼 코드를 잘 관리하는 일도 중요하다. 게다가 코드가 실행되는 환경을 이해하는 과정도 필요하다. 환경도 여러 계층에 걸쳐 있다면 두루두루 살펴봐야 한다. 언어도, 환경도 서로 쉽게 이해하고 공유할 수 있도록 다양한 규칙과 규약을 정리해놓고 있고 이런 부분도 숙지해야 한다. 개발이라고 말하기에는 다각적으로 알아야 하는 부분이 많다.

신입으로 첫날 출근하면 이런 지식에 압도당한다. 신입으로 시작할 때 가장 막막한 점은 단순히 언어에 대한 이해를 넘어서 이런 다양한 지식을 한꺼번에 흡수해야 한다는 점이다. 순식간에 넓은 분야를 깊이 있게 이해하는 일은 생각만으로도 벅차다. 알아야 할 모든 내용을 단번에 이해하면 좋겠지만 절대 쉬운 일이 아니다. 그런 막막한 상황에서 가장 중요한 것은 알아야 할 내용의 키워드를 습득하는 것이다. 키워드를 알면 그 키워드를 중심으로 아는 범위를 쉽게 늘릴 수 있다. 그런 점에서 이 책은 폭 넓으면서도 중요한 키워드를 모두 포함하고 있어서 학습에 좋은 가이드가 된다.

일단 PHP를 기준으로 설명하기 때문에 PHP를 사용하는 사람이라면 꼭 알아야 할 내용을 잘 다루고 있다. 그리고 많은 내용을 PHP에 할애하고 있긴 하지만 거기에 덧붙여 지금 시대에 웹개발을 한다면 필수적으로 알아야 할 다양한 키워드를 장마다 풀고 있다. 또한, 각 문제와 주제에 대해 어떤 식으로 접근해야 하는지 복잡하지 않게 설명한다. 실제로 문제를 마주하게 될 때 어떤 식으로 생각하고 찾아봐야 하는지 그 방법도 잘 전달하고 있다.

  • 저장소가 뭔가요? (버전 관리 시스템)
  • 저장소의 소스코드를 받았는데 왜 안되죠? (컴포저)
  • 제 컴퓨터에서는 잘 되는데요? (가상 머신을 이용한 개발 환경 구축)
  • 어떤 파일을 고쳐야 할 지 모르겠어요 (프런트 컨트롤러 패턴과 MVC 패턴)
  • GET, POST는 알겠는데 PUT, DELETE는 뭔가요? (HTTP와 REST)
  • 그렇게까지 해야 하나요? (시큐어 코딩)
  • 그냥 제 스타일대로 하면 안되나요? (코딩 컨벤션과 PHP 표준 권고)
  • MySQLi는 나쁜건가요? (PDO와 ORM)
  • 메모장에 코딩하면 안되나요? (통합 개발 환경)

책을 읽기 시작하자마자 끝까지 고개를 끄덕이며 읽었다. 내가 신입으로 들어갔을 때 이런 책이 있었으면 얼마나 수월하게 배우기 시작했을까. 주변에 PHP를 사용하는 사람이 있다면 꼭 알려주자. 신입 PHP 개발자에게는 어떻게 시작해야 하는지 좋은 가이드가 되고 선임이나 팀장급 이상이라면 어떤 내용을 신입에게 가르쳐야 하는지 명확한 지침이 되는 책이다.

기억하고 싶은 글들

2018년 2월 5일

리디북스 결제하러 들어갔다가 밑줄쳤던 내용을 볼 수 있게 정리된 페이지가 있어서 다시 읽어봤다.

같은 일을 반복하면서 다른 결과를 기대하는 것은 미친 짓이다.

오래 전에 작성했던 코드를 지금에 와서도 고칠 부분이 없어 보인다면, 그것은 그동안 배운 것이 없다는 뜻이다.

— 소프트웨어 장인, 산드로 만쿠소

달인의 길은, 길 위에 머물러 있는 것이다.

— 달인, 조지 레너드 (밑줄 긋는 여자, 성수선에서 인용)

더 많이 아는 것은 곧 더 많이 이해하고 용서하는 것이다.

— 불안, 알랭 드 보통 (밑줄 긋는 여자, 성수선에서 인용)

사람들은 시간을 아끼면 아낄수록 가진 것이 점점 줄었다.

— 모모, 미하엘 엔데 (밑줄 긋는 여자, 성수선에서 인용)

바둑뿐 아니라 모든 분야가 그러할 것이다. 혼자서는 절대로 성장할 수 없다. 서로 나누면서 함께 성장해야 한다.

— 조훈현, 고수의 생각법, 조훈현

창조적 독점이란, 새로운 제품을 만들어서 모든 사람에게 혜택을 주는 동시에 그 제품을 만든 사람은 지속 가능한 이윤을 얻는 것이다. 경쟁이란, 아무도 이윤을 얻지 못하고 의미 있게 차별화 되는 부분도 없이 생존을 위해 싸우는 것이다.

— 제로 투 원, 블레이크 매스터스, 피터 틸

그녀는 상자 안에 물건을 수납함으로써 너무 많이 가진 사실을 깨닫지 못하는 현상을 ‘수납의 블랙박스화’라고 부른다.

전 자신이 좋아하는 일에 온전히 몰두할 수 있는 생활이야말로 정말 가치 있다고 생각해요. 물건이 많으면 아무래도 그것들을 관리하는 데 시간을 빼앗기게 되어서 오롯이 나만의 시간을 보낼 수 없거든요. 그런 생활은 자신이 원해서 하는 것처럼 보이지만, 실상은 물건에게 지배당하는 생활일 뿐이라고 생각해요.

— 아무것도 없는 방에 살고 싶다, 미니멀 라이프 연구회

우리는 기분이 나빠서 기분이 나빠진다. 죄책감을 느껴서 죄책감을 느낀다. 화가 나서 화를 낸다. 불안해서 불안해진다.

난 나이가 들고 경험을 쌓는 과정에서 틀린 점을 조금씩 덜어내 매일매일 덜 틀린 사람으로 거듭날 것이다.

‘무엇을 위해 투쟁할 것인가’ 라는 문제가 당신이라는 존재를 규정한다.

— 신경 끄기의 기술, 마크 맨슨

《서민적 글쓰기》 를 읽고

2017년 12월 6일

리디북스서 글쓰기에 관한 책을 떨이로 팔길래 예전에 구입해두고 읽지 않고 있던 책이다. 나름 글을 잘 쓴다는, 말도 안되는 착각이 먼저 있었다. 많이 들어본 사람이 썼다면 무슨 내용을 썼을까 궁금하다고 바로 읽었을텐데 그러기엔 서민 교수님을 잘 몰랐기도 했다. 근래 책도 잘 안읽고 글도 선뜻 쓰기 두려워졌던 차에 이 책이 눈에 들어왔다. 얼마 전 페이스북에서 서민 교수의 일침 어쩌고 같은 영상을 봐서 그런지 다른 책보다 더 눈에 들어왔다.

전반부에서는 자신의 글쓰기 경험을 인용을 곁들여 무용담처럼 쓴다. 뒤에서는 잘된 글과 별로인 글의 예시를 들어 실제적인 해법을 많이 이야기한다. 쉽게 지루해질 수 있는 주제를 짧은 호흡으로 빠르게 이어간 덕분에 술술 읽을 수 있었다. 대부분 작문서에서 말하는 방식으로 많이 읽고, 많이 쓰고, 많이 생각한다는 구양수의 틀을 벗어나지 않는다. 하지만 이 방식을 고루하지 않고 현대를 사는 사람이라면 누구든 따라갈 수 있는 방식으로 친절하게 알려준다. 특히 글을 쓰는 과정과 피드백을 받는 과정을 반복하면서 마치 글로 실험하는 경험이 자주 나와 무엇을 하면 되고 하면 안되는지 실험 결과를 함께 살펴보는 기분이 든다.

책을 읽고 글을 쓰는데 있어서 여러 실천적인 방법을 배울 수 있었다. 글을 계속 쓰기 위해서 블로그나 일기를 쓰라는 이야기도 와닿았지만 책을 읽고 글을 쓰도록 서평 쓰기를 권하는 것도 흥미로웠다. (작가는 알라딘에서 활동한단다.) 커뮤니티에서 서평이란 양식 안에서 다양한 주제로 글쓰기와 피드백을 반복한다면 누구든지 없던 글 실력도 생길 것만 같았다.

신년에는 책을 더 읽어야겠다고 막연히 생각했었다. 사실 매년 막연하게 생각하고 실천에 옮기지 않았다. 짧게라도 서평을 작성하면 좀 더 부지런히 읽지 않을까 싶어 신년에는 서평 남기기도 계획에 더했다. 서민식 지옥훈련이 될 수 있었으면 좋겠다.

서민, 서민적 글쓰기, 생각정원 출판.