어쩌다가 휴식 중

정적 타이핑을 둘러싼 나의 내적 갈등

정보기술

『...전략...』


정적 타이핑을 둘러싼 나의 내적 갈등

(My Inner Battle with Static Typing) 


초보자들은 프로그래밍 언어에서 강한 타이핑(strong typing)과 정적 타이핑(static typing)을 혼동한다.


거칠게 말해서 강한 타이핑(strong typing)이란 언어가 두 개의 자료형(type)이 서로 호환되는지 여부를 검사하고, 만약 호환되지 않으면 에러를 발생시키거나 강제로 자료형을 변환함을 뜻한다.


겉으로 보기에 자바(Java)와 루비(Ruby)는 모두 강한 타이핑을 사용(strongly typed)한다. (이게 과도한 단순화라는 사실은 나도 안다.)


이에 반해서 어셈블리(Assembly)와 C 컴파일러는 약한 타이핑을 사용한다(weakly typed).


컴파일러가 메모리 안에 저장되어 있는데 데이터가 정수인지, 문자열인지, 그냥 임의의 데이터인지 신경 쓰지 않는다는 의미이다.


정적(static)인가 동적(dynamic)인가 하는 것은 완전히 다른 문제리다. 


정적 타이핑 언어(statically typed language)는 자료형 구조에 기초해서 다형성(poly-morphism)을 적용시킨다.


(정적인) 유전적 청사진에 의거해서 오리(duck)인가, 오리처럼 꽥꽥거리며 걷기 때문에 오리인가?


정적 타이핑을 사용하는 언어는 컴파일러와 도구가 코드에 담긴 에러를 검출하고 코드의 키워드를 색상을 이용해서 강조하고, 리팩토링 기능을 제공하는 등의 이점을 누릴 수 있다.


그에 비해 코딩할 때 조금 수고를 해야 하고 제한도 뒤따른다. 


정적 타이핑에서 오는 이러한 트레이드오프(trade-offs)에 대해 어떤 생각을 하는가에 따라서 개발자로서의 역사가 달라질 것이다.


내가 처음 객체지향 개발에 사용한 언어는 자바였다.


자바의 정적 타이핑 울타리에서 벗어나기 전까지 나는 꼬리를 물며 나타나는 프레임워크를 만났었다.


업계는 수천, 수백만 달러를 세 가지 다른 버전의 EJB, 스프링, 하이버네이트, JBoss, 그리고 관점지향 프로그램 개발에 투입했고, 그런 노력을 통해 특정한 사용법을 전보다 약간 유연하게 만들었다. 


우리는 당시 자바의 타이핑 모델(typing model)을 더 동적으로 만들기 위해서 애썼고, 이러한 전투의 고비마다 자바가 우리를 위한 프로그래밍 환경이라기보다 오히려 적군이라고 느낄 수 밖에 없었다.


그리하여 내가 저술한 책들도 동적인 프레임워크라는 주제에서 출발해서 나중에는 동적인 언어 자체를 향해 나아갔다.


따라서, 내가 정적 타이핑 언어에 대해서 가지고 있는 일종의 편견은 자바와의 전쟁에서 비롯되었다.


하스켈(Haskell)이 가지고 있는 탁월한 정적 타이핑 시스템은 이러한 상처로부터 서서히 벗어나는 계기가 되었다.


내 의도는 분명하다.


하지만 나는 우리의 대화가 편견에 영향을 받지 않고 공정하게 진행되도록 최선을 다할 것이다.


『...후략...』

[출처: 브루스 테이트의 세븐 랭귀지]

네이버 클라우드 플랫폼 커널 버전

정보기술

 네이버 클라우드 ssh 접속이 안되서 문의하였더니, 이전에 식별된 것과 동일한 하이퍼바이저의 커널 버전 때문 있었음.


[문의] SSH 접속이 안됩니다 #2
답변 내용

안녕하세요.

네이버 클라우드 플랫폼입니다.


문의하신 내용에 대해 답변드립니다.


해당 서버는 상위 커널 업데이트로 인한 부팅 실패 상태가 되었고, 이전 커널 (3.10.0-693.17.1.el7.x86_64) 로 선택 후 부팅에 성공하였습니다.

