공부를 끄적끄적 21

동시성 프로그래밍: 그 시작을 위해

서론 개발을 하다보면 언젠가는 작성한 프로그램의 성능적 한계를 만나게 됩니다. 이는 알고리즘적 비효율성으로 인해 야기 되었을 수도, 언어적 한계로 인해 발생했을 수도 있습니다. 알고리즘적 한계를 개선하고 난 후에도 더 높은 성능이 요구된다면, 요구사항을 만족시키기 위해 우리는 동시성 프로그래밍을 고려할 수 있습니다. 혹자는 ‘그냥 multiprocessing 라이브러리 사용하면 되는거 아니야?’라고 생각할 수도 있지만, 이해 없이 사용하게 되면 원치 않는 동작이 야기됨으로써 시스템의 안정성을 보장할 수 없게 됩니다. 이러한 관점에서 바라볼 때, 이 책은 동시성 프로그래밍을 처음 입문하기에 적절한 책이라고 생각됩니다. 이 책의 내용 책의 첫 단원에서는 프로세스, 그리고 동시성과 병렬성에 대해서 설명합니다...

[리뷰] 그로킹 심층 강화학습 - 강화학습의 이론부터 실전까지

이 책의 내용 강화학습의 역사와 배경적 설명은 물론 실제 구현하는 내용까지 총망라한 구성으로 이루어져 있습니다. 이전에 강화학습을 공부하기 위해 몇몇 책들과 자료들을 살펴보았는데, 번역서이지만 한글 자료보다 더 와닿고 이해가 쉬웠습니다. 저자가 서론에서 알고리즘을 위주로 공부하는 것이 가장 효과적이라고 말했는데, 그 말에 걸맞게 3장부터 12장까지 알고리즘으로 가득찬 구성을 가지고 있습니다. 깔끔한 내용과 다양한 구성, 그리고 독자에게 생각해볼 거리는 던져주는 저자의 말들이 어우러져 좋은 책이라는 인상을 받았습니다. 거기에 체감상 1페이지당 1개의 그림이 있어 글로 와닿지 않는 개념들을 머리속에서 그려보는데 많은 도움이 되었습니다. 그중에서도 가장 인상깊었던 것은 트렌디하고 가독성 좋은 코드였습니다. 파..

[리뷰] 제대로 배우는 수학적 최적화: 드디어 제대로된 최적화 책이 나왔다.

서론 우리는 많은 상황에서 최적화라는 말을 사용합니다. 네비게이션의 최단경로찾기나 프로젝트의 마감을 준수하면서 비용을 최소화, 혹은 인력을 최대로 활용하기위한 일정 계획, 혹은 여러 공장들을 가진 기업에서 물류창고를 짓기 위한 입지 선정 등 많은 최적화 문제들이 존재하고 이를 해결하고자 하는 수요는 항상 존재해왔습니다. 이런 문제들을 해결하기 위해 주어진 제약조건들 하에서 이익이나 비용등을 나타내는 목적함수를 최대/최소화 하는 해를 구하는 것을 수리 계획법, 혹은 수학적 최적화라고 합니다. 위에서 예시로 든 다양한 최적화 문제는 수리 최적화 모델로 나타낼 수 있고, 수학적인 속성이나 문제를 해결하기 위한 알고리즘 설계를 통해 최적, 혹은 최적에 가까운 해를 찾아낼 수 있습니다. 특히, 많은 분들이 딥러닝..

[리뷰] 만들면서 배우는 파이토치 딥러닝: 바로 활용할 수 있는 딥러닝

서론 정말 많은 딥러닝 기초 책들이 출간되고 있습니다. 딥러닝의 열풍에 따라 문이과 할 것 없이 시작하기에 초급자를 위한 책이 필요한 것은 맞지만, 나오는 책들의 수준이 사람들의 전반적인 수준이 올라가는 것을 따라가지 못하는 것 같은 느낌을 받았습니다. 입문 이후의 책들이 많이 나오지 않는다면 모든 사람들을 초보자에 머물게 되는 상황이 만들어질 것입니다. 당연히 비숍 교수님의 Pattern Recognition and Machine Learning이나 다른 유명한 바이블들이 존재하지만, 석박사급 연구가 아니라 가볍게 입문하고자 하는, 혹은 실무에서 사용하기 위한 분들은 그정도의 책을 원하지는 않을 것입니다. 심지어 그 책들은 코드조차 없기 때문에 코딩에 약하다면 이해는 하더라고 구현을 못하는 경우가 반드..

[리뷰] 데이터 스토리: 상사에게 이쁨받는 의사소통 능력 기르기

서론 "우리가 보는 데이터는 정제되지 않은 날 것이다." 데이터, 데이터, 데이터, 하루에도 수십번씩 듣는 이야기에 우리는 피로감을 느끼곤 합니다. 그만큼 수많은 종류와 엄청난 크기의 데이터가 이 세상에 존재하고, 지금도 쌓여가고 있기 때문에 데이터에 근거한 많은 이야기들을 듣게 됩니다. 그렇지만, 데이터를 사용한 모든 문서들이 합리적이거나 논리적이지는 않습니다. 데이터라는 최소한의 근거자료를 통해 신빙성이 부여될 뿐, 작성한 사람의 역량에 따라 그 데이터가 제대로 활용되지 못하는 경우가 다반수이기 때문입니다. 특히 데이터 시대에 들어오며 아직 기존의 프레젠테이션 혹은 보고 방식에서 벗어나지 못한 사람들은 물밀듯이 들어오는 데이터의 홍수 속에서 어떻게 효율적으로 표현해야 할지 갈피를 잡기 어려울 것입니다..

