Nhái Cốm Blog

I love you just the way you are

0R8A4000_

7 lý do tại sao các nền tảng trở thành những ngôn ngữ lập trình mới

3 Comments

Author: Peter Wayner
Original post: 7 reasons why frameworks are the new programming languages

(Lược dịch)

Nhờ những công cụ mạnh mẽ, nhu cầu về tốc độ và sự chuyển đổi tự nhiên của việc lập trình, cuộc chiến tiếp theo của bạn sẽ diễn ra trên các nền tảng giao diện lập trình ứng dụng (gọi tắt là nền tảng API) chứ không phải cú pháp.

Trong thập niên 80, cách đơn giản nhất để khơi mào một cuộc chiến là tuyên bố rằng ngôn ngữ lập trình bạn sử dụng là tốt nhất. C, Pascal, Lisp, Fortran? Các lập trình viên dành nhiều giờ để giải thích tường tận tại sao cấu trúc if-then-else (nếu-thì-ngược lại) trong ngôn ngữ của họ lại là tốt nhất dành cho bạn.

Đó là chuyện của quá khứ. Ngày nay, những cuộc chiến liên quan đến cấu trúc và cú pháp phần lớn đã chấm dứt nhờ sự hội tụ lại dựa trên vài tiêu chuẩn đơn giản. Sự khác biệt giữa dấu chấm phẩy, ngoặc nhọn và những thứ khác trong C, Java, Javascript là rất nhỏ. Sự hào hứng cho việc tham gia tranh luận về cách gõ và khối lệnh vẫn tồn tại nhưng phần lớn chỉ còn là tranh luận thông thường do khả năng tự động đang thu nhỏ dần sự khác biệt. Nếu bạn không thích chỉ ra kiểu dữ liệu, máy tính rất có khả năng đưa ra chính xác kiểu bạn cần. Nếu sếp bạn thích Javascript nhưng bạn thích Java, một trình biên dịch đa ngôn ngữ sẽ chuyển đổi các kiểu trong Java thành Javascript để sẵn sàng chạy trong trình duyệt. Tại sao lại phải tranh cãi khi chúng ta đã có công nghệ hỗ trợ?

Đến nay, sự quan tâm chuyển hướng sang các bộ khung ứng dụng (framework). Khi tôi ngồi với các giảng viên ở đại học Johns Hopkins để bàn về khóa học mới, các bộ khung ứng dụng là chủ đề chi phối cuộc thảo luận. Liệu Angular có tốt hơn Ember? Liệu Node.js có tốt hơn cả hai?

Chúng tôi thiết kế một chương trình khảo sát nhằm khám phá kiến trúc những gói phần mềm quan trọng nhất tạo dựng nên Internet. Đây là tâm điểm của công việc; giá trị của cuộc khảo sát sẽ giúp khám phá những nút thắt của các gói phần mềm hiện đang tồn tại trên Internet.

Theo cách hiểu này, các nền tảng là những ngôn ngữ lập trình mới. Chúng là nơi những ý tưởng, triết lý và các vấn đề thực tiễn mới nhất được tìm thấy trong việc lập trình thời hiện đại. Một số thoái lui nhưng có rất nhiều người đang góp phần xây dựng như một khối nhỏ trong việc lập trình. Dưới đây là bảy khía cạnh thúc đẩy xu hướng xây dựng các bộ khung ứng dụng, giúp chúng trở thành mảnh đất màu mỡ mới cho những cuộc chiến🙂

1. Việc lập trình chủ yếu là nối các API lại với nhau

(API – Application Programming Interface)

Đã có thời gian viết phần mềm đồng nghĩa với việc bạn phải sử dụng toàn bộ kiến thức về ngôn ngữ lập trình để đưa ra các đoạn mã. Khả năng làm chủ sự phức tạp của con trỏ, hàm và phạm vi mã lệnh là thực sự cần thiết; chất lượng mã nguồn phụ thuộc vào cách sử dụng đúng đắn của bạn. Ngày nay, máy tính giúp bạn tự động rất nhiều trong quá trình lập trình. Nếu bạn có một vài đoạn mã vô nghĩa thì cũng đừng quá lo lắng. Trình biên dịch sẽ loại bỏ những đoạn mã không sử dụng đến. Nếu bạn quên không giải phóng bộ nhớ, bộ dọn rác (Garbage Collector) có thể sẽ tìm ra giúp bạn.