현재 상태에서 서버 재부팅을 하게 되면 동일한 문제가 발생할 수 있으니, /boot/grub2/grub.cfg 경로에서 커널 부팅 순서를 적절하거나 아래 내용 참고하셔서 커널을 반드시 변경 후 이용 부탁드립니다.


* 아래 가이드 참고하셔서 3.10.0-693.17.1.el7.x86_64 커널로 부팅이 되도록 설정 부탁드립니다.


* 커널 업데이트에 따른 부팅 이슈는 아래 공지 페이지를 참고 바랍니다.

   - https://www.ncloud.com/support/notice/all/355


* 아래 커널 버전은 고객님 서버의 커널 버전과 다를 수 있으니 참고 부탁드립니다.


1. 현재 기본 커널 확인

# grub2-editenv list

saved_entry=CentOS Linux (3.10.0-327.22.2.el7.x86_64) 7 (Core)


2. 부팅 가능한 커널 리스트 확인

# grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2

CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)

CentOS Linux (3.10.0-327.22.2.el7.x86_64) 7 (Core)

CentOS Linux (0-rescue-a6ca9f0e85a84962b41c23276050e81b) 7 (Core)


3. 기본 부팅 커널 설정

# grub2-set-default "CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)"


4. 설정된 내용 확인

# grub2-editenv list

saved_entry=CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)


5. 재부팅

# reboot


6. 변경된 커널 확인

# uname -a

Linux micro 3.10.0-514.2.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


안내해드린 답변이 도움이 되셨길 바라며,

더 궁금한 사항이 있으신 경우 고객지원으로 문의 부탁드립니다.


감사합니다.

네이버 클라우드 플랫폼 드림.

 


[Githut] Github 프로그래밍 언어 통계 순위 (18년 1분기)

정보기술

https://okky.kr/article/468724


https://madnight.github.io/githut/ 


github의 프로그래밍 언어(2018/1Q)도 올려 봅니다.

c.f. 혹시 국내 통계 아시는 분들 계시면 소개 부탁드릴께요.

      아무래도 국내에서는 java 비율이 매우 큰 걸로 알고 있는데 통계치가 차이가 나는 것 같습니다



# 순위

프로그래밍 언어

백분율 (변화량)



1

JavaScript

22.947% (-2.606%)


2

Python

16.127% (+0.848%)


3

Java

9.960% (+0.001%)


4

Go

7.236% (+1.238%)


5

Ruby

6.732% (+0.237%)


6

C++

6.423% (+0.779%)


7

PHP

6.094% (-1.242%)


8

TypeScript

4.807% (+1.999%)


9

C#

3.375% (-0.647%)


10

C

2.890% (-0.442%)


11

Shell

2.327% (+0.146%)


12

Scala

1.406% (-0.011%)


13

Swift

1.168% (-0.025%)


14

Rust

0.952% (-0.013%)


15

DM

0.848% (+0.356%)


16

Objective-C

0.578% (-0.325%)


17

Kotlin

0.517% (+0.332%)


18

Groovy

0.422% (+0.132%)


19

Lua

0.357% (-0.094%)


20

Clojure

0.322% (-0.028%)


21

CoffeeScript

0.320% (-0.430%)


22

Elixir

0.317% (-0.002%)


23

Perl

0.317% (-0.075%)


24

Haskell

0.291% (-0.107%)


25

PowerShell

0.288% (-0.011%)


26

Dart

0.230% (+0.084%)


27

R

0.229% (+0.058%)


28

Erlang

0.190% (-0.029%)


29

Emacs Lisp

0.190% (+0.064%)


30

OCaml

0.175% (-0.077%)



[TIOBE Index] 2018년 5월 프로그래밍 언어 사용 통계 순위

정보기술

[TIOBE Index] 2018년 5월 프로그래밍 언어 사용 통계 순위

https://tiobe.com/tiobe-index/   http://j2doll.tistory.com/579

2018년 5월

2017년 5월

변화

프로그래밍 언어

평점(%)

변경량

