Toán học có cần thiết cho lập trình không? [đóng cửa]


117

Tôi tình cờ tranh luận với một người bạn trong những ngày học đại học rằng liệu toán cao cấp có cần thiết cho bất kỳ lập trình viên kỳ cựu nào không. Anh từng tranh luận gay gắt phản đối điều đó. Ông nói rằng các lập trình viên chỉ cần kiến ​​thức toán học cơ bản từ toán trung học hoặc năm mới đại học, không hơn không kém, và hầu như tất cả các nhiệm vụ lập trình có thể đạt được mà không cần đến toán cao cấp. Tuy nhiên, ông lập luận rằng các thuật toán là tài sản cơ bản & phải có đối với các lập trình viên.

Lập trường của tôi là tất cả những tiến bộ của khoa học máy tính hầu như chỉ phụ thuộc vào những tiến bộ của toán học, và do đó kiến ​​thức sâu rộng về toán học sẽ giúp ích rất nhiều cho các lập trình viên khi họ làm việc với những vấn đề khó khăn trong thế giới thực.

Tôi vẫn không thể giải quyết bên nào của các lập luận là đúng. Bạn có thể cho chúng tôi biết lập trường của bạn, từ kinh nghiệm của riêng bạn?


7
Mười năm sau, tôi gọi cho giáo viên dạy toán cho hs của mình chỉ để nói với thầy rằng tôi chưa bao giờ sử dụng toán cao cấp trong cả sự nghiệp của mình. Đi nhanh, tôi biết, nhưng câu hỏi tuyệt vời! Cộng với một.
Chris McCall


Vui lòng xem câu trả lời được bình chọn cao nhất cho câu hỏi này .
Boris Stitnicky

Đúng hơn là. Đóng, điều này sẽ được chuyển đến các lập trình viên.
Chris Cudmore

Câu trả lời:


111

Để trả lời câu hỏi của bạn như nó đã được đặt ra, tôi sẽ phải nói, "Không, toán học không cần thiết cho lập trình". Tuy nhiên, như những người khác đã gợi ý trong chủ đề này, tôi tin rằng có mối tương quan giữa việc hiểu toán học và khả năng "suy nghĩ theo thuật toán". Nghĩa là, có thể suy nghĩ trừu tượng về số lượng, quá trình, mối quan hệ và chứng minh.

Tôi bắt đầu lập trình khi tôi khoảng 9 tuổi và có thể nói là tôi đã học được nhiều toán học vào giai đoạn đó. Tuy nhiên, với một chút nỗ lực, tôi đã có thể hiểu các biến, cho các vòng lặp, các câu lệnh goto (tha cho tôi, tôi là Vic 20 BASIC và tôi chưa đọc bất kỳ Dijkstra nào) và hình học tọa độ cơ bản để đưa đồ họa lên màn hình .

Cuối cùng tôi đã tiếp tục hoàn thành bằng cấp danh dự về Toán học thuần túy với bằng phụ trong Khoa học máy tính. Mặc dù tôi chủ yếu tập trung vào phân tích, tôi cũng nghiên cứu khá nhiều toán học rời rạc, lý thuyết số, logic và lý thuyết tính toán. Ngoài việc có thể áp dụng một số ý tưởng từ thống kê, lý thuyết xác suất, phân tích vectơ và đại số tuyến tính vào lập trình, có rất ít toán học mà tôi đã nghiên cứu có thể áp dụng trực tiếp vào lập trình của tôi trong thời gian tốt nghiệp đại học và lập trình thương mại và nghiên cứu mà tôi đã làm sau đó.

Tuy nhiên, tôi thực sự tin rằng các phương pháp tư duy chính thức mà toán học yêu cầu - suy luận cẩn thận, tìm kiếm các ví dụ phản chứng, xây dựng cơ sở tiên đề, xác định mối liên hệ giữa các khái niệm - đã giúp ích rất nhiều khi tôi giải quyết các dự án lập trình lớn và phức tạp.

Xem xét cách các vận động viên tập luyện cho môn thể thao của họ. Ví dụ, các cầu thủ bóng đá chắc chắn dành nhiều thời gian đào tạo các kỹ năng bóng đá cơ bản. Tuy nhiên, để cải thiện thể lực chung, họ cũng có thể dành thời gian đến phòng tập thể dục trên xe đạp hoặc máy chèo thuyền, tập tạ, v.v.

Học toán có thể được ví như tập tạ hoặc tập luyện chéo để cải thiện trí lực và sức chịu đựng của bạn để lập trình. Việc luyện tập các kỹ năng lập trình cơ bản là hoàn toàn cần thiết nhưng học toán là một hoạt động rèn luyện trí óc đáng kinh ngạc giúp cải thiện khả năng phân tích cốt lõi của bạn.


6
Tôi muốn nói thêm rằng toán học không chỉ là bài tập tạ để tăng cường trí lực mà còn mở ra cánh cửa cho những vấn đề và giải pháp mới. Ví dụ, trong quá trình thực tập xử lý hình ảnh của tôi, không có cách nào tôi có thể triển khai các thuật toán loại bỏ nhiễu của chúng tôi nếu không hiểu rõ về PDE. Mã kết quả rất đơn giản, nhưng rất chính xác. Và toán học là thứ đưa chúng ta đến đó. Tuyệt vời hơn nữa là vẻ đẹp của những công thức này. Một biểu thức PDE nhỏ có thể dịch sang một vài trang mã. Nếu không có công thức ban đầu, thật khó để biết bạn sẽ kết thúc với nó như thế nào.
Joe

Toán học không cần thiết để lập trình, bởi vì lập trình toán học. Nó có thể là một phép toán hay hoặc một phép toán dở (như khi tiếng gọi dài của đười ươi được chuyển ngữ sang ngôn ngữ Ook ), nhưng bất cứ khi nào một lập trình viên thiết kế một mô hình đối tượng của một số biến đổi, ze (thường là vô tình) thực hiện một hành động toán học. Vì vậy, một lần nữa, người ta không cần phải đọc sách toán để lập trình, nhưng điều đó không thay đổi gì trên thực tế rằng lập trình là toán học, và rằng (như Euclid đã nói), không có con đường hoàng gia nào đến nó.
Boris Stitnicky

