9 ปีของนักพัฒนาเดี่ยวผู้อยู่เบื้องหลังโปรแกรมแก้ไขข้อความ "Paper"
- ในปี 2015 เขาเป็นนักพัฒนาเว็บฟูลสแตกทั่วไป และยังห่างไกลจากโลกการพัฒนาของ Apple
- หลังจากใช้ Mac แล้วรู้สึกหลงใหลในแอปของนักพัฒนาอิสระ จึงตัดสินใจสร้างแอปคล้ายกันโดยได้แรงบันดาลใจจาก iA Writer ซึ่งเป็นโปรแกรมแก้ไข Markdown ที่เรียบง่ายและสง่างาม
- เพื่อพัฒนาโปรแกรมแก้ไขข้อความแบบเนทีฟสำหรับ Mac เขาจึงเริ่มเรียนรู้เทคโนโลยีสแตกใหม่อย่าง Xcode, AppKit และ Objective-C
- เขาตั้งชื่อแอปว่า Paper และออกแบบตัวแก้ไขให้เป็นเพียงสี่เหลี่ยมผืนผ้าเรียบง่าย โดยมุ่งสู่ความมินิมัลแบบสุดขั้ว
- เปิดตัวแอป Mac บน Mac App Store ในปี 2017 และเปิดตัวแอป iOS ในปี 2019
เหตุผลที่เลือกแอปแบบเนทีฟ
- เขาเลือกแอปแบบเนทีฟแทนแอป Electron เพราะมีเป้าหมายที่จะมอบประสบการณ์ผู้ใช้ที่ดีที่สุด
- แอปเนทีฟมีน้ำหนักเบาและรวดเร็วกว่า และเปิดทางให้สร้างฟีเจอร์เฉพาะทางเกี่ยวกับข้อความได้มากกว่า
เหตุผลที่เลือก Objective-C
- ในปี 2015 ตอนที่ Swift ยังอยู่ในช่วงเริ่มต้น เขาคอมไพล์โปรเจกต์ Xcode เปล่าทั้งใน Objective-C และ Swift แล้วเปรียบเทียบแพ็กเกจ
.app
- แอป Swift มี Swift runtime รวมอยู่ด้วยจึงมีขนาดราว 5MB ขณะที่แอป Objective-C เบามาก อยู่ที่ประมาณ 100KB
- เขาจึงเลือก Objective-C เพราะต้องการแอปที่แจกจ่ายได้โดยมีขนาดเบากว่า
การพึ่งพาไลบรารีภายนอก
- Paper ไม่มีการพึ่งพาไลบรารีภายนอก
- เขาสร้างทุกอย่างขึ้นมาเอง ทำให้มีข้อได้เปรียบเล็กน้อยเหนือคู่แข่ง
- ตัวอย่างเช่น เอนจิน parsing ของ Markdown ใน Paper เป็นแบบเขียนขึ้นเอง และรองรับไวยากรณ์ Markdown น้อยกว่าตัวแก้ไข Markdown แบบดั้งเดิม
วิสัยทัศน์
- วิสัยทัศน์เริ่มต้นของ Paper คือการมีฟังก์ชันหลักของ iA Writer แต่บรรจุอยู่ในรูปแบบที่สง่างามและมินิมัลยิ่งกว่า
- เขามุ่งลดสิ่งรบกวนสมาธิของผู้ใช้ให้น้อยที่สุด เพื่อช่วยให้มีสมาธิมากขึ้น
- เมื่อเวลาผ่านไป Paper ก็ค่อย ๆ หาตำแหน่งของตัวเองในตลาด ด้วยการคงความมินิมัลไว้พร้อมเพิ่มฟีเจอร์อย่างค่อยเป็นค่อยไป
สถาปัตยกรรม
- โค้ดของ Paper ประกอบด้วย scope สองประเภท: application scope และ document scope
- สำหรับแต่ละ scope เขากำหนด storyboard เพื่ออธิบาย view และ widget และเชื่อม module ภายใน scope นั้นเข้าด้วยกัน
- module คือคลาส Objective-C ที่รับผิดชอบส่วนหนึ่งของฟังก์ชันในแอป โดยจัดกลุ่มความสามารถให้รวมอยู่ในที่เดียวตามหน้าที่เฉพาะ
โค้ดข้ามแพลตฟอร์ม
- AppKit และ UIKit มีความคล้ายกัน แต่ก็แตกต่างกันในหลายจุด
- เขาใช้ macro และ category ของ Objective-C เพื่อจัดการกับความแตกต่างเหล่านั้น
การดีบัก
- สำหรับเฟรมเวิร์กของ Apple เขาต้องอ่านเอกสารมากกว่าการอ่านโค้ด และใช้ breakpoint เพื่อวิเคราะห์ stack trace ที่คอมไพล์แล้ว
ฟีเจอร์แบบเสียเงิน
- ในช่วงปี 2015-17 โมเดลสมัครสมาชิกยังไม่แพร่หลาย และการจ่ายเงินครั้งเดียวเป็นเรื่องปกติในแอปสโตร์
- เขาต้องการนำเสนอฟีเจอร์เสียเงินในรูปแบบที่เป็นมิตรต่อผู้ใช้ จึงกำหนดให้มีเฉพาะการอัปเกรดด้าน ความสวยงาม เท่านั้นที่ต้องจ่ายเงิน
การตั้งราคา
- ช่วงแรกเริ่มด้วยการจ่ายครั้งเดียว 5 ดอลลาร์ สำหรับฟีเจอร์ Pro สองชุดแยกกัน
- ปัจจุบันตั้งราคาเป็นชุดเดียวที่ 10 ดอลลาร์ต่อเดือน หรือ 100 ดอลลาร์ตลอดชีพ
- จากการทดลองด้านราคา เขาพบว่าผู้ใช้ยินดีจ่ายได้สูงสุดถึง 100 ดอลลาร์สำหรับแอปจากนักพัฒนาที่ยังไม่เป็นที่รู้จัก
ส่วนที่ยาก
- โปรแกรมแก้ไขข้อความมีความซับซ้อน และทุกครั้งที่ OS อัปเดต ก็จะมีวิธีใหม่ ๆ สำหรับการแทรก อัปเดต และโต้ตอบกับข้อความเพิ่มเข้ามา
ลูกเล่น
- เขาเพิ่มฟีเจอร์สนุก ๆ เช่น window resize bounce ที่ได้แรงบันดาลใจจากแอป Things
ความเห็นของ GN⁺:
- แนวทางที่น่าสนใจ: แม้นักพัฒนาจะไม่มีประสบการณ์ด้านการพัฒนาแอปเนทีฟมาก่อน แต่ก็พัฒนา Paper โดยให้ความสำคัญกับประสบการณ์ผู้ใช้เป็นอันดับแรก ซึ่งน่าประทับใจและแสดงให้เห็นว่าการออกแบบที่ยึดผู้ใช้เป็นศูนย์กลางสำคัญเพียงใดในงานพัฒนาซอฟต์แวร์
- การเรียนรู้และการเติบโต: กระบวนการเรียนรู้เทคโนโลยีสแตกใหม่และสร้างผลิตภัณฑ์ขึ้นมาจากสิ่งนั้น สามารถเป็นแรงบันดาลใจให้แม้แต่วิศวกรซอฟต์แวร์ระดับเริ่มต้น และตอกย้ำว่าการเรียนรู้อย่างต่อเนื่องและการกล้าท้าทายตัวเองเป็นสิ่งจำเป็นต่อการเติบโตของนักพัฒนา
- ความสำคัญของประสบการณ์ผู้ใช้: หนึ่งในองค์ประกอบที่ทำให้ Paper ประสบความสำเร็จคือความใส่ใจอย่างละเอียดต่อประสบการณ์ผู้ใช้และการโฟกัสที่ความมินิมัล ซึ่งแสดงให้เห็นว่าการเข้าใจสิ่งที่ผู้ใช้ต้องการจริง ๆ และสะท้อนสิ่งนั้นลงในผลิตภัณฑ์สำคัญเพียงใด
7 ความคิดเห็น
เอกสารสำหรับนักพัฒนาของ Apple ส่วนใหญ่ไม่ค่อยเป็นมิตร เลยต้องคอยค้นเอกสารอย่างละเอียดอยู่บ่อย ๆ... แล้วถ้าข้อมูลยังไม่พอ ก็ยังมีหลายครั้งที่ต้องไปไล่ดูอินเทอร์เฟซของ SDK อีก... น่านับถือจริง ๆ ในอีกความหมายหนึ่งนะครับ
สงสัยว่าอัปเกรดเชิงตกแต่งคืออะไร แต่พอไปดูต้นฉบับแล้วเป็น
visual changesมีการใช้คำว่าเชิงตกแต่งแบบนั้นกันด้วยเหรอครับ? ผมเพิ่งเคยเห็นเป็นครั้งแรก
ดูเหมือนว่าเพราะ neo เป็น ai bot เลยกลายเป็นการแปลแบบแข็ง ๆ ไปหน่อยนะครับ 555
ต้นฉบับคือการอัปเกรดด้านรูปลักษณ์
ถ้าอย่างนั้นก็ดูเหมือนว่าการอัปเกรดด้านความสวยงามน่าจะดีกว่านะ...
เป็นนักพัฒนาที่น่าเอาเป็นแบบอย่างจริง ๆ
ความเห็นจาก Hacker News
"รายละเอียดเล็กๆ น้อยๆ ตรงขอบนี่แหละที่เหมือนเวทมนตร์"
"เป็นบทความที่ยอดเยี่ยมจากประสบการณ์ 15 ปีในฐานะนักพัฒนาแอป iOS"
"ความเป็นไปได้ของการพัฒนาแบบพึ่งพาน้อย/ไม่พึ่งพาเลยบนแพลตฟอร์ม Apple"
"พัฒนาการของ Swift และการคาดเดาเกี่ยวกับการฝังไว้ในแพลตฟอร์มหรือการปรับแต่งระดับไบนารี"
"ความไม่ไว้วางใจในการเลือก dependencies และความสำคัญของการเรียนรู้"
"การขอคำแนะนำและแหล่งเรียนรู้เกี่ยวกับ AppKit และการพัฒนา Mac"
"ความใส่ใจในรายละเอียดและความเคารพต่อความเป็นช่างฝีมือ"
"การกล่าวถึง gesture หมุนเพื่อ undo ที่น่าสนใจ"
"คำชมต่อความมินิมัลของบล็อกและแอป"
"ความประหลาดใจต่อการเข้าถึงโค้ด SDK ที่มีอยู่อย่างจำกัดใน ecosystem การพัฒนาของ Apple"