Toán học phải làm gì với lập trình? [đóng cửa]


89

Tôi mới bắt đầu bằng tốt nghiệp phát triển phần mềm. Ngay bây giờ chúng tôi đang bắt đầu với Java cơ bản và tương tự (vì vậy ngay từ dưới cùng bạn có thể nói) - điều đó tốt, tôi không có kinh nghiệm lập trình ngoài việc biết cách làm "Hello World" trong Java.

Tôi cứ nghe rằng toán học thích hợp với tiền mã hóa, nhưng nó như thế nào? Những ví dụ chung nào sẽ cho thấy toán học và lập trình đi cùng nhau như thế nào, hoặc phụ thuộc vào nhau?

Tôi xin lỗi về câu hỏi của tôi rất mơ hồ, tôi mới bắt đầu có một ý tưởng sơ bộ về thế giới mà tôi đang bước vào như một học sinh khỉ mã ...


49
Lập trình toán học. vi.wikipedia.org/wiki/Discittle_mathapes
SK-logic

25
@Dave, đó là lý do tại sao tôi đưa ra một liên kết trong nhận xét, không phải là một câu trả lời.
SK-logic

7
@FiascoLabs, thậm chí còn hơn thế - cấu trúc ngôn ngữ và logic cũng là các lĩnh vực phụ của toán học. Lập trình không là gì ngoài toán học ứng dụng.
SK-logic

19
Trên một lưu ý không liên quan, bắt đầu với Java không phải là "ngay từ dưới lên".
Matt H

5
@ CharlesE.Grant, nhiều sinh viên toán cũng làm như vậy (và vẫn vượt qua bài kiểm tra của họ).
SK-logic

Câu trả lời:


137

