[06/03/2020 01:20] PYTHON VÀ JULIA: NGÔN NGỮ NÀO TỐT NHẤT DÀNH NÀO . . .


#1

Nguồn post: https://www.facebook.com/257768141347267_971844603272947
PYTHON VÀ JULIA: NGÔN NGỮ NÀO TỐT NHẤT DÀNH NÀO CHO DATA SCIENCE

:shamrock:Trong số hầu hết các trường hợp sử dụng ngôn ngữ Python, lĩnh vực phân tích dữ liệu có thể là lĩnh vực lớn nhất và quan trọng nhất. Hệ sinh thái của Python bao gồm các thư viện, công cụ và các chương trình ứng dụng hỗ trợ việc tính toán và phân tích dữ liệu nhanh hơn và tiện dụng hơn.

:shamrock:Nhưng với các nhà lập trình viên đang sử dụng ngôn ngữ lập trình Julia, một ngôn ngữ nhắm thẳng tới việc tính toán dữ liệu khoa học, máy học, khai phá dữ liệu, các phép toán tuyến tính ở quy mô lớn-phân tán-tính toán song song, thì rõ ràng ở khía cạnh này, Python không đủ nhanh và không đủ tiện dụng. Julia nhắm tới việc cung cấp cho các nhà khoa học và các nhà phân tích dữ liệu một công cụ không chỉ giúp giảm thời gian xây dựng chương trình mà còn đem lại khả năng thực thi chương trình ở tốc độ cực nhanh.

:fire:NGÔN NGỮ LẬP TRÌNH JULIA LÀ GÌ?

:apple:Được tạo ra từ năm 2009 bởi một nhóm 4 người và được công bố ra cộng đồng năm 2012. Julia được xây dựng để giải quyết các vấn đề cấp bách mà Python và các ngôn ngữ khác chưa đáp ứng được trong việc tính toán khoa học và xử lý dữ liệu. “Chúng tôi rất tham vọng”, họ viết. Họ muốn nhiều hơn thế:

“Chúng tôi muốn một ngôn ngữ mã nguồn mở với license ‘tự do’. Chúng tôi muốn tốc độ của C và sự linh động như Ruby. Chúng tôi muốn một ngôn ngữ có tập lệnh giống như Lisp nhưng rõ ràng, tương tự như các toán tử trên Matlab. Chúng tôi muốn những thứ có thể sử dụng rộng rãi như ở Python, dễ dàng cho tính toán thống kê như R, xử lý kí tự (String) tự nhiên thư Perl, và cũng mạnh mẽ trong việc tính toán đại số tuyến tính như Matlab, và có cấu trúc chặt chẽ với nhau như Shell. Những thứ mà thật đơn giản để học và làm mọi hacker thấy hạnh phúc khi sử dụng. Chúng tôi muốn nó là ngôn ngữ có tương tác và được biên dịch trước khi chạy.”

:apple:Đây là một vài cách mà Julia đã được xây dựng như kỳ vọng:

:white_check_mark:Julia là ngôn ngữ biên dịch, không phải thông dịch: Để chạy nhanh hơn ở thời điểm runtime, Julia sử dụng trình biên dịch just-in-time (JIT) sử dụng framework biên dịch LLVM. Ở mức tốt nhất, Julia có thể đạt được tốc độ như C.

:white_check_mark:Julia có tính tương tác. Julia chứa vòng lặp REPL (read-eval-print loop), hoặc các dòng lệnh tương tác tương tự như Python cung cấp. Các tập lệnh chạy một lần và câu lệnh có thể được thực thi ngay.

:white_check_mark:Julia có cú pháp đơn giản. Cú pháp của Julia tương tự như Python, ngắn ngọn, dễ thể hiện và cực mạnh mẽ.

:white_check_mark:Julia kết hợp điểm mạnh của việc khai báo kiểu tĩnh và động (dynamic vs static typing). Bạn có thể khai báo kiểu tường minh như: số nguyên không dấu 32 bit. Hoặc có thể tạo cấu trúc kiểu dữ liệu kế thừa cho các tình huống sử dụng kiểu dữ liệu cụ thể - ví dụ: để viết hàm chấp nhận đối số là số integer mà không cần độ dài hoặc dấu (signing). Bạn thậm chí có thể không cần khai báo kiểu nếu không thật sự cần thiết trong các tình huống nhất định.

