• Thứ Hai, 28/03/2011 15:03 (GMT+7)

    NNLT trên đà phát triển

    Phương Nga
    8 ngôn ngữ lập trình (NNLT) đề cập trong bài đã và đang được nhiều lập trình viên (LTV) cũng như doanh nghiệp dành sự quan tâm và chú ý đặc biệt.

    Thế giới của các NNLT đa dạng và có chiều sâu, mỗi NNLT có ưu thế ở từng mảng như C++ về lập trình hệ thống, PHP, .Net dành cho web, SQL cơ sở dữ liệu… Đôi khi, các lập trình viên sẽ hướng đến ngôn ngữ C++ hay các ngôn ngữ thông dụng khác để lập trình các trò chơi đòi hỏi tác vụ hiệu suất cao.

    Sự nở rộ của các nền tảng và ứng dụng mới chuyển từ máy tính để bàn sang thiết bị di động và ứng dụng đám mây hay web. Nhiều NNLT mới đã thúc đẩy sự xuất hiện của Python, Ruby, CUDA… để giúp LTV dễ dàng hơn trong việc phát triển ứng dụng. Dần dần, các ngôn ngữ mới đã có nhiều cải thiện đáng kể khi các hàm, dòng lệnh… đến gần với ngôn ngữ tự nhiên của con người hơn. Vì vậy, để có thể bắt kịp với xu hướng phát triển phần mềm, các lập trình viên phải tìm hiểu NNLT mới vừa theo đuổi niềm đam mê vừa có được vị trí công việc tốt hơn cho tương lai (Xem bài “Coder hoàn hảo” trang 96). Bên cạnh đó, các công ty phần mềm cũng phải chọn lựa hướng tiếp cận ngôn ngữ để cho ra đời những sản phẩm có thể mang tính cạnh tranh cao, phù hợp với nhu cầu thị trường. 

    Dưới đây là 8 NNLT đang có chiều hướng thích ứng nhanh trong các tổ chức, doanh nghiệp. 8 NNLT được đề cập không có ngôn ngữ nào vượt trội hẳn, đa số chúng kế thừa những ngôn ngữ đi trước.

    Python

    Có 2 nhóm người yêu thích Python, đó là những người không thích sử dụng cặp ngoặc nhọn { } được dùng để bao bọc một khối lệnh và nhóm còn lại là các nhà khoa học. Ví dụ, trong C/C++ dùng cặp { } để bao một khối lệnh trong lúc Python sẽ thụt các câu lệnh vào trong khối sâu hơn (về bên phải) so với các câu lệnh gốc chứa nó. 

    #include <math.h>
    //...
    delta = b * b – 4 * a * c;
    if (delta > 0)
    {
    // Khối lệnh mới bắt đầu
    x1 = (- b + sqrt(delta)) / (2 * a);
    x2 = (- b - sqrt(delta)) / (2 * a);
    printf("Phuong trinh co hai nghiem phan biet:\n");
    printf("x1 = %f; x2 = %f", x1, x2);
    }
    Đoạn mã trên viết lại bằng Python:
    import math
    #...
    delta = b * b – 4 * a * c
    if delta > 0:
    # Khối lệnh mới, thụt vào đầu dòng
    x1 = (- b + math.sqrt(delta)) / (2 * a)
    x2 = (- b – math.sqrt(delta)) / (2 * a)
    print "Phuong trinh co hai nghiem phan biet:"
    print "x1 = ", x1, "; ", "x2 = ", x2

    Trong vài năm trở lại đây, Python là ngôn ngữ đầu tiên có mặt trên ứng dụng App Engine của Google - một dấu hiệu cho thấy Python là loại cấu trúc có tính linh hoạt trên điện toán đám mây. App Engine là một dịch vụ cho phép bạn triển khai ứng dụng web của mình trên kiến trúc của Google. Hiện nay App Engine đang hỗ trợ các ứng dụng web viết bằng Python và Java. Người dùng có thể viết ứng dụng bằng ngôn ngữ Python theo các giao diện lập trình ứng dụng (API) mà Google cung cấp.

    Python còn khá phổ biến trong các phòng thí nghiệm khoa học, theo người sáng lập ra Python là Guido von Rossum, các nhà khoa học luôn cần sáng tạo không ngừng khi cố gắng đưa ra kết quả, vì vậy họ cần tìm kiếm một ngôn ngữ động có thể đưa ra kết quả nhanh chóng và gần như thấy kết quả tức thời.
     

    Một lợi thế của Python là cung cấp khá nhiều thư viện nên được các nhà khoa học ưa chuộng. NumPy và SciPy chỉ là 2 trong số những thư viện đáng chú ý được phát triển trong dự án nguồn mở phù hợp với các tính toán khoa học. 

    SciPy là một thư viện mã nguồn mở của các công cụ khoa học dành cho Python. SciPy được xây dựng trên thư viện NumPy, được đóng gói từ nhiều mô-đun khoa học và kĩ thuật cấp cao. SciPy cung cấp các mô-đun về thống kê, tối ưu hóa, tích phân, đại số tuyến tính, xử lý tín hiệu, xử lý hình ảnh, thuật toán di truyền, các hàm đặc biệt… SciPy được phát triển đồng thời trên cả Linux và Windows. Ngoài ra, SciPy cũng được biên dịch và chạy thành công trên Mac, Solaris, FreeBSD và hầu hết các nền tảng khác có cài đặt Python.

    Không chỉ lĩnh vực nghiên cứu khoa học dùng ngôn ngữ Python mà các công ty dược phẩm cũng như nhiều công ty ở phố tài chính Wall Street cũng khai thác Python. Các công ty ở phố Wall Street chủ yếu dựa vào thuật toán Python để phân tích các con số toán học và họ cũng thuê những nhà khoa học ở trường đại học để phân tích các con số qua dòng lệnh trên Python.

    Ruby

    Ruby là NNLT mã nguồn mở thích hợp cho các ứng dụng truy xuất cơ sở dữ liệu, còn Ruby on Rails là 1 khung làm việc (framework) cho ứng dụng viết bằng ngôn ngữ Ruby, nó cung cấp các thư viện cơ bản, hỗ trợ cho ứng dụng Ruby. 

    Ruby giúp dẫn lối cho doanh nghiệp khai thác sức mạnh của Web 2.0. Một ý tưởng mới của Ruby là dùng quy tắc “convention over configuration” nghĩa là thay vì phải thiết lập môi trường hay những loại tương tự như thế, tất cả những gì bạn cần làm là gọi đúng tên (việc đặt tên cho các biến sẽ tương ứng với tên biến có trong cột của cơ sở dữ liệu một cách tự động), ví dụ có một class gọi là User thì tập tin của class này sẽ có tên /models/user.rb (người dùng có thể thay đổi tên khác), và controller của model này sẽ được mặc định là /controllers/user_controller.rb và helper của model này sẽ là /helpers/user_helper.rb, các view của model sẽ được đặt trong thư mục /views/users, và bảng trong cơ sở dữ liệu sẽ được hiểu là 'user'. 

    Ruby on Rails xử lý các định dạng trong các bảng của cơ sở dữ liệu cũng như các quyết định về thông tin gì sẽ hiển thị. Sử dụng theo quy ước đặt tên của Ruby on Rails, sẽ giúp mã lệnh được phác thảo một cách dễ dàng và hạn chế sự trùng lắp.

    Nhiều trang web viết bằng ngôn ngữ Ruby chạy trên nền JRuby, đó là một phiên bản viết bằng Java dựa trên máy ảo Java (Java Virtual Machine - JVM). Người dùng sử dụng JRuby có thể tận dụng tất cả thế mạnh của JVM và có thể triển khai tùy theo cấp độ cho nhiều người dùng đồng thời.

    MATLAB

    MATLAB được xây dựng trên cơ sở toán học để giải quyết các hệ thống của phương trình tuyến tính, là ngôn ngữ nhận được nhiều quan tâm của những cơ quan có khối lượng dữ liệu đồ sộ cần phân tích. Nhiều kỹ thuật thống kê có tính phức tạp cao, như các dữ liệu thu thập từ quảng cáo, danh mục bài hát hay trang web đòi hỏi nhiều các thuật toán thì MATLAB sẽ là sự lựa chọn phù hợp.

    MATLAB sẽ góp mặt trong những số liệu tính toán thống kê mang tính khổng lồ, chẳng hạn liệt kê các trang web có số người xem nhiều nhất hay thống kê con số để biết mọi người có khuynh hướng mua sắm nhiều vào đầu tuần hay ngày thứ Sáu? 

    MathWorks là công ty phát triển MATLAB, cung cấp khá đa dạng các bài nghiên cứu được đúc kết từ kinh nghiệm của các nhà lập trình trong các câu trả lời về thống kê. Cụ thể, Toyota Racing có kế hoạch phân tích thử nghiệm các ống thổi khí động học hay Viện Biodiagnostics của Canada đang tìm kiếm cách điều trị mang tính khả thi nhất cho bệnh bỏng.

    Ngoài MATLAB, còn có một số lựa chọn mã nguồn mở khác gồm Octave, Scilab, Sage và PySci. Tất cả các công cụ này sẽ trợ giúp cho việc phân tích thống kê có độ phức tạp cao mà hiện được nhiều công ty quan tâm - các công ty muốn hiểu nhiều hơn về nhu cầu của khách hàng và biết họ cần gì trong tương lai.

    JavaScript

    JavaScript là một NNLT kịch bản dựa trên đối tượng, được dùng rộng rãi cho web. Về cú pháp, Javascript cũng tương tự như C, Perl và Java... ví dụ mệnh đề lặp if, while, for.

    JavaScript được sử dụng nhằm bổ sung tính tương tác cho các trang HTML. JavaScript có thể đáp ứng các sự kiện như tải hay loại bỏ các form, do đó khả năng này cho phép JavaScript trở thành một ngôn ngữ script động. Ngoài ra, Javascript có thể được dùng để xác nhận dữ liệu người dùng nhập vào trước khi được chuyển đến máy chủ (server) và giúp trang web của bạn tương tác với người dùng uyển chuyển hơn. 

    Khá nhiều lập trình viên dùng JavaScript để thiết kế trang web động và một số hiệu ứng hình ảnh thông qua DOM (Document Object Model). JavaScript được dùng để thực hiện một số tác vụ không thể thực hiện được trên HTML như kiểm tra thông tin nhập vào, tự động thay đổi hình ảnh… Ví dụ, công ty AppJet sử dụng phiên bản Java hỗ trợ JavaScript bằng cách sử dụng Rhino để đơn giản hóa mã lệnh phía máy chủ. Nhưng năm 2009, Google đã tiếp quản AppJet.

    Ngoài ra, vẫn còn nhiều ứng dụng mới dùng JavaScript, chẳng hạn CouchDB là thư viện nguồn mở do công ty Couch.io hậu thuẫn, sử dụng 2 chức năng JavaScript: Map và Reduce, không sử dụng các truy vấn SQL. 

    R

    R là NNLT dành cho tính toán và phân tích thống kê, có tên gọi ban đầu là S. Ngôn ngữ này lấy cảm hứng từ Scheme với những tính năng mới bổ sung dành cho đồ họa thống kê. R chứa nhiều kỹ thuật thống kê: mô hình hóa tuyến tính, phân tích chuỗi thời gian, phân loại, phân nhóm, đồ họa… Nhiều hệ thống trong R được viết bằng chính ngôn ngữ của nó, giúp cho người dùng dễ theo dõi các giải thuật. Để thực hiện công việc chuyên về tính toán, R có thể liên kết được với ngôn ngữ C, C++ để có thể được gọi trong khi chạy. 

    Do được thừa hưởng từ S, R có nền tảng lập trình hướng đối tượng khá mạnh so với các ngôn ngữ tính toán thống kê khác. Một điểm mạnh khác của R là nền tảng đồ họa của nó, có thể tạo ra những đồ thị chất lượng cao cùng các biểu tượng toán học. Chẳng hạn, sử dụng ngôn ngữ R để phân tích các mô hình thời tiết nhằm tìm kiếm những nơi tốt nhất để xây dựng trạm máy phát điện chạy bằng sức gió.

    Erlang

    Erlang là NNLT nguồn mở được phát triển bởi các nhà khoa học tại phòng thí nghiệm máy tính Ericsson.

    Điểm khác biệt của Erlang so với các ngôn ngữ khác là dành để thiết kế các ứng dụng chạy trên máy tính có nhiều lõi. Ưu thế của Erlang là khả năng chạy ứng dụng song song, nghĩa là nếu máy tính có càng nhiều lõi thì tốc độ chương trình càng nhanh. Tuy nhiên, cần phân biệt giữa quá trình chạy ứng dụng song song trên nhiều lõi với chạy song song dựa trên sự phân chia xử lý theo thời gian CPU máy tính. Erlang tạo ra các ứng dụng chạy song song trên nhiều lõi còn các ngôn ngữ khác (như Java, C, ...) lại tạo ra các ứng dụng chạy song song theo kiểu phân chia theo thời gian.

    Ngôn ngữ này kết hợp lập trình chức năng với máy ảo (có thể biên dịch xuống mã máy). Cấu trúc của NNLT Erlang giúp lập trình viên xây dựng ứng dụng dễ dàng hơn để phân phối trên nhiều lõi và nhiều máy. Ví dụ, Erlang được triển khai thực tế trên các máy chủ và CouchDB và được dùng trong các ứng dụng công nghiệp và thương mại.

    Cobol

    Grace Murray Hopper, là người nổi tiếng trong việc phát hiện lỗi trên những chiếc máy tính lớn (mainframe) đầu tiên, đã phát triển ngôn ngữ Cobol thuộc dạng lâu đời nhất, có từ năm 1959, ngôn ngữ này đã trải qua hàng trăm lần cải tiến kể từ đó. Mục đích của Cobol là hướng đến thương mại, tài chính và các hệ quản lý của các doanh nghiệp cũng như chính phủ. 

    Cobol có nhiều chức năng xử lý tập tin, nhất là theo cách xử lý hàng loạt (batch processing), hỗ trợ lập trình hướng đối tượng và các tính năng lập trình hiện đại khác. Đây cũng là ngôn ngữ chạy nhiều nhất trên các máy tính lớn của doanh nghiệp.

    Những lập trình viên thích Cobol vì cú pháp của nó có khuynh hướng gần giống ngôn ngữ tự nhiên với những danh từ và động từ để có thể hình thành ra một mệnh đề và câu – một kỹ thuật có thể gợi nhớ đến ngôn ngữ Ruby. Mới đây, IBM đã giới thiệu bản phát hành mới nhất là Enterprise Cobol 4.2.
     

    Thực tế, ngôn ngữ Cobol rất ít được giảng dạy trong nhà trường, nhưng nhiều tập đoàn vẫn chú trọng đầu tư. Một nghiên cứu gần đây của Dice.com cho thấy 580 việc làm liên quan đến ngôn ngữ Cobol và 1070 dành cho Ruby.

    CUDA

    CUDA là kiến trúc tính toán song song giúp các LTV có thể khai thác sức mạnh của các nhân xử lý tính toán đồ họa mà trước đây do CPU giữ vai trò then chốt. Các lập trình viên có thể giao tiếp với CUDA thông qua khá nhiều NNLT khác nhau, trong đó có C, C++, Fortran, Java... Kết quả là ngày càng nhiều ứng dụng có thể sử dụng CUDA để xử lý độc lập mà không cần phải tiêu tốn nhiều tài nguyên CPU như trước đây. Nhờ sức mạnh tính toán này, thị trường card đồ họa được mở rộng không chỉ dành riêng cho các game thủ hay những chuyên gia đồ họa.

    Thực chất, CUDA không phải là một ngôn ngữ mà chỉ là phần mở rộng của ngôn ngữ C. Tuy nhiên, một số lập trình viên đang bắt đầu khám phá các kiến trúc song song bên trong của CUDA để đưa vào các trò chơi trên máy tính. 

    CUDA có thể được dùng mô phỏng và tính toán thống kê ở quy mô lớn, hỗ trợ tính toán trong các chip xử lý đồ họa (GPU - Graphics Processing Unit) của NVIDIA thông qua các NNLT phổ biến. Ngoài ra, CUDA cũng được sử dụng trong tính toán sinh học, xử lý khối lượng dữ liệu lớn và nhiều lĩnh vực khác.

    ID: A1101_94