รหัสในบทความวิชาการ


34

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

สำหรับฉันประโยชน์ของการรวมการใช้งานจริงจะมีความสำคัญกล่าวคือ:

  • ส่วนขยายของความไว้วางใจหรือการทำซ้ำ (เพียงทดสอบด้วยตัวเอง!)
  • ความชัดเจนของความคลุมเครือ (โดยเฉพาะอย่างยิ่งสำหรับเอกสารที่เขียนโดยเจ้าของภาษาที่ไม่ใช่เจ้าของภาษา)
  • การใช้รหัสซ้ำสำหรับแอปพลิเคชัน

เหตุใดจึงมีกระดาษจำนวนน้อยมากที่รวมรหัสใด ๆ

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


14
เหตุใดจึงมีกระดาษจำนวนน้อยมากที่รวมรหัสใด ๆ เนื่องจากผู้ตรวจทานยอมรับมันด้วยเหตุผลบางอย่างแม้ว่าจะไม่มีเหตุผลที่ดีที่จะซ่อนการใช้งาน เราเป็นผู้ตรวจสอบเราสามารถเปลี่ยนได้
Jukka Suomela

14
ฉันคิดว่าสิ่งนี้จะต้องแตกต่างกันไปตามสาขาย่อย เกือบทุกเรื่องทฤษฎี B ที่ฉันคุ้นเคย (โดยเฉพาะอย่างยิ่ง Haskell, Agda, และ Coq ที่เกี่ยวข้องกับบางครั้ง) รวมถึงรหัสที่ตีพิมพ์บางครั้งก็เป็นภาคผนวกหรือดีกว่า แต่ยังอยู่ในกระดาษ จำนวนเอกสารที่เป็นธรรมจาก ICFP จะถูกเขียนเป็นโปรแกรมความรู้ที่จะเริ่มต้นด้วยและแหล่งที่มาของพวกเขาทั้งหมดถูกตีพิมพ์โดยผู้เขียน ในปริมาณที่พอเหมาะก็ส่งผลให้มีการดึงไลบรารี่ออกมาจำหน่าย ของเอกสารที่เหลือจำนวนยุติธรรมไม่เคยมีรหัสที่จะเริ่มต้นด้วย
sclv

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

4
@Raphael การปล่อยรหัสเดียวกันจะช่วยสร้างความสามารถในการทำซ้ำไม่ใช่การทำซ้ำ การเรียกใช้รหัสเดียวกันที่แน่นอนในการทดสอบเดียวกันนั้นไม่มีความเป็นอิสระ วิทยาศาสตร์ต้องการการทำซ้ำไม่ใช่การทำซ้ำ
Mark Reitblatt

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

คำตอบ:


17

นี่คือบทความที่ถกเถียงกันโดย David Donoho และ Jonathan Buckheit ที่ฉันอ่านในโรงเรียนระดับประถมศึกษาซึ่งสัมผัสกับหัวข้อนี้จากมุมมองของนักวิจัยเวฟเล็ต:

"การวิจัย WaveLab และการทำซ้ำ"

ความคิดของพวกเขามีความทะเยอทะยานมากยิ่งขึ้นเพื่อให้รหัสสำหรับการทำซ้ำตัวเลขทั้งหมดในเอกสารของพวกเขาในแพ็คเกจ Matlab ที่สะดวก

ฉันชอบความคิดของพวกเขาจริงๆ แต่ฉันคิดว่าปัญหานั้นชัดเจน

(1) มันเป็นงานพิเศษ (การล้างโค้ดทำให้อย่างน้อยส่วนติดต่อผู้ใช้พื้นฐานเขียนเอกสารบางอย่างให้การสนับสนุนเมื่อคนมีปัญหาอย่างหลีกเลี่ยงไม่ได้)

(2) มันไม่จำเป็นจริงๆ / คาดหวังโดยการประชุม / ผู้ตรวจสอบส่วนใหญ่

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


