แนวทางปฏิบัติในการเขียนโปรแกรมในสภาพแวดล้อมทางวิทยาศาสตร์? [ปิด]


91

พื้นหลัง

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

ตอนนี้สิ่งต่าง ๆ ทำได้ดีอย่างน่าประหลาดใจ แต่ผู้คนในวิทยาศาสตร์ธรรมชาติทำการพัฒนาซอฟต์แวร์ของพวกเขาได้อย่างไร?

คำถาม

คำถามที่เป็นรูปธรรม:

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

สรุปคำตอบป่านนี้

คำตอบ (หรือการตีความของฉัน) จนถึงตอนนี้: (2008-10-11)

  • ภาษา / แพ็คเกจที่ดูเหมือนจะใช้กันอย่างแพร่หลาย:
    • LabVIEW
    • Python
      • ด้วยSciPy , NumPy , PyLabฯลฯ (ดูคำตอบของ Brandon สำหรับการดาวน์โหลดและลิงก์)
    • C / C ++
    • MATLAB
  • ผู้ตอบแบบสอบถามเกือบทั้งหมดใช้การควบคุมเวอร์ชัน การติดตามข้อผิดพลาดและกระบวนการอื่น ๆ พบได้น้อยกว่ามาก
  • หลักสูตร Software Carpentry เป็นวิธีที่ดีในการสอนการเขียนโปรแกรมและเทคนิคการพัฒนาให้กับนักวิทยาศาสตร์
  • จะปรับปรุงสิ่งต่างๆอย่างไร?
    • อย่าบังคับให้ผู้คนปฏิบัติตามระเบียบการที่เข้มงวด
    • จัดสภาพแวดล้อมด้วยตัวคุณเองและแสดงประโยชน์ต่อผู้อื่น ช่วยให้พวกเขาเริ่มทำงานกับการควบคุมเวอร์ชันการติดตามข้อบกพร่อง ฯลฯ ด้วยตนเอง
    • การตรวจสอบโค้ดของคนอื่นสามารถช่วยได้ แต่อย่าลืมว่าไม่ใช่ทุกคนที่จะชื่นชมสิ่งนั้น

2
การอ่านที่เกี่ยวข้อง: nature.com/news/2010/101013/full/467775a.html
Tobias Kienzler

คำตอบ:


27

คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

ผมใช้ในการทำงานให้Enthoughtสปอนเซอร์หลักขององค์กรSciPy เราร่วมมือกับนักวิทยาศาสตร์จาก บริษัท ที่ทำสัญญากับ Enthought สำหรับการพัฒนาซอฟต์แวร์ที่กำหนดเอง Python / SciPy ดูเหมือนจะเป็นสภาพแวดล้อมที่สะดวกสบายสำหรับนักวิทยาศาสตร์ การเริ่มต้นใช้งานมีความน่ากลัวน้อยกว่าการพูด C ++ หรือ Java หากคุณเป็นนักวิทยาศาสตร์ที่ไม่มีพื้นฐานด้านซอฟต์แวร์

การกระจาย Enthought งูใหญ่มาพร้อมกับทุกห้องสมุดการคำนวณทางวิทยาศาสตร์รวมถึงการวิเคราะห์วางแผน, 3D visualation ฯลฯ

มีการฝึกอบรมสำหรับผู้ที่ไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือไม่?

Enthought เสนอการฝึกอบรม SciPyและชุมชน SciPy ก็ค่อนข้างดีเกี่ยวกับการตอบคำถามในรายชื่อผู้รับจดหมาย

คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

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

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

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


21

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

ครอบคลุมหัวข้อต่างๆเช่นการควบคุมเวอร์ชันการดีบักการทดสอบการเขียนสคริปต์และปัญหาอื่น ๆ

ฉันได้ฟังการบรรยายประมาณ 8 หรือ 9 ครั้งและคิดว่าเป็นเรื่องที่แนะนำเป็นอย่างยิ่ง

แก้ไข: MP3 ของการบรรยายก็มีให้เช่นกัน


16

