•  


[開發者 아빠의 敎育實驗](11) 깔끔하게 코드 整理하기 : 동아사이언스

동아사이언스

[開發者 아빠의 敎育實驗](11) 깔끔하게 코드 整理하기

統合檢索

[開發者 아빠의 敎育實驗](11) 깔끔하게 코드 整理하기

소프트웨어 開發者는 大槪 게으르다. 적어도 컴퓨터 앞을 잘 떠나지 않는다는 面에서 그렇다. 冊床 한便에 수북이 쌓인 飮料水 캔이나 間食 包裝紙 따위는 開發者들이 모여있는 空間에서 쉽게 目擊할 수 있는 光景이다. 움직이지 않는 만큼 慢性的인 運動 不足에 시달린다. 開發者는 돼지나 멸치 中 하나라고 自嘲的인 말을 하는 理由다.

 

개발자 시절의 마크 저커버그. 2005년의 모습이다. 책상 위가 지저분한 것을 보면 저 시절 개발을 했던 것이 분명하다. 삐딱하게 앉은 자세마저 이 확신에 힘을 실어준다.
開發者 時節의 마크 저커버그. 2005年의 모습이다. 冊床 위가 지저분한 것을 보면 저 時節 開發을 했던 것이 分明하다. 삐딱하게 앉은 姿勢마저 이 確信에 힘을 실어준다.

그뿐만이 아니다. 字板 두드리는 것마저 대단히 귀찮아한다. 한 打라도 적게 치기 위해 갖가지 매크로를 設定하고 各種 플러그인들을 찾아 헤맨다. 이쯤 되면 컴퓨터로 밥 벌어먹는 사람이 맞나라는 疑問이 생길 地境이다.

 

그렇다고 無酌定 게으르다고만 볼 수는 없다. 開發者들은 큰 意味 없는 反復 作業을 極度로 警戒하는 習性을 가졌다. 코딩할 때 키보드와 마우스를 오가는 것조차 浪費라고 생각한다. 키보드만으로 모든 編輯이 可能한 ‘VI 에디터’나 ‘Emacs’ 等을 利用하는 開發者가 흔한 理由다. 甚至於 여기에 性이 차지 않으면 必要한 道具를 새로 만들어 버리기까지 한다. 어느 것이 本業인지 헷갈릴 程度다.

 

프로그램을 作成할 때도 마찬가지다. 같은 役割을 하는 코드가 여기 저기 흩어져 있는 것을 가만히 두고 보지 못한다. 於此彼 여기에 必要한 것은 손가락 몇 番 더 움직이는 程度밖에 없는데도 말이다. 代身 重複된 코드를 묶어 한 個의 函數로 만들어 버린다. 共通으로 使用할 수 있는 코드를 만드는 것은 이것저것 생각할 것이 豫想밖으로 많은데, 이런 精神的 勞動의 수고로움을 마다하지 않는 것이다.

 

開發者들에게 神經症的 强迫이 있어 이런 것은 決코 아니다. 머릿속에서 그려낼 수 있는 論理 흐름의 量은 아무래도 制限이 있을 수밖에 없다. 사람이기 때문이다. 텍스트 空間의 政敵인 코드를 보며 時間 空間의 動的 實行 狀態를 豫測하려면 더욱 그러하다. 프로그램의 複雜度가 올라갈수록 增加하는 버그의 危險을 回避할 方法으로 構造的 프로그래밍 方法論이 提起된 理由다. 여기에 核心을 차지하고 있는 것이 바로 函數다. 오름次順 整列의 複雜한 論理 展開를 函數 呼出 한 줄로 머릿속에서 簡單히 消去해 버릴 수 있기 때문이다.

 

알고리즘 계의 최종 보스로 평가받는 에츠허르 데이크스트라. “GOTO 문의 해로움”(Go To Statement Considered Harmful)이란 다분히 논쟁적인 제목의 논문을 발표하며 구조적 프로그래밍 방법론을 주장했다.
알고리즘 系의 最終 보스로 評價받는 에츠虛르 데이크스트라. “GOTO 問議 해로움”(Go To Statement Considered Harmful)이란 多分히 論爭的인 題目의 論文을 發表하며 構造的 프로그래밍 方法論을 主張했다.

 

 

마침 判斷門 敎育을 進行하며 아이는 지나치게 複雜해진 코드를 어려워했다. 狀況만 봐서는 函數를 가르치기 딱 좋은 때라 생각했다. 複雜한 코드가 瞬息間에 簡單해지는 奇跡을 經驗하는 것만으로 函數 使用의 必要性을 몸소 깨달을 수 있을 것이다. 이제 必要한 것은 9살 아이가 물 흘러가듯 槪念을 理解할 수 있도록 實習 課題를 配置하는 것이다.

 

