มีวิธีแนะนำในการสื่อสารการเขียนโปรแกรมทางวิทยาศาสตร์ / วิศวกรรมให้กับนักพัฒนา C หรือไม่?


16

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

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

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

ขอบคุณล่วงหน้าสำหรับความคิดเห็นใด ๆ


3
คุณลองใช้ mcc เพื่อแปลงรหัส matlab เป็น c หรือไม่? ฉันคิดว่ามันmcc -c matlabfile.m
Will Tate

4
เมื่อคุณจ้างโปรแกรมเมอร์ให้ระบุว่าเขา / เธอจะต้องเข้าใจทั้งรหัส C และ Matlab เมื่อพิจารณาถึงความเร็วคุณควรใช้ C ++ แทน C แม้ว่า (ด้วยความระมัดระวังจะไม่ช้าและเร็วกว่า)
Jerry Coffin

3
@willytate: สิ่งนี้ต้องการให้คุณมีคอมไพเลอร์ Matlab มันไม่ได้สร้างโค้ดที่มีประสิทธิภาพโดยเฉพาะและมีข้อ จำกัด บางประการเกี่ยวกับโค้ดที่คุณสามารถคอมไพล์ได้
Jonas

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

3
ใช้เวลาส่วนใหญ่ในอัลกอริทึมจริงหรือเล่นซอกับไฟล์ IO และการแยกวิเคราะห์หรือไม่ รหัส C เฉลี่ยจะไม่สามารถเขียนรหัส FFT และเมทริกซ์ที่ใกล้เคียงกับการใช้งาน MATLAB หากการแยกวิเคราะห์, IO และการเล่นซอไฟล์เป็นที่ที่โปรแกรมของคุณใช้เวลาโปรแกรมโปรแกรมเมอร์ C ของคุณควรมุ่งเน้นไปที่นั้นและเขียนรหัสกาวที่เรียกใช้ฟังก์ชันจากไลบรารี MATLAB หากการแก้ปัญหาการสลายตัวของ FFT / matrix / ODE เป็นปัญหาคอขวดคุณต้องหาโปรแกรมเมอร์ C ที่มีวิธีการเชิงตัวเลขจำนวนมาก
Charles E. Grant

คำตอบ:


15

ฉันอยู่ในสถานการณ์ที่คล้ายกันในขณะที่คุณยังมีคนพอร์ตรหัส Matlab ของฉันไปที่ C ++

มากขึ้นอยู่กับความซับซ้อนของรหัสของคุณเช่นเดียวกับระดับทักษะของนักพัฒนา C / C ++ และความเข้าใจในสิ่งที่พวกเขาควรจะใช้ - ยิ่งพวกเขาดีขึ้นและพวกเขาเข้าใจปัญหาของคุณมากขึ้น พวกเขาสามารถทำงานได้อย่างอิสระ

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

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

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


+1 สำหรับการมีผลการทดสอบที่ถูกต้องสำหรับซอฟต์แวร์ การย้ายรหัสจาก Matlab ไปยัง C / C ++ นั้นยากพอโดยไม่ทราบว่าผลลัพธ์ควรมีหน้าตาเป็นอย่างไร
rjzii

12

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

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

เพื่อให้ง่ายขึ้นสำหรับผู้ที่เปลี่ยนรหัสของคุณ:

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

  2. อธิบายหมายเลขเวทมนต์หรือค่าคงที่ที่ใช้ในรหัสของคุณและเงื่อนไขที่ถูกต้อง

  3. เอกสารโครงสร้างข้อมูลของรหัสของคุณ สไตล์ "ทุกอย่างเป็นเมทริกซ์" ของ MATLAB นั้นแตกต่างจากภาษาส่วนใหญ่มากและบ่อยครั้งที่หมายความว่าโครงสร้างข้อมูลของคุณถูกกำหนดโดยปริยายโดยวิธีการที่คุณใช้เมทริกซ์ โปรแกรมเมอร์ AC จะต้องคิดหาวิธีการตั้งค่าโครงสร้างต่าง ๆ และจัดสรรอาร์เรย์ที่จำเป็นดังนั้นตรวจสอบให้แน่ใจว่ามีความหมายและโครงสร้างภายในของตัวแปรของคุณอย่างไร

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

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

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

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


