Bỏ qua

Lịch sử và Triết học

Dự án BeeWare bắt đầu từ một câu hỏi đơn giản: Tại sao các công cụ mà chúng ta sử dụng với tư cách là các nhà phát triển Python lại không được cải tiến với tốc độ tương đương như các công nghệ khác mà chúng ta sử dụng hàng ngày?

Python đã chứng tỏ mình là một ngôn ngữ lập trình rất mạnh mẽ – dễ tiếp cận đối với người mới bắt đầu, nhưng lại vô cùng mạnh mẽ trong tay các chuyên gia. Python đang nhanh chóng trở thành một phần quan trọng trong lĩnh vực phân tích dữ liệu, tính toán khoa học và phát triển web. Và các sáng kiến như Django Girls đã chứng minh rằng bằng cách sử dụng Python, có thể tổ chức các khóa đào tạo trong 1 ngày để giới thiệu Python cho những người chưa có kinh nghiệm lập trình; và vào cuối ngày, các học viên đã phát triển và triển khai một trang web động được hỗ trợ bởi cơ sở dữ liệu, được triển khai trên một máy chủ công khai.

Tuy nhiên, trải nghiệm phát triển của những người viết Python đôi khi lại gợi nhớ đến những năm đầu thập niên 90 hơn là thiên niên kỷ mới. Môi trường phát triển mặc định của Python vẫn là một cửa sổ console kích thước 80x25. Đối với những người dùng đến từ môi trường Windows hoặc Apple, nơi họ đã quen với các giao diện đồ họa chi tiết và được thiết kế tinh tế, sự quay ngược thời gian 30 năm này có thể là một trải nghiệm hoàn toàn xa lạ.

Và đúng vậy, có những IDE (Môi trường phát triển tích hợp) mang lại trải nghiệm như ứng dụng gốc khi viết mã. Tuy nhiên, những công cụ này đòi hỏi bạn phải chấp nhận hoàn toàn cách nhìn nhận dự án của IDE. Chúng thường gây ra không ít rắc rối cho quá trình phát triển, ngang ngửa với những vấn đề mà chúng giải quyết được.

Và như vậy, chúng ta đang đối mặt với một sự phân chia thú vị giữa “phương pháp cũ” phát triển Unix trong cửa sổ dòng lệnh và “phương pháp mới” sử dụng các môi trường phát triển tích hợp (IDE).

Triết lý Unix

Tuy nhiên, không nhất thiết phải như vậy. Nguyên tắc cốt lõi của Triết lý Unix là “mỗi công cụ chỉ làm một việc, nhưng làm tốt việc đó”. Đây là một triết lý rất mạnh mẽ, cho phép tạo ra các chuỗi công cụ cực kỳ mạnh mẽ bằng cách kết hợp một bộ các công cụ độc lập và chuyên biệt.

Thật không may, phần lớn các công cụ UNIX đã hiểu sai điều này thành "tất cả các công cụ đều phải sử dụng giao diện dòng lệnh". Tuy nhiên, trong triết lý UNIX không có quy định nào bắt buộc các công cụ phải sử dụng giao diện dòng lệnh — đó chỉ là kết quả của sự phát triển tự nhiên mà thôi.

Dự án BeeWare bắt đầu từ giả định rằng chúng ta có thể tận dụng được những ưu điểm của cả hai phương án. Chúng ta có thể sở hữu một chuỗi các công cụ có thể kết hợp linh hoạt, mỗi công cụ chuyên trách một nhiệm vụ cụ thể và thực hiện nó một cách xuất sắc. Tuy nhiên, những công cụ này cũng có thể cung cấp các chức năng của mình thông qua một giao diện người dùng đồ họa phong phú.

Không chỉ là mã nguồn

Tuy nhiên, điều này không chỉ đơn thuần là về mã nguồn. Một dự án phần mềm thành công đòi hỏi phải có tài liệu, kỹ năng thiết kế, phản hồi và báo cáo lỗi. Cộng đồng BeeWare nhận thức rõ rằng tất cả các đóng góp đều quan trọng — không chỉ những đóng góp được gửi dưới dạng yêu cầu kéo (pull request) trên GitHub.

Ngay cả trong trường hợp đó, người ta vẫn dễ dàng hình dung một dự án như một thực thể tách biệt, chỉ là tổng hợp của tất cả các đóng góp. Nhưng thực tế không bao giờ như vậy. Một dự án mã nguồn mở chính là về cộng đồng.

Đa dạng và hòa nhập