56

Trong khi toán học nâng cao có thể không cần thiết để lập trình (trừ khi bạn đang lập trình khả năng toán học cao cấp) thì quá trình suy nghĩ của lập trình và toán học rất giống nhau. Bạn bắt đầu với cơ sở của những điều đã biết (tiên đề, lý thuyết đã được chứng minh trước đó) và cố gắng đến với một nơi nào đó mới. Bạn không thể bỏ qua các bước. Nếu bạn bỏ qua các bước, thì bạn bắt buộc phải điền vào chỗ trống. Đó là một quá trình suy nghĩ quan trọng khiến cả hai cực kỳ giống nhau.

Ngoài ra, các nhà toán học và lập trình đều suy nghĩ chín chắn trong vấn đề trừu tượng. Mọi thứ trong thế giới thực được thể hiện bằng các đối tượng và các biến. Khả năng chuyển từ cụ thể sang trừu tượng cũng liên kết hai trường.

Có một cơ hội rất tốt là nếu bạn giỏi một thứ, bạn có thể sẽ giỏi cái kia.


Và vì vậy bạn có thể nói rằng ai đó chơi nhiều trò chơi ô chữ hoặc chơi trò Scrabble có nhiều khả năng lập trình giỏi hơn người không chơi. Mối quan hệ dường như là về khả năng xảy ra hơn là sự phụ thuộc chặt chẽ.
Liam

Sự nghiêm khắc và kỷ luật của việc giải quyết một vấn đề trong toán học chuyển thành lập trình. Bạn cần phải có khả năng giải cấu trúc một vấn đề và tiếp cận nó từ hướng rõ ràng đầu tiên, sau đó từ những hướng sáng tạo hơn trong cả hai lĩnh vực.
Bramha Ghosh

4
Hai lập trình viên tuyệt vời mà tôi ngưỡng mộ rất nhiều không học Khoa học máy tính, mà được đào tạo thành nhà toán học và đã thay đổi con đường sự nghiệp: Miguel de Icaza và Alexander Stepanov. Nhân tiện, Stepanov từng tuyên bố rằng trong khi làm toán "bạn không bắt đầu với tiên đề: bạn kết thúc với tiên đề". : D
Joe Pineda

@Liam - Đó là về đối sánh mẫu và sắp xếp mọi thứ trong bộ nhớ trong ngắn hạn. Cả hai hoạt động đều yêu cầu những kỹ năng đó.
jcolebrand

+1 cho "Có một cơ hội rất tốt là nếu bạn giỏi cái này, bạn có thể sẽ giỏi cái kia."
Thorbjørn Ravn Andersen

39

khoa học máy tính! = lập trình

OK, nghiêm túc mà nói, tôi biết những lập trình viên giỏi và dở từng là chuyên ngành Tiếng Anh và Tâm lý học và một số là chuyên ngành Khoa học Máy tính. Một số người rất nổi tiếng mà tôi ngưỡng mộ khi là nhà phát triển không có nền tảng CS. Ví dụ, Larry Wall (Perl) là một nhà ngôn ngữ học. Mặt khác, nó sẽ giúp bạn biết điều gì đó về miền bạn đang làm việc vì sau đó ít nhất bạn có thể xem liệu dữ liệu của mình có hợp lý hay không và giúp khách hàng / người dùng của bạn đi sâu vào những gì họ thực sự muốn. Và có, có vấn đề về độ phức tạp tính toán và cấu trúc dữ liệu hiệu quả và tính đúng đắn của chương trình. Đó là những thứ bạn học được trong Khoa học Máy tính và hữu ích để biết trong hầu hết mọi lĩnh vực, nhưng nó không cần thiết cũng không đủ.


12
Tôi nghĩ rằng các báo tốt nhất mà tôi đã từng nghe là (Dijkstra) "khoa học máy tính là không có thêm về máy tính hơn thiên văn học là về kính thiên văn."
tloach

5
Tôi nghĩ rằng stackoverflow.com được tạo ra về cơ bản để vượt qua loại câu trả lời chỉ có một dòng chữ này, nhưng có 15 người cùng chí hướng đã nâng câu trả lời vô ích này lên đầu. Tôi không có gì cá nhân với bạn, tuy nhiên tôi đã gắn cờ câu trả lời của bạn là "xúc phạm". Ít nhất là như vậy đối với tôi.
simsim

2
@simsim: Tôi thấy thật khó chịu khi mọi người nghĩ rằng một bằng CS nào đó là về lập trình.
tloach

3
@simsim: Joel và Jeff nghĩ gì khi họ tạo trang web này không quan trọng. Đó là tất cả về việc tạo ra một cộng đồng nơi các lập trình viên giúp đỡ lẫn nhau. Tôi nghĩ câu trả lời ngắn gọn của David là đúng mục tiêu. +1
Scottie T

@ Scottie: nếu đó là "tất cả về việc tạo ra một cộng đồng nơi các lập trình viên giúp đỡ lẫn nhau", thì các diễn đàn và danh sách gửi thư sẽ đủ. Có lẽ tôi đã hơi gay gắt trong câu trả lời của mình, nhưng thật ngạc nhiên khi thấy 15 người dùng bỏ phiếu cho một "câu trả lời" hoàn toàn không biết gì, tất nhiên là trước khi chỉnh sửa. :-)
simsim

29

Tôi đoán tôi sẽ là người đầu tiên để nói rằng bạn làm cần toán. Như những người khác đã nói toán học không phải là tất cả những gì quan trọng đối với một số khía cạnh của sự phát triển, nhưng các nguyên tắc cơ bản của tư duy phản biện và phân tích có cấu trúc là rất quan trọng.