ฉันเห็นด้วยกับการประเมินทางเทคนิคของคุณและคุณทำคะแนนได้ดี (1 - 7) แต่ฉันคิดว่าโฆษณาที่อยู่ด้านบนสุดเกี่ยวกับ "คนส่วนใหญ่ที่โค้ดเฉพาะใน MATLAB" นั้นไม่จำเป็นและไม่จริง

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

4
จากประสบการณ์ของฉันโค้ดที่ไม่ดีส่วนใหญ่จะถูกเขียนโดยคนที่เขียนโค้ด one-shot เช่นรหัสที่จะใช้ (อ่าน) โดยบุคคลเดียวสำหรับปัญหาเดียว ภาษาการเขียนโปรแกรมไม่สำคัญ และสำหรับฉันในฐานะที่เป็นคนเขียนโปรแกรมส่วนใหญ่ใน Matlab ส่วนโฆษณาที่น่ารังเกียจ
Jonas

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

4

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

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

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


3

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

  • แปลงรหัสของคุณจาก Matlab จะ Scilab กับเครื่องมือ M2SCI ,
  • แปลงรหัส Scilab ไปที่ C โดยใช้ "Scilab 2 C" ,
  • ทดสอบรหัสข้าม
  • ใช้ผู้สร้างโปรไฟล์เพื่อค้นหาคอขวดที่ต้องใช้สายตามนุษย์

เป็นการดีที่ไม่มีความรู้เรื่อง Scilab ในกระบวนการและมันง่ายพอที่จะใช้เวลาลองวิธีแก้ปัญหานี้ (ในทางปฏิบัติมันอาจไม่ง่ายเลย ... )

หมายเหตุ: ฉันไม่ได้ลองสิ่งนี้ แต่เป็นวิธีแก้ปัญหาที่ฉันมองเห็นด้วยตัวเองด้วยเหตุผลที่คล้ายกัน


2

พัฒนาชุดทดสอบที่ดีที่คุณสามารถเรียกใช้ผ่านแอปพลิเคชันทั้งสองจากนั้นดูที่การวัด

สิ่งนี้จะช่วยนักพัฒนาของคุณในการทดสอบโค้ดของพวกเขาและให้แน่ใจว่าคุณภาพอยู่ในระดับที่เหมาะสม


2

โพสต์ที่ยอดเยี่ยมโดย Jonas โดยเฉพาะอย่างยิ่งจุดที่ให้วิธีทดสอบโค้ด นี่คือคำแนะนำเพิ่มเติม:

  • รหัสการแบ่งปัน พิจารณาจัดหาแหล่ง MATLAB แต่ต้องเตรียมอธิบายโครงสร้างหรือรายละเอียดอื่น ๆ นักพัฒนา C หวังว่าจะรับรู้แนวคิดระดับสูงอัลกอริทึมและคณิตศาสตร์ ( และหวังว่าคุณจะแสดงความคิดเห็นรหัสของคุณ )

  • เอกสาร มันจะเป็นสิ่งสำคัญที่คุณมีเอกสารที่ชัดเจนที่กำหนดโครงการ ท้ายที่สุดถ้าบุคคลนั้นไม่คล่องแคล่วใน MATLAB รหัสอาจจะไม่มีการอ้างอิงที่มีประโยชน์มาก

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


1

เว้นแต่ว่าตัวแปลงสัญญาณ C ของคุณใช้ libs ที่ถูกต้อง Matlab จะดีกว่าในเรื่องที่ไม่สำคัญเท่าการแปลงเมทริกซ์ ความหมายที่ไร้เดียงสา C ไม่มั่นคงพอ การจ้างนักเขียน C อาจมีราคาแพง ฉันจะลอง porting Matlab code เพื่อ scipy และเปรียบเทียบความเร็วลองใช้คอมไพเลอร์ c ของ Matlab หรือ ... แค่โยนฮาร์ดแวร์เพิ่มเข้าไป - มันอาจจะถูกและง่ายกว่าและปลอดภัยกว่าและเร็วกว่ามาก

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