# IT 5분 잡학사전
- 우선 개발자는 논리적으로 생각하기를 좋아하고 문제해결을 즐기는 성향이 필요하다
- 멋져보이지만 과정은 힘들다 하지만 이런 모든 과정을 참고 만들어낸 결과물에서 얻는 성취감은 엄청나다
- 좋은개발자란 개발과정을 잘이해할 수 있어야 한다
- 개발 과정을 잘 이해한다면 무엇이 필요한지 어떤 검색으로 문제 해결을 할 수있는지 알고있기 때문이다
- 개발자로서의 각오가 필요하다
- 이 함수를 고칠때 까지, 이 버그를 해결할때까지 잠자지 않겠다. 이렇게 끈기와 근면 성실함이 필요하다
- 새로운 프로그래밍 언어를 공부하면 그언어에 담긴 철학, 코드 구조, 개념, 패턴 등을 배우는데, 그 내용이 정말 중요하다 만약 그런것들을 주력언어 사용때 녹여낼 수 있다면 개발자 능력이 발전될꺼라 장담해
- 자바 와 코틀린 100프로 호환된다
- 2017년 구글이 안드앱 개발은 코틀린! 이라거 밀어버림
- 라이브러리 : 프레임워크
- 공통점: 누군가가 미리 작성해놓은 코드이고, 우리의 개발 속도를 더 빠르게 만들어 주는 도구라는 점
- 차이점: 누가 누구를 제어하는가?
- 어떤 도구에 사용 결정을 내가 내리고 있다면 라이브러리(킹피셔, 스냅킷, 모야 등등?)
- 반대로 누군가 정한 규칙에 따라 도구를 사용하고 있다면 프레임 워크(유킷, 스유?)
- 프레임워크는 애플리케이션의 기본 구조를 제공하며 보통 더 많은 기능과 구조를 포함합니다.
- 반면, 라이브러리를 사용할 때는 개발자가 애플리케이션의 흐름을 완전히 제어하고 필요한 기능을 라이브러리에서 호출합니다.
- 도메인 주소 -> IP주소를 가지고 소통하는것은 불편하다
- google.com을 입력하는 순간 브라우저는 도메인 시스템에서 google.com의 IP주소를 찾고 그 IP주소인 웹 사이트로 이동하는거다. 이것이 도메인 시스템이다
- 플래쉬, 익스플로어 망했다
- 플래쉬 보안이슈 에러많음 등등
- 익스플로어 안일했고 업데이트 느리고 자만했다
- 프론트엔드: 개발 발전 속도가 엄청빠르다. 공부 많이해야한다.
- 단점: 끊임없이 발전하고 업데이트 하는 환경이다.
- 장점: 작업한걸 볼수있다? 피드백을 즉각받는듯한 느낌이다. 사용자와 거리도 가깝다.
- 백엔드: 개발 환경이 안정적이다
- 장점: 장고, 루비온레일즈 같은 도구가 안정적이다
- 기술 선택지가 많다(프론트는 HCJ...)
- 단점: 사용자와 거리가 멀다 흥미를 잃을수있다
- 서버 특징
- 서버는 인터넷에 항상 연결되어있으면서 사용자가 웹 사이트 주소를 입력하기를 기다린다.
- 그 주소가 입력되면 그에 맞는 웹페이지와 데이터를 보여준다.
- 지금화면에 보이는 이미지, 회사 로고, 텍스트 등은 모두 그 서버가실제로 가지고 있는 데이터이다.
- 서버는 항상 켜저 있는 컴퓨터이면서 인터넷에 연결되어 있고 접속 요청에 응답하는 컴퓨터이다
- 효율적인 코드를 만들기 위해 자료구조, 알고리즘 공부를한다.
- 효율적인코드와 속도가빠른코드를 고민하게된다
- 데이터를 보기좋게 보관하는 것을 넘어서 찾기 좋게 보관해야한다.(예시 물자창고)
- 어떤 자료구조인지에 따라 프로그램 속도 차이가 나게된다.
- 프로그램에 목적이 다양하기에 자료구조에도 여러가지 방식이있다.
- 예:크기기준, 검색을위한 인덱스기준, 데이터 쌓이는 기준 등등
- 메모리 - 컴퓨터의 기억 공간
- 휘발성 메모리 -> 전원off시 저장한값이 사라짐
- 대표적으로 램: 컴퓨터를끄면 램 데이터가 사라진다.
- 램에는 프로그램에 필요한 데이터가 저장된다
- 변수, 함수 이런것들이 램에 저장, 램이 있어서 프로그램을 실행할 수 있다.
- 저장 위치와 상관없이 일정한 접근 속도를 보장한다. 램은 데이터에 접근하는 속도가 매우 안정되고 빠르다.
- 비휘발성 메모리 -> 컴퓨터의 하드 드라이브 (계속남아있음)
- 배열의 원리
- 배열은 램에 줄줄이 이어진 형태로 공간을 차지하고 있다.
- 컴퓨터는 배열의 시작 주소와 길이를 알고 있다. 그래서 배열은 읽는 속도가 아주 빠르다.
- 배열은 맨 앞부터 차곡차고 채워져 있어야 한다. 그래서 배열은 삽입과 삭제가 느리다.
- 이진 검색 정리
- 이진 검색은 거대한 배열을 다룰때 효과적이다
- 1~10 에서 9를 찾을때 탐색을하면 9번 걸리지만 이진을 쓰면 반인 5, 5~9 반 7, 7~9 반인 8 다음 9 3번만에 찾게 된다.
- 이진 검색을 사용하고 싶다면 배열은 항상 정렬 되어 있어야한다.
- 버스 정류장 큐
- 뒤로가기 커멘트+z 스택
- 클린코드
- 네이밍 잘하자. 함수,변수 86400 ?? 하루를 초로 바꾼것
- 함수이름은 동사.
- 매개변수는 많이쓰지않기 3개이하??? 5개이하???
- bool 값을 함수 인자로 쓰지마라 ex: if/else 사용시에 참,거짓에 따라 함수가 운영된다? 단일책임 위배다.
- 축약어 쓰지말기
- 프로그램은 책임있게 만들어야한다.
- 개발자가만든 프로그램은 사용자에게 영향은준다
- 프로그램만 돌아가면되지 생각으로 대충짜게되면 문제가 생길수있다.
- 프로그램은 끊임없이 관리해야한다.
- 시스템은 한번 구축하면 끝나는것이 아니다. 코드를 살아있는 생명체적으로 대하면서 꾸준히 관리해야 한다. 선인장도 방치하면 죽는거랑 같다고 생각하자
- 16.8.1 이렇게 숫자 3개를 활용한 버전표기방식은 시맨틱 버저닝
- 일반인공지능 // 좁은인공지능
- 일반 인공지능 - 대화, 게임, 판단도 내릴수 있는 인공지능이다.
- 하지만 지금 기술로서는 만들수 없다..
- 좁은 인공지능
- 몇 가지 일만 가능하다.
- 우리 주변에 많이 찾아볼 수 있다.(페이스북의 얼굴 인식 기능)
- 현재 인공지능 기술의 위치이다.
- 머신러닝, 딥러닝 -> 인공지능이 학습하는 방식 또는 인공지능을 학습시키는 방식
- 머신러닝은 인공지능을 학습시키는 방법
- 기계를 학습시킨다. 음성을 인식하든지, 사진을 인식하든 주입시키는것 그럼 인공지능을 만들었다고 할 수 있다.
- 학습 방법은 지도 학습과 비지도 학습으로 나뉜다
- 지도 학습으로 핫도그 판별 인공지능 만들기
- 소시지가 있다, 행태는 길쭉하다, 보통 소스가 뿌려져 있다. 이러한 특징을 라벨이라고 한다
- 라벨을 토대로 기계에게 핫도그가 무엇인지 학습을 시킨다.
- 인간이 기계에게 준 라벨을 토대로 학습해서 대답하는것이다.
- 비지도 학습은 라벨이 없는 데이터를 주는것이다.
- 기계에게 정답을 미리 알려 주지 않고 그냥 핫도그 사진만 수만 장 주는 것이다.
- 그러면 기계는 스스로 어떤게 핫도그 인지 알아차린다?
- 기계는 사진 수만 장과 엄청난 프로세싱 파워를 바탕으로 어떤게 핫도그인지 스스로 그 특징을 찾아서 학습한다.