2주 간 노마드코더 북클럽 챌린지로 책 'IT 5분 잡학사전'을 완독했다. IT 업계에서 일하면서도 개발 쪽은 아니다 보니 개념을 제대로 알지 못하는 것이 많았는데 이 책은 기초부터 웹 기술, 컴퓨터 공학, 최신 기술까지 주요 개념을 짚을 수 있어서 좋았다. 챌린지를 통해 매일 내용을 정리하고 퀴즈를 풀며 복습하니 더 머릿속에 오래 남을 것 같다.
노마드코더 북클럽 챌린지 참여하기(무료) > https://nomadcoders.co/challenges
📝 기억할 내용
기초편
- 언어별 특징
- 가전 제품에 이식되는 프로그램용, 매우 기계에 가까운 C 언어
- 시스템 유지 보수, 안드로이드 앱 개발은 대중적인 Java
- 웹 개발, 데이터 등 범용성이 넓은 Python
- 웹 프로그래머를 목표로한다면 무조건 Java Script
- 새 언어를 쉽게 배우는 노하우
- 공식 문서 살펴보기
- 문법 확인하기
- 다른 언어와 비슷한 특징 집중해서 보기
- 새 언어로 코딩 시도하기
- 튜토리얼 시작하기
- 나만의 프로젝트 만들기
- C, C++, C# 언어 정리
- C 언어는 세 언어 가운데 가장 오래되었고, 메모리 자원을 효율적으로 사용하면서도 실행 속도가 빠르다.
- C++은 C를 포함하는 언어로, 절차 지향적이면서도 객체 지향이다. 실행 속도는 C언어와 비슷하다.
- C#은 마이크로소프트에서 만든 언어로, 다양한 분야에서 사용할 수 있다. 실행 속도는 세 언어 가운데 가장 느리다.
- Python이 인기가 많은 이유는 (1)구조가 영어와 비슷하고 (2)개발 분야가 다양하고 (3)커뮤니티가 크고 (4)업무 자동화(scripting)에 찰떡이기 때문!
- (1)동시 통역사처럼 해석하는 인터프리트 언어(ex. Python) (2)도서 번역가처럼 해석하는 컴파일 언어(ex. C) 완성된 코드를 한꺼번에 번역해서 더 빠름! 자바는 컴필레이션과 인터프리테이션을 다 활용.
- JS는 웹 개발 뿐만 아니라 하이브리드 앱(Ionic), 크로스 플랫폼 앱(React Native), 데스크톱 소프트웨어(Electron), 게임, 3D, 인터랙티브(three.js), 증강현실(AR.js), 머신러닝(tensorflow.js)을 개발할 수 있다.
- Kotlin은 자바와 100% 호환. 장점은 (1)null에서 완전한 언어 (2)코루틴(coroutine)을 지원하는 언어라는 점이다. 안드로이드 앱 개발, 데이터 시각화 등에 활용한다.
웹 기술 편
- 라이브러리와 프레임워크의 공통점은 누군가 미리 작성해 놓은 코드로 개발 속도를 빠르게 만든다는 것. 차이점은 라이브러리(ex.jQuery)는 나에게 제어권이 있고 교체가 있는 반면 프레임워크(ex.Django)는 제어권이 없고 교체가 어렵다는 점.
- API는 키보드로 이해하면 쉬움. 프로그램 간의 통신.
- 도메인은 전화번호부로 이해하면 쉬움. IP주소를 찾아준다. 메인 전화번호부는 ICANN, 서브는 레지스트리(ex. 닷컴)
- Adobe Flash의 종말은 스티브 잡스에서 시작되었다.
- HTTP 통신에서 서버와 사용자는 항상 연결되어 있지 않기 때문에 사용자를 기억하기 위해 '쿠키'를 사용자 컴퓨터에 심는다.
- 쿠키는 영수증 역할을 하며 로그인 상태 유지, 한국어 설정 유지 등을 가능하게 한다.
- 풀스택 개발자는 Frontend + Backend + DevOps 모두 가능한 개발자.
- 서버리스는 서버의 하드웨어부터 소프트웨어 관리까지 대신 해주는 서비스 (ex. Amazon Lambda)
+
- 쿠키가 흥미로워 더 찾아보았다. 올초 크롬이 서드파티 쿠키 활용을 제한함에 따라 사용자의 관심사나 인터넷 사용 행태를 추적해 마케팅에 활용하는 것이 어려워졌다.
- 퍼스트 파티 쿠키는 사이트가 직접 수집하는 데이터, 서드 파티는 광고나 데이터 회사 등에서 수집하는 데이터.
- 대안으로 퍼스트 쿠키를 잘 수집해 CRM 마케팅, AI를 활용한 맥락 타게팅 광고 등이 떠오르고 있다. 맥락 타게팅 광고란 AI가 웹페이지 내용을 분석해 가장 관련있는 광고를 보여주는 것. SEO 시대가 가고 LLM의 추천을 잘 받은 글이 중요해지는 LSO가 온다는 글을 봤는데 같은 방향인듯.
컴퓨터 공학 편 1
- 알고리즘: 컴퓨터에게 내리는 지시사항을 나열한 것 (ex. 가장 빠른 길을 찾는 pathfinder, 이미지 손상을 최소화하며 용량을 효율적으로 줄이는 compression)
- 자료구조: 데이터를 효율적으로 찾을 수 있게 보관
- 시간 복잡도로 알고리즘의 속도를 표현하는데 실제 시간을 측정하는 게 아니라 작업에 얼마나 많은 단계를 거치는지 측정한다. Big-O 표기법: ex. O(N), O(log N)
- (1)검색 알고리즘: 선형검색은 배열을 순서대로 하나하나 검색 y=x (2)이진검색은 중앙값에서 검색 시작 y=log x → 데이터가 클수록 유리하고 배열은 항상 정렬되어 있어야 한다.
- 정렬 알고리즘: 시간 복잡도는 O(N²)로 동일하나 평균적으로 뒤로 갈수록 효율적.
- 버블정렬: 2개씩 비교해 작은걸 앞으로
- 선택정렬: 가장 작은 데이터의 위치를 기억하고 순서 교환
- 삽입정렬: 가장 작은 데이터를 앞으로 밀어넣음
- 추상자료구조: 스택은 LIFO(ex. 뒤로가기, 되돌리기), 큐는 FIFO(ex. 주문 처리 시스템)
- 해시 테이블: 시간 복잡도가 O(1)로 매우 효율적. 그러나 해시 충돌(Hash Collision)이 일어날 경우도 고려가 필요함. 속도의 비결은 해시 함수로 검색할 때 쓰는 키를 숫자, 즉 인덱스로 바꿔준다.
- 클린 코드를 위한 5가지 꿀팁
- 의미 있는 변수, 함수의 이름을 적절히 사용하라
- 함수 이름은 가급적 동사로 지어라: 함수는 1가지 일만 잘해야 한다.
- 매개변수는 너무 많이 쓰지 마라
- 불린값을 인자로 보내지 마라
- 축약어를 쓰지 마라
- 시스템은 한번 구축하면 끝이 아니다. 개발자라면 코드를 살아 있는 생명체처럼 대해야 해. 꾸준히 관리 해야 한다.
컴퓨터 공학 편 2
- SQL(Structured Query Language): DB에 질문을 하기 위해 사용하는 구조를 가진 언어. MySQL, Oracle 등의 DBMS를 통해 DB에 접근한다.
- ORM(Object Relational Mapping): SQL 번역기로 프로그래밍 언어로 바꿔준다. Python - Django, Laravel - eloquent, NodeJS - Sequelize
- NoSQL: 데이터베이스의 성질이 달라 자신에게 필요한 것을 선택하면 됨
- document DB: 데이터를 표가 아닌 JSON 형태로 저장해 개발자가 원하는 모양, 데이터 타입으로 저장할 수 있다. (ex. MongoDB)
- key-value DB: 열이 매우 넓은 데이터베이스로 읽고 쓰는 속도가 매우 빠르다. (ex. CassandraDB, DynamoDB)
- graph DB: 노드로 관계망을 표현하는 데이터베이스로 인스타그램 같은 SNS에서 사용
- Git: 파일 이력을 관리하는 프로그램. 같은 파일을 복사해서 각자 컴퓨터에 저장해서 작업한 뒤 다른 사람이 변경한 부분과 내가 변경한 부분을 비교해서 다시 하나로 만들 수 있다.
- Github: 파일과 Git으로 관리한 이력을 저장하고 공유하는 공간. Upload = Push, Download = Pull
- SemVer(Semantic Versioning Specification): 숫자 3개를 사용하는 버전 표기 방식 (ex. 16.0.1)
- 비밀번호 시스템: 해시 함수를 이용해 암호화. 하지만 1:1 매칭 관계를 알 수 있는 표(Rainbow Table)가 있다면 해킹 가능. 그래서 실제 비밀번호에 무작위 텍스트를 더 붙여서 비밀번호를 만드는 솔트(Salt)방식을 사용.
- 객체 지향 프로그래밍(OOP): 객체들이 각자의 데이터와 기능을 가지고 있음. 클래스와 상속 개념으로 코드를 확장 가능성 있게 구조화한다.
- 함수형 프로그래밍: 함수 중심으로 코드를 적는 방식. 버그가 발생하기 어려운 구조. 지원언어는 JAVA, JS, Python 등.
- 선언형 프로그래밍: What, 해야할 일의 결과만을 말해준다. (ex. 샌드위치를 만들어줘)
- 명령형 프로그래밍: How, 단계별로 세부사항을 설명한다. (ex. 1 빵 2개를 꺼내서 구워라. 2 설명설명...)
최신 기술 편
- 딥러닝은 머신러닝의 한 방법이고, 머신러닝은 인공지능의 학습 방법.
- 머신러닝: 지도 학습(supervised)과 비지도(unsupervised)학습이 있다. 지도 학습은 label로 학습. 비지도 학습은 label 없는 데이터로 학습.
- REST API: REST 방식으로 설계한 API로 HTTP 메서드를 도입. GET(조회), POST(생성), PUT(수정), DELETE(삭제)
- 도커는 개발 환경이 맞지 않거나 변경되었을 때 유연한 대처가 가능하도록 해준다. 준비한 프로그래밍 언어가 동작하는 환경을 ‘컨테이너’라고 하며 사용량에 따라 개수를 늘렸다 줄였다 조절한다.
- 암호화폐: DeFi(Decentralized Finance)는 탈중화된 금융이란 뜻으로 암호화폐를 구매한 이후에는 정부 규제가 거의 불가능하다. 내가 곧 은행이 되는 것이기 때문에 스스로 지갑과 키를 신중하게 관리해야 한다.
- 하이브리드 앱: 웹뷰를 보여주는 앱으로 만들기 간단하나 기능의 한계가 있음.
- 크로스 플랫폼 앱: React Native or Flutter에서 하나의 언어로만 작성하면 iOS, Android 둘다 이해함.
- 네이티브 앱: iOS는 swift, Android는Java Kotlin 언어 사용.
- NFT(Non Fungible Token): 대체 불가능한 토큰. 1개만 발행되는 토큰으로 유일한 원본, 즉 진짜라는 사실을 증명해 준다.
- 멀웨어(malicious software): 바이러스와 웜으로 분류된다. 바이러스는 폴더 같은 숙주가 필요하고 웜은 숙주없이 자가 복제하여 전파된다(ex. Stuxnet)
💡느낀 점
코딩을 시작하는 사람들이나 IT 업계에서 일하는 비전공자들에게 이 책을 추천한다. 적절한 비유와 그림으로 개발 관련 개념들을 쉽게 이해할 수 있다. 책에서는 중간 중간 IT 쿠키 상식 코너도 있는데 여기에는 개발자들에 대한 재미있는 이야기나 유용한 팁이 가득하다.
가장 인상깊었던 문장은 프로그래밍 초보자가 하는 실수에 나오는 다음 문장이다.
‘그런 사람들 있지? 계속 말로만 코딩하고, 강의를 사재기하고, 책만 모으는 사람. 눈으로만 보고 말하는 사람은 사실 무언가를 만들지 않아. 이런 사람은 자신의 실력을 확인할 수 없기 때문에 자신에 대한 믿음이 생길 수가 없지. 그래서 계속 더 준비해야 한다고 하는 거야. 자신의 성과를 측정하고 싶다면 일단 뭐든지 좋으니까 만들어 봐.’ (p.43)
완벽주의 성향이 있는 나에게 일침을 가하는 말이다.
외국어를 잘하려면 문법을 외우는 게 아니라 일단 입밖으로 내뱉어야 하고,
글을 잘쓰려면 남이 쓴 글을 읽기만 할 게 아니라 실제로 나만의 문장을 써야 하고,
코딩을 잘하려면 강의를 듣는 게 아니라 뭐든지 간에 만들기 시작해야 한다.
완벽주의는 잘하려고 하다가 시작조차 하지 못한다. 인풋이 있어야 아웃풋도 있는 법이지만 그래도 내가 가진 인풋으로 조금이나마 매일 꾸준히 아웃풋을 만들어내는 습관이 필요할 것 같다. 완벽주의 보다는 완성주의로 하루 하루를 채워 나가고 싶다.
'Book' 카테고리의 다른 글
책 '로지컬씽킹' 5-6장 (0) | 2024.05.14 |
---|---|
책 '로지컬씽킹' 3-4장 (0) | 2024.05.10 |
책 '로지컬씽킹' 1장 (0) | 2024.04.30 |