블로그 이미지

벵거빠돌이

,

MS에서 인수후 프리사용자에게도 프라이빗 리포지토리를 제공한다고 발표했습니다. 


https://blog.github.com/2019-01-07-new-year-new-github/

블로그 이미지

벵거빠돌이

,

14년 6월 자료네요 ㅠㅠ

https://www.thinglink.com/scene/536427472728621058?buttonSource=viewLimits



로그래밍 언어는 애초에 사람이 컴퓨터와 소통하기 위해 만든 것이지만, 필요에 따라 서로 다른 방식으로 발전해왔다. 처음에 사람과 컴퓨터는 바이너리 코드(2진수 언어)로 소통했다. 컴퓨터가 인식할 수 있는 건 1과 0 두 가지뿐이다. 전기가 통하면 1, 안 통하면 0이다. 컴퓨터에서 작동하는 모든 복잡한 프로그램과 데이터는 결국 1과 0의 조합이다.  컴퓨터는 1과 0으로 조합된 복잡한 명령을 재빨리 처리하는 장치다. 초기 컴퓨터에 명령을 내리려면 직접 전선을 연결해야 했다. 전선을 연결하면 1, 연결하지 않으면 0이라는 식이었다. 이런 식으로 수많은 전선 가닥을 연결해 복잡한 계산식을 설계해야 했다. 이것이 초창기 프로그래밍이었다.

이진수로 컴퓨터에 직접 명령을 내리던 단계에서 조금 나아가 자주 쓰는 비트 패턴을 사람이 이해할 만한 약어로 바꿨다. ‘move’, ‘jump’ 같은 명령을 패턴으로 만들어 두는 것이다. 이런 명령을 내리면 ‘어셈블러(assembler)’라는 프로그램이 명령어를 이진수로 바꿔 컴퓨터에 넘긴다. 그래서 이런 원시적인 프로그래밍 언어를 ‘어셈블리어’라고 부른다.

사람이 이해할 만한 프로그래밍 언어를 ‘고급 언어(high level language)’라고 부른다. 고급 언어가 나온 뒤 프로그래밍 언어는 급속도로 발전하기 시작했다. 요즘 널리 쓰이는 언어 대다수는 IBM이 항공우주 분야에 쓰려고 만든 고급 언어 ‘포트란’에 영향을 받았다. 프로그래밍 언어가 서로 어떻게 영향을 주고 받으며 발전했는지, 내가 쓰는 언어의 뿌리를 되짚어 보면 대학에서 C만 고집하는 교수님 속을 조금은 헤아릴 수 있지 않을까.

지금 가장 널리 쓰이는 프로그래밍 언어 12개의 계보를 인포그래픽으로 그렸다. SQL은 데이터베이스에 저장해 둔 데이터를 추출하는 쿼리 묶음 언어다. ‘데이터베이스 관리 프로그램(DBMS)’과 소통하는 데만 쓰이기 때문에 다른 언어와 동급으로 보기엔 무리가 있어 생략했다.

마우스를 인포그래픽 위에 올리면 단추가 나타난다. 단추를 누르면 간단한 설명을 볼 수 있다.

블로그 이미지

벵거빠돌이

,

1. 과부하된 머리를 식혀주는 페어프로그래밍

외국어로 글을 써본 경험이 있다면 누구나 "머리가 터질 것 같은 기분"을 경험해보았을 것이다. 이 때 글을 쓴다고 함은 한국어 문장에 대응되는 외국어 문장을 한마디씩 써보며 작문을 연습 하는 것을 의미하지 않는다. 글을 쓴다는 것은 전달하고 싶은 메시지를 정하고, 이를 뒷받침하기 위한 합리적 근거를 마련하여 설득력있는 결론에 도달하는 것을 의미한다. 이는 모국어로 글을 쓸 때에도 쉽지만은 않은 과정이다. 그러나 능숙하지 않은 외국어로 글을 쓸 때 우리는 시작하기도 전에 더욱 오랫동안 머뭇거리게 되고, 글을 쓰는 중에도 수시로 '내가 무슨 말을 하려고 했더라'를 되뇌이게 된다. 그러다 보니 한국어로 글을 쓸 때보다 훨씬 더 많은 시간이 소요되는 것은 당연한 일이다. 

코딩을 할 때도 똑같이 "머리가 터질 것 같은 기분"이 드는 것은 코딩이 외국어로 글을 쓰는 과정과 다를바 없기 때문이다. 글을 쓰기 전에 우리는 글의 전반적인 흐름을 구상해야하고, 글을 쓰는 동안에는 각각의 문장이 문법 규칙에 부합하는지를 고려함과 동시에 전체적인 흐름에 적절한지를 확인해야한다. 코딩도 마찬가지이다. 코드를 작성하기 전에는 전반적인 알고리즘을 설계하고, 작성하는 동안에는 각각의 명령어가 특정 언어의 문법에 부합하는지를 꼼꼼히 체크함과 동시에 알고리즘이라는 큰 그림을 계속해서 염두에 두어야 한다. 이와 같이 여러 종류의 복잡한 사고를 동시에 하느라 말그대로 머리가 터질 것 같은 기분이 드는 상태를 "인지과부하"라고 한다. 

