글쓴이 보관물: plusha

의식적인 연습 deliberate practice

안데르스 에릭슨은 “1만 시간의 재발견 (Peak)”이라는 책에서 의식적인 연습(deliberate practice)에 대해 설명하고 있습니다. 의식적인 연습은 특정 기술의 전문성을 획득하기 위한 연습으로, 단순한 연습에 비해 훨씬 목적 의식이 강하고 용의주도하며 집중적인 연습입니다. 의식적인 연습은 다음과 같은 특성들이 있습니다.

  • 다른 사람들이 이미 방법을 알고 있고, 효과적 훈련 기법이 수립되어 있는 기술을 연마하는데 사용합니다.
  • 편하게 여기는 컴포트존을 벗어난 지점에서 진행됩니다. 현재의 능력을 살짝 넘어서는 작업을 지속적으로 시도합니다.
  • 명확하고 구체적인 목표가 있고, 훈련 성과를 가시적으로 확인할 수 있습니다.
  • 신중하고 계획적입니다. 온전히 집중하고 의식적으로 행동합니다.
  • 피드백이 존재하고 그에 따라 행동을 바꿉니다.
  • 효과적인 심적 표상(mental model)을 만들어내고 심적 표상에 의존합니다.
  • 기존에 습득한 기술의 특정 부분을 집중적으로 개선합니다. 이를 위해서는 교사나 코치가 초보자에게 정확한 기본 기술을 가르쳐주는 것이 중요합니다.

실력 향상을 위해서는 올바른 연습을 충분한 기간에 걸쳐 수행해야 하며 시간을 단축시켜주는 지름길은 없습니다. 의식적인 연습에서는 지식보다 행동, 기술에 집중합니다. ‘무엇을 아는가’보다 ‘무엇을 할 수 있는가’에 초점을 맞추는거죠. 지식은 기술을 익히며 자연스럽게 얻게 됩니다. 노력의 대부분은 교사가 내준 과제를 하며 혼자 하는 연습에 들어갑니다. 만약 교사 없이 연습하려면 집중(Focus)하고 피드백(Feedback)을 받아 수정(Fix)하는 과정을 반복해야 합니다.

대학원 생활에 의식적인 연습을 적용한다면, 전공 지식 쌓기, 논문 쓰기, 프로그래밍, 특정 프로그램 다루기 등 각 전공에서 필요한 기술별로 적용해야겠죠. 연구 능력이나 창의성 향상과 같이 목표가 모호한 경우에는 구체적으로 성과를 확인할 수 있도록 다른 접근이 필요할 듯 합니다.
의식적인 연습에는 빠른 피드백이 중요한데, 현실적으로 학생들이 지도교수님께 각각의 기술들에 대해 매번 빠르게 피드백을 받기는 어렵습니다. 지도교수님께도 피드백을 받되, 스스로도 피드백을 받고 수정할 수 있는 환경을 구축하는 것이 좋습니다.
전공 지식 쌓기 같은 경우 전공 서적에 연습 문제가 있다면 풀어보며 스스로 피드백을 얻을 수 있습니다.
논문 쓰기의 경우 자신의 글과 출판된 논문의 글을 비교하며 피드백을 받을 수 있습니다. 학술지에 자주 논문을 제출하면 그만큼 자주 피드백을 받을 수 있겠죠. 단, 피드백이 기분 좋지 않은 경우도 많을겁니다.
프로그래밍의 경우에는 애자일 방법론에서 사용하는 테스트주도 개발이 유용할 듯 합니다.
전공 연구에 필요한 특정 프로그램을 다룰 경우에는 프로그램의 기능을 하나씩 이용해 필요한 작업을 실행해가며 피드백을 얻을 수 있습니다.
이렇게 피드백을 통해 하나씩 수정해가는 과정을 꾸준히 반복하다보면 어느새 실력이 향상되어 있을 것입니다. 조급해하지 맙시다. 천재도 전문가 수준에 도달하기 위해서는 많은 연습이 필요다하고 합니다.