11Java16.380%+1.74%
22C14.000%+7.00%
33C++7.668%+2.92%
44Python5.192%+1.64%
55C#4.402%+0.95%
66Visual Basic .NET4.124%+0.73%
79changePHP3.321%+0.63%
87changeJavaScript2.923%-0.15%
9-changeSQL1.987%+1.99%
1011changeRuby1.182%-1.25%
1114changeR1.180%-1.01%
1218changeDelphi/Object Pascal1.012%-1.03%
138changeAssembly language0.998%-1.86%
1416changeGo0.970%-1.11%
1515Objective-C0.939%-1.16%
1617changeMATLAB0.929%-1.13%
1712changeVisual Basic0.915%-1.43%
1810changePerl0.909%-1.69%
1913changeSwift0.907%-1.37%
2031changeScala0.900%+0.18%


 프로그래밍 언어 스칼라(Scala)가 마침내 TIOBE 색인(인덱스) 20위를 차지했습니다. 이미 1년 전부터 순위를 차지했지만, 스칼라가 더 오랜 시간 동안 상위권에 정착할 수도 있을 것 같습니다. Scala는 Java의 JVM에서 실행되는 함수형 프로그래밍 언어이므로, Java 또는 유사 언어 대신 사용할 수 있습니다. 그리고 함수형이기 때문에, 덜 장황하고, 자바에 비해 실수를 할 가능성이 적습니다. 그래서 스칼라는 20위 안에 들어올 수 있었습니다.

 스칼라가 20위 안에 들었을 뿐만 아니라, 많은 다른 큰 기복도 보입니다. 이는 Google 재색인 생성과 관련이 있으며, 매우 휘발성이 큰 정보입니다. 이를 위해 우리는 TIOBE 색인에 대한 보상 기능을 가까운 장래에 구현할 예정입니다. Google 히트 수가 지난 달과 비교하여 절반의 수치라는 것을 받아 들일 수 없기 때문입니다.

 노트: SQL은 2018년 2월 이후 TIOBE 색인에 다시 추가되었습니다. 이 이유는 SQL이 튜링 완료인 것처럼 보이기 때문입니다. 하지만 결과적으로 언어에 대한 최근의 히스토리가 없으므로 SQL 언어가 매우 빠르게 증가하고 있는 것처럼 보일 수 있지만, 사실 그렇지는 않습니다.

깃허브 이모지 이모티콘 github emoki emoticon

정보기술

https://gist.github.com/rxaviers/7360908


Visual Studio Code 환경값 자주 쓰는 것

정보기술
{

// 밝은 테마
"workbench.colorTheme": "Default Light+",

// 글꼴 d2coding
"editor.fontFamily": "D2Coding, Consolas, 'Courier New', monospace",
// (깃렌즈 사용할 경우)
"gitlens.advanced.messages": {
"suppressShowKeyBindingsNotice": true
},

// 마우스 휠로 줌인-아웃
"editor.mouseWheelZoom": true,

// 자동 줄 바꿈
"editor.wordWrap": true,

}

// 언어 구성
{
// 영어
"locale": "en",
}

환경설정은 개인 취향이므로 필요하신 것만 사용하시면 됩니다.


프로그래밍의 즐거움

정보기술


