업무와 관련된 학습의 의지는 항상 불타지만, 게으른 자신을 탓하며 미루고 미루다보니 2017년이 되었습니다. 그래서 백엔드 웹 개발자인 저는 2017년 개인 KPI로 ‘새로운 개발 언어를 습득하고 웹사이트 1회 이상 제작하기’를 설정하였습니다.



일단 새로운 언어를 배우겠다고 하긴 했는데, 어떤 언어를 배워야 할지 감이 잡히지 않았습니다. 세상에는 많은 개발 언어가 있고 계속해서 새로운 언어가 생겨나고 있기 때문이죠.


개발 언어의 다양한 종류, 출처: GRIFF'S GRAPH


어떤 언어를 배워야 할까요? 그에 앞서 다양한 통계를 먼저 살펴보도록 하겠습니다.



통계로 보는 개발 언어


1. Developer Survey Results 2016

전 세계적의 많은 개발자들이 활동하고 있는 개발자 포럼인 Stack Overflow에서 전 세계 173개국의 56,033명의 개발자들을 상대로 실시한 설문입니다.


<조사에 참여한 개발자들의 직업 분포>


Full-Stack 웹 개발자(OS부터 서버, 데이터베이스, 백엔드, 프론트엔드 등 전반적인 웹개발을 아우르는 능력을 가진 개발자)라고 응답한 비율이 28%로 가장 많고 백엔드 웹 개발자, 모바일 개발자 등의 순서대로 비중을 차지했습니다.


<가장 대중적인 기술>


설문에 참여한 개발자 중 웹 개발자의 비율이 높은 만큼 50%가 넘는 응답자가 JavaScript를 사용한다고 답했습니다. 그 뒤로 Java와 C#, PHP, Python 등이 주로 사용하는 개발 언어를 차지했습니다.


<가장 사랑받는 & 원하는 기술>


Rust, Swift 등이 응답자가 사용해본 언어 혹은 기술 중에 가장 많이 사랑받고 있다는 결과가 나왔습니다.



현재 사용하고 있지 않는 언어나 기술 중에서 가장 써보고 싶은 것에는 Android, Node.js, Angular.JS 등이 상위권을 차지했습니다.



2.Language Trends on GitHub

버전관리 툴인 깃(Git)을 사용하는 프로젝트를 지원하는 서비스인 GitHub서 2015년에 발표한 통계도 흥미롭습니다.  



아래는 GitHub가 2008 년에 출시 된 이후부터 GitHub.com에서 사용 된 프로그래밍 언어의 빈도를 토대로 그 순위를 보여주는 그래프입니다. Java가 눈에띄는 성장세를 보였고, Stack Overflow의 ‘가장 대중적인 기술’의 결과와 비슷하게 JavaScript와 PHP 등이 높은 순위를 차지했습니다.



통계가 의미하는 것


이런 결과들이 의미하는 것은 무엇일까요? 사실 의미하는 바가 그리 크지 않다고 생각합니다. 물론 일부 개발자들의 생각과 언어 사용 빈도, 추세 등을 볼 수는 있습니다. 그리고 생각보다 재밌었습니다. 학창시절에 Java를 배웠었는데 Java 순위의 변화 추세를 보며 ‘그때 열심히 배워둘 걸’하는 생각도 했습니다.

이러한 통계도 ‘재미로’ 진행하지 않았을까 생각합니다. 온라인 설문 조사의 특성 상 응답자가 제한되어 있고 세계적인 트렌드라고 하기에는 표본 집단의 수가 적기 때문입니다. 또한, Node.js가 10년 전에는 존재하지 않았던 것처럼 빠르게 변화하는 개발 언어의 전망은 쉽게 예측할 수 없기 때문입니다.


왜 배우려고 하는가


