본문 바로가기

백엔드/os 및 일반 지식

프로그래밍 언어 이해하기

반응형

* 프로그래밍 언어 살펴보기

* 프로그래밍 언어를 분류하는 두 가지 기준

* 프로그래밍 언어 Overview

* 프로그래밍 언어 제대로 사용하기

 

 

 

챕터 1: 프로그래밍 언어 살펴보기

- 프로그래밍 언어란 무엇이고, 간단한 이해

● 컴퓨터(일을 대신해주는 기계)

● 프로그램(컴터가 어떤 일을 할지 설명해주는 설명서)

● 프로그래밍 언어(그 설명서를 쓰기 위해 쓰는 언어)

- 컴퓨터, 프로그램, 프로그래밍 언어는 어떤 관계가 있는지 배우고, 프로그래밍 언어가 지나온 길

 

 

챕터 2: 프로그래밍 언어를 분류하는 두 가지 기준

- 프로그래밍 언어를 분류하는 두 가지 기준

● 객체지향 방식 : 기존의 탑다운(전체 프로그램을 합쳐놓아야지만 제대로 돌아가는 것을 확인해볼 수 있다)의 문제점을 해결하기 위해서 객체 단위로 나누는 것을 의미한다(바틈 업). 여러가지 언어가 존재한다. 코틀린, C#, Java, Python, C++, Objective-C, Ruby, Swift

● 변수에 자료형을 정해주는지 여부

Dynamic Typing (Python, Ruby, JavaScript, Php, Perl)vs. Static Typing (C, C++, Haskel, Kotlin, Java)

 

Dynamic typing
Static typing
코딩 속도가 빠르다.
코딩 속도가 느리다.
실행 속도가 느리다.
실행 속도가 빠르다.
코드의 내용이 눈에 잘 들어온다.
코드의 구조가 눈에 잘 들어온다.
배우기 쉽다.
배우기 어렵다.
혼자서 빠르게 하는, 작고 단순한 프로젝트에 적합
여러 사람이 협업하는, 크고 복잡한 프로젝트에 적합

 

 

 

- 프로그래밍 언어의 종류가 왜 많아졌는지, 여러 프로그래밍 언어들 사이에는 어떤 차이가 있는지, 최근 프로그래밍 언어들은 어떻게 바뀌고 있는지

● 휴대폰에 들어가는 언어, 배우기 어려운 문제 등 기존의 언어들에서 불편함을 느낌

● 용도 상황 프로젝트 등에 따라 더 유용하고 적합한 언어가 있기때문에 언어들이 많아짐

 

 

챕터 3: 프로그래밍 언어 Overview

- 프로그래밍 언어를 추상화가 얼마나 되었는지를 기준으로 분류하는 방법

● 추상화 : 몰라도 되는 내용은 숨기고 꼭 알아야할 내용만 드러내는 것

● 컴퓨터적인 구조가 코드에 잘 드러날수록 추상화가 적게 된 것이다.

- 추상화가 프로그래밍 언어에 미치는 영향과 추상화가 많이 된 언어와 적게 된 언어의 장,단점

● 고수준 언어 장점 : 프로그래머가 조금 더 필요한 기능과 논리에 집중할 수 있다

단점 : 컴퓨터가 여러가지 경우에 대한 고민을 스스로하여햐 한다.

● 저수준 언어 장점 : 컴퓨터가 명령을 이행하는 것이 더욱 빠르고 쉽다. 훨씬 더 기계적이기때문에.

단점 :

코드를 작성하거나 고치는 게 힘들고 오래 걸린다.

자세한 언어

첫 번째는 '자세한 언어' 입니다.

자세한 언어로는 Low-level에 가까운 어셈블리 언어C 언어 등이 있습니다. 객체 지향 개념이 적용되지 않고, 코드를 작성할 때 자료형 등의 컴퓨터적 구조를 다 고려해줘야 하는 언어입니다.

이 언어들은 사람보다는 컴퓨터의 논리적인 사고방식에 맞추어져 있다는 특징이 있어서 사람들이 작성하기는 어렵지만, 컴퓨터가 실행하기는 좋습니다. 프로그램을 빠르고 효율적으로 만드는데 최적화되어 있죠. 그래서 스마트 워치, TV, 스피커, 전광판, 가전제품 등, 컴퓨터가 메인이 아닌 기계에 자주 사용됩니다. 이런 기계들은 보통 이런 작은 칩에서 돌아갑니다. 그래서 저장 공간이나 성능이 컴퓨터보다 상당히 열악합니다. 여기서 C 같은 '자세한 언어'가 핵심적으로 사용됩니다.

참고로, 이런 곳에 들어가는 시스템을 임베디드 시스템이라고 부릅니다. IoT라고 해서, 이런 임베디드 시스템을 연결해서, 스마트홈을 만들거나, 기계들 사이의 통신을 할 수 있게 하기도 합니다.

