28 điểm bởi GN⁺ 2024-01-06 | 7 bình luận | Chia sẻ qua WhatsApp

9 năm của lập trình viên solo đứng sau trình soạn thảo văn bản "Paper"

  • Năm 2015, anh là một lập trình viên web full-stack điển hình, khá xa lạ với thế giới phát triển của Apple.
  • Khi dùng Mac, anh bị thu hút bởi các ứng dụng của những nhà phát triển độc lập, và sau khi được truyền cảm hứng từ iA Writer, một trình soạn thảo Markdown đơn giản và thanh lịch, anh quyết định tạo ra một ứng dụng tương tự.
  • Để phát triển một trình soạn thảo văn bản native cho Mac, anh bắt đầu học một stack công nghệ mới gồm Xcode, AppKit và Objective-C.
  • Anh đặt tên ứng dụng là Paper và theo đuổi chủ nghĩa tối giản đến cực đoan, thiết kế trình soạn thảo như một hình chữ nhật đơn giản.
  • Năm 2017, anh phát hành ứng dụng Mac trên Mac App Store, và đến năm 2019 thì ra mắt ứng dụng iOS.

Vì sao chọn ứng dụng native

  • Lý do chọn ứng dụng native thay vì ứng dụng Electron là vì mục tiêu mang lại trải nghiệm người dùng tốt nhất.
  • Ứng dụng native nhẹ, nhanh và cung cấp nhiều cách hơn để triển khai các tính năng độc đáo liên quan đến văn bản.

Vì sao chọn Objective-C

  • Năm 2015, khi Swift vẫn còn ở giai đoạn đầu, anh biên dịch hai dự án Xcode trống bằng Objective-C và Swift để so sánh các gói .app.
  • Ứng dụng Swift bao gồm Swift runtime nên nặng khoảng 5MB, trong khi ứng dụng Objective-C rất nhẹ, chỉ khoảng 100KB.
  • Vì muốn một ứng dụng có thể phân phối với dung lượng nhẹ hơn, anh đã chọn Objective-C.

Phụ thuộc bên thứ ba

  • Paper không có phụ thuộc bên thứ ba.
  • Anh tự xây dựng mọi thứ để có được một chút lợi thế trước các đối thủ.
  • Ví dụ, engine phân tích Markdown của Paper là tùy biến riêng và hỗ trợ ít cú pháp Markdown hơn các trình soạn thảo Markdown truyền thống.

Tầm nhìn

  • Tầm nhìn ban đầu của Paper là giữ lại các tính năng cốt lõi của iA Writer nhưng gói chúng trong một sản phẩm thanh lịch và tối giản hơn.
  • Ứng dụng tập trung vào việc giảm tối đa các yếu tố gây xao nhãng để tăng khả năng tập trung cho người dùng.
  • Theo thời gian, Paper dần tìm được vị trí của mình trên thị trường bằng cách giữ vững tính tối giản nhưng vẫn bổ sung tính năng từng bước.

Kiến trúc

  • Mã nguồn của Paper được cấu thành từ hai phạm vi: phạm vi ứng dụngphạm vi tài liệu.
  • Với mỗi phạm vi, anh định nghĩa storyboard để mô tả các view và widget, đồng thời kết nối các module trong phạm vi đó.
  • Module là các lớp Objective-C phụ trách một phần chức năng trong ứng dụng, giúp gom nhóm chức năng vào một nơi gắn với từng tính năng cụ thể.

Mã đa nền tảng

  • AppKit và UIKit vừa giống nhau nhưng cũng khác nhau ở nhiều điểm.
  • Để xử lý những khác biệt này, anh sử dụng macro và tính năng category của Objective-C.

Gỡ lỗi

  • Với các framework của Apple, cần đọc tài liệu thay vì đọc mã nguồn, và dùng breakpoint để phân tích stack trace đã được biên dịch.

