본문 바로가기

[IT/Programming]

여러가지 프로그래밍 언어들 (List of programming languages)

반응형
# 여러가지 프로그래밍 언어들 (List of programming languages) 언어들 참 많다. code snippet 좀 넣을까? 분류를 내가 좀 아는 언어들, 생소한 언어들로 나눈게 에러같긴 하지만;;; 천천히 수정.
A Snapshot of Programming Language History. (출처: 알렌 터커의 ‘프로그래밍 언어’ + )
## PH
  • 2015-12-12 : php code snippet 에서 escape <> 를 안했네;;;
  • 2014-11-11 : code snippet 추가. related refs 말머리에 삽입.
  • 2014-06-19 : 더 정리.
  • 2014-01-25 : ref를 LaTeX처럼 자동으로 처리하는 javascript를 짜봅시다.
  • 2014-01-24 : 간단하게 정리.
## TOC ## 개인적으로 익숙한 프로그래밍 언어들 ### BASIC (베이직: Beginner's All-purpose Symbolic Instruction Code) Related refs: . 내가 초딩때(1994년 정도?) 접한 첫 프로그래밍 언어다. GOTO 문 같은게 얼핏 생각나긴 하는데, 이제 거의 죽어가는 언어인듯. 아님 Visual BASIC 으로 변형되었거나. 요새 어떻게 변했는지는 뭐 관심없다. 그닥 요즘 시대에 쓸만한 언어는 아닌듯. 지금보면 뭔가 구조가 진짜 조잡하다. GOTO 문이라니;;; 후덜덜. 이게 MS .NET으로 변한건가? ```[.scrollable.lang-basic] //////////////////////////////////////////// // BASIC code snippet from wiki. // 제대로 동작하는 코드인가? // 주석을 이렇게 쓰는건 맞는건가? =ㅇ=;;;; //////////////////////////////////////////// INPUT "이름을 입력하세요."; UserName$ PRINT "안녕하세요."; UserName$ DO INPUT "별이 몇 개 필요하세요? "; NumStars Stars$ = "" 'Stars$ = REPEAT$("*", NumStars) '<-ANSI BASIC 'Stars$ = STRING$(NumStars, "*") '<-MS BASIC PRINT Stars$ DO INPUT "별이 더 필요하세요(Y/N)?"; Answer$ LOOP UNTIL Answer$ <> "" LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "Y" PRINT "안녕히 가세요."; FOR A = 1 TO 200 PRINT UserName$; " "; NEXT A PRINT ```/
### C Related refs: . 꽤 오래된 프로그래밍 언어같은데 (1969년 ~ 1973년 사이에 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어), 아직까지도 많이 쓰이는 프로그래밍 언어인듯 하다. 난 이걸 언제 처음 배웠지? 고등학교 들어와서인가? 아무튼 가장 기초가 되는 프로그래밍 언어로 다른 언어를 이해하고 배우는데 있어서도 먼저 꼭 배워놔야 하는 언어인듯. 뭐 다른언어가 배우기 더 쉬울지도 모르지만... ```[.scrollable.lang-c] //////////////////////////////// // C code snippet from wiki. //////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int count = 4; char name[50] = "홍길동"; char tel[256]; /////////////////////////////////// int getTel(char *pstr) { static char buff[1024]; gets(buff); strcpy(pstr, buff); return strlen(pstr); } int main(int argc, char **argv) { char *paddr; printf("박지원 = %s\n", name); getTel(tel); printf("전화 = %s\n", tel); paddr = (char*) malloc(1024); if (!paddr) return -1; { // 블록 시작 int scount; char *piaddr = paddr; for (scount=1024;scount>count;scount--,piaddr++) { *piaddr = getch(); // getch 함수는 표준함수는 아니다. putchar(*piaddr); if (*piaddr=='\r') break; } *piaddr = 0; printf("주소 = %s\n", paddr); } // 블록 끝 free(paddr); return 0; } ```/
### C++ Related refs: . C 언어의 문법을 대부분 사용할 수 있으며, 객체지향성이 더해진 C 언어의 확장형이라고 보면 된단다. C랑은 완전 별개의 언어라고 말하는 사람도 있고... 아무튼 C랑 비슷한 구조의 언어이긴 한데, 추가적으로 class의 개념이나 struct 개념, 연산자 overloading | overriding, 객체지향 개념이 추가되면서 다방면의 매력을 갖춘 멋있는 언어가 되었다. 완벽히 이해하고 써먹으려면 꽤 많은 시간과 노력을 들여야 한다는게 단점이라면 단점이다. 그래도 배울만한 가치가 있는 언어임에는 틀림없다. ```[.scrollable.lang-cpp] /////////////////////////////////// // C++ code snippet from wiki. /////////////////////////////////// #include <iostream> using namespace std; class A { public: A() { num = 0; } A(int n) : num(n) { cout << "생성자 호출 : " << this << endl; } ~A() { cout<< "소멸자 호출 : " << this << endl; } int getNum() { return num; } private: int num; }; int main() { int num; cout << "블럭 시작 합니다." << endl; { // 블럭 시작하면 지금 부터 선언되는 변수나 클래스는 블럭이 끝나면 사라진다. A a(10); num = a.getNum(); cout << "블럭 안에서 a.getNum() = " << a.getNum() << endl; } // 블럭이 끝나면 객체 a는 소멸됨. 소멸자가 호출된다. cout << "블럭 끝났습니다. num = " << num << endl; return 0; } ```/
### JAVA Related refs: . 웹 애플리케이션 개발에 가장 많이 사용하는 언어란다. C++과 비슷하면서도 다른점이 많은거 같은데... 개인적으로는 JAVA 명령어들이 대부분 너무 길어서 귀찮게 여기는 언어 중 하나이다. 최근에 공부하고 있는데, 여러가지 매력도 있는듯하긴 하다. 안드로이드 앱 만들때 JAVA를 이용해서 대충은 배워놓긴 했었는데, eclipse 사용에 익숙치 않아서 그런가... 프로그래밍 하는게 상당히 귀찮을 때가 많았다. 프로그래밍 할 때마다 이것저것 찾아야 하고;;; JAVA 공부하면서 일반적인 배열과 다른 Linked array/list 뭐 이런게 기억에 남긴 하는데, C++이나 다른 언어로도 이런건 구현 가능하긴 하니까 뭐. 아무튼 개인적으로는 별로 좋아하지 않는 언어다. 명령어들 외우기 귀찮어 ㅡ,.ㅡ;; 웹의 발전과 함께 최근에 가장 많이 사용되는 언어라던데, 특히나 서버 쪽에서 많이 쓰이는 것 같다. (vert.x 등) ```[.scrollable.lang-java] /////////////////////////////////// // JAVA code snippet by kipid. /////////////////////////////////// package recoeve.db; import java.lang.StringBuilder; import java.util.ArrayList; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.Map; import java.util.HashMap; public class StrArray { public static final Pattern delimiter; public static final Pattern lastQuote; static { delimiter=Pattern.compile("[\\t\\n]"); lastQuote=Pattern.compile("[^\"](?:\"\")*\"([\\t\\n])"); } public String str; public ArrayList<ArrayList<String>> arrayList; public ArrayList<Map<String, String>> mapList; public int row; // The last row number will be saved. public int col; // The last col number of the last row will be saved. public StrArray() { str=""; arrayList=new ArrayList<ArrayList<String>>(); mapList=new ArrayList<Map<String, String>>(); row=-1; col=-1; } public StrArray(String strData) { this(); str=strData; this.updateLists(); } public String get(int row, int col) { if (row<arrayList.size()&&col<arrayList.get(row).size()) { return arrayList.get(row).get(col); } return null; } public String get(int row, String key) { if (0<row&&row<arrayList.size()) { return mapList.get(row-1).get(key); // If no value for a key, this returns null; } return null; } public static void main(String... args) { StrArray sa=new StrArray("abc\tdef\taaa\n1\t\"2\"\"\t3\na\"\"\tb\"\tc"); System.out.println(sa); System.out.println(sa.get(0,3)); System.out.println(sa.get(1,"abc")); } } ```/
### LabVIEW(랩뷰) Related refs: . 그래픽 적으로 프로그래밍을 하는 언어이다. 다른 프로그램들은 대부분 text로 coding한다. 반면 LabVIEW는 Block Diagram에서 graphical하게 coding하고 Front Panel에서 여러가지를 조정하고 한다. 프로그램이 전자제품과 비슷하다. 전자제품의 Front Panel에서 버튼을 눌러 전자제품을 제어하고 내부적으로 Block Diagram에서 처리된 결과가 다시 Front Panel에 나타난다. 개인적으로 가장 좋아하는 프로그래밍 언어 중 하나다. (단점도 많긴 하다. 느리기도 하고. 코드 재사용이 조금 골치아프긴 한듯.) 하지만 처음에 배우기도 정말 쉽고, 기본적으로 지원하는 기능들 (그래프 그리기, cluster, FILE input/output, image input/output) 도 많고 객체지향적인 성격도 가진다. C++의 class 개념이나 연산자 overloading을 구현하기가 좀 힘들긴하다. 그래도 dll 이용해서 C++과 LabVIEW를 같이 돌릴수는 있다. 좀 복잡하긴 하지만;;; 확실히 그래픽적으로 결과를 보여주는 부분에 있어서는 쉬워서 좋다. 다른 언어는 대부분 text로 output을 찍어주는 경우가 많아서 LabVIEW처럼 그래픽적으로 출력하려면 엄청난 노력을 추가로 들여야 한다. ```[.linenums] LabVIEW code snippet 은 그림파일로 올려야만 가능. Text 가 아니다. ```/
LabVIEW code snippet