ฟิสิกส์นิวเคลียร์ / อนุภาคที่นี่

  • สาขางานการเขียนโปรแกรมใช้ในการกระทำส่วนใหญ่ในFortranใช้CERNLIB (PAW, Minuit, ... ) และGEANT3เมื่อเร็ว ๆ นี้จะได้รับส่วนใหญ่ทำใน C ++ กับรากและGeant4 มีไลบรารีและเครื่องมืออื่น ๆ อีกมากมายสำหรับการใช้งานเฉพาะทางและLabVIEWเห็นการใช้งานบางส่วนที่นี่และที่นั่น
  • การได้มาซึ่งข้อมูลในตอนท้ายของธุรกิจนี้มักจะหมายถึงงานในระดับที่ค่อนข้างต่ำ บ่อยครั้งใน C บางครั้งแม้ในการประกอบ แต่สิ่งนี้กำลังจะหายไปเนื่องจากฮาร์ดแวร์มีความสามารถมากขึ้น ในทางกลับกันบอร์ดจำนวนมากถูกสร้างขึ้นด้วยFPGAซึ่งจำเป็นต้องมีการบิดประตู ...
  • One-offs อินเทอร์เฟซแบบกราฟิก ฯลฯ ใช้เกือบทุกอย่าง ( Tcl / Tkเคยใหญ่และฉันได้เห็น Perl / Tk และ Python / Tk มากขึ้นเมื่อเร็ว ๆ นี้) รวมถึงแพ็คเกจจำนวนมากที่ส่วนใหญ่อยู่ในชุมชนฟิสิกส์ของอนุภาค .
  • หลายคนเขียนโค้ดมีการฝึกอบรมที่เป็นทางการเพียงเล็กน้อยหรือไม่มีเลยและกระบวนการถูกถ่ายทอดอย่างไม่สม่ำเสมอตามประเพณีปากเปล่า แต่ผู้นำกลุ่มซอฟต์แวร์ส่วนใหญ่จะดำเนินการอย่างจริงจังและอ่านข้อมูลให้มากที่สุดเท่าที่จำเป็นเพื่อประกอบข้อบกพร่องในด้านนี้
  • การควบคุมเวอร์ชันสำหรับเครื่องมือหลักเป็นที่แพร่หลาย แต่โปรแกรมเมอร์แต่ละคนกลับละเลยงานเล็ก ๆ น้อย ๆ เครื่องมือติดตามข้อบกพร่องอย่างเป็นทางการนั้นพบได้น้อยกว่าเช่นเดียวกับการสร้างทุกคืนการทดสอบหน่วยและการทดสอบการถดถอย

เพื่อปรับปรุงสิ่งต่างๆ:

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

อีกหนึ่งคำแนะนำสำหรับการปรับปรุงสิ่งต่างๆ

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

11

สิ่งนี้อาจจะสัมผัสได้เล็กน้อย แต่หวังว่าจะเกี่ยวข้อง

ฉันเคยทำงานให้กับ National Instruments, R&D ซึ่งฉันเขียนซอฟต์แวร์สำหรับ NI RF & Communication toolkits เราใช้ LabVIEW มาพอสมควรและนี่คือแนวทางปฏิบัติที่เราปฏิบัติตาม:

  1. การควบคุมแหล่งที่มา NI ใช้ Perforce เราทำสิ่งปกติ - สาขา dev / trunk การรวมอย่างต่อเนื่องผลงาน
  2. เราเขียนชุดทดสอบอัตโนมัติ
  3. เรามีคนไม่กี่คนที่มีพื้นฐานในการประมวลผลสัญญาณและการสื่อสาร เราเคยมีการตรวจสอบโค้ดเป็นประจำและเอกสารแนวทางปฏิบัติที่ดีที่สุดเพื่อให้แน่ใจว่าโค้ดของพวกเขาเป็นไปตามที่กำหนด
  4. แม้จะมีการตรวจสอบโค้ด แต่ก็มีบางครั้งที่ "พวกซอฟต์แวร์" อย่างฉันต้องเขียนโค้ดนี้ใหม่เพื่อประสิทธิภาพ
  5. ฉันรู้ดีว่าคุณหมายถึงคนดื้อรั้น! เรามีคนที่เคยคิดว่าการชี้ให้เห็นการปรับปรุงประสิทธิภาพที่เป็นไปได้ในโค้ดของพวกเขาเป็นการดูถูกส่วนตัว เป็นไปโดยไม่ได้บอกว่าสิ่งนี้เรียกร้องให้มีการจัดการที่ดี ฉันคิดว่าวิธีที่ดีที่สุดในการจัดการกับคนเหล่านี้คือไปอย่างช้าๆไม่กดดันให้เกิดการเปลี่ยนแปลงอย่างหนักและหากจำเป็นก็ควรเตรียมที่จะทำงานสกปรก [ตัวอย่าง: เขียนชุดทดสอบสำหรับโค้ด]

