‘개발자가 보는 소프트웨어 교육의 오해와 진실, 그리고 미래’ 글에 대한 이견

개발자가 보는 소프트웨어 교육의 오해와 진실, 그리고 미래

링크한 글에 부분적으로 공감이 가기는 하지만 저는 꽤 다른 생각을 가지고 있습니다.

요약을 하면 링크의 글에서는 ‘직접적인 SW 개발을 위한 지식 습득’이 SW교육의 핵심이라고 주장하고 있습니다. 제 의견은 초중등 SW 교육에서 직접적인 SW 개발을 다루는 것은 불필요하다고 생각합니다. 덧붙이면 제가 생각하는 초중 SW 교육의 참의는 논리적인 사고나 알고리즘적 사고를 잘 가르치는 수단으로 SW가 활용되는 것이지 SW 개발에 목적이 있다고 생각하지 않습니다.

그 이유를 다음과 같습니다.

SW 개발을 위한 지식은 쉬이 변합니다
SW 개발 자체는 도메인 지식, SW 개발 방법론, 협업 도구, 프로그래밍 언어와 같은 응용의 말단 지식 (원론에서 먼)을 다수 요구하고 있으며 이러한 지식들은 10년 이상 단위로 보면 쉬이 변하는 영역입니다. 또한 SW 개발은 지식의 양적인 요구가 많거나 엔지니어링적인 요소가 많습니다. 이를 실제 현업에 종사하려면 10년 이상 걸리는 초중등 학생들이 배울 필요는 없습니다. 직접적인 SW 개발에 관심이 있는 친구들은 (글의 저자 설명과 같이) 인터넷 등 다른 수단을 통해 그때 그때 유망한 프로그래밍 언어나 방법론, 개발 도구들을 배우면 됩니다.

초중등 SW 교육이 SW 개발자를 만들기 위한 것이 아닙니다.
저자 분이 ‘모두 개발자가 될 필요는 없다’고 언급한 것 처럼 당연히 초중등 SW 교육이 SW 개발자를 만들기 위한 것이 아닙니다. 따라서 직접 결과물을 내기 위해 배워야 하는 SW 개발 지식(글에서 언급된 방법론, 협업 도구, 현업에서 쓰이는 언어) 에 시간을 들이는 것은 대다수의 초중등 학생들에게 사실 시간 낭비일 것이라고 생각합니다. 어린 학생들일 수록 가능성 많고 잠재력이 크기 때문에 (다른 말로 하면 미래에 어떤 분야에 종사하게 될지 모르기 때문에) 학생들 전체에게 좋은 영향을 줄 지식인 논리력, 알고리즘적 사고력을 키우는게 본질이 되어야 합니다. SW 통해 생각의 방법을 배우게 되면 예술, 인문, 철학, 과학, 공학 분야에 다양하게 적용될 수 있습니다.


대학 SW 교육에 대한 유감

대학 SW교육 확 바뀐다…전문인력 5천500명 양성

미국 같은 경우 SW 산업이 상당히 발달하고 인력 수요가 높다. 그래서 지금 SW 산업 발달 속도와 수요 증가로 보아 몇 년도 까지 얼마나 많은 SW 인력이 부족하다는 데이터를 바탕으로 인력 양성에 노력을 하고 있다. 다시 말해 공급이 부족하니 정책을 펼쳐 늘리는 것이다. 너무도 당연하다.

우리나라는 SW 산업이 발전하고 있지 않다. 실질적 수요가 증가하는지도 잘 모르겠다. SW 기업이 몇 개나 있는지… 거의 없는 것 같다. 기업이나 정부가 SW를 제 돈 내고 사서 쓰는 것은 보기 힘들고 유수 대기업들 조차도 여전히 인건비 기반으로 비용 지불을 하려고 한다. 이런 상태로 볼 때 지금도 앞으로도 SW 기업이 더 크지도 새로 생길 가능성도 상당히 낮은 것 같다. 앞으로도 좋아질 징조는 보이지 않는다. 다시 말해 수요 증가에 대해 의문이 든다.

또한 산업계에서 진짜 원하는 것은 전문인력인데 전문인력은 산업 발달로 길러지는 것이지 제도적으로 인위적으로 키울 수 있는 것은 아니다. 이런 정책으로 실질적 수요를 해소하기는 쉽지 않아 보인다.

다소 비관적으로 본다면, 이런 정책으로 인위적으로 많이 양성된 인력들을 흡수할 곳은 없을 것으로 보인다. 운이 좋으면 외국으로 가서라도 일을 하게 되겠지만, 많은 사람들은 배운 것을 써먹지도 못하는 자리에서 일하게 되거나 헐값에 일을 하게 될 지도 모른다.

SW 산업의 진짜 발전을 위해서는 인위적인 인력 양성보다는 (너무 당연해서 심심한 이야기지만) SW 생태계 자체에 좋은 순환이 만드는 방법이 함께 혹은 먼저 고민되어야 할 것 같다.


