Java

Author

James Gosling

Features

  • 객체 지향 프로그래밍 언어
  • 이름의 유래는 너무 설이 많다. 여튼 대충 지었다.
  • 웹 애플리케이션 개발에 가장 많이 사용하는 언어 중 하나이다.
  • 모바일 기기용 소프트웨어 개발에도 사용되고 있다.
  • 유닉스 기반 배경의 개발자들이 만들었다. 그래서 문법이 C와 비슷하다.
  • 컴파일 언어(ex C, C++)과 궤를 달리한다. 그 이유는 컴파일된 코드가 플랫폼 독립이기 때문이다.
  • 컴파일 후에 바이트 코드라는 특수한 바이너리 형태로 변환하는데, 이 코드를 실행하기 위해서는 JVM이 필요하다. JVM을 어떠한 환경에서도 설치하기만 한다면 어느 플랫폼에서든 동일한 형태로 실행시킬 수 있다. 이러한 특징은 웹 어플리케이션(cpu, os, 브라우저 상관 없이 언제나 접속가능)에 맞아떨어져 폭발적인 인기를 끌었다.
  • JVM 기반의 프로젝트에서는 하나의 언어만을 고집하지 않는다. 함수형 언어가 유리(최근 유행하는 빅데이터 등)한 부분은 Scala로 작업하며, 견고한 인터페이스와 대규모 통합이 필요한 곳은 Java로 작업한 뒤 이들을 서로 합쳐서 운영하는 게 가능하다. (Java에서 만든 객체를 Scala에서 그대로 사용할 수 있다.) 안드로이드 쪽에서는 크리티컬하지 않은 부분부터 Kotlin으로 코드를 교체하는 경우도 많아지고 있다.

Reason

  • 플랫폼에 독립적인 언어를 만들자.
  • Write Once run Anywhere

Pros

  • Spring이라는 매우 좋은 웹 프레임워크가 있다.
  • Android에도 사용할 수 있다.
  • 플랫폼 독립적이다.
  • 수많은 개발자와 레퍼런스
  • 구인의 용이성
  • 높은 생산성 (C/c++ 대비)
  • 기기 호환성
  • 안정성
  • 소스코드 가독성

Cons

  • 속도가 느린편이다 (C/C++ 대비)
  • JVM 로딩 속도 문제
  • 가상 머신 바이트 코드 실행 속도 문제
  • 예외 처리의 불편함
  • 소스코드 길이가 길다..
  • 명사형 사고 강제

Famous open source

  • Spring framework
  • kotlin(JVM 구동가능 언어)

Javascript

Author

브랜든 아이크 (Brendan Eich)

Features

  • 웹 브라우저에 인터프리터가 내장되어 있다.
  • 스크립트 언어
  • C언어의 잔재가 남아있다.
  • 멀티 패러다임 언어이다. 함수형, 명령형, 객체지향형 언어이다.
  • 함수형 패러다임을 따르기 때문에 클로저를 빈번하게 사용한다.

Reason

  • 고수준 추상화 언어좀 만들어보자. 10일만에 만들어와. 해서 만들어졌다.
  • 웹 페이지에 효과를 주거나 기능을 향상시키는 목적으로 사용

Pros

  • Json을 가지고 있다!
  • 비동기 프로그래밍에 유리하다. → Node.js의 등장
  • 무한히 많은 라이브러리가 생성중, pc용, 모바일용, 게임등 방대한 분야에서 발전이 이루어지고 있어 전망이 밝다.
  • 확장성이 매우 높다.

Cons

  • 코드 이해를 할 떄 골치아프다. 비동기이기 때문
  • 싱글 스레드이다. cpu작업이 많이 필요한 작업의 경우 비효율적이다.
  • 콜백 지옥에 빠질 수 있다.
  • 버전에 따라 되고 안되고가 너무 많다. 타입이 명시되어 있지 않다. → Typescript

Famous open source

  • React
  • Vue
  • Electron
  • Node.js
  • AngularJS
  • jQuery

Python

Author

귀도 반 로섬(Guido van Rossum).

Features

  • 이름은 즐겨보던 코미디 그룹에서 따왔다.
  • 실행할 수 있는 의사 코드 → 굉장히 쉽다.
  • Write Once, Read Infinity

Reason

  • 크리스마스엔 역시 창조지. 심심해서 만든 프로그래밍 언어이다.
  • “가장 아름다운 하나의 답이 존재한다”를 기본으로 하고 있다.
  • 순수 객체 지향 언어이다. 원시 타입이 존재하지 않는다.
  • 반복 가능한 객체(itarable)을 제공한다.
  • PEP20을 보면 Python의 철학을 알 수 있다.

Pros

  • 코드가 깔끔하고 이해하기 좋다.
  • 높은 생산성
  • 낮은 난이도
  • 미친듯한 개발 속도
  • 과학 공학에 친화적이다.
  • 만능 언어 - 웹 서버, 기계학습, 비전, 게임 등 가능한 것이 많다.
  • 교육용으로 최고이다.

Cons

  • 문법이 엄격하다. 들어쓰기 같은 경우
  • 실행속도.. 매우 느리다.
  • 멀티스레딩 불가 ⇒ cpu 부하가 크게 걸리는 경우 옮지 않다.
  • 패키지 관리와 개발 및 배포의 어려움

Famous open source

  • Django
  • tensorflow
  • pytorch
  • sklearn
  • numpy
  • matplotlib
  • pandas

C++

Author

비아르네 스트로우스트루프(Bjarne Stroustrup)

Features

  • C언어 기반 객체 지향 및 일반화 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어
  • C language with Classed → C++; C에서 1을 더한다.
  • (엄마는) 개발자 널 전적으로 믿어. 개발자에게 거의 모든 것을 맡겨버린다.

Reason

  • A light-weight abstraction programming language
  • C가 가지는 절차지향 언어에서 필요한 추상화정도를 더한 언어

Pros

  • 자유도가 높다.
  • 일반화 프로그래밍이 가능하다. 템플릿을 사용한다.
  • 성능이 매우 높다.
  • 저수준 작업이 가능하다. 임베디드에서 사용한다.

Cons

  • 개발자를 너무 신용한 나머지 메모리 누수와 같은 문제가 발생할 수 있다.
  • 개발 속도가 중요한 프로젝트에서 사용하기 어렵다.
  • 난이도가 높다.

Famous open source

  • STL
  • Opencv
  • MFC