:white_check_mark:Julia có thể gọi các hàm của Python, C, Fortran: Julia có thể gọi trực tiếp các hàm thư viện bên ngoài viết bằng C và Fortran. Nó cũng có thể gọi tới hàm của Python như cách sử dụng thư viện PyCall, và thậm chí có thể chia sẻ dữ liệu với các chương trình của Python.

:white_check_mark:Julia hỗ trợ metaprogramming: Chương trình Julia có thể sinh ra các chương trình Julia khác, và thậm chí có thể tự sửa code của chính nó. Với tính năng này, Julia khá giống với Lisp.

:white_check_mark:Julia có hệ thống debug đầy đủ các tính năng: Julia 1.1 giới thiệu bộ debugging, cho phép thực thi code ở REPL và cho phép đi từng bước tới kết quả, kiểm tra giá trị các biến, đặt breakpoints trong code. Bạn thậm chí có thể tiến hành các tác vụ sâu hơn như đi vào các dòng code được sinh ra bởi chính chương trình.

:fire:JULIA VS. PYTHON: ĐIỂM MẠNH CỦA JULIA

Julia ra đời cho mục đích tính toán liên quan đến số và khoa học. Do đó không ngạc nhiên là Julia có rất nhiều tính năng nổi bật với các trường hợp như:

:white_check_mark:Tốc độ nhanh. Julia sử dụng trình biên dịch JIT và khai báo kiểu tường minh nên có thể tối ưu hơn Python. Python có thể chạy nhanh hơn nếu sử dụng các thư viện ngoài hay trình biên dịch bên thứ 3 (PyPy), và các công cụ tối ưu như Cython. Nhưng Julia được thiết kế từ lõi cho vấn đề này.

:white_check_mark:Julia có cú pháp thân thiện với các phép tính toán học. Mục tiêu chính của người dùng Julia là những người sử dụng ngôn ngữ cho việc tính toán khoa học giống như Matlab, R, Mathematica, Octave. Cú pháp của Julia cho tính toán toán học giống như cách các công thức toán học được viết hàng ngày, rất dễ cho những người không phải là lập trình viên có thể dễ dàng tiếp cận.

:white_check_mark:Julia có trình quản lý bộ nhớ tự động. Giống Python, Julia không làm phức tạp hoá chương trình của người dùng với các toán tử allocate hay giải phóng bộ nhớ. Và nó cung cấp vài công cụ cho phép việc điều khiển thực thi việc giải phóng vùng nhớ Garbage collection. Ý tưởng là nếu bạn chuyển qua Julia, bạn sẽ không mất đi những ưu điểm mà Python mang lại.

:white_check_mark:Julia cung cấp khả năng tính toán song song tối ưu. Toán học và các phép tính toán khoa học được ưu tiên khi bạn có thể sử dụng toàn bộ tài nguyên trên máy tính, đặc biệt là từ môi trường đa nhân của CPU. Cả Python và Julia có thể chạy các phép toán song song. Tuy nhiên phương pháp của Python đòi hỏi dữ liệu được chuyển định dạng (serialize và deserialize) giữa các luồng hoặc các node thực thi, trong khi đó việc tính toán song song trên Julia thì được tối ưu hơn nhiều. Các cú pháp về tính toán song song trên Julia đơn giản và dễ tiếp cận hơn so với Python, và do đó đem đến ít rào cản hơn với người tiếp cận.

:white_check_mark:Julia đang phát triển thư viện riêng cho học máy. Flux chính là thư viện máy học được phát triển trên Julia với rất nhiều các model sẵn có cho nhiều trường hợp phổ biến. Vì được viết hoàn toàn trên Julia, nó có thể được tùy biến theo nhu cầu của người dùng, và được tối ưu từ lõi nên hiệu năng của thư viện là rất tốt.

:fire:JULIA VS. PYTHON: ĐIỂM MẠNH CỦA PYTHON

Cho dù Julia được tạo ra cho việc tính toán khoa học, ít nhiều Python vẫn giữ một vị trí quan trọng. Python cung cấp các công cụ tối ưu cho các nhà khoa học dữ liệu. Một vài lý do mà Python có thể là ‘best choice’ cho lĩnh vực khoa học dữ liệu là vì:

:white_check_mark:Python sử dụng cách đánh phần tử mảng bắt đầu từ 0. Trong hầu hết các ngôn ngữ, trong đó có Python và C, đều sử dụng 0 là index đầu tiên của mảng, string[0] trong Python là phần tử đầu tiên của xâu. Julia sử dụng 1 là phần từ đầu tiên của mảng. Điều này không phải là tùy tiện, Julia dựa trên căn cứ về việc tính toán toán học và các ứng dụng khoa học giống như Mathematica đều sử dụng 1 là index đầu tiên của mảng.

:white_check_mark:Python không tải quá nhiều thứ lúc khởi động chương trình. Chương trình của Python có thể chậm hơn so với Julia nhưng môi trường chạy Python có thể nói là nhẹ nhàng hơn nhiều, và nó thường tốn ít thời gian để khởi động. Với JIT của Julia, nó giúp Julia chạy nhanh hơn nhưng lại khá nặng nề khi mới bật chương trình. Nếu khối lượng công việc lớn, Julia sẽ giúp ích rất nhiều cho bạn, ngược lại thì Python sẽ là lựa chọn thông minh hơn.

:white_check_mark:Python phát triển lâu đời hơn. Ngôn ngữ Julia còn khá mới mẻ cho dù được khởi đầu từ 2009, và cũng chưa có quá nhiều tính năng so với tuổi đời 30 năm của Python.

:white_check_mark:Python có rất nhiều thư viện được phát triển bởi bên thứ 3. Cộng đồng phát triển mở và lợi ích của việc sử dụng thư viện của bên thứ 3 biến ngôn ngữ này thành ngôn ngữ hấp dẫn bậc nhất. Julia còn mới nên cộng đồng và các phần mềm hỗ trợ còn khá bé. Nếu sử dụng Julia, trong bài toán của bạn có thể phải sử dụng đến một số thư viện viết bằng C hoặc Python do số thư viện của Julia còn ít, trường hợp đó chương trình sẽ có hiệu năng thấp hơn so với các thư viện viết trên Julia. Các thư viện như Flux hay Knet mang đến cho Julia một lợi thế nhất định trong việc tính toán cho máy học (machine learning) và học sâu (deep learning), tuy nhiên phần lớn các tác vụ này thực thế có thể làm được với TensorFlow hay PyTorch.

:white_check_mark:Python có hàng triệu người dùng toàn cầu. Một ngôn ngữ sẽ chẳng là gì cả nếu không có cộng đồng lớn, luôn hoạt động và đóng góp thường xuyên. Những người yêu thích Julia thực tế đang phát triển nhưng là một phần quá nhỏ bé so với cộng đồng Python. Điều đó đem lại lợi thế lớn cho ngôn ngữ có tuổi đời hơn 30 năm này.

:white_check_mark:Python đang dần tối ưu để chạy nhanh hơn. Cùng với việc cải tiến trình thông dịch Python cho việc hỗ trợ đa luồng và tính toán song song, Python cũng dần được tối ưu để dễ dàng tăng tốc. Project mypyc giúp việc chuyển đổi các chương trình có đánh dấu kiểu (type-annotated) thành ngôn ngữ native như C và tối ưu hơn Cython. Nó có thể mang đến hiệu năng tăng gấp 4 lần, đồng thời sẽ nhanh hơn nhiều với các tính toán toán học đơn thuần.

:maple_leaf:Cre: Serdar Yegulalp

:maple_leaf:Dịch: Tech Zone

:maple_leaf:Link bài dịch: https://www.facebook.com/techzonefun/posts/148891706721312

:maple_leaf:Link gốc: https://www.itworld.com/article/3241107/julia-vs-python-which-is-best-for-data-science

#share #laptrinh #python #julia #ngonngulaptrinh


#2

Ngôn ngữ nào công ty yêu cầu xài thì mình xài thôi :))


#3

Chưa thấy julia phổ biến lắm


#4

julia thiếu 1 yếu tố quan trong cho ngôn ngữ cũng như dân data science là cộng đồng hỗ trợ,


#5

Hi, According to me Python is best for preogrammers because it is a general-purpose interpreted, interactive , object- oriented, and a very powerful programming language with dynamic semantics. It is a very easy language to learn. Python is one of those rare languages that could claim to be both easy and strong. Python’s elegant syntax and dynamic typing together with its interpreted nature makes it a perfect language for scripting and robust application development in many areas on giant platforms.