Trước hết: Tôi là một nhà toán học - một người chuyên nghiệp (trong đó tôi được trả tiền để làm toán). Tôi không phải là một lập trình viên. Tôi thực hiện một số chương trình, nhưng rất chắc chắn về sự đa dạng của Cargo Cult (xem bình luận đầu tiên về https://tex.stackexchange.com/q/451/86 và phản hồi của tôi) và không có gì thuộc loại thường đưa tôi đến với điều này trang web (thực sự, tôi đã đăng ký ở đây để đăng câu trả lời này sau khi thấy một liên kết đến nó trong phòng trò chuyện TeX).

Tóm tắt câu trả lời của tôi là: Toán học là Lập trình .

Gần đây tôi đã dạy một khóa học toán cho một nhóm học sinh không phải là toán học. Họ là phần lập trình. Tôi nghĩ rằng điều này là tuyệt vời! Cuối cùng, tôi sẽ có thể dạy toán cho những người đã hiểu những ý tưởng cơ bản và những người đã có một bộ công cụ thô sơ để làm toán. Tôi đã vô cùng thất vọng khi tôi hỏi có bao nhiêu người trong số họ thực sự đã viết một chương trình và nhận được câu trả lời ở đâu đó giữa 0 và 1.

Trước khi tôi tiếp tục, tôi nên làm rõ một vài điều. Có những lĩnh vực toán học liên quan trực tiếp đến lập trình và phải làm với việc đánh giá các thuật toán và phân loại ngôn ngữ và những thứ tương tự. Tôi không nói về những điều đó. Ngoài ra còn có một chương trình đang cố gắng dịch tất cả toán học sang ngôn ngữ chính thức có thể được đánh giá bằng máy tính. Đây là một chút gần hơn với những gì tôi đang nói, nhưng ngay cả để tập trung vào đó sẽ bỏ lỡ phần chính của những gì tôi đang cố gắng nói. Toán học mà tôi làm và lập trình mà tôi làm gần như hoàn toàn không liên quan đến chủ đề. Sự kết nối giữa chúng ở một cấp độ khác nhau.

Nơi tôi muốn bắt đầu là nhận xét về câu hỏi chính:

Nếu đó là làm toán, thì tất cả hoạt động của con người là một dạng toán. Nếu đó là trường hợp thì từ toán học không có nghĩa hữu ích, bởi vì nó không thể được sử dụng để phân biệt hoạt động này với hoạt động khác.

Vâng, đó là làm toán. Nhưng "toán học" vẫn là một từ hữu ích bởi vì, như bài hát nói, "Đó không phải là những gì bạn làm, đó là cách bạn làm điều đó." Tôi sẽ nói rằng tôi đang làm toán khi tôi tiếp cận một cái gì đó theo cách toán học . Đôi khi, đó là toán học "lõi cứng": xây dựng định nghĩa, chứng minh các định lý. Đôi khi, nó không phải là. Đôi khi, nó viết những chương trình nhỏ ngớ ngẩn để con tôi có thể học từ chính tả.

Đây là những gì toán học giúp tôi khi tôi lập trình:

  1. Trừu tượng này có lẽ là các kỹ năng chuyển nhượng quan trọng nhất từ toán học. Bằng cách này, tôi có nghĩa là khả năng loại bỏ tất cả những thứ không cần thiết và tập trung vào các thuộc tính quan trọng.

  2. Phối cảnh Nếu tôi chỉ có thể chọn một điều mà tất cả các học sinh của tôi sẽ học, thì đây sẽ là: Khả năng thay đổi quan điểm phù hợp với vấn đề. Chúng ta thường xử lý điều này trong đại số tuyến tính bằng các công thức thay đổi cơ sở (dẫn đến ma trận khủng khiếp và các biến chứng khủng khiếp), nhưng nó được áp dụng nhiều hơn thế. Thực chất, đó là ý tưởng rằng chỉ vì một thứ gì đó đã được trình bày cho bạn theo một cách, đó không phải là cách bạn làm việc với nó. Điều này tách biệt quan điểm của mọi người về chính nó từ cách nó đã được trình bày. Điều này có thể cực kỳ thiết thực: tất cả là về việc làm cho một cái gì đó hữu ích hoặc hiệu quả. Nếu tôi có một danh sách các vectơ và sẽ hiệu quả hơn khi lưu trữ chúng dưới dạng danh sách tọa độ x và danh sách tọa độ y, vì vậy hãy là nó .

  3. Hình thức so với chức năng Dẫn đầu từ trên; nếu một điều có thể được trình bày theo nhiều cách khác nhau sau đó nó không còn công bằng khi nói rằng một bài thuyết trình đặc biệt là các điều. Để dẫn chứng sai bài hát đó một lần nữa: "Nó không phải là những gì bạn đang đó là những gì bạn làm " mà vấn đề này.

Tôi có thể tiếp tục, nhưng đó là những người nghĩ đến mùa xuân.

Bây giờ, có lẽ có rất nhiều phản ứng (tiêu cực) đối với những gì tôi đã viết cho đến nay. Một người sẽ là "Đó không phải là toán học, đó chỉ là ý nghĩa tốt." (hoặc ý nghĩa xấu) mà tôi đề cập đến nhận xét của tôi ở trên đồng ý với tình cảm rằng "tất cả hoạt động của con người là một dạng toán học". Một câu hỏi khác sẽ là "Đó không phải là loại toán có nghĩa trong câu hỏi." Điều này gần như chắc chắn là đúng và ở đây tôi thực sự có nhiều thiện cảm hơn với người đã nói "Ít nhất tôi đã không chạm vào toán học trong 10 năm,". Anh ấy hoặc cô ấy sai, tất nhiên, họ đã làm toán trong 10 năm bởi vì bất cứ khi nào họ viết một chương trình họ đều làm toán . Họ không nhận ra điều đó.

Tôi thực sự sử dụng một số "toán học thực sự" trong các chương trình của mình. Gần đây tôi đã mã hóa một nhà thám hiểm hình dạng 3D vui nhộn liên quan đến việc sử dụng một số phép toán để tìm ra các phép chiếu và các phép biến đổi khác mà tôi phải áp dụng cho dữ liệu của mình. Tôi đã rất thích thú khi thấy mình thực sự mã hóa tứ phương! Nhưng tất nhiên, toán học có liên quan là không đáng kể so với toán học tôi làm khi tôi làm việc. Đó là "mặt sau của phong bì". Đó là loại toán học, sau đó tôi đồng ý với tình cảm mà bạn chọn nó khi bạn cần nó, và nếu bạn cần một cái gì đó phức tạp hơn bạn có thể tìm thấy trên Wikipedia thì bạn tìm một nhà toán học thực sự để làm điều đó cho bạn. Tuy nhiên, để bạn có thể nhặt nó lên khi bạn cần thì bạn cần phải học một cái gì đó. Thứ đó có thể không phải là bất cứ thứ gì bạn thực sự sử dụng, nhưng đã học được rằng thứ gì đó giúp mọi thứ dễ dàng hơn để chọn những gì bạn thực sự sử dụng sau này trong cuộc sống. Vì vậy, đây là nơi tôi không đồng ý với Coder: bạn cần phải học một số toán học nếu bạn sẽ sử dụng bất kỳ toán học nào và bạn cần học nó từ khía cạnh toán học (điều này không có nghĩa là chứng minh các định lý).

Và cuối cùng là "Toán học là lập trình". Bạn có thể học tất cả những điều này từ việc trở thành một lập trình viên giỏi. Và nếu bạn đã học được những điều này, bạn sẽ thấy toán học dễ dàng hơn nhiều bởi vì bạn sẽ hiểu rằng khi chúng ta nói về một vectơ trong không gian vectơ thì đó chỉ là một ví dụ của lớp Vectorcó nghĩa là chúng ta có thể làm tất cả những việc cần Vectorlàm ví dụ đó: thêm, trừ, chia tỷ lệ, v.v. Đó là lý do tại sao tôi thích dạy toán cho các lập trình viên. Nhưng, nói như một nhà toán học, tôi sẽ nói rằng đầu tiêntrong số này, "Trừu tượng", dễ học toán hơn so với lập trình vì toán học là sự theo đuổi trừu tượng. Bất cứ khi nào chúng ta thấy một số hành vi, việc đào tạo của chúng ta là luôn luôn hỏi "Điều gì về thứ đó khiến nó hành xử theo cách đó? Nếu tôi lấy một thứ khác tương tự, thì nó có hành xử theo cách tương tự không? tôi có phải mất nó để ngừng hành xử như vậy không? " (Đưa điều này đến mức cực đoan dẫn đến "toán học rết" - tìm kiếm thuật ngữ). Nhưng chúng tôi không làm điều này với (chỉ) các đối tượng "thế giới thực" (bất kể chúng là gì), chúng tôi làm điều này với những thứ đã được trừu tượng hóa.

Điều này đã diễn ra đủ lâu, vì vậy hãy để tôi kết thúc với một trong những trò đùa của nhà toán học cổ điển:

Cả một nhà toán học và một nhà vật lý đều tham dự hội thảo về một số mô hình mới liên quan đến không gian 24 chiều. Sau đó, họ đã thảo luận về nó và nhà vật lý nhận xét: "Điều đó thực sự khó khăn. Ý tôi là, làm thế nào để người ta hình dung được không gian 24 chiều?" Nhà toán học trả lời: "Ồ, thật dễ dàng. Chỉ cần hình dung không gian n chiều và sau đó đặt n = 24.".


Đã thêm 2012 / 03-2

Có khá nhiều bình luận về câu trả lời này thể hiện nhiều quan điểm khác nhau. Những điều này hiện đã bị xóa bởi người điều hành vì hiểu rằng tôi sẽ cố gắng đưa vào kết hợp chúng (hoặc trả lời chúng) trong câu trả lời của tôi.

Tuy nhiên, tôi không chắc là mình có thể. Đọc những bình luận đó và phần còn lại của những gì trên trang này, tôi chỉ có thể đi đến kết luận rằng có một sự hiểu lầm rất lớn về toán học thực sự là gì. Hơn nữa, tôi không cảm thấy đủ thẩm quyền để giải thích nó. May mắn thay, ai đó đã liên kết với Lockhart's Lament nên tôi sẽ hoãn lại lời giải thích cho điều đó. Trong khi tôi có thể đã đặt nó một cách khác biệt (khi tôi lớn lên trong một môi trường khoa học, tôi sẽ nhấn mạnh hơn vào bản chất thực nghiệm của toán học), tôi không nghĩ rằng tôi có thể làm nó tốt hơn .

Tôi vẫn nghĩ rằng tôi có thể thêm một cái gì đó. Cũng như những hiểu lầm về toán học gì , cũng có những hiểu lầm về "làm toán" nghĩa là gì. Tôi thấy hai lập trường gần như mâu thuẫn:

  1. Toán học là về phương trình và công thức. Vì vậy, không cần phải nghiên cứu nó vì Wikipedia tồn tại (đây gần như là sự đối nghịch của thách thức tận thế của Euler đối với Diderot ).

  2. Toán học là về các định lý và định nghĩa. Vì vậy, không cần phải nghiên cứu nó vì các chương trình không bao giờ chứng minh bất cứ điều gì (đó là hoàn toàn sai lầm như ... chèn ngụy biện yêu thích ở đây).

Trong khi hai lập trường mâu thuẫn với nhau, chúng kết thúc ở cùng một nơi: không có điểm nào trong một lập trình viên học bất kỳ toán học nào - và chắc chắn nhất không phải từ một nhà toán học! Rốt cuộc, họ biết gì về bất cứ điều gì? Bất cứ điều gì mà một lập trình viên thực sự cần biết đều có thể được tìm thấy trong Wikipedia, hoặc đưa ra một người khác.

Ở trên, tôi mô tả bản thân là một lập trình viên Cult Cult. Tôi cá là hầu hết các bạn đều có một tiếng cười khúc khích riêng tư và nghĩ: "À đúng rồi, tôi cá là tôi biết chương trình của bạn trông như thế nào rồi." Bạn có thể cảm thấy một chút tự mãn và vượt trội (mặc dù tôi chắc rằng bạn cảm thấy tồi tệ về cảm giác tự mãn và vượt trội).

Những gì tôi đã mô tả ở trên là Toán học Cult Cult.

Vì vậy, khi tôi nói rằng bạn nên học một chút toán học để hiểu toán học hoạt động như thế nào, tôi đang nói nó với lý do chính xác giống như bạn có thể thấy một đoạn mã mà tôi đã viết: "Cuộc sống của bạn dễ dàng hơn bao nhiêu sẽ là nếu bạn dừng mã cắt và dán từ StackOverflow và chỉ tìm hiểu một chút về cách thực hiện đúng. ".

Tuy nhiên, điều quan trọng nhất là bạn nên học nó từ các nhà toán học. Tại sao vậy? Đây là một sự tương tự. Ngôn ngữ mà tôi yêu thích nhất là TeX. (Nói tất cả, thực sự!). Bây giờ, giả sử tôi muốn tìm hiểu thêm một chút về TeX và thật tình cờ là Don Knuth đang ở trong thị trấn và đã đề nghị cung cấp một số hướng dẫn về TeX. Hoặc tôi chỉ có thể đọc về nó trên Wikipedia. Hoặc có thể đó là Perl và Larry Wall, hoặc C # (đó có phải là cái đúng không?) Và Jon Skeet. Cũng có thể những người này không phải là giáo viên giỏi nhất , nhưng họ chắc chắn bù vào số tiền mà họ biết!

Và đó là những gì các nhà toán học là. Chúng tôi là những người viết ngôn ngữ thực tế, sau đó họ viết thư viện mà bạn sử dụng. Tất nhiên, bạn không cần phải biết cách chứng minh một định lý - bạn sẽ không viết thư viện! Nhưng nếu bạn biết một chút về cách chúng tôi nghĩ, thì nó có thể giúp bạn hiểu lý do tại sao chúng tôi viết thư viện theo cách chúng tôi đã làm và nếu bạn hiểu rằng nó có thể giúp bạn sử dụng nó tốt hơn.

Có một nền tảng giữa việc tìm kiếm các phương trình trên Wikipedia và chứng minh phỏng đoán Poincaré, giống như - để nói đến lời than thở của Lockhart - có một nền tảng giữa "Tôi không thực sự biết nhiều về nghệ thuật, nhưng tôi biết tôi thích gì" và là Monet, và giữa "Phím 'BẤT K' 'ở đâu?" và là Don Knuth. Nếu bạn vẫn còn ở trường đại học thì bạn có một cơ hội tuyệt vời để học hỏi từ những người là chuyên gia trong khu vực của họ và vì lý do nào đó - sẵn sàng dành thời gian giải thích cho bạn.


Điểm khác tôi muốn mở rộng một chút là tại sao là một lập trình viên, bạn không nên sợ học thêm một chút toán học. Đó không phải là kết nối sâu sắc, cũng không phải là hữu ích. Đó là khả năng lập trình máy tính của bạn có thể trực tiếp giúp bạn học toán. Tôi chỉ muốn đề cập đến một vài.

  1. Hiểu các biến. Vì vậy, nhiều người bị nhầm lẫn bởi các câu đơn giản như "Gọi n là số tự nhiên ...". Hoặc "Đặt epsilon> 0". Có những nơi trong toán học, điều quan trọng là phải nhớ phạm vi của một biến. Đây là tất cả phổ biến trong lập trình. Học cách dịch một câu lệnh toán học thành một chương trình và bạn sẽ thấy việc theo dõi những gì là dễ dàng hơn nhiều.

  2. Bản chất của bằng chứng. Nếu bạn đã từng viết một bài kiểm tra, hoặc viết một chương trình sẽ được người khác sử dụng, thì bạn hiểu cốt lõi của bằng chứng. Khi bạn làm điều đó, bạn phải biết rằng bất cứ điều gì người dùng đặt vào, bạn có thể đối phó với nó (chèn tham chiếu xkcd bắt buộc ở đây). Đó là tất cả bằng chứng! Một minh chứng rằng bất cứ điều gì "người dùng / vũ trụ" đưa vào, tuyên bố sẽ được giữ vững. Các nhà thực nghiệm sẽ nghiêng về "Nếu nó hoạt động trong hoàn cảnh bình thường, thì đó là sự thật" nhưng các lập trình viên biết rằng luôn có đứa trẻ đó sẽ thử Alt + G + Shift + chỉ để xem điều gì xảy ra.

  3. KHÔ. Xin lỗi để phá vỡ điều này cho bạn, nhưng chúng tôi đã phát minh ra nó, không phải bạn. Chúng tôi đã "không lặp lại chính mình" trong nhiều thiên niên kỷ. Đó là lý do tại sao tôi có một bản sao các yếu tố của Euclid trên kệ của mình và nó vẫn hữu ích .

Và còn nữa. Nếu tôi biết thêm một chút về lập trình, tôi sẽ viết một cuốn sách có tên "Toán học cho lập trình viên" trong đó mục đích không dạy "Toán học mà các lập trình viên nên biết" nhưng "toán học mà mọi người nên biết, nhưng tối ưu hóa cho lập trình viên" . Nhưng có lẽ tôi sẽ không bao giờ biết đủ về lập trình để viết nó - trừ khi có ai đó đề nghị cộng tác với tôi!


Tôi sẽ để nó ở đó. Có lẽ nếu tôi nghĩ nhiều hơn, tôi sẽ thay đổi những gì tôi đã viết; hy vọng tôi sẽ giải thích nó tốt hơn. Trong một tháng, tôi thậm chí có thể không đồng ý với các phần của nó. Nếu bất cứ ai muốn tranh luận thêm, hoặc bình luận khác, có lẽ tốt nhất không nên làm như vậy trong các ý kiến ​​ở đây. Bạn biết nơi để tìm tôi .


19
Đây là một trong những câu trả lời hay nhất tôi từng đọc trên SE; BTW, có một cuốn sách lớn của "Toán học cho lập trình viên"; nó được gọi là Toán học cụ thể và nó được đồng sáng tác bởi tác giả của TeX, Donald Knuth. Tôi vừa có một bản sao, và nó thật tuyệt vời. Tôi cảm thấy như nghịch đảo của bạn; Tôi đã nghiêm túc về lập trình khi tôi nhận ra rằng cách tốt nhất (đối với tôi) để hiểu các khái niệm trong lớp toán là viết một chương trình để làm điều đó cho tôi. Tất nhiên, sau đó tôi muốn sử dụng chương trình thay vì thực hiện tính toán vẹt bằng tay, và các giáo viên toán của tôi không thích.
Jason Lewis

Anh bạn, +100 cho điều đó.
Barry Brown

2
Đăng ký chỉ để nâng cấp này
leo

Chính xác. Bạn không thể lập trình tốt nếu không có tư duy phân tích mà toán học dạy cho bạn.
Phòng thí nghiệm Fiasco

1
Có một cuốn sách hay về toán học lập trình (nhìn vào lập trình toán học) không?
qed

27

Chúng không phải liên quan chặt chẽ. Đối với lập trình, điều quan trọng là phải biết về toán học - đặc biệt là các nhánh liên quan đến, ví dụ, hiệu suất thuật toán, nhưng thực tế đơn giản là không có nhánh toán học nào sẽ cho bạn biết rằng Singletons là một ý tưởng tồi tệ khủng khiếp, ví dụ, hoặc khi nào nên ưu tiên kế thừa hơn thành phần, hoặc liệu bạn có thực sự cần sự linh hoạt đó hay không và không lặp lại chính mình, và hàng tá các nhu cầu lập trình cốt lõi khác.

Toán học thể có thể diễn tả những gì chương trình của bạn làm, nhưng chắc chắn nó không thể cho bạn biết cách khả thi nhất, dễ đọc nhất, khả thi của con người để thực hiện nó.


6
1) Không có gì sai với singletons per se, 2) lý thuyết thông tin thuật toán, ngôn ngữ chính thức và ngữ nghĩa biểu thị có liên quan trực tiếp đến những điều đơn giản mà bạn quan tâm vì một số lý do (chúng không quan trọng lắm đối với lập trình nói chung).
SK-logic

