เหตุใดภาษาการเขียนโปรแกรมเชิงวิทยาศาสตร์จึงแปลกประหลาด [ปิด]


9

สำหรับฉันแล้วดูเหมือนว่าภาษาการเขียนโปรแกรมสำหรับใช้ในวิทยาศาสตร์และวิศวกรรมนั้นแปลก ๆอย่างสม่ำเสมอเมื่อเทียบกับภาษาทั่วไป ตัวอย่างบางส่วนจากด้านบนของหัวของฉัน:

  • ใน Matlab แต่ละฟังก์ชันจะต้องอยู่ในไฟล์แยกต่างหาก
  • ใน R, <- คือโอเปอเรเตอร์การมอบหมาย, เมื่อเทียบกับ = ในเกือบทุกภาษาอื่น ๆ
  • Matlab, R, Julia และอื่น ๆ ล้วนมีดัชนี 1 รายการ
  • Matlab ใช้% สำหรับความคิดเห็นไม่ใช่มาตรฐาน # หรือ //

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

ฉันอ่านกระทู้นี้และไม่พบคำอธิบายที่น่าพอใจ เพียงเพราะ R ได้รับการออกแบบเป็นภาษาวิทยาศาสตร์ไม่ได้หมายความว่าจะต้องเพิกเฉยต่อการประชุมและใช้ <- แทนที่จะเป็น =


6
คำตอบสั้น ๆ : เพราะถูกสร้างขึ้นเพื่อนักวิทยาศาสตร์ไม่ใช่สำหรับโปรแกรมเมอร์
Bart van Ingen Schenau

19
คำตอบสั้น ๆ : เพราะทุกภาษาที่คุณคิดว่าเป็นเรื่องปกตินั้นได้รับอิทธิพลจากบรรพบุรุษร่วมกัน C.
Ross Patterson

3
ฉันคิดว่าคุณจะต้องดิ้นรนเพื่อค้นหาอนุสัญญาใด ๆในภาษาต่างๆ มันขึ้นอยู่กับมรดกของพวกเขา
Robbie Dee

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

8
99% ของคุณผิด หากคุณรู้จัก C และอนุพันธ์ของมันเท่านั้นคุณอาจคิดเช่นนั้น แต่กว่า 50% ของภาษาที่ไม่ใช่ C ใช้สิ่งที่แตกต่างสำหรับการมอบหมายการจัดทำดัชนีและ / หรือความคิดเห็น
david.pfx

คำตอบ:


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

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

สำหรับ "=" หลายคนมีปัญหาที่ต้องคุ้นเคยว่ามันไม่เท่าเทียมกัน แต่เป็นการมอบหมาย BTW ใน Pascal ความเท่าเทียมกันและการมอบหมายคือ ": ="

และคุณคิดว่า == เพื่อความเท่าเทียมเป็นธรรมชาติมากกว่าหรือ? ในทางตรงกันข้ามการผสม = และ == เป็นข้อผิดพลาดทั่วไปที่สุดในการเขียนโปรแกรม C มันเกิดขึ้นบ่อยมากแม้แต่ใน IDEs ร่วมสมัยด้วยการควบคุมอัตโนมัติ

เกี่ยวกับการจัดทำดัชนีจาก 1 - มันเป็นธรรมชาติเท่านั้น เมื่อคุณเป็นเด็กคุณได้เรียนรู้บทกวีและเพลงที่คุณนับ: หนึ่งสองสาม ... และไม่ใช่ 0,1,2 ... ในวิชาคณิตศาสตร์ในโรงเรียนเราศึกษาว่าการนับเริ่มจาก 1 และ 0 ไม่ได้เป็นของหมายเลขธรรมชาติ / การนับ เท่านั้นที่มีคำจำกัดความของฟังก์ชั่นดัชนีที่ไม่ใช่ธรรมชาติมา หลังจากทั้งหมด 0 ถูกคิดค้นหลายพันปีหลังจากบรรพบุรุษของเรายกนิ้วขึ้น

การเริ่มต้น 0 นั้นง่ายต่อการรับรู้มากขึ้นและเข้าสู่การฝึกฝนด้านไอทีทันทีหลังจากการปรากฏตัว C แต่ใน Fortran ภาษาแรกมีการใช้ดัชนี 1 รายการ เช่นเดียวกับภาษาอื่น ๆ ของยุคก่อนยุคอุตสาหกรรม

