Bạn có phải giỏi toán để trở thành một lập trình viên giỏi? [đóng cửa]


78

Dường như trí tuệ thông thường cho thấy những lập trình viên giỏi cũng giỏi toán. Hoặc là hai bằng cách nào đó liên kết với nhau về bản chất. Nhiều cuốn sách lập trình tôi đã đọc cung cấp nhiều ví dụ là giải pháp cho các vấn đề toán học, hoặc bằng cách nào đó có liên quan đến toán học như thể những ví dụ này là điều có ý nghĩa với hầu hết mọi người.

Vì vậy, câu hỏi tôi muốn nổi là: bạn có phải giỏi toán để trở thành một lập trình viên giỏi không?


1
@Mark Không nhất thiết. Học một môn học và thích nó là hai điều rất khác nhau.
Tối

3
Bạn có phải là một vị vua? Hoặc cặp song sinh dính liền? Nếu không, tôi khuyên bạn nên bám lấy "tôi" khi đề cập đến chính mình.
drxzcl

1
@jk - bạn đúng khả năng nhất physics.about.com/od/alberteinstein/p/einsteinpro.htm vẫn nghĩ rằng có một số lượng tốt của nghệ thuật để lập trình; p
Garet Claborn

3
Tôi nghĩ rằng tôi không bao giờ thích toán học. Sau này, tôi nhận ra mình không hài lòng với cú pháp.
MrFox

1
Tất cả các lập trình viên đều sử dụng toán học mọi lúc, họ chỉ không nhận ra điều đó bởi vì nó khác rất nhiều so với toán học được dạy ở trường. Toán học kín đáo, tính toán lambda, đại số Boolean, logic (!) Là những khái niệm toán học thực sự tiên tiến mà chúng ta sử dụng hàng ngày.
rotman

Câu trả lời:


83

Tôi nghĩ nó phụ thuộc vào loại chương trình bạn muốn làm. Theo như một lập trình viên trong thế giới kinh doanh, tôi sẽ nói rằng câu trả lời là không. Bạn có thể trở thành một lập trình viên tuyệt vời mà không cần biết toán học nâng cao. Khi bạn cuối cùng phải đối phó với toán học, các công thức thường được xác định trong các yêu cầu nghiệp vụ để nó chỉ trở thành vấn đề thực hiện chúng trong mã.

Mặt khác, nếu bạn muốn trở thành một lập trình viên cấp thấp hoặc nói tạo ra các công cụ đồ họa 3D, toán học sẽ đóng một vai trò rất lớn.


6
Tôi muốn nói thêm rằng tôi đã thấy một số tiến sĩ toán học và vật lý viết mã khủng khiếp. Những kỹ năng này chồng chéo đến một mức độ nhưng chúng là các ngành riêng biệt.
MrFox

133

Tôi đang đi ngược lại ngũ cốc và nói có, bạn cần một tư duy toán học . Hầu hết mọi người nghĩ về toán học như làm các công thức số học hoặc ghi nhớ công thức phức tạp. Điều này giống như hỏi bạn có cần đánh vần hoàn hảo hay một từ vựng phi thường để trở thành một nhà văn giỏi.

Viết là về giao tiếp, và toán học / lập trình là về quá trình tư duy logic rõ ràng (theo cách mà bạn không thể mắc lỗi; phương trình không cân bằng hoặc chương trình không biên dịch). Cụ thể, suy nghĩ logic đó thể hiện ở:

  • Khả năng ước tính / hiểu sự khác biệt giữa các số: O (n ^ 2) so với O (lg (n)), cảm giác trực quan của KB so với MB so với GB, mức độ chậm của đĩa so với RAM. Nếu bạn không nhận ra KB nhỏ bé như thế nào so với GB, bạn sẽ lãng phí thời gian để tối ưu hóa những thứ không quan trọng.
  • Hàm / lập trình hàm (có phải là trùng hợp ngẫu nhiên khi phương trình f (x) = x ^ 2 giống với cách bạn viết phương thức đó không? Các từ "thuật toán" và "hàm" đã xuất hiện trong thế giới toán học trước khi máy tính đầu tiên ra đời :-))
  • Đại số cơ bản để tạo và sắp xếp lại các phương trình của riêng bạn, lấy trung bình, số liệu thống kê cơ bản

Vì vậy, tôi sẽ nói rằng bạn cần một tư duy toán học , có thể xây dựng và điều khiển các mô hình tinh thần về những gì chương trình của bạn đang làm, thay vì một bộ sưu tập các sự kiện & định lý. Một số lĩnh vực như đồ họa hoặc cơ sở dữ liệu cũng sẽ có một số sự kiện bạn cần, nhưng với tôi đó không phải là bản chất của việc "giỏi toán".


1
Toán chính so với tư duy toán học: nó giống như sự khác biệt giữa việc biết tất cả các công thức vật lý và có thể nảy chính xác một quả bóng cao su ra khỏi một tấm ván cách xa 20 mét!
TehShrike

9
Tôi sẽ nói thêm rằng nhiều lập trình viên giỏi biết chơi cờ hoặc đi :-)
xanatos