19
kinh nghiệm của bạn phải được giới hạn một chút sau đó. Singletons là cần thiết và không thể tránh khỏi, miễn là chúng là một phần của mô hình miền. Và làm thế nào để xây dựng một mô hình miền là một vấn đề toán học, không có gì hơn thế. Và vâng, những người không biết gì về lý thuyết ngôn ngữ chính thức đang tạo ra những mô hình khủng khiếp và những ngôn ngữ khủng khiếp.
SK-logic

10
@dave: mối nguy hiểm trong phương pháp đó là bất cứ ai cũng có thể khiến bạn rời khỏi một vị trí hợp lý, hợp lý bằng cách nêu rõ một vị trí khác biệt, cho dù ngu ngốc đến mức nào. Lấy trung bình là không có thay thế hữu ích để đánh giá các đối số.
Michael Borgwardt

4
@ SK-logic: Có thể hai bạn chỉ đơn giản nói về các khái niệm khác nhau về chính xác "Singleton" là gì? Dường như với tôi rằng SK-logic đang nói về ý tưởng trừu tượng chỉ có một thể hiện của một thực thể nhất định trong một hệ thống, đôi khi chính xác là những gì được yêu cầu. Thật không may, khái niệm trừu tượng này đã kết hợp chặt chẽ với chi tiết triển khai tồi tệ khủng khiếp khi có một phương pháp nhà máy tĩnh công khai vì cuốn sách GoF đã đưa ra như một ví dụ về cách một Singleton như vậy có thể được truy cập.
Michael Borgwardt

5
Xin vui lòng không thêm Off Chủ đề thảo luận lại Singtons
mattnz

20

Toán học và lập trình có liên quan theo hai cách.

Một là toán học có thể được sử dụng để lý luận về các chương trình máy tính. Nó có thể giúp trả lời các câu hỏi như "Thời gian chạy chương trình của tôi sẽ thay đổi như thế nào khi dữ liệu đầu vào thay đổi?", "Chương trình của tôi có được đảm bảo để tìm câu trả lời cho vấn đề của tôi không?", "Chương trình của tôi có hiệu quả như nó có thể không? "," Tôi nên sắp xếp lại chương trình của mình như thế nào để chương trình nhanh hơn hoặc sử dụng ít bộ nhớ hơn? ". Bạn thường bao gồm các chủ đề như thế này trong các khóa học cấp trên về lý thuyết tính toán, thiết kế thuật toán và thiết kế ngôn ngữ máy tính.

Cách thứ hai toán học và chương trình có liên quan là lập trình được sử dụng để giải các bài toán. Điều này rất quan trọng vì nhiều vấn đề của "cuộc sống bình thường" thực sự có thể được gọi lại là các vấn đề toán học và sau đó được giải quyết (có thể xấp xỉ) trên máy tính. Các loại chủ đề này sẽ hiển thị ở một mức độ nào đó trong hầu hết các khóa học của bạn, nhưng đặc biệt là trong các khóa học về mô hình toán học và toán học rời rạc.


Toán học không thể giúp bạn đảm bảo rằng chương trình của bạn sẽ tìm thấy câu trả lời. Đó sẽ là giải quyết vấn đề dừng, điều này là không thể.
DeadMG

6
@DeadMG Không thể cho các chương trình tùy ý. Một chương trình nhất định rất có thể được chứng minh là chấm dứt hoặc không chấm dứt, trong một số trường hợp.
Luc Danton

6
@DeadMG, Đó là một sự hiểu lầm phổ biến về vấn đề Ngừng. Vấn đề Dừng không nói rằng bạn không thể chứng minh liệu một chương trình cụ thể có dừng lại hay không, nó nói rằng không có thuật toán hoặc bằng chứng duy nhất nào có thể được áp dụng cho tất cả các chương trình để quyết định xem chúng có dừng hay không. Xem ví dụ en.wikipedia.org/wiki/Halting_probolslập trình viên.stackexchange.com / questions / 125882 / trộm .
Charles E. Grant

Aaaah. Sai lầm của tôi, sau đó. Khóa phiếu bầu ngu ngốc ... nếu bạn có thể chỉnh sửa bài đăng của mình để tôi có thể hủy bỏ bài viết đó?
DeadMG

4
@DeadMG, bạn có nhận thức được thực tế, hầu hết các công việc lập trình điển hình không cần một ngôn ngữ Turing hoàn tất ở tất cả ? Và đối với các trường hợp còn lại, hầu như luôn luôn có một bằng chứng tạm dừng chuyên biệt.
SK-logic

12

Hai ví dụ cụ thể trong đó giáo dục toán học quan trọng đối với khoa học máy tính là:

1) Cơ sở dữ liệu quan hệ nơi sử dụng tính toán quan hệ .

Tính toán quan hệ bao gồm hai phép tính, phép tính quan hệ tuple và phép tính quan hệ miền, là một phần của mô hình quan hệ cho cơ sở dữ liệu và cung cấp một cách khai báo để xác định các truy vấn cơ sở dữ liệu. Điều này trái ngược với đại số quan hệ cũng là một phần của mô hình quan hệ nhưng cung cấp một cách thức thủ tục hơn để chỉ định các truy vấn.

Đại số quan hệ có thể gợi ý các bước này để lấy số điện thoại và tên của các cửa hàng sách cung cấp Sách mẫu:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

Tính toán quan hệ sẽ hình thành một cách mô tả, khai báo:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Một số sách mẫu.

Đại số quan hệ và phép tính quan hệ về cơ bản là tương đương logic: đối với bất kỳ biểu thức đại số nào, có một biểu thức tương đương trong phép tính và ngược lại. Kết quả này được gọi là định lý Codd.