사실 ‘어떤 언어가 인기있더라, 이 정도는 알아야 하더라’ 하는 ‘~카더라’ 통신이 난무하라도, 제일 중요한 것은 배우려는 목적입니다. 백엔드 웹 개발자가 스타일과 레이아웃에 더 많은 욕심이 생긴다면 HTML과 CSS를, 프론트 웹 개발자가 DB를 좀 더 잘 다루고 싶다면 SQL, PL/SQL 등을 배워 볼 수 있겠죠.

제가 언어를 배우려고 하는 목적을 생각해 보았습니다. 저는 업무에 도움이 되면서도, 생산성이 높은 언어를 배움으로써 경쟁력을 가지고 싶었습니다. 그래서 Ruby on Rails라는 프레임워크를 사용하여 상대적으로 빠르고 쉽게 웹사이트를 만들 수 있다고 알려진, Ruby라는 개발 언어를 배우기로 하였습니다.



시작이 반이다


새롭게 마음먹은 김에 바로 실행에 옮겨보았습니다. 먼저 AWS에서 리눅스 서버 호스팅을 신청하고, Ruby 가이드Ruby on Rails가이드를 보면서 설치를 했습니다.


그리고 home/hello라는 URL 세팅을 하고  


‘Hello, World!’를 출력했습니다 :)


이제 할 일을 다한 것 같은 기분이 들긴 하지만 시작이 반이라고 했습니다! 저는 개발계의 초석같은 ‘Hello, World!’를 출력함으로써 반이나 나아갔습니다(라고 믿고 있습니다).

어떤 개발 언어를 배울지, 어떤 언어가 요새 트렌드인지 고민하는 사이에 시간은 흐르고 있습니다! 당신이 배우고 싶은 개발 언어는 무엇인가요? 그게 어떤 것이든 개발 언어 공부의 시작을 응원합니다.



참고

What’s the Best Programming Language to Learn in 2017?




Posted by slowalk


슬로워크 블로그에서는 얼마 전, 비디자이너의 얕은 지식 쌓기: 디자인 용어 20에 대해 포스팅했습니다. 그 글을 보고 저 또한 개발팀 내 유일한 비개발자이기에 많은 영감을 받아 이번 글을 작성하게 되었습니다. 저는 웹기획자로 프론트엔드개발자 두 명, 백엔드개발자 한 명과 함께 팀을 이뤄 작업하고 있습니다. 개발자와 함께 일하기 역시 기본적인 용어를 알지 못하면 혼란스러운 상황(나는 누구? 여긴 어디?..)에 처할 수 있습니다. 고객들도 웹사이트 의뢰를 하면서 익숙지 않은 여러 용어에 낯설어 합니다. 저 역시 아직도 갈 길이 멀지만, 개발자와 소통하기 위한 넓고 얕은 개발용어 몇 가지를 안내해 드립니다.



프론트엔드개발자와 백엔드개발자는 어떻게 다른 건가요?


프론트엔드개발자 - 사용자의 화면에 나타나는 웹 화면을 프론트엔드(Front-end) 영역이라고 합니다. 그리고 이 영역을 설계하는 사람을 프론트엔드개발자라고 합니다. 프론트엔드개발자는 사용자가 보는 화면을 주로 HTML과 CSS를 사용하여 보기 좋게 보이게 만들어주는 사람이라고 할 수 있습니다.


백엔드개발자 - 백엔드(Back-end) 영역은 일반적으로 사용자가 볼 수 없습니다. 예를 들어, 회원가입 정보를 입력하면 그 정보는 서버 데이터베이스에 저장되는데, 이러한 동작들이 처리되는 영역이 백엔드 입니다. 사용자가 보이지 않는 웹서버, 내부로직, 데이터베이스 설계, 데이터 처리를 주로 개발하는 사람입니다.

프론트엔드에서 사용자가 클릭, 드래그의 동작을 하면 이를 백엔드에서 처리한 데이터를 다시 프론트엔드로 돌려주어 사용자가 해당 작업을 수행할 수 있게 됩니다. 예를 들어, 페이스북에 사용자가 사진을 올리면 그 사진을 백엔드에서 데이터베이스에 저장하고 다시 프론트엔드로 돌려주어 내 사진을 다른 사용자가 볼 수 있게 되는 것입니다.

