728x90
개발자는 무엇을 하는 사람인가?
개발자에 대해 알아보고, 개발자 마인드에 한 걸음 다가가 보자.

 


프로그램을 개발하는 사람이 바로 개발자. 개발자는 크게 세 가지 능력을 갖춰야 한다.

  • 코딩능력
  • 비즈니스 가치 창출 능력
  • 논리력

 

 

개발이란?

문제를 프로그래밍을 통해 해결해 나가는 과정.

 

<개발 종류>

  • 웹 어플리케이션(Frontend, Backend, Fullstack..)
  • 응용프로그램(윈도우, 맥)
  • 임베디드 소프트웨어(하드웨어 드라이버, 스마트폰 보안)
  • 인공지능 내 관심분야
  • 모바일 어플리케이션(android, ios)
  • 게임(online, console..)

 

 

소프트웨어 → 변경 가능한 것

아는 것만큼 개발하고 학습해서, 또 아는 것만큼 개발한다. 평생 공부

공부해서 완벽하게 개발 실력을 갖춘다? 불가능. 그게 중요한 게 아님. 평생 배우는 자세로 겸허히 임할 것.

시간과 목표에 대한 압박감을 내려놓을 것.

 

 

GitHub?

Git(버전 관리 도구)을 인터넷 상에 올려 소스코드를 공유.

타인의 소스코드를 보는 것은 곧 나의 공부가 됨.

네트워킹 형성 가능개발자에게 GitHub는 필수다!

개발자에게 구글링은 필수다!!(이미 널리 알려진 사실) 그래도 해결 안 되는 건 stackoverflow에서 질문하기

 

 

개발자로 취직하려면?

  • 지식테스트 준비 ㅡ HTTP, RAM 등의 공학 기초 지식
  • 구현 능력 테스트 ㅡ 내가 잘하는 언어로 준비
  • 포트폴리오 ㅡ 본인의 강점이 드러나게

이 세 가지는 필수적이다.

 


나는 커피를 좋아하는데, 커피를 더 많이 무척이나 매우 좋아하는 개발자가 될 것 같다.
커피 무제한 제공해주는 회사로 가즈아~

 


 

개발자 마인드를 알아보았으니 이제 Computer Science 기초를 알아보자.

네이버 부스트코스에서 카이스트 김문주 교수님의 파이썬 강의를 들었는데 교수님이 계속 CS101이라는 말을 하셨었다. 난 그게 컴퓨터 사이언스 영어 약자라는 걸 나중에야 알았다.ㅎㅎ 101은 보통 입문 강의에 붙이는 숫자인 듯하다.

 


컴퓨터는 기본적으로 5가지 장치로 구성되어 있다.

  • CPU(Central processing unit): 중앙처리장치. 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행하고 처리한다. 코어 수가 적으며 개별적인 작업과 신속한 작업 처리에 유용하다.
  • RAM(Random access memory): 메모리. 실행 내용을 저장하는 주기억장치. 보통 8GB, 16GB이다. 컴퓨터가 꺼지면 데이터가 사라진다. 여러 프로그램 실행 시 속도에 영향을 미쳐, 다다익램이라고 말하는 사람들도 있다.
  • SSD(Solid-state drive): 부메모리, 즉 보조기억장치이다. 데이터를 저장한다. 예전엔 HDD(Hard disk drive)를 썼으나 물리적 방식으로 데이터를 저장하기 때문에 속도가 느리고 충격에 약해 요즘은 가볍고 빠른 SSD를 주로 쓰는 추세라고 한다.
  • 입력장치: 키보드, 마우스와 같이 컴퓨터에 입력을 시키는 장치를 말한다.
  • 출력장치: 모니터, 프린터, 스피커와 같이 컴퓨터에서 출력되는 장치를 말한다.

 

그럼 GPU는 무엇일까?

  • GPU(Graphic processing unit): 그래픽 처리장치로, 더 작고 많은 코어로 개별적인 작업과 신속한 작업 처리에 사용된다. 주요 기능은 게임의 그래픽 처리3D 모델링 구현이며 여러 개의 코어를 동시에 병렬로 작동시켜 부동 소수점 연산 등 특정 단순 계산을 빠르게 할 수 있다.

 

 

컴퓨터는 이진수만 이해한다.

우리는 보통 10진법을 사용하여 수를 나타내는 반면, 컴퓨터는 0과 1로만 이루어진 2진법을 사용한다. 숫자 10을 컴퓨터가 이해하게 하려면 1010으로 입력해야 한다. 10진법은 9까지는 한 자릿수를 유지하다가 10이 되면 자릿수가 두 자리가 되는 방식이다. 2진법도 마찬가지이다. 1까지는 한 자릿수를 유지하다가 2가 되면 자릿수가 두 자리가 된다.
10진법, 5진법, 2진법을 비교해 보자.

10진법 5진법 2진법
1 1 1
2 2 10
3 3 11
4 4 100
5 10 101
6 11 110
7 12 111
8 13 1000
9 14 1001
10 20 1010

