코딩을 하는 사람이라면 누구나 더 아름답고 간결한 코드를 추구할 것이다. 대부분의 사람은 다양한 알고리즘, 자료구조를 찾아보고 다른 사람들의 프로그래밍 기법을 참고한다. 하지만 이 책은 그보다 더 근본적인 해결책을 제시한다. 바로 코딩하는 중에 우리의 뇌에서는 어떤 과정을 거치고 어디서 어떻게 작동하는지 파악한 후 개선 방법을 도출해내는 것이다. 제목 그대로다. 프로그래머의 뇌를 분석한다. 클린 코드 책을 뇌과학 측면에서 분석한 느낌이다. 코딩 중 겪는 혼란에 대한 이해 코드를 읽을 때 혼란이 생기는 이유, 잘 이해하지 못하는 이유는 3가지가 있다. 지식 부족, 정보의 부족, 두뇌의 처리 능력 부족. 여기서 말하는 지식과 정보는 완전히 다른 개념이다. 지식은 언어 문법, 알고리즘 등 학습을 통해 얻을 수..
서버와 클라이언트의 통신 과정을 간단히 정리하면 다음과 같다. 5단계에 걸쳐 진행된다. 서버를 열고 열린 서버에 클라이언트가 연결을 요청해야 하므로 서버 파일을 실행한 후 클라이언트 파일을 실행해야 한다. 1. 서버와 클라이언트로 쓸 소켓 객체를 생성 서버와 클라이언트는 소켓 생성 자체는 동일하지만 생성 이후 동작에 따라 서버와 클라이언트의 역할을 수행하게 된다. 아래 코드에서도 변수명만 다른 것을 확인할 수 있다. server_sock=socket(AF_INET, SOCK_STREAM) client_sock=socket(AF_INET, SOCK_STREAM) AF_INET : Address Family의 한 종류로, IPv4 인터넷 프로토콜을 사용한다는 의미이다. SOCK_STREAM : TCP를 사용..
소설책은 나의 주관적인 생각과 표현이 많이 들어가기도 하고 아직 글 쓰는 게 서툴기 때문에 포스팅하지 않고 있었다. 하지만 이 책을 읽으며 많은 감명을 받기도 하였고 기억으로만 남기기에는 아쉬워 기록을 하게 되었다. 도서관에 책이 자주 들어와서 21,22년도 베스트셀러를 접할 수 있었는데 신간 소설을 보며 찾은 특징이 하나 있다. 이 세상, 특히 대한민국 어딘가에 실제로 존재할만한 배경과 인물, 스토리를 책의 제재로 한다는 것이다. 일종의 트렌드라고 생각한다. 이러한 트렌드의 장점은 뚜렷하다. 현실과 다를 것 없는 극사실적인 내용을 보며 깊은 공감대를 형성하여 몰입할 수 있다. 상황과 생각이 어딘가 자신과 닮은 사람이 등장인물로 나온다. 그의 말과 행동, 선택과 그 결과를 보며 자신을 되돌아보기도 하고 ..
기술의 발전은 여러 차례 개선을 거치고 장애물에 부딪히면서 중단되기도 하며, 혁신을 통해 장애물을 극복하면서 이루어진다. 그렇기에 기술적 예측은 특히나 불확실해지기 십상이다. 불가능하리라 여겼던 것이 오히려 쉬울 때가 있다. 직접 해보기 전엔 알 수 없다. 현재 인공지능은 우리 사회 어디에나 있으며 수많은 학자들의 예측보다 더욱 빨리 발전하고 활용되고 있다. 초지능을 향해 스스로 학습하고 향상해나가는 인공지능을 인간이 언제까지나 통제할 수 있을 것인가. 기술의 발전과 활용에만 몰두하지 말고 인공지능의 위험성을 인지하고 서사를 검토해보아야 한다. 인공지능은 무엇이 되려 하는 것인가? 불투명한 러닝 머신(Learning Machine)의 한계 블랙박스. 딥러닝이 잘 작동하여 목표를 달성하지만 왜, 어떻게 무..
객체지향 설계 코드의 세 가지 관점 1. 개념 관점(Conceptual Perspective) : 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 이 관점은 사용자가 도메인을 바라보는 관점을 반영한다. 따라서 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다. 2. 명세 관점(Specification Perspective) : 사용자의 영역인 도메인이 아닌 개발자의 영역인 소프트웨어로 초점이 옮겨진다. 명세 관점에서 프로그래머는 객체가 협력을 위해 무엇을 할 수 있는가에 초점을 맞춘다. 따라서 객체의 인터페이스를 바라보게 된다. 명세 관점과 구현 관점을 명확하게 분리하는 것에서 객체지향 설계가 시작된다. 3. 구현 관점(Implementation Perspective..
파이썬 멀티스레딩(Multi Threading) from threading import * x = Thread(target=yhb, args=('A',)) x.start() target : 쓰레드가 실행할 함수를 지정. args : target으로 지정한 함수에 넘길 인자. start() 함수를 실행하면 해당 쓰레드가 시작된다. 주의할 점) args의 자료형이 튜플이기 때문에 인자가 하나일 경우 뒤에 콤마(,)를 반드시 붙여 줘야 한다. 튜플 자료형 개념) https://wikidocs.net/15 Time-wait 상태 빠져나오기 OSError: [Errno 98] Address already in use 와 같은 에러가 뜬 경우, (주소 할당 에러, Binding Error) sock.setsocko..
6장. 객체지도 길을 찾는 두 가지 방법. 1. 다른 사람에게 직접 길 물어보기. 구체적인 경로를 정확히 알기 어렵고 재사용이 불가능한 일회성 방법이다. '원하는 길'만 '한 번' 찾을 수 있는 기능이 있다. -> 요구사항이 바뀌면 그것을 수용 불가하다. 기능적이고 해결책 지향적인 접근법, 변경에 취약. 2. 지도 보기 지도는 실세계의 지형을 기반으로 만든 추상화 모델이기 때문에 길을 찾는데 필요한 모든 정보를 담고 있다. 길을 찾을 수 있는 '기능'이 아니라 길을 찾을 수 있는 '구조'를 제공한다. 다양한 목적으로 여러 번 재사용할 수 있다. 즉, 범용적이다. 지형은 쉽게 변하지 않기 때문에 과거의 지도를 조금만 수정하면 계속 사용할 수 있다. 구조적이고 문제지향적인 접근법, 변경에 안정적. 길을 물어..