꼭 두 영역을 명확히 나눠서 개발하는 것은 아닙니다. 프론트엔드, 백엔드를 함께 진행하는 개발자도 있는 등 역할의 범위는 다양합니다.



자바, 파이썬, 루비, 펄, C++ .. 이게 다 무슨 이름인가요? 프로그래밍 언어는 다양하여 많은 선택지가 존재합니다. 유행을 타기도 하고 순위가 매겨지기도 합니다. 현재 사용되는 프로그래밍 언어는, 위키피디아에 따르면 698종이라고 합니다. 그 중 가장 많이 사용하는 언어는 C 계열 언어와 JAVA 계열의 언어이고, 최근에는 빅데이터 전문가가 뜨면서 R 프로그래밍이나 하둡에 관심을 두는 사람도 많아지는 추세라고 합니다. 각 언어는 저마다 장단점을 가지고 있고, 그렇기에 개발자들도 다룰 수 있는 언어들이 다양합니다.


출처: TIOBE



사용 가능한 프로그래밍 언어가 계속해서 늘고 점유율 순위가 바뀌고 사라지는 이유는 사용성 때문입니다. 요구사항이 변하고 시스템이 바뀔 때마다 손쉽게 바꿀 수 있어야 좋은 프로그래밍 언어가 됩니다.

비개발자이더라도 위 프로그래밍 언어들의 이름 정도만 알고 있으면 개발자들이 옆에서 이야기할 때 ‘아~ 프로그래밍 언어 얘기하는구나!’ 정도는 이해할 수 있습니다. 개발자와 가까워지는 방법은 그들의 언어를 한 번이라도 더 많이 들어보는 것입니다.



PHP, MySQL, Oracle 들어는 봤는데.. 서버? 백엔드개발자들이 사용하는 언어 맞나요?

PHP는 서버 쪽에서 동작되는 언어입니다. 자바스크립트나 HTML이 웹 브라우저에서 구동되는 것과는 구분됩니다. 사용자가 업로드한 파일을 서버에 저장하거나, 입력 데이터를 받아 데이터베이스나 파일에 저장하고, 저장된 정보를 불러와 HTML을 생성해서 웹브라우저로 전송하는 일을 처리합니다.

MySQL은 데이터를 보관하는 데이터베이스 관리 시스템의 한 종류입니다. 데이터베이스는 파일보다 정보 저장에 관해 더 많은 기능을 제공하기 때문에, 대부분의 데이터들이 데이터베이스에 저장됩니다. 그 중 MySQL은 오픈소스이기 때문에 많이 사용되고 있습니다.  


*서버 - 서버란 파일, 홈페이지, 동영상 등의 자료를 보관하고, 보관된 자료를 인터넷이 연결된 곳에서 언제든지 접근할 수 있도록 구성된 소프트웨어를 말합니다. 서버에는 메일서버, 웹 서버, 데이터베이스를 관리하는 DB서버, FTP프로토콜을 이용하여 파일전송을 가능케하는 FTP서버 등 다양한 서버가 있습니다.



서브라임텍스트3 사용하고 있고요, 깃으로 푸시해주세요~ 서브라임텍스트는 개발도구를 말합니다. 일반적으로 프로그래밍을 하는 데는 윈도우에서 메모장, 맥에서는 텍스트 에디터만 있어도 가능합니다. 그러나 규모가 크고, 오류가 없는 프로그램을 만들기 위해 작업을 도와주는 수 많은 개발도구들이 존재합니다. 좀 더 빠르고 효율적으로 개발하기 위해 도구를 사용하는 것이죠. 개발도구에는 비주얼스튜디오, 노트패트++, 빔, 이클립스 등이 있습니다. 그 중 서브라임텍스트는 개발자가 선호하는 도구 2위를 차지할 만큼 인기를 끌고 있습니다. 현재 슬로워크 1팀에서는 서브라임텍스트3을 사용하고 있습니다. 서브라임텍스트는 유료이지만 무료로도 사용할 수 있습니다. 장점으로는 개발자들이 많이 사용하기에 플러그인이 많아 원하는 대로 기능 확장이 가능합니다. 또한 가벼워서 좋다고 합니다.





