프로그래밍 첫걸음 시작하기 : 프로그래밍 기초 1주차

패스트 캠퍼스의 '프로그래밍 첫걸음 시작하기' 라는 프로그래밍 기초 수업을 듣기 시작하면서
내가 새롭게 알게 되고 깨달았던 것들을 정리 해보려고 한다.
물론 기존에 알고 있던 것들도 정리하면서 내 머릿속에 넣어야 할 것 같다.

chapter1

프로그래밍을 배워야 되는 이유

강의에서는 프로그래밍을 배워야 되는 이유를 4가지 정도로 구분해 놓았다.

  1. 돈이 된다.
    내가 하려는 이유 중 하나 이기도 하다.
    많은 회사들이 IT화 되어가고 사람들도 앱이나 웹을 이용하지 않는 사람이 없다.
    그런 부분에서 수요가 끊이지 않을 것이라는 생각이 들었고 역시 패스트캠퍼스 강의에서도
    그런 부분을 얘기하시면서 수요가 많은것이 좋은점 중 하나라고 말씀하셨다.
    또한 회사를 다니면서 외주를 받아 더 많은 돈을 벌 수도 있다.
    물론 쉽지 않겠지만 그런 기회나 선택지가 있다는 것 자체가 배워야되는 이유가 될 수 있을 것 같다.

  2. 의외로 쉽다.
    정말 쉽게 생각 노트북과 내 머리만 있다면 소프트웨어를 만들어 팔아서 엄청난 수익을 올릴 수 있다. 프로그래밍 언어도 프레임워크와 라이브러리의 많은 발달로 옛날과는 달리
    내가 모든 것을 하지 않아도 개발을 할 수 있는 환경이 만들어져 있다.
    또 온라인에서의 지식 공유가 가장 활발한 분야여서 내가 모르는 것이나 어려운 문제를 만났을 때 언제든지 온라인을 통해 공유하고 또 공유 받을 수 있다.
    인터넷을 통해 지식을 습득하고 공유한다는 점은 큰 장점 중 하나인 것 같다.
    강의에서도 프로그래밍이 많이 쉬워졌고 특정 부류의 전유물이 이제는 아니라는것을 말씀하셨다.

  3. 써먹을 데가 많다.
    컴퓨터, 태블릿, 스마트폰을 사용하지 않는 기업이나 사람은 없다고 말 할 수 있다.
    반대로 생각하면 모든 사람들이 쓴다는 말인데 그 디지털 기기를 사용하려면 소프트웨어가
    필요하고 소프트웨어가 필요하면 소프트웨어를 만드는 사람인 개발자가 필요하다.
    디지털 기기가 적어지진 않을 것이고 그렇다면 개발자는 평생 사는동안 세상에 필요한 사람이 될 수도 있을 것이다.

  4. 개발자와의 일이 즐거워진다.
    이 부분은 나에게는 현재 해당되지는 않지만 나중에 혹시 진로를 수정했을 때 개발자와 일을 하게 되는 상황이 온다면 정말 많은 도움이 될 것 같다. 요즘은 어렸을 때부터 코딩 교육을 하는 부분이 있지만 나 때만 해도 (Latte is horse) 그런 교육이 없었기 때문에 개발자와의 협업이 생긴다면
    전문 용어들도 알지 못하고 개발자의 입장에서 생각 해볼수가 없기 때문에 협업에서 차질이 많이
    생길 수 있는데 그런 부분에서 패스트캠퍼스의 강의가 기본적인 기초를 갖추는데 도움이 될 것 같다.

프로그래밍 지시하기

컴퓨터는 생각 이상으로 멍청해서 개발을 하는 사람이 하나하나 정확하게 일을 시키지 않으면 에러가 나고 내가 원하는 결과가 나오지 않는다.

식빵 잼 바르기

예를 들어 식빵에 잼을 바른다고 했을 때 사람은 '식빵에 잼을 발라' 라고 해도 잘 바를 수 있을것이다.
그러나 컴퓨터는 식빵을 꺼내고 잼 뚜껑을 열고 식빵 어느쪽에 잼을 바르고 잼이 발라지면 잼 바르는 것을 멈추는 등 모든 행동을 지시해줘야 한다.

큰 숫자 찾기

numbers 라는 이름으로 숫자 5개가 주어진다. 3,1,4,5,2
x는 1이다
y는 numbers의 x번째 숫자다
x가 numbers 내의 숫자를 넘기 전까지 -> for문
numbers의 x번째 숫자가 y보다 크다면 -> if문
y를 numbers의 x번째 숫자로 바꾼다.
x를 1 증가시킨다.
y를 제출한다.