[리뷰] 고성능 파이썬 - 빅데이터 시대의 파이썬 제대로 활용하기

서문 파이썬은 느린 언어입니다. 개발자가 타입 지정을 하지 않도록 하고, 메모리도 관리하지 않게 하며, 컴파일도 하지 않게 하는 대신 성능과 메모리 측면에서 많은 부분을 희생했습니다. 하지만 그러한 성능적인 이슈에도 불구하고 그 누구도 파이썬이 '좋지 않은' 언어라고 하지는 않을 것입니다. 성능을 약간 희생한 대신 생산성과 가독성, 그리고 편리함을 얻었기 때문입니다. 파이썬 덕분에 프로그래밍에 입문하여 개발을 시작하기도 하고 머신러닝과 딥러닝에 대한 접근성을 크게 높혀 누구나 데이터를 분석하고 인사이트를 얻을 수 있는 환경을 얻게 되었습니다. 하지만 개인적으로는, 정말 나이브하게 소스 코드를 작성한다면 그 어떤 프로그래밍 언어보다 느려질 수 있는 언어가 파이썬이라고 생각합니다. 특히 간단한 프로그램을 작..

[리뷰] 14가지 AWS구축 패턴

서론 클라우드 환경이 보편화 됨에 따라 대학생, 개발자 가릴 것 없이 모두 한번씩은 AWS를 사용해 본 경험이 있을 것입니다. 보통 가장 먼저 EC2를 사용하고 RDS를 이용하여 DB를 연동해보고, 아마 조금 더 활용해 보았다면 Route53을 활용해서 DNS를 연결해 보았을 것입니다. 여기까지는 많은 기술 블로그와 튜토리얼을 통해 얻을 수 있는 정보이고, 쉽게 따라해 볼 수 있을 것 입니다. 하지만 개인 프로젝트의 규모가 조금 커지거나 기업규모의 서비스를 운영하기 위해서는 위의 단순한 구조로는 한계를 가질 수 밖에 없습니다. 다른 한편으로 실 서비스를 운영하는 입장에서는 온프로미스로 서비스를 운영하던 것을 클라우드로 어떻게 피버팅 해야 하는지, 한다면 장점과 단점이 무엇인지는 직접 활용해 보기 전 까지..

[리뷰] 처음 배우는 쉘 스크립트

서론 처음으로 인턴으로 개발팀에 들어가 일을 하게 되었을 때 공부할 때와 가장 큰 괴리를 느낀 부분은 개발자는 단순이 개발 업무만 수행하는 것이 아니라 개발한 어플리케이션을 실제 서버에 배포하고 운영, 관리해야하는 일이 추가된다는 점이었습니다. (물론 회사에 devops나 운영 팀이 존재하여 그런 업무의 비중이 적거나 없을 수 있지만) 그리고 그런 업무를 하기 위해 스택오버플로우에서 리눅스 명령어라고 지칭되는 cd, ls, grep 등등의 단편적인 지식들을 배우게 되었는데 배운 내용을 가지고 어찌어찌 서버에서 실행을 시킬 수는 있었지만 디테일한 작업이나 자동화 할 수 있어보이는 업무들을 다 일일히 명령어로 작성했던 기억이 납니다. 당시에는 쉘 스크립트 책이 매우 딱딱하고 어려운, 비전공자들에게 매우 불친..

[리뷰]이것이 C#이다(개정판) - C#의 정석

JetBrain사의 2020년도 개발자 에코시스템 설문조사에 따르면 C#은 주로 사용하는 언어 중 8위를 차지할 정도로 흔하게 사용되는 언어 중 하나입니다. 또한 대표적인 게임엔진인 유니티에서 C#을 통해 스크립팅을 하기 때문에 앞으로 VR/AR과 미디어 콘텐츠 시장이 확대됨에 따라 사용자가 증가할 것으로 기대되는 언어 중 하나입니다. 저도 회사 업무에 잠시 C#을 사용한적이 있어서 개인적으로도 많은 관심을 가지고 있었는데, 좋은 기회를 통해서 이번에 소개드리는 책으로 제대로 공부할 수 있었습니다. 저는 컴퓨터공학을 전공하지 않았기 때문에 C계열 언어들에 대한 막연한 두려움을 가지고 있었습니다. 프로그래밍을 시작하는 사람들에게 좌절을 맛보여주는 포인터와 절차지향적 언어라는 인식, 그리고 "cout

밑바닥부터 시작하는 딥러닝3 - 다음 단계를 향해

딥러닝을 처음 시작할 때, 우리는 ANN부터 시작되는 신경망 개념부터 시작하여 CNN등 진화된 알고리즘 들에 대한 이론을 먼저 배우게 됩니다. 그리고 이를 구현하기 위해 텐서플로나 케라스, 파이토치 등을 배우고 MNIST같은 예시 데이터를 가지고 딥러닝 알고리즘을 이용하여 예측하며 프레임워크에 익숙해지게 됩니다.제가 보았던 대부분의 커리큘럼은 여기까지였습니다. 플러스 알파라고 한다면 캐글과 같은 경진대회에 나가는 정도. 그리고 이런 커리큘럼에서 성장의 한계를 느꼈던 분들에게 드디어 추천할 수 있는 책이 나왔습니다. 이 책은 파이토치와 같은 딥러닝 프레임워크를 만들기 위한 60개의 단계로 구성되어 있습니다. 저자가 DeZero라 불리는 순수한 파이썬 기반의 딥러닝 라이브러리를 만드는 법과 그 내부 구조들에..