기본적으로 이러한 까만 창이 서브라임텍스트3 입니다. 코딩을 위한 폰트도 개발자의 설정에 맞게 변경할 수 있습니다. 자세한 내용은 코딩 폰트 디자인기, Monoid를 참조해주세요.

깃(Git)은 버전관리 시스템으로 소스코드의 중요한 변화를 기록하는 것입니다. 어떠한 문제가 발생했을 때 문제의 전후 상황을 파악할 수 있도록 도와주고, 과거의 상태로 쉽게 돌아갈 수 있게 합니다. 특히 백업, 협업에 쉬워 많이 사용되고 있습니다. 물론 Git이 모든 걸 해결해주진 않지만 도움을 주기 때문에 많이 사용하게 됩니다.


CMS는 주로 워드프레스를 사용해요~


CMS-Collage2.png

출처: wooraky's Minority Report



CMS(Contents Management System)는 콘텐츠 관리 시스템으로 웹사이트를 구성하고 있는 다양한 콘텐츠를 효율적으로 관리할 수 있도록 도와주는 시스템입니다. 콘텐츠를 손쉽게 생성, 배포, 관리할 수 있는 http 기반의 프레임워크*라고 생각하시면 됩니다. 웹 서버상에서 운용이 되고 다양한 방식의 기술적 적용이 가능합니다. 우리나라는 XE(Xpress Engine)가 CMS를 표방하고 있습니다. 또한 요즘은 워드프레스(Wordpress)를 많이 사용하는 추세입니다. CMS는 전 세계적으로 워드프레스, 드루팔(Drupal), 줌라(Joomla) 이 세 가지 툴이 많이 쓰입니다. 특히 워드프레스는 쉬운 사용법과 기능들을 통해  CMS 시장을 거의 장악하고 있습니다. 프로그래밍 언어와 같이 다양한 장단점이 있고 어떤 툴이 가장 좋다고는 할 수 없습니다. 다만 대표적으로 많이 쓰이는 CMS 세 가지 정도를 알고만 있어도 개발자의 이야기를 훨씬 많이 이해할 수 있습니다.


*프레임워크 - 소프트웨어 제작을 편리하게 할 수 있도록 뼈대인 클래스와 인터페이스를 제작한 것들을 미리 모아둔 것입니다. 개발자는 이 뼈대에 살을 붙이는 방식으로 어플리케이션을 완성 시킵니다. 개발 생산성이 증대되고, 유지보수가 비교적 편리하다는 장점이 있습니다.

단점은 익숙해지는 데에 시간이 소요되고 모든 상황을 커버할 수는 없다는 한계가 있다는 점입니다. 그렇기에 개발 프레임워크를 얼마나 쉽게 커스터마이징 할 수 있는지가 프레임워크의 우수성을 평가하는 기준이 되기도 합니다.



HTML / CSS / jQuery / JavaScript 를 사용해서 만들었고요~


HTML - HTML은 웹 브라우저를 통해 사용자에게 보이는 프론트 영역을 작성하기 위한 언어로 웹 문서 내용 작성에 집중 합니다. 웹 사이트의 뼈대가 되는 구조라고 볼 수 있습니다.

CSS - CSS는 HTML로 잡아놓은 뼈대에 다양한 스타일을 추가, 변경하여 웹사이트에 디자인을 부여하고 글자의 크기 모양 줄 간격 등을 제어할 수 있게 만들어주는 언어입니다. HTML로 만들어진 뼈대에 CSS로 디자인을 입힌다는 개념입니다.


