ฉันยังใหม่กับฟิลด์ CS และฉันสังเกตว่าในเอกสารที่ฉันอ่านจำนวนมากไม่มีผลลัพธ์เชิงประจักษ์ (ไม่มีรหัสเพียงบทแทรกและบทพิสูจน์) ทำไมถึงเป็นอย่างนั้น? เมื่อพิจารณาว่าวิทยาศาสตร์คอมพิวเตอร์เป็นวิทยาศาสตร์ไม่ควรทำตามวิธีการทางวิทยาศาสตร์ใช่หรือไม่
ฉันยังใหม่กับฟิลด์ CS และฉันสังเกตว่าในเอกสารที่ฉันอ่านจำนวนมากไม่มีผลลัพธ์เชิงประจักษ์ (ไม่มีรหัสเพียงบทแทรกและบทพิสูจน์) ทำไมถึงเป็นอย่างนั้น? เมื่อพิจารณาว่าวิทยาศาสตร์คอมพิวเตอร์เป็นวิทยาศาสตร์ไม่ควรทำตามวิธีการทางวิทยาศาสตร์ใช่หรือไม่
คำตอบ:
คณิตศาสตร์ก็เป็นศาสตร์เช่นกันและคุณจะต้องค้นหาเป็นเวลานานเพื่อค้นหาผลลัพธ์เชิงประจักษ์ที่ตีพิมพ์ในสาขานี้ (แม้ว่าฉันคิดว่าต้องมีบางอย่าง) มีโดเมนวิทยาศาสตร์อื่น ๆ ที่ "บทแทรกและบทพิสูจน์" มีค่ามากกว่าประสบการณ์เช่นฟิสิกส์ควอนตัม ที่กล่าวว่าวิทยาศาสตร์ส่วนใหญ่ผสมทฤษฎีและการปฏิบัติ (ด้วยอัตราส่วนต่าง ๆ ) และวิทยาศาสตร์คอมพิวเตอร์ก็ไม่มีข้อยกเว้น
วิทยาการคอมพิวเตอร์มีรากฐานมาจากคณิตศาสตร์ (ดูชีวประวัติของทัวริงเช่นhttp://en.wikipedia.org/wiki/Alan_Turing ) และเป็นผลลัพธ์จำนวนมาก (โดยทั่วไปขนานนามว่าเป็น "วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี") ประกอบด้วยการพิสูจน์ คอมพิวเตอร์ในรูปแบบการคำนวณบางอย่างสามารถแก้ปัญหาบางอย่างในการดำเนินการตามจำนวนที่กำหนด (เช่นการประชุมเช่น FOCS, STOC, SODA, SoCG ฯลฯ ) อย่างไรก็ตามผลลัพธ์อื่น ๆ ของวิทยาการคอมพิวเตอร์เกี่ยวข้องกับการบังคับใช้ทฤษฎีเหล่านั้นกับชีวิตจริงผ่านการวิเคราะห์ผลการทดลอง (เช่นการประชุมเช่น WADS, ALENEX, ฯลฯ ... )
มันมักจะแนะนำว่าอุดมคติคือความสมดุลที่ดีระหว่างทฤษฎีและการปฏิบัติเช่นเดียวกับใน "วิทยาศาสตร์ธรรมชาติ" ซึ่งการสังเกตของการทดลองแจ้งให้สร้างทฤษฎีใหม่ซึ่งจะแนะนำการทดลองใหม่เพื่อยืนยันหรืออ่อนแอเหล่านั้น: เป็นจำนวนมาก การประชุมพยายามที่จะยอมรับทั้งผลการทดลองและเชิงทฤษฎี (เช่น ESA, ICALP, LATIN, CPM, ISAAC, ฯลฯ ... ) สาขาย่อยของ "อัลกอริธึมและโครงสร้างข้อมูล" ในวิทยาการคอมพิวเตอร์อาจได้รับความไม่สมดุลในแง่ที่ว่า "การประชุม" โดยทั่วไปแล้วจะมีการจัดอันดับสูงกว่าการทดลองทางวิทยาศาสตร์ ฉันเชื่อว่าสิ่งนี้ไม่เป็นความจริงในสาขาย่อยอื่น ๆ ของวิทยาศาสตร์คอมพิวเตอร์เช่น HCI หรือ AI
หวังว่าจะช่วย
การใช้อัลกอริทึมอย่างดีเป็นทักษะที่ใช้ชุดเครื่องมือที่แตกต่างจากการพิสูจน์ทฤษฎีบท อัลกอริทึมมากมายที่ชุมชนทฤษฎีค้นพบได้ถูกนำไปใช้จริงในทางปฏิบัติ (แม้ว่าฉันอยากจะเห็นชุมชนทฤษฎีมีบทบาทที่ใหญ่กว่าในกระบวนการนี้) ฟิสิกส์ไม่ได้ขอให้นักวิจัยคนเดียวกันทำทฤษฏีและการทดลองถึงแม้ว่ามันเป็นที่คาดหวังว่าทั้งสองกลุ่มจะสื่อสารกัน ทำไมคุณไม่ควรคาดหวังว่าจะเห็นการแบ่งเดียวกันในวิทยาการคอมพิวเตอร์?
เพิ่มในการแก้ไข:
ขยายความคิดเห็นของฉันเพื่อตอบ Suresh เกี่ยวกับสิ่งที่ฉันหมายถึงโดย "บทบาท" ข้างต้นที่ Bell Labs และ AT&T Labs นักวิจัยในอัลกอริทึมได้รับการสนับสนุนให้พูดคุยกับผู้คนในการพัฒนา ฉันไม่ได้ทำสิ่งนี้มากเท่าที่ควรจะเป็น แต่ฉันได้รับกระดาษอย่างน้อยหนึ่งฉบับและฉันคิดว่ามันจะดีสำหรับสนามถ้ามีการสื่อสารระหว่างผู้คนในทฤษฎีที่มหาวิทยาลัยและผู้ปฏิบัติงานมากขึ้น . นี่ไม่ได้หมายความว่าฉันคิดว่าทุกคนที่คิดอัลกอริธึมควรเขียนโค้ด (แม้ว่ามันจะเป็นประโยชน์)
ในทางตรงกันข้ามอัลกอริทึมการเข้ารหัส (หรือมีรหัสนักเรียน) ที่คุณคิดว่าอาจใช้งานได้จริงอาจเป็นประโยชน์ในการปรับใช้โดยผู้ปฏิบัติงาน ลองพิจารณาตัวอย่างหนึ่ง Lempel และ Ziv เขียนบทความทางเทคนิคสองฉบับในปี 1977 และ 1978 เกี่ยวกับอัลกอริธึมการบีบอัดข้อมูลใหม่ ทุกคนไม่สนใจพวกเขา ในปี 1984 เวลช์เขียนบทความทางเทคนิคน้อยกว่ามากให้บิดเล็กน้อยบน LZ78 ที่ปรับปรุงประสิทธิภาพการทำงานบ้างและให้ผลการศึกษาขนาดเล็กเปรียบเทียบประสิทธิภาพกับวิธีการบีบอัดข้อมูลอื่น ๆ มันถูกตีพิมพ์ในวารสารที่อ่านโดยโปรแกรมเมอร์จำนวนหนึ่งและอัลกอริธึมได้รับโดย pseudocode สองสามบรรทัด วิธีการดังกล่าวได้รับการดัดแปลงอย่างรวดเร็วในหลายสถานที่ในที่สุดก็ส่งผลให้เกิดข้อพิพาทด้านทรัพย์สินทางปัญญาที่น่าอับอาย
แน่นอนหนึ่งในวิธีที่ดีที่สุดสำหรับนักวิจัยด้านอัลกอริธึมในการสื่อสารกับการฝึกฝนคือการผลิตนักศึกษาระดับบัณฑิตศึกษาที่ออกไปทำงานที่ Google, IBM หรือ บริษัท อื่น ๆ และเราก็กำลังทำเช่นนั้นอยู่ อีกวิธีหนึ่งอาจตอบคำถามของผู้ปฏิบัติงานในฟอรัมนี้ หวังว่าเราจะทำสิ่งที่สมเหตุสมผลด้วยเช่นกัน
พื้นที่การวิจัยหนึ่งที่ใช้วิธีการเชิงประจักษ์และวิธีการของวิทยาการคอมพิวเตอร์เชิงทฤษฎีคือสาขาที่เรียกว่า "การทดลองอัลกอริทึม" หรือ "อัลกอริทึมวิศวกรรม" เช่นเดียวกับ Chris ที่กล่าวถึงการคำนวณประสิทธิภาพสูงขึ้นอยู่กับสิ่งนี้เนื่องจากระบบที่ทันสมัยมีแคชที่ซับซ้อนและปัญหาเวลาแฝงที่เรามีเวลาในการสร้างแบบจำลองยาก
Gerth BrodalและPeter Sandersเป็นตัวอย่างที่ดีของนักวิจัยที่รักษาเท้าทั้งในอาณาจักร "พิสูจน์" และ "เชิงประจักษ์"
--Update 20/01 / 2013-- ฉันยังอยากจะพูดถึงการนำเสนอที่ดีโดยโรเบิร์ตเซดจ์วิก
ขึ้นอยู่กับวินัยที่คุณมี ดังที่ Jeremy States มีทฤษฎีและการปฏิบัติที่แตกต่างกันออกไป
หัวข้อเช่นความซับซ้อนมีแนวโน้มที่จะถูกถ่วงน้ำหนักทางด้านทฤษฎีบ่อยครั้งที่เป้าหมายคือการหาขอบเขตสำหรับพื้นที่หรือรันไทม์ การนำอัลกอริธึมมาใช้ใน C ++ แล้วเรียกใช้หลายครั้งจะไม่สามารถพิสูจน์ได้ว่าปัญหานั้นเกิดจากปัญหา NP-complete
ในฐานะที่เป็นขั้วตรงกันข้ามการคำนวณประสิทธิภาพสูง (พร้อมการประชุมอย่างSupercomputing ) ล้วนเป็นประจักษ์ ไม่มีใครเคยส่งหลักฐานไปยังสิ่งพิมพ์ HPC เนื่องจากมีความแปรปรวนมากเกินไปเกี่ยวกับลำดับชั้นของหน่วยความจำและโอเวอร์เฮดของเคอร์เนล
ดังนั้นสิ่งที่ดูเหมือนว่าคำถามเดียวกัน (นานเท่าไหร่บางสิ่งบางอย่างใช้เวลาในการทำงาน?) จะได้รับการทาบทามสองวิธีที่แตกต่างอย่างสิ้นเชิงทั้งนี้ขึ้นอยู่กับเป้าหมายเทคนิคชุมชน ฯลฯ ดูพอลเฮนนิงแคมป์เป็นคุณกำลังทำมันผิดสำหรับตัวอย่างของ ความไม่ลงรอยกัน
ในการเขียนโปรแกรมภาษาการวิจัยความคิดมากมายสำหรับการสร้างภาษาการเขียนโปรแกรมใหม่หรือกลไกการตรวจสอบชนิดใหม่เกิดจากทฤษฎี (อาจได้รับแจ้งจากประสบการณ์ในการปฏิบัติอาจไม่ บ่อยครั้งที่กระดาษถูกเขียนเกี่ยวกับกลไกดังกล่าวจากมุมมองที่เป็นทางการ / ทฤษฎี / แนวคิด ค่อนข้างง่ายที่จะทำ ถัดมาเป็นอุปสรรค์แรก: การนำโครงสร้างใหม่มาใช้ในบริบทของคอมไพเลอร์ที่มีอยู่และทำการทดลองกับมันในแง่ของประสิทธิภาพหรือความยืดหยุ่น นี่ก็ค่อนข้างง่ายเช่นกัน
แต่เราสามารถพูดได้ไหมว่าโครงสร้างการเขียนโปรแกรมถือเป็นการพัฒนาด้านวิทยาศาสตร์การเขียนโปรแกรมล่วงหน้า เราสามารถพูดได้ไหมว่ามันทำให้โปรแกรมการเขียนง่ายขึ้น? เราสามารถพูดได้ไหมว่ามันทำให้ภาษาโปรแกรมดีขึ้นหรือไม่
คำตอบคือไม่ การประเมินเชิงประจักษ์ที่เหมาะสมเกี่ยวข้องกับคะแนนของโปรแกรมเมอร์ที่มีประสบการณ์ในช่วงระยะเวลานานจะต้องตอบคำถามประเภทนั้น งานวิจัยนี้แทบจะไม่เคยทำเลย ผู้ตัดสินเพียงคนเดียวที่เห็นคุณค่าของภาษาการเขียนโปรแกรม (และโครงสร้างของมัน) คือความนิยมของภาษา และสำหรับนักเขียนโปรแกรมภาษานั้นสิ่งนี้ขัดแย้งกับสิ่งที่สมมติฐานของเราบอกเรา
บางทีฉันอาจขาดแรงจูงใจสำหรับคำถามของคุณ แต่มีตัวอย่างมากมายของผลลัพธ์เชิงประจักษ์ที่กระตุ้นการวิจัยอัลกอริทึมและผลลัพธ์อื่น ๆ
MP3ใช้Psychoacousticเพื่อปรับแต่งอัลกอริทึมสำหรับการเข้ารหัสของมนุษย์
ในบรรทัดเดียวกัน Bailey และ Borwein เป็นผู้สนับสนุนหลักของการทดลองทางคณิตศาสตร์ ดู"คอมพิวเตอร์เป็นเบ้าหลอม: บทนำทดลองคณิตศาสตร์" , "การคำนวณทัศนศึกษาในทฤษฎีจำนวน"ในหมู่คนอื่น ๆ บางคนอาจแย้งว่านี่เป็นคณิตศาสตร์เชิงทดลองมากกว่าแต่ฉันขอเถียงว่าในระดับนี้การอภิปรายความแตกต่างนั้นมีความหมาย
การเปลี่ยนเฟสของปัญหา NP-Complete เป็นอีกพื้นที่หนึ่งที่ใช้ผลลัพธ์เชิงประจักษ์อย่างหนัก ดูMonasson, Zecchina, Kirkpatrick, Selman และ TroyanskyและGent และ Walsh สำหรับผู้เริ่มต้นแม้ว่าจะมีอีกมากมายอีกมากมาย (ดูที่นี่สำหรับแบบสำรวจสั้น ๆ )
แม้ว่าจะไม่ได้มากในระดับของทฤษฎีวิทยาศาสตร์คอมพิวเตอร์หรือคณิตศาสตร์ที่มีการอภิปรายที่นี่เกี่ยวกับวิธีการที่ยูทิลิตี้ grep ของยูนิกซ์เฉลี่ยเต้นกรณีรันไทม์การเพิ่มประสิทธิภาพขั้นตอนวิธีการในกรณีที่เลวร้ายที่สุดเพราะมันอาศัยอยู่กับความเป็นจริงที่ว่ามันค้นหาข้อความที่อ่านได้ของมนุษย์ (grep ไม่เป็นไม่ดีหรือ แย่ที่สุดในไฟล์ที่มีตัวอักษรแบบสุ่ม)
แม้แต่เกาส์ก็ใช้หลักฐานเชิงทดลองเพื่อตั้งสมมุติฐานทฤษฎีบทจำนวนเฉพาะ
การขุดข้อมูล ( โซลูชันของ Bellkorต่อNetflix Prizeเพื่อสร้างระบบการแนะนำที่ดีกว่า) อาจถูกโต้แย้งว่าเป็นทฤษฎีอย่างสมบูรณ์ตามหลักฐานเชิงประจักษ์ ปัญญาประดิษฐ์ (อัลกอริธึมทางพันธุกรรมเครือข่ายประสาทเทียม ฯลฯ ) อาศัยการทดลองอย่างมาก การเข้ารหัสอยู่ในการผลักและดึงอย่างต่อเนื่องระหว่างผู้สร้างรหัสและตัวแบ่งรหัส ฉันตั้งชื่อเพียงไม่กี่อย่างและถ้าคุณผ่อนคลายคำจำกัดความเชิงประจักษ์คุณก็สามารถสร้างเครือข่ายที่กว้างขึ้นได้
คำขอโทษของฉันที่กระจัดกระจายในการตอบคำถามของคุณ แต่ฉันหวังว่าอย่างน้อยฉันก็มีตัวอย่างที่เป็นประโยชน์