9

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

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

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


7

1. ) ภาษาสคริปต์เป็นที่นิยมในทุกวันนี้เนื่องจากฮาร์ดแวร์ที่ดีกว่า Perl / Python / Lisp เป็นที่แพร่หลายสำหรับการใช้งานที่มีน้ำหนักเบา (ระบบอัตโนมัติการคำนวณแบบเบา) ฉันเห็น Perl มากมายในงานของฉัน (EM เชิงคำนวณ) เนื่องจากเราชอบ Unix / Linux สำหรับสิ่งที่มีประสิทธิภาพมักใช้ C / C ++ / Fortran สำหรับการคำนวณแบบขนานเรามักจะทำการรันแบบขนานใน EM ด้วยตนเองซึ่งต่างจากการมีโปรแกรมทำโดยปริยาย (เช่นแยกงานตามมุมมองเมื่อคำนวณเรดาร์ข้ามส่วน)

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

3. ) เราใช้ SVN; อย่างไรก็ตามเราไม่มีซอฟต์แวร์ติดตามข้อบกพร่อง สิ่งที่ดีที่สุดสำหรับเราคือไฟล์ txt ที่บอกคุณว่าจุดบกพร่องเฉพาะจุดบกพร่องอยู่ที่ไหน

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


6

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


5

ฉันเป็นนักฟิสิกส์ที่ทำงานในสาขาฟิสิกส์ของสารควบแน่นการสร้างแบบจำลองคลาสสิกและแบบควอนตัม

ภาษา:

  • C ++ - ใช้งานได้หลากหลายมาก: สามารถใช้กับอะไรก็ได้ความเร็วที่ดี แต่อาจไม่สะดวกเมื่อพูดถึงMPI
  • อ็อกเทฟ - เหมาะสำหรับการคำนวณเสริมบางอย่างสะดวกและมีประสิทธิผล

ห้องสมุด:

  • อาร์มาดิลโล / สายฟ้าแลบ ++ - อาร์เรย์ / เมทริกซ์ / คิวบ์ที่รวดเร็วสำหรับ C ++
  • Eigen / Armadillo - พีชคณิตเชิงเส้น
  • GSL - ใช้กับ C
  • LAPACK / BLAS / ATLAS - ใหญ่และเร็วมาก แต่สะดวกน้อยกว่า (และเขียนเป็นภาษาฟอร์แทรน)

กราฟิก:

  • GNUPlot - มีเอาต์พุตที่สะอาดและเรียบร้อยมาก แต่บางครั้งก็ไม่ได้ผล
  • แหล่งกำเนิด - สะดวกในการวางแผน

เครื่องมือในการพัฒนา:

  • Vim + ปลั๊กอิน - มันใช้งานได้ดีสำหรับฉัน
  • GDB - เครื่องมือดีบั๊กที่ยอดเยี่ยมเมื่อทำงานกับ C / C ++
  • Code :: Blocks - ฉันใช้มาระยะหนึ่งแล้วและพบว่ามันค่อนข้างสะดวกสบาย แต่ Vim ก็ยังดีกว่าในความคิดของฉัน