14066284_10208305726855618_3819602411510392924_o.jpg

출처: 조성도 페이스북


JavaScript - 자바스크립트는 웹사이트에서 팝업창을 열거나 전화번호 또는 이메일 주소의 유효성을 체크하는 등의 기능적인 요소를 위해 사용되는 언어로 액션에 용이합니다. 즉 HTML로 만들어진 뼈대에 CSS로 디자인을 입히고 JavaScript로 움직임을 넣는 개념입니다.

jQuery - jQuery는 자주 사용되는 기능들을 쉽게 사용할 수 있도록 모아놓은 자바스크립트 라이브러리입니다. 쉽게 말해 자주 사용하는 자바스크립트의 복잡한 코드를 간소화해주는 모듈을 말합니다. 크로스 브라우징(웹브라우저의 종류에 상관없이 웹사이트의 레이아웃 위치나 모양이 동일하게 보여지도록 서비스 접근성을 향상시키는 기술)이 쉽게 해결됩니다.



반응형 웹으로 할까요, 적응형 웹으로 할까요?


반응형 웹과 적응형 웹도 웹 사이트 구축 시 빠질 수 없는 알아두어야 할 개념입니다. 해당 내용은 더 자세히 설명된 슬로워크 포스팅 글로 이동합니다.

반응형 웹, 정말 효과적일까?



구글지도API를 사용해서 찾아오시는 길에 넣을게요! API?


API - Application Programming Interface의 약자입니다.

각 단어를 나눠서 생각해보시면,

어플리케이션 : 응용프로그램, 즉 흔히 알고 계시는 앱(app)입니다.

프로그래밍 인터페이스 : 기계가 이해하기 쉽게 입출력이 데이터로 이루어지는 인터페이스 입니다.

즉, 웹 어플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 말합니다.


startup_img3.jpg

출처: 공공데이터포털



이렇게 프로그램 간 서로의 커뮤니케이션을 담당하는 기능이라고 이해하시면 됩니다.

최근 우체국의 우편번호 API, 구글과 네이버 다음지도 API등 유용한 API가 많아 홈페이지 구축 시 따로 추가 개발 대신 이러한 *오픈 API를 많이 사용하고 있습니다. 특히 하이브리드 앱이나 워드프레스로 웹사이트를 만들 때 더욱 유용하게 쓰이곤 합니다.


*오픈API - 말 그대로 오픈되어 있는 API, 즉 자사의 API를 개방하여 외부에서 쉽게 쓸 수 있도록 만든 것입니다. 오픈API는 포털의 개방성을 높이기 위한 기술적 기반/개방 응용프로그램 인터페이스입니다.


대표 오픈 API사이트 몇 가지를 소개해드립니다. 아래 사이트에 가보시면API가 어떤 용도로 쓰이시는지 조금 감이 오실 겁니다. 한 번쯤 구경해 보기에도 좋습니다.


서울시공공 오픈API

구글 디벨로퍼

페이스북 개발자

카카오 디벨로퍼



구글api.png

출처: 구글 디벨로퍼

기본적이지만 모르면 외계어처럼 들리는 개발 용어들에 대해 간단히 알아보았습니다. 사실 정말 많은 개발 용어가 존재하고 있고, 개발자마다 사용언어나 사용법이 조금씩 다릅니다. 그렇기에 가장 중요한 것은 내가 함께 일할 동료들의 대화에 귀 기울이며 많은 대화를 하는 것입니다. 이 글을 작성하면서 저 또한 같은 팀 개발자 동료들께 많은 검수를 받고, 조언을 얻었습니다. 그 과정에서 어떤 도구를 사용해 어떤 식으로 일을 하고 있는지도 더욱 자세히 알게 되었고, 커뮤니케이션의 중요성을 다시 한 번 깨닫게 되었습니다.


참조

공공데이터포털 테크엠






