คณิตศาสตร์จำเป็นสำหรับการเขียนโปรแกรมหรือไม่? [ปิด]


117

ฉันเคยถกเถียงกับเพื่อนคนหนึ่งในสมัยเรียนมหาวิทยาลัยว่าคณิตศาสตร์ขั้นสูงจำเป็นสำหรับโปรแกรมเมอร์รุ่นเก๋าหรือไม่ เขาเคยเถียงอย่างดุเดือดกับเรื่องนั้น เขากล่าวว่าโปรแกรมเมอร์ต้องการความรู้ทางคณิตศาสตร์ขั้นพื้นฐานจากคณิตศาสตร์ระดับมัธยมหรือปีใหม่ของวิทยาลัยไม่มากไปกว่านั้นและงานเขียนโปรแกรมเกือบทั้งหมดสามารถทำได้โดยไม่ต้องใช้คณิตศาสตร์ขั้นสูง อย่างไรก็ตามเขาแย้งว่าอัลกอริทึมเป็นพื้นฐานและต้องมีสินทรัพย์สำหรับโปรแกรมเมอร์

จุดยืนของฉันคือความก้าวหน้าทางวิทยาการคอมพิวเตอร์ทั้งหมดขึ้นอยู่กับความก้าวหน้าทางคณิตศาสตร์เกือบทั้งหมดดังนั้นความรู้อย่างละเอียดในคณิตศาสตร์จะช่วยโปรแกรมเมอร์ได้อย่างมากเมื่อพวกเขาทำงานกับปัญหาที่ท้าทายในโลกแห่งความเป็นจริง

ฉันยังไม่สามารถตัดสินได้ว่าข้อโต้แย้งด้านใดถูกต้อง คุณช่วยบอกจุดยืนของคุณจากประสบการณ์ของคุณเองได้ไหม?


7
ฉันโทรหาครูสอนคณิตศาสตร์ของฉันในอีกสิบปีต่อมาเพื่อบอกเขาว่าฉันไม่เคยใช้คณิตศาสตร์ขั้นสูงเลยทั้งอาชีพของฉัน ดิ๊กฉันรู้ แต่เป็นคำถามที่ดี! บวกหนึ่ง.
Chris McCall


โปรดดูคำตอบที่ได้รับการโหวตสูงสุดสำหรับคำถามนี้
Boris Stitnicky

ค่อนข้างมากกว่า. ปิดสิ่งนี้ควรย้ายไปยังโปรแกรมเมอร์
Chris Cudmore

คำตอบ:


111

ในการตอบคำถามของคุณตามที่ตั้งไว้ฉันจะต้องตอบว่า "ไม่คณิตศาสตร์ไม่จำเป็นสำหรับการเขียนโปรแกรม" อย่างไรก็ตามตามที่คนอื่น ๆ แนะนำในหัวข้อนี้ฉันเชื่อว่ามีความสัมพันธ์ระหว่างการเข้าใจคณิตศาสตร์และความสามารถในการ "คิดตามอัลกอริทึม" นั่นคือสามารถคิดเชิงนามธรรมเกี่ยวกับปริมาณกระบวนการความสัมพันธ์และการพิสูจน์

ฉันเริ่มเขียนโปรแกรมเมื่อฉันอายุประมาณ 9 ขวบและมันคงเป็นการพูดได้ว่าฉันได้เรียนรู้คณิตศาสตร์มามากแล้วในขั้นนั้น อย่างไรก็ตามด้วยความพยายามเล็กน้อยฉันก็สามารถเข้าใจตัวแปรสำหรับลูปคำสั่ง goto (ยกโทษให้ฉันฉันเป็น Vic 20 BASIC และฉันยังไม่ได้อ่าน Dijkstra เลย) และเรขาคณิตพิกัดพื้นฐานเพื่อวางกราฟิกบนหน้าจอ .

ในที่สุดฉันก็สำเร็จการศึกษาระดับเกียรตินิยมในสาขาคณิตศาสตร์บริสุทธิ์พร้อมกับผู้เยาว์ในสาขาวิทยาศาสตร์คอมพิวเตอร์ แม้ว่าฉันจะมุ่งเน้นไปที่การวิเคราะห์เป็นหลัก แต่ฉันก็ศึกษาคณิตศาสตร์แบบไม่ต่อเนื่องทฤษฎีจำนวนตรรกะและทฤษฎีการคำนวณค่อนข้างน้อย นอกเหนือจากความสามารถในการใช้แนวคิดบางอย่างจากสถิติทฤษฎีความน่าจะเป็นการวิเคราะห์เวกเตอร์และพีชคณิตเชิงเส้นในการเขียนโปรแกรมแล้วยังมีคณิตศาสตร์เพียงเล็กน้อยที่ฉันศึกษาซึ่งสามารถใช้ได้โดยตรงกับการเขียนโปรแกรมของฉันในช่วงปริญญาตรีและการเขียนโปรแกรมเชิงพาณิชย์และการวิจัยที่ฉันทำในภายหลัง

อย่างไรก็ตามฉันเชื่ออย่างยิ่งว่าวิธีการคิดอย่างเป็นทางการที่คณิตศาสตร์ต้องการเช่นการให้เหตุผลอย่างรอบคอบการค้นหาตัวอย่างตอบโต้การสร้างรากฐานเชิงสัจพจน์การระบุความเชื่อมโยงระหว่างแนวความคิด - เป็นความช่วยเหลืออย่างมากเมื่อฉันจัดการกับโครงการเขียนโปรแกรมขนาดใหญ่และซับซ้อน

พิจารณาวิธีที่นักกีฬาฝึกกีฬาของพวกเขา ตัวอย่างเช่นไม่ต้องสงสัยเลยว่านักฟุตบอลใช้เวลาส่วนใหญ่ในการฝึกฝนทักษะพื้นฐานฟุตบอล อย่างไรก็ตามเพื่อปรับปรุงความฟิตโดยทั่วไปพวกเขาอาจใช้เวลาที่โรงยิมด้วยจักรยานหรือเครื่องพายเรือยกน้ำหนัก ฯลฯ

การเรียนคณิตศาสตร์สามารถเปรียบได้กับเวทเทรนนิ่งหรือครอสเทรนนิ่งเพื่อเพิ่มความแข็งแกร่งทางจิตใจและความแข็งแกร่งในการเขียนโปรแกรม เป็นสิ่งสำคัญอย่างยิ่งที่คุณจะต้องฝึกฝนทักษะการเขียนโปรแกรมขั้นพื้นฐาน แต่การเรียนคณิตศาสตร์เป็นการฝึกจิตที่น่าทึ่งซึ่งช่วยเพิ่มความสามารถในการวิเคราะห์หลักของคุณ


6
ฉันอยากจะเสริมว่าคณิตศาสตร์ไม่ใช่แค่การฝึกน้ำหนักเพื่อความแข็งแกร่งทางจิตใจของคุณ แต่ยังเปิดประตูไปสู่ปัญหาและแนวทางแก้ไขใหม่ ๆ ตัวอย่างเช่นในระหว่างการฝึกงานด้านการประมวลผลภาพไม่มีวิธีใดที่ฉันจะสามารถใช้อัลกอริธึมการกำจัดสัญญาณรบกวนของเราได้หากไม่มีความเข้าใจอย่างถ่องแท้เกี่ยวกับ PDE รหัสผลลัพธ์นั้นเรียบง่าย แต่แม่นยำมาก และคณิตศาสตร์คือสิ่งที่ทำให้เราอยู่ที่นั่น ยิ่งไปกว่านั้นคือความงามของสูตรเหล่านี้ นิพจน์ PDE ขนาดเล็กหนึ่งตัวสามารถแปลโค้ดได้ไม่กี่หน้า หากไม่มีสูตรเริ่มต้นก็ยากที่จะดูว่าคุณจะลงเอยอย่างไร
โจ