Oracle이 고려 중인 Java 9의 Unsafe API 제거 계획

성능이 중요한 꽤 많은 자바 프로젝트 (하둡 등 데이터 처리 프로젝트들 역시)이 Java Unsafe API에 의존하고 있다. Unsafe API는 JVM에서 공식적으로 제공하는 API가 아닌 Oracle JDK에서 내부적인 사용을 목적으로 제공하는 API이다. JNI와 다른 기술이며 콜 오버헤드 없이 직접 native 코드로 실행된기 때문에 빠르고, C 와 같이 메모리를 동적할당할 수 있으며 bounding check 없는 배열 접근 등 다소 위험하지만 성능 좋은 API를 100여가지 제공한다.

붙인 링크는 Oracle에서 JVM9 에서 Java Unsafe API 정말 제거하려는 계획과 지워질 경우 일어날 재앙에 대해서 언급한다. 아직까지는 계획일 뿐이고 계획을 직접 훑어보니 어느 정도의 대체 API도 고려하는 것 같기는 하다. 그럼에도 불구하고 그런일이 실제로 일어난다면 많은 자바 프로젝트들은 큰 변화를 겪어야 할 수 도 있다. 어쩌면 자바로 작성한 것이 의미가 없어질 정도로.. 어떤 프로젝트들은 헤비한 JNI 사용을 해야 할 것 이며 어떤 프로젝트들은 C++이나 기타 시스템 프로그래밍 언어로 이동을 해야 할지도 모르겠다.


오픈소스 홍보를 위한 사이트 정리

오픈소스의 핵심은 커뮤니티와 사용자이기 때문에 홍보를 꾸준히 그리고 잘 해야 할 필요가 있다. 개발자 커뮤니티나 오픈소스 커뮤니티 사이트에서 홍보를 많이 하는데 매 릴리즈나 주요 로드맵 공개 때 마다 꾸준히 하는 것이 효과적이다. 추후 참고하기 위해 목록을 정리 한다.

글 또는 링크 포스트를 통한 홍보 사이트

등록을 통한 홍보 사이트


해쉬 함수 구현 (hash function implementation) 링크 정리

이것도 한 3-4년전에 정리했다가 가끔 업데이트 한 것 같은데… 나름 괜찮은 링크가 몇 개 있어 공유한다. 이것도 앞으로는 이 페이지에서 업데이트를 하겠다. 오래 지나다보니 인터넷에 있는 정보라도 링크가 깨진 것들이 많아 지웠는데 아쉽다. 다행히 이 페이지는 web archive에서 찾을 수 있어 다행이다 싶다.


General

SW-based Implementations

HW-based Implementations


데이터베이스 시스템의 주제별 기초 논문들

데이터베이스 시스템 이라는 큰 주제 아래 각 세부 주제에 대한 기초 논문 목록 들이다. 한참 학교에서 공부하던 시절에 정리하고 틈틈히 업데이트 했던 것 같다. 추후에 data processing이나 column store에 대한 논문들도 공유하도록 하겠다.

데이터베이스 분야는 일반적으로 순수한 알고리즘이나 자료구조 부터 다양한 응용 문제나 이론까지 아주 광범히 하다. 말 자체는 ‘데이터베이스’라서 약간은 고리타분해 보이기도 하지만 데이터에 대해 일반화 가능한 모든 연구라고 봐도 무방할 만큼 해당 학계에서 다양한 연구를 다룬다. 최근 큰 인기를 얻고 있는 하둡이나 분산 데이터처리 역시 데이터베이스 분야에서 활발히 다루어지고 있다. 마이닝의 많은 연구들 또한 이 분야에서 다루어진다. 제목에서 언급한 ‘데이터베이스 시스템’이라고 하면 일반적으로 시스템 구현기술과 이론에 해당되는 내용을 말한다.

개인적으로 해당 분야나 문제를 접할 때 그 문제에 대한 가장 초기 논문들은 꼭 읽어보려고 노력한다. 그 이유는 그 논문들이 그 문제에 대해 가장 깊은 통찰력과 고민들을 많이 담고 있기 때문이며 후대의 논문들 일수록 초기 논문들이 한 고민이나 통찰은 기본적인 전제로 사용되고 문제 풀이 아이디어 위주로 기술되기 때문이다. 그래서 아래 리스트는 각 분야의 초기 논문들 및 전체를 정리하는 논문들 위주로 리스팅이 되어 있다.

주제별로 중요한 논문을 다 담긴 것은 아니다. 주로 내가 관심 있었던 것들 위주이다. 또한 See Also에는 대학들의 좋은 커리큘럼이나 읽어볼만한 주제별 논문에 대해 정리한 리스트의 링크를 담고 있다. 그리고 그 동안은 개인적인 위키에 업데이트를 했었는데 앞으로는 이곳에서 업데이트를 하도록 하겠다.