Lĩnh vực tiếp theo là trí tuệ nhân tạo (AI) và máy học .

Để biết ví dụ về cách sử dụng chúng, hãy xem lớp CS 373 của udacity: LẬP TRÌNH XE ROBOTIC .

Mô tả: Lớp này, được dạy bởi một trong những chuyên gia hàng đầu về AI, sẽ dạy cho bạn các phương pháp cơ bản trong Trí tuệ nhân tạo, bao gồm: suy luận xác suất, thị giác máy tính, học máy và lập kế hoạch, tất cả tập trung vào robot. Các ví dụ và bài tập lập trình mở rộng sẽ áp dụng các phương pháp này trong bối cảnh xây dựng những chiếc xe tự lái. Bạn sẽ có cơ hội ghé thăm, qua video, các phòng thí nghiệm nghiên cứu hàng đầu trong lĩnh vực này, và gặp gỡ các nhà khoa học và kỹ sư đang chế tạo xe tự lái tại Stanford và Google.

Điều kiện tiên quyết: Người hướng dẫn sẽ thừa nhận kiến ​​thức vững chắc về lập trình, tất cả các chương trình sẽ bằng Python. Kiến thức về xác suất và đại số tuyến tính sẽ hữu ích.

TUẦN 1:

Khái niệm cơ bản về xác suất Nội địa hóa xe bằng các bộ lọc hạt

TUẦN 2:

Gaussian và xác suất liên tục Theo dõi những chiếc xe khác bằng bộ lọc Kalman

TUẦN 3:

Xử lý ảnh và học máy Tìm các đối tượng trong dữ liệu cảm biến

TUẦN 4:

Lập kế hoạch và tìm kiếm Xác định nơi lái xe với tìm kiếm A * Tìm các tuyến tối ưu với lập trình động

TUẦN 5:

Kiểm soát Điều khiển lái và tốc độ với PID

TUẦN 6:

Kết hợp tất cả lại với nhau Lập trình một chiếc xe tự lái

TUẦN 7:

Kỳ thi cuối kì kiểm tra kiến ​​thức của bạn


Tôi đoán điều này rơi vào vương quốc của AI nhưng hầu hết mọi người đều có chiếc bánh này trong hình ảnh bầu trời trong tâm trí của họ khi thuật ngữ đó được sử dụng. Dù sao, gần như bất kỳ chương trình nào mô phỏng thế giới thực hầu như luôn đòi hỏi một số dạng toán học tiên tiến hơn. Ngoài ra, bất kỳ hệ thống nào có cảm biến hầu như luôn đòi hỏi một số dạng toán học nâng cao.
Dunk

11

Để phát triển ứng dụng khoa học, lập trình trò chơi, hệ thống thời gian thực, hệ thống mô phỏng và các ứng dụng như vậy, Toán học thực sự cần thiết. Rốt cuộc, lập trình sử dụng toán học và khoa học để giải quyết vấn đề. Mặt khác, để lập trình một ứng dụng nắm bắt thông tin người dùng để đăng ký chúng trong cơ sở dữ liệu của bạn, không yêu cầu bất kỳ mức độ toán học cao nào. Tuy nhiên, tất cả các lập trình viên sẽ được hưởng lợi từ Lý thuyết số cơ bản, Đại số, Lý thuyết tập cơ bản và Phân tích số cơ bản.

Từ phía học viên toán học, các chủ đề khác nhau trong Toán học (cũng như nhiều ngành khoa học khác) có thể được hưởng lợi đáng kể từ lập trình.


Tôi đồng ý. Tôi làm rất nhiều việc phát triển doanh nghiệp và tôi thấy mình cần phải sử dụng nhiều toán học nâng cao, mặc dù điều đó rất tốt để biết vì nó chắc chắn có thể giúp ích. Tôi muốn nói rằng mọi lập trình viên nên lấy ít nhất Giải tích 1. Các loại chương trình khác có thể sử dụng những thứ như Biến đổi Fourier, mô hình thống kê và lập trình 3D thường sử dụng ma trận.
Makotosan

@Makotosan, cảm ơn bạn đã bình luận. Toán học rất thú vị, tuy nhiên, trong thời gian ngắn mà một lập trình viên có, nỗ lực được dành tốt nhất cho những gì thực sự làm tăng năng suất của một người. Thông tin thêm trở nên xa xỉ cho những người có thể mua được.
NoChance

Tôi nghĩ rằng toán học chỉ là kiến ​​thức tên miền cần thiết cho chương trình của bạn, giống như cách hiểu về tài chính rất quan trọng đối với các nhà phát triển Excel.
Sixty feetersdude

9

Tôi nghĩ nhiều hơn bất cứ điều gì khác, đó là sự giống nhau của quá trình suy nghĩ được sử dụng khiến hai người dường như rất giống nhau.

Ví dụ, cả hai đều cực kỳ logic. Nếu bạn làm theo cùng một nhóm các bước hoặc cùng một công thức, bạn sẽ luôn đưa ra cùng một kết quả. Ví dụ: 1+1sẽ luôn bằng 2set a = 1phương tiện asẽ luôn là 1 (cho đến khi bạn đặt nó thành thứ khác)

Một ví dụ khác là nhu cầu suy nghĩ không gian. Trong toán học, tôi thấy tôi thường phải giữ số trong đầu và hình dung những gì tôi đang làm. Một ví dụ rất đơn giản, tôi sẽ phá vỡ các vấn đề toán học để một cái gì đó giống như 13x13trở thành 13x10 + 13x3, dễ dàng hơn cho bộ não của tôi để làm việc với nó, và tôi cần phải theo dõi điều đó 13x10=130 + 13x3=39, vì vậy 130+39 = 169. Khả năng tương tự này để hình dung một cái gì đó không nhìn thấy được, hoặc chia nhỏ một vấn đề thành các vấn đề nhỏ hơn thường được áp dụng cho lập trình.

Vì vậy, tôi cảm thấy rằng mặc dù bạn không cần phải có một nền tảng toán học để lập trình, trong đó toán học được định nghĩa là thực hiện các phép tính với các số, bạn cần phải có quá trình suy nghĩ và hiểu tương tự như những gì bạn sẽ sử dụng khi giải các bài toán.


Và một số toán học cơ bản là bước đệm thông thường để đạt được quy trình giải quyết vấn đề hợp lý, có hệ thống đó. Cấu trúc ngôn ngữ, một thứ không được dạy ở trường nữa cũng là một bước đệm khác. Có một lý do mà trình biên dịch có trình phân tích cú pháp và bạn càng giỏi phân tích cú pháp và chú ý đến cấu trúc mã của bạn, bạn càng có khả năng lập trình tốt.
Phòng thí nghiệm Fiasco

5

Tôi cho rằng, cho đến nay, bạn đã được dạy các yếu tố tính toánmột số lượng giác . Và bạn gọi đó là Toán học. Điều đó giống như gọi một đôi chân là "một con người."

Giải tích ít liên quan đến lập trình, và liên quan chặt chẽ hơn đến vật lý và kỹ thuật. Bạn sẽ cần vật lý cho các công cụ trò chơi và tính toán để phân tích thống kê . (Phân tích thống kê thúc đẩy nhiều công việc hơn mà nó thoải mái thừa nhận)

Giải tích, đối với chúng tôi, là về lập trình liên quan đến thế giới thực. Tính toán tính toán là nhánh nghiên cứu về mối quan hệ tồi tệ đến mức nào. (spoiler: nó sẽ khá tệ, nhưng chúng ta có thể kiểm tra nó vô thời hạn )

Lượng giác là một jack điên trong hộp phát ra khi bạn ít mong đợi nhất và sau đó phân tích tín hiệu , tạo âm thanh và nhiều thứ khác phụ thuộc vào nó.

Đi qua Đại số 101Logic 101 , nghiên cứu lịch sử của Pascal, Leibniz, (vâng, anh ta gần như đã phát minh ra phép tính, hiểu sai một nửa, tranh luận với Newton cho đến khi tất cả bắt đầu có ý nghĩa - và vẫn quan niệm về điều mã hóa nhị phân) và Babbage và nhiều nghi ngờ của bạn sẽ suy yếu dần. (định nghĩa về Toán học của bạn sẽ mãi mãi thay đổi)


4

Lập trình vượt qua rất nhiều ngành học truyền thống.

Toán học, đặc biệt là toán ứng dụng , rất quan trọng đối với lập trình bởi vì rất nhiều thứ chúng ta yêu cầu máy tính làm là số giòn. Hiểu các phương pháp số và cách áp dụng tính toán hiệu quả và phù hợp là một trong những điều mà nhiều lập trình viên làm hàng ngày.


4