Tính năng trả phí

  • Trong giai đoạn 2015-17, mô hình đăng ký vẫn chưa phổ biến rộng rãi, còn thanh toán một lần là cách làm thường thấy trên app store.
  • Vì muốn cung cấp tính năng trả phí theo cách thân thiện với người dùng, anh chỉ thu phí cho các nâng cấp mang tính thẩm mỹ chứ không phải chức năng.

Định giá

  • Ban đầu, anh bắt đầu với hai bộ tính năng Pro, mỗi bộ có giá thanh toán một lần là 5 USD.
  • Hiện tại, ứng dụng được định giá thành một gói duy nhất với mức 10 USD/tháng hoặc 100 USD trọn đời.
  • Qua các thử nghiệm về giá, anh phát hiện người dùng sẵn sàng trả tới 100 USD cho một ứng dụng đến từ một nhà phát triển chưa nổi tiếng.

Phần khó nhằn

  • Trình soạn thảo văn bản rất phức tạp, và mỗi lần hệ điều hành cập nhật lại xuất hiện thêm những cách mới để chèn, cập nhật và tương tác với văn bản.

Gimmick

  • Anh thêm vào những chi tiết thú vị như hiệu ứng nảy khi đổi kích thước cửa sổ, lấy cảm hứng từ ứng dụng Things.

Ý kiến của GN⁺:

  1. Cách tiếp cận đổi mới: Điều gây ấn tượng là dù không có kinh nghiệm phát triển ứng dụng native, nhà phát triển vẫn tạo ra Paper với trải nghiệm người dùng được đặt lên hàng đầu. Điều này cho thấy thiết kế lấy người dùng làm trung tâm quan trọng đến mức nào trong phát triển phần mềm.
  2. Học hỏi và trưởng thành: Quá trình học một stack công nghệ mới rồi dùng nó để tạo ra sản phẩm có thể truyền cảm hứng ngay cả cho các kỹ sư phần mềm mới vào nghề. Điều này nhấn mạnh rằng học hỏi liên tục và dám thử thách là yếu tố thiết yếu để trưởng thành với tư cách một lập trình viên.
  3. Tầm quan trọng của trải nghiệm người dùng: Một trong những yếu tố làm nên thành công của Paper là sự chăm chút kỹ lưỡng cho trải nghiệm người dùng và sự tập trung vào chủ nghĩa tối giản. Điều này cho thấy việc hiểu điều người dùng thực sự muốn và phản ánh điều đó vào sản phẩm quan trọng đến thế nào.

7 bình luận

 
woung717 2024-01-06

Phần lớn tài liệu phát triển của Apple khá khó hiểu nên phải lục lọi tài liệu rất kỹ... mà nếu vẫn thiếu thông tin thì nhiều khi lại rơi vào tình huống phải đào cả giao diện SDK... theo một nghĩa khác thì thật đáng nể.

 
ndrgrd 2024-01-06

Tôi đã thắc mắc “nâng cấp mang tính trang điểm” là gì, nhưng hóa ra bản gốc là visual changes.
Có dùng từ “mang tính trang điểm” không? Tôi mới thấy lần đầu.

 
geeker 2024-01-08

Có vẻ vì neo là bot AI nên bản dịch đã trở nên máy móc rồi nhỉ haha

 
apkas 2024-01-07

Bản gốc chỉ là một bản nâng cấp mang tính thẩm mỹ thôi.

 
cosine20 2024-01-08

Vậy thì có vẻ một bản nâng cấp về mặt thẩm mỹ sẽ ổn hơn...

 
ragingwind 2024-01-06