임베디드 시스템 말고도 자세한 언어가 활약할 수 있는 분야가 있습니다. 예를 들어 수많은 문자를 거의 실시간으로 전송해야 하는 텔레그램 같은 채팅 애플리케이션이나 트위치 같은 동영상 스트리밍 서비스, 검색 엔진, 개발자들이 코드 관리를 위해 사용하는 github, 머신 러닝 같은 빅데이터 처리 속도와 알고리즘이 중요한 그런 분야의 회사에서 많이 사용됩니다. 사람이 코딩하는 시간은 길어지지만, 컴퓨터가 실행하는 시간은 조금이라도 빠르게 하고 싶은 그런 경우들이죠.

자세한 언어의 장단점을 정리해볼까요?

단점: 코드를 작성하거나 고치는 게 힘들고 오래 걸린다.

장점: 프로그램을 만들기만 하면 컴퓨터가 실행하는 속도는 매우 빠르다. 성능이 안 좋은 컴퓨터에 적용하기 좋다.

체계적인 언어

두 번째는 '체계적인 언어' 입니다.

자세한 언어와 마찬가지로 static typing 언어이지만, 객체 지향 개념이 적용된 언어인데요. JavaC++ 같은 언어들이 여기에 속하고, 체계가 잡혀있기 때문에, 여러 사람이 함께 작업하기에 가장 적합하고, 협업 과정에서 오류가 적어서 주로 큰 규모의 프로젝트에 적합합니다.

규모가 큰 기업들에서는 Java를 많이 사용하고 있는데요. 구글, 에어비앤비, 우버 뿐 아니라 이베이, 핀터레스트, 스포티파이, 트립 어드바이저, 아마존, 인텔, 필립스, 회사 이름으로 나열하려면 끝도 없습니다. 그래서 취업을 하려면 Java를 해라. 이런 얘기도 있죠.

체계적인 언어의 장,단점을 정리해 볼게요.

단점: '자세한 언어'보다는 낫지만, 여전히 문법이 완전 쉽지는 않다. 코드를 작성하는 시간보다도 체계적으로 설계하는 데에 시간이 오래 걸릴 수 있다.

장점: 짜임새와 협업이 중요한, 규모가 큰 프로젝트에 적합하다. 객체 지향 개념이 적용되어서, “자세한 언어”보다 유지보수 하기가 편하다.

쉬운 언어

세 번째는 '쉬운 언어'입니다.

객체 지향 개념이 적용된, dynamic typing 언어를 말하며, 프로그래머가 아닌 사람도 비교적 쉽게 배우고 사용할 수 있는 Python, Ruby 등의 언어가 여기에 속합니다.

이 언어들은 최대한 간결하고, 짧은 코드를 추구하죠, 문법도 간편해서, 코드를 작성하는 시간이 가장 짧습니다. 귀찮은 건 다 컴퓨터에 맡겨버리는 거죠. 파이썬에는 이런 말이 있습니다.“life is short you need python” 인데요. 인생이 짧은 만큼 빨리빨리 개발할 수 있는 파이썬을 사용하라는 말입니다. 또, "Simple is better than complex" 이런 말도 있는데요. 간결한 것이 복잡한 것보다 낫다는 뜻인데요. 복잡하게 하지말고 간편하게 코딩하자.이런 뜻입니다. Ruby의 개발자 마츠모토 유키히로는 “루비는 스트레스가 없는 쉬운 프로그래밍 언어입니다. 프로그래밍 언어는 컴퓨터가 아닌 인간 중심으로 설계되어야 합니다” 라고 하기도 했습니다.

쉬운 언어가 어떤 철학을 가졌는지 이해되시나요? 쉬운 언어는 빠르게 개발이 필요한, 변화가 많고 잦은 분야에서 많이 사용되고, 데이터 사이언스, 업무 자동화와 같이 개인 규모의 프로젝트에서도 가장 많이 사용됩니다.

장점: 진입 장벽이 낮다. 배우기 쉽다. 코드를 읽거나 수정하기가 가장 간편하다. 코드를 빨리 작성할 수 있다.

단점: 코드 작성 시간은 짧지만, 컴퓨터의 코드 실행 속도가 느리다. 성능 제약이 심한 곳에서 빠른 속도를 내야 하는 경우는 사용할 수 없다. 프로그래밍 코드 문법에 제약이 너무 없어서, 큰 규모의 프로젝트에서 실수를 방지하기가 어렵다. 많은 사람들의 협업에는 부적합할 수 있다.

 

프로그래밍 언어의 흐름

프로그래밍 언어의 특징들을 살펴보면 모든 경우에 딱 맞아 떨어지는건 아니지만 프로그래밍 언어가 이런식으로 발전했다고 볼 수 있습니다.

컴퓨터와 칩의 성능이 좋지 않던 시기에는 "자세한 언어”들이 등장했고, 그 다음에 협업과 생산성 향상에 좋은 객체 지향 프로그래밍이 대세로 떠오르면서 “체계적인 언어”가 인기를 얻었고, 누구나 프로그래밍을 배우고 할 수 있는 최근에 들어서서는 “쉬운 언어”가 인기를 끄는 것이 사실이죠.

