Có cần thiết phải học các thuật toán để trở thành một lập trình viên thực sự? [đóng cửa]


21

Tôi là một lập trình viên PHP và cho đến bây giờ tôi không cần phải học thuật toán ...

Bây giờ tôi bắt đầu học Python (một ngôn ngữ lập trình thực sự), vì tôi cần sử dụng matplotlib. Liệu nó có ý nghĩa để bắt đầu bằng cách đọc một cuốn sách thuật toán Python và sau đó học matplotlib và numpy hay tôi nên nhảy sang matplotlib và numpy?

Trân trọng,


2
Nếu bạn không học thuật toán và hiểu điều gì phù hợp nhất cho một nhiệm vụ nhất định, bạn sẽ có câu trả lời giống như câu hỏi trong câu hỏi này: stackoverflow.com/questions/5498865
kdgregory

1
Có lẽ bạn đã thực hiện một vài thuật toán, mà không thực sự biết tên của họ hoặc lý thuyết đằng sau chúng. Thật khó để tin rằng bất cứ ai cũng có thể thực hiện bất kỳ chương trình hữu ích nào mà không cần thực hiện một số thuật toán.
tdammers

2
thuật toán chỉ là một ý thức chung về Làm thế nào để làm những điều theo cách tối ưu . Trong lập trình, bạn cần sử dụng các tài nguyên tối thiểu và đảm bảo hiệu suất, do đó bạn luôn sử dụng nó. BTW, điều này có nghĩa là Python (một ngôn ngữ lập trình thực sự) ??? PHP cũng tốt như mọi thứ khác. Nó chỉ là ngôn ngữ kịch bản web nhiều hơn và để tâm đến bạn, nó là thứ tốt nhất trong kinh doanh trong thời gian dài.
Pankaj Upadhyay

Câu trả lời:


35

Chắc chắn rồi. Không biết các thuật toán, làm thế nào khác bạn sẽ hiểu làm thế nào một chương trình làm những gì nó làm?

Điều cần thiết là phải hiểu phát triển thuật toán để bạn có thể lập trình hiệu quả hơn và viết chương trình tốt hơn. Bắt đầu, bạn ít nhất nên biết những điều cơ bản của các khái niệm như luồng điều khiển (có thể thông qua tự động hóa trạng thái, nhưng điều đó không phải lúc nào cũng cần thiết) và ký hiệu Big O và cách nó có thể ảnh hưởng đến hiệu suất.


Trong khi tôi đồng ý, người ta nên biết bao nhiêu về quy mô chuyển một phần giới thiệu cho các thuật toán tại một trường cao đẳng cộng đồng địa phương lần thứ hai để trở thành Donald Knuth?
Công việc

Tốt ký hiệu Big Ohno cũ ...

1
Tôi đồng ý với tầm quan trọng của việc biết về độ phức tạp của thuật toán ("ký hiệu O lớn"). Tuy nhiên, tôi hoàn toàn không đồng ý với câu trả lời "hoàn toàn" cho "việc học thuật toán để trở thành một lập trình viên thực sự là điều cần thiết"; trên thực tế, học tốt Python hữu ích hơn nhiều so với việc biết cách sắp xếp danh sách (vì Python sắp xếp danh sách cho bạn) hoặc cách Python xử lý từ điển (mà lập trình viên Python từng cần để thực hiện cơ chế băm?), v.v. các thuật toán đã học bởi vì ngôn ngữ của họ không cung cấp chúng ra khỏi hộp; thời kỳ hiện đại là khác nhau.
Eric O Lebigot

17

Câu trả lời là cả có và không. Bạn không cần biết chi tiết về cách thức hoạt động của các thuật toán khác nhau hoặc lý thuyết đằng sau chúng - đó là công việc của các nhà khoa học máy tính - nhưng bạn cần biết những điều cơ bản, chẳng hạn như thuật toán nào có sẵn để giải quyết một nhiệm vụ cụ thể và cái nào là tốt nhất cho một tình huống nhất định.

Trong trường hợp của bạn, bạn có thể chỉ cần bắt đầu sử dụng các thư viện mà bạn đã đề cập - chúng được xây dựng bởi ai đó chỉ để làm cho cuộc sống của người khác dễ dàng hơn. Bạn chắc chắn không cần phải biết các thuật toán đã được xây dựng để sử dụng nó.


2
+1 cho một nhận xét "hiện đại" như vậy. Các thuật toán học tập và giảng dạy nên được dành riêng cho những người thực sự cần thực hiện chúng.
Eric O Lebigot

6