Hơn thế nữa, toán học rất quan trọng trong việc hiểu được nhiều nguyên tắc cơ bản liên quan đến những thứ như bộ lập lịch, tối ưu hóa, sắp xếp, quản lý giao thức và một số khía cạnh khác của máy tính. Mặc dù toán học liên quan đến một cấp độ tính toán không phức tạp (chủ yếu là đại số Trung học phổ thông) nhưng các lý thuyết và ứng dụng có thể khá phức tạp vì sự hiểu biết vững chắc về toán học thông qua phép tính sẽ có ích rất nhiều.

Bạn hoàn toàn có thể làm được mà không cần đến nó, và bạn không nên để kiến ​​thức toán học kém hiểu biết hơn kìm hãm bạn, nhưng nếu bạn có cơ hội, hoặc có xu hướng, tôi sẽ học toán càng nhiều càng tốt, giải tích, lý thuyết số, tuyến tính đại số, tổ hợp, ứng dụng thực tế, tất cả đều có ứng dụng thực tế và lý thuyết trong một loạt các ngành khoa học máy tính.

Tôi đã biết những người rất thành công ở cả hai phía của hàng rào (những người không tập trung nhiều vào toán học và những người đã đi học vật lý hoặc toán học), nhưng trong cả hai nhóm, họ thích các bài toán số và học về thuật toán và lý thuyết toán học. .


Tôi thứ hai đó. Mặc dù người ta có thể vượt qua mà không có nó - liệu người ta có hối hận về quyết định của mình không? Nếu bạn mong đợi có một công việc vừa phải thú vị / đầy thử thách, những kỹ năng toán học bạn có được chắc chắn sẽ giúp ích cho bạn.
Andras Vass

Đủ công bằng! GrayWizardx và những người khác: Là một người tự học, bạn khuyên bạn nên đọc tài liệu gì? Tôi đã hoàn toàn bị tắt bởi cách thức tồi tệ giết người mà môn toán được dạy cho tôi khi tôi còn nhỏ. Tôi không muốn đổ lỗi cho nơi khác, nhưng toán học đã được trình bày một cách tồi tệ. Bây giờ là lúc để mua lại. Làm thế nào DỄ DÀNG hơn để tự học các phép toán được nêu ở đây (giải tích, đại số tuyến tính, Toán rời rạc, v.v.)? Có một bộ sách giáo khoa cụ thể nào được khuyến nghị cho cách tiếp cận này không? Bằng đại học không phải là một lựa chọn nữa!
Emmel

1
@Emmel, tôi thực sự đã xem "Hướng dẫn Manga về Toán" và "Hướng dẫn Manga về Giải tích" ở Barnes and Noble ở ngoài đó, và tôi biết rằng tôi đã xem "Hướng dẫn Toàn tập về Đại số Tuyến tính" vào ngày hôm trước. Đối với các nguồn thực tế, có một số trang web toán học tuyệt vời (dành cho sinh viên, v.v.) nhưng tôi không chắc có bao nhiêu trong số đó vẫn còn ở đây. Một điều tôi thường làm thỉnh thoảng là đến trường đại học cộng đồng và "kiểm tra" các lớp toán (thi đậu / trượt) và chỉ cần được bồi dưỡng. Havent đã thực hiện nó trong 5-6 năm, nhưng lần trước nó khá hữu ích.
GrayWizardx

26

Tôi có bằng toán, nhưng tôi không thể nhớ mình yêu cầu môn toán đó một lần nào trong sự nghiệp của mình. Nó rất hữu ích trong việc rèn luyện tư duy logic cho trí óc của tôi, nhưng tôi chưa viết bất kỳ mã nào sử dụng động lực học chất lỏng, lý thuyết lượng tử hay Chuỗi Markov. (Tôi nghi ngờ là cuối cùng có nhiều khả năng xảy ra nhất.)

Hầu hết các nhà phát triển ngành nghề sẽ không cần đến các phép toán nâng cao trong hầu hết thời gian. Đôi khi biết lượng giác có thể giúp ích, và chắc chắn có thể hiểu đủ các phép toán để thực hiện các thuật toán được mô tả theo phương pháp toán học có thể là quan trọng - nhưng hơn thế nữa? Không.

Đừng quên rằng hầu hết các lập trình viên không tiến bộ khoa học máy tính - họ đang xây dựng các ứng dụng. Tôi không cần phải biết kỹ thuật tiên tiến để lái một chiếc xe hiện đại, mặc dù chiếc xe đó gần như chắc chắn đã được cải tiến thông qua kỹ thuật tiên tiến.


Tôi đồng ý với hầu hết những gì bạn đã nói, tuy nhiên, không thể nói rằng nhiều khía cạnh của lập trình có thể dễ dàng hơn rõ rệt bằng cách hiểu các nguyên tắc toán học phổ biến? Đôi khi một công thức cho một cái gì đó là xa dễ dàng hơn để chương trình so với các thuật toán để đạt được giá trị đó cùng ... miễn là bạn biết rằng công thức
BenAlabaster

@balabaster: Đôi khi - nhưng tôi muốn nói rằng điều đó không thường xuyên xảy ra. Tương tự, bạn không thực sự cần biết trước một công thức để sử dụng nó. Có năng lực về toán là tốt, vì vậy bạn có thể hiểu các công thức khi nhìn thấy chúng, nhưng bạn hiếm khi cần đến IMO của toán cấp độ.
Jon Skeet

11
Bằng toán học? Sau đó, bạn biết nó không chỉ là những con số. Tôi có hai bằng toán và thường sử dụng nội dung: đại số boolean để phân tích / đơn giản hóa logic, tự động hóa / lý thuyết ngôn ngữ để xây dựng DSL, đại số để phân tích hiệu suất big-O, v.v.
joel.neely

14