หาก c ++ ของคุณทำงานช้ากว่า c ของคุณแสดงว่าคุณใช้ผิด 'แน่นอนว่าทำได้ง่าย แต่นั่นก็เป็นอีกเรื่องหนึ่ง :: ทำงานกับ c ++ มาประมาณ 7 ปีแล้วและยังคงเรียนรู้สิ่งใหม่ ๆ ตลอดเวลา ::
dmckee --- อดีตผู้ดูแลลูกแมวเมื่อ

ฉันสังเกตว่าเป็นแฟนตัวยงของ C ++ แต่ก็ยากที่จะดูว่ามันจะ "ช้ากว่า C หรือ Fortran ได้อย่างไร เว้นแต่คุณจะรวมตัวแปร C สำหรับ HPC เช่น UPC และ C สำหรับ CUDA
Suugaku

4

ฉันทำงานเป็นนักฟิสิกส์ในมหาวิทยาลัยในสหราชอาณาจักร

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

  • คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

โดยทั่วไปการวิเคราะห์ข้อมูลและการลงจุดจะกระทำโดยใช้แพ็คเกจการวิเคราะห์ข้อมูลทั่วไปเช่นIGOR Pro , ORIGIN , Kaleidegraphซึ่งสามารถคิดได้ว่าเป็น 'Excel plus' โดยทั่วไปแล้วแพ็กเกจเหล่านี้จะมีภาษาสคริปต์ที่สามารถใช้เพื่อทำให้เป็นอัตโนมัติได้ การวิเคราะห์โดยผู้เชี่ยวชาญมากขึ้นอาจมียูทิลิตี้เฉพาะสำหรับงานซึ่งโดยทั่วไปจะเขียนขึ้นเมื่อนานมาแล้วไม่มีใครมีแหล่งข้อมูลและค่อนข้างมีปัญหา นักเทคโนโลยีบางประเภทอาจใช้ภาษาที่กล่าวถึง (Python, R, MatLab พร้อม Gnuplot สำหรับการพล็อต)

ซอฟต์แวร์ควบคุมมักทำใน LabVIEW แม้ว่าเราจะใช้ Delphi ซึ่งค่อนข้างผิดปกติ

  • มีการฝึกอบรมสำหรับผู้ที่ไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือไม่?

ฉันเคยไปสัมมนาเกี่ยวกับการคำนวณแบบกริดการสร้างภาพ 3 มิติการเรียนรู้ Boost และอื่น ๆ ที่มอบให้โดยทั้งสองมหาวิทยาลัยที่ฉันเคยไป ในฐานะนักศึกษาระดับปริญญาตรีเราได้รับการสอน VBA สำหรับ Excel และ MatLab แต่ C / MatLab / LabVIEW เป็นเรื่องธรรมดามากกว่า

  • คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

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

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

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

ฉันว่าโดยรวมแล้วสำหรับโครงการวิทยาศาสตร์ธรรมชาติส่วนใหญ่มักใช้เวลาในการทำวิจัยดีกว่า!


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

4

นักฟิสิกส์อดีตนักวิชาการและนักฟิสิกส์อุตสาหกรรมแห่งสหราชอาณาจักรที่นี่:

คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

ทุกวันนี้ฉันใช้MATLABเป็นหลัก(เข้าถึงฟังก์ชันการแสดงภาพและคณิตศาสตร์ได้ง่าย) ฉันเคยใช้FortranมากและIDL IDLฉันใช้ C (แต่ฉันเป็นคนอ่านมากกว่าคนเขียน C) มาโครของ Excel (น่าเกลียดและสับสน) ตอนนี้ฉันจำเป็นต้องสามารถอ่าน Java และ C ++ ได้ (แต่ฉันไม่สามารถตั้งโปรแกรมได้จริงๆ) และฉันก็แฮ็ก Python ด้วย เพื่อความบันเทิงของตัวเองตอนนี้ฉันกำลังเขียนโปรแกรมใน C # (ส่วนใหญ่จะใช้อินเตอร์เฟสแบบพกพา / ต้นทุนต่ำ / สวย) ฉันสามารถเขียน Fortran ด้วยภาษาใดก็ได้ที่ฉันนำเสนอด้วย ;-)