1
Rất nhiều mã máy tính về cơ bản là đại số mặc dù bạn đang thiết lập nó cho máy tính chứ không phải tự giải quyết nó. Nếu bạn không hoàn toàn ở nhà với đại số, làm thế nào bạn có thể mong đợi để làm một công việc tốt của việc này?
Loren Pechtel

18
Tư duy toán học là chìa khóa để lập trình. Tôi đang thêm phiếu bầu của mình để nhấn mạnh chính xác điều đó.
Gus

4
Toán học +1 rất quan trọng trong việc hiểu ngôn ngữ lập trình vì nó là nền tảng của nghề thủ công của chúng tôi. Hầu hết các cấu trúc ngôn ngữ lập trình mà chúng ta sử dụng hàng ngày được nâng lên từ các môn toán như phép tính lambda.
MattDavey

53

Có nhiều lĩnh vực lập trình khác nhau và nhiều lĩnh vực không đòi hỏi kiến ​​thức toán học đặc biệt cao. Bạn sẽ không bao giờ có thể viết một công cụ 3D, nhưng bạn chắc chắn sẽ có thể phát triển các ứng dụng kinh doanh và web. Hãy đối mặt với nó - hoạt động toán học phổ biến nhất trong hầu hết các chương trình máy tính là tăng từng số một.

Tôi sẽ khá vui vẻ thú nhận rằng tôi chưa bao giờ đặc biệt thích môn toán hoặc giỏi về nó (tôi thực sự đã tốt nghiệp bằng Văn học Anh!) Và đã làm việc như một nhà phát triển chuyên nghiệp trong hơn 12 năm nay. Tôi phát triển hầu hết các ứng dụng web, những thứ hiếm khi đòi hỏi nhiều toán học. Quan trọng hơn là khả năng suy nghĩ logic, có thể chia nhỏ các vấn đề thành nhiều phần và có hiểu biết rộng về các công nghệ và khuôn khổ khác nhau có liên quan.

Là một lập trình viên, bạn có nhiều khả năng phải thực hiện một thuật toán hiện có hơn là nghĩ ra một thuật toán hoàn toàn mới . Cần phải làm việc ra, nói, lãi kép? Bạn không cần phải tự mình tìm ra, chỉ cần tra cứu công thức và áp dụng nó. Hầu hết các vấn đề đã được giải quyết, bạn chỉ cần biết cách thực hiện các giải pháp bằng ngôn ngữ bạn chọn. Điều đó không có nghĩa là giỏi toán sẽ không phải là một lợi thế ; chỉ là nó không hoàn toàn cần thiết .

Khi tôi ở trường vào giữa những năm 80 khi máy tính ở nhà không phổ biến, tôi thường viết các chương trình để giải bài tập về nhà. Tôi thường không thể làm điều đó trong đầu, nhưng tôi có thể áp dụng bất kỳ công thức nào được yêu cầu như một thói quen phần mềm. Bạn không cần phải là một Pythagoras khác để tìm ra cạnh dài nhất của tam giác vuông, bạn chỉ cần có thể viết mã a² + b² = h²bằng ngôn ngữ bạn chọn.


3
Tài chính và kế toán không phải xấu, trừ khi bạn đang thực hiện các tùy chọn giá hoặc một cái gì đó như thế.

5
Bạn có một điểm, Chris, nhưng ngay cả với các ứng dụng tài chính, bạn có nhiều khả năng thực hiện các công thức hơn là nghĩ ra chúng.
Dan Diplo

2
@Mark - Đúng, nhưng tôi muốn hiểu các vấn đề làm tròn là một câu hỏi về việc biết loại chính xác để sử dụng. Bạn không cần phải giỏi toán để biết rằng (ví dụ) số thập phân tốt hơn số nổi cho các giá trị tiền tệ. Và tôi không nghĩ một nhà toán học sẽ tự động nhận ra kiểu dữ liệu chính xác để sử dụng - đó là một câu hỏi về học tập.
Dan Diplo

3
@ SK-logic: Nghiêm khắc hơn, mọi thứ máy tính làm đều logic . Một số trong các hoạt động logic đó được hiểu là toán học (và một số người cho rằng logic là một nhánh của toán học, phần lớn là sự phẫn nộ của một số nhà triết học).
Donal Fellows

3
@Donal Fellows, logic chính thức là một phép toán. Và các nhà triết học dù sao cũng được công nhận vì những đóng góp lịch sử của họ cho toán học, cũng như các nhà toán học đã trả thù (ví dụ, bằng cách phát minh ra một số thứ kỳ lạ như 'đơn nguyên').
SK-logic

30

Bạn không cần phải giỏi toán. Tuy nhiên, bạn phải giỏi logic và giải quyết vấn đề. Tuy nhiên, những người giỏi logic và giải quyết vấn đề thường cũng giỏi toán. Tôi muốn nói rằng nó thực sự phụ thuộc vào loại toán. Bạn có thể rất tệ khi tính toán (như tôi), và vẫn là một lập trình viên giỏi (như tôi). Nhưng nếu bạn gặp rắc rối với Toán học rời rạc và Lý thuyết tập hợp, có lẽ bạn sẽ thấy rất nhiều khía cạnh của lập trình khá khó khăn.