และใช่ฉันได้อ่านบทความของ Dyjkstra เกี่ยวกับความเป็นธรรมชาติของการนับที่อิง 0 และไม่เห็นด้วยกับการโต้แย้งของเขา มันเป็นเรื่องธรรมดาสำหรับนักดนตรี และแม้แต่ผู้ที่ชื่นชอบ 0 คนที่สร้างคอมไพเลอร์ C และ Java ให้นับจำนวนบรรทัดของโค้ดที่เริ่มต้นจาก 1!


1
": =" สำหรับการกำหนดและการจัดทำดัชนีแบบ 1 จะใช้ใน Smalltalk ด้วย
Rory Hunter

1
ฉันไม่ได้ซื้อการจัดทำดัชนีแบบ 0 เนื่องจากความง่ายในการใช้งาน (FORTRAN ค่อนข้างหักล้างสิ่งนี้) cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.htmlให้เหตุผลบางอย่างซึ่งอาจต้องการการทำดัชนีแบบ 0 แต่ทราบว่าตัวเลือกนั้นค่อนข้างมีเหตุผล
jk

2
FORTRAN มีการจัดทำดัชนีแบบ 1 PASCAL อนุญาตการสร้างดัชนีตามอำเภอใจ: คุณสามารถประกาศอาร์เรย์ที่มีดัชนีอยู่ในช่วงเช่น -42 ถึง +57 (ดูen.wikipedia.org/wiki/…สำหรับตัวอย่างที่มีประโยชน์)
John R. Strohm

1
@Gangnus ฉันคิดว่ามันเป็นความผิดพลาดในการเปรียบเทียบภาษาสมัยใหม่กับ C และคิดว่ามันยากที่จะอ่านโดยเจตนา มันถูกออกแบบมาให้เป็นทางเลือกระดับสูงเพื่อภาษาระดับล่าง
Robbie Dee

1
FORTH เป็นภาษาที่ใช้สแต็ก คิดว่าเครื่องคิดเลขของ HP มันกะทัดรัดและรวดเร็วมาก แต่ก็ยากที่จะเขียนโค้ดที่ไม่สามารถยอมรับได้ ใน FORTH คุณไม่ค่อยใช้ตัวแปร แต่จะผลักสิ่งต่าง ๆ ลงบนสแต็กและใช้ตัวดำเนินการที่ทำหน้าที่สแต็ก
Gort the Robot

16

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

แสดงความคิดเห็นในหลายวิธีหลายวิธีในภาษาต่าง ๆ ; มีไม่มีวิธีมาตรฐานในทุกภาษาเลือกสัญลักษณ์หรือเดี่ยวที่ไม่ได้ดำเนินการแล้ว

การกำหนดยังเป็นแนวคิดที่แปลกและไม่สามารถเข้าใจยกเว้นสำหรับโปรแกรมเมอร์ ; คนส่วนใหญ่ไม่สนใจว่ามันจะ=หรือ:=หรือ<-พวกเขาพยายามเข้าใจความหมาย (และสำหรับพวกเขามันจริง ๆ แล้วไม่ควรใช้=เพราะสิ่งนี้เน้นว่าการมอบหมายนั้นไม่เท่าเทียมกัน - อุปสรรคที่พบบ่อยที่สุดสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ เข้าใจรหัส)

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


4
ฉันไม่เห็นด้วยว่าการสร้างดัชนีจาก 1 นั้นไม่แปลก 0 การจัดทำดัชนีเป็นอย่างน้อยทั่วไปเช่นเดียวกับการจัดทำดัชนี 1 ในคณิตศาสตร์และเห็นได้ชัดว่ามันเป็นบรรทัดฐานในการเขียนโปรแกรมสำหรับปีก่อนการถือกำเนิดของ Matlab หรือ S / R
haroba

9
@ ถามว่าโอ้ใช่แล้วฉันเห็นทารกนับศูนย์แล้วหนึ่งสองสอง ... วิธีที่เป็นธรรมชาติที่สุดจริง ๆ
Gangnus