Posted by slowalk

웹뿐만 아니라 애플리케이션, 데이터베이스 등 대부분의 개발에서 중요하게 맞닥뜨리게 되는 것이 바로 'NULL'이라는 개념입니다. 'NULL'이란 아무것도 없음을 의미하는 단어이며, 0이나 " "와 같은 공백과는 다른 개념입니다. 

프로그래밍을 접하지 않으신 분들이라면 쉽게 와 닿지 않을 텐데요. 그런 분들을 위해 개발에 있어서 'NULL'이 어떤 의미를 가지는지 알아보려고 합니다. 





NULL이란?


NULL이 '영원한 숙제'인 것은 아마도 많은 개발자들이 NULL을 마주하는 경우가 주로 프로그래밍 중에 에러 메시지로 고생할 때이기 때문이라고 생각합니다. 이 개념을 만들어낸 당사자도 '몇십 억짜리 실수'라고 이야기할 정도로, 프로그래밍을 하면서 많은 예외 상황을 만들어 냅니다.


프로그래밍 언어인 C언어에서는 생성된 메모리의 주소를 '포인터'라는 것이 가리키게 되어 포인터를 통해 데이터를 가져올 수 있게 됩니다. 이때 포인터가 아무것도 가리키고 있지 않다는 것을 나타내기 위해 NULL이라는 개념을 사용하게 되는 것입니다. 따라서 메모리에 0이나 " "와 같은 공백이 존재하여 포인터를 통해 값을 가져와 연산 등에 활용될 수 있는 반면에, NULL은 포인터가 가져올 값이 없는 상태를 말하므로 그 활용에 제약이 큽니다.  





데이터베이스의 경우에서도 마찬가지로 값이 존재하지 않음을 나타내는 데 사용되며 그 값을 'NULL값'이라고 합니다. Oracle, Mysql과 같이 데이터베이스를 처리하는 벤더마다 NULL값을 처리하는 방식이 구체적으로 다르지만, 기본적으로 '아직 입력되지 않은 값' 또는 '알 수 없는 값'을 의미합니다. 결국 '존재하지 않는 값'이므로 SQL(구조적 질의 언어)을 이용한 다양한 연산에서도 제약을 받게 됩니다. 

대중적으로 쓰이고 있는 Oracle 데이터베이스의 경우로 제약에 관한 예를 들어보겠습니다. 사칙 연산( +, -, *, / )의 경우입니다. 흔히 'NULL값에 3을 더하면 아무것도 없는 것에서 3을 더하니까 3이겠지'라고 생각하실 수 있지만, 결과는 NULL입니다. 이것은 숫자의 형태가 아닌 어떤 것과 연산을 시도하려는 논리적 오류에서 발생하는 것입니다. 





이해를 돕기 위해 간단하게 예를 들어보자면 통장의 잔액이 0원인 상태가 0의 개념이라면, 통장 자체를 개설하지 않아 계좌번호가 없는 (또는 계좌번호를 모르는) 것이 NULL값의 개념인 것입니다. 계좌번호가 없는 상태에서 돈을 입금하는 것은 말이 안 되겠죠?

사칙연산과 관련하여 좀 더 깊게 들어가면, Sum(선택한 모든 값을 더해주는 함수)과 같은 집계 함수에서는 경우가 다릅니다. NULL값이 포함되어 있어도 이를 제외하고 계산이 가능한데, 이는 데이터베이스 관리 시스템을 만든 곳에서 사용자를 배려한 처사가 아닐까 합니다. 

데이터베이스를 사용하는 사용자는 입력된 데이터를 가지고 효과적으로 원하는 정보를 출력해내는 것을 원할 것입니다. 수많은 레코드 중에서 극히 일부 레코드 값이 NULL값이라고 해서 집계 처리 결과를 무조건 NULL로 리턴한다면, 이로 인해 다양한 경우에서 제약을 받을 것입니다.



영원한 숙제