Bạn không cần phải giỏi logic để giỏi "giải quyết vấn đề". Nhiều vấn đề, nếu không phải là hầu hết, các vấn đề có thể được giải quyết bằng cách sử dụng phương pháp phỏng đoán không liên quan đến logic.
ElGringoGrande

1
Bạn có chắc chắn rằng bạn là một lập trình viên giỏi? :)
Russell

17

Tôi nghĩ điều quan trọng là phải xem xét kỹ tại sao bạn không thích môn toán.

Không thích một môn học thuật thường là điều gì đó xảy ra ở trường, và có thể là do mâu thuẫn với một giáo viên nào đó, thiếu tự tin vào khả năng của chính bạn trong một môn học, hoặc áp lực nhóm ngang hàng.

Lập trình! = Toán học. Nó thậm chí không "cảm thấy" giống như toán học đối với tôi (và tôi rất thích toán học, mặc dù không làm tốt đến cuối các nghiên cứu chính thức của tôi về nó). Nhiều kỹ năng mà bạn có thể sử dụng trong toán học là hữu ích, cần thiết ngay cả trong lập trình, nhưng nhiều lập trình viên tự dạy mình phần lớn. Không thích môn toán ở trường có khá nhiều khả năng hoặc khả năng lập trình của bạn.


Tôi thấy rất nhiều bài giảng tồi xung quanh môn toán. Bản chất của nó là biến đổi một vấn đề thành một vấn đề đã biết, sau đó nói "giải quyết" mà không cần thêm một từ nào. Nhưng trong giảng dạy, nó có khả năng yêu cầu bạn đi trước và thực hiện lại bằng chứng để vượt qua các cấp độ thấp hơn.
Balog Pal

16

Toán học và lập trình có liên quan rất chặt chẽ vì toán học thực sự là ngôn ngữ phổ quát giữa con người và máy tính. Bạn không cần phải biết nhiều toán học để lập trình cấp cao vì rất nhiều thứ nằm sau hậu trường, nhưng nó sẽ giúp hiểu được rất nhiều khái niệm lập trình nâng cao hơn. Nếu bạn có kế hoạch thực hiện nhiều chương trình cấp thấp hơn (lập trình hệ thống hoặc thiết bị), thì bạn sẽ cần phải biết nhiều toán hơn.


11
+1. Bạn cũng sẽ cần toán học nếu bạn muốn làm những việc "cấp độ cao" như xử lý tín hiệu, học máy, thị giác máy tính, kết xuất 3D, mô phỏng vật lý, hoạt hình, hình học tính toán, mật mã và có lẽ nhiều lĩnh vực khác tôi không thể nghĩ đúng hiện nay.
nikie

2
@nikie: Vâng, nhưng đó là toán học ứng dụng . Sự khác biệt lớn. ^^
gablin

Ừ Thật ra toán học không phải là ngôn ngữ phổ quát. Logic là thế. Và Logic là lĩnh vực của các triết gia. Dù sao, về cách máy tính thực sự hoạt động, bạn tốt hơn nên biết về kỹ thuật điện / điện tử và triết học chính thức hơn là toán học. Bạn chỉ cần toán mỗi lần nếu bạn đang làm khoa học máy tính, không thực sự lập trình trong bối cảnh của sự nghiệp.
RibaldEddie

14

Một cái tốt ? Rất khó xảy ra. Hầu hết các mẫu thiết kế có ít nhất một số cơ sở trong các khái niệm toán học. Những thứ cần thiết cho lập trình, như biến, vòng lặp, thủ tục và đối tượng, là tương tự với các khái niệm trong các lĩnh vực toán học như đại số, giải tích và lý thuyết tập hợp.

Cũng xem xét rằng khoa học máy tính là một tập hợp con của toán học: thuật toán và logic hình thức, dựa trên tất cả các chương trình dựa trên, về cơ bản là toán học .

Nếu bạn ghét toán học, bạn sẽ ghét lập trình.


13

Hầu như tất cả mọi người đã trả lời: "bạn có cần biết toán học để trở thành một lập trình viên giỏi không?" Câu trả lời chính xác cho điều này là: "Không, không thực sự, nhưng nó có ích", như nhiều người đã nói.

Nhưng cách giải thích của tôi về câu hỏi là "có mối tương quan chặt chẽ giữa năng khiếu toán học và năng khiếu lập trình không?" Câu trả lời đúng cho điều này là: "Có, có." Nếu bạn đấu tranh thông qua đại số, hình học và tính toán, thì có lẽ bạn không giỏi trong việc xử lý trừu tượng và / hoặc suy nghĩ logic. Nếu bạn không giỏi toán, có lẽ bạn sẽ không bao giờ trở thành một lập trình viên tuyệt vời. (Không phải là bạn không nên thử.)


11

Nó phụ thuộc vào những gì bạn đang lập trình. Chẳng hạn, một công cụ trò chơi 3D sẽ cực kỳ khó khăn (nếu không nói là không thể) với bất kỳ mức độ kết hợp nào mà không có kiến ​​thức về các khái niệm toán học thích hợp.