Ở đây tôi sẽ cho bạn biết những thứ thực tế mà tôi đã gặp phải Toán học trong việc giải quyết một số Vấn đề về Máy tính (đặc biệt là trong miền Internet):

  1. Công cụ tìm kiếm sử dụng tính toán Vector để tìm kiếm dữ liệu.
  2. Matrix Factorization có thể được sử dụng cho rất nhiều thứ như Phân tích tình cảm.
  3. Bạn cần biết Giải tích, Tóm tắt để tìm ra độ phức tạp của mã mà bạn viết.
  4. Xác suất được sử dụng nhiều trong Truy xuất / Tìm kiếm thông tin xác suất
  5. Định lý Naive Bayes được sử dụng trong Phân tích dự đoán.
  6. Bạn cần biết những thứ như siêu phẳng v.v ... cho một khái niệm gọi là SVM, một lần nữa được sử dụng trong Machine Learning để giải quyết các vấn đề phân loại.
  7. Bạn cần hiểu Entropy để thực hiện công cụ xử lý ngôn ngữ tự nhiên.
  8. Phân tích thành phần chính / chỉ mục ngữ nghĩa tiềm ẩn được sử dụng bởi Công cụ tìm kiếm phụ thuộc rất nhiều vào đại số ma trận. & Sớm......

3

Một vấn đề với câu hỏi của bạn là "toán học" và "lập trình" đều là những môn học rất rộng và sâu về những điều cần biết hơn bất kỳ ai có thể thành thạo trong cả cuộc đời (không cường điệu). Cá nhân tôi có bằng thạc sĩ toán học. Trong thời gian học đại học, dường như tôi càng học nhiều, tôi càng ít biết so với các bạn cùng lứa; cảm giác là nếu tôi trở nên kém thông minh hơn trong những năm qua. Khi tôi trình bày luận văn thạc sĩ của mình cho một nhóm giáo sư, thậm chí hầu hết trong số họ dường như không quen thuộc với những gì tôi đã nghiên cứu.

Tương tự như vậy, bây giờ tôi là một nhà phát triển ứng dụng web điều khiển cơ sở dữ liệu. Nếu bạn so sánh tôi với một người làm lập trình ngôn ngữ trình biên dịch nhúng, bạn có thể nghĩ chúng tôi là hai chuyên gia rất tài năng, nhưng chúng tôi sẽ có chuyên môn rất khác nhau mặc dù cả hai chúng tôi đều là "lập trình viên".

Khi bạn tiến bộ trong nghiên cứu toán học cao hơn (ngoài tính toán của sinh viên năm nhất), bạn sẽ thấy rằng toán học thấm nhuần một môn học cho lý luận trừu tượng sẽ phục vụ tốt cho bạn khi bạn lập trình. Tôi nghĩ rằng kỷ luật này rất quan trọng bởi vì bạn sẽ giải quyết những mối quan tâm trừu tượng khi bạn lập trình.

Chắc chắn, trong lập trình sinh viên năm nhất, bạn có thể sẽ tìm hiểu về số học con trỏ. Bạn sẽ viết các chương trình ngắn để minh họa khái niệm này và sự hiểu biết của bạn về cách nó điều khiển máy tính của bạn tuân theo ý muốn của bạn. Tuy nhiên, học về cách số học con trỏ hoạt động trong bản tóm tắt sẽ không giúp bạn giỏi sử dụng các con trỏ trong một chương trình thực. Khi đến lúc phải xử lý một dòng mã 10K và thực hiện một số thay đổi đối với số học con trỏ, bạn sẽ cần có khả năng suy luận ở mức rất trừu tượng, đưa ra các quyết định chiến lược để cân bằng các mối quan tâm khác nhau về sự thay đổi của bạn sẽ ảnh hưởng như thế nào mật mã.

Là một lập trình viên, bạn phải cân bằng "khả năng đọc" mã của mình, hiệu suất của mã, dễ sử dụng các chương trình kết quả, trong số nhiều mối quan tâm khác. Bạn phải có khả năng so sánh rất trừu tượng để cân bằng những mối quan tâm này với nhau. Bạn sẽ thực hiện nhiều so sánh này mỗi ngày. Tôi thậm chí đã không bắt đầu về quản lý thời gian. Bạn sẽ lý luận một cách trừu tượng về khả năng một việc bạn làm sẽ ảnh hưởng đến khả năng thực hiện nhiệm vụ của bạn đúng giờ và một lần nữa, bạn sẽ đưa ra nhiều quyết định mỗi ngày sẽ ảnh hưởng đến công việc của bạn.

Cuối cùng, bạn phải duy trì kỷ luật triết học của mình để có thể đồng hóa các ý tưởng và khái niệm mới để có thể tiếp tục khi các phương pháp và thực tiễn cũ không được sử dụng. Một lần nữa, bạn sẽ phải có khả năng đánh giá các ý tưởng xuất hiện và so sánh trừu tượng với những gì bạn đã biết.

Nói tóm lại, lập trình, như hầu hết chúng ta đều biết, không liên quan nhiều đến toán học, vì hầu hết chúng ta đều biết nó; nhưng khi bạn nhìn nó ở mức độ trừu tượng, chúng có rất nhiều điểm chung.


Tôi đặc biệt thích phần "như hầu hết chúng ta đều biết". Đó là khó khăn mà tôi thấy khi đọc hầu hết các câu trả lời ở đây: "tay trái" không biết "tay phải" đang làm gì.
Không gian vòng lặp

Tôi đoán "tay trái không biết tay phải đang làm gì" tổng hợp lại. OP nói rằng anh ta "bắt đầu từ đáy" với Java. Lập trình trong Java giống như xây dựng một cái gì đó từ bu lông và gỗ từ cửa hàng phần cứng, trái ngược với việc gia công các bu lông đó và biến cây sống thành gỗ (sẽ giống như lập trình trong Trình biên dịch)
Rice Flour Cookies

2

Toán mô tả (nói) một phương trình bậc ba.

Một thuật toán mô tả cách giải phương trình bậc ba đó.

Xây dựng thuật toán đó (hoặc bất kỳ) theo cách có thể được thực thi bởi một máy đang lập trình .

Khoa học máy tính là phân tích thuật toán - hiệu quả thời gian / không gian lý thuyết của nó, giới hạn lỗi, v.v ... Điều này có thể được coi là một nhánh của toán học. Tuy nhiên, lưu ý rằng khoa học máy tính và lập trình không thực sự giống nhau. Điều quan trọng là phải có nền tảng về khoa học máy tính nếu bạn muốn trở thành một lập trình viên giỏi, bởi vì nó giúp bạn thiết kế tốt hơn và lý do về các thuật toán bạn phát triển. Nhưng nó không phải là một yêu cầu.

Một lập trình viên giỏi có thể không (trên thực tế, thường không phải là) một nhà toán học giỏi, và ngược lại. Họ là những kỹ năng nhận dạng riêng biệt.


3
Nó phụ thuộc vào tên miền của bạn. Nếu bạn chỉ muốn trở thành một lập trình viên thì bạn không thực sự cần phải biết toán. Nếu bạn muốn trở thành một phần quan trọng của doanh nghiệp (trong nhiều lĩnh vực) thì việc có thể đưa ra giải pháp cho các vấn đề về tên miền là điều cần thiết. Rất thường xuyên những giải pháp đó chỉ có thể được bắt nguồn bằng cách có một nền tảng toán học vững chắc. Bạn có thể không cần phải là một chuyên gia trong bất kỳ lĩnh vực toán học cụ thể nào nhưng bạn nên biết cách áp dụng một mảng rộng của toán học để bạn có thể tìm ra toán học nào có thể giải quyết vấn đề cụ thể của bạn lúc này.
Dunk

2

Tôi đã thấy rất nhiều câu hỏi về các loại diễn đàn này trong những năm qua, vấn đề thực sự nằm ở sự hiểu biết toán học kém của người gửi bài. Chẳng hạn, bất cứ ai có nền tảng tốt về đại số đều hiểu rằng bạn không thể chia cho số không. Nhưng tôi đã thấy nhiều câu hỏi mà người đăng không hiểu điều đó và sau đó không hiểu thông báo lỗi về cơ bản là "bạn không thể chia cho số không". Tôi đã thấy rất nhiều câu hỏi trong đó rõ ràng người đăng không hiểu logic cơ bản. Tôi đã thấy quá nhiều câu hỏi mà các khái niệm về đại số boolean không được hiểu rõ ràng.

Chỉ vì bạn không viết bằng chứng toán học hoặc trực tiếp giải các phương trình như trong sách giáo khoa toán không có nghĩa là bạn không cần phải hiểu các khái niệm đằng sau chúng. Ngẫu nhiên, trong nhiều năm kinh nghiệm làm việc, tôi chưa bao giờ gặp phải một lập trình viên tồi, người có kiến ​​thức vững chắc về toán học.

Trong một số lĩnh vực, bạn sử dụng trực tiếp rất nhiều toán học, như lập trình trò chơi, lập trình thống kê, lập trình tài chính, một số hệ thống nhúng. Trong một số trường hợp này, bạn được cung cấp các phương trình bạn cần trong các yêu cầu và đôi khi bạn không. Tuy nhiên ngay cả khi bạn được đưa ra phương trình, việc dịch các phương trình đó thành mã lập trình yêu cầu bạn phải hiểu phương trình để bắt đầu.

Mặc dù bạn có thể nhận được bằng ít hơn đại số cơ bản trong ứng dụng CRUD cơ bản của mình, hầu hết các vấn đề thú vị hơn và công việc nâng cao hơn liên quan đến sự hiểu biết toán học. Vậy tại sao bạn muốn giới hạn bản thân ngay từ đầu bằng cách không học toán sâu?


2

Hai ví dụ ngay lập tức xuất hiện trong tâm trí là:

Hàm - Ý tưởng áp dụng một phép biến đổi cho các biến đầu vào để tạo ra một biến đầu ra bắt nguồn mạnh mẽ trong toán học. Khái niệm chuyển một hàm xung quanh như một tham số cho một hàm khác thậm chí còn hơn thế. Nói chung, khái niệm tư duy trừu tượng liên quan đến lập trình song song toán học khá chặt chẽ.

bitM Nhiệm vụ - Cách tiếp cận lập trình phổ biến này để giải quyết các vấn đề đòi hỏi ít nhất một sự hiểu biết cơ bản về đại số boolean để thậm chí nắm bắt khái niệm.


1

Từ góc độ lập trình viên: Toán học là một tập hợp con của lập trình.

Toán ứng dụng trong lập trình:

Khi làm việc với các bộ sưu tập (mảng, danh sách, bản đồ, v.v.) trong lập trình, thì bạn đang xử lý các triển khai toán học trong thế giới thực.

Lập trình không có toán:

Nếu bạn làm như vậy println("Hello World"), thì thực tế là một số phép toán được sử dụng để tính toán vị trí trên màn hình, độ dài của chuỗi, v.v., thực sự không liên quan.

Sử dụng lập trình cho toán học:

Thực hiện toán học và vật lý trong một ngôn ngữ lập trình làm cho những thứ như thiết kế hỗ trợ máy tính có thể.


Có một giao điểm của những thứ liên quan đến toán học và lập trình. Không phải là một tập hợp con thích hợp của người khác. Nếu bạn biết thêm MATH, bạn sẽ biết điều đó. Hãy vẽ sơ đồ venn và xem liệu chúng ta có thể tìm thấy một mục trong từng khu vực không. Đại số là toán học liên quan và lập trình liên quan. Nguyên tắc của lập trình hướng đối tượng không liên quan chặt chẽ đến toán học, nhưng là trừu tượng, vì toán học là một sự trừu tượng. Toán học rời rạc là vô cùng hữu ích cho các lập trình viên, cũng như thống kê. Tính toán hiếm khi xuất hiện cho hầu hết các lập trình viên, chưa bao giờ cho tôi trong 30 năm.
Warren P

0

Lập trình thường dựa trên một Mô hình thường là mô hình toán học.

Hãy lấy một ví dụ về việc tạo Máy tính thế chấp. Đối với điều này, bạn cần phải biết những gì quan tâm, những gì là một hợp chất và như vậy. Nếu bạn không có kiến ​​thức về toán học cơ bản thì người khác phải cung cấp thông tin đó cho bạn. Thông thường đó là công việc lập trình viên để làm mọi thứ. Bạn luôn có thể tìm kiếm sự giúp đỡ, nếu cần.

Có những khái niệm đơn giản trong toán học được sử dụng rộng rãi trong lập trình. Ví dụ biểu thức, phương trình, biến, chúng được sử dụng sâu sắc trong lập trình. Nếu bạn không đạt được nó trong môn Toán, bạn có thể không phải là lập trình viên giỏi nhất.

Có toán học mạnh mẽ, cung cấp cho bạn nhiều thứ hơn để mô hình hóa công việc của bạn. Điều đó cuối cùng làm cho bạn một lập trình viên tốt hơn. Ví dụ, bạn có thể muốn vẽ một phương trình bậc hai trong một dự án của mình, theo cách này bạn học được nhiều thứ hơn chỉ vì bạn giỏi toán. Hoặc bạn viết một chương trình để tìm diện tích hình tròn, cho bạn thêm kinh nghiệm.

Trong sự nghiệp giảng dạy ngắn ngủi của mình, tôi thấy rằng nếu sinh viên không có nền tảng toán học, họ gần như bị mất khi làm một vấn đề tài chính. Nếu họ bị mất về mô hình, việc học ngôn ngữ trở nên khó khăn hơn và thực sự rất bực bội.


3
Việc ai đó có thể giải quyết vấn đề tài chính hay không có liên quan đến việc họ có đủ năng lực trong lĩnh vực đó hay không hầu như không liên quan gì đến năng khiếu lập trình. Tôi làm việc với phần mềm xử lý tín hiệu chứa rất nhiều toán học vượt qua đầu tôi. Công việc của tôi không phải là làm toán, nó biến những gì được tạo ra bởi các nhà toán học và người Anh, mà lập trình không thuộc lĩnh vực chuyên môn của họ, thành phần mềm tốt. Bởi vì đó là miền của tôi .
Blrfl

Trong hầu hết các lĩnh vực thực tế, hai lĩnh vực là riêng biệt: Ai đó có mô hình và ai đó phải lập trình nó. Vì vậy, có bạn đúng. Nhưng để ai đó học lập trình từ đầu, họ phải biết toán. Nếu không sẽ khó khăn. Họ phải biết về biến, biểu thức và các thuộc tính toán học khác nhau. Tôi đã làm việc với nhóm tối ưu hóa. Họ đang làm việc trên người giải quyết. Nếu họ không có kiến ​​thức về toán học, họ sẽ không bao giờ làm việc với nó. Tôi đã trả lời dựa trên quan điểm học tập và biết rằng anh ta chỉ là một người học mới đang bước vào lập trình.
Noname

Từ quan điểm học tập, bắt buộc phải có một nền tảng toán học nếu không người khác sẽ không học.
Noname

Người giải quyết rất nhiều vấn đề trong lĩnh vực toán học, điều này sẽ khiến cho lý do rằng một sự hiểu biết về toán học liên quan sẽ được yêu cầu để làm việc với họ. Tôi không nói rằng không có khái niệm toán học liên quan đến lập trình, nhưng như @DeadMG đã chỉ ra trong câu trả lời của anh ấy, có rất nhiều khía cạnh rất thực tế của quá trình mà toán học hoàn toàn không giúp ích gì.
Blrfl

1
@Birfl, DeadMG là, tốt, một chút không biết gì (và hầu như luôn luôn sai). Toán học sẽ luôn luôn giúp đỡ trong tất cả các lĩnh vực "mềm". Tâm lý học dựa trên toán học rất nhiều. Xã hội học thậm chí còn nhiều toán học hơn. Và trong trường hợp thiết kế hệ thống, tốt hơn hết bạn không nên chạm vào nó nếu không có nền tảng rất tốt về ngữ nghĩa (vốn là từ toán học rời rạc). Không có khía cạnh nào trong lập trình mà không phải là toán học. Thiết kế GUI và mã CRUD được bao gồm.
SK-logic

0

Nền tảng lý thuyết của Khoa học Máy tính (không chỉ là lập trình) là bản chất toán học. Tất cả mọi thứ, từ định nghĩa về khả năng tính toán đến phân tích và biểu hiện thuật toán đến thông số kỹ thuật của các ngôn ngữ lập trình đều dựa trên nhiều loại toán học. Xem trang Wikipedia này để biết hương vị của loại toán liên quan.

Hầu hết trong số đó không thực sự cần thiết để biết nếu tất cả những gì bạn muốn làm là mã sling. Theo như toán học ứng dụng, trừ khi bạn đi vào một lĩnh vực đòi hỏi các kỹ năng xử lý số nghiêm trọng (mô phỏng vật lý chi tiết, phân tích tín hiệu, phân tích tài chính và dự đoán, v.v.) có lẽ bạn sẽ không sử dụng bất cứ thứ gì liên quan nhiều hơn đại số cơ bản trên cơ sở hàng ngày.


0

Nó thành thật phụ thuộc vào loại chương trình bạn đang làm.

Nếu bạn đang tạo các ứng dụng web nhẹ với một số logic, có lẽ bạn không cần các lớp toán nâng cao hơn mà nhiều bằng cấp yêu cầu. Nếu bạn đang làm việc với những thứ nặng hơn một chút bộ xử lý, thì bạn sẽ cần nhiều toán hơn. Nếu bạn đang làm việc với bất kỳ lĩnh vực khoa học nào, bạn sẽ thực sự muốn giữ tài liệu tham khảo calc của mình trong tay.

Một nơi khác mà bạn sẽ cần toán học là nếu bạn muốn viết trò chơi. Thứ hai bạn muốn di chuyển theo đường chéo, bạn sẽ cần bắt đầu thực hiện một số tính toán cẩn thận để không kết thúc với các ký tự tăng tốc nếu di chuyển đến một khối sang NE.

Điều đó nói rằng, bạn không nhất thiết phải học toán, sau đó học lập trình. Hoàn toàn hợp lệ để học lập trình, sau đó chọn một số môn toán nâng cao. Tôi bắt đầu viết mã trước khi đặt chân vào lớp Calc hoặc Trig và làm rất tốt. Khi tôi bắt đầu học toán nâng cao, tôi thấy rằng mã hóa thực sự giúp ích cho tôi, vì tôi có thể khám phá chủ đề nhiều hơn bằng cách thay đổi các biến trong một kịch bản nhanh hơn tôi có thể bằng bút và giấy.


Bạn chắc chắn sẽ cần phải biết toán học trig và vector cho các trò chơi.
Alan B

Chắc chắn rồi. Tuy nhiên, tôi cũng đã phát hiện ra rằng viết trò chơi có thể là một cách tuyệt vời để học lại môn toán mà bạn có thể đã quên từ thời trung học, miễn là bạn không đến hạn chót.
kcicky