대학원을 졸업하고 전문가가 된다고 해서 의식적인 연습이 끝나는 것은 아닙니다. 전문가는 끊임없이 연습하고 기술을 연마할 방법을 모색하는 사람입니다. 훈련을 멈추면 능력이 사라지기 시작하기 때문이죠. 많은 경우 어떤 기술이나 능력을 비범한 수준으로 발전시킨 사람들은 다른 영역에서는 오히려 뒤쳐지는 모습을 보인다고 합니다. 여러분의 교수님이 전공 외의 다른 부분에서 좀 모자라보여도 이해해주세요^^

전문가에 이르는 길

앤디 헌트는 프로그래머를 위한 “실용주의 사고와 학습”이라는 책에서 드라이퍼스 모델이라는, 기술 습득과 통달에 관한 연구를 소개하고 있습니다. 드라이퍼스 모델에 따르면 초보자에서 전문가에 이르는 과정은 다음과 같습니다.

  • 초보자
  • 고급입문자
  • 중급자
  • 숙련자
  • 전문가

초보자는 해당 기술 영역에서 사전 경험이 거의 없는 사람으로, 일하기 위해서는 정해진 규칙이 필요한 사람을 말합니다.
고급 입문자는 고정된 규칙에서 조금씩 벗어나기 시작하지만, 문제 해결에 어려움을 느끼고 아직 큰 그림은 잘 모르는 사람입니다.
중급자는 문제 영역에서 개념적 모델을 만들고 활용할 수 있습니다. 문제를 스스로 해결하고 새로운 문제를 해결할 방법을 찾아내기도 하죠. 그러나 자신을 돌아보고 잘못을 스스로 교정할 수 있는 능력은 아직 부족한 상태입니다.
숙련자는 이전에 잘못했던 일을 스스로 교정할 수 있습니다. 다른 사람의 경험으로부터 배울 수도 있습니다. 경험이 풍부하고 뭔가가 잘 안 될 때 무엇을 바꿔야 해결할 수 있는지도 압니다. 중급자보다는 전문가에 가깝습니다.
전문가는 어떤 분야든 지식과 정보의 근원으로 늘 더 나은 방법과 수단을 찾습니다. 적절한 맥락에서 써먹을 수 있을만큼 방대한 경험을 가지고 있고, 직관적으로 세부사항 중에서 중요한 것과 그렇지 않은 것을 가려낼 수 있습니다.

이 모델은 기술 및 분야별로 적용되는 모델로, 한 분야에서 전문가가 된다고 해서 다른 분야에서도 전문가가 되는 것은 아닙니다. 하지만, 한 분야에서 전문가가 되고 나면 다른 분야에서 전문성을 얻기가 훨씬 쉬워집니다.

무술 수련에서도 수, 파, 리라고 유사한 개념이 있습니다. ‘수’는 가르침을 받은대로 따라하는 단계, ‘파’는 수련의 의미와 목적을 되새겨보고 더 깊이 이해하고 흡수하는 단계입니다. ‘리’는 가르침을 넘어서고 경험을 초월하는 단계로, 더이상 학생이 아니며 새로운 방법을 창출해낼 수 있습니다.

박사과정에 진학한 학생은 전문가가 되기 위한 길에 들어섰다고 생각할 수 있습니다. 석사과정을 초보자에서 고급 입문자가 되기 위한 단계(수)라고 한다면 박사과정은 중급자를 거쳐 숙련자가 되기 위한 단계(파)라고 할 수 있겠네요. 전문가(리)가 되기 위해서는 박사 졸업후에도 몇 년의 경험이 더 필요합니다. 1만 시간의 법칙을 적용해보자면 1년에 250일씩, 하루 4시간의 의식적인 연습을 한다고 했을 때 10년의 기간이 필요합니다(물론 1만 시간이 절대적인 값은 아닙니다).

의식적인 연습은 쉽지 않지만 이를 통해 일을 잘 하게 되면 자율성이 커지고 일 자체로부터 내적인 보상도 얻을 수 있습니다. 자신이 잘 하는 일에 몰입하며 행복감을 느끼게 됩니다. 꾸준히 노력하여 자신의 전문 기술로 사회를 더 좋게 만드는데 기여하는 훌륭한 전문가가 되시길 바랍니다(자율성, 숙련, 목적).