Thêm vào đó, cách thức lập trình cũng trở nên khác trước. Phần lớn mã nguồn hiện nay là những dòng lệnh dài gọi đến các API. Việc chuyển đổi định dạng dữ liệu diễn ra thường xuyên xen giữa những lời gọi đến API, nhưng thậm chí công việc này thông thường cũng được thực hiện bởi các API. Một số ít người may mắn làm việc tạo ra những đoạn mã thông min, làm việc với bit hay con trỏ trực tiếp với máy tính; nhưng phần lớn chúng ta làm việc với những lớp cao hơn. Chúng ta chỉ đơn giản kết nối các API lại với nhau.

Do đó, việc hiểu cách thức hoạt động và kết quả của API quan trọng hơn nhiều. Những loại cấu trúc dữ liệu nào nó chấp nhận? Thuật toán bên trong xử lý thế nào khi dữ liệu được mở rộng? Ngày nay, những câu hỏi như thế này thường gặp hơn trong lập trình so với những câu hỏi về cú pháp hay ngôn ngữ. Hiện nay có một số công cụ giúp đơn giản hóa việc gọi một hàm trong ngữ bạn sử dụng từ một ngôn ngữ khác. Ví dụ bạn có thể dễ dàng liên kết các thư viện C từ ngôn ngữ Java. Cái cần thiết là phải hiểu về các API.

2. Nên đứng trên vai những người khổng lồ

Hãy hình dung việc bạn trở thành một tín đồ của Erlang hay một ngôn ngữ mới nào đó. Bạn cho rằng nó cung cấp nền tảng tốt nhất để tạo ra một ứng dụng ổn định và không có lỗi. Điều này thật tuyệt vời nhưng bạn có thể mất nhiều năm để viết lại toàn bộ mã nguồn Java hay PHP hiện tại sang ngôn ngữ mới. Chắc chắn rằng mã nguồn mới của bạn sẽ tốt hơn rất nhiều nhưng liệu nó có đáng giá so với thời gian bạn phải bỏ ra?

Các bộ khung ứng dụng cho phép chúng ta tận dụng thành quả những công việc khó khăn của những người đi trước. Chúng ta có thể không thích kiến trúc mà họ chọn cũng như có thể tranh cãi về chi tiết thực thi; nhưng sẽ hiệu quả hơn nhiều nếu chúng ta gác lại những lời phàn nàn và tìm cách chung sống với những sự khác biệt. Việc thừa kế tất cả những điểm tốt và xấu của một bộ mã nguồn sẽ dễ dàng hơn nhiều nếu sử dụng một bộ khung ứng dụng (framework). Đi theo con đường tự mình viết lại mọi thứ (trong ngôn ngữ mới yêu thích của bạn) thay vì sử dụng một bộ khung ứng dụng phổ biến, bạn sẽ không thể nhanh chóng tận hưởng thành quả từ lựa chọn mới so với việc tận dụng lại những bộ khung ứng dụng (framework) và các API của nó.

3. Hiểu biết kiến trúc chứ không phải cú pháp mới là điều thực sự quan trọng

Khi công việc lập trình phần lớn là xâu chuỗi các lời gọi đến API, sẽ không có quá nhiều lợi thế trong việc học các đặc tính riêng biệt của ngôn ngữ. Chắc chắn rằng bạn có thể trở thành một chuyên gia về ngôn ngữ Java, biết cách Java khởi tạo các trường tĩnh (static field) trong đối tượng; nhưng sẽ tốt hơn nếu bạn tìm ra cách tận dụng sức mạnh của Lucene, JavaDB hay nhưng mã nguồn tương tự. Bạn có thể tốn hàng tháng để tối ưu hóa các hàm trong trình biên dịch Objective-C nhưng học các thư viện mới nhất của Apple sẽ thực sự giúp mã nguồn của bạn gây chú ý. Bạn sẽ nhận được nhiều hơn với việc học chi tiết về bộ khung ứng dụng thay vì cú pháp của ngôn ngữ mà bộ khung ứng dụng được xây dựng nên.