Vâng, để bạn hiểu cách áp dụng một phương pháp này hơn một phương pháp khác. Bạn cũng không muốn "phát minh lại bánh xe" vì có nhiều thuật toán hiện có đã hoạt động. Nếu bạn không biết họ ở ngoài đó, bạn sẽ lãng phí thời gian để phát minh ra một giải pháp có khả năng yếu hơn và thậm chí không hiểu tại sao nó lại yếu hơn.


3

Các thuật toán cho một lập trình viên là một cái búa cho thợ rèn. Chắc chắn bạn có thể nhận được mà không cần và sử dụng các lựa chọn thay thế để hoàn thành công việc, nhưng nếu bạn muốn làm đúng và làm tốt thì đó là điều cần thiết.

Điểm hay của thuật toán là nó độc lập với ngôn ngữ lập trình, vì vậy hãy học lý thuyết một lần và bạn có thể thực hiện nó bằng bất kỳ ngôn ngữ nào. Đây là một trang web tốt mà tôi đã xây dựng để bắt đầu học từ: www.ambesty.com Họ sử dụng Java nhưng nó đi kèm với mã mẫu để học hỏi. Họ cung cấp các thuật toán ADT và Sắp xếp đơn giản cho các thuật toán phức tạp hơn như thuật toán nén dữ liệu. Đọc rất thú vị. Chúc may mắn


1

Tùy thuộc vào kinh nghiệm PHP của bạn, nếu bạn đang ở giai đoạn mà bạn có thể điều chỉnh các khái niệm lập trình cơ bản từ ngôn ngữ này sang ngôn ngữ khác, hãy làm như vậy . Đây sẽ là cách hiệu quả nhất để dành thời gian của bạn.

Đọc những gì bạn cần làm để tích hợp Matplotlib , numpy và Python. Và sau đó nếu bạn gặp khó khăn, hãy tiếp tục lặn sâu hơn. Tôi đề nghị thứ tự này vì

  • nó ít tốn thời gian
  • có lẽ bạn sẽ không áp dụng mọi thuật toán bạn đọc

1

Nếu bạn đang phát triển các ứng dụng kinh doanh (chỉ), hãy tìm hiểu những điều cơ bản, chẳng hạn như danh sách, hàng đợi, sắp xếp, tìm kiếm chuỗi, v.v. để bạn tìm hiểu thuật ngữ, cách hiệu suất bị ảnh hưởng và đo lường, v.v. Sử dụng tốt hơn thời gian của bạn sẽ là tập trung vào công nghệ mới, các mẫu OO, thiết kế cơ sở dữ liệu hiệu quả, ứng dụng. phương pháp phát triển, và như vậy!


1

Ok - tôi biết đây không phải là chính xác những gì bạn muốn nói, nhưng bạn đã biết các thuật toán (cách làm). Tùy thuộc vào định nghĩa của bạn, bạn có thể lấy mọi progamm làm ví dụ cho một thuật toán.

Vì vậy, đừng sợ hãi. Thật hữu ích khi biết các thuật toán cơ bản, sẽ hữu ích hơn khi biết các cấu trúc dữ liệu cơ bản nhưng thậm chí còn tốt hơn khi biết thiết kế - "các mẫu". Sau đó, các thuật toán cơ bản và cấu trúc dữ liệu sẽ được triển khai trong khung lựa chọn của bạn, nhưng các mẫu rất có thể sẽ không ...


0

Trước tiên hãy học python nếu bạn cảm thấy thích nó, bạn có thể nghiên cứu các thuật toán; Bởi vì thuật toán không phải là python cụ thể - chúng nói chung là tất cả các ngôn ngữ.


0

Trước khi tôi bắt đầu tại trường Đại học, tôi đã tin rằng mình là một lập trình viên khá giỏi và tôi đã có một vài năm kinh nghiệm làm việc. Nhưng sau khi tôi học về các thuật toán và cơ sở dữ liệu tại trường Đại học, tôi cảm thấy đó là kiến ​​thức mà bạn phải có! Nó là điều cần thiết cho mọi thứ bạn làm. Mặc dù bạn có thể không sử dụng kiến ​​thức đó trực tiếp mỗi ngày, nhưng nó vẫn sẽ ở trên đỉnh đầu của bạn, và nó sẽ giúp bạn trở thành một lập trình viên tốt hơn.

Bạn học được rất nhiều về hiệu suất, và mặc dù hiệu suất thường không phải là số một, việc biết các thuật toán sẽ ngăn bạn làm một số thứ ngu ngốc, với hiệu suất thực sự tồi. Mặc dù hiệu suất không phải là số một, không có lý do gì để không sử dụng kiến ​​thức đó để đưa ra quyết định đúng đắ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.