0

Tôi không có nghĩa là một chuyên gia toán học! Tôi đã làm tốt môn Hình học HS, tất cả đều logic với tôi. Tôi thấy lập trình và hình học rất giống nhau. Logic Boolean liên kết rất tốt trong tâm trí của tôi với bằng chứng hình học.

Sau đó, có những điều nhỏ như biết rằng bạn có thể kiểm soát có bao nhiêu cột trong một hàng bằng cách sử dụng toán tử mô đun.

Tôi rất ủng hộ ý tưởng trở thành một lập trình viên giỏi có một người bạn (hoặc đồng nghiệp / nhà tư vấn) là một nhà toán học giỏi.

Rõ ràng nếu bạn may mắn có cả hai kỹ năng, hãy chạy với nó!


0

Câu trả lời đơn giản; Toán học làm cho bạn nhanh . Chắc chắn, bạn có thể google / se / wikipedia các vấn đề mã hóa của bạn, nhưng hoàn thành đủ toán học và bạn sẽ không cần phải làm vậy . Dù bạn có tin hay không, bộ não con người được đào tạo đúng cách sẽ nhanh hơn google . Ngoài ra, bạn càng biết nhiều toán học, bạn càng có thể hiểu nhanh hơn kết quả mà google / se / wiki mang lại cho bạn và bạn sẽ càng không cần phải đi sâu để hiểu những gì mọi người nói với bạn. Trong quá trình giải quyết các vấn đề lập trình của bạn, cuối cùng bạn sẽ học toán nhưng nếu bạn tập trung vào toán thì đó sẽ là một quá trình hiệu quả hơn nhiều.

Câu hỏi của bạn giống như một nhạc sĩ nhạc rock hỏi tại sao họ cần được đào tạo âm nhạc chính thức. Có thể thành công mà không có nó? Chắc chắn rồi. Nó có làm cho bạn trở nên tồi tệ hơn nhiều nếu bạn đi với nó không? Chắc chắn rồi.

Câu trả lời hơi phức tạp hơn - Khi các nhà toán học và lập trình viên sử dụng từ "giải pháp" (đối với các vấn đề, nghĩa là không phải phương trình - tức là không phải là "gốc") - chúng có nghĩa khá giống nhau. Học để giải các bài toán giúp bạn học cách giải các bài toán lập trình.

BTW - và không có ý xúc phạm đối với bất kỳ ai - bất cứ ai nói rằng anh ta là một lập trình viên giỏi nhưng anh ta ghét toán học là một Kẻ nói dối béo bở. Điều gì đã xảy ra là, họ đã tắt một môn toán chính thức bởi một hs hoặc giảng viên đại học tồi và kể từ đó họ cảm thấy như họ "không giỏi toán". Bất kỳ ai không bị khuyết tật học tập (tức là bất kỳ ai có khả năng học ngôn ngữ OO) đều có khả năng mọi thứ lên đến và bao gồm cả Sophusore Compus.


0

Các hành động làm Toán và 99% Lập trình có rất ít điểm chung. Toán học không bắt buộc phải là một lập trình viên tuyệt vời. Tôi đã tham gia một số khóa học cấp đại học về toán, bao gồm nhưng không giới hạn ở các phần tử Giải tích I, II, III của đại số tuyến tính và một số môn khác.

Tôi đã là một kỹ sư phần mềm trong hơn 10 năm và hiếm khi chỉ cần sử dụng bất cứ thứ gì ngoài toán học cơ bản. Có một số trường hợp ngoại lệ mà toán học là cần thiết: như đồ họa và các lĩnh vực khác. Nhưng 99% công nghệ lập trình và phần mềm không yêu cầu môn Toán. Nó đòi hỏi tư duy logic, thuật toán, OOP, chức năng, giải quyết vấn đề, v.v.


0

1) Khi bạn học lập trình, bạn sẽ bắt gặp thuật ngữ kỹ thuật (nghĩa là thuật toán). Để phân tích thuật toán, người ta phải có một ý tưởng về bản chất của các hàm đa thức, logarit và hàm mũ.

2) Dựa trên một ứng dụng khoa học máy tính, người ta phải có một ý tưởng về toán học rời rạc và toán học liên tục để viết ra lời giải có ý nghĩa. Người ta có thể hiểu thêm về điều này bằng cách trải qua các khóa học như thế-

---> Toán cho Khoa học Máy tính

---> Mã hóa ma trận: Đại số tuyến tính thông qua các ứng dụng khoa học máy tính .

Đối với người mới bắt đầu, tôi cảm thấy ngôn ngữ gõ động như python/ schemelà những ngôn ngữ tốt nhất đầu tiên cho chương trình. Các ngôn ngữ gõ tĩnh như Java/ C++không phải là tốt nhất để bắt đầu. Opencferenceware được xuất bản từ "MIT / UOC-Berkeley / Stanford" có thể hướng dẫn bạn tốt hơn so với chương trình giảng dạy đại học thông thường. Tôi cược bạn!!!


-1

Cá nhân tôi sẽ nói, nó phụ thuộc vào mức độ lập trình có liên quan. Các mô hình dữ liệu và mối tương quan giữa chúng, các thuật toán lập trình liên quan. Ví dụ: để viết một chương trình xuất ra "Hello World", tôi thấy không có yêu cầu làm quen với ai đó với Toán học cao hơn. Mức độ tham gia toán học sẽ phụ thuộc vào mức độ phức tạp của vấn đề cần được giải quyết theo chương trình.


-2

Chỉ là kinh nghiệm của tôi, không còn nữa:
Tôi không phải là nhà toán học. Tôi không phải là một thiên tài, chỉ là một autodidact.
... Và sau nhiều năm, tôi nhận ra mình làm việc bằng trực giác

Đầu tiên tôi học Pick (hệ thống chết) từ đầu (một mình với tài liệu và mẫu giấy),
... sau C, C ++ để giải trí và Java cho công việc.

Như bạn đã nói về nó, tôi có thể nói rằng việc học ngôn ngữ này không phải là một vấn đề toán học (ngay cả khi đại số cơ bản / tối giản giúp bạn,) mà là một vấn đề hợp lý .

Bây giờ nhiều công cụ (như Eclipse) giúp đỡ và sửa lỗi cho bạn: bạn phải tập trung vào những gì bạn muốn làm , chỉ với 52 từ dành riêng ... và nhiều thư viện đã làm việc cho bạn.

Vì vậy, nếu bạn thích ngôn ngữ, hãy chọn một dự án Java, nghiên cứu Thiết kế mẫu, UML, hiểu JVM và cách sử dụng nó với Bigloo và Scala, hiểu lại nhiều lần trong 10 000 giờ.

Kinh nghiệm về Java cung cấp cho bạn các công việc được trả lương cao và trong một thời gian dài trong các dự án lớn trong công nghiệp và bạn sẽ có thể chuyển sang môi trường khác vì bạn có thể nói thông tin chứ không phải toán học .

Nếu hiểu ngôn ngữ (từ ngữ, ý nghĩa, khái niệm và các khoa học logic ẩn giấu khác như ngữ nghĩa, bản thể học, ..) là một mục tiêu tốt cho con người của bạn, thì trong suốt cuộc đời, bạn có thể bắt đầu ngay bây giờ .

Nếu không, thử nghiệm một cách khác.

Trân trọng
Claude


Một lần nữa, xem bài dưới đây. Bạn đang làm toán, bạn chỉ chọn không thừa nhận nó.
jamesson

1
Tôi đã thấy, nhưng tôi cũng tìm thấy những bài đăng khác trả lời câu hỏi đầu tiên về sở thích toán học cho một học sinh (người biết cơ sở, không phải chuyên ngành) với -1 ^ n khi họ nói về logic trong tiếng Latin, triết học, ngôn ngữ ... thực đời sống. Có phải toán học cho tâm trí bị giới hạn đến mức tất cả không nằm trong phương trình bị từ chối, không hiểu cuộc sống xung quanh và quên rằng Newton bắt đầu bằng một trực giác được đưa ra bởi một quả táo? Có lẽ đó là để người điều hành mở rộng tâm trí với các thế giới khác, khi có thể, điều này sẽ làm phong phú cả hai phía của cuộc thảo luận. Không có gì tôi sẽ cẩn thận trong bài viết của mình.
cl-r

-2

Có người suýt đâm vào đầu đinh ở trên. Lập trình là toán học. Cụ thể hơn, lập trình là một nhánh của logic toán học được gọi là lý thuyết tính toán hoặc lý thuyết đệ quy.

Các ngành toán học khác có liên quan trực tiếp, cụ thể là ngôn ngữ chính thức và lý thuyết automata. Những trợ giúp này mô tả các biểu thức chính quy, được sử dụng trong khớp mẫu và ngữ pháp chính thức, được sử dụng để mô tả và phân tích các ngôn ngữ lập trình.

Bất cứ ai nói rằng lập trình không phải là toán học cũng không biết họ đang nói về điều gì, hoặc có một động cơ thầm kín, như một người theo chủ nghĩa tối đa "Sở hữu trí tuệ", hy vọng kiếm được lợi nhuận bằng cách lấy bằng sáng chế về thuật toán hoặc một số toán học cơ bản khác Thực tế hay khám phá.