7
ฉันคิดว่าความคาดหวังของรหัส (a) pseudocode หรือ (b) ที่มีอยู่อย่างน้อยในเว็บไซต์จะเป็นประโยชน์อย่างมากสำหรับชุมชนการวิจัย CS ไม่ใช่รหัสงานวิจัยทั้งหมดที่มีประโยชน์สูงและฉันไม่แน่ใจว่าการสร้างรหัสรถบั๊กกี้นั้นจะเป็นสิ่งที่ดีหรือไม่
Peter Shor

1
ฉันได้พูดคุยกับผู้แต่งกระดาษที่ไม่ได้ปล่อยรหัสด้วยเหตุผลที่คล้ายกัน - ในสถานะที่เป็นอยู่พวกเขาจะรู้สึกผิดถ้าใครพยายามทำอะไรกับมันจริง ๆ
sclv

6
รหัสไม่จำเป็นต้องดีสะอาดหรือใช้ซ้ำได้ แต่มันจะต้องทำซ้ำเพื่อที่จะได้รับการพิจารณา 'วิทยาศาสตร์' มีบทความที่ดีในธรรมชาติโดย Nick Barnes (2010) เผยแพร่รหัสคอมพิวเตอร์ของคุณ: มันดีพอที่จะโต้เถียงประเด็นนี้
David LeBauer

16

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


1
ในขณะที่เรื่องนี้เป็นเรื่องจริงฉันสงสัยว่าการเปลี่ยนแปลงที่เหมาะสมในวัฒนธรรมที่ขับเคลื่อนโดยนักวิจัยทางวิชาการจะช่วยให้นักวิจัยอุตสาหกรรมกดดันการจัดการเพื่อให้ปล่อยรหัสได้หรือไม่ หลังจากทั้งหมดฉันสงสัยว่าแม้จะได้รับนโยบายสำหรับการเปิดตัวกระดาษจะต้องดำเนินการบางอย่าง
Suresh Venkat

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

2
@Neel: คุณหมายถึง "อนุมัติโดย OSI แต่ไม่ใช่ GPL" หรือไม่
Radu GRIGore

3
GPL นั้นปกติแล้ว - พวกเราจำนวนมากใช้ Emacs! :) เราไม่ได้รับอนุญาตให้ใช้ซอฟต์แวร์ Affero GPL เนื่องจากเงื่อนไขการแลกเปลี่ยนนั้นขยายไปถึงทุกคนที่โต้ตอบกับซอฟต์แวร์ (เช่นจะปิดช่องโหว่บริการเว็บ) และ MS ไม่ต้องการเสี่ยงต่อความเป็นไปได้ที่เซิร์ฟเวอร์ภายในบางตัว การเรียกใช้รหัส AGPL อาจทำให้สาธารณชนพบโดยไม่ได้ตั้งใจ แต่ถึงกระนั้น AGPL ก็ยังดีกว่าไม่มีใบอนุญาตเลยเพราะการเลือกใบอนุญาตจะทำให้เงื่อนไขของการแบ่งปันไม่มีความชัดเจน
Neel Krishnaswami

13

ย้ายและขยายจากความคิดเห็น:

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

