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

프로그램을 개발하는 사람이 바로 개발자. 개발자는 크게 세 가지 능력을 갖춰야 한다.
- 코딩능력
- 비즈니스 가치 창출 능력
- 논리력
개발이란?
문제를 프로그래밍을 통해 해결해 나가는 과정.
<개발 종류>
- 웹 어플리케이션(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가 비공개이거나 제공되지 않으면 사용할 수 없다.
- 참고 영상:
- 내가 즐겨 보는 개발자 유튜버이다.
클라우드?
: 클라우드: 웹에서 프로그램을 실행하는 방식. 데이터 공유와 협업이 편리하고 유지보수 관리에 탁월하다.
- ex. 팀즈, 구글 워크스페이스, 아마존 AWS, 마이크로소프트 Azure, 구글 GCP 등
프로그래밍 언어 종류를 알아보자.
- C - 컴파일 언어. 기계에 대한 직접적인 접근이 가능하다. 임베디드, 시스템 소프트웨어 개발에 사용
- Java, C#, C++ - OPP(객체지향) 기반. 게임이나 응용소프트웨어에 개발에 사용
- Python - 스크립트/인터프리터 언어. 벡터 방식의 테이터 형태 다룰 때 많은 라이브러리 제공
- Javascript - 스크립트/인터프리터 언어. 웹페이지나 서버 개발 시 사용
하이레벨 랭귀지 → 로우 레벨 프로그래밍 랭귀지(어셈블리어, 기계어)
하이레벨랭귀지?
- 컴파일 언어(C, Java 등): 입력한 코드가 기계어로의 번역 과정을 거친 뒤 실행되는 언어
- 인터프리터 언어(Javascript, Python 등): 번역과 실행이 동시에 수행되는 언어
자료 구조
- 단순히 이름만을 관리하고 싶을 때 - 배열
- 하나의 회원에 연관된 정보를 저장하고 싶을 때 - 객체
- 데이터 입력보다는 검색이 더 많을 때 - 리스트, 딕셔너리
알고리즘은 시간과 공간을 효율적으로 만드는 것이 중요!!
시간 = 실행 속도, 공간 = RAM 최소로
개발방법론
- 전통적인 개발 프로세스 매우 올드.. 효율성↓ 사용자 요구와 어긋나는 경우 多
- 기능 명세
- 개발
- 테스트
- 배포 및 런칭
- 애자일(Agile process) 요즘 추세라고 함
- 요구 기능 구현 후 중간 테스트 및 피드백 진행
- 중간 피드백 반영하여 구현 후 다시 테스트 및 피드백 진행
테스트 주도 개발(TDD): 테스트 코드를 먼저 만들고 테스트를 통과하는 코드 구현
- 테스트 주도 개발(TDD): 테스트 코드를 먼저 만들고 테스트를 통과하는 코드 구현
- 짝 프로그래밍(Pair programming): 번갈아 가면서 프로그래밍을 하는 방법. 생산성↑
- 끝 -
'MS AI School' 카테고리의 다른 글
DAY 5 - 자바스크립트 기초(데이터 유형, 함수, HTML에서 작성하기) (0) | 2022.10.13 |
---|---|
DAY 4 - CSS 심화 공부(레이아웃, 반응형) (0) | 2022.10.11 |
DAY 3 - CSS기초 박스모델 공부 (0) | 2022.10.11 |
DAY 2 - CSS를 배워보자 (0) | 2022.10.09 |
Day 1 - HTML을 배워보자 (0) | 2022.10.09 |