연구실 도커 기본 이미지 pkgpl_base

탄성파탐사 연구실에서 연구할 때 많이 사용하는 라이브러리들을 설치해놓은 도커 이미지를 공개해두었습니다. 도커 허브에서 이미지를 받거나, 깃허브에서 도커 파일을 받을 수도 있지만, Docker와 GitHub를 이용한 소프트웨어 연구 환경 구축에서 설명한 연구 프로젝트 템플릿을 통해 이용하는 것을 추천합니다.

설치된 주요 라이브러리들은 다음과 같습니다.

  • 탄성파 자료 처리 관련
    • Seismic Unix
    • Madagascar
  • 수치 연산 관련
    • nvcc
    • gcc/gfortran
    • python
    • numpy
    • numba
    • mpi4py
    • mkl
  • 딥러닝 관련 (horovod 도커 이미지 사용)
    • pytorch
    • tensorflow
    • mxnet
    • horovod
  • 기타 머신러닝 관련
    • scikit-learn
    • pandas
    • jupyterlab
    • matplotlib
    • bokeh

Docker와 GitHub를 이용한 소프트웨어 연구 환경 구축

소프트웨어를 이용한 연구와 수업을 위해 도커와 깃허브를 이용한 연구 프로젝트 템플릿을 만들어서 공개했습니다. 도커를 이용하면 소프트웨어와 관련된 라이브러리를 설치하고 환경을 설정하는 과정을 쉽게 만들 수 있고, 깃과 깃허브를 이용하면 도커 설정 파일과 프로그래밍 소스 코드를 안전하게 관리할 수 있습니다. 도커 사용 경험이 없는 연구자들이 도커를 쉽게 사용할 수 있도록 프로젝트 템플릿에 도커 관련 리눅스 스크립트들을 추가하였습니다.

프로젝트 템플릿은 깃허브 계정을 만들고 Fork하면 됩니다.

사용 방법은 리눅스 컨테이너와 버전 관리 시스템을 이용한 소프트웨어 연구 환경 구축 논문이나 유튜브에서 확인할 수 있습니다.

소프트웨어 기술 발달에 따라 점점 더 많은 과학자와 공학자들이 연구를 위해 컴퓨터 소프트웨어와 프로그래밍 도구들을 사용하고 있다. 소프트웨어를 이용한 연구에서는 환경 설정, 재현성 및 소스 코드 손실과 같은 문제들이 발생할 수 있다. 이 해설에서는 리눅스 컨테이너와 버전 관리 시스템을 사용하여 이러한 문제를 방지하는 방법에 대해 조사하였다. 연구 프로젝트 단위로 클라우드 저장소를 통해 코드를 관리하고 리눅스 컨테이너에 연구 환경을 구축하면 위의 문제들을 방지하고 협동 연구를 더 쉽게 만들 수 있다. 리눅스 컨테이너 사용경험이 없는 연구자들을 위해 컨테이너 생성과 실행에 필요한 스크립트를 포함한 연구 프로젝트 템플릿 저장소를 공개하였다.

//리눅스 컨테이너와 버전 관리 시스템을 이용한 소프트웨어 연구 환경 구축 – 초록

Git과 GitHub를 이용한 소스 코드 버전 관리

대학원에서 연구를 위해 또는 수업을 위해 프로그래밍을 사용하는 경우가 있습니다. 프로그래밍 언어를 이용해 직접 프로그램을 개발할 경우 소스 코드를 관리해주는 프로그램을 버전 관리 시스템이라고 합니다. 버전 관리 시스템을 이용하면 소스 코드 변경 사항을 기록하여 필요할 경우 이전 상태로 되돌릴 수 있고, 실수로 코드를 지워도 복구가 가능합니다. 대학원생들에게 다양한 버전 관리 시스템들 중 깃(Git)을 추천합니다.

주요 Git 명령어들