มีการฝึกอบรมสำหรับผู้ที่ไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือไม่?

หลักสูตรฟิสิกส์ระดับปริญญาตรี (ทั้งหมด?) ส่วนใหญ่จะมีหลักสูตรการเขียนโปรแกรมขนาดเล็กโดยปกติจะใช้ C, Fortran หรือ MATLAB แต่เป็นพื้นฐานที่แท้จริง ฉันอยากได้รับการฝึกอบรมด้านวิศวกรรมซอฟต์แวร์ในบางจุด (การควบคุมการแก้ไข / การทดสอบ / การออกแบบระบบขนาดกลาง)

คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

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

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

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

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


4

คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

Python, NumPyและ pylab (การวางแผน)

มีการฝึกอบรมสำหรับผู้ที่ไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือไม่?

ไม่ แต่ฉันทำงานในห้องปฏิบัติการวิจัยมัลติมีเดียดังนั้นเกือบทุกคนจึงมีพื้นฐานด้านวิทยาศาสตร์คอมพิวเตอร์

คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

ใช่การโค่นล้มสำหรับการควบคุมเวอร์ชันTracสำหรับการติดตามข้อบกพร่องและวิกิ คุณสามารถรับตัวติดตามข้อผิดพลาด / โฮสติ้งควบคุมเวอร์ชันได้ฟรีจาก http://www.assembla.com/หากTOSเหมาะกับโครงการของคุณ

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

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


3

ฉันเป็นนักสถิติของมหาวิทยาลัยในสหราชอาณาจักร โดยทั่วไปคนที่นี่ใช้ R ในการวิเคราะห์ข้อมูลมันค่อนข้างง่ายที่จะเรียนรู้ถ้าคุณรู้จัก C / Perl พลังที่แท้จริงของมันคือวิธีที่คุณสามารถนำเข้าและแก้ไขข้อมูลแบบโต้ตอบได้ ง่ายมากที่จะใช้ไฟล์ CSV (หรือ Excel) จำนวนมากและรวมเข้าด้วยกันสร้างคอลัมน์ใหม่โดยอิงจากไฟล์อื่น ๆ แล้วโยนลงใน GLM, GAM หรือรูปแบบอื่น ๆ การพล็อตเป็นเรื่องเล็กน้อยและไม่จำเป็นต้องมีความรู้ภาษาใหม่ทั้งหมด (เช่น PGPLOT หรือ GNUPLOT) แน่นอนว่าคุณยังมีข้อได้เปรียบในการมีคุณสมบัติในตัวมากมาย (จากสิ่งง่ายๆเช่นค่าเฉลี่ยค่าเบี่ยงเบนมาตรฐาน ฯลฯ ทั้งหมด วิธีไปยังเครือข่ายประสาทเส้นโค้งและการวางแผน GL)

ต้องบอกว่ามีสองประเด็น ด้วยชุดข้อมูลขนาดใหญ่มาก R อาจช้ามาก (ฉันเคยเห็นสิ่งนี้กับชุดข้อมูล> 50,000x30 เท่านั้น) และเนื่องจากมีการตีความว่าคุณไม่ได้รับประโยชน์จาก Fortran / C ในแง่นี้ แต่คุณสามารถ (ง่ายมาก) เรียก R เพื่อเรียกไลบรารีที่ใช้ร่วมกันของ C และ Fortran (ไม่ว่าจะจากบางอย่างเช่น netlib หรือที่คุณเขียนขึ้นเอง) ดังนั้นขั้นตอนการทำงานตามปกติคือ:

  • หาสิ่งที่ต้องทำ
  • สร้างต้นแบบรหัสใน R
  • ทำการวิเคราะห์เบื้องต้น
  • เขียนโค้ดช้าลงใน C หรือ Fortran อีกครั้งและเรียกสิ่งนั้นจาก R

ซึ่งได้ผลดีมากสำหรับฉัน