Tôi lập luận rằng toán học logic nâng cao (rời rạc) thực sự có thể giúp ích. Điều đó cùng với lý thuyết tập hợp. Khi xử lý các chương trình máy tính thông thường, những nguyên tắc này có thể giúp ích rất nhiều. Tuy nhiên, rất nhiều môn toán khác mà tôi đã học ở trường đại học là giải tích, theo như tôi thấy, có rất ít sử dụng. Vì 90% (hoặc tương tự như vậy) của lập trình là thực hiện các ứng dụng kinh doanh với các phép toán rất đơn giản, tôi muốn nói rằng phần lớn, bạn có thể hiểu được với rất ít kiến ​​thức toán học. Tuy nhiên, sự hiểu biết tốt về đại số boolean, logic, toán học rời rạc và lý thuyết tập hợp thực sự có thể đưa bạn lên cấp độ tiếp theo.


14

Tôi sẽ đi ngược lại vấn đề ở đây và nói "Có"

Tôi chuyển từ Kỹ sư xây dựng sang lập trình (Concrete Sucks!). Nền tảng toán học của tôi bao gồm những thứ thông thường của năm đầu tiên, Giải tích năm thứ hai và thứ ba (EQ chênh lệch, tích phân thể tích, chuỗi, biến đổi Fourier và Laplace) và khóa học Phân tích số.

Tôi thấy rằng toán học của tôi rất thiếu để lập trình máy tính. Có toàn bộ lĩnh vực toán học và logic rời rạc mà tôi còn thiếu, và tôi chỉ sống sót nhờ vào một thư viện sách giáo khoa rộng lớn, Wikipedia và Wolfram. Hầu hết các thuật toán nâng cao đều dựa trên toán học nâng cao và tôi không thể phát triển các thuật toán nâng cao mà không thực hiện nghiên cứu sâu rộng (Về cơ bản tương đương với giá trị nửa khóa học.) Tôi chắc chắn không thể nghĩ ra các thuật toán MỚI, vì tôi chỉ không 'không có nền tảng toán học như vai của những người khổng lồ mà dựa vào đó.


Một lập trình viên trung bình thực sự viết được bao nhiêu thuật toán cơ bản? Tôi đoán 80% công việc lập trình không liên quan đến toán học ngoài đại số cơ bản.
dbkk

@dbkk: Nhiệm vụ phổ biến nhất của một lập trình viên trung bình là thiết kế mô hình đối tượng, "logic nghiệp vụ" của một miền nào đó. Và quá trình như vậy không gì khác hơn là toán học, mặc dù nó không thường được phản ánh bởi những người thực hiện nhiệm vụ.
Boris Stitnicky

14

Nó phụ thuộc vào những gì bạn đang làm. Nếu bạn làm nhiều về lập trình 3D thì kiến ​​thức về hình học 3D chắc chắn là cần thiết, bạn có đồng ý không? ;-) Nếu bạn muốn tạo một định dạng hình ảnh mới như JPG hoặc một định dạng âm thanh mới như MP3, bạn cũng sẽ rất khó hiểu nếu bạn không thể hiểu được chuyển đổi cosine hoặc fourier, vì đây là những điều cơ bản nhất mà nén mất dữ liệu dựa trên . Nhiều vấn đề khác có thể được giải quyết tốt hơn nếu bạn biết toán khá tốt.

Ngoài ra còn có nhiều tác vụ lập trình khác mà bạn sẽ thấy không cần nhiều toán học.


13

Nếu bạn thấy chủ đề đủ hấp dẫn để đăng bài này, chỉ cần tiếp tục và bắt đầu học. Phần còn lại sẽ đến một cách tự nhiên.


9

Vâng, không cần phải có toán học cao cấp - nếu bạn đang lập trình thương mại - ra khỏi phần mềm.

Tuy nhiên, khi xử lý những thứ khó như:

  • Tính toán quỹ đạo để điều khiển robot
  • Tạo các ứng dụng giống như AI để hỗ trợ tính không chắc chắn và suy luận tự động
  • Chơi với chuyển động 3-D và đồ họa

Một số kiến ​​thức toán học nâng cao có thể hữu ích. Và nó không giống như họ là những vấn đề "ngoài thế giới này".

Tôi đã phải tạo ra một phần mềm để cố gắng "dự đoán" lượng giấy cần thiết cho một văn phòng (và thật tệ khi chỉ tìm ra cách tốt nhất để tính các giá trị gần đúng).

Tuy nhiên, bạn phải cẩn thận, vì rất dễ bị lạc khi sử dụng những thứ nâng cao - có một người bạn của tôi đã sử dụng Turing để lưu trữ trạng thái của menu động chỉ để hiển thị nó một cách chính xác - humm ... có lẽ anh ấy đã đi quá xa trong trí tưởng tượng của mình.


bạn có thể thêm những thứ như nén tệp hoặc chỉnh sửa tệp MP3 hoặc bất kỳ thứ gì yêu cầu thực sự hiểu máy tính đang làm gì, thay vì chỉ ném một trang web lại với nhau.
tloach

4
Làm thế nào anh ta sử dụng Turing để làm điều này? Ban ouija hay seance?
Jared Updike

8

Kiểu lập trình nào?

Theo kinh nghiệm thương mại của tôi, tôi không cần toán học cao cấp, nhưng điều này phụ thuộc nhiều vào lĩnh vực bạn đang làm.

Đồ họa máy tính đòi hỏi một lượng lớn toán học nâng cao. Rất nhiều lập trình máy tính học thuật yêu cầu toán học cao cấp.

Vì vậy, nói rằng có một mối tương quan giữa những người giỏi toán học và những người giỏi lập trình.

Tôi hy vọng câu trả lời khôn ngoan này sẽ giúp ích cho bạn.


6

Toán học cần thiết cho các nhà phát triển trong một số lĩnh vực nhưng hầu như vô dụng trong các lĩnh vực khác.

Nếu bạn là một nhà phát triển trò chơi và phải làm việc nhiều với vật lý - hiểu biết về toán học là rất quan trọng. Nếu bạn đang làm việc với các điều khiển trực quan nâng cao - bạn không thể làm được gì nhiều nếu không có hình học. Nếu bạn dự định thực hiện một số tính toán tài chính - nó THỰC SỰ sẽ giúp bạn có kiến ​​thức vững chắc về thống kê.