Git에서 주로 사용하는 명령줄(Command line) 명령어들은 아래와 같습니다. 명령줄이 익숙하지 않은 학생들은 GUI 프로그램을 이용해도 됩니다.

  • git init: 현재 디렉토리를 git 저장소로 만들어줍니다.
  • git add <files>: 파일들(새 파일 또는 수정한 파일)의 변경 사항을 추적하겠다고 git에게 알려줍니다.
  • git commit: 앞에서 추적하기로 한 변경 사항들을 실제로 기록합니다.
  • git status: 현재 저장소 상황을 보여줍니다. 추적 중인 파일들 중 어떤 파일들이 변경되었는지 알 수 있습니다.
  • git diff: 어떤 내용들이 변경되었는지 확인합니다.
  • git log: 그동안의 commit 내역을 확인합니다.
  • git clone <remote>: 원격 저장소가 있을 경우 원격 저장소를 현재 컴퓨터에 복사합니다.
  • git pull: 원격 저장소에서 최신 변경 사항을 가지고 옵니다.
  • git push: 현재 저장소에서 commit한 변경 사항을 원격 저장소에 기록합니다.

소스 코드에 주요 변경 사항이 있을 때마다 git add, git commit 명령을 실행합니다. 위의 명령어들은 일단 변경 사항을 저장하기 위한 명령어들이고 문제가 생겼을 때 복구하기 위한 명령어들이나 branch(가지 치기) 기능과 관련된 명령어들도 여러 가지가 있습니다. 평소에는 add, commit 명령으로 소스 코드 변경 사항을 잘 기록해두고 다른 명령어들은 필요할 때 찾아서 사용하면 됩니다(한글판 Pro Git 책).

GitHub

원격 저장소가 필수는 아니지만 사용중인 컴퓨터 전체에 문제가 생겼을 경우에는 git으로도 소스 코드를 복구할 수 없기 때문에 중요한 코드라면 별도의 컴퓨터에 원격 저장소를 만들어두는 것이 좋습니다. 원격 저장소로 사용하기 좋은 클라우드 서비스들이 몇 가지 있는데 그중 깃허브(GitHub)를 가장 많이 사용합니다. GitHub를 사용하면 다른 사람과 공동으로 작업하기도 좋습니다.

GitHub에 저장소를 만들고 작업중인 컴퓨터에서 clone하면 GitHub 저장소가 자동으로 원격 저장소로 등록되기 때문에 컴퓨터에서 코드를 수정하고 add, commit한 후 push해서 GitHub 저장소를 업데이트할 수 있습니다. 이미 컴퓨터에 git 저장소가 있을 경우에는 GitHub에 새로운 저장소를 만들고 작업중인 컴퓨터에서 GitHub 저장소를 원격 저장소로 등록해주면 됩니다. 이 때 필요한 명령은 GitHub에서 새로운 저장소를 만들면 자세히 설명해줍니다.

GitHub를 이용하면 작업중인 컴퓨터와 GitHub 두 군데에 소스 코드를 백업하는 셈입니다. 여러 대의 컴퓨터에서 작업하더라도 GitHub를 통해 소스 코드를 쉽게 동기화할 수 있습니다. 프로그래밍이 본인의 연구에서 중요하다면 꼭 버전 관리 시스템을 사용합시다. git add/commit/push를 기억합시다.

GPU를 이용한 병렬 처리/전산 유체 역학 시뮬레이션 성능 향상

본 연구실에서는 파동 전파 모델링을 위해 병렬 프로그래밍을 사용하고 있습니다. 최근 GPU 성능 향상에 따라 GPU를 이용한 파동 전파 모델링과 완전 파형 역산도 진행하고 있습니다. 그동안 진행해 왔던 GPU 관련 과제들은 다음과 같습니다.

  • 2014-2019 자원개발특성화대학사업 – 산학협력 연구단 석유가스 물리탐사
  • 2015-2016 한국지질자원연구원 – GPU를 이용한 파동 전파 모델링 기술 개발, GPU를 이용한 속도 모델링 기술 개발
  • 2016 부산과학기술기획평가원 – 범용 그래픽 처리장치와 OpenACC를 이용한 병렬 컴퓨팅 성능 향상
  • 2017-2019 한국지질자원연구원 – 다중 GPU 기반 고성능 역시간 구조보정 성능 비교 연구
  • 2019-2020 국방과학연구소 – 저주파 수중음향 전달특성 및 고속화 성능 분석

