소프트웨어 설계가 완벽할 수 없는 다섯 가지 이유

inforide의 이미지

최근에 소프트웨어 공정분리 즉, 설계와 개발의 분리를 통해
발주가 일어나는 것을 보고 공정분리가 가능한가에 대해서 고민하였습니다.

그러면서 "그럼 소프트웨어 설계가 완벽할 수 있는가?" 에 대한 물음이 꼬리를 물고 일더군요.

소프트웨어 설계가 완벽할 수 없는 이유를 나름대로 정리하여 봤습니다.

http://swarchi.tistory.com/12

Forums: 
semmal의 이미지

소프트웨어 설계 뿐만 아니라 어떤분야의 학문/기술도 완벽한 건 있을 수 없는 것 아닌가요
완벽하지 않다고 폄하하는 것 보다는 좋은 사용 방법을 배우고자 하는게 더 옳을듯 합니다
프로그래밍 또는 코딩은 그저 한단어로 설명할수있는 간단한 의미가 아니고 분석이나 설계도 마찬가지지요
그리고 이짓을 하면 할수록 느끼는 것은 영화제작이나 건축과 비교하는 건 비프로그래머에게 오해를 불러일으킬뿐 이해시키는데 별 도움이 안된다는 겁니다
건축은 건축이고 프로그래밍은 프로그래밍이죠
건축처럼 코딩하면 망합니다 ㅎ
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

익명 사용자의 이미지

어디에 폄하하는 내용이 나오나요?

jeongheumjo의 이미지

좋은 글 잘 보았습니다.

혹시 소프트웨어에서의 디자인 패턴의 발전과정과 건축기술의 발전과정에 대해서는 글감이 더 없으신가요? 제가 개인적으로 그 부분에관해 궁금증이 좀 있거든요..
이 글에서도 건축과 소프트웨어를 비교하셔서 무척 반갑게 읽었습니다. 그런데 더 자세한 내용이 없어서 조금 아쉽습니다.

제가 이 부분을 궁금해 하는 건 디자인 패턴 책을 보다보니까 소프트웨어의 디자인 패턴이 실상 건축에서 출발한 것이라는 얘기를 얼핏 읽고나서 부터입니다.
소프트웨어에서의 디자인패턴은 그 목적 중에 하나도 변경에 유연한 설계를 달성하려는 것인데 그러고 보니 건축(뿐만아니라 토목이나 도시설계 분야까지..)도 마찬가지 요구사항을 가지고 있더라구요...

뜬금없는 얘기겠지만 이번 장마비에 서울이 물바다가 되는 현상을 보고는 영국의 하수도 시스템에 관한 티비프로가 생각이 나더라구요. 서울의 하수도도 변경에 유연하게 설계했더라면 이런 업그레이드 요구사항이 발생했을 때 꼭 필요한 최소한의 개선 공사만으로 하수도 시스템을 업그레이드 할 수 있을텐데요..

inforide의 이미지

저는 건축공학을 전공하였는 데요.
과문한 탓이겠습니다만, 그리고 학교때 공부도 하지 않았구요.. ㅎㅎ

건축의 패턴이라는 말을 디자인 패턴책에서 처음 들었습니다.
건축에서는 양식이라던가... 사조라던가 하는 말을 썼던 것으로 기억됩니다.

건축사 책을 보면 그게 BC4000년인가부터 건축의 기원을 바라보던데
그로부터 6천년의 지혜가 담긴 것이 현재 건축물의 모습입니다.

그에 비하면 소프트웨어의 역사는 조족지혈이지요.

디자인 패턴이란게 나오고 그 후에 과다한 패턴의 적용을 경계했던 안티 패턴이란 게 나오고 현재에도 많은 흐름이 있습니다.

소프트웨어도 이러한 많은 흐름들이 더욱 더 서로 경쟁하면서 궁극의 모습을 갖고 수많은 지혜를 담을 때, 보다 유연한 설계나 개발이 가능하지 않을까 싶습니다.

jeongheumjo의 이미지

왜 이렇게 제가 쓸데없는 글을 많이 써가지고 자삭을 자꾸 할까요..
죄송합니다.

oosap의 이미지

제가 원래 답글을 달았던 jeongheumjo 입니다. 이름으로 글을 계속 쓰는게 싫어서 아이디를 새로 만들었습니다. 다중인격이기도 하구요 ㅎㅎ 아이디 새로 만들고는 예전 아이디는 안씁니다.

제 글에 답글하신것을 보고는 자료를 찾을 수가 없었는데 갑자기 기억이 나서 지금 답글을 합니다.
제가 건축에서 디자인패턴이 비롯되었다고 얘기한 것은 헤드퍼스트 디자인패턴이라는 책을 읽었던 기억 때문이었습니다. 그 책 13장에서 디자인패턴의 유래에 대해 설명하면서 책 하나를 보여줬던 것 같습니다.

그 책이 바로 이것이구요.. - A Pattern Language 라는 책입니다.
http://en.wikipedia.org/wiki/A_Pattern_Language

이 분이 저자입니다. 건축가세요.
http://en.wikipedia.org/wiki/Christopher_Alexander

이것은 소프트웨어의 디자인 패턴의 역사에 대한 설명을 한 웹페이지 입니다.
http://www.c2.com/cgi/wiki?HistoryOfPatterns

디자인 패턴의 역사를 보면 GoF 아저씨들 설명을 하기 전에 Ward 와 Kent 라는 분들이 소프트웨어 설계에 알렉산더의 패턴 랭귀지를 적용한 사례가 가장 먼저 이야기 되고 있습니다.
1987년 얘기네요... 이게 소프트웨어의 디자인 패턴의 시작인 것 같아요.
그리고 알렉산더 아저씨에관한 위키피디아와 그 분의 책에 관한 내용을 보면 그의 패턴랭귀지라는 개념이 모든 공학에 설계 방법론의 핵심적인 아이디어를 제공했다라고 하는 것 같습니다.

제가 영어가 짧아서 이정도로만 읽었습니다. 한글로는 헤드퍼스트 디자인패턴에 짧게 설명이 있는 것 같습니다.

그러니까 말씀하신 사조와는 좀 거리가 있는 얘기이죠? 사조는 아주 오래된 얘기이고, 알렉산더 아저씨는 아직도 살아계시네요. 은퇴했지만 아직도 active 하다고 합니다.

컨텍스트 : 패턴이 적용되는 상황. 반복적으로 일어날 수 있어야 한다.
 
문제 : 컨텍스트 내에서 이루고자 하는 목적. 
          컨텍스트 내에서 생길 수 있는 제약조건도 문제에 포함된다.
 
해결책 : 누구든지 적용해서 일련의 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인

이와 같은 디자인 패턴의 개념을 처음 소개한 책이 패턴 언어라는 책이고 그 저자가 건축가인 알렉산더이고 그래서 제가 건축과 관련된 설명이라서 반가웠던 것 같습니다.

너무 길게 썼습니다. 죄송합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

Gh0st_Sp1der의 이미지

GooooooooooooooooooooD!

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.