하지만, 이러한 분류들이 언어를 나누는 절대적인 기준이라고 볼 수는 없고, 필요에 따라서 언어들이 등장했다 정도로만 이해하시면 될 것 같습니다. 왜냐면 C가 요즘도 활발히 쓰이고 있고, 코틀린 같은 “체계적인 언어”에 속하는 언어들도 비교적 최근에 등장했으니까요.

그럼 앞서 살펴본, C, Java, C++, Python, Ruby 이 다섯 개의 언어 외에, 다른 언어들은 어떨까요? 특수 목적으로만 사용되는 언어가 아닌 이상, 일반적인 목적의 언어들은 다 이 중 한 곳에 해당됩니다.

어셈블리 언어, Fortran, COBOL, Pascal, BASIC 등은 “자세한 언어”에 속하고, Go, Kotlin, Haskell, Swift 등은 “체계적인 언어”, JavaScript, PHP, Perl, Objective-C 등은 “쉬운 언어” 에 해당한다고 볼 수 있습니다.

R

R은 주로 통계 소프트웨어 개발과 데이터 분석 및 시각화에 널리 사용되고 있습니다. 특히 통계나 빅데이터 분석에 필요한 데이터 전처리, 분석, 수학적인 계산과 그래프를 그리는 등의 기능에 특화되어 있습니다.

SQL

SQL은 데이터베이스를 관리하기 위한 목적의 프로그래밍 언어입니다. 데이터베이스란 데이터를 모아둔 공간을 의미하는데요. 프로그래머들은 SQL을 사용해서 데이터베이스를 설계하거나 운영하고 관리합니다. 요즘에는 데이터가 워낙 많이 활용되기 때문에, 개발자 뿐 아니라 마케터나 데이터 분석가들이 SQL을 사용하여 서비스의 데이터(매출, 고객 정보 등)를 분석하곤 합니다.

예를 들어, 아래는 USA 국가의 인구를 1 증가시키는 SQL 코드입니다.

HTML, CSS

HTML과 CSS는 웹 페이지를 만들 때 사용합니다. HTML는 주로 웹 페이지의 구조와 레이아웃을 담당하고, CSS는 웹 페이지의 시각적인 표현을 담당합니다.

주로 여기에 JavaScript를 함께 사용해서, 웹 페이지가 사용자와 상호 작용할 수 있게 만들기도 합니다.

그 외의 특수 목적 언어

이 외에도,

● MATLAB - 공학 시뮬레이션용 프로그래밍 언어

● Csound - 소리와 음악 합성에 사용되는 프로그래밍 언어

● Scratch - 블록을 조립하여 쉽게 자기 자신의 이야기나 게임 그리고 애니메이션을 만들 수 있는 교육용 프로그래밍 언어

등의 다양한 특수 목적 언어들이 있습니다.

 

 

 

 

챕터 4: 프로그래밍 언어 제대로 사용하기

- 프로그래밍 언어의 활용법

● 변수 표기법

SNAKE 표기법 : MATH_SCORE

PASCAL 표기법 : MathScore

Camel 표기법 : mathScore

- 어떻게 하면 더 좋은 코드를 만들 수 있는지, 개발자들은 코드를 어떤 관점으로 바라보며, 어떻게 코드를 작성하는지

Python 스타일 가이드

Python의 경우 PEP8(Python Enhance Proposal 8)이라는 스타일 가이드가 있습니다. Python 공식 스타일 가이드(일명: PEP8) https://www.python.org/dev/peps/pep-0008/

Google Python 스타일 가이드 글로벌 IT 기업인 Google에서 사용하는 스타일 가이드입니다. PEP8과 비교해서 가장 다른 점은 “Docstring”을 작성하는 법에 대해 좀 더 깊이 다루고 있습니다. https://github.com/google/styleguide/blob/gh-pages/pyguide.md

JavaScript 스타일 가이드

JavaScript 표준 스타일 가이드 https://standardjs.com/

Airbnb JavaScript 스타일 가이드 https://github.com/airbnb/javascript

Google JavaScript 스타일 가이드 https://google.github.io/styleguide/jsguide.html

 

출처: <https://www.codeit.kr/learn/courses/intro-to-computer/2565>

 

 

- 데이터 사이언스에서 사용되는 유명한 라이브러리가 pandas, seaborn

Seaborn 라이브러리 - https://seaborn.pydata.org/tutorial.html

Pandas 라이브러리 - https://pandas.pydata.org/docs/user_guide/10min.html

 

출처: <https://www.codeit.kr/learn/courses/intro-to-computer/2573>

 

 

- 라이브러리 vs 프레임워크

● 라이브러리 : 이미 누가 만들어둔 도구를 가져와서 사용, 비용 안 듦//새로운 카페를 여는 느낌

● 프레임워크 : 프랜차이즈 카페를 여는 느낌.

 

언어별 공식 사이트

Python - https://docs.python.org/ko/3/

Javascript - https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide

Ruby- https://www.ruby-lang.org/ko/documentation/

Java- https://docs.oracle.com/en/java/

 

출처: <https://www.codeit.kr/learn/courses/intro-to-computer/2573>

 

구글 검색을 할 때 Best Practice라는 키워드로 검색

 

 

출처: <https://www.codeit.kr/learn/courses/intro-to-computer/2618>

반응형