Phần lớn mã nguồn của chúng tiêu tốn thời gian thực thi bên trong các bộ thư viện. Nắm bắt các chi tiết của ngôn ngữ có thể giúp bạn nhưng hiểu biết điều gì đang diễn ra bên trong các bộ thư viện mang lại cho bạn kết quả đáng giá hơn nhiều.

4. Sự thống trị của các thuật toán

Học một ngôn ngữ lập trình giúp bạn sắp xếp dữ liệu được lưu bên trong các biến, nhưng nó chỉ giúp bạn được đến vậy. Rào cản thực sự là sử dụng các thuật toán chính xác và thông thường nó được định nghĩa và thực hiện bên trong các bộ khung ứng dụng (framework).

Rất nhiều lập trình viên hiểu rằng việc thực hiện lại các thuật toán và cấu trúc dữ liệu chuẩn là rất nguy hiểm và lãng phí thời gian. Bạn có thể muốn thay đổi nó một chút phục vụ cho nhu cầu riêng của bạn nhưng bạn đang đánh đổi bằng nguy cơ xảy ra các lỗi nguy hiểm. Các bộ khung ứng dụng (framework) đã được kiểm nghiệm rộng rãi trong nhiều năm. Chúng chính là thành quả đầu tư và hạ tần cơ sở phần mềm. Sẽ không có nhiều ví dụ minh chứng ý nghĩa của việc tách khỏi cộng đồng, quẳng đi những công việc khó khăn người khác đã làm để tự mình xây dựng lại một lô các thuật toán khác nhau.

Cách tiếp cận đúng đắn là học hỏi về các bộ khung ứng dụng (framework) và học cách sử dụng làm sao đạt hiệu quả cao nhất. Nếu bạn chọn sai cấu trúc dữ liệu, bạn có thể biến một công việc thông thường thành một công việc sử dụng thời gian nhiều hơn gấp bội. Sẽ có rắc rối lớn khi mà bạn không có định hướng đúng đắn.

5. Trình biên dịch và Môi trường phát triển tích hợp (IDE) có thể sửa lỗi cú pháp của bạn

Liệu tôi có phải đặt một dấu chấm phẩy sau câu lệnh cuối cùng? Liệu dấu chấm phẩy là “dấu phân tách” hay là “dấu kết thúc”? Những nhà thiết kế ngôn ngữ đã dành lượng lớn thời gian tạo nên những bộ phân tích cú pháp nhằm chuẩn hóa những quy tắc này. Bạn đoán thử coi? Tôi không quan tâm. Đã có lúc tôi quan tâm đến những vấn đề này nhưng giờ đây, môi trường phát triển tích hợp (IDE) đã thực hiện công việc đó cho tôi. Chúng âm thầm trợ giúp và thông báo khi nào tôi làm sai. Tôi để chúng làm công việc đó cho tôi và dành thời gian cân nhắc cho những câu hỏi lớn về mã nguồn của mình. Môi trường phát triển tích hợp là người trợ lý, giúp bạn xử lý những chi tiết nhỏ nhặt khi lập trình.

Tự động hóa cũng giúp chúng ta thoát khỏi sự nhàm chán của cú pháp lập trình. Tất nhiên, chúng không làm mọi thứ hộ bạn. Chúng ta vẫn phải có một ý tưởng để bắt đầu. Nhưng phần lớn thời gian, các chi tiết về ngôn ngữ không thật sự quan trọng.

Môi trường phát triển tích hợp cũng giúp các bộ khung ứng dụng (framework) ở các chi tiết nhỏ. Nó hiển thị các tham số cần thiết cho một lời gọi hàm; chúng ta thậm chí có thể kiểm tra liệu dữ liệu đưa vào đã đúng kiểu hay chưa. Sau đó, chúng ta phải biết hàm nào sẽ được sử dụng và làm thế nào để gắn chúng lại hoạt động với nhau. Điều chúng ta chú ý tới (khi mà cú pháp không còn quá quan trọng) là các phương thức, các hàm có thể sử dụng cho giải pháp của chúng ta.