Mặt khác, trong 5 năm qua, tôi chỉ có 2 hoặc 3 dự án mà BẤT KỲ số lượng toán nào được yêu cầu. Trong số này, chỉ có 1 lần xuất hiện khi tìm kiếm trên Google không giúp được gì.

Vào cuối ngày, ngay cả những tính toán tài chính cũng thường là thứ mà khách hàng của bạn làm cho bạn và cung cấp cho bạn công thức để thực hiện.

Vì vậy, nếu bạn kinh doanh 'phần mềm ứng dụng', bạn có thể sẽ không bao giờ sử dụng bằng toán của mình. Nếu bạn đang học phần mềm học thuật, toán học là rất quan trọng.


Đối với "nhà phát triển trò chơi", tôi muốn thêm "nhà phát triển mô phỏng". Tôi nhớ vào năm 93 khi lái xe khắp thị trấn, cố gắng tìm một cuốn sách toán học đủ nâng cao để giải thích cách Quaternion hoạt động với tôi, để tôi có thể viết mã đúng một thuật toán thu hồi đã chết. Cảm ơn Chúa cho Internet ngày hôm nay!
TED

6

Tôi đồng ý với Chris. Tôi cũng sẽ nói "Có". Nhưng điều này phụ thuộc vào thị trường của bạn như đã nêu ở trên. Nếu bạn chỉ đơn giản là tạo ra một số ứng dụng "có sẵn" cơ bản hoặc các công cụ viết để giúp công việc hàng ngày của bạn ... thì toán học gần như không quan trọng bằng.

Các giải pháp phần mềm tùy chỉnh kỹ thuật đòi hỏi nhiều khả năng giải quyết vấn đề và tư duy phản biện. Các kỹ năng chắc chắn sẽ được nâng cao khi có nền tảng toán học. Tôi đã học tốt môn Toán với bằng Kỹ sư máy tính và tôi ghi công cho tất cả nền tảng định hướng toán học của mình về lý do tại sao tôi ở vị trí hôm nay.

Đó là 2 xu của tôi, tôi có thể nói khi đọc ở trên rằng nhiều người sẽ không đồng ý. Tôi khuyến khích tất cả mọi người hãy cân nhắc rằng tôi không nói rằng bạn không thể có những kỹ năng đó nếu không có nền tảng toán học, tôi chỉ đơn giản nói rằng các kỹ năng là tác dụng phụ của việc có nền tảng như vậy và có thể tác động tích cực đến phần mềm.


6

Theo kinh nghiệm của tôi, toán học là bắt buộc trong lập trình, bạn không thể thoát khỏi nó. Toàn bộ lập trình dựa trên toán học.

Vấn đề không phải là đen trắng, mà là nhiều màu sắc hơn. Câu hỏi không phải là bạn có cần toán hay không, mà là bao nhiêu. Tuy nhiên, các cấp độ toán cao hơn sẽ cung cấp cho bạn nhiều công cụ hơn và mở mang đầu óc của bạn đến những con đường khác nhau.

Ví dụ, bạn có thể lập trình nếu bạn chỉ biết cộng và trừ. Khi phép nhân được yêu cầu, bạn sẽ phải thực hiện rất nhiều phép cộng. Phép nhân đơn giản hóa các phép cộng lặp đi lặp lại. Đại số cho phép người ta đơn giản hóa toán học trước khi triển khai nó vào các chương trình. Đại số tuyến tính cung cấp các công cụ để biến đổi hình ảnh. Boolean Algebra cung cấp cơ học để giảm tất cả các ifcâu lệnh đó.

Và đừng quên anh chị em của toán học, Logic và Triết học. Logic sẽ giúp bạn sử dụng hiệu quả casehoặc các switchcâu lệnh. Triết học sẽ giúp bạn hiểu được suy nghĩ của người viết mã mà bạn đang sửa đổi.

Có, bạn không cần nhiều toán học để viết chương trình. Một số chương trình có thể yêu cầu nhiều toán hơn những chương trình khác. Kiến thức toán học nhiều hơn sẽ giúp bạn có lợi thế hơn những người hiểu biết kém hơn. Trong những thời điểm này, mọi người cần mọi lợi thế mà họ có thể có được để có được những công việc đó.


6

Tôi đã lập trình chuyên nghiệp được 8 năm, và từ năm 12 tuổi tôi đã trở thành một sở thích.

Toán học là không cần thiết, logic là. Tuy nhiên, toán học rất hữu ích, nói rằng nó không cần thiết cũng giống như nói rằng để giết một người đàn ông, súng không cần thiết, bạn có thể dùng dao. Đúng là như vậy, nhưng khẩu súng đó làm cho nó dễ dàng hơn rất nhiều.

Có một vài mức tối thiểu trần mà bạn nên đáp ứng. Bạn cần biết các biểu thức và ký hiệu đại số cơ bản, và các phép tính tương đương thông thường. Ví dụ, bạn cần biết cấp số nhân là gì (3 đến 3 là 27) và biểu thức máy tính phổ biến là 3 ^ 3. Các ký hiệu chung cho đại số không thay đổi giữa các ngôn ngữ, nhưng nhiều trong số chúng sử dụng một phương pháp luận hơi thống nhất. Những người khác (nhìn bạn LISP) thì không. Bạn cũng cần biết thứ tự của các hoạt động.