11

"Thích" và "có năng lực tại" là những thứ hoàn toàn khác nhau - vì vậy miễn là bạn đánh số đúng thì tôi không thể thấy lý do tại sao bạn phải thích toán.

Nhưng hãy hoàn toàn rõ ràng ở đây - lập trình có một nền tảng vững chắc về toán học và sớm hay muộn hầu như bất kỳ sự phát triển không tầm thường nào cũng sẽ liên quan đến các phép tính - bạn không thể che giấu điều này.

Bất kỳ lập trình nào cũng liên quan đến logic (cơ bản trong toán học), hầu hết lập trình hiện đại có thể liên quan đến những thứ (như SQL) liên quan đến lý thuyết tập hợp (ngay cả khi nó không rõ ràng) và nếu nó không xảy ra thì đó có thể là trường hợp bạn tắt các lĩnh vực (như lập trình trò chơi) thậm chí còn dựa trên toán học rõ ràng hơn (kết xuất - toán học, AI -> xác suất và ngẫu nhiên - toán học ...) và cứ thế tiếp tục.

Kết quả của những điều trên là bạn phải thoải mái với những con số - bạn chắc chắn phải hiểu tại sao "Có 10 loại người trên thế giới, những người hiểu nhị phân và những người không" là buồn cười. Nhưng có lẽ bạn đã viện cớ "2 + 2 = 5 ... cho các giá trị rất lớn là 2".


+1, điều này thực sự đáng buồn; Tôi thực sự đã cười vào trò đùa đó.
Ben

10

Khái niệm cơ bản của toán học là sau đây, nghĩ ra, hiểu, thực hiện và sử dụng các thuật toán. Nếu bạn không thể làm toán thì đó là vì bạn không thể làm những việc này, và nếu bạn không thể làm những việc 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ý), nhưng các kỹ năng cơ bản giống hệt nhau và thiếu khả năng trong một miền sẽ được kết hợp bởi sự thiếu khả năng tương ứng trong miền khác.


9

Thành thật mà nói, tôi là một học sinh giỏi toán ở trường. Đại số hoàn toàn vượt xa tôi vào thời điểm đó và tôi không nghĩ mình đã cao hơn điểm D trong đó.

Tuy nhiên, một vài năm sau đó, sau khi làm việc như một nhà phát triển phần mềm chuyên nghiệp, tôi quay lại trường đại học và tham gia một khóa học về đại số. Trước sự ngạc nhiên của tôi, đó là lớp dễ nhất tôi có, và tôi có điểm A trong đó.

Sự thật là, lập trình đã dạy tôi đại số, bởi vì hầu như mọi thứ chỉ là một biểu thức đại số.

Vì vậy, không, bạn không cần nó để bắt đầu. Nó giúp, nhưng nó không bắt buộc. Điều hay ho về phát triển phần mềm như một phương tiện để dạy toán là trình biên dịch, trình gỡ lỗi và chương trình thực thi là những cách tuyệt vời để xác minh rằng bạn đã có câu trả lời đúng. Về vấn đề này, gỡ lỗi đặc biệt là một lợi ích lớn cho việc học, bởi vì bạn có thể bước qua mã và xem từng bước đánh giá thuật toán của bạn.


Tôi trở lại trường sau 10 năm phát triển phần mềm và tôi đang trải nghiệm điều tương tự. Tôi thấy Giải tích và Thống kê dễ dàng hơn nhiều vì tôi có thể liên kết hầu hết các khái niệm với một số chức năng mà tôi đã viết trong nhiều năm qua. Tôi tức giận khi nghĩ về các sơ đồ Venn không biết khi tôi tự dạy mình tham gia SQL. Nó giống như gian lận.
Heath Lilley

7

Nó phần nào phụ thuộc vào chính xác những gì bạn đang làm, mặc dù điều đó chắc chắn không thể làm tổn thương.

Ví dụ, một người học chuyên ngành Khoa học Máy tính đã phải trải qua rất nhiều môn toán để lấy bằng. CS thường tập trung rất nhiều vào các thuật toán và tính chính xác của chúng, được chứng minh thông qua các bằng chứng kiểu toán học cấp cao. Nhiều chương trình CS của Đại học rất gần với chương trình toán của họ đến nỗi một chuyên ngành kép chỉ cách một vài khóa học. Ngay cả với tư cách là một chuyên gia Kỹ thuật phần mềm, bản thân tôi, tôi chỉ cách một môn toán nhỏ.

Tuy nhiên, điều đó đang được nói, rất nhiều bằng chứng, cấu trúc dữ liệu, phương pháp tìm kiếm và công cụ chính xác thuật toán mà tôi đã học không thực sự được đưa vào sử dụng trực tiếp kể từ khi tôi học xong. Nhưng thật khó để tôi nói rằng ít nhất nó đã không cho tôi một nền tảng tốt và hiểu rõ hơn về những gì tôi làm ở mức độ thấp.

Bởi vì bất kể bạn nhìn nó như thế nào, ở cấp độ thấp nhất, mọi thứ bạn đang làm đều sôi sục với toán học.


7