Một số tài liệu tham khảo cho lập trình như toán học, và hệ quả là không biết bạn đang nói về cái gì:

Chương trình là bằng chứng: Logic thế kỷ 19 và máy tính thế kỷ 21

Các chương trình là Bằng chứng: Mô hình và Loại trong Tính toán Lambda

Bài viết tương ứng của Curry-Howard

Về hiệu quả bất thường của logic trong khoa học máy tính

Hiệu quả phi lý của logic

Đúng, những thứ đó nặng về phần "logic" của logic toán học, nhưng toán học thường được thừa nhận là một vài tiên đề và hậu quả logic của chúng được phát triển thông qua logic thứ tự đầu tiên.

Theo như nói khác và là một người tối đa hóa "IP" vì tiền:

Làm thế nào để cấp bằng sáng chế một thuật toán ở Mỹ . Các thuật toán không được cấp bằng sáng chế, nhưng bằng sáng chế được cấp cho các thuật toán bằng cách không coi chúng là thuật toán. Không khó để tìm thấy nhiều tài liệu trên web chỉ ra hoặc cố gắng giải thích mâu thuẫn đó.


6
-1 cho vượn quảng cáo ở cuối.
Charles E. Grant

@ sành điệu quảng cáo chống lại ai? Các poster gốc? Tôi nghĩ rằng quan điểm về bằng sáng chế là sâu sắc (ngay cả khi nó có thể được thực hiện tốt hơn).
gcbenison

@gcbenison, "Bất cứ ai nói rằng lập trình không phải là toán học ... hoặc có một động cơ thầm kín" là một cuộc tấn công vượn quảng cáo cổ điển: Tôi không phải phản hồi lại lập luận của bạn vì bạn là người xấu. Tôi thấy khó chịu vì tôi không nghĩ lập trình là toán học tôi nghĩ bằng sáng chế phần mềm là một điều kinh tởm. Tôi có bằng MS về Toán ứng dụng, mặc dù tôi có biết tôi đang nói về điều gì hay không thì chắc chắn sẽ tranh luận.
Charles E. Grant

@commentators: cảm ơn. Tôi sử dụng để phớt lờ những hành vi đó bởi vì chúng tự phóng chiếu sự khốn khổ lên người khác. --- tới Bruce Ediger: Đang nghi ngờ có phản xạ.
cl-r

@ cl-r: Tôi đã nghĩ đến việc ví dụ rất cụ thể, như các chiến dịch SCO chống Linux, và nature.com/news/... Nếu chúng ta như các lập trình viên để cho các luật sư xác định toán học để lợi luật sư, sau đó chúng tôi làm tất cả các nền văn minh một tai hại lớn .
Bruce Ediger

-2

Toán học là tất cả mọi thứ để làm với lập trình. Ví dụ, trong lập trình trò chơi, bạn cần sử dụng matyh cho vật lý và làm ít hơn mọi thứ. Để di chuyển vị trí x của người chơi trong Java bạn sẽ làm int x = x + speed * deltaTimehoặc int x = x - speed * deltaTimeNhưng bạn có thể nói rằng đó là toán học cơ bản vì vậy hãy chuyển sang các công cụ nâng cao hơn. Có một thuật toán để đánh giá người chơi cờ được gọi là Thuật toán Elo.

Đây là giải thích thuật toán Elo

Nếu bạn vẫn nghĩ rằng đây là cơ bản thì hãy thử nó. Làm thế nào để bạn tính tuổi của một số người khi bạn được đưa ra một ngày sinh, tháng và năm. Trừ năm sinh từ năm nay và sau đó kiểm tra xem tháng có nhỏ hơn tháng này không và nếu không trừ 1.

Đó không phải là phép thuật, nó là một công việc khó khăn và toán học tốt.


-4

Ok, có lẽ tôi sẽ nhận được rất nhiều phiếu bầu cho việc này, nhưng lập trình và toán học là hai thứ hoàn toàn không liên quan. Ai đó có thể là một nhà phát triển tuyệt vời chỉ biết những điều cơ bản như cộng, nhân và các thao tác logic cơ bản.

Hầu hết các nhà phát triển sẽ không giải quyết một phương trình duy nhất trong sự nghiệp chuyên nghiệp của họ và những thứ như ký hiệu O lớn cũng có thể được nắm bắt theo cách phi toán học. Bạn chỉ cần nghĩ về các công cụ, tưởng tượng các bit lật trong đầu và voila, bạn có thể biết loại công cụ O lớn là gì, nếu ai đó giải thích nhật ký và sức mạnh là gì.

Đôi khi toán học có thể làm cho nó đơn giản hoặc nó có thể khiến bạn cảm thấy tự hào rằng bạn đã chứng minh điều gì đó, vì bạn có thể mở rộng ý nghĩa của lập trình sang một miền toán học thông qua việc đặt tên nó là toán học rời rạc và như vậy, nhưng học rất nhiều phương trình vi phân và tích phân, và Làm thế nào để chứng minh điều đó, IMHO không chính xác là ý tưởng tốt nhất phải làm gì nếu bạn muốn thành công như một lập trình viên.

Ít nhất tôi đã không chạm vào toán học trong 10 năm, tôi đã tranh luận với các giáo sư toán học của mình mọi lúc, và khi tôi cần một toán học để kết xuất thời gian thực, tôi đã học mọi thứ từ góc nhìn của lập trình viên, mà không cần chứng minh bất kỳ định lý nào, và đối với tôi thật đơn giản và dễ nắm bắt so với tất cả các giáo sư toán học, trong đó đưa vào đầu chúng tôi một lời nhận xét "bạn không thể là một lập trình viên giỏi nếu bạn không biết toán". Chắc chắn bạn có thể, dễ dàng!

Bây giờ tôi biết các công cụ toán học, để tôi có thể nói chuyện với các lập trình viên nền toán học với tất cả các khác biệt và công cụ của nhật ký, nhưng chỉ vì lý do để chúng không bị ngất. Bởi vì công cụ đó vô dụng 99,9% thời gian và khi có, nó có thể được học 1000 lần hiệu quả hơn từ quan điểm của lập trình viên.

Heck, lập trình viên cần ít nhất 5 năm để thành thạo ngôn ngữ lập trình + khung + thực hành tốt nhất. Tại sao trên trái đất họ nên học cách chứng minh các định lý? Học sinh toán làm các công cụ toán học, các lập trình viên làm cho công cụ đó chạy, đó là cách nó hoạt động.


8
Một đứa trẻ nói với mẹ rằng nó sẽ không cần toán học vì nó sẽ lớn lên và trở thành một cầu thủ bóng chày triệu phú. Mẹ anh nói với anh rằng "Bạn sẽ cần toán học để đếm hàng triệu người".
Nav

2
Xin lỗi, tôi phải không đồng ý. Học toán dạy bạn cách suy nghĩ logic. Nếu bạn không thể suy nghĩ một cách logic, tất cả những gì bạn sẽ viết là một loạt các mã không có tỷ lệ. Tôi không nói rằng bạn phải là một chuyên gia về toán học hoặc thậm chí thích toán học, bạn cũng không phải sử dụng nó trong cuộc sống hàng ngày. Nhưng bạn cần phải nghiên cứu nó nếu bạn muốn giải quyết các vấn đề lập trình thực sự.
jmort253

2
@ jmort253: Học toán không khiến bạn trở thành người có tư duy logic. Đó là một cái gì đó có dây trong tâm trí của bạn, hoặc không. Tôi ghét môn toán từ khi đi học, nhưng tôi là người rất logic. Lập trình không phải là toán học, tôi tham gia lập trình hệ thống trong hơn 10 năm và tôi có thể nói rằng với độ tin cậy 100% và bạn có thể mong đợi toán học ít hơn khi bạn tham gia phát triển web hoặc quản trị SQL. Nhiệm vụ của bạn không phải là phát triển các lý thuyết toán học mới, nhiệm vụ của bạn là làm cho các công cụ hoạt động bằng cách sử dụng các nguồn lực hạn chế theo cách có thể duy trì bằng cách sử dụng các thuật toán và container hiệu quả nhất.
Coder

2
@Nav: Nó có ý nghĩa đối với mỗi người đối với toán cơ bản, cho đến các phương trình với x và y. Nhưng đếm hàng triệu của bạn thường là những gì kế toán viên và luật sư làm, bởi vì nếu không bạn sẽ bỏ lỡ một số luật tiểu bang phải làm một cái gì đó với tuyên bố và mất tất cả mọi thứ. Bạn nên đủ thông minh để hiểu những gì đang diễn ra, nhưng một khi bạn nổi trội ở một thứ gì đó, sẽ hiệu quả hơn khi sử dụng các dịch vụ chuyên biệt sẽ giúp bạn làm việc chính xác, nhanh chóng và đúng giờ, trong khi bạn giữ dáng trong phòng tập thể dục, để giữ vững vị trí top 5 kiếm được.
Coder

10
Toán học không phải là quá trình giải phương trình. Nếu toán học duy nhất bạn từng thấy là toán học được dạy ở trường, thì bạn chưa bao giờ thấy toán học thực sự .
doppelgreener
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.