Three-Tier Architectures, Language Design, and Long-Term Implications (สถาปัตยกรรมสามชั้น การออกแบบภาษา และผลกระทบระยะยาว)
ในช่วงทศวรรษ 1990 ขณะที่ภาษา Java กำลังถูกออกแบบ แนวคิด three-tier computing กำลังเป็นที่นิยมอย่างมาก ผู้คนต่างสันนิษฐานว่าในอนาคตทุกระบบจะมี three-tier architecture หนึ่งในปัญหาปวดหัวที่พบได้ทั่วไปกับภาษาที่มีอยู่ในตอนนั้น เช่น C++ คือความยุ่งยากในการส่งผ่านออบเจ็กต์ข้ามเครือข่ายระหว่างระบบต่าง ๆ ให้สอดคล้องกัน ดังนั้นผู้ออกแบบ Java จึงตัดสินใจสร้างความสามารถนี้เข้าไปในแกนกลางของภาษาเลย โดยใช้กลไกที่เรียกว่า serialization .
Java object ทุกตัว implement interface ที่กำหนดให้ต้องรองรับ serialization ผู้ออกแบบคิดว่าในเมื่อ three-tier architecture จะคงอยู่ตลอดไป การฝังความสามารถนี้เข้าไปในตัวภาษาเลยจะช่วยให้สะดวกมาก แน่นอนว่า architecture style นั้นมาแล้วก็ไป แต่ร่องรอยของมันยังคงหลงเหลืออยู่ใน Java จนถึงทุกวันนี้ แม้ว่าแทบจะไม่มีใครใช้ serialization กันแล้ว แต่ฟีเจอร์ใหม่ ๆ ของ Java ก็ยังต้องรองรับมันเพื่อความเข้ากันได้แบบย้อนหลัง (backward compatibility) ซึ่งสร้างความหงุดหงิดให้กับผู้ออกแบบภาษาอย่างมาก
การทำความเข้าใจผลกระทบระยะยาวของการตัดสินใจด้านการออกแบบนั้นเป็นสิ่งที่เรามักพลาดอยู่เสมอ ทั้งในวงการซอฟต์แวร์และในศาสตร์วิศวกรรมด้านอื่น ๆ คำแนะนำที่มีมาตลอดว่าให้เลือกการออกแบบที่เรียบง่ายไว้ก่อนนั้น ในหลาย ๆ แง่มุมก็คือกลยุทธ์การป้องกันความเสี่ยงในอนาคต (future-proofing) นั่นเอง .