병렬 프로그래밍 기술은 탄성파 탐사 분야 뿐 아니라 물리학, 기계, 조선이나 화학 공학의 전산 유체 시뮬레이션 분야에서도 중요하게 사용되는 기술입니다. 특히 GPU 계산은 CPU를 이용한 계산보다 빠르고 효율적이기 때문에 대학/연구소/기업 등에서 연산 성능 향상 및 비용 절감을 위해 수요가 점점 증가하고 있습니다. 그러나 안타깝게도 부산 지역에 GPU 프로그래밍을 하는 사람이 많지 않기 때문에 GPU 병렬 프로그래밍 도입에 어려움을 겪는 사례들이 있습니다.

올해 여름에 부산대학교 조선해양공학과 교수님으로부터 쇄빙선에 가해지는 빙하중을 시뮬레이션하는 프로그램을 GPU에서 빠르게 돌아가도록 만들어달라는 제안을 받고 방학 기간 동안 작업을 진행했습니다. 부산대에서 OpenMP와 MPI를 이용해 클러스터 컴퓨터에서 돌아가도록 개발한 프로그램을 자체적으로 GPU용으로 바꿨는데 성능이 안 나와서 본 연구실에서 GPU 프로그램의 성능을 향상시키는 작업을 수행했습니다. 그 결과 클러스터 컴퓨터에서 CPU 56 코어를 사용해 8시간 30분 정도 걸리던 벤치마킹 모델 시뮬레이션 작업이 GPU 최적화를 통해 Nvidia Tesla V100 GPU 카드 한 장을 사용했을 때 30분 정도로 단축되었습니다. 여러 장의 GPU를 사용할 수 있도록 개선하여 GPU 카드 네 장을 사용하면 10분 정도에 결과를 얻을 수 있습니다. 해당 연구는 최근 대한조선학회에 발표했습니다.

현재 대학원 수업에서 병렬 프로그래밍을 다루기는 하지만 컴퓨터 관련 학과가 아니다보니 GPU 성능 최적화에 대해 깊이 다루지는 않습니다. 평소 컴퓨터와 프로그래밍에 관심이 있고 고성능 병렬 프로그래밍에 대해 배우고 싶다면, 본 연구실에 들어와서 병렬 연산 쪽으로 연구하는 것도 좋겠네요. 병렬 프로그래밍에서 주로 다루는 언어는 Fortran/C/C++/CUDA 이니 해당 언어 사용 경험이 있다면 더 좋습니다.

책: 실용주의 프로그래머 – 앤드류 헌트, 데이비드 토머스

‘실용주의 프로그래머’는 전문 프로그래머들을 위한 조언들이 담긴 책입니다. 제가 대학원생 때 읽고 책의 조언들 중 몇 가지를 직접 실천해보면서 많은 도움을 얻었습니다. 총 70가지의 조언들이 담겨 있는데 제가 실천했던 조언들 중 몇 가지만 살펴보겠습니다.

  • 11. DRY (Don’t Repeat Yourself) – 반복하지 마라.
  • 12. 재사용하기 쉽게 만들라.
  • 21. 명령어 셸의 힘을 사용하라.

연구하면서 반복적으로 하는 작업들이 있습니다. 대학원생 때 반복적으로 하던 작업들 중 이진 파일로 된 탄성파 자료나 속도모델 등에서 trace나 profile을 추출하는 작업, 지하 영상에 미분이나 라플라시안 필터를 적용하는 작업, 깊이에 따라 속도가 선형으로 증가하는 속도모델을 만드는 작업 등이 있었습니다. 그때 그때 코드를 새로 작성하거나 예전에 사용했던 코드를 수정해서 작업했었는데 이러한 반복 작업을 없애기 위해 명령어 셸에서 옵션만 바꿔가며 쉽게 재사용할 수 있는 프로그램들을 작성했었습니다. 그리고 그런 프로그램들을 모아 gpl 라이브러리라고 이름을 붙였죠. 주로 당시 사용하던 포트란 프로그래밍 언어로 프로그램들을 작성했는데, 명령어 셸에서 사용할 수 있도록 option parser도 만들고 파일 입출력도 많이 다루면서 프로그래밍 연습을 할 수 있었습니다.

  • 22. 하나의 에디터를 잘 사용하라.

