Các ngôn ngữ cấp cao như Python và Ruby thường được đề xuất vì chúng ở cấp độ cao và cú pháp khá dễ đọc. Tuy nhiên, tất cả các ngôn ngữ này đều có sự trừu tượng hóa cho các cấu trúc dữ liệu chung. Không có gì ngăn cản bạn triển khai các phiên bản của riêng mình như một bài tập học tập nhưng bạn có thể thấy rằng mình đang xây dựng cấu trúc dữ liệu cấp cao trên các cấu trúc dữ liệu cấp cao khác, điều này không nhất thiết phải hữu ích
Ngoài ra, Ruby và Python là các ngôn ngữ được gõ động. Điều này có thể tốt nhưng nó cũng có thể gây nhầm lẫn cho người mới bắt đầu và có thể khó bắt lỗi hơn [ban đầu] vì chúng thường không rõ ràng cho đến khi chạy
C ở một cực khác. Thật tốt nếu bạn muốn tìm hiểu các chi tiết thực sự ở cấp độ thấp như cách quản lý bộ nhớ nhưng việc quản lý bộ nhớ đột nhiên là một vấn đề quan trọng cần cân nhắc, chẳng hạn như cách sử dụng chính xác malloc[]/free[]. Điều đó có thể gây mất tập trung. Ngoài ra, C không hướng đối tượng. Đó không phải là một điều xấu mà chỉ đơn giản là đáng chú ý
C++
C++ đã được đề cập. Như tôi đã nói trong phần nhận xét, tôi nghĩ đây là một lựa chọn tồi tệ. C ++ cực kỳ phức tạp ngay cả trong cách sử dụng đơn giản và có một lượng "gotchas" vô lý. Ngoài ra, C++ không có lớp cơ sở chung. Điều này rất quan trọng vì các cấu trúc dữ liệu như bảng băm phụ thuộc vào việc có một lớp cơ sở chung. Bạn có thể triển khai phiên bản cho lớp cơ sở danh nghĩa nhưng nó kém hữu ích hơn một chút
Java
Java cũng đã được đề cập. Nhiều người thích ghét Java và sự thật là ngôn ngữ này cực kỳ dài dòng và thiếu một số tính năng ngôn ngữ hiện đại hơn [ví dụ: bao đóng] nhưng không có điều nào thực sự quan trọng. Java được gõ tĩnh và có bộ sưu tập rác. Điều này có nghĩa là trình biên dịch Java sẽ phát hiện nhiều lỗi mà các ngôn ngữ được nhập động sẽ không phát hiện được [cho đến khi chạy] và không xử lý các lỗi phân đoạn [điều đó không có nghĩa là bạn không thể rò rỉ bộ nhớ trong Java; rõ ràng là bạn có thể]. Tôi nghĩ Java là một lựa chọn tốt
C#
C# ngôn ngữ giống như một phiên bản hiện đại hơn của Java. Giống như Java, nó là ngôn ngữ biên dịch trung gian được quản lý [thu gom rác] chạy trên máy ảo. Mọi ngôn ngữ khác được liệt kê ở đây ngoài C/C++ cũng chạy trên máy ảo nhưng Python, Ruby, v.v. được diễn giải trực tiếp thay vì được biên dịch thành mã byte
Về cơ bản, C# có những ưu và nhược điểm giống như Java
Haskell [vv]
Cuối cùng, bạn có ngôn ngữ chức năng. Haskell, OCaml, Scheme/Lisp, Clojure, F#, v.v. Những điều này nghĩ về tất cả các vấn đề theo một cách rất khác và đáng để học ở một số điểm nhưng một lần nữa, nó phụ thuộc vào những gì bạn muốn học. lập trình chức năng hoặc cấu trúc dữ liệu? . Nếu bạn học một ngôn ngữ chức năng tại một thời điểm nào đó [mà tôi muốn giới thiệu], Haskell là một lựa chọn an toàn và tốt
Lời khuyên của tôi
Chọn Java hay C#. Cả hai đều có các IDE tuyệt vời, miễn phí [Eclipse, Netbeans và Phiên bản cộng đồng IntelliJ cho Java, Visual Studio Express cho C#, phiên bản cộng đồng Visual studio] giúp viết và chạy mã nhanh chóng. Nếu bạn không sử dụng cấu trúc dữ liệu riêng phức tạp hơn một mảng và bất kỳ đối tượng nào bạn tự viết, về cơ bản bạn sẽ học điều tương tự như trong C/C++ nhưng không cần phải thực sự quản lý bộ nhớ
Hãy để tôi giải thích. một bảng băm có thể mở rộng cần được thay đổi kích thước nếu đủ các phần tử được thêm vào. Trong bất kỳ triển khai nào, điều đó có nghĩa là thực hiện điều gì đó như tăng gấp đôi kích thước của cấu trúc dữ liệu sao lưu [thường là một mảng] và sao chép các phần tử hiện có. Việc triển khai về cơ bản giống nhau trong tất cả các ngôn ngữ bắt buộc nhưng trong C/C++, bạn phải xử lý các lỗi phân đoạn khi bạn không phân bổ hoặc phân bổ chính xác thứ gì đó
Python hoặc Ruby [cái nào thực sự không quan trọng] sẽ là lựa chọn tiếp theo của tôi [và rất gần với hai cái còn lại] chỉ vì lúc đầu, kiểu gõ động có thể gặp vấn đề
Tôi cảm thấy như tôi đã học được hàng tháng trong một tuần. Tôi thích cách Codecademy sử dụng cách học thông qua thực hành và đưa ra những thử thách lớn để giúp người học hiểu một khái niệm và chủ đề mới. Học viên Học viện mật mã Rodrigo @ Vương quốc AnhBài viết này dành cho những người mới bắt đầu học các thuật toán và tự hỏi nó sẽ ảnh hưởng như thế nào đến việc nâng cao kỹ năng nghề nghiệp/lập trình của họ. Nó cũng dành cho những người thắc mắc tại sao các công ty lớn như Google, Facebook và Amazon lại thuê những lập trình viên đặc biệt giỏi trong việc tối ưu hóa Thuật toán
Thuật toán là gì?
Một cách không chính thức, một thuật toán không là gì ngoài việc đề cập đến các bước để giải quyết vấn đề. Chúng thực chất là một giải pháp
Ví dụ, một thuật toán để giải quyết vấn đề về giai thừa có thể giống như thế này
Vấn đề. Tìm giai thừa của n
Initialize fact = 1 For every value v in range 1 to n: Multiply the fact by v fact contains the factorial of n
Ở đây, thuật toán được viết bằng tiếng Anh. Nếu nó được viết bằng ngôn ngữ lập trình, chúng tôi sẽ gọi nó là mã thay thế. Đây là mã để tìm giai thừa của một số trong C++
int factorial[int n] {
int fact = 1;
for [int v = 1; v