//프롤로그
일단 1주차 강의의 전반적인 내용은 다음과 같다.
1. 왜 프로그래밍을 배워야 하는가?
2. 프로그래밍 샌드위치 만들기
3. 엘리베이터의 알고리즘을 살펴보자
4. 어떤 프로그래밍 언어가 있나요?
5. 개발자와 대화하기 (상)
6. 개발자와 대화하기 (하)
7. 네이버에 접속하면 일어나는 일
1주차는 위의 내용에 대해 정리하고 내 생각을 적으려고 한다.
// 본론
1. 왜 프로그래밍을 배워야 하는가?
사실 오래 전 부터 각종 매체에서 프로그래밍을 배우는 사람들이 많다고 했기도 했고, 학창시절 수포자였던 나를 생각해보면 코딩은 배우기 힘들 것이라고 생각했다.
그럼에도 불구하고 나는 "내가 좋아하는 것, 하고싶은 것, 과거 경험, 미래성" 등 많은 걸 고려했을 때 프로그래밍에 도전해보고 싶다는 확신이 들었고 시작하게 되었다.
2. 프로그래밍 샌드위치 만들기
(예시) 4 1 5 2 3 이 5~1까지 배열되는 조건이 만족되는 반복문을 쓴다면
ordered'라는 빈 배열을 만든다.
numbers 안에 든 숫자가 갯수가 0이 될 때까지
X는 1이다.
Y는 numbers의 X번째 숫자다
X가 numbers의 내 숫자의 갯수를 넘기 전까지
numbers의 X번째 숫자가 Y보다 크다면 //조건문
Y를 numbers의 X번째 숫자로 바꾼다. //조건이 성립하지 않는다면
X를 1 증가시킨다 // 반복시킨다.
numbers에서 Y에 해당하는 숫자를 빼낸다.
ordered'에 Y를 추가한다.
ordered를 반환한다.
3. 엘리베이터의 알고리즘을 살펴보자
- 엘리베이터의 상태 : 멈춰있음 / 움직이는 중
- 버튼들의 상태 : 안에서 누름 / ▲ / ▼
<코드 1>
//눌려있는 버튼이 없는 상태에서는 엘리베이터는 새로 눌리는 첫 버튼의 층으로 최종 도착지가 결정되고 그에 따라 상승 또는 하강 상태로 바뀐다.
<코드 2>
//엘리베이터가 이미 있는 층의 버튼은 눌리지 않는다.
<코드 3>
//엘리베이터가 이동 중일 때 이동방향의 최종지점에 도달하기 전까지는 이동방향을 바꾸지 않는다.
<코드 4>
//엘리베이터가 이동 중 버튼이 눌린 층이 있을 때 엘리베이터의 이동 방향이 다르지 않다면
(즉 방향이 같거나 중립이라면) 정지한다.
<코드 5>
//엘리베이터가 이동 중일 때 이동방향의 최종 목적지보다 멀리 있는 층의 버튼이 눌리면 최종 목적지를 그리로 수정한다.
==> 코드 5의 알고리즘은 코드 3에 접목시켜서 간소화가 가능하다.
<코드 3 + 코드 5>
//엘리베이터가 특정 방향의 최종 목적지에 도달하면 다른 눌려있는 버튼이 하나 이상 있을 시 이동 방향을 바꾸고, 그방향의 가장 끝점으로 최종 목적지를 변경한다.
4. 어떤 프로그래밍 언어가 있나요?
//Programming language rank 를 구글링해서 일단 알아볼 수 있다.
- 2021기준 파이선 - C언어 - 자바 순서로 1~3위임
- High Level : 사람에게 가까운 언어
- Low Level : 기계에 가까운 언어
// High --> Low 로 갈수록 난이도는 어려워지고 할 수 있는 제약이 점점 없어진다.
//현재 많이 쓰는 프로그래밍 언어들
- C : 기초, 교양 과목으로 배울 정도의 필수 언어이며 사용자 능력에 따라 Low Level까지 간다.
- C++ : 하드웨어가 중요하고 게임, 그래픽같은 분야에 많이 사용
- C# : 마소에서 개발했고 윈도우에 동작하는 프로그램에 사용
- JAVA : 우리나라에서 압도적 사용량. 웹,앱에 많이 사용. 국내 정부 사이트에서 많이 쓰고있음. 국내에서 취업 시장도 넓음
- Python : 많은 코딩의 자리를 대체하고 있고, 초보자도 배우기 쉽고 적은 분량으로 코딩 가능하고, 커뮤니티도 크고, 머신러닝 / IOT 등에서도 많이 쓰고있음
- RUBY : 파이썬의 라이벌이라고 불리며 일본에서 개발
- PHP : 간단한 사이트에 쓸만하지만, 보안이나 사이트가 커지면 쓰기 힘듬
- Swift : 파이썬이나 루비처럼 간결하고 쉬운 언어
- Kotlin : 안드로이드쪽 개발에 점점 많이 사용되어지고 있음
- JAVA Script : JAVA와는 전혀 다른 프로그램이며, 웹사이트 제작에 최적화 되어있어 웹사이트 제작 이외의 범위에서 벗어나지 못한다는 단점이 있다.
++ 그러나, 지금은 node.js가 등장하고 웹사이트라는 제약에서 벗어남.
==> 국내에선 JAVA, Python을 많이 쓴다.
5. 개발자와 대화하기 (상)
프로그래머와의 커뮤니케이션이 쉽지 않은 이유
1) 우리가 개발자의 언어를 잘 모른다.
2) 개발자들도 보통은 이 언어를 잘 설명할 줄 모른다.
==> 프로그래밍 용어들은 하나하나의 복잡한 개념을 알아야 이해하고 그걸 이해하면 또 다른 복잡한 개념을 이해하고의 반복이기 때문에 쉽게 알아듣기 어렵다는 것이다.
가상의 대화를 통해 한 번 알아보자
1) 제공자 역할을 하는 컴퓨터
2) 컴퓨터를 제공자로 만드는 프로그램이다.
- 페이스북 로그인
1) 백앤드 : 서버에서는 내 계정을 인지하고 친구 소식 광고들의 데이터를 정리해서 내 컴퓨터에 보내줌
2) 프론트엔드 : 크롬, 파폭, 익스플로러 등에 브라우저에서는 데이터를 받아 스크린에 출력해줌
- 브라우저 : 다양한 브라우저가 있으면 이용자는 선택권이 넓어져 좋지만 프론트앤드, 퍼블리셔, 웹 디자이너에게는 머리아픈 일이다.
- 호환성 : 모든 사용자를 배려하기 위한 꼭 지켜야할 요소이며, 퍼블리싱에서도 중요하다.
(장점)
1) 각각의 OS의 한계에 맞게 만들어져 해당 환경에 최적화 되어있다.
2) 성능도 파워풀하고 각 OS의 모든 기능들을 최적화해서 사용할 수 있다.
(단점)
1) 각 OS를 모두 다룰 줄 알아야하고 개발도 할 줄 알아야한다.
2) 앱을 업데이트할 때 검토 및 배포 과정에서 적용 시간이 달라 일괄적으로 하기 어렵다.
: 네이티브 앱은 틀만 만들어주고 그 안에 내용물은 웹 앱이 만들어준다.
: html, css, js 로 만들어진 웹사이트의 요소들이다.
(장점)
1) 네이티브 앱의 단점을 보완해서 진행이 가능하다.
2) 각 OS별로 업데이트할 필요 없이 웹 하나만 변경하면 되서 편하다.
3) 시간과 비용이 절약된다.
(단점)
1) 성능이 따라줘야하는 부드러운 애니메이션 등에는 사용하기 어렵다
6. 개발자와 대화하기 (하)
적응형 웹 / 반응형 웹
1) 적응형으로 만들지 반응형으로 만들지를 결정하는 데는 사이트의 기용하는 방식에 따라 적절한 판단이 필요하다.
2) 구조와 특성에 따라 적응형이 쉬울수도 반응형이 쉬울수도 있다.
3) PC / 모바일에서 각각 사이트 구조가 크게 바뀐다면 '적응형'이 좋다.
4) 컨텐츠의 배치 정도만 달라지는 가벼운 페이지는 '반응형'으로 유용하게 만드는 게 좋다.
쿠키 / 세션 / 캐시
쿠키
: 사이트를 만드는 개발자가 특정 정보가 사용자의 브라우저에 저장되도록 만드는 것
: 개인 컴퓨터에 저장되는 것이다.
: 쿠키는 사용자가 자유롭게 삭제할 수 있다.
: 즉, 공개되어도 문제가 없는 내용들을 저장시키는 것이다.
세션
: 특정 정보가 서버에 저장되는 것
: 내 이용 현황 정보를 기업이 가지고 있는 것이 예다.
: 결제 정보 같은 중요한 보안이 필요한 정보를 저장시키는 것이다.
: 서버의 자원을 쓰기에 모든 것을 세션에 저장하면 서버에 부하가 걸린다.
- 쿠키와 세션이 둘 다 사용되는 경우
: 로그인
캐시
: 이미지, 코드 등 용량이 큰 파일을 사이트에 최초 접속 시 미리 다운받고 이후 재접속 시 다시 다운받지 않도록 하는 것
- 쿠키/세션 : 특정 정보를 기억해두는 것이다.
- 캐시 : 시간과 통신 데이터 절약을 위해 한 번 로드한 데이터를 놔뒀다가 재사용 하는 것이다.
API
: Appliocation Prgram Interface 의 약자
: 공공/특정 그룹에게 공개되어 정보를 읽거나 넣거나 변경할 수 있는 것이다.
: 일종의 자판기 같은 것
: 앱/프론트앤드 웹에서 서버에 요청한 정보를 백앤드 개발자들이 구축한 API를 사용하는 것이다.
- 공공 데이터 포탈 - data.go. kr
- Naver Developer
: 이런 사이트에서 무료 또는 적은 비용으로 사용할 수 있도록 공개되어 있다.
디버그 / 컴파일 / 빌드
프레임워크 / 쓰던 언어가 아니라
: 프로그래밍 언어는 여러가지가 있고 각각 나름의 체계와 특성 설계 철학이 있다.
: 하지만, Jave를 쓰던 사람이 C#,Time Script를 봐도 뭐 하는 코드인지 쉽사리 파악이 가능하다.
: 표준어 쓰는 사람이 사투리를 못알아듣지 않는 것 처럼
: 개발자란 직업은 언어 하나로 할 수 있는 게 아니다.
: 여러 개를 배우고 주 종목 하나를 가지고 있는 것이다.
: 개발자 주 종목 언어로 개발하도록 해주는 것이 좋다.
- Library Framework ==> 집을 짓는것과 비교하면
: Library - 문짝, 창문, 타일 같은 개별적인 조각들 / 특정 기능들을 코딩해 놓은 것
: Framework - 조각들을 어느정도 조합한 기초 틀 / 그것들을 조합해서 뼈대를 갖춘 것- 특정 종류의 소프트웨어를 만들기 위한 일종의 만들기 키트가 있다.
: Jave <-> Spring, Python <-> Django, RUBY <-> RAILS
호스팅 / AWS / 클라우드
7. 네이버에 접속하면 일어나는 일
어....나도 이렇게 할 수 있을거야....있겠지...?