Is PHP A Bad Programming Langauge? (Part 1)

Introduction

PHP는 매우 널리 퍼져있는 프로그래밍 언어다. TPC Index에서 10% 가량의 비율로 4위를 차지하고 있으며, Apache Module Report에서는 apache web server들의 50%에서 mod_php를 사용하고 있다는 점이 그 사실을 증명해준다.

반대로, PHP를 미워하거나 싫어하는 사람들도 많다. 회사에서도 PHP 대신 다른 언어를 쓰자는 의견도 자주 언급된다. 이러한 주장을 하는 사람들의 의견을 직접 들어보면, 합리적이거나 설득력 있는 이유를 제시하는 경우는 매우 드물다.

정말로 PHP는 나쁜 언어인가?

Philosophy and History of PHP

어떤 프로그래밍 언어든지, 그 언어를 만든 사람의 철학이 그 언어에 담겨있고, 그 언어의 발전방향을 결정하기 마련이다. PHP가 정말로 나쁜 언어인가를 판단하기 위해서는 PHP의 철학은 무엇인가를 알아둘 필요가 있다.

PHP Manual에서는 PHP를 다음과 같이 소개하고 있다.

PHP, which stands for “PHP: Hypertext Preprocessor” is a widely-used Open Source general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. Its syntax draws upon C, Java, and Perl, and is easy to learn. The main goal of the language is to allow web developers to write dynamically generated webpages quickly, but you can do much more with PHP.

즉, PHP는 general-purpose이긴 하지만, Web development를 위해 특화된 언어이며, 쉽게 배울 수 있고, 빠르게 개발할 수 있는 (agile) 언어라는 점을 선언하고 있다.

PHP의 역사를 보면 왜 PHP가 이러한 철학을 가지고 있는지는 확연하게 드러난다. PHP의 원래 이름은 “Personal Home Page Tools”였으니 말이다.

Why PHP?

왜 PHP 였는가? 왜 여러 language alternative들 중 PHP가 “Web language”의 자리를 차지했는가? 답은 PHP 언어의 철학안에 있다. PHP는 웹 개발에 특화되어있었으며, 쉽게 배울 수 있고, 빠르게 개발할 수 있으며, open source였기 때문이다. 언어 외적인 중요한 factor 중 하나는 PHP가 빠르게 성장하고 있던 Apache의 module 기능을 처음으로 적용한 middleware solution이라는 것이었다. (“처음으로” 라는 사실은 중요하지 않다. “초기에”라는 말이 적합할 것이다. 3개월 정도 후에, Perl도 modperl을 내놓았기 때문이다.)

Is PHP A Bad Programming Langauge? (Part 1) 더 읽기"

Indigo programming model

Windows XP/2003용의 Avalon, Indigo subsystem을 포함한 Visual Studio 2005 Beta 2가 곧 나올 예정이다.

한편, VSLive 2005에서는 Indigo Day에서 Indigo에 대한 여러가지 session들이 있었던 모양. 특히, Don Box의 ‘Programming Indigo’ session이 너무 보고 싶으나…

“Hello World” Indigo server만으로 참을 수 밖에 없다.

C# Attribute를 사용해 contract/interface를 명시하는 방식은 이미 최근 RPC 관련 programming model에서 일반적인 trend라고 볼 수 있고, ServiceHost는 일종의 Container라고 볼 수 있을 것 같다. 특기할만한 점은 C# Generics을 이용해 container와 implementation을 결합했다는 점 정도. 여러 end point를 추가할 수 있는 점도 여러 Transport를 제공하는 Indigo의 특성을 잘 드러내주는 점이라고 할 수 있을 듯 하다.

Indigo programming model 더 읽기"

Google Maps

http://maps.google.com/

우리나라에서 하는 지리 정보 서비스에서 기본적으로 제공하는 drag & drop base의 인터페이스를 기초로 하고 있다. (게다가 firefox에서도 잘보인다!) 그리고 역시나 keyboard shortcut (arrow key, page up/down, +/-)을 제공한다.

구글답게, 뭔가 틀린 점은 검색 인터페이스에 있다. “hotels in los angeles”, “fuel near los angeles” 등을 직접 쳐보라. 지도상의 위치들이 바로 나오고 전화번호들까지 보여준다. Direction 서비스도 마찬가지다, 도시나 거리 이름, 도로번호 등의 pair를 검색창에 넣으면, 길찾기를 할 수 있다.

신기하게도, 네이버 지도, 다음 지도, 야후 거기, 어떤 서비스도 이런 인터페이스는 보여주지 않는다. (주로 combo box를 이용해 지역을 선택하거나, 주소 정보만 보여주고, 지도 정보와 결합하지 않는다.) 사실 기술적으로도 우리나라 서비스에서 불가능한 것은 아니다. 지도 정보 자체의 질이 문제인 것도 아니다. 다만, 사용자를 얼마나 고려하는가하는 생각의 차이일 것이다. Google Maps의 직관적인 인터페이스와 네이버 지도 서비스의 난잡한 인터페이스를 비교해보라.