คณิตศาสตร์ไม่จำเป็นสำหรับการเขียนโปรแกรมเนื่องจากการเขียนโปรแกรมเป็นคณิตศาสตร์ อาจเป็นคณิตศาสตร์ที่ดีหรือคณิตศาสตร์ที่ไม่ดี (เช่นเมื่อการเรียกยาวของลิงอุรังอุตังทับศัพท์เป็นภาษาอุรังอุตัง) แต่เมื่อใดก็ตามที่โปรแกรมเมอร์ออกแบบโมเดลวัตถุของบางครั้ง ze ก็ (โดยปกติไม่รู้ตัว) แสดงการกระทำของคณิตศาสตร์ ดังนั้นอีกครั้งเราไม่จำเป็นต้องอ่านหนังสือคณิตศาสตร์เพื่อเขียนโปรแกรม แต่ไม่มีอะไรเปลี่ยนแปลงในความจริงที่ว่าการเขียนโปรแกรมเป็นคณิตศาสตร์และนั่น (ตามที่ Euclid กล่าวไว้) ไม่มีถนนหลวงไป
Boris Stitnicky

56

ในขณะที่คณิตศาสตร์ขั้นสูงอาจไม่จำเป็นสำหรับการเขียนโปรแกรม (เว้นแต่คุณจะเขียนโปรแกรมความสามารถทางคณิตศาสตร์ขั้นสูง) กระบวนการคิดของการเขียนโปรแกรมและคณิตศาสตร์มีความคล้ายคลึงกันมาก คุณเริ่มต้นด้วยพื้นฐานของสิ่งที่รู้จัก (สัจพจน์ทฤษฎีที่พิสูจน์แล้วก่อนหน้านี้) และพยายามไปยังสถานที่ใหม่ ๆ คุณไม่สามารถข้ามขั้นตอนได้ หากคุณข้ามขั้นตอนคุณจะต้องกรอกข้อมูลในช่องว่าง มันเป็นกระบวนการคิดที่สำคัญที่ทำให้ทั้งสองคล้ายกันอย่างไม่น่าเชื่อ

นอกจากนี้นักคณิตศาสตร์และโปรแกรมเมอร์ต่างก็คิดวิเคราะห์ในนามธรรม สิ่งต่างๆในโลกแห่งความเป็นจริงแสดงโดยวัตถุและตัวแปร ความสามารถในการแปลจากรูปธรรมเป็นนามธรรมยังเชื่อมโยงทั้งสองฟิลด์

มีโอกาสที่ดีมากที่ถ้าคุณเก่งในด้านหนึ่งคุณอาจจะเก่งในด้านอื่น ๆ


ดังนั้นคุณจึงสามารถพูดได้ว่าคนที่เล่นปริศนาอักษรไขว้หรือเล่น Scrabble มีแนวโน้มที่จะเก่งในการเขียนโปรแกรมมากกว่าคนที่ไม่ทำ ความสัมพันธ์ดูเหมือนจะเกี่ยวกับความเป็นไปได้มากกว่าการพึ่งพาที่เข้มงวด
Liam

ความเข้มงวดและวินัยในการแก้ปัญหาทางคณิตศาสตร์แปลว่าการเขียนโปรแกรม คุณต้องมีความสามารถในการแยกแยะปัญหาและเข้าใกล้ปัญหาตั้งแต่แรกจากทิศทางที่ชัดเจนจากนั้นจากทิศทางที่สร้างสรรค์มากขึ้นในทั้งสองสาขา
Bramha Ghosh

4
โปรแกรมเมอร์ที่ยอดเยี่ยมสองคนที่ฉันชื่นชมมากไม่ได้เรียนวิทยาศาสตร์คอมพิวเตอร์ แต่ได้รับการฝึกฝนให้เป็นนักคณิตศาสตร์และเพิ่งเปลี่ยนเส้นทางอาชีพ: Miguel de Icaza และ Alexander Stepanov อย่างไรก็ตาม Stepanov เคยกล่าวไว้ว่าในขณะที่ทำงานเกี่ยวกับคณิตศาสตร์ "คุณไม่ได้เริ่มต้นด้วยสัจพจน์: คุณจบลงด้วยสัจพจน์" : D
Joe Pineda

@ เลียม - มันเกี่ยวกับการจับคู่รูปแบบและการเล่นกลสิ่งต่างๆในความทรงจำในระยะสั้น ทั้งสองกิจกรรมต้องใช้ทักษะเหล่านั้น
jcolebrand

+1 สำหรับ "มีโอกาสที่ดีมากที่ถ้าคุณเก่งในเรื่องหนึ่งคุณอาจจะเก่งในด้านอื่น ๆ "
Thorbjørn Ravn Andersen

39

วิทยาการคอมพิวเตอร์! = การเขียนโปรแกรม

ตกลงอย่างจริงจังฉันรู้จักโปรแกรมเมอร์ที่ดีและไม่ดีซึ่งเป็นสาขาวิชาภาษาอังกฤษและจิตวิทยาและบางคนเป็นสาขาวิชาวิทยาศาสตร์คอมพิวเตอร์ คนดัง ๆ บางคนที่ฉันชื่นชมเพราะนักพัฒนาไม่มีพื้นฐานด้าน CS Larry Wall (Perl) เป็นนักภาษาศาสตร์ ในทางกลับกันการรู้บางอย่างเกี่ยวกับโดเมนที่คุณกำลังทำงานอยู่จะช่วยให้คุณทราบได้อย่างน้อยว่าข้อมูลของคุณเหมาะสมหรือไม่และช่วยให้ลูกค้า / ผู้ใช้เจาะลึกลงไปในสิ่งที่พวกเขาต้องการจริงๆ และใช่มีปัญหาเรื่องความซับซ้อนในการคำนวณและโครงสร้างข้อมูลที่มีประสิทธิภาพและความถูกต้องของโปรแกรม นั่นคือสิ่งที่คุณเรียนรู้ในวิทยาการคอมพิวเตอร์และเป็นประโยชน์ที่จะต้องรู้ในเกือบทุกโดเมน แต่ก็ไม่จำเป็นหรือเพียงพอ


12
ฉันคิดว่าคำพูดที่ดีที่สุดที่ฉันเคยได้ยินคือ "วิทยาศาสตร์คอมพิวเตอร์ไม่เกี่ยวกับคอมพิวเตอร์มากกว่าดาราศาสตร์คือเรื่องของกล้องโทรทรรศน์" (Dijkstra)
tloach

5
ฉันคิดว่า stackoverflow.com ถูกสร้างขึ้นโดยพื้นฐานเพื่อเอาชนะคำตอบประเภทเดียวนี้ แต่ก็มีคนที่มีใจเดียวกัน 15 คนที่ยกคำตอบที่ไร้ประโยชน์นี้ขึ้นไปด้านบน ฉันไม่มีอะไรเป็นส่วนตัวกับคุณ แต่ฉันได้ตั้งค่าสถานะคำตอบของคุณว่า "ไม่เหมาะสม" อย่างน้อยก็สำหรับฉัน
simsim

2
@simsim: ฉันคิดว่ามันไม่เหมาะสมที่ผู้คนคิดว่าปริญญา CS เกี่ยวข้องกับการเขียนโปรแกรม
tloach

3
@simsim: ไม่สำคัญว่า Joel และ Jeff จะคิดอย่างไรเมื่อพวกเขาสร้างเว็บไซต์นี้ ทุกอย่างเกี่ยวกับการสร้างชุมชนที่โปรแกรมเมอร์ช่วยเหลือซึ่งกันและกัน ฉันคิดว่าคำตอบสั้น ๆ ของเดวิดนั้นตรงเป้าหมาย +1
Scottie T

@ สก็อตตี้: ถ้าเป็น "ทุกอย่างเกี่ยวกับการสร้างชุมชนที่โปรแกรมเมอร์ช่วยเหลือกัน" ฟอรัมและรายชื่อส่งเมลก็จะเพียงพอแล้ว บางทีฉันอาจจะรุนแรงไปหน่อยในการตอบกลับของฉัน แต่ก็น่าแปลกใจที่เห็นผู้ใช้ 15 คนโหวตให้กับ "คำตอบ" ที่ไร้เหตุผลก่อนที่จะแก้ไขแน่นอน :-)
simsim

29

ผมคิดว่าผมกำลังจะเป็นคนแรกที่จะบอกว่าคุณทำคณิตศาสตร์จำเป็น ดังที่คนอื่น ๆ กล่าวว่าคณิตศาสตร์ไม่ใช่สิ่งที่สำคัญสำหรับพัฒนาการบางด้าน แต่พื้นฐานของการคิดวิเคราะห์และการวิเคราะห์เชิงโครงสร้างมีความสำคัญมาก