2진법의 경우 맨 오른쪽부터 2^0, 2^1, 2^2... 이렇게 계산한 다음 더해서 십진수로 나타낼 수 있다. 반도체가 하나 있다면 0 또는 1을 실행할 수 있으므로 '0 → 모니터 끄기, 1 → 모니터 켜기'와 같이 두 개의 명령을 수행할 수 있게 된다. 반도체가 두 개 있다면 00, 01, 10, 11을 실행할 수 있으므로 네 개의 명령을 수행할 수 있게 된다.

인간은 한국어, 영어, 일어와 같은 언어를 사용한다. 컴퓨터는 기계어를 사용한다.
*기계어: CPU가 컴파일(해석) 없이 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어. 0과 1로 이루어짐
**어셈블리어: 기계어의 명령어를 사람이 좀 더 쉽게 제어하기 위해 기호로 나타낸 언어

 

 

컴퓨터의 운영체제에는 무엇이 있을까?

*운영체제(Operating system): 사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어(출처: 위키백과)


우리가 주로 사용하는 윈도우가 바로 운영체제이다. 윈도우말고도 맥OS, 리눅스 등이 있다. 용도에 따라 다르게 사용한다.

리눅스는 오픈소스로 무료이며 보안성이 높은 파일을 관리하기에 좋아 서버 쪽이나 연구용으로 적합하다고 한다.

 

 

프레임워크(Framework)와 라이브러리(Library)?

    •  프레임워크: 특정 일을 수행할 때 사용하는 기능. 프레임워크를 사용하면 빠르게 만들 수 있다.
      • 웹 프레임워크: Django, Spring, AngularJS, Pyramid, CherryPy, Flask 등
      •  딥러닝 프레임워크: Theano, TensorFlow, Keras, PyTorch, Torch, DL4J 등
    • 라이브러리: 기능들의 모음으로 jQuery, React.js 등이 있다.
      사실 프레임워크랑 라이브러리는 좀 헷갈리는 개념이긴 하다. 프레임워크는 이미 구축되어 있는 것을 가져다 쓴다고 생각하면 되고, 라이브러리는 내가 필요한 부분을 가져와서 사용할 수 있는 것이라고 생각하면 될 것 같다.

 


API?(Application Programming Interface)

: 어플리케이션 간에 데이터를 주고 받는 규약. 예를 들어 날씨 정보를 보여주는 앱을 만든다고 할 때, 기상청의 API에 명시된 사용법과 규격에 맞게 사용해야 한다. API가 비공개이거나 제공되지 않으면 사용할 수 없다.



      참고 영상:


노마드 코더 <API 기초개념 잡아드림. 5분 순삭>

      내가 즐겨 보는 개발자 유튜버이다.

 

 

클라우드?

: 클라우드: 웹에서 프로그램을 실행하는 방식. 데이터 공유와 협업이 편리하고 유지보수 관리에 탁월하다.

      ex. 팀즈, 구글 워크스페이스, 아마존 AWS, 마이크로소프트 Azure, 구글 GCP 등

 


프로그래밍 언어 종류를 알아보자.

  • C - 컴파일 언어. 기계에 대한 직접적인 접근이 가능하다. 임베디드, 시스템 소프트웨어 개발에 사용
  • Java, C#, C++ - OPP(객체지향) 기반. 게임이나 응용소프트웨어에 개발에 사용
  • Python - 스크립트/인터프리터 언어. 벡터 방식의 테이터 형태 다룰 때 많은 라이브러리 제공
  • Javascript - 스크립트/인터프리터 언어. 웹페이지나 서버 개발 시 사용

하이레벨 랭귀지 로우 레벨 프로그래밍 랭귀지(어셈블리어, 기계어)

 

하이레벨랭귀지?

  • 컴파일 언어(C, Java 등): 입력한 코드가 기계어로의 번역 과정을 거친 뒤 실행되는 언어
  • 인터프리터 언어(Javascript, Python 등): 번역과 실행이 동시에 수행되는 언어

 

 

 자료 구조

  • 단순히 이름만을 관리하고 싶을 때 - 배열
  • 하나의 회원에 연관된 정보를 저장하고 싶을 때 - 객체
  • 데이터 입력보다는 검색이 더 많을 때 - 리스트, 딕셔너리

알고리즘은 시간과 공간을 효율적으로 만드는 것이 중요!!
시간 = 실행 속도, 공간 = RAM 최소로

 

 


개발방법론

  • 전통적인 개발 프로세스 매우 올드.. 효율성↓ 사용자 요구와 어긋나는 경우 多 
    1. 기능 명세
    2. 개발
    3. 테스트
    4. 배포 및 런칭 
  • 애자일(Agile process) 요즘 추세라고 함
    1. 요구 기능 구현 후 중간 테스트 및 피드백 진행
    2. 중간 피드백 반영하여 구현 후 다시 테스트 및 피드백 진행

테스트 주도 개발(TDD): 테스트 코드를 먼저 만들고 테스트를 통과하는 코드 구현

  • 테스트 주도 개발(TDD): 테스트 코드를 먼저 만들고 테스트를 통과하는 코드 구현
  • 짝 프로그래밍(Pair programming): 번갈아 가면서 프로그래밍을 하는 방법. 생산성

 

- 끝 -

728x90

+ Recent posts