Bạn có thể trở thành một nhà phát triển phần mềm giỏi mà không cần toán học không? Vâng tôi cũng nghĩ thế. Bạn có thể trở thành loại lập trình viên anh hùng mà mọi người nói đến mọi lúc không? Tôi nghĩ là không.

Vấn đề là, hầu hết, nếu không phải tất cả, các lập trình viên anh hùng (nghĩ Dennis Ritchie), có nền tảng khoa học máy tính hoặc toán học. Để trở thành một lập trình viên thực sự tuyệt vời, bạn cần hiểu các thuật toán ở mức độ không chỉ là bề ngoài, điều đó có nghĩa là bạn buộc phải đi sâu vào khoa học máy tính chính thức. Và khoa học máy tính chỉ là toán ứng dụng.

Tương tự, sự hiểu biết về phép tính lambda sẽ là vô giá đối với một kiến ​​trúc sư hệ điều hành hoặc một nhà thiết kế ngôn ngữ.


7

Tôi đã thấy chủ đề này tranh luận qua lại. Tôi đã làm việc với những người có bằng cấp về toán học nghĩ rằng họ có thể sinh ra và trong vòng một hoặc hai năm thay đổi nghề nghiệp. Một trong những lập trình viên giỏi nhất mà tôi từng có niềm vui khi được làm việc với bằng tiến sĩ Hóa sinh và không bao giờ học lớp lập trình / CS chính thức ở trường mà tự học và bắt đầu một công ty phần mềm thành công!

Cuối cùng, điều làm nên một lập trình viên giỏi đến vĩ đại là một người có khả năng hiểu logic, quy trình làm việc, có thể học hỏi bằng ví dụ và sẵn sàng nghiên cứu để tìm giải pháp. Ngoài ra, bạn phải học cách kinh doanh các ứng dụng của bạn. Tôi ghét các lập trình viên tự hào rằng họ không hiểu kế toán, nhưng viết các ứng dụng kế toán. Họ luôn đưa ra những giả định không chính xác và thực sự làm chậm sự phát triển.

Bạn sẽ thấy, bất kể bạn học trường nào, bạn sẽ học được nhiều hơn sau một năm học so với 4 năm học. Trường dạy bạn cách học với bộ kỹ năng cơ bản - nhưng kinh nghiệm trong thế giới thực có giá trị hơn nhiều theo thời gian.

Kinh nghiệm là giáo viên tốt nhất và khi bạn phải áp dụng toán học vào phát triển phần mềm, miễn là bạn học kinh doanh - bạn sẽ ổn. Ngoài ra, hãy nhớ, như một bài đăng trước đó đã nói, trừ khi bạn đang cố gắng làm việc trên một công cụ đồ họa 3D hoặc hệ thống tọa độ đồ họa như ứng dụng GIS, toán học bạn học được ở trường trung học là tất cả những gì bạn thực sự cần.

Tôi đã làm việc trên các hệ thống Kế toán và Thanh toán - và tôi chưa bao giờ phải tìm ra Nhật ký (x), SIN, COS, v.v để xử lý sổ cái chung hoặc cho phép nhập dữ liệu. Một tạp chí Lão hóa không phải là "toán học cao" nhưng rất quan trọng để đánh giá các vấn đề AP.

Nghĩ về điều đó, tôi chưa bao giờ gặp một kế toán viên với một máy tính khoa học trên bàn của họ!


5

Câu trả lời ngắn gọn là không. Tôi nghĩ đó là một chút hoang đường nhưng nó bị ảnh hưởng bởi vì các vấn đề toán học thường rất phù hợp để được giải quyết bằng máy tính.

Vì vậy, ở đại học / đại học, mọi người sẽ gặp phải các vấn đề toán học cần giải quyết trong các môn compsci nhưng điều bạn thường thấy là toán học thực sự khó giải hơn mã cần thiết để thực hiện giải.

Khi bạn bước vào thế giới thực, bạn sẽ ngày càng thấy rằng các vấn đề được giải quyết phần lớn cho bạn, công việc của bạn sẽ chỉ là thực hiện chúng theo mã.


5

Bạn phải học toán, hoặc tự tạo. Dù bằng cách nào, điều quan trọng là phải giỏi về nó dưới hình thức này hay hình thức khác.

Miễn là bạn có thể làm việc với các giá trị và hiểu những gì họ đang làm, tại sao và những gì bạn có thể khiến họ làm, thì toán học truyền thống có thể không phải lúc nào cũng cần thiết. Thỉnh thoảng nó thậm chí còn cản trở.

Có nhiều cách khác nhau để trực quan hóa giá trị của byte khác với số, nhưng chúng chắc chắn là phương thức được suy nghĩ nhiều nhất sau phương thức. Chẳng hạn, việc viết một tư duy chương trình về tất cả các giá trị là màu sắc là khả thi.

Việc lập trình ngày nay thu được phần lớn giá trị của nó từ việc có thể biểu diễn 1 và 0 dưới dạng các loại dữ liệu khác nhau. Mặc dù thực sự những số 1 và 0 đó hoàn toàn không phải là số, nhưng bước sóng điện thay đổi, toán học không được chơi nhiều như vật lý, ... tuy nhiên , ... rất quan trọng trong việc hiểu rất nhiều về những gì lập trình viên khác nói và mã.

