pwoogi
자신의 왜곡된 경험을 진실이라고 생각하지 말자

프로그래밍/CS 지식

작문과 비슷한 프로그래밍

pwoogi 2022. 7. 28. 10:49

 

 

1970년대 '시스템 프로그래밍' 용도의 언어들이 만들어졌다

어셈블러, 컴파일, 텍스트 편집기 같은 프로그래머 도구, 운영체제(OS)

 

 

C언어와 C++언어

 

C언어

C언어는 현재 사용하고 있는 거의 모든 컴퓨터 시스템에서 사용할 수 있는 프로그래밍 언어

 

벨 연구소, 데니스 리치 (개발자)

오늘날의 C프로그램은 30~40년전의 코드와 비슷한 수준

 

C언어가 가지는 장단점

 

장점 : 

1. C언어로 작성된 프로그램은 다양한 하드웨어로의 이식성이 좋다

2. C언어는 절차 지향 프로그래밍 언어로, 코드가 복잡하지 않아 상대적으로 유지보수가 쉽다

3. C언어는 저급 언어의 특징을 가지고 있으므로, 어셈블리어 수준으로 하드웨어를 제어할 수 있다

4. C언어는 코드가 간결하여, 완성된 프로그램의 크기가 작고 실행 속도가 빠르다

 

단점 :

1. C언어는 저급 언어의 특징을 가지고 있으므로, 자바와 같은 다른 고급 언어보다 배우기가 쉽지 않다

2. C언어는 다른 언어와는 달리 시스템 자원을 직접 제어할 수 있으므로, 프로그래밍하는데 세심한 주의를 기울여야 한다.

 

 

 

C++ 언어

 

규모가 매우 큰 프로그램의 복잡성 관리를 도울 의도로 설계된 언어

 

벨연구소, 비야네 스트롭스트룹(개발자)

 

C언어와 다른점

  • 함수 중복 (function overloading) : 매개 변수의 개수나 타입이 다른 동일한 이름의 함수들을 선언할 수 있게 함
  • 디폴트 매개 변수 (default parameter) : 매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 함
  • 참조 (reference) : 변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입함
  • 참조에 의한 호출 (call by reference) : 함수 호출 시 참조를 전달할 수 있게 함
  • new와 delete 연산자 : 동적 메모리 할당/해제를 위한 new, delete 연산자를 도입함
  • 연산자 재정의 (operator overloading) : 기존의 연산자에 새로운 연산을 정의함
  • 제네릭 함수와 클래스 (generics) : 함수나 클래스를 데이터 타입에 의존하지 않고 일반화시킬 수 있게 함

 

JAVA와 비교해보면?

 

 

링킹이란 어떤 목적 파일이 참조하는 C++ 표준 라이브러리나 다른 목적 파일 속에 있는 함수, 객체, 데이터를 포함하여 실행에 필요한 기계어 코드를 확보해 하나의 실행파일(.exe)로 만드는 과정 이다. 실행 파일 에는 실행에 필요한 모든 요소들이 들어있다. 만약 링킹 과정 동안 목적 파일 에서 참조하는 코드를 발견하지 못하면 링크 오류가 발생한다.

 JAVA의 경우 컴파일 후 클래스 파일(.class) 이 생성되며, 이들을 하나로 뭉쳐 실행파일로 만드는 링킹 과정이 없다.

 


 

오늘날 주요 프로그램 대부분은  C나 C++로 작성되어있다.

 

1990년대에 월드 와이드 웹(WWW)의 성장에 대응하여 더 많은 언어들이 개발되기 시작했다. 컴퓨터가 더 빠른 프로세서, 더 큰 용량의 메모리의 장착, 프로그래밍을 빠르고 편하게 효율적으로 돌아가도록 하는 것이 중요해졌기 때문이다.

 

 

 

JAVA와 JavaScript

 

 

JAVA

 

 C++에 비해 메모리와 CPU를 많이 사용해 윈도우 프로그래밍 언어로 부적합했지만, 인터넷이 활성화되며 웹 애플리케이션 구축 언어로 급부상(원래 적용대상은 가전제품, 전자기기같은 임베디드 시스템)

 

 초기의 자바는 가전 제품에 탑재할 언어로 개발되었지만, 현재는 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어

 

 

마이크로시스템즈, 제임스 고슬링(개발자)

 

 

 

C++보다는 단순하지만 C보다는 더 복잡함

C 보다 더 안전하지만 몇몇 위험한 특성을 제거했고 메모리에서 복잡한 자료 구조를 관리하는 것처럼 에러가 발생하기 쉬운 작업을 처리할 내장 메커니즘을 갖추고 있음

 

 

 

 

프로그래밍은 작문과 비슷하다고 표현하는 이유는?

 

 

특정 작업을 하는 프로그램을 작성하는데 항상 많은 방법이 있음

문체와 적절한 어휘 사용 등은 글 쓸대도 중요하지만 프로그래밍 할 때도 중요함(코드의 가독성)

다른 프로그램을 복사한 것도 변수명이나 행의 배치를 바꿨다고 해도 표절(?)을 숨기기 힘듬, 다 티가 난다!!

 

 

JavaScript

 

웹페이지의 동적인 효과를 구현하기 위해 브라우저 내부에서 사용할 목적으로 설계

오늘날의 모든 웹페이지는 자바스크립트의 코드를 일부를 포함하고 있음

 

넷스케이프, 브랜던 아이크(개발자)

 

 

자바와는 아무 관계가 없음

시험삼아 무언가 만들어 보기 쉬움, 언어자체가 단순

컴파일러가 모든 브라우저에 내장되어있고 계산 결과 바로 확인 가능(몇 행 추가해서 올리면 전 세계 사람들 누구든 볼 수 있다)

 

 


 

 

Python

가독성에 초점을 두고 설계되었고 배우기 쉽고 생각할 수 있는 거의 모든 프로그래밍 과제에 필요한 라이브러리를 풍부하게 제공해서 가장 널리 사용되는 언어중 하나

 

 

네덜란드 암스테르담 CWI(국립 수학정보과학 연구소), 귀도 반 로섬(개발자)

 

단점을 하나 꼽아본다면 느리다

 

스크립트 언어의 특징을 설명하면서 잠깐 언급했는데, 파이썬은 다른 컴파일 언어에 비해 느림
아무래도 실시간으로 기계어로 번역하다보니 이런 단점이 발생하며, 따라서 빠른 속도를 요구하거나 하드웨어를 직접 컨트롤 하는 프로그램에는 적합하지 않은 언어라고 볼 수 있다

 

 


 

 

프로그래밍 언어는 앞으로 어떻게 발전할까?

 

컴퓨터 자원을 우리에게 유용한 방향으로 사용하고 더 쉽게 만들어 나갈 것

또한 프로그래머가 더 안전하게 사용할 수 있는 언어를 만드는 방향으로 나아갈 것

 

각 언어들이 튜링 머신을 모방하여 작동하거나 튜링 머신이 각 언어를 모방하여 작동하는데 사용될 수 있다는점

= > 모든 프로그래밍 언어는 형식상 동등한 관계라고 표현

 

 

 

 

언어는 우리가 생각하는 방식을 형성하고 생각할 수 있는 범위를 결정한다
- 벤자민 워프 -