4
ทารกไม่ได้เขียนรหัส มีเหตุผลที่ดีที่จะใช้การทำดัชนีเป็นศูนย์ (ดู: Dijkstra) และเมื่อการทำดัชนีเป็นศูนย์เป็นเรื่องธรรมดาในวิชาคณิตศาสตร์ฉันไม่เห็นเหตุผลมากมายที่จะใช้การจัดทำดัชนี 1 รายการ
haroba

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

1
@phresnel การถอดความจากคำตอบ: การสร้างดัชนีจาก 1 เป็นเรื่องปกติ ยกเว้นโปรแกรมเมอร์เพราะพวกเขามีเงื่อนไขที่จะคาดหวังว่ามัน [ดัชนีจาก 0] จาก C
Robbie Dee

5

มีสามปัญหาคือ

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

ตอนนี้ถึงจุดเฉพาะของคุณ:

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

  • ใน R =สามารถใช้เป็นตัวดำเนินการกำหนดได้เช่นกัน โปรดทราบว่ามันต้องการตัวดำเนินการที่ได้รับมอบหมายจำนวนมาก<-และ<<-เพื่อจัดการกับแนวคิดของการกำหนดขอบเขต ( <<-กำหนดให้กับสัญลักษณ์ในขอบเขตภายนอกแทนที่จะสร้างสัญลักษณ์ใหม่ภายในฟังก์ชั่น) ลูกศรสามารถนำมาใช้ในทิศทางอื่น ๆ complex_calculation() -> xมากเกินไปอาจทำให้การทำความสะอาดรหัส:

  • การจัดทำดัชนีแบบ 1 เป็นมาตรฐานในวิชาคณิตศาสตร์ซึ่งเป็นสิ่งที่ผู้ใช้ Matlab และ R สะดวกสบายกว่า C. Julia ติดตาม Matlab เพื่อให้มีการเรียนรู้ที่ดีขึ้น

  • %สำหรับความคิดเห็นยังใช้ใน TeX / LaTeX นี่#เป็นเพียงการประชุมจากภาษาสคริปต์ยูนิกซ์และผู้สืบทอด

คุณไม่สนใจว่าภาษาการเขียนโปรแกรม "ของจริง" มีหลายส่วนที่แปลก ทำไม Scheme ไม่ใช้=? แทน:

(define foo 5)

เหตุใด C ใช้*สำหรับการอ้างอิงเมื่อเห็นได้ชัดว่าเครื่องหมายรูปหมวก^xเป็นเรื่องธรรมดาในประเพณีอื่น ๆ ?


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

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

Matlab รวบรวมฟังก์ชั่น / ไฟล์ตามเวลาที่ต้องการ มันไม่มีแนวคิดที่แท้จริงของโปรแกรมเพียงฟังก์ชั่นมากมาย หากฉันใช้งานฟังก์ชั่นที่ทำให้มีการเรียกร้องให้ foo () จากนั้นมันจะค้นหาพา ธ ของไฟล์ที่เรียกว่า foo.m รวบรวมและเรียกใช้ ไม่จำเป็นต้องบอก Matlab ล่วงหน้าว่าฉันตั้งใจจะใช้ชุดไฟล์ใด
Simon B

1

ฉันเดาว่ามันขึ้นอยู่กับการที่คุณใช้ภาษาอื่น ปิดส่วนหัวของฉัน:

  • C / C ++ มีไฟล์ต้นฉบับแยกต่างหาก (.c / .cpp & .h)
  • อักขระ -> ถูกใช้ใน C # สำหรับการแสดงออกแลมบ์ดา
  • VB รุ่นเก่าใช้ 1 เป็นดัชนีเริ่มต้น (แม้ว่าอาจมีการเปลี่ยนแปลงด้วยฐานตัวเลือก)

1
ใน C และ C ++ คุณสามารถกำหนดฟังก์ชั่นได้มากเท่าที่คุณต้องการในไฟล์เดียว
haroba

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

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

3
ความคิดเห็นใน HTML <!-- ... -->ลักษณะเช่น เครื่องหมายเปอร์เซ็นต์จะใช้สำหรับการเข้ารหัส URL: กลายเป็นhttp://example.com/() http://example.com/%28%29
amon

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