ยิ่งไปกว่านั้นคณิตศาสตร์มีความสำคัญในการทำความเข้าใจพื้นฐานจำนวนมากที่เกี่ยวข้องกับสิ่งต่างๆเช่นตัวกำหนดตารางเวลาการเพิ่มประสิทธิภาพการเรียงลำดับการจัดการโปรโตคอลและอีกหลาย ๆ ด้านของคอมพิวเตอร์ แม้ว่าคณิตศาสตร์ที่เกี่ยวข้องจากระดับการคำนวณจะไม่ซับซ้อน (ส่วนใหญ่เป็นพีชคณิตระดับมัธยมศึกษาตอนปลาย) ทฤษฎีและการประยุกต์ใช้อาจค่อนข้างซับซ้อนเนื่องจากความเข้าใจที่มั่นคงเกี่ยวกับคณิตศาสตร์ผ่านแคลคูลัสจะเป็นประโยชน์อย่างยิ่ง

คุณจะทำได้โดยไม่ต้องใช้มันอย่างแน่นอนและคุณไม่ควรปล่อยให้ความรู้คณิตศาสตร์ที่มีน้อยจนแทบจะฉุดรั้งคุณไว้ แต่ถ้าคุณมีโอกาสหรือมีความโน้มเอียงฉันจะเรียนคณิตศาสตร์ให้มากที่สุดเท่าที่จะทำได้แคลคูลัสทฤษฎีตัวเลขเชิงเส้น พีชคณิตคอมบิเนเตอร์การประยุกต์ใช้งานจริงทั้งหมดนี้มีทั้งการใช้งานจริงและเชิงทฤษฎีในวิทยาการคอมพิวเตอร์ที่หลากหลาย

ฉันรู้จักคนที่ประสบความสำเร็จอย่างสูงทั้งสองด้านของรั้ว (คนที่ไม่เน้นคณิตศาสตร์มากและคนที่ไปโรงเรียนฟิสิกส์หรือคณิตศาสตร์) แต่ทั้งสองกลุ่มพวกเขาชอบปัญหาตัวเลขและเรียนรู้เกี่ยวกับอัลกอริทึมและทฤษฎีคณิตศาสตร์ .


ฉันสองที่ แม้ว่าใครจะผ่านพ้นไปได้ - เราจะเสียใจกับการตัดสินใจของเขาหรือไม่? หากคุณคาดหวังว่าจะมีงานที่น่าตื่นเต้น / ท้าทายในระดับปานกลางทักษะทางคณิตศาสตร์ที่คุณได้รับจะช่วยคุณได้อย่างแน่นอน
Andras Vass

พอใช้! GrayWizardx และอื่น ๆ : ในฐานะผู้เรียนรู้ด้วยตนเองคุณแนะนำอะไรในแง่ของสื่อการอ่าน? ฉันถูกปิดการใช้งานอย่างมากด้วยวิธีการที่เลวร้ายอย่างร้ายแรงซึ่งสอนคณิตศาสตร์ให้กับฉันเมื่อฉันยังเด็ก ฉันไม่ต้องการโทษที่อื่น แต่คณิตศาสตร์ถูกนำเสนออย่างเลวร้าย ตอนนี้ถึงเวลาแลก ง่ายแค่ไหนที่จะเรียนรู้คณิตศาสตร์ที่ระบุไว้ที่นี่ (แคลคูลัส, พีชคณิตเชิงเส้น, คณิตศาสตร์ไม่ต่อเนื่อง ฯลฯ ) ด้วยตัวคุณเอง มีชุดตำราเฉพาะที่แนะนำสำหรับแนวทางนี้หรือไม่? ปริญญาตรีไม่ใช่ทางเลือกอีกต่อไป!
Emmel

1
@Emmel ฉันเคยเห็น "The Manga guide to Math" และ "The Manga guide to Calculus" ที่ Barnes and Noble ที่นั่นและฉันรู้ว่าฉันได้เห็น "Complete Idiots Guide to Linear Algebra" เมื่อวันก่อน สำหรับแหล่งข้อมูลจริงมีเว็บไซต์คณิตศาสตร์ที่ยอดเยี่ยมอยู่บ้าง (สำหรับนักเรียน ฯลฯ ) แต่ฉันไม่แน่ใจว่ายังมีอยู่กี่แห่ง สิ่งหนึ่งที่ฉันทำทุกครั้งก็คือไปที่วิทยาลัยชุมชนและ "ตรวจสอบ" ชั้นเรียนคณิตศาสตร์ (เอาไปสอบ / ไม่ผ่าน) และรับการทบทวน ไม่ได้ทำมา 5-6 ปีแล้ว แต่ครั้งสุดท้ายก็มีประโยชน์มาก
GrayWizardx

26

ฉันจบการศึกษาด้านคณิตศาสตร์ แต่ฉันจำไม่ได้ว่าต้องใช้วิชาคณิตศาสตร์ครั้งเดียวในอาชีพของฉัน มันมีประโยชน์ในแง่ของการฝึกความคิดเชิงตรรกะ แต่ฉันไม่ได้เขียนโค้ดใด ๆ โดยใช้พลศาสตร์ของไหลทฤษฎีควอนตัมหรือ Markov Chains (สุดท้ายน่าจะเกิดขึ้นมากที่สุดฉันสงสัย)

นักพัฒนาสายงานธุรกิจส่วนใหญ่ไม่ต้องการคณิตศาสตร์ขั้นสูงเกือบตลอดเวลา บางครั้งการรู้ตรีโกณมิติสามารถช่วยได้และแน่นอนว่าการเข้าใจคณิตศาสตร์มากพอที่จะใช้อัลกอริทึมที่อธิบายไว้ในทางคณิตศาสตร์ก็มีความสำคัญ - แต่นอกเหนือจากนั้น? Nah

อย่าลืมว่าโปรแกรมเมอร์ส่วนใหญ่ไม่ได้ก้าวหน้าทางวิทยาการคอมพิวเตอร์ แต่พวกเขากำลังสร้างแอปพลิเคชัน ฉันไม่จำเป็นต้องรู้วิศวกรรมขั้นสูงในการขับรถสมัยใหม่แม้ว่ารถคันนั้นจะได้รับการปรับปรุงผ่านวิศวกรรมขั้นสูงแล้วก็ตาม


ฉันเห็นด้วยกับสิ่งที่คุณพูดส่วนใหญ่อย่างไรก็ตามไม่สามารถพูดได้ว่าหลาย ๆ ด้านของการเขียนโปรแกรมสามารถง่ายขึ้นอย่างเห็นได้ชัดโดยการทำความเข้าใจหลักการทางคณิตศาสตร์ทั่วไป บางครั้งสูตรสำหรับบางสิ่งบางอย่างก็ง่ายกว่าการตั้งโปรแกรมมากกว่าอัลกอริทึมเพื่อให้ได้ค่าเดียวกันนั้น ... ตราบใดที่คุณรู้สูตรนั้น
BenAlabaster

@balabaster: บางครั้ง - แต่ฉันจะบอกว่ามันไม่ได้เกิดขึ้นบ่อยนัก คุณไม่จำเป็นต้องรู้สูตรก่อนจึงจะใช้งานได้ การมีความสามารถทางคณิตศาสตร์เป็นสิ่งที่ดีดังนั้นคุณจึงสามารถเข้าใจสูตรเมื่อคุณเห็นมัน แต่คุณแทบไม่จำเป็นต้องใช้คณิตศาสตร์ระดับปริญญาด้วยตัวเอง IMO
Jon Skeet

11
ปริญญาคณิตศาสตร์? แล้วคุณจะรู้ว่ามันไม่ใช่แค่ตัวเลข ฉันมีองศาคณิตศาสตร์สองระดับและใช้เนื้อหาบ่อยครั้ง: พีชคณิตบูลีนเพื่อวิเคราะห์ / ลดความซับซ้อนของตรรกะออโตมาตา / ทฤษฎีภาษาสำหรับการสร้าง DSL พีชคณิตสำหรับการวิเคราะห์ประสิทธิภาพขนาดใหญ่ ฯลฯ
joel.neely