Một cộng đồng đa dạng là một cộng đồng vững mạnh. Điều này có nghĩa là chúng ta cần đón nhận mọi người, bất kể trình độ kinh nghiệm, xuất thân, chủng tộc, tín ngưỡng, xu hướng tình dục hay cách thể hiện bản thân. Dự án BeeWare cam kết xây dựng và duy trì một cộng đồng hòa nhập, đa dạng và cởi mở.

Để củng cố điều này, chúng tôi luôn sẵn sàng hướng dẫn bất kỳ ai muốn tham gia với tư cách là người đóng góp, đồng thời có Quy tắc ứng xử được thực thi nghiêm ngặt. Mọi báo cáo về vi phạm quy tắc ứng xử này — ngay cả khi do các thành viên cấp cao trong cộng đồng gây ra — đều sẽ được xem xét một cách tôn trọng và xử lý một cách thích hợp.

Lành mạnh và bền vững

Điều quan trọng nữa là phải đảm bảo rằng cộng đồng đó dễ tiếp cận và bền vững. Thật không may, quan niệm cho rằng các dự án mã nguồn mở “thực sự” phải được phát triển hoàn toàn bởi các tình nguyện viên đã trở thành một phần được chấp nhận trong văn hóa mã nguồn mở. Điều này tạo ra rào cản gia nhập đối với nhiều nhóm — những người duy nhất có thể dành thời gian rảnh rỗi để tham gia tình nguyện chính là những người thời gian rảnh rỗi.

Điều này cũng thường dẫn đến tình trạng kiệt sức và các vấn đề sức khỏe tâm thần khác trong cộng đồng các nhà phát triển. Việc trầm cảm, lo âu và kiệt sức trở nên phổ biến trong các cộng đồng phát triển phần mềm không nên được coi là một niềm tự hào, hay là minh chứng cho sự cống hiến của một đội ngũ phát triển. Đây là một vấn đề cần được giải quyết trực diện, và xử lý theo cách tương tự như cách xử lý một lỗi phần mềm - với các giải pháp tạm thời ngay lập tức, và các kế hoạch dài hạn để loại bỏ nguyên nhân gốc rễ của vấn đề.

Mặc dù chúng tôi vô cùng trân trọng những đóng góp của các tình nguyện viên, chúng tôi cũng nhận thức rõ rằng chỉ dựa vào nỗ lực tình nguyện thôi thì không thể xây dựng được một cộng đồng lành mạnh và bền vững. Chính vì lý do đó, tính bền vững về tài chính là một yếu tố then chốt trong hoạt động của dự án BeeWare. Với tư cách là một cộng đồng, chúng tôi không bỏ qua vai trò của nguồn lực tài chính trong việc cung cấp các điều kiện cần thiết để mọi người có thể bắt đầu và tiếp tục đóng góp. Với tư cách là một cộng đồng, chúng tôi sẽ cung cấp các cơ chế được chấp nhận để các cá nhân có thể kiếm tiền từ công việc của mình một cách có ý nghĩa, và bất cứ khi nào có thể, chúng tôi sẽ trả công cho mọi người - mà không làm tổn hại đến các lý tưởng của phát triển mã nguồn mở.

Mục tiêu

Mục tiêu cuối cùng của dự án BeeWare: Mang đến cho phần mềm dành cho người dùng trên thiết bị di động và máy tính để bàn những gì mà Django đã làm được cho phần mềm web – đó là cung cấp cho người dùng một bộ công cụ và thư viện giúp họ phát triển các giao diện người dùng bản địa phong phú và triển khai chúng lên các thiết bị của mình. Điều này bao gồm:

  • Các công cụ giúp Python chạy trên các thiết bị khác nhau,
  • Các công cụ để đóng gói một dự án Python để nó có thể chạy trên các thiết bị đó,
  • Các thư viện để truy cập các widget và tính năng gốc của thiết bị,
  • Các công cụ hỗ trợ phát triển, gỡ lỗi và phân tích các dự án này.

Mục tiêu là bộ công cụ này sẽ đủ đơn giản để những người mới bắt đầu hoàn toàn có thể sử dụng trong một môi trường tương tự như Django Girls; nhưng cũng đủ mạnh mẽ để có thể được sử dụng để phát triển những nền tảng tiếp theo như Instagram, Pinterest hay Disqus.

Quan trọng nhất, dự án hướng đến việc thực hiện tất cả những điều này dưới hình thức một cộng đồng mã nguồn mở. Quá trình phát triển mã nguồn mở đã chứng minh là phương pháp đáng tin cậy nhất để tạo ra phần mềm mạnh mẽ và ổn định, và việc bất kỳ ai cũng có thể truy cập phần mềm này đồng nghĩa với việc mọi người đều có thể bắt đầu với cùng một bộ công cụ xuất sắc, dù là chuyên gia hay người đam mê nghiệp dư.