6. Cú pháp đang dần biến mất với ngôn ngữ thị giác

Mặc dù điều này đã được tiên đoán từ nhiều năm trước, nó nó vẫn đang diễn ra một cách chậm rãi với một số (chứ không phải tất cả) mã nguồn. Một số chương trình vẫn giữ nguyên nhưng những đoạn văn bản nhưng một số khác được hình ảnh hóa hơn. Điều này đồng nghĩa với việc ngôn ngữ máy tính bên dưới cũng mất dần tầm quan trọng vốn có.

Những bộ xây dựng giao diện đồ họa người dùng (GUI) là điểm dễ nhận ra nhất. Bạn có thể kéo thả giao diện người dùng suốt cả ngày mà không cần lo lắng đến ngôn ngữ C, Java hay bất kì ngôn ngữ nào khác. Chi tiết được mã hóa bên trong các khối hình ảnh.

Các công cụ như AndroidBuilder cho phép kéo thả để tạo ra bố cục; và AndroidBuilder sẽ tạo ra mã XML và Java cần thiết giúp mã nguồn có thể chạy. Rất khó để nói rằng ngôn ngữ thị giác là tương lai, đặc biệt sau những thất bại so với những tiên đoán. Nhưng những công cụ này đang phát triển hết mức, ngay khi có thể. Điều này nghĩa là ngôn ngữ truyền thống cũng giảm dần sức mạnh cũng như tầm quan trọng.

7. Mã nguồn là luật pháp

Các ngôn ngữ máy tính nói chung là không có tri giác. Chúng được thiết kế để mở, chấp nhận và thực hiện liên tục, bất kì điều gì bạn muốn. Đôi khi bạn cần sử dụng một vài tính năng bổ sung do cú pháp nhưng phần lớn chúng chỉ là những tổ hợp phím. Sau đó, đơn giản chỉ là nếu-thì-ngược lại (if-then-else) cùng với một số phần khác. Ngôn ngữ sẽ giúp bạn đạt được điều bạn cần, theo cách bạn muốn. Nếu có giới hạn thì chúng cũng được thiết kế để giữ mã nguồn của bạn ít lỗi nhất có thể chứ không phải để giới hạn điều bạn có thể làm.

Các bộ khung ứng dụng (framework) mới là nơi ẩn giấu sức mạnh. Đây là chỗ các kiến trúc sư quyết định cái gì được phép và cái gì bị cấm. Nếu họ không muốn điều gì đó xảy ra, lời gọi hàm sẽ biến mất khỏi bộ API. Nếu họ thích một ý tưởng nào đó, sẽ có nhiều lời gọi hàm cũng như công cụ hỗ trợ nó. Đây là lý do tại sao Larry Lessig, giáo sư luật ở Harvard, nói, “Mã nguồn là luật pháp.”

Các bộ khung ứng dụng (framework) thiết lập các quy tắc của riêng mình và bạn buộc phải sống với những quy tắc này nếu bạn lựa chọn nó. Một số nền tảng blog khuyến khích liên kết với những người khác thông qua lời gọi AJAX nhưng một số khác lại không hỗ trợ. Đó là lý do tại sao bạn phải nghiên cứu cẩn thận và lựa chọn thật khôn ngoan. Đó cũng là lý do sau cùng tại sao các bộ khung ứng dụng (framework) chi phối mọi thứ trong cuộc đời chúng ta, ngay cả trong những thời điểm hiếm hoi chúng ta không lập trình.

3 thoughts on “7 lý do tại sao các nền tảng trở thành những ngôn ngữ lập trình mới

  1. Chúng ta có thể không thích kiến trúc mà họ chọn cũng như có thể tranh cãi về chi tiết thực thi; nhưng sẽ hiệu quả hơn nhiều nếu chúng ta gác lại những lời phàn nàn và tìm cách chung sống với những sự khác biệt.


    Tốt nhất là ngậm mồm lại, thôi chỉ trích và thực sự bắt tay vào làm, ông nhỉ?😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s