먼저 實習 課題의 內容은 그림 그리기로 構成했다. 變數와 判斷을 進行하며 지나치게 槪念的인 方向으로 치우쳤다는 反省에서 出發했다. 아이의 눈에서 지루함을 느꼈다. 暫時 쉬어가는 時間이 必要하다 생각했다. 아무래도 9살 아이에겐 卽刻的이고 視覺的인 反應으로 動作을 理解하는 게 더 어울릴 것이다. 더구나 엔트리의 函數 블록은 結果 값 返還 機能을 提供하지 않는다. “f(x)=ax+b”와 같은 數學 函數의 役割을 期待할 수 없다는 말이다. 오로지 函數 안에서 動作 制御 程度가 可能한데, 그렇다면 그림 그리기야말로 函數 敎育에 제格이라 判斷했다.

 

다음으로 코드 묶음으로서 函數의 意味가 段階的으로 傳達될 수 있도록 構成했다. 同一하게 四角形을 그리지만 서로 다른 方式을 利用하여 具現하도록 했다. 처음에는 順次 遂行이 이뤄지도록 하고, 다음에는 信號 보내기와 받기를 利用해 코드 묶음이 抽出되는 點을 보여주며, 마지막으로 信號를 函數로 代替하는 것으로 段階를 엮었다.

 

코드 묶음이 함수로 변환되는 과정을 단계적으로 전달했다. 위 세 코드는 모두 동일하게 사각형을 그리는데, 신호와 함수를 이용해 코드 묶음이 추출될 수 있음을 보여주려 했다
코드 묶음이 函數로 變換되는 過程을 段階的으로 傳達했다. 위 세 코드는 모두 同一하게 四角形을 그리는데, 信號와 函數를 利用해 코드 묶음이 抽出될 수 있음을 보여주려 했다

敎育 두 時間 동안 아이는 큰 어려움 없이 코드 묶음으로서 函數의 意味를 把握했다. 勿論 角度 等에 對해서는 別途의 說明이 必要했다. 아직 學校에서 배우지 않은 것이기 때문이다. 0度에서 180度까지 角度를 바꿔가며 實行해 보라고 했다. 直觀的으로 角度를 익힐 수 있을 것이라 判斷했다. 이내 곧 아이는 별이 그려졌다며 神奇해 했다.

 

아이가 우연하게 별 모양을 만들었다(왼쪽). 실습으로 만든 간단한 그림판으로 ‘김’을 그렸다(오른쪽)
아이가 우연하게 별 模樣을 만들었다(왼쪽). 實習으로 만든 簡單한 그림板으로 ‘金’을 그렸다(오른쪽)

自身이 만든 그림板으로 이것저것 그려보던 아이가 문득 물었다. 信號만 利用해도 되는데 굳이 函數를 使用하는 理由를 모르겠다는 것이다. 엔트리에서 函數의 內容을 보거나 고치려면 函數 블록을 더블클릭해야 하는데, 信號를 利用하는 게 더 便하다는 것이다. 信號 보내기로는 角度와 邊 길이를 傳達할 수 없지 않냐고 答했다. 아이는 지지 않고 答辯의 꼬리를 물었다. 變數 만들고 거기로 傳達하면 되는 것 아니냐며 투덜거렸다. 제법 날카로운 質問이나, 9살 아이에게 딱히 說明할 方法을 찾기 어려웠다. 높은 凝集도와 낮은 結合도(High Cohesion, Low Coupling) 原則이 適用된, 再使用性 높은 코드를 만들기위해 全域 變數의 使用은 抑制되어야 한다고 9살 아이에게 말할 수는 없다. 보기 좋은 떡이 먹기도 좋다는 俗談으로 얼버무릴 수밖에.

 

도움資料

1) 12~13日 次 敎案을 共有합니다.

https://drive.google.com/drive/folders/1Jq8TgernewDdRkHsoJUCskZbhFNhl-fV

2) 아이와 만드는 코드도 共有합니다. 엔트리 메인畵面의 共有하기에서 “chloe10”을 檢索하세요.

 

※筆者紹介

김기산  企業에서 IT 디바이스 소프트웨어 開發者로 일하고 있다. 大學에서 電子工學을 專攻하고 20年 가까이 리눅스 開發者로 지내다가 뜻밖의 契機로 育兒休職을 냈다. 지난해 한層 强化된 '아빠의 달' 制度의 受惠者로, 9살 아이와 스킨십을 늘리며 福祉 擴大의 肯定的인 面을 몸소 깨닫고 있다.

 

 

關聯 태그 뉴스

이 記事가 괜찮으셨나요? 메일로 더 많은 記事를 받아보세요!

댓글 0

###
    科學技術과 關聯된 分野에서 紹介할 만한 재미있는 이야기, 告發 素材 等이 있으면 躊躇하지 마시고, 알려주세요. 提報하기
    - "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
    - "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
    - 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
    - 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
    Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
     한국   대만   중국   일본