Python ở khắp mọi nơi

Một dự án công nghệ thông tin hiện đại không thể bỏ qua bước phát triển lớn nhất trong lĩnh vực này trong 10 năm qua. Python tự hào là một ngôn ngữ đa nền tảng. 10 năm trước, “đa nền tảng” có nghĩa là có thể chạy trên Windows, macOS và Linux. Ngày nay, điện toán di động đã trở nên quan trọng hơn rất nhiều. Mặc dù vậy, vẫn chưa có nhiều lựa chọn tốt cho việc lập trình Python trên các nền tảng di động, và việc lập trình di động đa nền tảng vẫn còn là một thách thức.

BeeWare coi các nền tảng di động và các nền tảng mới nổi khác (như đồng hồ thông minh và đầu thu kỹ thuật số) là một phần không thể thiếu trong hệ sinh thái công nghệ thông tin — bởi vì nếu mọi người đã sở hữu những thiết bị này, tại sao họ lại không thể viết phần mềm cho chúng bằng Python?

Phổ biến khắp nơi

Việc sử dụng các chủ đề để đạt được tính đa nền tảng rất đơn giản. Tuy nhiên, người ta dễ dàng nhận ra những ứng dụng được xây dựng dựa trên các chủ đề – đó chính là những ứng dụng không hoạt động giống như bất kỳ ứng dụng nào khác. Các widget trông không hoàn toàn đúng, hoặc có thanh menu xuất hiện trên cửa sổ của một ứng dụng OS X. Các chủ đề có thể tái tạo gần như hoàn hảo – nhưng luôn có những dấu hiệu cho thấy điều đó.

Hơn nữa, các widget gốc luôn hoạt động nhanh hơn so với widget chung được tùy chỉnh giao diện. Xét cho cùng, bạn đang sử dụng khả năng gốc của hệ thống đã được tinh chỉnh và tối ưu hóa, chứ không phải một bộ máy vẽ được tích hợp lên trên một widget chung.

Các chủ đề cũng bỏ lỡ nhiều lợi ích về khả năng tiếp cận mà các nền tảng gốc mang lại. Các nhà phát triển hệ điều hành hiện đại dành rất nhiều thời gian để tối ưu hóa các tín hiệu tương tác dành cho người dùng gặp khó khăn về vận động, thị lực hoặc nhận thức. Nếu bạn sử dụng các thành phần giao diện gốc, bạn thường được hưởng những tín hiệu tương tác này một cách tự nhiên. Nếu bạn tái triển khai các thành phần giao diện thông qua một chủ đề, bạn cũng phải tái triển khai các tín hiệu tương tác đó.

BeeWare sử dụng các widget và chức năng gốc, thay vì áp dụng phương pháp phát triển ứng dụng dựa trên giao diện.

Tích hợp sẵn trong Python

BeeWare cũng là một framework kiên quyết theo phương châm "Python là ưu tiên hàng đầu". Chúng tôi yêu thích Python. Chúng tôi thích cách nó trông như thế nào và cách nó hoạt động. Nếu Python không phải là lựa chọn ưu tiên trên một nền tảng cụ thể, chúng tôi sẽ làm mọi thứ cần thiết để biến Python thành ngôn ngữ phát triển khả dụng. Và khi có cơ hội áp dụng các kiểu ngôn ngữ Python cho một API hoặc thiết kế, chúng tôi sẽ làm điều đó. Điều đó có nghĩa là chúng tôi sẽ sử dụng các trình tạo (generators), trình quản lý bối cảnh (context managers), các cuộc gọi không đồng bộ yield from, và nhiều hơn nữa, nhằm cung cấp API gốc Python tốt nhất cho phát triển ứng dụng đa nền tảng.

Chúng tôi cũng hướng tới tương lai – điều này có nghĩa là chúng tôi chỉ hỗ trợ Python 3.

Trải nghiệm bản địa

Trải nghiệm sử dụng bất kỳ công cụ nào đều bắt đầu từ quá trình cài đặt. Một phần trong triết lý "Native everywhere" của BeeWare là áp dụng các cơ chế bản địa phù hợp cho quá trình cài đặt. Nếu bạn đang sử dụng một công cụ ở không gian người dùng, nó nên được trình bày dưới dạng một gói phần mềm để cài đặt theo cách tương tự như khi bạn cài đặt bất kỳ công cụ nào khác - dù là thông qua cửa hàng ứng dụng, trình cài đặt hay một gói thực thi đơn giản. Người dùng cuối không nên biết rằng ứng dụng đã được viết bằng Python.