Tuy nhiên, có thể trở thành một lập trình viên giỏi mà không cần toán học, tuy nhiên khó khăn.


1
Suy nghĩ về tất cả các giá trị như màu sắc gần như có ý nghĩa THÊM. Khi bạn đi quá xa một đầu của quang phổ, bạn sẽ kết thúc ở phía đối diện ...
Tối đa

Độ (như trong 0 - 360, ngoại trừ 0 - 256) đôi khi cũng có ích =) Bạn không thực sự cần phải suy nghĩ theo nghĩa số cho màu sắc hoặc độ nhiều như giá trị 'đầy đủ'.
Garet Claborn

5

Tôi vừa hoàn thành một khóa học giới thiệu về toán học rời rạc, và tôi thấy rằng tôi đã biết hầu hết mọi thứ về logic vị ngữ nhờ lập trình; tất cả những gì mới là cú pháp - về cơ bản nó chỉ hoạt động với booleans.

Tóm lại: có lẽ bạn không cần phải học toán một cách rõ ràng , nhưng chỉ bằng cách trở thành một lập trình viên, bạn có thể đã học được một số môn toán mà không nhận ra. Đó là, bằng cách trở thành một "lập trình viên giỏi", bạn cũng thực sự là một nhà toán học (ở một mức độ nào đó).

Bản tin Curry-Howard minh họa điều tôi muốn nói: về cơ bản, nó nói rằng bằng chứng toán học và các chương trình máy tính nhất định là "đẳng cấu", nghĩa là chúng là những cách viết khác nhau. Tất nhiên, nó thực sự phức tạp hơn thế này, nhưng tôi không phải là nhà toán học, vì vậy đây là lời giải thích tốt nhất tôi có thể đưa ra. Hy vọng rằng nó không quá xa vời.

Tóm lại, không chỉ có nhiều lĩnh vực trong CS và lập trình liên quan đến rất nhiều toán học, mà ngay cả những ý tưởng lập trình cơ bản (ví dụ booleans) về cơ bản là toán học được ngụy trang.


4

Đây là một câu hỏi rất khó trả lời và có khả năng sẽ khuấy động rất nhiều cuộc tranh luận.

Một trong những lý do tại sao câu hỏi này rất khó là vì nó một phần phụ thuộc vào loại công việc bạn đang làm. Không có nhiều toán học liên quan đến hầu hết các ứng dụng kinh doanh, vì vậy bạn có thể có được bằng sự hiểu biết vững chắc về đại số và toán kinh doanh. Tuy nhiên, các ứng dụng nâng cao hơn đòi hỏi toán học nâng cao hơn và bạn bắt đầu cần một sự hiểu biết vững chắc về phép tính, đại số tuyến tính và những thứ tương tự.

Tuy nhiên, đó chỉ là một phần của phương trình mà bạn vẫn cần một mức độ toán học nhất định cho việc thực hành lập trình. Không cần phải nói rằng bạn cần phải thoải mái với logic để có thể viết một chương trình cơ bản cũng như đại số cơ bản. Nhìn xa hơn một chút chỉ để một chương trình cơ bản hoạt động mặc dù bạn cần có sự hiểu biết về các khía cạnh nhất định của toán học rời rạc để có thể đưa ra quyết định về điều gì làm cho một thuật toán tốt sử dụng cho một vấn đề nhất định.

Để trở lại trung tâm của câu hỏi mặc dù. Cá nhân tôi không nghĩ bạn cần trở thành một nhà toán học để trở thành một lập trình viên giỏi; tuy nhiên, tôi nghĩ rằng bạn cần phải thoải mái với toán học để có thể trở thành một lập trình viên tổng quát giỏi.


4

Vâng chắc chắn.

Ngay cả việc chạy chương trình kinh doanh của nhà máy cũng đòi hỏi một số kỹ năng về toán học.

Chạy chương trình kinh doanh nhà máy đòi hỏi kỹ năng cơ sở dữ liệu. Để trở thành một lập trình viên cơ sở dữ liệu tốt đòi hỏi sự hiểu biết về cách thức hoạt động của cơ sở dữ liệu và các thuật toán mà bộ xử lý truy vấn sử dụng khi dịch các truy vấn của bạn là gì. Không có sự hiểu biết về các giới hạn và các công cụ phái sinh (hoặc thậm chí là sự hiểu biết cơ bản rằng dòng y = x giao với dòng y = x ^ 2 hai lần), việc so sánh chính xác một kế hoạch truy vấn kết hợp bên trong khớp với một tham gia vòng lặp lồng nhau là không khả thi kế hoạch truy vấn.

Ngoài ra, một lập trình viên giỏi có thể làm việc ở bất kỳ miền nào, miễn là họ nghiên cứu một chút: trò chơi, mô phỏng, phát triển nhúng, trình biên dịch, hệ điều hành, công cụ web, cơ sở dữ liệu, v.v. chính xác để có thể nhanh chóng học cách làm tất cả những điều đó) đòi hỏi một nền tảng toán học kha khá.