History

  • M. Stonebraker and J. M. Hellerstein, “What Goes Around, Comes Around,” in Readings in Database Systems, 2005, pp. 2-41.
  • J. M. Hellerstein and M. Stonebraker, “Anatomy of a Database System,” in Readings in Database Systems, 2005, pp. 42-95.
  • Thomas Haigh, Fifty Years of DatabasesACM SIGMOD Blog, 2012.

Architecture

  • M. M. ASTRAHAN et al., System R: relational approach to database management, ACM TODS, 1976.
  • Donald D. Chamberlin et al., A History and Evaluation of System R, Communications of the ACM, 1981.
  • Michael Stonebraker et al., The Design and Implementation of Ingres, ACM TODS, 1976.
  • Joseph M. Hellerstein, Michael Stonebraker, and James Hamilton, Architecture of a Database System, Foundations and Trends in Databases, 2007.

Query Processing

Access Method

  • P. Griffiths Selinger et al., Access Path Selection in a Relational Database Management System, ACM SIGMOD, 1979.
  • Jim Gray et al., The Five-Minute Rule Ten Years Later, and Other Computer Storage Rules of Thumb, ACM SIGMOD Record, 1997.

Transaction Management

Logging

  • C. Mohan et al., ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-ahead Logging, ACM TODS, 1987.
  • C. Mohan, Repeating History Beyond ARIES, VLDB Conf, 1999.
  • Russel Sears et al,, Segment-Based Recovery: Write-ahead logging revisited, PVLDB, 2009.
  • Philip L. Lehman et al., Efficient Locking for Concurrent Operations on B-Trees, ACM TODS, 1981.

Concurrency Control

  • Jim Gray et al., Granularity of Locks and Degrees of Consistency in a Shared Data Base, Readings in database systems, 1976.
  • Concurrency Control in Database Systems, ACM Computing Survey, 1981.
  • H. T. Kung, On optimistic methods for concurrency control, ACM TODS, 1981.
  • Rakesh Agrawal et al., Concurrency Control Performance Modeling: Alternatives and Implications, ACM TODS, 1987.
  • C. Mohan et al., Transaction Management in the R* Distributed Database Management System, ACM TODS, 1986.
    • Two Phase Commit

Data Warehouse

  • Surajit Chaudhuri and Umeshwar Dayal., An Overview of Data Warehousing and OLAP Technology, ACM SIGMOD Record, 1997.
  • Patrick O’Neil and Dallan Quass, Improved Query Performance with Variant Indexes, ACM SIGMOD, 1997.
  • Jim Gray et al., Data Cube: A Relational Aggregation Operator Generalizing Group-by, Cross-Tab, and Sub Totals, Data Mining and Knowledge Discovery, 1997.
  • Yihong Zhao et al., An Array-Based Algorithm for Simultaneous Multidimensional Aggregates, ACM SIGMOD, 1997.
  • C. Mohan and Inderpal Narang, Algorithms for creating indexes for very large tables without quiescing updates, ACM SIGMOD, 1992.

See Also


글쓰기 자동 공유 해제

가만 보니 워드프레스에 글을 쓰다말아 Draft로 표시된 글만 50여개이다. 초반에 글을 잘 쓰다가 다듬는 중에 나 스스로도 만족 못해서 완성을 못한 글들이 50여개 인데… 내 성격을 보여주는 단면인 것 같아서 씁쓸하기도 하다. 글 쓰긴 뿐만 아니라 다른 것들에서도 눈만 높은데 반해 내 실력이 막상 따라주지 못해 만족하지 못해 내놓지 못한 일들이 많다. 사실 Tajo 같은 경우도 어쩌다 보니 공유해달라는 요청을 받아 공유했다가 여기까지 오게된 케이스 인데 그 당시에도 부끄러움에 공유를 망설였던 기억이 있다.

그런데 글을 꾸준히 쓰고 싶은 의욕은 항상 있어왔다. 혼자 정리한 내용도 꽤 많고 지금도 꾸준히 뭔가를 배우거나 개발을 하는 중이라 공유하고 싶은 것도 많다. 순간순간 느끼는 교훈이나 배운 것들은 나중에 내가 다시 보기 위해 기록하고 싶다. 일단은 그 부담을 줄여보고자 기본적으로 트위터나 페이스북을 통해 공유되는 기능을 꺼보았다. 아무래도 SNS를 통해 지인들에게 공유되는 것 보다는 필요에 따라 검색으로 들어오는 분들만 본다면 부담이 덜할 것 같다는 생각이다.

그럼에도 불구하고 잘 모르겠다. 꾸준히 기록해 나갈 수 있을지는.. 한번 노력해볼란다.


Follow

Get every new post delivered to your Inbox.