개발자를 위한 탈무드 설계를 잘 하기 위해 UML 책도 공부하고, 유스케이스의 규칙도 달달 외웠다. 하지만 막상 무언가를 설계하자니 막막하고, 어떤 설계가 정말 좋은 것인지 감이 오지 않는 막연함이 들 때 이 책은 큰 도움이 될 것이다. 이 책은 특정 방법론이나 언어, 플랫폼에 제한되지 않고 모든 상황에 두루 적용할 수 있는 지혜와 격언들로 가득 차 있지만, 자바의 문법이나 유닉스 명령어 등을 가르쳐주지는 않는다. 기초적인 것들은 익혔지만 실무에 적용할 "감각"이 부족한 사람들을 위한 책이다.
좀더 생산적이고 효과적, 효율적으로 일하고 싶은 사람이라면 이 책이 큰 도움이 될 것이다. 여기서 제안하는 방식을 따르다보면 아주 빠른 시간 내에 다양한 경험과 학습을 하게 되고 전체 개발 프로세스에 대한 관(觀)을 얻을 수 있다.
이 책에서는 코딩시의 가이드라인부터, 설계에 대한 격언, 프로젝트 관리에 대한 조언, 사람들과의 관계에 대한 지혜까지 개발의 전체 과정을 다룬다. 각 섹션별로 도전해 볼 것과 연습문제가 실려 있으며, 부록에는 연습문제에 대한 답이 실려있어서 독행자에게 많은 도움이 될 것이다.
목차
1. 고양이가 내 소스코드를 삼켰어요
2. 소프트웨어 엔트로피
3. 돌멩이 수프와 개구리 삶기
4. 적당히 괜찮은 소프트웨어
5. 지식 포트폴리오
6. 소통하라!
7. 중복의 해악
8. 직교성
9. 가역성
10. 예광탄
11. 프로토타입과 포스트-?
12. 도메인 언어
13. 추정하기
14. 일반 텍스트의 힘
15. 조개 놀이(Shell Games)
16. 파워 에디팅
17. 소스코드 관리
18. 디버깅
19. 텍스트 처리
20. 코드 생성기
21. 계약에 의한 설계
22. 죽은 프로그램은 거짓말을 하지 않는다
23. 단언적 프로그래밍
24. 언제 예외를 사용할까
25. 자원 사용의 균형
26. 결합도 줄이기와 데미테르 법칙
27. 메타프로그래밍
28. 시간적 결합
29. 단지 뷰일 뿐이야
30. 칠판
31. 우연에 맡기는 프로그래밍
32. 알고리즘의 속도
33. 리팩터링
34. 테스트하기 쉬운 코드
35. 사악한 마법사
36. 요구사항의 구렁텅이
37. 불가능한 퍼즐 풀기
38. 준비가 되어야만
39. 명세의 함정
40. 동그라미와 화살표
41. 실용주의 팀
42. 유비쿼터스 자동화
43. 가차 없는 테스트
44. 결국은 모두 글쓰기
45. 위대한 유산
46. 오만과 편견
면장 선거
저자 : 오쿠다 히데오 ( 역자 : 이영미 )
목차
구단주
안퐁맨
카리스마 직업
면장 선거
오쿠다 히데오
1959년 일본 기후岐阜 현에서 태어났다. 기획자, 잡지 편집자, 카피라이터, 구성작가 등으로 일하다가 1997년 《우람바나의 숲》으로 소설가로 데뷔했다. 2002년 《방해》로 제4회 오야부 하루히코상을 수상했으며, 2004년 《공중그네》로 제131회 나오키상을 수상했다.
쉽고 간결한 문체로 인간을 유머러스하게, 때로는 잔혹할 만큼 리얼하게 그려내는 그는 작품마다 독특하고도 매력적인 인물을 등장시켜 독자들을 매료시킨다.
그 외 작품으로 《공중그네》에 이은 요절복통 엽기 의사 이라부 시리즈 제2탄 《인 더 풀》과 《남쪽으로 튀어!》 《동경이야기》 《걸》 《마돈나》 《최악》 등이 있다.
인간을 성공으로 이끄는 가장 강력한 무기는
풍부한 지식이나 피나는 노력이 아니라 바로 습관이다.
왜냐하면 인간은 습관의 노예이기 때문이다.
아무도 이 강력한 폭군의 명령을 거스르지 못한다.
그러므로 다른 무엇보다도 내가 지켜야 할 첫 번째 법칙은
좋은 습관을 만들고 스스로 그 습관의 노예가 되는 것이다.
- 오그 만디노 (위대한 상인의 비밀)
일상 생활의 80%는 습관입니다.
습관은 무의식중에 우리 생활을 지배하고
그 결과에 따라 인격이 형성되며
더 나아가 운명을 결정하고 인생까지도 바꾸게 됩니다.
아무런 생각 없이 하는 행동 하나하나가 습관이 됩니다.
그리고 이것이 쌓여 인생을 성공으로도, 불행으로도 이끕니다.
오그 만디노는 스스로 좋은 습관을 만들어 실천하고
나쁜 습관을 몰아내면 재능이나 노력에 관계없이
인생을 성공으로 이끌 수 있다고 강조합니다.
소박하지만
나도 기원의 기술을 하나 안다.
자주 되뇌고, 암송하고, 잊지 않을 것.
내가 아는 유일한 기원의 기술은 이토록 아주 간단하다.
기원을 자주 되뇌고, 암송하고, 잊지 않으면, 기원이 또한
나를 잊지 않고 기억한다. 그러면 기회가 나를 스쳐지나가지 않는다.
그것은 준비된 마음을 견지하는 것. 내 몸 구석구석 기원의
연상거리들을 포진시키고 깨어 있는 동안 늘
나의 기원을 잊지 않도록 애쓰는 것.
- 유성용의《여행생활자》중에서 -
*기원(祈願)에도 '기술'이 있다는 말이 재미있습니다.
'기술'은 반복 훈련을 요구합니다. 열심히 반복하다 보면 기술이 생기고,
더 반복하면 그 기술이 최고의 경지에까지 오르게 됩니다.
자주 되뇌고, 암송하고, 잊지 않을 것! 이는 또한
꿈을 이루는 '기술'이기도 합니다.
In this article, Carlos explains how to integrate XML into your applications using ASP.
Summary:
This article details an approach to integrating XML into database-driven applications or websites using classic ASP. The goal of this approach is to encapsulate database interactions into a reusable object that will handle data retrieval, including simple hierarchical data, by leveraging ADO and XML.
The result is the beginning of a framework that allows the separation of the data, business and data-access layers. This, in turn, facilitates the implementation of distributed application architectures.
Introduction:
By now most web developers have heard of XML and of its value to the web and distributed computing. In classic ASP, Microsoft has provided the pieces for developers to take advantage of XML in different ways. This article suggests a framework for making database driven ASP applications using only XML. It achieves this goal by encapsulating data retrieval into a VBScript class.
Prerequisites:
This article requires that the reader be familiar with the following:
• VBScript Classes and the advantages of OO design,
• XML, XSL, their use in ASP, and advantages, and
• ADO and its use in ASP, particularly persistence of Recordsets and Data-Shaping.
Overview:
Many articles have been written demonstrating object-oriented (OO) and XML features available in ASP including:
1. Creating a Datagrid Class in classic ASP - 2-Dimensional Arrays by Brian O'Connell 2. A Generic GetRows VBScript Class 3. Using Classes in ASP (OOP in ASP/VBScript - Part #2) by Marcus Brinkhoff 4. Converting Hierarchical Recordsets Into XML By Richard Chisholm 5. Increasing ConvertRStoXML() Performance By David O'Neill 6. An ASP Class for XML Data Transfer by Seth Juarez
These articles adequately explain the benefits of OO design and of XML use in ASP. The data access objects even show how OO design can help manage creation and destruction of precious ADO connection objects.
However, they still either bind the interface to the data (as in the DataGrid article) or they still looped through recordsets or arrays to create their XML. It was not until Transforming ADO Recordsets to XML with XSLT that we begin to see that we can piece the tools available in the classic ASP platform to create a reusable, extensible, and flexible framework with XML as the foundation.
XDO seeks to implement such a framework and makes it possible to retrieve XML data from the database. This allows the developer to have SQL Server-like XML capabilities with any database that can be accessed with ADO via OLEDB.
Design:
Current architectures for distributed applications recommend object models that follow object factory (or engine – collection – class) design patterns. XDO emulates this design pattern for the data access tier in n-tier architectures. Business rules, captured as function libraries or as other classes, can create an instance of the XDO object and return XML that matches the rule coded within the called function or object method. The resulting XML is then transformed with XSLT to render the user interface (See figure 1).
XDO is a custom data access object that encapsulates the functionality of MSADO objects. In a “real-world” implementation, no ASP page interfaces with ADO objects directly. Instead, ASP pages create instances of the XDO object, which in turn interacts with ADO. Instances of ADO Connections and Recordsets are managed by XDO. Furthermore, Business objects can encapsulate the instantiation of XDO objects.
Examples include a Customer XML Engine or a Catalog XML Engine. This adds another layer of abstraction in the object model thereby separating business rules from the presentation (display) code.
XDO is a custom data access object that encapsulates the functionality of MSADO objects. In a “real-world” implementation, no ASP page interfaces with ADO objects directly. Instead, ASP pages create instances of the XDO object, which in turn interacts with ADO. Instances of ADO Connections and Recordsets are managed by XDO. Furthermore, Business objects can encapsulate the instantiation of XDO objects.
Examples include a Customer XML Engine or a Catalog XML Engine. This adds another layer of abstraction in the object model thereby separating business rules from the presentation (display) code.
The required components of this framework are:
• IIS 4.0+ running VBScript 5.0+,
• MSXML parser 3.0+, and
• Microsoft’s ADO 2.0+
The main object used in the architecture is the XDO object. This object is a stateless component that returns an XML document object model (DOM’s) of data in the database. These XML DOMs are stateful representations of customers, employees, orders, and products. The XML DOM represents the data describing the object.
Implementation:
The sample code provided demonstrates the use of the XDO framework. It uses the Northwind Access database for the data-source but will work for and ADO accessible database. The default.asp page displays a drop-down list of customers by default and allows the user to click buttons to view either the selected customer’s details or their 3 most recent orders.
Execution of the typical ASP page in this framework involves adding the class references to the page through #include directives, validating the request, creating an instance of the business object engine, CustomerXMLEngine, calling the appropriate business object method, transforming the data with appropriate XSL, and returning the resulting HTML interface.
The demo is made up of:
• The default.asp page, that controls which business object method is called,
• The Class.CustomerXMLEngine.asp, that houses the business model’s logic, and
• XSL stylesheets, that are used to transform the returned XML. The default.asp determines which view is displayed based on the arguments submitted.
• XDO, with serves as the
Default.asp
This design allows the same ASP page to render 3 different interfaces (Figure 2). Looking at the code, one can see that the implementation code is reduced to a few lines of code.
The default.asp page interacts with the business object using the “new” statement, returning an instance of the business object.
'/// CREATE AN INSTANCE OF THE CustomerXMLEngine
dim engCustomer : set engCustomer = new CustomerXMLEngine
Data is retrieved from the CustomerXMLEngine object by calling its methods. The example below returns a simple list of customers (ID and CompanyName) and is transformed into a drop-down list using xsl.
'/// GET A STYLE SHEET
dim objXSL
set objXSL = loadStyleSheet("xsl/customerSimpleList.xsl")
'/// CALL THE getSimpleCustomerList AND TRANSFORM TO GET DROPDOWN LIST
dim sCustomerDropDown
sCustomerDropDown = engCustomer.getSimpleCustomerList().transformNode(objXSL)
Class.CustomerXMLEngine.asp
The CustomerXMLEngine contains the rules that define what data to retrieve from the database and applying any rules (like applying a customer discount) at that time. Each method has a SQL statement that determines the resulting XML. On initialization, the business object creates a single instance of the XDO object and sets the connection string.
'INITIALIZE OBJECT
Private Sub Class_Initialize()
m_sObjectTag = "Customer"
set m_oXDO = new CXDO
m_oXDO.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& Server.MapPath(".") & "\database\NWIND.mdb;"
End Sub
This instance of the XDO object is used in each method to execute their SQL and returns an XML dataset.
Public Function getCustomerList()
dim sSQL : sSQL = "SELECT * FROM Customers"
set getCustomerList = getDOM(sSQL)
End Function
…
'GET XML DOM FOR PROVIDED SQL
Private Function getDOM(SQL)
set getDOM = m_oXDO.getXMLDOM(m_sObjectTag, SQL)
End Function
The XML is returned as a DOM object to facilitate XSL transformation.
XDO
At the heart of this framework lies the XDO object. It is designed to convert Recordsets, including hierarchical (or shaped) Recordsets, into element-based xml. I chose element-based xml to facilitate the creation of XSL templates.
An XDO instance’s lifespan begins with the creation of an ADO Connection. This Connection is available to the XDO object until the terminate method is called. The primary method is getXML, which is exposed as a public method if only the xml string is needed. A secondary public function is getXMLDOM.
This method calls getXML, loads the xml string into an XML DOM object, and returns the DOM instance.
The getXML method, when called, executes the loadData() method. This calls openConnection() and the MSDataShape provider is set if the a shaped SQL statement is provided.
Private Sub openConnection()
dim sConn : sConn = m_sConn
if (Instr(1, UCase(m_sSQL), "SHAPE") = 1) then
if (m_Connection.State = adStateOpen) then m_Connection.Close()
m_Connection.Provider = "MSDataShape"
sConn = Replace(sConn, "Provider", "Data Provider")
end if
if (m_Connection.State <> adStateOpen) then m_Connection.Open(sConn)
End Sub
Next, loadData() executes the query and the Recordset is persisted as XML using the Recordset’s Save() method. At this point, the XML format is in the Microsoft ADO-specific markup. I have written a generic XSL template that transforms shaped and non-shaped Recordsets from the Microsoft markup to element-based markup. This XSL is coded as a string, instead of an external XSL file, to aid XDO’s portability. After the transformation, the resulting XML string is returned.
Though the demo is implemented as VBScript classes, this model is easily translated to COM or other platforms. I have used VBScript classes because some of my clients and my web-host do not support custom COM development.
XDO facilitates the creation of XSL templates by rendering element-based (also called tag-based) XML. Element-based XML, unlike attribute-based XML (like that of ADO), uses a simpler XSL syntax. This makes creation or updating of XSL templates, which render HTML, much easier. Also, the XML document object model (or DOM) still allows searching and sorting of data and requires less overhead than an ADO Recordsets.
Persistence to the database is not mentioned in this model. However, there are a number of ways to address this. One might extend the XDO object to support persistence to the database. Another method might be to create a separate database persistence object to handle this function. Either way this function would also be encapsulated by the business object and not directly called by the ASP page.
This framework separates web applications into different tiers, a data tier, a business rules tier, and the presentation tier. This delegation of duties is clearly delineated with XDO, ADO, and the database making up the data tier, the CustomerXMLEngine in the business rules tier, and XML, XSL and HTML in the presentation tier.
Extending a business object is as simple as adding the new method and altering the default page to process the inputs and render the appropriate interface with XSL. Adding a new Business object, like an EmployeeXMLEngine, is easy to create with the CustomerXMLEngine as a template. The result is a flexible architecture that is easy to expand and maintain.
Further Reading:
• Creating a Datagrid Class in classic ASP - 2-Dimensional Arrays by Brian O'Connell
• A Generic GetRows VBScript Class • Using Classes in ASP (OOP in ASP/VBScript - Part #2) by Marcus Brinkhoff
• Converting Hierarchical Recordsets Into XML By Richard Chisholm
• Increasing ConvertRStoXML() Performance By David O'Neill
• An ASP Class for XML Data Transfer by Seth Juarez
“나는 우리나라가 세계에서 가장 아름다운 나라가 되기를 원한다.
가장 부강한 나라가 되기를 원하는 것은 아니다.
내가 남의 침략에 가슴이 아팠으니,
내 나라가 남을 침략하는 것을 원치 아니한다.
우리의 부는 우리 생활을 풍족히 할 만하고,
우리의 힘은 남의 침략을 막을 만하면 족하다.
오직 한없이 가지고 싶은 것은 높은 문화의 힘이다.
문화의 힘은 우리 자신을 행복하게 하고,
나아가서 남에게도 행복을 주기 때문이다.
나는 우리나라가 남의 것을 모방하는 나라가 되지 말고,
이러한 높고 새로운 문화의 근원이 되고,
목표가 되고, 모범이 되기를 원한다.
그래서 진정한 세계의 평화가
우리나라에서 우리나라로 말미암아 세계에 실현되기를 원한다“
저도 개인적으로 최근 들어 문화의 중요성을 절감하고 있습니다.
그런데 일제 치하에서 문화의 중요성을 강조한
김구 선생의 글(백범일지)을 읽으면서
일종의 전율을 느꼈습니다.
지도자의 통찰력이란 바로 이런 것인가 봅니다.
요새도 남의 과거를 족집게처럼
집어내는 점쟁이를 심심찮게 봅니다.
그들은 특히 행복한 사람보다는 불행한 사람의
과거를 집어내는데 명수지요. 점쟁이는 그렇게
팔자 사나운 이들의 마음을 사로잡은 다음 처방을
내립니다. 언제 더 나은 남편감이 나타날 거라는 둥,
언제쯤은 큰돈이 생길 거라는 둥, 점쟁이의 특징은
과거를 알아맞히는 데 있는 게 아니라 인간의
간사한 욕망을 부추겨 더욱 목마르게 하는
데 있습니다. 목마른 자를 골라잡아
소금물로 처방을 하는 식이지요.
- 박완서의《옳고도 아름다운 당신》중에서 -
* 자기의 과거를
굳이 점쟁이에게 물어볼 이유가 없습니다.
자기 과거는 자기 자신이 더 속속들이 잘 아니까요.
자기의 미래도 점쟁이에게 물어볼 것 없습니다.
앞을 헤쳐가는 것도 결국 자기 자신이니까요.
성공도 실패도 점쟁이의 몫이 아니라
자기 스스로의 몫입니다.