Tôi nên học ngôn ngữ nào cho khoa học tính toán?


11

Tôi hoàn toàn mới đối với khái niệm khoa học tính toán và đang tìm kiếm một điểm khởi đầu tốt.

Tôi hiểu rằng không có ngôn ngữ khách quan nhất, nhưng tôi muốn học một ngôn ngữ có sự hiện diện mạnh mẽ và nổi bật liên quan đến khoa học tính toán - một ngôn ngữ được coi là có khả năng và hiệu quả đặc biệt.

Để bắt đầu, tôi đã nghiêng về mô hình hóa liên quan đến liên kết và tương tác nguyên tử, với yêu cầu mô phỏng / mô phỏng đồ họa.

Có một số ngôn ngữ có xu hướng tốt hơn cho một số lĩnh vực hơn các ngôn ngữ khác (ví dụ vật lý so với toán học thuần túy)? Hoặc là chọn một ngôn ngữ dựa trên các yếu tố khác?

Tôi đã nghe cái tên Fortran bị ném rất nhiều.

Gợi ý?


1
C ++ và Fortran là những ngôn ngữ nổi tiếng trong cộng đồng. Gần đây, bạn có thể thấy sự gia tăng trong việc sử dụng các ngôn ngữ động. Thường thì bạn chọn thư viện của bạn chứ không phải ngôn ngữ của bạn.
vanCompute

9
Tôi nhớ lại câu nói rằng các lập trình viên thực sự có thể viết Fortran bằng bất kỳ ngôn ngữ nào.
hardmath

1
Đây là một câu hỏi rất giống với rất nhiều câu trả lời: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Tôi hiểu rằng không có ngôn ngữ khách quan nhất" - chính xác, vậy tại sao bạn không học cách không biết ngôn ngữ, để bạn có thể viết bằng bất cứ ngôn ngữ nào ném vào bạn?
JM

2
Bạn phải thành thạo tiếng Anh. Không có nó, bạn sẽ không nhận được bất cứ nơi nào trong Khoa học tính toán.
Julian

Câu trả lời:


15

Chủ yếu là các thư viện số có sẵn cho bạn sẽ giúp hoàn thành nhiệm vụ của bạn. C / C ++ có một số lượng lớn các thư viện số được triển khai cho chúng, nhưng là ngôn ngữ cấp thấp không phải là thứ tốt nhất để tạo ra một cái gì đó nhanh chóng.

Tôi nghĩ rằng để nhanh chóng tiến tới một giải pháp, tôi khuyên bạn nên sử dụng một cái gì đó như Matlab hoặc Mathematica. Họ có bộ công cụ lớn và rất cao cấp. Rất có thể, việc triển khai của bạn ở đó sẽ không mở rộng quy mô cho việc sử dụng sản xuất, nhưng nó có thể là một sân chơi tuyệt vời để thử các phương pháp khác nhau. Khi bạn biết một con đường cần thực hiện, bạn luôn có thể triển khai một cái gì đó trong C / C ++ hiệu quả hơn.


4
Nhiều người - cả trong và ngoài học viện - không thực sự tin tưởng mã trừ khi nó có ít nhất một bộ thử nghiệm tự động tối thiểu. Tôi không biết công cụ này như thế nào đối với những thứ như vậy trong matlab và mathicala, nhưng có một số gói đẹp cho các ngôn ngữ chính hơn như Python và C ++.
cjordan1

3
MATLAB có MATLAB xUnit, nhưng Python và C ++ có nhiều bộ thử nghiệm hơn (và theo tôi, tốt hơn).
Geoff Oxberry

24

Con trăn!

  1. Bắt đầu trực tiếp bằng cách sử dụng thư viện numpy , tập lệnh nhỏ và vỏ tương tác ipython .
  2. Nâng cao hơn với sự giúp đỡ của nhiều sách và hướng dẫn miễn phí .
  3. Có năng suất cao hơn bằng cách sử dụng scipy như một lối vào cho các thói quen số và matplotlib hiệu suất cao để trực quan hóa
  4. Tận dụng các mô-đun phát triển và mạnh mẽ để tính toán khoa học như Krypy , FeNiCSnhiều mô-đun khác
  5. Lưu ý rằng sự chuyển đổi suôn sẻ giữa lập trình hướng đối tượng và phẳng và mô đun vốn có của Python làm cho các dự án lớn hơn dễ xử lý.
  6. Tạo mã của bạn nhanh như C hoặc Fortran bằng cách viết lại các phần quan trọng trong cython . Bạn cũng có thể dễ dàng bao gồm thói quen viết bằng Fortran hoặc C .

Điều này diễn giải những gì tôi nghĩ là cách tốt nhất để tiếp cận một vấn đề trong điện toán khoa học. Bắt đầu với việc xử lý vấn đề bằng cách chơi xung quanh với các ví dụ đồ chơi trong các kịch bản nhỏ. Trở nên có hệ thống hơn và thiết lập một bộ mã. Sau đó làm cho mã của bạn hoạt động !!! Cuối cùng, nếu cần thiết, làm tối ưu hóa mã. Đừng phát minh lại bánh xe và đừng tối ưu hóa sớm.