Đúng là một lập trình viên đáng để noi theo.

 
GN⁺ 2024-01-06
Ý kiến trên Hacker News
  • "Chính những chi tiết nhỏ ở phần rìa mới là thứ tạo nên phép màu"

    • Ban đầu người dùng có thể không để ý đến những chi tiết tinh tế của ứng dụng, nhưng theo thời gian họ sẽ dần khám phá ra chúng.
    • Những tính năng bổ sung được chăm chút kỹ lưỡng này là yếu tố khiến người dùng chuyển từ chỉ thích sang thực sự yêu ứng dụng.
    • Chúng mang lại cảm giác nhà phát triển thấu hiểu người dùng và sản phẩm đang được chăm sóc rất tốt.
    • Lấy ứng dụng Procreate làm ví dụ, bình luận này khen ngợi việc giao diện người dùng (UI) được giữ gọn gàng nhưng vẫn có nhiều tính năng ẩn có thể khám phá.
  • "Một bài viết tuyệt vời dựa trên 15 năm kinh nghiệm làm nhà phát triển ứng dụng iOS"

    • Bình luận nhắc đến việc kiên định với phát triển native, loại bỏ phụ thuộc bên thứ ba và chọn dùng Objective-C là những quyết định rất đúng đắn.
    • Dù đã chuyển sang Swift, đôi khi họ vẫn nhớ những ưu điểm của Objective-C.
    • Họ cho biết đã tải ứng dụng về dùng thử và rất thích những gợi ý nhỏ trong thanh menu.
  • "Khả năng phát triển với ít hoặc không có phụ thuộc trên nền tảng Apple"

    • Nhờ sự phong phú và chiều sâu của AppKit/UIKit, có thể xây dựng các ứng dụng hoàn thiện ở mức thực tiễn mà không cần thành phần bên thứ ba.
    • Bình luận cũng nói rằng ngay cả khi so với các framework khác như Qt, framework của Apple vẫn rất cạnh tranh.
  • "Sự phát triển của Swift và suy đoán về việc tối ưu hóa tích hợp nền tảng hoặc ở mức binary"

    • Từ Swift 5, ABI (Application Binary Interface) đã được ổn định.
    • Người bình luận nói rằng quyết định chỉ dùng Swift từ năm 2014 đến nay đang cho kết quả tốt.
    • Về SwiftUI, họ cho rằng nó vẫn còn nhiều điểm cần phát triển trước khi có thể thay thế UIKit/AppKit.
  • "Sự hoài nghi trong việc chọn phụ thuộc và tầm quan trọng của học hỏi"

    • Bình luận thể hiện sự không thoải mái với việc thêm package và thư viện bên ngoài trước cả khi bắt đầu viết mã.
    • Họ đánh giá cao cách tác giả biến những nhược điểm của hệ sinh thái Apple thành một trải nghiệm học hỏi tích cực.
  • "Yêu cầu tài liệu học tập và đề xuất về AppKit và phát triển cho Mac"

    • Bình luận cho biết họ gặp khó khăn trong việc tìm thông tin về phát triển cho Mac.
    • Họ giải thích rằng tài liệu mới nhất của Apple còn thiếu, còn tài liệu cũ thì chưa được cập nhật cho Swift, khiến họ phải dựa vào tự động hoàn thành của Xcode.
  • "Sự trân trọng dành cho mức độ chú ý đến chi tiết và tinh thần thủ công"

    • Bình luận đánh giá rất cao sự tỉ mỉ và tinh thần thủ công của tác giả, đồng thời khen bài viết đẹp và truyền cảm hứng.
  • "Một nhắc đến thú vị về cử chỉ xoay để hoàn tác"

    • Bình luận nói rằng cử chỉ này khiến họ liên tưởng đến cảnh nhân vật chính trong phim "Doctor Strange" quay ngược và tua tiến thời gian.
  • "Lời khen cho phong cách tối giản của blog và ứng dụng"

    • Người bình luận bày tỏ niềm vui khi dùng ứng dụng do chính mình tạo ra, và nói rằng họ cũng có cảm giác tương tự khi dùng vim-motions hoặc Neovim.
  • "Sự ngạc nhiên về việc thiếu quyền truy cập vào mã SDK trong hệ sinh thái phát triển của Apple"

    • Bình luận bày tỏ sự ngạc nhiên trước việc phải tự xem mã assembly và hỏi liệu điều đó có đúng không.