리눅스 Command line 상에서 프로그래밍을 했기 때문에 당시 사용할 수 있는 에디터로 VimEmacs가 있었습니다. 둘 중 어느 것을 사용할까 비교해보다가 결국 어디에나 설치되어 있는 Vi(Vim)를 사용하기로 했고, 각종 명령어와 plugin들을 이용해 Vim 고급 사용법을 익혔습니다.

  • 23. 언제나 소스코드 관리 시스템을 사용하라.

당시에는 Mercurial을 선택해서 사용하다가 몇 년 전부터는 Git만 사용하고 있습니다.

  • 28. 텍스트 처리 언어를 하나 익혀라.

당시 포트란과 C 언어만 사용하고 있었는데, 이 책을 읽은 후 Ruby, Perl, Python 중 프로그래머를 행복하게 하자는 철학을 내세웠던 Ruby를 선택해서 공부하고 사용했었습니다. Ruby를 배워놓았던 것이 도움이 돼서 나중에 Ruby와 Seismic Unix를 이용해 Muting/Interpolation 스크립트도 작성할 수 있었습니다. 참고로 지금은 Ruby는 사용하지 않고, 과학/공학 라이브러리가 많은 Python을 주로 사용합니다.

위의 조언들 외에도

  • 20. 지식을 일반 텍스트로 저장하라.
  • 29. 코드를 작성하는 코드를 작성하라.
  • 36. 모듈간의 결합도를 최소화하라.
  • 49. 소프트웨어를 테스트하라.
  • 61. 수작업 절차를 사용하지 말라.
  • 68. 문서가 애초부터 전체의 일부가 되게 하고, 나중에 집어넣으려고 하지 말라.

등 다양한 조언들을 실천해보면서 프로그래밍 실력을 향상시킬 수 있었습니다. 우리가 전문 프로그래머는 아니지만 주로 프로그래밍을 이용해 연구를 수행하고 있으니 프로그래밍에 대해 공부하는 것도 많은 도움이 됩니다. 단, 이것 자체가 연구는 아니니 연구하는 중에 틈틈이 연습해보는 것이 좋겠죠.

책: 소유냐 존재냐 – 에리히 프롬

우리는 자본주의 사회에 살고 있습니다. 자본주의 사회는 빚과 소비가 있어야 돌아가는 사회로, 생산자들은 곳곳에서 광고와 뉴스 등을 통해 사람들에게 필요한 또는 불필요한 재화와 서비스의 소비를 부추기고 있습니다. 자본주의 사회에서는 많이 벌어서 많이 소유하고 많이 소비하는 것이 행복한 삶이라는 것을 전제로 하고 있고, 각종 미디어의 영향에서 자유로울 수 없는 우리들은 별다른 생각 없이 위의 전제를 받아들이며 살아가는 경우가 많습니다. 하지만 이 전제는 잘못되었고 그에 따라 많은 사람들이 인간 소외로 고통을 겪고 있습니다. 인류 역사에 자본주의가 등장한 것은 얼마 되지 않았지만 우리는 자본주의에 너무 익숙해진 나머지 자본주의 생활 양식이 아닌 다른 생활 양식이 있다는 사실을 생각하지 못하고 살아갈 때가 많습니다. 책을 읽을 때의 장점 중 하나가 이렇게 평소 삶 속에서 생각하지 못하던 것들을 새롭게 깨달을 수 있다는 점입니다.