Tôi muốn nói rằng một người nên có một số kinh nghiệm tại một số thời điểm với những điều sau đây:

  1. 3 học kỳ của Calc
  2. Khác biệt
  3. Đại số tuyến tính
  4. Đại số hiện đại
  5. Xác suất cơ bản, đếm và thống kê

4

Toán học không chỉ là công thức. Hiểu một số nguyên tắc toán học về lý thuyết tập hợp là rất hữu ích để nắm bắt các khái niệm phức tạp trên các hệ thống kiểu, vì hiểu được sự phức tạp là điều tối quan trọng đối với việc sử dụng cấu trúc dữ liệu hiệu quả.

Lý thuyết đồ thị cũng cực kỳ hữu ích, vì nhiều vấn đề lập trình có thể được mô hình hóa bằng đồ thị. Tôi đã rất ngạc nhiên, khi tôi đang phát triển một ứng dụng kinh doanh, để tìm ra rằng các định lý đường đi ngắn nhất đang cung cấp một giải pháp tao nhã cho một vấn đề nhức nhối mà tôi gặp phải!


4

Tôi luôn coi lập trình là không có gì ngoài toán học.

Nó không giống như đại số trung học.


4

Toán học là phòng kiến ​​thức của lập trình.

Có thể làm việc với các lớp dựa trên các lớp trừu tượng, mô hình, "đối tượng hóa" của các hàm, biến đổi và khái niệm thời gian, toán học là nền tảng đào tạo hoàn hảo cho tất cả điều đó.

Có thể phát triển tư duy đúng đắn để lập trình mà không cần toán học nhưng khó hơn rất nhiều.

Tuy nhiên, các chuyên gia sang một bên, chỉ hiểu toán học là quan trọng, biết tên của mọi thứ và làm thế nào một định lý có thể được chứng minh là không. Vì vậy, ngay cả khi bạn có điểm cao trong môn toán vì bạn đã học tất cả mà không thực sự hiểu, bạn vẫn sẽ phải vật lộn với lập trình.


4

Kiến thức toán học tốt cho một số ứng dụng (như chơi game, trí tuệ nhân tạo, đồ họa máy tính, v.v.), nhưng toán học dạy cho bạn một cái gì đó ngoài công thức hoặc phương trình phức tạp.

Học toán cũng giống như học một ngôn ngữ lập trình mới. Trong thực tế, lập trình được áp dụng toán học. Khi bạn học một ngôn ngữ mới, bạn học được rất nhiều điều giúp bạn trở thành một lập trình viên giỏi hơn. Nó không khác với toán học, nhưng nếu bạn thực sự thành thạo toán học, bạn sẽ mãi mãi là một lập trình viên giỏi hơn, thậm chí bạn không sử dụng toán nâng cao trong công việc của mình.

Lý do rất đơn giản: toán học dạy bạn nhìn thế giới bằng con mắt khác. Nó dạy bạn giải quyết các vấn đề với các cách tiếp cận khác nhau mà không nhất thiết phải lập trình. Cách suy nghĩ mới này chắc chắn đã đưa bạn đến một cách tốt hơn để thực hiện công việc của bạn.

Lập trình là một nghệ thuật. Toán học là một nghệ thuật. Nếu bạn kết hợp cả hai bạn sẽ là một nghệ sĩ tốt hơn.


Lập trình về cơ bản chỉ là logic áp dụng, và trên thực tế toán học cũng chỉ là logic áp dụng.
RibaldEddie

3

Không.

Giống như hầu hết các ngành khoa học, có một sự hiểu biết tốt về các khái niệm toán học sẽ rất hữu ích, đặc biệt khi đánh giá những thứ như hiệu quả. Nhưng đối với hầu hết các nhiệm vụ lập trình, khả năng toán học của bạn chỉ có liên quan nếu vấn đề bạn giải quyết có liên quan đến toán học.

Máy tính rất giỏi trong việc làm toán, do đó, có ý nghĩa rằng các máy tính ban đầu được sử dụng rộng rãi để thực hiện 'công việc nặng nề' liên quan đến rất nhiều công việc toán học phức tạp. Rất nhiều phần mềm vẫn không giải quyết vấn đề toán học phức tạp, trong trường hợp đó là giỏi toán sẽ giúp bạn viết một chương trình tốt hơn, nhưng nó không phải là những gì làm cho bạn một lập trình viên tốt.


3

Thông thường, không phải theo nghĩa mà bạn cần biết, nói, tính toán hoặc phương trình trig để làm hầu hết công việc. Nếu bạn đang làm chương trình đồ họa / trò chơi nặng, thì có. Một hack toán học nổi tiếng cho Quake là một ví dụ tốt về điều này. Tuy nhiên, suy nghĩ mà bạn phải có trong khi xử lý toán cấp cao hơn chắc chắn có thể áp dụng cho lập trình; với lập trình, bạn đang phát triển cấu trúc logic của riêng bạn, các chức năng của riêng bạn, "bằng chứng" của riêng bạn.