Bạn cần hiểu tư duy thuật toán. Đầu tiên cái này, sau đó cái này, tạo ra cái này được sử dụng trong phép tính này. Rất có thể bạn hiểu điều này hoặc bạn không hiểu, và đó là một rào cản khá khó để nhảy nếu bạn không hiểu nó; Tôi thấy rằng đây là thứ bạn 'nhận được' chứ không thực sự là thứ bạn có thể học. Ngược lại, một số người không 'nhận được' nghệ thuật. Họ không nên trở thành họa sĩ. Ngoài ra, đã có những học sinh trong chương trình CS không thể tìm ra lý do tại sao điều này không hoạt động: x = z + w; z = 3; y = 5; Không phải là họ không hiểu sự bổ sung, mà là họ không nắm bắt được yêu cầu của việc diễn đạt rõ ràng. Nếu họ hiểu nó, máy tính cũng nên, phải không? Nếu bạn không thể thấy có gì sai trong ba dòng trên, thì đừng trở thành một lập trình viên.

Cuối cùng, bạn cần biết bất kỳ phép toán nào thuộc lĩnh vực lập trình của bạn. Phần mềm kế toán có thể dừng lại ở đại số cơ bản. Nếu bạn đang lập trình vật lý, bạn sẽ cần biết vật lý (lỏng lẻo) và toán học trong hình học 3 chiều (Euclide). Nếu bạn đang lập trình phần mềm kiến ​​trúc, bạn sẽ cần biết lượng giác.

Tuy nhiên, điều này đi xa hơn so với toán học; bất kể miền nào bạn đang lập trình, bạn cần hiểu rõ những điều cơ bản. Nếu bạn đang lập trình phần mềm phân tích ngôn ngữ, bạn sẽ cần biết xác suất, thống kê, lý thuyết ngữ pháp (nhiều ngôn ngữ), v.v.

Thông thường, các miền nhất định cần hoặc có thể được hưởng lợi từ kiến ​​thức mà bạn nghĩ là không liên quan. Ví dụ, nếu bạn đang lập trình phần mềm âm thanh, bạn thực sự cần biết lượng giác để xử lý các dạng sóng.

Tầm quan trọng cũng thay đổi mọi thứ. Nếu bạn đang sắp xếp một tập dữ liệu tài chính gồm 1000 mục, đó không phải là điều lớn. Tuy nhiên, nếu đó là 10 triệu bản ghi, bạn sẽ được lợi rất nhiều từ việc thực sự biết toán học vectơ và hiểu sâu sắc về cách sắp xếp ở cấp nhị phân (làm thế nào để một hệ thống sắp xếp theo thứ tự bảng chữ cái? Làm thế nào nó biết 'a' nhỏ hơn 'b '?)

Bạn sẽ thấy rằng với tư cách là một lập trình viên, nền tảng kiến ​​thức chung của bạn sẽ bùng nổ, bởi vì mỗi dự án sẽ đòi hỏi phải học nhiều hơn bên ngoài phạm vi trực tiếp của lập trình. Nếu bạn quá khó khăn hoặc lười biếng trong việc tự học và không thích ý tưởng dành hơn 10 giờ mỗi tuần để làm 'bài tập về nhà', đừng trở thành một lập trình viên.

Nếu bạn thích các bài tập tư duy, nếu bạn thích học, nếu bạn có thể nghĩ về những thứ trừu tượng như toán học mà không cần máy tính hoặc thiết kế mà không cần sketchpad, nếu bạn có thị hiếu rộng rãi trong cuộc sống và sở thích, nếu bạn tự phê bình và có thể vứt bỏ ' yêu thích 'ý tưởng, nếu bạn thích hoàn thiện mọi thứ, sau đó trở thành một lập trình viên. Không dựa trên quyết định này về toán học, mà là khả năng tư duy logic và học hỏi. Đó là những gì là quan trọng; toán học chỉ là sản phẩm phụ.


5

Tất nhiên, nó phụ thuộc vào loại lập trình viên bạn muốn trở thành, hoặc tốt hơn là loại lập trình viên mà nhà tuyển dụng muốn bạn trở thành. Tôi nghĩ rằng giải tích và đại số là những điều cần thiết, lập trình thống kê và tuyến tính thực sự là một công cụ tốt để có trong cặp của bạn, có thể phân tích (đạo hàm, tích phân, hàm ...) có thể được thực hiện mà không cần. Nhưng nếu bạn muốn biết mọi thứ hoạt động sâu sắc như thế nào (ví dụ: điện tử, hoặc một số thuật toán không tầm thường) thì toán học "nâng cao" là thứ tốt hơn bạn không nên bỏ qua.


5

Hầu hết các chương trình tôi đã thực hiện liên quan đến mô phỏng vật lý để nghiên cứu bao gồm những thứ như điện từ học, cơ học lượng tử và cơ học cấu trúc. Vì các miền vấn đề có toán học nâng cao gắn liền với chúng, tôi sẽ khó giải quyết chúng nếu không sử dụng toán học cao cấp.

Vì vậy, câu trả lời cho câu hỏi của bạn là - nó phụ thuộc vào những gì bạn đang cố gắng làm.


5

Kiến thức toán học nâng cao rất quan trọng nếu bạn đang viết một ngôn ngữ lập trình mới. Hoặc bạn cần viết các thuật toán của riêng bạn.

Tuy nhiên, đối với hầu hết các công việc lập trình hàng ngày - từ các trang web đến các ứng dụng xử lý bảo hiểm - chỉ những phép toán cơ bản là cần thiết .


5

Một người có nền tảng toán học vững chắc (không chỉ đơn thuần là số học) hoặc logic sẽ đối phó tốt với các thuật toán, sử dụng biến, suy luận có điều kiện và cấu trúc dữ liệu.

  • Không phải ai cũng có thể thiết kế giao diện người dùng.
  • Không phải ai cũng có thể tạo mã hiệu quả.
  • Không phải ai cũng có thể nhận xét và dẫn chứng rõ ràng.
  • Không phải ai cũng có thể làm tốt một thuật toán

Toán học sẽ giúp bạn đến một điểm, nhưng chỉ cho một điểm.


5

Tôi không nghĩ kiến ​​thức toán học nâng cao là yêu cầu đối với một lập trình viên giỏi, nhưng dựa trên kinh nghiệm cá nhân, tôi nghĩ rằng những lập trình viên nắm bắt tốt hơn về toán học nâng cao cũng sẽ trở thành những lập trình viên giỏi hơn. Điều này có thể đơn giản là do óc logic hơn, hoặc cách nhìn logic hơn do kinh nghiệm giải toán của họ.