14

ฉันจะเถียงว่าการมีคณิตศาสตร์ตรรกะขั้นสูง (ไม่ต่อเนื่อง) สามารถช่วยได้จริงๆ พร้อมกับทฤษฎีเซต เมื่อจัดการกับโปรแกรมคอมพิวเตอร์ทั่วไปสาขาวิชาเหล่านี้สามารถช่วยได้มาก อย่างไรก็ตามคณิตศาสตร์อื่น ๆ ที่ฉันเรียนในมหาวิทยาลัยคือแคลคูลัสซึ่งเท่าที่ฉันเห็นมีการใช้งานที่ จำกัด มาก เนื่องจาก 90% (หรืออะไรทำนองนั้น) ของการเขียนโปรแกรมกำลังทำแอปธุรกิจด้วยคณิตศาสตร์ที่เรียบง่ายฉันจึงบอกได้ว่าส่วนใหญ่คุณจะได้รับความรู้ทางคณิตศาสตร์น้อยมาก อย่างไรก็ตามความเข้าใจที่ดีเกี่ยวกับพีชคณิตบูลีนตรรกะคณิตศาสตร์ไม่ต่อเนื่องและทฤษฎีเซตสามารถทำให้คุณก้าวไปสู่ระดับต่อไปได้


14

ฉันจะสู้กับเมล็ดข้าวที่นี่และพูดว่า "ใช่"

ฉันเปลี่ยนจากวิศวกรรมโยธาเป็นการเขียนโปรแกรม (Concrete Sucks!) พื้นฐานทางคณิตศาสตร์ของฉันประกอบด้วยสิ่งต่างๆในปีแรกปกติแคลคูลัสปีที่สองและสาม (Diff EQ, การรวมปริมาตร, อนุกรม, การแปลงฟูเรียร์และลาปลาซ) และหลักสูตรการวิเคราะห์เชิงตัวเลข

ฉันพบว่าคณิตศาสตร์ของฉันขาดการเขียนโปรแกรมคอมพิวเตอร์อย่างไม่น่าเชื่อ มีพื้นที่ทั้งหมดของคณิตศาสตร์และตรรกะแบบไม่ต่อเนื่องที่ฉันขาดหายไปและฉันก็รอดมาได้เพราะมีห้องสมุดหนังสือเรียน Wikipedia และ Wolfram มากมาย อัลกอริทึมขั้นสูงส่วนใหญ่ขึ้นอยู่กับคณิตศาสตร์ขั้นสูงและฉันไม่สามารถพัฒนาอัลกอริทึมขั้นสูงได้โดยไม่ต้องทำการวิจัยอย่างละเอียด (โดยพื้นฐานแล้วเทียบเท่ากับมูลค่างานครึ่งหลักสูตร) ​​ฉันไม่สามารถสร้างอัลกอริทึมใหม่ได้อย่างแน่นอนเพราะฉันเพิ่งทำ ไม่มีรากฐานทางคณิตศาสตร์เป็นไหล่ของยักษ์ใหญ่ที่จะยืนหยัด


โปรแกรมเมอร์โดยเฉลี่ยเขียนอัลกอริทึมพื้นฐานได้กี่แบบ? ฉันเดาว่า 80% ของงานเขียนโปรแกรมไม่เกี่ยวข้องกับคณิตศาสตร์นอกเหนือจากพีชคณิตพื้นฐาน
dbkk

@dbkk: งานที่พบบ่อยที่สุดของโปรแกรมเมอร์คือการออกแบบโมเดลวัตถุ "ตรรกะทางธุรกิจ" ของโดเมนบางโดเมน และกระบวนการดังกล่าวไม่ใช่อะไรอื่นนอกจากคณิตศาสตร์แม้ว่าจะไม่ได้สะท้อนให้เห็นโดยทั่วไปจากผู้ที่ปฏิบัติงาน
Boris Stitnicky

14

มันขึ้นอยู่กับสิ่งที่คุณกำลังทำ หากคุณเขียนโปรแกรม 3 มิติจำนวนมากความรู้เกี่ยวกับรูปทรงเรขาคณิต 3 มิติเป็นสิ่งที่จำเป็นอย่างแน่นอนคุณไม่เห็นด้วยหรือ? ;-) หากคุณต้องการสร้างรูปแบบภาพใหม่เช่น JPG หรือรูปแบบเสียงใหม่เช่น MP3 คุณจะค่อนข้างหลงทางหากคุณไม่เข้าใจการแปลงโคไซน์หรือฟูเรียร์เนื่องจากสิ่งเหล่านี้เป็นพื้นฐานการบีบอัดที่สูญเสียส่วนใหญ่ขึ้นอยู่กับ . ปัญหาอื่น ๆ อีกมากมายสามารถแก้ไขได้ดีขึ้นหากคุณรู้คณิตศาสตร์ค่อนข้างดี

นอกจากนี้ยังมีงานเขียนโปรแกรมอื่น ๆ อีกมากมายที่คุณจะพบว่าไม่จำเป็นต้องใช้คณิตศาสตร์มากนัก



9

ใช่ไม่จำเป็นต้องมีคณิตศาสตร์ขั้นสูง - หากคุณกำลังเขียนโปรแกรมเชิงพาณิชย์ - ปิดซอฟต์แวร์ชั้นวาง

อย่างไรก็ตามเมื่อจัดการกับสิ่งที่ไม่ยอมใครง่ายๆเช่น:

  • การคำนวณวิถีเพื่อควบคุมหุ่นยนต์
  • การสร้างแอปพลิเคชันที่เหมือน AI เพื่อรองรับความไม่แน่นอนและการให้เหตุผลโดยอัตโนมัติ
  • เล่นกับการเคลื่อนไหวและกราฟิก 3 มิติ

ความรู้คณิตศาสตร์ขั้นสูงบางอย่างอาจมีประโยชน์ และมันไม่เหมือนกับว่าพวกเขาเป็นปัญหา "นอกโลก"

ฉันต้องสร้างซอฟต์แวร์ขึ้นมาเพื่อพยายาม "คาดคะเน" จำนวนกระดาษที่จำเป็นสำหรับสำนักงาน (และมันก็เป็นเรื่องยากที่จะหาวิธีที่ดีที่สุดในการประมาณค่า)

คุณต้องระวังให้ดีเพราะมันง่ายที่จะหลงทางเมื่อใช้ของขั้นสูง - มีเพื่อนของฉันคนหนึ่งที่ใช้ Turing เพื่อจัดเก็บสถานะของเมนูแบบไดนามิกเพื่อให้แสดงได้อย่างถูกต้อง - ฮึ่ม ... เขาจินตนาการไปไกลเกินไป


คุณสามารถเพิ่มสิ่งต่างๆเช่นการบีบอัดไฟล์หรือแก้ไขไฟล์ MP3 หรืออะไรก็ได้ที่ต้องการความเข้าใจจริงๆว่าคอมพิวเตอร์กำลังทำอะไรอยู่แทนที่จะแค่โยนเว็บไซต์เข้าด้วยกัน
tloach

4
เขาใช้ทัวริงทำสิ่งนี้ได้อย่างไร? กระดานผีถ้วยแก้วหรือท่านั่ง?
Jared Updike

8

การเขียนโปรแกรมประเภทใด?

จากประสบการณ์ทางการค้าของฉันฉันไม่จำเป็นต้องใช้คณิตศาสตร์ขั้นสูง แต่สิ่งนี้ขึ้นอยู่กับสาขาที่คุณอยู่เป็นอย่างมาก

คอมพิวเตอร์กราฟิกต้องการคณิตศาสตร์ขั้นสูงจำนวนมาก การเขียนโปรแกรมคอมพิวเตอร์เชิงวิชาการจำนวนมากต้องใช้คณิตศาสตร์ขั้นสูง

ดังนั้นการพูดว่ามีแนวโน้มที่จะมีความสัมพันธ์ระหว่างคนที่เก่งคณิตศาสตร์กับคนที่เก่งในการเขียนโปรแกรม

ฉันหวังว่าคำตอบที่ปรารถนานี้จะช่วยได้


6

คณิตศาสตร์เป็นสิ่งจำเป็นสำหรับนักพัฒนาในบางสาขา แต่แทบจะไม่มีประโยชน์สำหรับนักพัฒนาในบางสาขา