에리히 프롬은 이 책에서 많이 소유하는 것을 추구하는 삶 뿐 아니라 풍요롭게 존재하는 것을 추구하는 삶도 있다는 것을, 그러한 삶이 더 가치 있는 삶임을 일깨워줍니다. 자본주의의 소유하는 삶은 탐욕적으로 자신의 소유(재산, 명예, 권력 등)를 늘리고, 남들과 비교하여 자신이 우월하다는 데에서 행복을 발견하는 삶입니다. 반면에 존재하는 삶은 소유물에 집착하지 않는 삶, 기쁨에 차서 자신의 능력을 생산적, 능동적으로 사용하고, 사랑하고 나누며 베푸는 삶입니다. 소유하는 삶은 자신의 소유물로 자신의 가치를 매기고 소유물의 노예가 되는 삶이지만 존재하는 삶은 존재의 절대적 가치를 아는 삶입니다. 존재하는 삶이라고 해서 소유가 전혀 없는 것은 아니지만 존재하는 삶을 사는 사람은 자신의 소유물에 대해 집착하지 않고 소유로부터 자유롭습니다.

두 가지 생활 양식이 학생들의 실생활에서는 어떻게 나타날까요? 소유하는 삶에 길들여진 학생은 강의를 들을 때 잘 암기하여 좋은 성적을 거두는데 중점을 두지만, 존재하는 삶을 사는 학생은 강의 내용을 통해 새로운 생각을 하며 성장하는데 중점을 둡니다. 소유하는 삶의 학생은 책을 읽을 때 소설의 줄거리를 파악하고 철학 서적의 주요 사항을 뒤따라 암기하는데 중점을 두지만, 존재하는 삶을 사는 학생은 소설을 통해 인간의 본성을 통찰하고 철학 서적의 사상을 비판적으로 읽습니다. 소유하는 삶에서는 보다 많이 아는 것이 중요하지만, 존재하는 삶에서는 보다 깊이 아는 것이 중요합니다. 소유하는 삶에서 사랑이란 사랑의 대상을 구속하고 지배하여 소유하는 것이지만, 존재하는 삶에서의 사랑은 사랑의 대상을 배려하고 알고자 하며 소생시키고 생동감을 증대시키는 과정입니다.

우리 물리탐사 연구실이 존재하는 삶을 실천할 수 있는 공동체가 되길 바랍니다. 책 뒷부분에 가면 인간 성격 변화에 관한 거시적인 이야기가 나오지만 우리는 우선 작게 연구실에서 실천할 수 있는 부분을 생각해봅시다. 수업을 들을 때 시험 잘 보고 좋은 성적을 얻는 것도 중요하지만 수업을 통해 스스로가 성장하는데 중점을 둡시다. 연구하고 논문을 쓸 때 실적을 늘리는데 중점을 둘 것이 아니라 연구를 통해 새로운 것을 발견/발명하는 기쁨을 누리고 논문을 통해 사회에 기여한다는 생각으로 논문을 씁시다. 다른 사람과 경쟁해서 이기기 위해서가 아니라 어제의 나와 경쟁해서 더 성장하기 위해 노력합시다. 교수님 말이라고 절대적으로 받아들이지 말고 교수님도 틀릴 수 있으니 자신의 생각과 의견을 이야기합시다. 서로를 가족같이 여기고 자신이 좀 더 아는 것을 나누며 서로의 성장을 도웁시다. 연구실에서 보내는 시간을 학위를 위해 희생하는 시간이 아닌, 그 자체로 보람되고 행복한 시간으로 만들어갑시다. 연구실 생활을 통해 우리 모두의 존재가 좀 더 풍성해지길 바랍니다.

Fortran config parser

포트란 언어에서 사용할 수 있는 configuration file parser 모듈을 github에 공개했습니다.

다음과 같은 configuration 파일에서 변수들을 읽어들일 수 있는 모듈입니다. 사용법은 github에 올렸습니다.

[DEFAULTS]
path = ../include
use_abs = True

[Section 1]
nmax = 30
# comment 1
vmin = 1.0
freqs = 5.0, 10.0, 30.0, 50.0
amps = 0.0, 1.0, 1.0, 0.0
path = ../text

[Section 2]
use_abs = no
; comment 2
my file = $(Section 1:path)/file.txt