아쉽게도 Google Maps는 미국에 한정되어서 서비스되고 있다.

Google Maps 더 읽기"

XStandard

MovableTypeWriter에서 mshtml을 사용해보았는데, XHTML 표준에 너무 맞지 않는 코드를 생성해내서, XStandard란 product를 눈여겨보고 있다.

Lite/Pro 버전으로 나뉘어서, Lite 버전엔 확장성 관련 기능들이 좀 빠져있긴 하지만, Lite도 상용 제품에 사용가능하다는 것이 눈에 띈다. 무엇보다도, XHTML 표준에 맞는 코드를 생성해내는 것이 마음에 든다.

“The editor generates clean XHTML Strict or 1.1, uses CSS for formatting, and ensures the clean separation of content from presentation”

pistos2님이 쓰신 여러 HTML editor들의 비교글도 읽어보자.

http://blog.naver.com/pistos2/80002160967

Update: gaemon님에 의하면 blogger에서는 자체 editor에서 XHTML compliant한 코드를 생성해준다고 한다.

XStandard 더 읽기"

호주제 헌법불합치 판결

호주제 헌법불합치 판결 더 읽기"

MSN Search Launched

Beta service 상태이던 MSN Search가 2월 1일자로 open 되었습니다. 원래 있었는지는 모르겠지만, MSN portal에도 적용되었나봅니다. 밑에 있는 article에서 언급된 특정 사이트로 링크한 페이지를 찾는 기능도 실험해보았습니다. “link:www.lastmind.net” 식으로 검색하면 되는데, 제가 URL을 넣은 comment들이 주루룩 나오는군요.

MSN Search http://search.msn.com/

MSN Search Has Arrived http://slashdot.org/article.pl?sid=05/02/01/1259235&from=rss

MSN Search Launched http://blogs.msdn.com/jhoward/archive/2005/02/01/364537.aspx

Off-Topic But Exciting…MSN Search Answers the Question: “Who Links to My Site?” http://blogs.msdn.com/ncarora/archive/2005/02/01/364715.aspx

MSN Search now live http://blogs.msdn.com/bretgrinslade/archive/2005/02/01/364725.aspx

MSN Search Launched 더 읽기"

Latest Proposed Draft Technical Report on C++ Library Extensions available

저번 version에 비해 크게 달라진 점은 보이지 않는다. 이제 기술적인 process는 끝났고, ISO에서의 승인 process로 넘어간 것으로 보인다. ISO 표준 과정에 적어도 1년 정도는 걸릴테고, 실제로 여러 벤더들의 컴파일러 제품에서 이 Library extention을 볼 수 있는 것은 2-3년 후가 될 것 같다.

From: Beman Dawes <bdawes@acm.org>
Reply-To: boost@lists.boost.org
To: Boost mailing list <boost@lists.boost.org>
Date: Sun, 23 Jan 2005 15:59:49 -0500
Subject: [boost] Latest TR draft available
Reply | Reply to all | Forward | Print | Add sender to contacts list | Trash this message | Report phishing | Show original
The latest draft of the C++ Standard Library Technical Report is available.
See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf

AFAIK, this is the version that will go to ISO for the long process of
formal voting. Thus it is the one Boosters should use; it contains a lot of
minor fixes that turned up during the final editing.

–Beman

Latest Proposed Draft Technical Report on C++ Library Extensions available 더 읽기"

Updated http-access2 on my machine

bindung군의 RSS가 내 RSS reader에서 제대로 sync가 안되는 문제를 해결하기 위해, http-access2 Ruby module을 2.0.4에서 2.0.5로 update했다. 오랜만에 http-access2 페이지에 들어갔더니, trac을 사용하고 있었다. 개인적으로 프로젝트 관리 툴로 dotproject를 써보고 있었는데, 기능은 충실하지만, 필요 이상으로 복잡한 감이 있다. 나도 trac을 한번 써볼까…생각 중.

2004-12-25: Version 2.0.5

Version 2.0.5 released. This is a minor bug fix release.

  • There is a server which does not like ‘foo.bar.com:80’ style Host header. The server for http://rubyforge.org/export/rss_sfnews.php seems to dislike HTTP/1.1 Host header “Host: rubyforge.net:80”. It returns HTTP 302: Found and redirects to the page again, causes HTTPAccess2::Client to raise “retry count exceeded”. Keat found that the server likes “Host: rubyforge.net” (not with port number).

http://rrr.jin.gr.jp/projects/http-access2/wiki/WikiStart#20041225Version205

Connection: close 헤더를 넣지 않으면, web server측에서 persistent connection을 유지할 경우, HTTPAccess2::Client::get()이 pending되는 문제는 아직 여전한 것 같다. 디버깅해보아야할 듯.

Updated http-access2 on my machine 더 읽기"