(Các kìm bổ sung: Python miễn phí - không có vấn đề về giấy phép, cộng đồng lớn, ví dụ như trên stackoverflow, các mô-đun để lập trình tốt như kiểm tra đơn vị hoặc ghi nhật ký ...)




5

Fortran: Matlab thích, dễ học và dễ sử dụng và nhanh chóng có hiệu quả nhưng chỉ tốt cho điện toán số

C ++: Khó thành thạo (sẽ khiến bạn mất nhiều năm) nhưng được sử dụng rất nhiều ngoài tính toán số (bảo mật công việc)

Python: Được đề xuất rất nhiều trong những ngày này nhưng quá chậm cho công việc không tầm thường. Bạn sẽ viết tất cả các hạt nhân tính toán đắt tiền tiềm ẩn của mình bằng C và sau đó gọi chúng từ Python, điều đó có nghĩa là bạn sẽ phải học (ít nhất) hai ngôn ngữ


1
Tôi sẽ lập luận rằng đường cong học tập cho Fortran và C ++ có phần giống nhau. Tôi đã chọn đủ các kỹ năng trong cả hai để giải quyết vấn đề đơn giản hơn trong vài tháng, mỗi vấn đề đến từ nền tảng của java, matlab và c #. Tùy thuộc vào ngôn ngữ mà ai đó biết, tôi có thể thấy c ++ dễ học hơn nhiều so với fortran vì hầu hết các mã lớn được viết bằng các phiên bản ngày.
Godric Seer

@Godric: Với ~ 600 trang, tiêu chuẩn Fortran 2008 chưa bằng một nửa so với C ++ 11 (~ 1300 trang)
stali

1
@stali, Có, nhưng ví dụ, tôi làm việc với khoảng một phần tư triệu dòng mã kế thừa được viết bằng Fortran77. Vì vậy, tôi đã phải học phong cách 77 để có thể làm việc với nó, 90-95 để thực hiện các thay đổi có thể duy trì cho nó (vì các khối phổ biến là đáng ghét), và sau đó '08 để không bị mắc kẹt trong một thập kỷ qua. Fortran, trong khi một ngôn ngữ cũ, đã trải qua những thay đổi to lớn trong nhiều thập kỷ qua, và trừ khi bạn bắt đầu từ đầu, việc học di sản của nó là không tầm thường.
Godric Seer

2
Tôi không đồng ý với tuyên bố rằng Python "quá chậm đối với công việc không tầm thường". Thật vậy, nếu bạn viết các phép nhân vectơ ma trận (và tương tự) hoàn toàn bằng Python, bạn sẽ có một khoảng thời gian tồi tệ. Việc trừu tượng hóa một số ngôn ngữ hiệu quả hơn đã được thực hiện cho bạn: NumPy, Scipy có thể có tất cả những gì bạn cần. Hoặc một trong 50.000 gói khác.
Nico Schlömer

1
@ NicoSchlömer Tôi đồng ý với "quá chậm cho công việc không tầm thường". Mô phỏng của tôi bằng Python (Numpy / Scipy) chậm hơn so với cùng mã trong phiên bản Fortran90 khoảng 10 lần. Tôi khuyên dùng Fortran90 hoặc C ++.
fronthem

4

Câu trả lời ngắn
Tìm hiểu về những điều cơ bản của mã hướng đối tượng thông qua python và tìm hiểu về những điều cơ bản của khoa học máy tính thông qua C. Khi bạn ít nhất cũng khá ổn với cả hai ngôn ngữ khác học C ++, bởi vì bạn có thể làm được khá nhiều thứ trong C ++ và làm cho nó chạy nhanh (mặc dù phải mất mãi mãi để viết).

Câu trả lời dài hơn
Vì vậy, đây là điều: đối với dự án đầu tiên của bạn, bạn sẽ ở trong phòng thí nghiệm của ai đó làm việc với mã của người khác. Trong trường hợp đó, họ sẽ là người chọn ngôn ngữ lập trình. Mà cá nhân tôi nghĩ là loại tuyệt vời!

Ý tôi là, khi mới bắt đầu, bạn sẽ không thực sự biết mông của bạn từ khuỷu tay của bạn trong một thời gian, và đặc biệt là khi bạn không biết những gì bạn đang làm, học lập trình có thể là vay mượn. Vì vậy, thật tốt khi có cấu trúc và giới hạn xuất phát từ việc làm việc với mã của người khác, và thật tốt khi có động lực và hứng thú chỉ có thể đến từ khi làm việc trên một dự án thực sự.

Tuy nhiên, bất kể ngôn ngữ nào mà phòng thí nghiệm của bạn sử dụng (đặc biệt nếu đó là Matlab), có lẽ bạn nên học python, C và C ++. Đặc biệt, nếu bạn không đến từ nền tảng khoa học máy tính, bạn PHẢI đọc "Ngôn ngữ lập trình C" của Kernighan và Ritchie. Nó 35 tuổi và mang lại ấn tượng khác biệt rằng các tác giả của nó đã lập trình trên thẻ đục lỗ, nhưng đó là loài chim hiếm nhất: một cuốn sách khoa học máy tính vượt thời gian. Nó sẽ làm cho nhiều thứ rất rõ ràng hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.