หากคุณเป็นนักพัฒนาเกมและต้องทำงานกับฟิสิกส์มากความเข้าใจคณิตศาสตร์เป็นสิ่งสำคัญ หากคุณกำลังทำงานกับการควบคุมด้วยภาพขั้นสูงคุณไม่สามารถทำอะไรได้มากหากไม่มีรูปทรงเรขาคณิต หากคุณกำลังวางแผนที่จะทำการคำนวณทางการเงิน - มันจะช่วยให้มีความรู้เกี่ยวกับสถิติที่มั่นคงได้จริงๆ

ในทางกลับกันในช่วง 5 ปีที่ผ่านมาฉันมีเพียง 2 หรือ 3 โปรเจ็กต์ที่ต้องใช้คณิตศาสตร์จำนวนเท่าใดก็ได้ ในจำนวนนี้มีเพียง 1 ครั้งที่การค้นหาโดย Google ไม่ได้ช่วย

ในตอนท้ายของวันการคำนวณทางการเงินมักเป็นสิ่งที่ลูกค้าของคุณทำเพื่อคุณและให้สูตรแก่คุณเพื่อนำไปใช้

ดังนั้นหากคุณอยู่ในธุรกิจ "ซอฟต์แวร์ประยุกต์" คุณก็มีแนวโน้มที่จะไม่เคยใช้วุฒิทางคณิตศาสตร์ของคุณเลย หากคุณอยู่ในคณิตศาสตร์ซอฟต์แวร์เชิงวิชาการเป็นสิ่งสำคัญ


สำหรับ "นักพัฒนาเกม" ฉันจะเพิ่ม "นักพัฒนาเกมจำลอง" ฉันจำได้ว่าย้อนกลับไปในปี '93 ที่ขับรถไปทั่วเมืองพยายามหาหนังสือคณิตศาสตร์ขั้นสูงเพียงพอที่จะอธิบายว่า Quaternions ทำงานกับฉันได้อย่างไรเพื่อที่ฉันจะได้เขียนโค้ดอัลกอริธึมการเรียกคืนที่ตายแล้วได้อย่างถูกต้อง ขอบคุณพระเจ้าสำหรับอินเทอร์เน็ตวันนี้!
TED

6

ฉันเห็นด้วยกับคริส ฉันจะตอบว่า "ใช่" เช่นกัน แต่ขึ้นอยู่กับตลาดของคุณตามที่ระบุไว้ข้างต้น หากคุณกำลังสร้างแอปพลิเคชัน "นอกชั้นวาง" ขั้นพื้นฐานหรือเครื่องมือการเขียนเพื่อช่วยในการทำงานประจำวันของคุณ ... คณิตศาสตร์ก็ไม่สำคัญเท่า

โซลูชันซอฟต์แวร์ที่กำหนดเองทางวิศวกรรมต้องการการแก้ปัญหาและการคิดเชิงวิเคราะห์มากมาย ทักษะที่ได้รับการปรับปรุงอย่างแน่นอนที่สุดเมื่อมีพื้นฐานทางคณิตศาสตร์ ฉันเรียนคณิตศาสตร์ด้วยปริญญาวิศวกรรมคอมพิวเตอร์และฉันให้เครดิตกับพื้นฐานทางคณิตศาสตร์ทั้งหมดของฉันว่าทำไมฉันถึงอยู่ที่นั่นในวันนี้

นั่นคือ 2 เซ็นต์ของฉันฉันสามารถบอกได้จากการอ่านด้านบนว่าหลายคนไม่เห็นด้วย ฉันขอแนะนำให้ทุกคนพิจารณาว่าฉันไม่ได้บอกว่าคุณไม่สามารถมีทักษะเหล่านั้นได้หากไม่มีพื้นฐานทางคณิตศาสตร์ฉันเพียงแค่ระบุว่าทักษะดังกล่าวเป็นผลข้างเคียงของการมีภูมิหลังดังกล่าวและอาจส่งผลต่อซอฟต์แวร์ในเชิงบวก


6

จากประสบการณ์ของฉันต้องใช้คณิตศาสตร์ในการเขียนโปรแกรมคุณไม่สามารถหลีกหนีจากมันได้ การเขียนโปรแกรมทั้งหมดขึ้นอยู่กับคณิตศาสตร์

ปัญหาไม่ใช่ขาวดำ แต่มีสีสันมากขึ้น คำถามไม่ได้อยู่ที่ว่าคุณต้องการคณิตศาสตร์หรือไม่ แต่เท่าไหร่ คณิตศาสตร์ในระดับที่สูงขึ้นจะทำให้คุณมีเครื่องมือมากขึ้นและเปิดใจให้กับเส้นทางต่างๆ

ตัวอย่างเช่นคุณสามารถตั้งโปรแกรมได้หากคุณรู้จักการบวกและการลบเท่านั้น เมื่อต้องการการคูณคุณจะต้องทำการเพิ่มจำนวนมาก การคูณช่วยลดความซับซ้อนของการเพิ่มซ้ำ พีชคณิตช่วยให้คณิตศาสตร์ง่ายขึ้นก่อนที่จะนำไปใช้ในโปรแกรม Linear Algebra มีเครื่องมือสำหรับเปลี่ยนภาพ พีชคณิตบูลีนให้กลศาสตร์สำหรับการลดทุกคนifงบ

และอย่าลืมพี่น้องที่เรียนคณิตศาสตร์ตรรกะและปรัชญา ตรรกะจะช่วยให้คุณใช้ประโยชน์จากคำสั่งcaseหรือswitchงบได้อย่างมีประสิทธิภาพ ปรัชญาจะช่วยให้คุณเข้าใจความคิดของผู้ชายที่เขียนโค้ดที่คุณกำลังแก้ไข

ใช่คุณไม่จำเป็นต้องใช้คณิตศาสตร์มากในการเขียนโปรแกรม บางโปรแกรมอาจต้องใช้คณิตศาสตร์มากกว่าโปรแกรมอื่น ๆ ความรู้ทางคณิตศาสตร์เพิ่มเติมจะทำให้คุณได้เปรียบมากกว่าผู้ที่มีความเข้าใจน้อย ในช่วงเวลานี้ผู้คนต้องการความได้เปรียบทุกอย่างที่จะได้รับเพื่อให้ได้งานเหล่านั้น


6

ฉันเขียนโปรแกรมอย่างมืออาชีพมา 8 ปีแล้วและตั้งแต่อายุ 12 ปีเป็นงานอดิเรก

คณิตศาสตร์ไม่จำเป็นตรรกะคือ คณิตศาสตร์มีประโยชน์อย่างมากแม้ว่าจะบอกว่าไม่จำเป็นก็เหมือนกับการบอกว่าจะฆ่าผู้ชายไม่จำเป็นต้องใช้ปืนคุณสามารถใช้มีดได้ มันเป็นเรื่องจริง แต่ปืนนั้นทำให้ง่ายขึ้นมาก

มีขั้นต่ำสองสามอย่างที่คุณควรได้รับอยู่แล้ว คุณจำเป็นต้องรู้นิพจน์และสัญกรณ์เกี่ยวกับพีชคณิตพื้นฐานและสิ่งที่เทียบเท่ากับคอมพิวเตอร์ทั่วไป ตัวอย่างเช่นคุณต้องรู้ว่าเลขชี้กำลังคืออะไร (3 ถึง 3 คือ 27) และนิพจน์ทั่วไปของคอมพิวเตอร์คือ 3 ^ 3 สัญกรณ์ทั่วไปสำหรับพีชคณิตมีการเปลี่ยนแปลงระหว่างภาษา แต่หลายภาษาใช้วิธีการที่ค่อนข้างเป็นหนึ่งเดียว คนอื่น ๆ (มองคุณ LISP) ไม่ทำ คุณต้องทราบลำดับการดำเนินการด้วย