5

Khái niệm cơ bản của toán học là việc đưa ra, hiểu, thực hiện và sử dụng các thuật toán sau đây. Nếu bạn không thể làm toán thì đó là bởi vì bạn không thể làm những điều này, và nếu bạn không thể làm những điều này thì bạn không thể là một lập trình viên hiệu quả.

Các tác vụ lập trình thông thường có thể không cần bất kỳ kiến ​​thức toán học cụ thể nào (ví dụ: bạn có thể sẽ không cần đại số vectơ và phép tính trừ khi bạn đang thực hiện các tác vụ như đồ họa 3D hoặc mô phỏng vật lý, chẳng hạn), nhưng các bộ kỹ năng cơ bản giống hệt nhau và thiếu khả năng trong một miền sẽ được so khớp bởi sự thiếu khả năng tương ứng trong miền khác.


5

Math là một hộp công cụ để tạo chương trình. Tôi khuyên bạn nên giới thiệu về các thuật toán của Cormen. Nó chạm vào những thứ "mathy" hơn.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Tôi không nghĩ rằng toán cao hơn là một yêu cầu để trở thành một lập trình viên giỏi - vì nó luôn phụ thuộc vào những gì bạn đang viết mã.

Tất nhiên nếu bạn đang lập trình đồ họa 3D, bạn sẽ cần ma trận và nhiều thứ. Là tác giả của phần mềm kinh doanh, có thể bạn sẽ cần toán thống kê.

Nhưng trở thành một lập trình viên chuyên nghiệp trong gần 10 năm (và 10 năm nữa là nghiệp dư) "toán cao hơn" không phải là thứ mà tôi cần thường xuyên. Trong khoảng 99,8% trường hợp, nó chỉ là cộng, trừ, chia và nhân trong một số kết hợp thông minh - trong hầu hết các trường hợp, đó là về thuật toán, không phải toán học.


4

Đối với hầu hết các lập trình viên, việc học toán cao hơn rất quan trọng vì nó giúp bộ não của bạn suy nghĩ một cách logic, theo cách từng bước để chuyển từ thứ này sang thứ khác.

Tuy nhiên, rất ít công việc lập trình yêu cầu bất cứ điều gì trên trung học phổ thông. Tôi đã sử dụng đại số tuyến tính một lần. Tôi chưa bao giờ sử dụng giải tích. Tôi sử dụng đại số mỗi ngày.


4

Kiến thức toán học thường hữu ích cho một lập trình viên, cũng như kỹ năng thiết kế đồ họa, khả năng giải câu đố, đạo đức làm việc và một loạt các kỹ năng và đặc điểm khác. Rất ít lập trình viên giỏi mọi thứ mà một lập trình viên có thể giỏi. Tôi sẽ không đồng ý với bất kỳ tuyên bố nào có dạng "bạn không phải là một lập trình viên thực sự trừ khi bạn có thể { chèn khả năng lập trình yêu thích tại đây }".

Nhưng tôi sẽ cảnh giác với một lập trình viên không thể làm Toán. Nhiều hơn một người không thể vẽ.


4

Tôi nghĩ nó thực sự phụ thuộc vào những gì bạn đang cố gắng làm, nhưng IMHO, lý thuyết CS và OS quan trọng hơn toán học ở đây, và bạn thực sự chỉ cần toán học liên quan đến chúng.

Ví dụ, có rất nhiều nền tảng CS về lý thuyết lập lịch và tối ưu hóa đứng đằng sau nhiều bộ lập lịch trong hệ điều hành hiện đại. Đó là một ví dụ về một cái gì đó đòi hỏi một số toán học, mặc dù không phải là một cái gì đó cao siêu phức tạp.

Nhưng thành thật mà nói, đối với hầu hết mọi thứ, bạn không cần toán học. Những gì bạn cần là học khả năng tư duy ở cơ sở 2 và 16, chẳng hạn như khả năng tính nhẩm HOẶC / VÀ. Ví dụ: nếu bạn có một byte và trong byte đó có hai trường 3 bit và 2 bit lãng phí, việc biết các bit nào nằm trong trường nào đang hoạt động khi giá trị byte là 11 sẽ giúp mọi thứ nhanh hơn một chút so với việc phải sử dụng bút và giấy.


Bạn đã bao giờ học lý thuyết xếp hàng chưa? Bạn đã bao giờ nghiên cứu các trình quản lý bộ nhớ và các mô hình thống kê khiến các nhà phát triển chọn cái này hơn cái kia chưa? Tôi không nhất thiết không đồng ý với câu trả lời của bạn, nhưng sự đơn giản hóa quá mức của bạn.
San Jacinto

@San: Tôi chắc chắn rằng tôi đang đơn giản hóa quá mức, nhưng tôi nghĩ rằng hầu hết các nhà phát triển hệ thống không bao giờ cần biết những điều này ở cấp độ này. Tôi đã nghiên cứu nó ở mức cơ bản trong hai bằng cấp đầu tiên của mình và có phần sâu hơn trong quá trình học Tiến sĩ, nhưng nó chưa bao giờ là sở trường của tôi, tôi muốn giao nó cho các chuyên gia hơn. Những người sử dụng hệ điều hành mà tôi biết có những kỹ năng toán học khiến tôi mất hứng.
Uri ngày

mà tôi nghĩ là rất hợp lệ. tôi nghĩ rằng cần phải phân biệt lập trình hệ thống với lập trình hệ điều hành. Các khái niệm đan xen chặt chẽ, nhưng vẫn khác nhau.
San Jacinto

4

Tôi bắt đầu lập trình vào cùng thời điểm tôi nhập học lớp tiền đại số .. Vì vậy, tôi sẽ không nói toán học là tất cả những gì quan trọng, mặc dù nó có thể giúp ích trong một số kiểu lập trình, đặc biệt là hàm.

