개발자로서의 삶(?)

questionman의 이미지

안녕하세요? 저는 직업 개발자가 아닙니다.

저는 1999년부터 2004년까지 firewall 개발을 직업으로 하였습니다.
그후 정보보호 컨설팅과 기업에서의 정보보호 담당자로서 직장 생활을 하고 있습니다.

2004년 직업 개발자를 그만 둔 이유가 있기는 한데... 컨설팅으로 전향하며 생각했던 것이 언젠가는 다시 개발자로 돌아간다는 것이었습니다.
그 의미가 직업으로서의 개발자가 아닌... opensource 그룹에 참여해 개인적인 시간을 투자해 성취감을 느끼며 살자라는 의미였습니다.

이제 기업에서도 사회에서도 어느정도 자리를 잡아, 저녁 시간을 자유롭게 사용할 수 있는 시점이 되니, 잊고 있었던 개발자로서의 삶이 생각나 최근 다시 C 책을 펼쳤습니다.

12년이란 시간이 정말 무섭더군요.
내가 개발을 했었던 게 맞나... 개발을 할 수 있을까부터...
걱정, 좌절 등 vi 창을 열어놓고, 한숨만 쉬기를 수개월째인거 같습니다.

12년이란 gap이 있는 이 시점에...
opensource 그룹 참여라는 제 꿈을 실현시키기 위해...제가 감을 살리기 위해 어떻게 해야 하고... 어떤 opensource 그룹에 참여해 차근차근 실력을 쌓아 가는 게 좋을지에 대한 답을 찾기가 너무 어렵네요.

혹시, 제게 조언해 주실 분이나 해주고 싶은 얘기 있으면 부탁 좀 드리겠습니다.

감사해요.

ymir의 이미지

github 나 sourceforge 같은 데서, 어떤식으로 협업이 일어나는지 살펴보시고...
관심가는 프로젝트를 하나 선정해서 포크한 이후에 원하는 기능을 하나씩 추가해 보시죠.
작고 가벼운 라이브러리, 게임, 메뉴/도움말의 번역 지원 같은 것도 괜찮을 것 같구요.
물론 형상 관리, 이슈 트래커와 같은 것들에도 익숙해져야 하겠구요.

처음부터 프로젝트의 코어를 건드리거나, 크리티컬한 문제를 발견할 수 있을 정도로 파고들기는 어려운 데다..
애초에 스터디 그룹이 아니기 때문에, 거기에 단순히 참여했다고 해서 실력이 늘어날 수 있는 것도 아니고..
이렇게 작은 것부터 그 생태계를 익히고, 이렇게 몇 번 가볍게 contribution 을 시도하다 보면..
하고 싶은 것, 잘 할 수 있는 것들을 발견할 수 있지 않을까 싶네요.

어쨌든 이렇게 협업 방식을 익히고, 조금씩 사람들과 교류하면서 천천히 관심 분야를 찾다 보면..
언젠가는 뭔가 재미있는 것들을 발견하실 수 있지 않을까 생각됩니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

hernian의 이미지

저는 현재 개발자로 살고 있습니다.

저또한 Linux를 너무 좋아하여 opensource에 기여할 방법이 없을까 찾아봤지요

옛날에는 sourceforge가 가장 큰 site였다면 지금은 대부분 github를 쓰는거 같더라고요

저도 퇴근 후의 삶이 생기면 좀더 기여를 해보고 싶네요

아무튼 화이팅~

세벌의 이미지

코딩이 전부라는 고정관념을 버리면 됩니다. 오픈소스 관련하여 유용한 원문을 한국어로 번역한다거나, 에러보고를 한다거나...
어떤 오픈소스 그룹에 참여하냐면... questionman 님께서 관심있는 분야에 참여하시면 됩니다. 오픈소스 범위가 매우 넓죠?

andysheep의 이미지

@questionman

저도 요즘에 프로그래밍을 다시 시작해서 비슷한 처지군요. 그냥 삽질하긴 싫어서 어떻게 하면
뛰어난 프로그램 만들 수 있을까 학습 방법을 찾다 보니 역시 프로그래밍이란 행위가 공학이란
것이었습니다. 시간과 에너지 쏟으면 얻어지는 숙련 기술과 공학과는 분명한 차이가 있습니다.

열정을 가지고 열심히 프로그래밍 하고, 남들이 짜놓은 소스 코드 분석하는 방법은 비효율적이더군요.

유명한 알고리듬 책 두서너권 준비하고, 언어는 주 교재로 선택한 책에서 쓰는 것을 이용해
꾸준히 프로그래밍 하고, 기본 데이타 구조랑 여러 알고리듬, 프로그램 설계하고 분석하는 방법
익히세요. 문제 풀이 위주 알고리듬 책은 피하세요.

Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart

글쇠판: 세벌 최종식, 콜맥 (Colemak)

questionman의 이미지

많은 조언들 진심으로 감사 드립니다.

말씀해 주신 내용들을 종합해 보니, 시간 낭비 했다고 볼 순 없겠지만... 뻘찟하고 앉아 있었다는 생각이 드네요 ㅠㅠ

현재 주 교재로 보고 있는 책은 윤성우 님께서 쓰신 난 정말 "C Programming 을 공부한 적이 없다고요"와 역시 윤성우 님께서 쓰신 "열혈 자료구조"를 참조하고 있으며, source는 구글 엔지니어들이 개발한 skipfish를 분석 중에 있었습니다.