คุณต้องเข้าใจความคิดอัลกอริทึม ก่อนอื่นสิ่งนี้จะสร้างสิ่งนี้ซึ่งใช้ในการคำนวณนี้ มีโอกาสที่คุณจะเข้าใจสิ่งนี้หรือคุณไม่เข้าใจและมันเป็นอุปสรรคที่ยากพอสมควรที่จะกระโดดถ้าคุณไม่เข้าใจ ฉันพบว่านี่คือสิ่งที่คุณ 'ได้รับ' ไม่ใช่สิ่งที่คุณจะเรียนรู้ได้จริงๆ ในทางกลับกันบางคนไม่ได้ 'รับ' ศิลปะ พวกเขาไม่ควรเป็นจิตรกร นอกจากนี้ยังมีนักเรียนในหลักสูตร CS ที่คิดไม่ออกว่าเหตุใดจึงใช้ไม่ได้: x = z + w; z = 3; y = 5; ไม่ใช่ว่าพวกเขาไม่เข้าใจนอกจากนี้ แต่พวกเขาไม่เข้าใจข้อกำหนดของการแสดงที่ชัดเจน ถ้าพวกเขาเข้าใจมันคอมพิวเตอร์ก็ควรจะใช่ไหม? หากคุณมองไม่เห็นว่ามีอะไรผิดปกติในสามบรรทัดข้างต้นอย่าเป็นโปรแกรมเมอร์

สุดท้ายนี้คุณต้องรู้ว่าคณิตศาสตร์อยู่ภายใต้โดเมนการเขียนโปรแกรมของคุณ โปรแกรมบัญชีสามารถหยุดที่พีชคณิตพื้นฐาน หากคุณกำลังเขียนโปรแกรมฟิสิกส์คุณจะต้องรู้ฟิสิกส์ (หลวม ๆ ) และคณิตศาสตร์ในรูปเรขาคณิต 3 มิติ (ยุคลิด) หากคุณกำลังเขียนโปรแกรมซอฟต์แวร์สถาปัตยกรรมคุณจำเป็นต้องรู้ตรีโกณมิติ

นี่ไปไกลกว่านั้นคณิตศาสตร์แม้ว่า; โดเมนใดก็ตามที่คุณกำลังเขียนโปรแกรมคุณต้องเข้าใจพื้นฐานอย่างชัดเจน หากคุณกำลังเขียนโปรแกรมซอฟต์แวร์วิเคราะห์ภาษาคุณจะต้องรู้ถึงความน่าจะเป็นสถิติทฤษฎีไวยากรณ์ (หลายภาษา) ฯลฯ

บ่อยครั้งที่บางโดเมนต้องการหรือได้รับประโยชน์จากความรู้ที่คุณคิดว่าไม่เกี่ยวข้องกัน ตัวอย่างเช่นหากคุณกำลังเขียนโปรแกรมซอฟต์แวร์เสียงคุณจำเป็นต้องรู้ตรีโกณมิติเพื่อจัดการกับรูปคลื่น

ขนาดเปลี่ยนสิ่งต่างๆเช่นกัน หากคุณกำลังจัดเรียงชุดข้อมูลทางการเงิน 1,000 รายการก็ไม่ใช่เรื่องใหญ่ อย่างไรก็ตามหากเป็นข้อมูล 10 ล้านรายการคุณจะได้รับประโยชน์อย่างมากจากการรู้คณิตศาสตร์เวกเตอร์จริงและมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับการเรียงลำดับในระดับไบนารี (ระบบเรียงลำดับตามตัวอักษรอย่างไรจะรู้ได้อย่างไรว่า 'a' น้อยกว่า 'b '?)

คุณจะพบว่าในฐานะโปรแกรมเมอร์ฐานความรู้ทั่วไปของคุณกำลังจะระเบิดเพราะแต่ละโครงการจะต้องมีการเรียนรู้เพิ่มเติมนอกเหนือจากขอบเขตโดยตรงของการเขียนโปรแกรม หากคุณขี้เบื่อหรือขี้เกียจในการเรียนรู้ด้วยตนเองและไม่ชอบความคิดที่จะใช้เวลา 10+ ชั่วโมงต่อสัปดาห์ในการ 'ทำการบ้าน' อย่าเป็นโปรแกรมเมอร์

ถ้าคุณชอบแบบฝึกหัดเกี่ยวกับความคิดถ้าคุณชอบเรียนรู้ถ้าคุณสามารถคิดเกี่ยวกับสิ่งที่เป็นนามธรรมเช่นคณิตศาสตร์โดยไม่ต้องใช้เครื่องคิดเลขหรือการออกแบบโดยไม่ต้องใช้ Sketchpad ถ้าคุณมีรสนิยมในการใช้ชีวิตและงานอดิเรกในวงกว้างหากคุณเป็นคนที่มีวิจารณญาณในตนเองและสามารถละทิ้งได้ ' ชื่นชอบ 'ความคิดถ้าคุณชอบสิ่งที่สมบูรณ์แบบแล้วมาเป็นโปรแกรมเมอร์ อย่าใช้พื้นฐานการตัดสินใจทางคณิตศาสตร์ แต่เป็นความสามารถในการคิดอย่างมีเหตุผลและเรียนรู้ นั่นคือสิ่งที่สำคัญ คณิตศาสตร์เป็นเพียงผลพลอยได้


5

แน่นอนว่ามันขึ้นอยู่กับว่าคุณอยากเป็นโปรแกรมเมอร์ประเภทไหนหรือดีกว่าว่านายจ้างของคุณต้องการให้คุณเป็นโปรแกรมเมอร์แบบไหน ฉันคิดว่าแคลคูลัสและพีชคณิตเป็นสิ่งจำเป็นการเขียนโปรแกรมเชิงสถิติและเชิงเส้นเป็นเครื่องมือที่ดีที่จะมีในกระเป๋าเอกสารของคุณการวิเคราะห์ (อนุพันธ์ปริพันธ์ฟังก์ชัน ... ) สามารถทำได้โดยไม่ต้อง แต่ถ้าคุณต้องการทราบว่าสิ่งต่างๆทำงานอย่างไรในเชิงลึก (เช่นอุปกรณ์อิเล็กทรอนิกส์หรืออัลกอร์ไฮม์ที่ไม่สำคัญ) คณิตศาสตร์ "ขั้นสูง" เป็นสิ่งที่คุณจะไม่ควรพลาด


5

การเขียนโปรแกรมส่วนใหญ่ที่ฉันทำเกี่ยวข้องกับการจำลองทางฟิสิกส์เพื่อการวิจัยรวมถึงสิ่งต่างๆเช่นแม่เหล็กไฟฟ้ากลศาสตร์ควอนตัมและกลศาสตร์โครงสร้าง เนื่องจากโดเมนของปัญหามีคณิตศาสตร์ขั้นสูงที่เกี่ยวข้องฉันจึงยากที่จะแก้ปัญหาเหล่านี้โดยไม่ต้องใช้คณิตศาสตร์ขั้นสูง

ดังนั้นคำตอบสำหรับคำถามของคุณคือ - ขึ้นอยู่กับสิ่งที่คุณพยายามทำ


5

ความรู้คณิตศาสตร์ขั้นสูงมีความสำคัญหากคุณกำลังจะเขียนภาษาโปรแกรมใหม่ หรือคุณต้องเขียนอัลกอริทึมของคุณเอง

อย่างไรก็ตามสำหรับการเขียนโปรแกรมแบบวันต่อวันมากที่สุด - จากเว็บไซต์เพื่อการใช้งานการประมวลผลการประกัน - เพียงคณิตศาสตร์พื้นฐานที่จำเป็น


5

คนที่มีพื้นฐานทางคณิตศาสตร์ที่มั่นคง (ซึ่งไม่ใช่แค่เลขคณิต) หรือพื้นหลังตรรกะจะรับมือกับอัลกอริทึมการใช้ตัวแปรการให้เหตุผลตามเงื่อนไขและโครงสร้างข้อมูลได้ดี

  • ทุกคนไม่สามารถออกแบบ UI ได้
  • ไม่ใช่ทุกคนที่สามารถสร้างรหัสที่มีประสิทธิภาพได้
  • ทุกคนไม่สามารถแสดงความคิดเห็นและจัดทำเอกสารได้อย่างชัดเจน
  • ไม่ใช่ทุกคนที่สามารถทำอัลกอริทึมที่ดีได้

คณิตศาสตร์จะช่วยให้คุณไปถึงจุดหนึ่ง แต่ถึงจุดหนึ่งเท่านั้น