Lần duy nhất tôi chạy qua toán học trong công việc của mình (quy trình và ứng dụng doanh nghiệp nội bộ) là khi tôi thực hiện một số ứng dụng báo cáo yêu cầu kiến ​​thức về thống kê, nhưng đó chỉ vì nó được áp dụng trực tiếp cho các yêu cầu.


3

Tôi sẽ nói không nhất thiết. Một số ngành lập trình nhất định (tiền điện tử, đồ họa, động cơ vật lý, v.v.) chắc chắn sẽ có lợi thế rõ ràng cho khuynh hướng toán học, nhưng tôi không nghĩ rằng sự hiểu biết tốt về phương trình vi phân sẽ đặc biệt hữu ích cho lập trình web.

Logic Boolean có lẽ là một yêu cầu để trở thành một lập trình viên giỏi, nhưng sẽ không làm tôi ngạc nhiên nếu nhiều người không đạt được điểm cao trong môn toán ở trường trung học hóa ra lại giỏi lập trình.


3

Tôi muốn nói rằng bạn chắc chắn không cần phải giỏi toán để trở thành một lập trình viên giỏi.

Công việc đầu tiên của tôi là lập trình viên là làm đồ họa 3D cho kế hoạch nhiệm vụ B-52 và Cruise Missile. Đó là một ứng dụng chuyên sâu về toán, nhưng tôi thực sự chỉ cần truy cập vào những người giỏi / giỏi toán. Tôi không cần biết công thức tính khoảng cách vòng tròn lớn giữa hai điểm. Tôi cần phải biết cách chuyển đổi công thức để nó hoạt động với ngôn ngữ lập trình. Tương tự với mô phỏng chuyến bay. Boeing đã làm tất cả các phép toán mà chúng ta phải áp dụng nó.

Trải nghiệm đó cũng giúp tôi hiểu được ai sẽ là một lập trình viên giỏi và ai sẽ không. Công việc có các phi công và hoa tiêu tham gia một nhiệm vụ với tư cách là lập trình viên và để giúp các lập trình viên hiểu được nhu cầu của nhiệm vụ. Bạn thường có thể nói trong vòng một vài tuần những phi công và hoa tiêu sẽ giỏi về điều đó. Chuyên ngành toán thường lấy lập trình ngay.

Vì vậy, tôi sẽ nói rằng giỏi toán làm cho nhiều khả năng bạn sẽ giỏi lập trình, nhưng tôi biết rất nhiều lập trình viên giỏi không giỏi toán.


3

Tôi không thích môn toán và tôi luôn đạt điểm môn toán thấp. Tôi không muốn nói rằng tôi là một lập trình viên giỏi, tuy nhiên tôi làm trong ngành công nghiệp phần mềm trong 10 năm với rất nhiều thành công.


1
Tôi hoàn toàn liên quan đến các lớp toán của bạn. Tôi thực sự cảm thấy mình không phải là một Lập trình viên tồi và không quá tệ với môn Toán, nhưng vì một số lý do, tôi dường như không thể vượt qua điểm "Trung bình" trong các khóa học Toán của tôi, bất kể tôi có cố gắng thế nào.
Bryan Harrington

@Bryan, tôi có thể liên quan đến điều đó
jasonco

3

Những người không thích toán học có thể trở thành một lập trình viên giỏi không?

Không, không - không, không, có và không!

Không, bởi vì bạn thường cần nó.

(! (a | (! (b && c) || d) && (! e)))

Tại sao nó không hoạt động?

foo ('a', 'b', 19, g(h))
bar ('c', 'd', 44) 

nó có thể được viết lại theo một cách trừu tượng hơn?

Là 968 ms nhiều hơn hoặc ít hơn 0,7 giây? Bạn cần bao nhiêu MB, máy có bao nhiêu Ghz, một byte sẽ là đủ - toán học là một phần của công việc. Đôi khi toán học rõ ràng và cao hơn.

Luôn luôn ngầm toán.

Toán học là một lĩnh vực rộng, từ tính toán, ma trận, đến hình học, logic, thống kê, lý thuyết phạm trù, lý thuyết đồ thị. Vì vậy, nếu bạn tin rằng bạn đang lập trình mà không sử dụng toán học - có thể bạn đã sai.

Nếu bạn xem xét các vấn đề tại trang Project Euler , bạn sẽ tìm thấy các câu đố, nơi tôi không có ý tưởng, toán học được sử dụng để giải quyết nó như thế nào. (Không phải tôi có thể giải quyết chúng mà không cần toán học.) Lưu ý rằng kích thước bài toán thường lớn đến mức bạn không thể giải quyết chúng bằng vũ lực.

Tuy nhiên - vì tôi không thể giải được nhiều trong số chúng (khoảng 2/3 cho đến bây giờ), điều đó có nghĩa là tôi không thích môn toán?

Nếu bạn không học toán, có lẽ bạn sẽ không biết, nơi bạn có thể tìm thấy toán học trong cuộc sống hàng ngày của mình, bao gồm cả lập trình.

Ngay cả khi bạn chỉ chuyên di chuyển các thành phần GUI trên màn hình để trông ổn, bạn vẫn đang làm toán theo một cách nào đó.

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.