ฉันเป็นหนึ่งในคนเดียวในแผนกของฉัน (จาก> 100 คน) ที่ใช้การควบคุมเวอร์ชัน (ในกรณีของฉันใช้ git กับ githuib.com) สิ่งนี้ค่อนข้างน่ากังวล แต่ดูเหมือนว่าพวกเขาจะไม่กระตือรือร้นที่จะลองใช้ ออกและมีความพึงพอใจกับการส่งไฟล์ zip ไปรอบ ๆ (yuck.)

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


2

คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

ภาควิชาฟิสิกส์ระดับปริญญาตรีของฉันสอนชั้นเรียนLabVIEWและใช้มันอย่างกว้างขวางในโครงการวิจัย

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

เกี่ยวกับการวิเคราะห์ข้อมูลคุณสามารถใช้ตัวเลขประเภทใดก็ได้ที่คุณต้องการ ตามหลักการแล้วคุณสามารถทำการคำนวณอย่างหนักในภาษา X และจัดรูปแบบผลลัพธ์เพื่อพล็อตอย่างสวยงามใน Excel, Mathcad , Mathematicaหรืออะไรก็ตามที่ระบบวางแผนรสชาติ du jour อย่าคาดหวังมาตรฐานที่นี่

คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

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

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

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

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


2

ตัวเลือกที่ดีอีกประการหนึ่งคือScilab มีโมดูลกราฟิกà la LabVIEWมีภาษาโปรแกรมของตัวเองและคุณยังสามารถฝังรหัส Fortran และ C ได้อีกด้วย มีการใช้งานในภาครัฐและเอกชนรวมถึง บริษัท อุตสาหกรรมขนาดใหญ่ และได้ฟรี

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

สำหรับพล็อตที่ผมใช้Matplotlib ฉันเร็ว ๆ นี้จะต้องทำภาพเคลื่อนไหวและฉันได้เห็นผลลัพธ์ที่ดีโดยใช้MEncoder นี่คือตัวอย่างรวมถึงแทร็กเสียง

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

คุณควรพิจารณาพัฒนาด้วยการใช้ดีบักเกอร์ที่ช่วยให้คุณตรวจสอบเนื้อหาตัวแปรที่จุดพักที่ตั้งค่าได้ในโค้ดแทนการใช้บรรทัดการพิมพ์ ฉันใช้ Eclipse สำหรับการพัฒนา Python และ Fortran (แม้ว่าฉันจะมีข้อผิดพลาดในการรวบรวมโปรแกรมสั้น ๆ ของ Fortran แต่อาจเป็นการกำหนดค่าที่ไม่ดี) และฉันเริ่มใช้Eric IDEสำหรับ Python ช่วยให้คุณสามารถดีบักจัดการการกำหนดเวอร์ชันด้วยSVNมีคอนโซลในตัวสามารถทำการ refactoring กับ Bicycle Repair Man (สามารถใช้อันอื่นได้เช่นกัน) คุณมี Unittest เป็นต้นทางเลือกที่เบากว่าสำหรับ Python คือIDLEรวมอยู่ด้วย ด้วย Python ตั้งแต่เวอร์ชัน 2.3

ฉันขอแนะนำ:

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

  • แสดงความคิดเห็นรหัสตั้งแต่เริ่มต้น

  • สำหรับแอปพลิเคชันที่สำคัญบางครั้งควรพึ่งพาภาษา / คอมไพเลอร์เวอร์ชันเก่ากว่า (รุ่นหลัก) เสถียรกว่าและดีบั๊กกว่า แน่นอนว่าคุณสามารถมีโค้ดที่ปรับให้เหมาะสมมากขึ้นในเวอร์ชันที่ใหม่กว่าแก้ไขบั๊ก ฯลฯ แต่ฉันกำลังพูดถึงการใช้ Fortran 95 แทนที่จะเป็นปี 2003 Python 2.5.4 แทนที่จะเป็น 3.0 หรือมากกว่านั้น (โดยเฉพาะอย่างยิ่งเมื่อเวอร์ชันใหม่ทำลายความเข้ากันได้แบบย้อนกลับ) การปรับปรุงจำนวนมากมักจะทำให้เกิดข้อบกพร่องมากมาย ยังคงขึ้นอยู่กับกรณีการใช้งานเฉพาะ! โปรดทราบว่านี่เป็นทางเลือกส่วนบุคคลหลายคนอาจโต้แย้งเรื่องนี้

  • ใช้การสำรองข้อมูลซ้ำซ้อนและอัตโนมัติ! (ด้วยการควบคุมเวอร์ชัน)