5

ฉันไม่คิดว่าความรู้ทางคณิตศาสตร์ขั้นสูงเป็นข้อกำหนดสำหรับโปรแกรมเมอร์ที่ดี แต่จากประสบการณ์ส่วนตัวฉันคิดว่าโปรแกรมเมอร์ที่เข้าใจคณิตศาสตร์ขั้นสูงได้ดีกว่าก็ทำให้โปรแกรมเมอร์เก่งขึ้นด้วย นี่อาจเป็นเพราะจิตใจที่มีเหตุผลมากขึ้นหรือมีมุมมองเชิงตรรกะมากขึ้นเนื่องจากประสบการณ์ในการแก้ปัญหาทางคณิตศาสตร์


5

แนวคิดพื้นฐานของคณิตศาสตร์มีดังต่อไปนี้การวางแผนการทำความเข้าใจการนำไปใช้และการใช้อัลกอริทึม หากคุณไม่สามารถทำคณิตศาสตร์ได้นั่นเป็นเพราะคุณไม่สามารถทำสิ่งเหล่านี้ได้และถ้าคุณไม่สามารถทำสิ่งเหล่านี้ได้คุณก็จะไม่สามารถเป็นโปรแกรมเมอร์ที่มีประสิทธิภาพได้

งานเขียนโปรแกรมทั่วไปอาจไม่จำเป็นต้องมีความรู้ทางคณิตศาสตร์ที่เฉพาะเจาะจง (เช่นคุณอาจไม่จำเป็นต้องใช้พีชคณิตเวกเตอร์และแคลคูลัสเว้นแต่คุณจะทำงานเช่นกราฟิก 3 มิติหรือการจำลองทางฟิสิกส์เป็นต้น) แต่ชุดทักษะพื้นฐานนั้นเหมือนกันและขาดความสามารถ ในโดเมนหนึ่งจะถูกจับคู่โดยขาดความสามารถที่สอดคล้องกันในอีกโดเมนหนึ่ง


5

คณิตศาสตร์เป็นกล่องเครื่องมือสำหรับสร้างโปรแกรม ขอแนะนำ Cormen's Introduction to Algorithms มันสัมผัสกับสิ่งที่ "mathy" มากขึ้น

- 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

ฉันไม่คิดว่าคณิตศาสตร์ที่สูงขึ้นเป็นข้อกำหนดสำหรับการเป็นโปรแกรมเมอร์ที่ดี - เช่นเคยขึ้นอยู่กับสิ่งที่คุณกำลังเขียนโค้ด

แน่นอนถ้าคุณอยู่ในการเขียนโปรแกรมกราฟิก 3 มิติคุณจะต้องมีเมทริกซ์และสิ่งของต่างๆ ในฐานะผู้เขียนซอฟต์แวร์ธุรกิจคุณอาจต้องใช้คณิตศาสตร์สถิติ

แต่การเป็นโปรแกรมเมอร์มืออาชีพมาเกือบ 10 ปี (และอีก 10 ปีสมัครเล่น) "คณิตศาสตร์ชั้นสูง" ไม่ใช่สิ่งที่ฉันต้องการเป็นประจำ ประมาณ 99.8% ของทุกกรณีมันเป็นเพียงการบวกลบการหารและการคูณในชุดค่าผสมอัจฉริยะบางอย่างโดยส่วนใหญ่เป็นเรื่องของอัลกอริทึมไม่ใช่คณิตศาสตร์


4

การเรียนคณิตศาสตร์ที่สูงขึ้นสำหรับโปรแกรมเมอร์ส่วนใหญ่มีความสำคัญเพียงเพราะสมองของคุณต้องคิดอย่างมีเหตุผลในลักษณะทีละขั้นตอนเพื่อรับจากสิ่งหนึ่งไปยังอีกสิ่งหนึ่ง

แม้ว่างานเขียนโปรแกรมน้อยมากที่ต้องการอะไรที่เหนือกว่าคณิตศาสตร์ระดับมัธยม ฉันเคยใช้พีชคณิตเชิงเส้นมาแล้วครั้งหนึ่ง ฉันไม่เคยใช้แคลคูลัส ฉันใช้พีชคณิตทุกวัน


4

ความรู้ทางคณิตศาสตร์มักมีประโยชน์ต่อโปรแกรมเมอร์เช่นเดียวกับทักษะการออกแบบกราฟิกความสามารถในการไขปริศนาจรรยาบรรณในการทำงานและทักษะและลักษณะอื่น ๆ โปรแกรมเมอร์น้อยคนนักที่จะเก่งทุกอย่างที่โปรแกรมเมอร์จะเก่งได้ ฉันไม่เห็นด้วยกับข้อความใด ๆ ในแบบฟอร์ม "คุณไม่ใช่โปรแกรมเมอร์ตัวจริงเว้นแต่คุณจะสามารถ { ใส่ความสามารถในการเขียนโปรแกรมที่ชื่นชอบได้ที่นี่ }"

แต่ฉันจะระวังโปรแกรมเมอร์ที่ทำคณิตศาสตร์ไม่ได้ มากกว่าคนที่วาดไม่ได้


4

ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่คุณกำลังพยายามทำ แต่ IMHO ทฤษฎี CS และ OS มีความสำคัญมากกว่าคณิตศาสตร์ที่นี่และคุณต้องการเพียงคณิตศาสตร์ที่เกี่ยวข้องเท่านั้น

ตัวอย่างเช่นมีเบื้องหลัง CS มากมายของทฤษฎีการจัดตารางเวลาและการเพิ่มประสิทธิภาพที่อยู่เบื้องหลังตัวกำหนดตารางเวลาจำนวนมากในระบบปฏิบัติการสมัยใหม่ นั่นคือตัวอย่างของสิ่งที่ต้องใช้คณิตศาสตร์แม้ว่าจะไม่ใช่สิ่งที่ซับซ้อนมาก

แต่จริงๆแล้วสำหรับเรื่องส่วนใหญ่คุณไม่จำเป็นต้องใช้คณิตศาสตร์ สิ่งที่คุณต้องการคือเรียนรู้ความสามารถในการคิดในฐานที่ 2 และ 16 เช่นความสามารถในการคิดหรือ / และจิตใจ ตัวอย่างเช่นหากคุณมีไบต์และภายในไบต์นั้นมีฟิลด์ 3 บิตสองฟิลด์และ 2 บิตที่สูญเปล่าการรู้ว่าบิตใดอยู่ในฟิลด์ใดที่แอ็คทีฟเมื่อค่าไบต์เป็นค่า 11 จะทำให้สิ่งต่าง ๆ เร็วกว่าการใช้เล็กน้อย ปากกาและกระดาษ


คุณเคยเรียนทฤษฎีการจัดคิวหรือไม่? คุณเคยศึกษาตัวจัดการหน่วยความจำและแบบจำลองทางสถิติที่ทำให้นักพัฒนาเลือกตัวจัดการหน่วยความจำหรือไม่? ฉันไม่จำเป็นต้องไม่เห็นด้วยกับความรุนแรงของคำตอบของคุณ แต่คุณทำให้เข้าใจง่ายเกินไป
San Jacinto

@ ซาน: ฉันแน่ใจว่าฉันเข้าใจมากเกินไป แต่ฉันคิดว่านักพัฒนาระบบส่วนใหญ่ไม่จำเป็นต้องรู้สิ่งเหล่านี้ในระดับนี้ ฉันเรียนในระดับพื้นฐานในสององศาแรกของฉันและค่อนข้างลึกกว่าในช่วงปริญญาเอกของฉัน แต่มันไม่ใช่มือขวาของฉันฉันชอบที่จะปล่อยให้ผู้เชี่ยวชาญ คน OS ที่ฉันรู้จักมีทักษะทางคณิตศาสตร์ที่ทำให้ฉันหายไป
Uri

ซึ่งฉันคิดว่ามันใช้ได้มาก ฉันคิดว่าจำเป็นต้องแยกความแตกต่างของการเขียนโปรแกรมระบบจากการเขียนโปรแกรมระบบปฏิบัติการ แนวคิดที่ถักทออย่างแน่นหนา แต่ยังคงแตกต่างกัน
San Jacinto

4