Tôi chưa học môn Toán rời rạc, nhưng tôi thấy rất nhiều nội dung lý thuyết về lập trình được viết bằng ký hiệu toán học được dạy trong lớp học này.

Ngoài ra, hãy đảm bảo rằng bạn biết cách tính bất kỳ thứ gì trong bất kỳ cơ số nào, đặc biệt là cơ số 2, 8 và 16.

Ngoài ra, một lớp học thực sự mang lại một số khái niệm cho tôi là lớp học lập trình trước. Chúng tôi đã được dạy về các nghiệp đoàn, giao lộ, và tất cả những thứ vui vẻ đó và Nó gần như tương đồng chính xác với toán học bitwise. Và chúng tôi đã đề cập rất nhiều đến logic boolean. Điều tôi coi là hữu ích nhất là khi chúng tôi học cách giảm các câu lệnh boolean phức tạp. Điều này rất tiện dụng:

(x|y) & (x|z) & (x|foo)

có thể được đơn giản hóa thành

x | (y & z & foo)

Điều mà trước đây tôi không hoàn toàn nắm bắt được.


4

Chà, bạn đã tạo ra một số câu trả lời, và không, tôi không đọc hết chúng. Tôi đang ở giữa về điều này, không, bạn chắc chắn không cần toán học để trở thành một lập trình viên. Assembler so với trình điều khiển thiết bị trong Linux không phức tạp hơn hoặc ít hơn so với trình điều khiển khác và không yêu cầu toán học.

Bạn không cần phải tham gia hoặc vượt qua một lớp toán nào cho bất kỳ điều gì trong số này.

Tôi sẽ đồng ý rằng tư duy giải quyết vấn đề cho lập trình khá giống với tư duy giải toán, và kết quả là toán học có thể đến dễ dàng. hoặc ngược lại nếu toán học khó thì lập trình có thể khó. Một lớp học hay bằng cấp hay bất kỳ mảnh giấy hay danh hiệu nào là không cần thiết, chắc chắn là bạn sẽ phải học và học tập.

Bây giờ nếu bạn không thể chuyển đổi từ hệ thập lục phân sang hệ nhị phân sang thập phân một cách nhanh chóng trong đầu, trên giấy hoặc sử dụng máy tính, bạn sẽ gặp khó khăn. Nếu bạn muốn tham gia vào mạng và những thứ khác liên quan đến thời gian, trình điều khiển hạt nhân thường làm nhưng không cần phải làm. Bạn sẽ gặp khó khăn. Tôi biết một danh sách rất dài những người có bằng toán và / hoặc khoa học máy tính và / hoặc bằng kỹ thuật đang vật lộn với các phép tính tốc độ, bit trên giây, byte trên giây, bạn cần bao nhiêu bộ nhớ để làm việc gì đó, v.v. Để ở một mức độ nào đó, nó có thể được coi là một số loại sở trường mà một số người có và những người khác phải cố gắng hướng tới.

Điểm mấu chốt của tôi là tôi tin vào sức mạnh ý chí, nếu bạn muốn học những thứ này, bạn có thể và sẽ làm được, nó chỉ đơn giản như vậy. Bạn không cần phải tham gia một lớp học hay tốn nhiều tiền, ví dụ như linux và qemu có thể khiến bạn bận rộn trong một thời gian khá dài, các ngôn ngữ asm khác nhau, v.v. các môi trường crashable để phát triển hạt nhân, nhúng, v.v. Bạn không bị giới hạn ở đó , nhưng tôi không tin rằng bạn phải chạy đi và tham gia bất kỳ lớp học nào nếu bạn không muốn. Nếu bạn muốn thì hãy chắc chắn tham gia một số lớp ee, một số lớp cs và một số lớp toán ..


Đây không phải là mồi lửa, mà là thực tế. Mọi thứ bạn cần biết về điện tử kỹ thuật số và kỹ thuật phần mềm từ góc độ lập trình có thể được tóm tắt lại. 0, 1 và, hoặc, không. năm điều đó là những gì thiết bị điện tử kỹ thuật số và tất cả các chương trình hoạt động. Bạn có thể xây dựng bất cứ thứ gì với một hộp lớn cổng nhanh.
old_timer

4

Bạn cần toán học. Lập trình không khác gì toán học. Bất kỳ phát hiện nào của vật lý lý thuyết đều không trở thành một hàm ý thực tế (có thể áp dụng), trừ khi chúng được giải thích dưới dạng các giải pháp toán học. Không ai trong số đó có thể được giải quyết bằng máy tính nếu chúng không thể được giải thích trên máy tính, và cụ thể hơn là trên các ngôn ngữ lập trình. Do đó, các ngôn ngữ khác nhau được thiết kế để giải quyết các vấn đề cụ thể. Nhưng vì mục đích chung và các ngôn ngữ lập trình phổ biến rộng rãi như java, c, c ++, nhiều tác vụ lập trình của chúng tôi liên quan đến giải pháp lặp lại (liên tục) cho các vấn đề tương tự như trích xuất giá trị từ cơ sở dữ liệu, tệp văn bản, đưa chúng lên windows (máy tính để bàn, web), thao tác các giá trị giống nhau, đôi khi truy cập một số dữ liệu từ các thiết bị tương tự (nhưng được đặt tên thương hiệu khác nhau, cổng khác nhau và đau đầu), v.v. không liên quan đến nhiều hơn phương pháp đơn nhất,


3

IMO, bạn có thể cần phải có năng khiếu toán học, mà không nhất thiết phải có nhiều kiến ​​thức trong lĩnh vực này. Vì vậy, những thứ bạn yêu cầu để giỏi toán cũng tương tự như những thứ bạn yêu cầu để giỏi lập trình.

Nhưng nói chung, tôi không thể nhớ lần cuối cùng tôi sử dụng bất kỳ loại toán cao cấp nào trong lập trình hàng ngày, vì vậy không.

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.