2

แน่นอนใช้Subversionเพื่อให้สำเนาสแนปชอตที่เป็นปัจจุบันทำงานอยู่ระหว่างดำเนินการและมีเสถียรภาพ ซึ่งรวมถึง C ++, Java และอื่น ๆ สำหรับเครื่องมือซอฟต์แวร์พื้นบ้านและสคริปต์ Quickie สำหรับการประมวลผลครั้งเดียว

ด้วยความเอนเอียงในด้านวิทยาศาสตร์และวิศวกรรมประยุกต์ที่มีต่อวิธีการพัฒนาแบบ "คาวบอยตัวเดียว" วิธีปฏิบัติตามปกติในการจัดระเบียบพื้นที่เก็บข้อมูลให้เป็นลำต้นแท็กและสิ่งอื่น ๆ ที่เป็นอยู่ - อย่ากังวล! นักวิทยาศาสตร์และช่างเทคนิคในห้องปฏิบัติการของพวกเขาชอบหมุนลูกบิดกระดิกอิเล็กโทรดและไล่การรั่วไหลของสุญญากาศ มันเพียงพอแล้วที่จะทำให้ทุกคนเห็นด้วยพูด Python / NumPyหรือทำตามหลักการตั้งชื่อ อย่าลืมพยายามทำให้พวกเขาปฏิบัติตามแนวทางปฏิบัติและอนุสัญญาของนักพัฒนาซอฟต์แวร์ที่มีความลับ


2

สำหรับการจัดการซอร์สโค้ดระบบรวมศูนย์เช่นการโค่นล้มจะดีกว่าสำหรับการใช้งานทางวิทยาศาสตร์เนื่องจากมีจุดเดียวที่ชัดเจน (SPOT) การบันทึกการเปลี่ยนแปลงและความสามารถในการเรียกคืนเวอร์ชันของไฟล์ใด ๆ โดยไม่ต้องไล่หาว่าจะหาบางสิ่งได้จากที่ใดมีข้อดีอย่างมากในการเก็บบันทึก เครื่องมือเช่นGitและMonotone : โอ้ความสับสนวุ่นวายที่ฉันสามารถจินตนาการได้ว่าจะตามมา! การมีบันทึกที่ชัดเจนว่ามีการใช้สคริปต์งานแฮ็คเวอร์ชันใดในขณะที่ใช้เซ็นเซอร์ใหม่เมื่อฮิกส์โบซอนเดินผ่านไปหรือซูเปอร์โนวาระเบิดขึ้นจะนำไปสู่ความสุข


คุณเคยลองใช้ระบบควบคุมเวอร์ชันกระจายหรือไม่?
Andrew Grimm

1
ระบบกระจายเกือบทั้งหมดทำให้ง่ายเหมือนกับระบบรวมศูนย์ คุณเพียงแค่บันทึกรหัสคอมมิต (ในเงื่อนไข Git) แทนหมายเลขการแก้ไข (เช่นเดียวกับ SVN)
Phil Miller

2

คุณใช้ภาษา / สภาพแวดล้อมใดในการพัฒนาซอฟต์แวร์ทางวิทยาศาสตร์โดยเฉพาะ การวิเคราะห์ข้อมูล? ห้องสมุดอะไร (เช่นคุณใช้อะไรในการวางแผน?)