위에서 말한 이러한 규칙들이 다른 데이터베이스에서도 동일하게 적용되는 것은 아닙니다. 다양한 상황에 따라서 NULL규칙이 일관적이지 않은 부분도 개발자를 힘들게 하지만, 각각의 데이터베이스 종류별로 NULL에 대해 상이한 규칙을 갖는 것도 개발자를 힘들게 합니다. 

C언어에서는 NULL로 인해 'Null Pointer Dereference'가 발생합니다. 





일반적으로 Null Pointer Dereference가 발생하면 실행 중인 프로그램이 종료됩니다. 또한 보안적으로 취약해질 수 있습니다. 공격자가 의도적으로 이러한 Null Pointer Dereference를 실행하는 경우, 그 결과 발생하는 예외 사항을 추후 공격을 계획하는 데 악용할 수 있기 때문입니다.

이를 막기 위해서는 특별한 방법은 없습니다. 코드를 작성할 때 미리 이러한 경우를 계산하여 작성하거나, Null 포인터 체크를 통하여 프로그램이 실행 중에 중단되는 경우가 없도록 하는 것입니다. 하지만 실제 업무에서는 몇백 또는 몇천 줄 그 이상의 코드를 일일이 체크하기란 쉬운 일이 아닙니다. 이렇게 개발자의 야근은 늘어나는 것일까요? 



현명한 개발자의 해결책


야근을 피하고 효율적으로 개발하는 현명한 개발자가 되기 위하여 어떤 방법을 사용해야 할까요? 


1. 정적분석도구의 사용  

우선 정적 분석 도구(Static Code Analysis Tool)를 사용하는 것입니다. 정적 분석은 컴퓨터 소프트웨어를 분석하는 방법 가운데 하나로, 그 소프트웨어로부터 만들어진 프로그램을 실제로 실행해보지 않고 분석하는 방법입니다. 분석된 정보를 이용하는 것뿐만 아니라 있음 직한 코딩 에러를 표시해주는 것, 프로그램이 어떤 속성을 만족하는지 수학적으로 증명하는 것까지 다양합니다.    



 사진출처: Wisedog's Lifelog



2. 안드로이드 대안 언어 '코틀린'

코틀린이라는 안드로이드 개발 언어는 제트브레인이 2011년 만든 언어입니다. 문법적으로 C언어와 비슷한 자바와 호환이 되는 장점이 있으며, 이와 더불어 자바보다 문법 자체가 간결하여 유지보수를 조금 더 편하게 할 수 있고 다양하게 표현을 확장할 수 있습니다. 





C와 마찬가지로 자바에서도 NULL과 관련한 예외 상황이 NullPointerException이라는 이름으로 발생합니다. 하지만 코틀리는 NULL값을 코드에서 없애는 것을 지향하여, 결과적으로 프로그램이 실행 중에 예외 상황을 만나 중단되는 위험을 줄여주며 안정성을 높여줍니다.


다양한 프로그램 분석 방법과 NULL을 지양하는 대체 언어를 선택하는 것들은 모두 좋은 대안이 될 수 있지만, 최선의 방법은 개발자들이 NULL에 대해 완벽하게 이해하고 사용하는 것이라는 사실에는 변함이 없습니다. 

개인적으로는 반드시 NULL을 쓸 필요가 없고 NULL을 허용할 필요가 없다고 생각합니다. 무식하지만 우직하게 개발을 해 나가는 방법이 있습니다. 데이터베이스에는 데이터를 입력할 때 'NOT NULL'이라는 조건을 두어 무조건 NULL값을 허용하지 않을 수 있으며, 따라서 NULL을 허용했을 때 생기는 문제점을 미리 방지할 수 있습니다. C나 Java같은 언어를 사용함에도, 0과 공백을 활용하여 값이 없음을 개발자 스스로 인식하지만, 포인터가 데이터가 있음을 인지하게 하는 방법도 있습니다.   