### LaTeX Related refs: . 이건 프로그래밍 언어라고 하기엔 좀 그렇기도 하지만 프로그래밍적인 요소도 다분히 가지고 있으므로... 문서를 작성해주는 프로그램이라고 보면 된다. Hyper text mark-up language (HTML) 하고 비슷한 부분도 있지만, 논문 작성같은것에 특화된 문서 편집기라고 보면 된다. 수식이 들어가는 문서를 작성하는데 제격이다. 또한 구조적인 글을 작성하는데 매우 좋다. section, subsection, subsubsection 등 자동으로 숫자 매겨서 링크 걸어주고, maketitle, tableofcontents과 같은 명령어로 자동으로 체계적인 깔끔한 문서를 만들어 준다. cite, ref와 같은 명령어로 무언가를 참조 (refer) 할 때도 자동으로 샤라락 처리해준다. 이 외에도 깔끔한 문서를 작성하는데 있어서 정말 다양한 기능들을 제공한다. 단점이라면 pdf나 ps 등의 파일로만 output을 낸다는 점? 또 WYSIWYG (What You See is What You Get) 형태의 편집이 불가능 하다는 점 등이 있겠다. ```[.scrollable.lang-tex] %%%%%%%%%%%%%%%%%%%%% % LaTeX code snippet by kipid. %%%%%%%%%%%%%%%%%%%%% \documentclass[a4paper,10pt]{article} \usepackage{kotex} % korean 한글 사용 \usepackage{hyperref} % reference and URL \newcommand{\be}{\begin{equation}} \newcommand{\ee}{\end{equation}} \newcommand{\bdm}{\begin{displaymath}} \newcommand{\edm}{\end{displaymath}} \begin{document} \title{\LaTeX ~ Guide} \title{second title} \date{\today} \author[0]{Kang-Soo Lee} \author[1]{Author A\thanks{A.A@university.edu}} \author[1]{Author B\thanks{B.B@university.edu}} \author[1]{Author C\thanks{C.C@university.edu}} \author[2]{Author D\thanks{D.D@university.edu}} \author[2]{Author E\thanks{E.E@university.edu}} \affil[0]{Korea} \affil[1]{Department of Computer Science, \LaTeX\ University} \affil[2]{Department of Mechanical Engineering, \LaTeX\ University} \maketitle \tableofcontents \begin{abstract} Abstract가 쓰여집니다. 한줄 이상은 써야 어떻게 보이는지 알텐데.. 그냥 이상한 이야기를 쭈루르량라장 씁니다. 길어져라 얏얏야시ㅏ 얄라숑숑 뽕빠라비야러ㅏㄷ ㅇ래먀넝 ㅣ낭러 \end{abstract} \newpage %%%%%%%%%%%%%%% \section{Section} %%%%%%%%%%%%%%% \subsection{SubSection} \subsubsection{SubSubSection} % no \subsubsubsection{} Quote: \begin{quote} Hamiltons principle is sometimes referred to as the principle of least action. However, this is a misnomer: the action only needs to be stationary, with any variation of the functional giving an increase in the functional integral of the action. This is not, as is frequently misstated, required to be a maximum or a minimum of the action functional. \end{quote} %%%%%%%%%%%%%%%% \section{Equations and Math} %%%%%%%%%%%%%%%% \bdm \sum_{i=1}^{n} x_{i}^{2} \qquad \prod_{i=1}^{n} x_{i}^{2} \edm $\sum_{i=1}^{n} x_{i}^{2} \qquad \prod_{i=1}^{n} x_{i}^{2}$ $$\sum_{i=1}^{n} x_{i}^{2} \qquad \prod_{i=1}^{n} x_{i}^{2}$$ \end{document} ```/
### HTML, CSS, Javascript, SQL, PHP Related refs: . 인터넷이 발달하고 스마트폰 환경이 갖춰지면서 더 각광받고 있는 언어들(?)인듯 하다. HTML은 LaTeX 비슷하게 문서(웹 페이지)를 text로 coding하는 것이라 보면 되고, CSS(Cascading Style Sheets), Javascript, SQL(Structured Query Language), PHP(Hypertext Preprocessor) 등은 웹 환경을 더 dynamic하게 만들어 주는 보좌진들이라 볼 수 있다. ```[.scrollable.lang-html] <!-- HTML/CSS/Javascript code snippet by kipid. --> <html> <head> <title>TEST page</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=3, user-scalable=yes"/> <style> #container {width:100%; background:rgb(150,150,255);} </style> </head> <body> <div id="container"> <div id="sidebar"></div> <div id="contents">내용</div> </div> </body> <script> document.write("Hello world!"); var sum = 0; for (var i=0;i<100;i++) { sum += i; } console.log(sum); </script> </html> ```/
### Server-side script or language (PHP, node.js, vert.x) Related refs: . 그냥 쓰이기도 하지만 대부분 SERVER 에서 쓰는 언어다. 서버에 특화되어 있는 언어일듯? 뭐 다른 하위언어 (C, C++, JAVA 등) 를 이용해서 구현해놓은것도 많고. API (Application Programming Interface) 로 제공되는 function들 | method들을 배우고 활용할 줄 알아야 한다. 뭐 너무 function들이 넘쳐나므로 기본적인것만 익혀놓고 필요한건 그때그때 검색해서 쓰는게 맞을듯 하다. 요새 서버 개발에서 주목받는 언어로는 node.js와 vert.x, Play Framework 등이 있는데.... Non-blocking Input/Output 및 event-driven 특성으로 여러가지 장점이 있는듯. 또 요새는 Android app, iphone app, MS window phone app, PC(Window, OS x 버전 별) app 등 다른 OS(Operating System)에서 돌아가도록 동일한 앱들을 따로따로 만들지 말고 그냥 web app으로 만들어서 서비스하자라는 마인드가 생겨서 이런 server쪽 언어가 더 각광받는듯한 느낌도. (JavaScript 포함.) 또 cloud computing 써먹기에도 필수적일듯. 스마트폰에는 기본적으로 인터넷 할 수 있는 browser는 깔려있고, PC/타블렛도 internet browser 하나씩은 다 있을테니까. 시간과 돈 써가면서 각각 따로 만들바에야 하나로 통일해서 집중하자는 생각인듯 함. (그래도 규모가 있는 회사들은 다 최적화해서 따로따로 만들긴 하는듯.) 기기의 resource를 많이 잡아먹는 시스템이 아니라면 이게 맞는/좋은 방향 같긴 함. 언제 다 짜? -ㅇ-;; Offline에서도 어느정도 돌아가게 하려면 좀 머리를 다르게 굴려야 할수도... Browser가 발전하면서 어느정도 해결해줄듯. Offline일땐 이전에 다운받았었던 자료를 활용해서 화면을 보여주는 식으로. (지금도 이러고 있는건가?) ```[.scrollable.lang-java] //////////////////////////////////// // PHP code snippet from http://opentutorials.org/course/195/1412. //////////////////////////////////// <?php $conn = mysql_connect("localhost", "root", "1234"); mysql_query('SET NAMES utf8'); if (!$conn) { echo "Unable to connect to DB: " . mysql_error(); exit; } if (!mysql_select_db("class")) { echo "Unable to select mydbname: " . mysql_error(); exit; } $sql = "SELECT * FROM student LIMIT 10"; $result = mysql_query($sql); if (!$result) { echo "Could not successfully run query ($sql) from DB: " . mysql_error(); exit; } if (mysql_num_rows($result) == 0) { echo "No rows found, nothing to print so am exiting"; exit; } // While a row of data exists, put that row in $row as an associative array // Note: If you're expecting just one row, no need to use a loop // Note: If you put extract($row); inside the following loop, you'll // then create $userid, $fullname, and $userstatus echo "<table>"; while ($row = mysql_fetch_assoc($result)) { echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['department']}</td></tr>"; } echo "</table>"; mysql_free_result($result); ?> ```/
```[.scrollable.lang-java] //////////////////////////////////// // Vert.x code snippet by kipid. //////////////////////////////////// // 뭐 기본적으론 JAVA 다. 다른 언어들로도 짤 수 있긴 하다고... (polyglot) import org.vertx.java.platform.Verticle; // Every Java verticle must extend the class org.vertx.java.platform.Verticle. You must override the start method - this is called by Vert.x when the verticle is started. import org.vertx.java.core.http.HttpServerRequest; public class HelloWorldServer extends Verticle { /////////////////////////////////////////////// // Called when the verticle is deployed. /////////////////////////////////////////////// @Override public void start() { ///////////////////////////////////////////// // Lambda exp with chaining. ///////////////////////////////////////////// vertx.createHttpServer().requestHandler( (HttpServerRequest req) -> { System.out.println("req.method(): "+req.method()); // GET, PUT, POST, DELETE, HEAD, OPTIONS, CONNECT, TRACE, PATCH req.response().putHeader("Content-Type","text/html"); req.response().end("<h1>Hello World</h1>"); req.response().close(); }).listen(1001); } /////////////////////////////////////////////// // Called when the verticle is undeployed. /////////////////////////////////////////////// @Override public void stop(){ // do something. } }```/
## 내가 생소한 언어들 여기 소개한 것 말고도 다양한 언어들이 더 있지만, 개인적으로 들어보고 관심있었던 것만 간단하게 더 소개. ### Fortran(포트란) Related refs: . 전문적인 과학계산 문제를 풀 때 좋다는데, 배워본적이 없어서 왜 좋은지는 모르겠다. 옛날 과학자들이 죄다 포트란으로 코드를 짜놔서 그거 끌어다 쓰려고 포트란을 계속 쓰는거 같기도 하고... 프로그래밍하는 데 있어서 C보다 Fortran이 훨씬 간단 명료하고 신속하게 프로그래밍을 작성할 수 있다는데, 개인적으로는 C++ 써서 class 개념 이용하는게 복잡한 시뮬레이션 할 때 더 좋아보이는데, 모르겄다 내가 포트란을 모르니. ### C# Related refs: . 마이크로소프트에서 개발한 언어. 아래 Objective-C 랑 비슷하게 C랑 구조가 너무 달라서 배우는거 접었던 기억이 있는데, 잘못 기억하는건가? C++++를 저렇게 표현했다는 설도 있다. 두줄로 표현하면 #이 되니 그럴듯한데, 뭐 중요한건 아니니 사실이든 아니든 =ㅇ=;;; ### Objective-C Related refs: . 애플의 맥킨토시에서 쓰이는 언어라는 듯. C랑 구조가 너무 달라서 배울 엄두가 안남. C#이랑 Objective-C는 분명 C랑 비슷해서 이름이 이렇게 붙인듯 하기도 한데... 배우다보면 비슷한거겠지? ### Scala(스칼라), Play Framework Related refs: . 내 블로그에서 누군가 댓글로 "JVM (Java Virtual Machine) 에서 돌아가는 언어중에 scala라고 있습니다. 심플하고... 연산자 오버로딩 심플하게 구현되구요." 라면서 추천해주셔서 알게 된 언어인데, 최근에 꽤 주목받는 언어인가보다. 제대로 찾아본적이 없어서 뭐가 특출나게 좋은건지는 아직 모르겠다. ### Server-side script or language (SpringMVC, Django, Python, Flask, Ruby, Perl) 이 외에도 새로 생긴 각광받는 언어들이 많은듯. 우리나라 전자정부 프레임워크 지침은 SpringMVC 쓰라고 하는듯도 하고... ## RRA

    언어간 비교

  1. techNeedle - 인기있는 프로그램 언어 Top 10, 2014-07-20, by 최종훈; 원문: Top 10 Programming Languages, Spectrum’s 2014 Ranking, 2014-07-19, by Stephen Cass
    // 뭐 기준을 어떻게 잡느냐에 따라 순서가 꽤나 뒤바뀔거 같긴 하지만...

  2. bloter.net - IT 거인들은 왜 프로그래밍 언어에 집착할까, 2014-06-18, by 이성규;
    // 다트(Dart), 고(Go), 핵(Hack), 스위프트(Swift) 등 요즘도 새로운 언어들이 개발되는 중. 대부분 IT 대기업 쪽에서 개발되는 추세.
  3. Blog - udemy.com - Best Programming Languages to Learn in 2013: The Elite Eight; and TIOBE Index for programming languages; and Jobs Tractor language trends;
    // 요새 hot한 프로그래밍 언어들을 간단하게 설명해놓은 블로그 + 언어들 순위. 언어들 순위는 조사 방법에 따라 천차만별인듯.
  4. 오늘의 유머 - 웹 개발 주저리, 2014-01-19, by 잠이오네요★;
    // PHP, JAVA, Spring, django, node.js 등 웹 개발 관련해서 간단하게 설명해 주셨음.
  5. Wiki 및 백과사전

  6. Wiki - BASIC (베이직: Beginner's All-purpose Symbolic Instruction Code)
  7. Wiki - C
  8. Wiki - C++
  9. Wiki - JAVA
  10. Wiki - LabVIEW (랩뷰)
  11. Wiki - LaTeX; and kipid's blog - LaTeX(라텍스, 레이텍) 소개 및 설명서(Guide)들
  12. Wiki - Fortran(포트란)
  13. Wiki - C#
  14. Wiki - Objective-C
  15. Wiki - Scala(스칼라)
  16. My posts

  17. Installing and Learning JAVA, 2014-06-10
  18. Learning PHP, 2014-05-22
  19. Learning Node.js, 2014-05-22
  20. Learning Vert.x, 2014-05-23
  21. Learning JavaScript, especially class-like Constructor function and Property Inheritance through prototype/__proto__ chaining, 2014-05-21
반응형