ภาษาที่ฉันใช้สำหรับตัวเลขและสิ่งที่เกี่ยวข้องกับวิทยาศาสตร์:

  • C (การพัฒนาช้าการดีบักมากเกินไปแทบเป็นไปไม่ได้ที่จะเขียนโค้ดที่ใช้ซ้ำได้)
  • C ++ (และฉันเรียนรู้ที่จะเกลียดมัน - การพัฒนาไม่ช้าเท่า C แต่อาจสร้างความเจ็บปวดได้ในตอนแรกเทมเพลตและคลาสนั้นยอดเยี่ยม แต่หลังจากนั้นไม่นานฉันก็รู้ว่าฉันต่อสู้กับมันตลอดเวลาและหาวิธีแก้ปัญหาสำหรับ ปัญหาการออกแบบภาษา
  • Common Lisp ซึ่งใช้ได้ แต่ไม่ได้ใช้กันอย่างแพร่หลายสำหรับคอมพิวเตอร์ Sci ไม่ง่ายที่จะรวมกับ C (ถ้าเทียบกับภาษาอื่น ๆ ) แต่ใช้งานได้
  • โครงการ อันนี้กลายเป็นทางเลือกส่วนตัวของฉัน

ตัวแก้ไขของฉันคือ Emacs แม้ว่าฉันจะใช้ vim สำหรับสิ่งต่างๆอย่างรวดเร็วเช่นการแก้ไขไฟล์กำหนดค่า

สำหรับการพล็อตฉันมักจะสร้างไฟล์ข้อความและป้อนลงใน gnuplot

สำหรับการวิเคราะห์ข้อมูลฉันมักจะสร้างไฟล์ข้อความและใช้ GNU R

ฉันเห็นผู้คนมากมายที่นี่ใช้ FORTRAN (ส่วนใหญ่เป็น 77 แต่มี 90 คน) Java จำนวนมากและ Python บางตัว ฉันไม่ชอบพวกนั้นดังนั้นฉันจึงไม่ใช้มัน

มีการฝึกอบรมสำหรับผู้ที่ไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือไม่?

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

คุณมีอะไรเช่นการควบคุมเวอร์ชันการติดตามข้อบกพร่องหรือไม่?

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

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

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

อย่างที่สองฉันเห็นสิ่งที่พวกเขาคุ้นเคยและทำให้มันใช้งานได้ (ต้องการ FORTRAN หรือไม่เราจะตั้งค่าต้องการ C ++ หรือไม่ไม่มีปัญหา Mathematica หรือตกลงเราจะซื้อใบอนุญาต) จากนั้นดูว่ามีกี่คนที่ต้องการเรียนรู้ "เครื่องมือเพิ่มเติม" เพื่อช่วยให้ทำงานได้มากขึ้น (อย่าพูดว่าเครื่องมือ "อื่น" พูดว่า "เพิ่มเติม" ดังนั้นดูเหมือนจะไม่มีใคร "เสีย" หรือ "ยอม ไป "หรืออะไรก็ได้). เริ่มต้นด้วยบรรณาธิการดูว่ามีกลุ่มใดบ้างที่ต้องการใช้ VCS เพื่อซิงค์งานของพวกเขา (เดี๋ยวก่อนคุณสามารถอยู่บ้านและส่งรหัสของคุณผ่าน SVN หรือ GIT - นั่นจะไม่ดีใช่ไหม) และอื่น ๆ อย่ากำหนด - แสดงตัวอย่างว่าเครื่องมือเหล่านี้เจ๋งแค่ไหน ทำการวิเคราะห์ข้อมูลโดยใช้ R และแสดงให้พวกเขาเห็นว่ามันง่ายเพียงใด แสดงกราฟิกที่สวยงามและอธิบายวิธีที่คุณสร้างขึ้น (แต่เริ่มต้นด้วยตัวอย่างง่ายๆ


2

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

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


1

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

หากคุณต้องการใช้ภาษาสคริปต์ทั่วไปฉันจะใช้ Python สองสิ่งที่เกิดขึ้นคือ:

  • เชลล์แบบโต้ตอบที่คุณสามารถทดลองได้
  • ไวยากรณ์ที่ชัดเจน (แม้ว่าบางครั้งจะยาว)

ข้อดีเพิ่มเติมคือมีไลบรารีสำหรับสิ่งต่างๆเกือบทั้งหมดที่คุณต้องการทำ


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