ของเอกสารที่เหลือจำนวนยุติธรรมไม่เคยมีรหัสที่จะเริ่มต้นด้วย ในบรรดานั้นอาจมีสองเหตุผลหลัก ครั้งแรกเป็นเอกสารที่มีเนื้อหาหลักเป็นต้นไม้พิสูจน์พิมพ์กฎที่มีการพิสูจน์ความมั่นคงที่เกี่ยวข้องและไม่ชอบ ในบรรดาสิ่งเหล่านั้นความก้าวหน้าในเครื่องจักรกล metatheory ได้สนับสนุนอย่างน้อยผู้เขียนบางคนที่จะให้รหัสในการพิสูจน์ทฤษฎีบทของพวกเขาเลือก (ดูสไลด์ของ Weirich ใน POPLmark: http://www.seas.upenn.edu/~sweirich/talks/cambridge-09 รูปแบบไฟล์ PDF) ประการที่สองคือสิ่งที่สืบเชื้อสายมาจากสิ่งของ Bird-Merteens (banannas & co.) โดยทั่วไปสิ่งเหล่านี้สามารถแปลเป็นภาษาที่ใช้งานได้โดยไม่ต้องทำงานมากเกินไป อย่างไรก็ตามฉันสงสัยว่าทั้งสองอย่างนั้นมักจะสูญเสียความสามารถทั่วไปไปและนั่นก็เกี่ยวข้องกับประเด็นทางไวยากรณ์และการพิมพ์ที่ซับซ้อนโดยไม่จำเป็นต้องทำให้สิ่งต่าง ๆ ยุ่งยากและทำให้ยากต่อการใช้เหตุผลเชิงเหตุผล

ฉันต้องการยืนยันการสังเกตของฉันสักเล็กน้อยดังนั้นจำนวนคร่าวๆของสองวันแรกของ ICFP 2010 ของเอกสารมาตรฐาน (เช่นไม่ใช่รายงานจากประสบการณ์หรือการพูดคุยที่ได้รับเชิญ) 12 จาก 21 ข้อเสนอของรหัสบางอย่าง สามรายการที่ให้ไว้ (หนึ่งในสี่อ้างว่ามีหลักฐานบางส่วน แต่ไม่ได้เผยแพร่) Haskell สามฝ่าย สามให้ Agda โครงการหนึ่งมอบหนึ่งโครงการจัดหา Caml และอีกหนึ่งโครงการจัดหา Twelf (โปรดทราบว่าบางรหัสมีให้สำหรับผู้ช่วยพิสูจน์มากกว่าหนึ่งคนหรือสำหรับทั้งการทำให้เป็นระเบียบและการนำไปใช้) จากเอกสารที่เหลืออยู่มีเพียงไม่กี่คนที่ทำงานในระดับที่สูงพอที่จะนำมันไปใช้ในการพิสูจน์ผู้ช่วยที่เป็นนามธรรมในตัวของมันเองและจำนวนงานที่ฉันสงสัยว่าน่าจะถูกนำมาใช้ในการพิสูจน์โดยใช้ผู้ช่วย เทคนิคมาตรฐาน แต่แน่นอนว่าจะต้องใช้ปริมาณงานพอสมควร


12

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

ส่วนใหญ่มีเนื้อที่ไม่เพียงพอที่จะเผยแพร่โค้ดจำนวนมาก ในเขตข้อมูลการวิจัยของฉัน (การประมวลผลภาพ) pseudocode หรือข้อมูลสถาปัตยกรรมมักมีค่ามากกว่าและฉันไม่เคยพบว่าตัวเองติดอยู่เนื่องจากขาดรหัสในเอกสาร มันมักจะถูกทิ้งไว้เป็นแบบฝึกหัดให้ผู้อ่านที่เข้าใจบทความ

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


8

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

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

เหตุผลเบื้องหลังนี้ยากที่จะรู้และอาจขึ้นอยู่กับนักวิจัยนักวิจัย แต่ส่วนใหญ่มันเป็นสองเท่า

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

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

ฉันปล่อยให้คุณมีการอ้างอิงล่าสุดจาก ACM นี้: http://cacm.acm.org/magazines/2011/5/107698-the-importance-of-reviewing-the-code/fulltext


7

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

วันนี้ไม่มีเหตุผลที่ดีที่จะไม่รวมรหัสในบทความประเภทใดก็ตามที่อ้างอิงอัลกอริทึม

นอกจากนี้ยังอาจเป็นประโยชน์ในการละทิ้งรูปแบบการพิมพ์เช่น PDF และ postscript เพื่อสนับสนุนรูปแบบที่มีความหมายมากขึ้น (HTML กับ MathML หรืออาจเป็นรูปแบบโอเพนซอร์ซของ Mathematica)


8
+1 สำหรับสองย่อหน้าแรก -1 สำหรับย่อหน้าสุดท้าย คุณสามารถนำ LaTeX ของฉันไปได้เมื่อคุณแงะจากมือที่ตายแล้วของฉัน
Jeffε

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