프로그래밍의 즐거움


 프로그래밍은 왜 재미있는가? 프로그램을 만드는 사람들은 어떤 즐거움을 대가로 기대하고 있는가?


 첫 번째는 무언가를 만드는 데서 오는 순전한 기쁨이다. 아이들이 진흙으로 과자를 만들면서 즐거워하듯이 어른들도 무언가 만드는 것을 즐기며, 그것이 직접 설계한 것이라면 더욱 그렇다. 나는 이런 기쁨이 조물주가 만물을 창조할 때 느꼈을 기쁨과 다르지 않을 거라고 생각한다. 그 모든 나뭇잎, 모든 눈송이가 낱낱이 새롭고 어느 하나라도 같지 않음에서 엿볼 수 있는 그런 기쁨 말이다.


 두 번째는 다른 이들에게 쓸모 있는 사물을 만드는 데서 오는 기쁨일 것이다. 우리는 자신이 만든 것을 다른 사람이 쓰면서 유용하다고 느끼기를 마음 깊은 곳에서 바란다. 이런 면에서 시스템 프로그래밍은 ‘아빠 회사에서’ 쓰라고 아이가 처음으로 만든 찰흙 연필꽂이와 별로 다르지 않다.


 세 번째는 서로 맞물려 돌아가는 부속품으로 이루어진 복잡한 퍼즐 같은 사물을 만들고, 거기 심어 놓은 여러 가지 법칙이 미묘한 순환 속에서 펼쳐지는 것을 바라보는 매혹적인 경험이다. 프로그래밍된 컴퓨터는 핀볼 기계나 주크박스 장치의 모든 매력을 가지면서도 그것을 궁극으로 끌어올린 것이라 할 수 있다.


 네 번째는 지속적인 배움에서 오는 기쁨이다. 이것은 반복되는 작업이 없다는 특성에서 비롯된다. 모든 문제에는 어딘가 새로운 측면이 있고, 문제를 해결하는 사람은 거기서 어쨌거나 무언가를 배우게 된다. 그 무언가는 때로 실용적이고 때로 이론적인 것이며, 가끔은 둘다일 경우도 있다.


 마지막 즐거움은, 너무도 유연하고 다루기 쉬운 표현 수단으로 작업하는 데서 오는 기쁨이다. 프로그래머의 작업은 시인과 마찬가지로 순수한 사고의 산물에 가깝다. 그는 허공 위에다 허공으로 만든 성을 상상의 힘으로 짓는다. 이만큼 유연하며 다듬기 쉽고 장대한 개념적 구조를 실체화하는 데 적합한 재료는 별로 없다(나중에 보겠지만 이런 유연성에도 나름의 문제는 있다).


 하지만 이런 프로그램들은 작동했을 때 그 자체와는 별개로 실재하는 결과물을 만들어낸다는 점에서 시인의 시구와 달리 현실에 닿아 있다. 이 프로그램은 결과를 출력하고 그림을 그리며, 소리를 내고 기계팔을 움직이기도 한다. 미신과 전설 속의 마법이 우리 시대에 이르러 현실이 된 것이다. 키보드에 올바른 주문을 타이핑하면 모니터 화면은 생명을 얻고, 이전에는 존재하지도 않았고 존재할 수도 없었던 것들을 우리에게 보여준다.


 이렇게 우리 마음 깊은 곳 창작에 대한 갈망을 충족시키고 모든 인간이 공통적으로 지닌 감수성을 즐겁게 하기에, 프로그래밍은 재미있는 일이다.


 출처: 맨먼스 미신 : 소프트웨어 공학에 관한 에세이. 프레더릭 브룩스 저. 강증빈 역.

 

TIOBE 프로그래밍 언어 순위

정보기술

*출처: https://www.tiobe.com/tiobe-index/


2018년 1월의 언어로 C언어가 선정되었습니다. 자동차 시장을 포함한 제조 및 기계 산업이 성장하는 것이 주요한 원인으로 보입니다. (주로 미국에서) 물론 오토모티브 분야는 국내에서도 거듭 새롭게 주목받고 있습니다. 자율주행 차량에 대한 관심이 계속되기 때문입니다.


Jan 2018Jan 2017ChangeProgramming LanguageRatingsChange
11Java14.215%-3.06%
22C11.037%+1.69%
33C++5.603%-0.70%
45changePython4.678%+1.21%
54changeC#3.754%-0.29%
67changeJavaScript3.465%+0.62%
76changeVisual Basic .NET3.261%+0.30%
816changeR2.549%+0.76%
910changePHP2.532%-0.03%
108changePerl2.419%-0.33%
1112changeRuby2.406%-0.14%
1214changeSwift2.377%+0.45%
1311changeDelphi/Object Pascal2.377%-0.18%
1415changeVisual Basic2.314%+0.40%
159changeAssembly language2.056%-0.65%
1618changeObjective-C1.860%+0.24%
1723changeScratch1.740%+0.58%
1819changeMATLAB1.653%+0.07%
1913changeGo1.569%-0.76%
2020PL/SQL1.429%-0.11%