# 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개를 활용한 버전표기방식은 시맨틱 버저닝 - 일반인공지능 // 좁은인공지능 - 일반 인공지능 - 대화, 게임, 판단도 내릴수 있는 인공지능이다. - 하지만 지금 기술로서는 만들수 없다.. - 좁은 인공지능 - 몇 가지 일만 가능하다. - 우리 주변에 많이 찾아볼 수 있다.(페이스북의 얼굴 인식 기능) - 현재 인공지능 기술의 위치이다. - 머신러닝, 딥러닝 -> 인공지능이 학습하는 방식 또는 인공지능을 학습시키는 방식 - 머신러닝은 인공지능을 학습시키는 방법 - 기계를 학습시킨다. 음성을 인식하든지, 사진을 인식하든 주입시키는것 그럼 인공지능을 만들었다고 할 수 있다. - 학습 방법은 지도 학습과 비지도 학습으로 나뉜다 - 지도 학습으로 핫도그 판별 인공지능 만들기 - 소시지가 있다, 행태는 길쭉하다, 보통 소스가 뿌려져 있다. 이러한 특징을 라벨이라고 한다 - 라벨을 토대로 기계에게 핫도그가 무엇인지 학습을 시킨다. - 인간이 기계에게 준 라벨을 토대로 학습해서 대답하는것이다. - 비지도 학습은 라벨이 없는 데이터를 주는것이다. - 기계에게 정답을 미리 알려 주지 않고 그냥 핫도그 사진만 수만 장 주는 것이다. - 그러면 기계는 스스로 어떤게 핫도그 인지 알아차린다? - 기계는 사진 수만 장과 엄청난 프로세싱 파워를 바탕으로 어떤게 핫도그인지 스스로 그 특징을 찾아서 학습한다.