ฉันเริ่มเขียนโปรแกรมในช่วงเวลาเดียวกันกับที่ฉันเข้าสู่ชั้นเรียนพีชคณิตเบื้องต้น .. ดังนั้นฉันจะไม่บอกว่าคณิตศาสตร์เป็นสิ่งที่สำคัญแม้ว่ามันจะช่วยในการเขียนโปรแกรมบางประเภทได้

ฉันยังไม่ได้เรียนคณิตศาสตร์แบบไม่ต่อเนื่อง แต่ฉันเห็นทฤษฎีมากมายเกี่ยวกับการเขียนโปรแกรมที่เขียนด้วยสัญกรณ์คณิตศาสตร์ที่สอนในชั้นนี้

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณรู้วิธีคำนวณค่าใด ๆ ในฐานใด ๆ โดยเฉพาะฐาน 2, 8 และ 16

นอกจากนี้คลาสหนึ่งที่นำแนวคิดบางอย่างสำหรับฉันกลับบ้านคือคลาสก่อนการเขียนโปรแกรมนี้ เราได้รับการสอนเรื่องสหภาพแรงงานทางแยกและทุกสิ่งที่มีความสุขและมันเกือบจะขนานกันกับคณิตศาสตร์แบบบิต และเราได้กล่าวถึงตรรกะบูลีนอย่างมาก สิ่งที่ฉันคิดว่ามีประโยชน์ที่สุดคือเมื่อเราเรียนรู้วิธีลดคำสั่งบูลีนที่ซับซ้อน สิ่งนี้มีประโยชน์มาก:

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

สามารถทำให้ง่ายขึ้นเป็น

x | (y & z & foo)

ซึ่งก่อนหน้านี้ฉันไม่ค่อยเข้าใจ


4

คุณสร้างการตอบกลับจำนวนมากและไม่ฉันไม่ได้อ่านทั้งหมด ฉันอยู่ตรงกลางนี้คุณไม่จำเป็นต้องใช้คณิตศาสตร์เพื่อที่จะเป็นโปรแกรมเมอร์ Assembler เทียบกับไดรเวอร์อุปกรณ์ใน linux ไม่ซับซ้อนมากหรือน้อยไปกว่ากันและไม่ต้องใช้คณิตศาสตร์

คุณไม่จำเป็นต้องมีรูปร่างหรือรูปแบบใดในการเรียนหรือผ่านชั้นเรียนคณิตศาสตร์สำหรับสิ่งนี้

ฉันยอมรับว่าความคิดในการแก้ปัญหาสำหรับการเขียนโปรแกรมค่อนข้างคล้ายกับวิธีแก้ปัญหาทางคณิตศาสตร์และผลลัพธ์ทางคณิตศาสตร์อาจมาได้ง่าย หรือตรงกันข้ามถ้าคณิตศาสตร์ยากการเขียนโปรแกรมก็อาจจะยาก ไม่จำเป็นต้องมีชั้นเรียนหรือปริญญาหรือกระดาษหรือถ้วยรางวัลใด ๆ ออกไปและเรียนรู้สิ่งต่างๆแน่นอน

ตอนนี้ถ้าคุณไม่สามารถแปลงจากฐานสิบหกเป็นไบนารีเป็นฐานสิบได้อย่างรวดเร็วทั้งในหัวของคุณบนกระดาษหรือใช้เครื่องคิดเลขคุณจะต้องดิ้นรน หากคุณต้องการเข้าสู่ระบบเครือข่ายและสิ่งอื่น ๆ ที่เกี่ยวข้องกับเวลาซึ่งไดรเวอร์เคอร์เนลมักจะทำ แต่ไม่จำเป็นต้องทำ คุณจะต้องดิ้นรน ฉันรู้จักรายชื่อคนที่มีวุฒิทางคณิตศาสตร์และ / หรือวิทยาศาสตร์คอมพิวเตอร์และ / หรือปริญญาทางวิศวกรรมที่มีความยาวมากซึ่งต่อสู้กับการคำนวณอัตราบิตต่อวินาทีไบต์ต่อวินาทีหน่วยความจำที่คุณต้องทำบางอย่าง ฯลฯ ในระดับหนึ่งอาจถือได้ว่าเป็นความสามารถพิเศษบางอย่างที่บางคนมีและคนอื่น ๆ ต้องพยายามทำ

สิ่งที่สำคัญที่สุดของฉันคือฉันเชื่อในพลังอำนาจหากคุณต้องการเรียนรู้สิ่งนี้คุณทำได้และจะทำได้ง่ายๆเพียงแค่นั้น คุณไม่จำเป็นต้องเรียนหรือใช้เงินเป็นจำนวนมากตัวอย่างเช่น linux และ qemu สามารถทำให้คุณยุ่งได้ในบางครั้งภาษา asm ที่แตกต่างกัน ฯลฯ สภาพแวดล้อมที่ล่มสำหรับการพัฒนาเคอร์เนลการฝังตัว ฯลฯ คุณไม่ได้ จำกัด เพียงแค่นั้น แต่ฉันไม่เชื่อว่าคุณต้องหนีเรียนและเรียนอะไรก็ได้ถ้าคุณไม่ต้องการ ถ้าคุณต้องการที่จะเรียน ee บางคลาส cs และคลาสคณิตศาสตร์บางอย่าง ..


นี่ไม่ใช่เหยื่อเปลวไฟ แต่เป็นความจริง ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์ดิจิทัลและวิศวกรรมซอฟต์แวร์จากมุมมองการเขียนโปรแกรมสามารถสรุปได้ 0, 1 และหรือไม่ ห้าสิ่งเหล่านี้คือสิ่งที่อุปกรณ์อิเล็กทรอนิกส์ดิจิทัลและโปรแกรมทั้งหมดดำเนินการ คุณสามารถสร้างอะไรก็ได้ด้วย nand gates ขนาดใหญ่
old_timer

4

คุณต้องการคณิตศาสตร์ การเขียนโปรแกรมไม่มีอะไรมากไปกว่าคณิตศาสตร์ การค้นพบใด ๆ ของฟิสิกส์เชิงทฤษฎีจะไม่กลายเป็นความหมายเชิงปฏิบัติ (ใช้ได้) เว้นแต่จะอธิบายในแง่ของการแก้ปัญหาทางคณิตศาสตร์ ไม่มีสิ่งใดที่สามารถแก้ไขได้ด้วยการคำนวณหากไม่สามารถตีความบนคอมพิวเตอร์และเฉพาะเจาะจงมากขึ้นในภาษาโปรแกรม ดังนั้นภาษาต่างๆจึงได้รับการออกแบบมาเพื่อแก้ปัญหาเฉพาะ แต่สำหรับวัตถุประสงค์ทั่วไปและภาษาการเขียนโปรแกรมที่แพร่กระจายอย่างกว้างขวางเช่น java, c, c ++ งานการเขียนโปรแกรมของเราส่วนใหญ่เกี่ยวข้องกับการแก้ปัญหาซ้ำ ๆ (ต่อเนื่อง) สำหรับปัญหาเดียวกันเช่นการแยกค่าจากฐานข้อมูลไฟล์ข้อความวางไว้บน windows (เดสก์ท็อปเว็บ) การจัดการ ค่าเดียวกันบางครั้งเข้าถึงข้อมูลบางอย่างจากอุปกรณ์ที่คล้ายกัน (แต่ได้รับชื่อแบรนด์ที่แตกต่างกันพอร์ตที่แตกต่างกันและปวดหัว) ฯลฯ ซึ่งไม่เกี่ยวข้องกับวิธีการรวมกันมากกว่า


3

IMO คุณอาจต้องมีความถนัดด้านคณิตศาสตร์โดยไม่จำเป็นต้องมีความรู้ในสาขานี้มากนัก ดังนั้นสิ่งที่คุณต้องมีเพื่อให้เก่งคณิตศาสตร์จึงคล้ายกับสิ่งที่คุณต้องการเพื่อให้เก่งในการเขียนโปรแกรม

แต่โดยทั่วไปแล้วฉันจำครั้งสุดท้ายที่ใช้คณิตศาสตร์ขั้นสูงในการเขียนโปรแกรมแบบวันต่อวันไม่ได้ดังนั้นไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.