이러한 방법들은 개발의 배경이 되는 상황, 개발 관련 요구사항, 개발자의 의도에 따라서 개발자 스스로가 선택해서 사용해야 합니다. 그리고 개발자가 NULL에 휩쓸려 급급하게 에러를 수정하며 따라가는 것이 아니라, 주도적으로 NULL을 이용해 나간다면 좀 더 효율적인 프로그래밍을 할 수 있을 것입니다. 

지피지기면 백전백승!


by 수달 발자국

출처: 위키백과, 아이티데일리디비가이드넷, 블로터, Javarevisited


Posted by slowalk

요즘은 누구나 스마트기기를 사용하는 문화가 익숙한데요. 어린 꼬마 아이들한테는 어떨까요? 이번 설에도 내려가는 기차 안에는 아이들이 인형 대신 아이패드나 스마트폰을 쥐고 게임을 하거나 영상을 보고 있었는데요. 이렇게 컴퓨터를 빨리 접하는 아이들에게 프로그램이 어떻게 실행되고 보이는지 프로그래밍의 원리를 알려주면 어떨까요? 그것도 그냥 즐거운 놀이를 통해서 말이죠.


여기서 프로그래밍은 컴퓨터에 부여하는 명령을 만드는 작업으로, 수식이나 자료를 정리해서 순서를 정하고 컴퓨터 특유의 명령코드로 고쳐 쓰는 작업을 말합니다. (출처: 네이버 지식백과)

영국에 있는 프리모(primo)는 4~7세의 아동들이 컴퓨터 프로그래밍의 기본 원리를 배울 수 있도록 장난감을 만들었다고 합니다. 어른들도 어렵게 느껴지는 프로그래밍 언어를 어떻게 배우는지 알아볼까요. 먼저 플레이 세트의 기본 구성을 알아봅시다.



1. 깜찍한 로봇 큐베토(Cubetto)



2. 로봇 큐베토를 제어하는 인터페이스 보드



3. 명령어를 나타내는 방향키(앞으로, 왼쪽, 오른쪽, 기능블럭)





간단히 말해 로봇 큐베토를 위의 방향키로 아이들이 이동시키고 싶은 곳까지 로봇을 움직이는 것입니다. 2번 인터페이스 보드에 3번 방향키를 꽂고 재생버튼을 누르면 방향키를 꽂은 순서에 따라 로봇은 나무나 울타리 등 장애물을 피해 이동하는 것이죠. 아이 스스로 하나씩 방향키를 선택하면서 자연스레 로직을 이해하며 재미를 붙일 수 있을 것 같네요. 어렸을 적부터 자연스레 습득한 원리를 어른이 되어 프로그래밍을 이해하는 좋은 밑거름이 될 것 같습니다.



프리모 셋트 (인터페이스 보드, 큐베토, 방향키블럭)



프리모 홈페이지를 통해 장난감은 판매되며, 프로그래밍의 원리를 교육자들에게 알려주는 워크샵도 진행한다고 하네요. 실제로 이 장난감은 킥스타터(Kickstarter)라는 유명한 크라우드 펀딩 사이트에서 많은 관심을 받았다고 합니다. 컴퓨터 프로그램밍이라는 다소 어려운 주제를 아이들이 좋아하는 색상과 형태 그리고 나무를 소재로 친근하게 잘 표현되어 많은 인기를 얻은 게 아닐까요?





또한, 패키지나, 설명서, 웹사이트 등 전체적으로 일관된 디자인으로 프리모의 통일된 인상을 주도록 유지한 점이 인상 깊었습니다. 요즘 꿈이 없다는 친구들을 보면 많이 안타까운데요. 이처럼 어렸을 적부터 다양한 경험을 통해 자신이 좋아하는 것을 찾고, 꿈을 가지게끔 이끌어가는 문화가 중요하다고 생각됩니다.






출처 : PRIMO



by 종달새 발자국




Posted by slowalk