엘리베이터 알고리즘

  1. 눌려있는 버튼이 없는 상태에서는 엘리베이터는 새로 눌리는 첫 버튼의 층으로 최종 도착지가 결정되고 그에 따라 상승 또는 하강 상태로 바뀜
  2. 엘리베이터가 이미 있는 층의 버튼은 눌리지 않음
  3. 엘리베이터가 이동 중일 때 이동방향의 최종지점에 도달하면 다른 눌려 있는 버튼이 하나 이상 있을 시 이동 방향을 바꾸고, 그 방향의 끝점으로 최종 목적지를 변경
  4. 엘리베이터가 이동 중 버튼이 눌린 층이 있을 때 엘리베이터의 이동 방향이 다르지 않다면 정지
  5. 엘리베이터가 이동 중일 때 이동방향의 최종 목적지보다 멀리 있는 층의 버튼이 눌리면 최종목적지를 거기로 수정

이런식으로 컴퓨터는 디테일하게 지시를 해줘야하기 때문에 처음에는 익숙하지 않고 어려울 수 있고 문제를 해결하는 과정을 스스로 잘 생각할 수 있어야 하기 때문에 문제 해결 능력이 개발자에게 중요한 능력인 것 같다.

프로그래밍 언어

프로그래밍 언어란 컴퓨터와 사람이 소통할 수 있는 수단이다. 컴퓨터에게 일을 시키는데 컴퓨터 언어가 아닌 사람의 언어로 시킨다면 당연히 이해하지 못하기 때문에 프로그래밍 언어를 이용해 컴퓨터에게 일을 시키는 것이다.

언어의 종류

이름구분난이도레벨
High level language사람 언어에 가까움낮음High level
Assemble language컴퓨터 언어에 가깝지만 가독성을 조금 높임중간Low level에 포함
machine language컴퓨터 언어높음Low level
  • C 언어
    비교적 하드웨어를 직접적으로 통제하고 기기의 효율성을 끌어올려야 하는 분야에서 많이 사용됨
  • C#, C++, JAVA
    세세하고 복잡한 부분까지 통제하지 않아도 되고 C보다 조금 더 낮은 수준의 컴퓨터 언어를 구사
    특히 JAVA는 우리나라에서 웹 제작에 정말 많이 쓰임
  • python
    문법이 한결 수월하고 배우기 쉽다. 머신러닝, 핀테크 등 다양한 분야에서 사용됨
  • Objective-C , Swift
    IOS 기반의 소프트웨어를 만드는데 활발하게 사용
  • Kotlin
    안드로이드 기반의 소프트웨어를 만드는데 사용
  • JavaScript
    앱, 웹등 화면에서 애니메이션 기능을 넣거나 동적인 것을 표현할때 사용
    예전에는 브라우저 기반에서만 동작했지만 현재는 Node.js 프레임워크를 통해 컴퓨터에서도 프로그래밍 할 수 있게 됨