페어프로그래밍은 한 가지 과제에 필요한 인지자원을 두 사람이 나누어 제공함으로써 각 사람의 인지부하를 효과적으로 감소시킨다.

너무 많은 프로그램을 동시에 실행하면 컴퓨터가 작동을 멈추듯이 학습을 하는 우리의 뇌도 과부하가 올 수 있다. 2003년에 이에 관한 이론을 제시한 사람이 John Sweller이다.  Sweller가 말하는 인지과부하란 해결해야하는 과제가 요구하는 인지적 자원의 양이 학습자가 보유하고 있는 인지자원의 용량을 초과하는 상태를 말한다. 특정 프로그래밍 언어에 익숙하지 않은 상태에서 코딩을 해야하는 학습자의 입장에서, 언어의 문법을 고려함과 동시에 알고리즘을 설계하는 일은 인지과부하를 초래하기 쉽다. 문법적 오류를 내지 않는 일만 해도 초심자에게는 많은 양의 인지자원이 동원되기 때문이다.

2. 페어프로그래밍을 하는 방법

페어프로그래밍을 할 때는 각 사람이 Navigator  Driver 두 역할 중 하나를 맡는다. 말그대로 한 사람은 지도를 보며 앞으로 나아가야할 방향을 잡아주는 역할을 하고, 다른 사람은 직접 운전을 하는 역할을 한다는 뜻이다. 그렇지 않으면 Driver에게 인지과부하가 걸려 이상한 길로 가거나, 사고를 낼지도 모르기 때문이다. Navigator는 문제 해결 방법을 논리적으로 생각하고 그 과정을 직접 말로 설명한다. 그러는 동안 Driver는 Navigator 가 설명한 논리적 방식대로 실제 코드를 작성한다. 실제 키보드를 만지고 타이핑해서 코드를 작성하는 것이다.


하지만 역할을 나누는 것 만으로는 효과적인 페어프로그래밍을 하기 어렵다. 아래는 WikiHow의 How to Pair Programming을 일부 참고하여 번역한 내용이다. 구체적인 팁을 활용한다면 생상적인 협업을 할 수 있을 것이다.

1. 명확한 목표 세우기
한 시간에서 두 시간 안에 완료될 수 있는 목표를 설정하는 것이 좋다더 오랜 시간이 소요되는 과제의 경우 해당 과제의 어떠한 부분을 완성할 것인지 결정하면 된다. 집중력 향상에 더욱 도움이 되는 것은 몇 분 이내로 완료될 수 있는 단위의 세부 목표를 세우는 것이다이는 전체적인 진행상황을 두 사람이 명확히 공유할 수 있게 해주기도 한다.

2. Navigator는 숲을 보는 일에 집중하기
Navigator는 디테일한 문제를 해결하는 것은 Driver에게 맡기고더 높은 수준의 문제를 고민하는 데 에너지를 쏟아야 한다. 코드를 읽기 어렵게 만드는 작은 문제들의 경우 즉각적으로 피드백을 주되큰 문제들의 경우 적어 두었다가 Driver가 해당 코드 작성을 완료한 이후에 논의하는 것이 좋다. 

3. Driver는 나무를 보는 일에 집중하기
Driver는 큼직한 문제들을 걱정하지 말고 작은 목표를 빠르게 해결하는 데 집중해야 한다Navigator가 문제 해결의 방향을 제시해주면 구체적인 방법을 스스로 생각해 보면서 코드를 작성하면 된다

4. 적극적으로 토론해야하기
무엇을 가지고 서로 이야기를 나누며 코딩을 해야하는지 막막하다면 다음과 같은 내용을 참고해보자.
  ● 코드를 작성하기 전에 지금 하려는 일이 무엇인지 설명하기 
  ● 문제를 해결할 더 좋은 방법을 물어보기 
  ● 대안적인 아이디어를 제안하기 
  ● 누락되었을 만한 input 을 짚어주기 
  ● 더 직관적인 변수 이름을 제안하기 
  ● 짝이 놓치고 있는 관련 지식을 설명해주기 

5. 현시점에 진행중인 내용을 서로 자주 확인하기
짝이 무엇을 하고 있는지 흐름을 놓치는 일이 자주 발생할 수 있다정상적인 과정이니 짝과의 팀워크에 의문을 품지 않아도 되지만, 페러프로그래밍을 잘 하려면 현시점에 진행중인 내용을 서로 자주 확인해야 한다맥락을 놓친지 일 분 이내로 확인하는 것이 좋다.