책을 보고 있으면, 맨날 책만 보고 있는 것 같아 분석하기 적절한 code를 찾은 게 skipfish인데, 이도 쉽지 않은 게 사실입니다.
그래서 vi 창을 열어놓고 매일같이 좌절만 하고 있답니다. ㅠㅠ

어떻게 생각해 보면, 너무 급하게 생각해 기초를 다시 잡고 가는 과정을 건너 뛴 거 같기도 하고... 또 다르게 생각하면, 남이 만든 code를 보다 보면 생각이 날 거 같기도 해서 무작성 code 분석을 들어간 것이었습니다.

12년 전 일은 잊고, 초보자 맘으로 시작하는게... 맘의 여유를 갖고 시작하는게... 기초부터 다시 밟고 시작하는게 맞는 거 같기도 하네요.

혹시 제가 보고 있는 책 외에 더 추천해 주실만한 책은 없으신지요?

그리고... 몇 권의 책을 완독하고 본격적으로 뛰어드는 게 맞을까요?

세상만사 어떤 일에도 정해진 답이 없는 것은 잘 알지만... 답답한 맘에 멍청한 질문을 다시 드리네요 ㅠㅠ

익명 사용자의 이미지

필요성에 의해 하시는 것이 좋습니다.
가량... 예를 들자면 리눅스용 한글 타자 프로그램이 필요하다고 합시다.
기존에 있는 것이 있는지 검색해보고, 있다면 그 프로젝트에 이슈(버그 트래커)가 있을 텐데...
그걸 해결하는 방향으로 움직이시면 되고,

그런 프로젝트가 없다면 신규 프로젝트를 하시면 되겠죠.

그리고, 언어는 그 프로젝트가 C언어를 사용하고 있다면 C언어 문법은 알고 있어야 합니다.
C언어 문법을 모르시면 C 문법책을 보시면 되고,
그 다음 이슈를 해결해가거나 신규 기능을 추가하면서 모르시는 부분은
관련 매뉴얼이나 문서를 인터넷에서 구해서 보시거나 그걸 보고도 이해가 되지 않으면 관련 책을 보시면 됩니다.

처음부터 자료구조, 파서, 통신, 그래픽 등의 모든 정보를 익힐 필요가 없습니다.
그런 걸 모두 공부하려고 하면 5년 ~ 10년 걸리고 시간이 흐르면서 또 까먹습니다.
필요할 때마다 그때 그때 매뉴얼이나 문서를 보시는 방법으로 하세요.

그리고 바로 써먹을 수 있는 실무적인 부분은 책에 나오지도 않습니다.
그런 건 해당 프로젝트를 하면서 노하우가 쌓이는 겁니다. 책에 안 나옵니다.
그리고 자료구조는 책을 굳이 볼 필요가 없습니다.
자료구조 책에 나오는 모든 것이 이미 벌써 라이브러리에 구현되어 있어서
자료구조를 직접 만들 필요도 없고 각각의 자료구조에 대하여 장단점 정도만 알고 있으면 됩니다.
예를 들자면 glib 라이브러리 매뉴얼을 보는 것으로도 충분합니다.

제일 중요한 것은,
나는 무엇을 필요로 하는가. 무엇을 만들까...
그 뭔가가 이미 있는가. 그 뭔가를 개선하려면 어떻게 해야 하는가.
입니다.

andysheep의 이미지


알고리듬 책은 어느 것을 보나 어렵습니다.

수학적으로 알고리듬 성능 분석하는 건 건너뛰어도 될 듯 하고요. 알고리듬 공부하면서 시험 데이타를 여러 알고리듬으로 돌려보면 금방 감을 잡을 수 있어요. 일주일에 알고리듬 하나씩 이해하고 구현하는 목표가 좋을 겁니다. 간단한 stack부터 시작해서 여러 자료 구조 짬뽕한 Hash table 이해까지 몇개월. 깊이 들어가면 몇년 그냥 알고리듬만 파다 시간 보낼 확률이 커요.

The Practice of Programming, Brian Kernighan, Rob Pike, 1999, 272쪽
한글판 나와 있어요.

최근에 리누스 토발즈가 쓴 글에서 참고 도서로 인용한 걸 보고 구했는데 Brian Kernighan이 C언어 공동 창시자로 전설적인 인물입니다. 알고리듬은 2장에 50쪽 분량으로 설명해 놓고 있는데, 많이 쓰는 알고리듬 대여섯개 있습니다.Searching, Sorting, Arrays, Lists, Trees, Hash Tables. 연습 문제는 어렵습니다.

Data Structures and Algorithms Made Easy, Narasimaha Karumanchi, 432쪽
한글판 나와 있다고 들었습니다. 일반 알고리듬 책은 한 알고리듬 설명 후 연습 문제들만 주고 읽는이가 스스로 문제를 풀어야 하는데, 이 책은 알고리듬에 관한 문제마다 답이 있어요. 프로그래머 면접 준비하는 이들에게 수험서로 유명하더군요. 예제 코드는 C언어 입니다.

Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart

글쇠판: 세벌 최종식, 콜맥 (Colemak)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.