프로그래밍 용어

  • 클라이언트 & 서버
    클라이언트는 사용자쪽,즉 데이터를 제공받는 쪽, 서버는 데이터를 보내는쪽 이라고 생각 할 수 있다.
    상대적인 개념이며 서버쪽도 다른 서버에 요청하게 되면 클라이언트쪽이 되는 것이다.

  • 프론트엔드 & 백엔드
    프론트엔드는 눈에 보이는 부분, 백엔드는 눈에 보이지 않는 부분이라고 할 수 있다.
    프론트엔드는 클라이언트 부분을 담당하고 디자인이나 시각적인 부분을 담당하고
    백엔드는 서버관리나 API를 만드는 서버쪽 일을 담당한다.

  • Web standards
    모든 브라우저가 화면을 구현하는 방식이나 동작하게 하는 방식이 달라서 개발자들이 여러 브라우저에 맞춰 따로 개발을 해야되는 상황을 최대한 방지하기 위해 웹 표준이라는 것이 개발 되었다.

  • 호환성 (Compatibility)
    -네이티브 앱 = 해당 앱의 모든 기능들을 각 OS 마다 따로따로 제작한 제품들
    -> 성능도 빠르고 해당 환경에 최적화 되어있지만 OS를 따로 만들어줘야 하고 업데이트가 늦다.
    -웹앱 = 네이티브 앱에서 틀만 만들어주고 그 안의 기능들은 웹사이트로 만드는 것
    -> 개발과 운영 측면에서 효율적이지만 성능이 좋아야 하는 작업들은 기능이 떨어진다.

  • 적응형 웹 & 반응형 웹
    적응형 웹은 스크린의 크기를 인식해서 pc라고 판단되면 pc용 화면을 보여주고 모바일이면 모바일 화면을 보여준다.
    -> 내용이 많고 컨텐츠의 크기가 많이 달라진다면 적응형 웹이 좋다.
    반응형 웹은 스크롤에 따라 화면의 구성을 다르게 하는것이다.
    -> 내용이 적고 복잡하지 않다면 배치정도만 바뀌는 반응형 웹이 좋다.

  • 쿠키, 세션, 캐시
    쿠키 = 사용자의 브라우저에 저장되도록 프로그래밍 해놓는 것, 브라우저 단위이다.
    세션 = 사용자의 서버에 저장되는 것. 보안이나 결제에 대한 정보를 세션에 저장.
    캐시 = 이미지나 용량이 큰 파일을 다운 받아놓은 다음에 재접속할때 빠르게 불러올 수 있게 하는것.

  • API (Application Program Interface)
    서버와 클라이언트가 서로 통신하기 위해서는 서로 간의 약속이 필요한데 이 약속을 API라 한다.
    -> 서로 원할한 통신을 위해 요청을 하고자 하는 페이지에 제대로 요청이 가도록 약속을 해놓아야 한다.

  • Debug 디버그(디버깅)
    코드에 오타가 있거나 오류가 있을 때 원인을 찾기 위해 코드를 다시 분석하는 것

  • 컴파일 언어 / 스크립트 언어
    -파이썬이나 자바스크립트는 작성된 코드를 번역해 실행한다.
    즉, 코드를 실행했을때 번역을 해서 실행하기 때문에 속도가 느리고 문법적 오류가 있든 없든 실행되기 때문에 디버깅이 어렵다.
    -자바나 C계열처럼 무거운 언어들은 코드가 완성된 후에 기계가 읽을 수 있는 기계어로 미리 번역해서 파일을 만들어 놓는다.
    그 파일을 읽기 때문에 속도가 빠르고 문법적 오류가 있으면 디버깅이 수월하다.

  • 빌드
    개발자에 컴퓨터에서 최적화되어 최종으로 나오는 결과물
    -> 보통은 자동화 되어 돌아가는 작업

  • 언어, 프레임워크, 라이브러리
    꽤 예외적인 언어가 아니라면 어느정도 공부하면 쉽사리 파악할 수 있다.
    하지만 전문적인 수준으로 올라가기엔 시간이 오래 걸릴 수 있기 때문에 전문적인 언어가 아니면 좋은 개발을 하기는 힘들다.
    -프레임 워크는 개발을 하기 쉽게 만들어주는 틀 같은 것이다.
    하나부터 열까지 개발을 하는것이 아닌 틀을 만들어 놓고 사람들이 쓸 수 있게 만들어 놓은 것이다.
    -라이브러리는 특정 기능을 코딩 해 놓은 악세서리 라고 생각할 수 있다.

  • 호스팅
    호스팅 업체에서 서버에서 사용할 서버를 구축해두고 기업들은 호스팅 업체에 일정 금액을 지불하고 서버를 사용하는 서비스이다.

  • 클라우드 컴퓨팅 시스템
    AWS, Azure 등의 클라우드 컴퓨팅 시스템은 일정 공간 혹은 일정 부분만 사용할 수 있고 추가와 제거가 빠르기 때문에 효율적으로 사용할 수도 있다. 비용이 더 비싸긴 하지만 효율적으로 사용한다면 비용을 줄일 수도 있다.

지금까지 1주일 분량의 패스트캠퍼스의 프로그래밍 기초를 정리 해봤는데 분명 모르는 부분도
많지만 지금까지 1달 조금 넘게 공부하면서 많은 부분을 이해하고 습득한 것 같다는 생각이 든다. 강의를 들으며 내가 알고 있는 내용이 나온다는 것에 뿌듯하고 더 공부를 열심히 해야겠다는 동기부여도 되는 것 같다.
5주짜리 강의를 잘 들어서 기초를 잘 다질 수 있는 계기가 되면 좋을 것 같다.

프로그래밍 첫걸음 시작하기 강의 : #패스트캠퍼스 #내일배움카드 #K디지털크레딧 #바이트디그리 #프로그래밍기초

좋은 웹페이지 즐겨찾기