6. 30 분에 한번씩 역할 변경하기
특정 과제를 끝낸 이후에는 그것이 성공했든 실패했든 서로를 격려하는 과정이 필요하다. 또한 역할을 변경해가면서 진행하는 것도 집중력 향상에 도움이 된다. 


3. 실무에서 활용되는 페어프로그래밍

페어 프로그래밍은 코딩을 공부하고 있는 사람들에게만 유용한 것이 아니다. 실무에 있는 개발자들도 동료, 선배, 후배와 페어프로그래밍을 한다. 그만큼 페어프로그래밍이 유용하다는 평가를 받는 이유는 여러가지이다. 



우선, 코드의 결함이 줄어든다. 앞서 설명했듯이, 인지과부하가 오면 아무것도 하지 못하거나 자주 실수를 하는 상황이 발생한다. 페어프로그래밍을 하면 각자 맡은 역할에만 집중할 수 있기 때문에 잘못된 코드를 작성하는 일이 줄어든다.

또한 실시간으로 이루어지는 코드 리뷰는 집중력을 높여준다. 내가 작성 중인 코드를 누군가가 보고 있다는 긴장감은 집중력을 높이는 데에 긍정적으로 기여한다. 뿐만 아니라 솔직히 말해 코딩은 컴퓨터로 하는 작업이다 보니 이런 저런 알림에 반응하거나 구글링을 하다가 샛길로 빠지는 일이 다반사이다. 그러나 페어프로그래밍 중에는 혼자 작업할 때만큼 딴짓을 할 수 없기도 하다. 

마지막으로 페어프로그래밍은 성장의 기회가 된다. Driver는 자신의 Navigator가 설계한 로직에서 자신과는 다른 사고의 패턴을 경험하게되고, Nvaigator는 Driver가 작성하는 코드를 보며 새로운 지식와 노하우들을 얻을 수 있다. 

이와 같이 페어프로그래밍은 코딩을 배우는 사람에게도, 실무에서 일을 하는 사람에게도 유익한 활동이다. 특히나 
코딩을 배우는 입장에서는 페어프로그래밍만큼 재미와 학습 효율을 모두 얻을 수 있는 좋은 활동이 없다. 

코드스테이츠에서는 Pre Course 8주 기간 동안 총 3명의 서로 다른 페어와 페어프로그래밍을 할 수 있도록 하고 있다. Immersive 과정 중에는 모든 sprint를 페어와 함께 진행한다. 처음 페어프로그래밍을 할 때에는 자신과 수준이 많이 차이가 나는 페어와 매칭된 것에 대해 불만족스러워하거나, 왜 하는지에 대해 의구심을 표현하는 분들도 있다. 하지만 실무에 나가게 되면 실력은 항상 천차만별이며junior를 이끌어야 하거나, senior의 가이드를 따라야 하는 상황이 분명 발생한다. 
처음엔 적응이 안되고 힘들어도서로 조율하며 맞춰 나가는 과정 자체를 배우도록 하는 것이 코드스테이츠의 교육 목표이다.

혹시라도 자신이 같이 코딩을 공부할 동료나 친구가 있다면 페어프로그래밍을 경험해 보는 것을 적극적으로 권장한다. 위에서도 언급했듯이, 인지과부하를 막고 실제 개발 현장에서의 협업을 미리 경험할 수 있기 때문이다. 물론, 처음에는 쉽지 않을 것이다. 그렇지만, 이런 경험들이 분명 더 좋은 코드를 짜고 좋은 개발자로 만들어주는 밑걸음이 될 것이다.

글로 배우는 코딩을 마치며

지금까지 글로 배우는 코딩 시리즈 총 5편을 다루었다. 코딩을 학습하는 많은 분들이 코딩학습에만 집중 하면서 그것을 학습하는 방법에 대한 고민은 깊게 하지 않는 것 같다. 코딩을 학습하는 분들이 조금 덜 돌아가고 빠르게 학습할 수 있도록 학습 하는 방법에 대한 글을 연재로 써보았다. 이 글을 보면서 단순히 글로만 읽고 끝나는 것이 아니라 실제 적용해 보면서 효과를 보았으면 좋겠다. 이게 효과가 있을까? 하고 고민 하는 분들에게 마지막으로 한 마디 하고 싶다. 지금까지의 연재 내용은 코드스테이츠의 교육철학을 밑바탕으로 하고 실제 수강생들을 교육하면서 얻은 노하우들을 정리한 것이니 믿고 따라오면 된다!






https://blog.naver.com/codestates/221247249265

블로그 이미지

벵거빠돌이

,