... ฉันจะพัฒนาทักษะการเขียนโปรแกรมที่สามารถนำไปใช้กับทุกภาษาแทนที่จะใช้เพียงภาษาเดียวได้อย่างไร
กุญแจสำคัญในคำถามนี้คือการก้าวข้ามภาษาและคิดว่าไม่ใช่ภาษาที่คุณกำลังเข้ารหัส
วัด?
โปรแกรมเมอร์ที่มีประสบการณ์หลายคนคิดว่าต้นไม้ในรูปแบบนามธรรม (AST) ของรูปแบบจิตของพวกเขาเองของภาษา ไม่มีใครคิดว่า "ฉันต้องการวงวนที่นี่" แต่ "ฉันต้องวนรอบบางสิ่งบางอย่าง" และแปลเป็นภาษาที่เหมาะสมสำหรับหรือในขณะนั้นหรือตัววนซ้ำหรือเรียกซ้ำสำหรับภาษานั้น
สิ่งนี้คล้ายกับสิ่งที่เราเห็นในการเรียนรู้ภาษาพูด คนที่พูดหลายภาษาได้อย่างคล่องแคล่วคิดความหมายและมันออกมาในภาษาที่กำหนด
หนึ่งสามารถเห็นเบาะแสของ AST นี้ในคู่ของวิดีโอ eyetracking ความเข้าใจเกี่ยวกับรหัสด้วยการติดตามตาและการทดลองการติดตามรหัสตา (สามเณร)ที่การเคลื่อนไหวของสายตาของผู้เริ่มต้นและโปรแกรมเมอร์ที่มีประสบการณ์จะดู หนึ่งสามารถเห็นโปรแกรมเมอร์ที่มีประสบการณ์ 'รวบรวม' รหัสในรูปแบบจิตของพวกเขาและ 'เรียกใช้' ในหัวของพวกเขาในขณะที่ผู้เริ่มต้นจะต้องย้ำรหัสคำหลักโดยคำหลัก
ดังนั้นกุญแจสำคัญในคำถามของการพัฒนาทักษะการเขียนโปรแกรมเพื่อนำไปใช้กับทุกภาษาคือการเรียนรู้หลายภาษาเพื่อที่ว่าเราสามารถแยกตัวเองจากแบบจำลองทางจิตของภาษาหนึ่งและพัฒนาความสามารถในการสร้าง AST สำหรับปัญหาด้วยตนเอง ภาษาหัวที่แปลแล้วเป็นภาษาที่กำหนด
เมื่อมีความสามารถในการใช้ AST นี้ในหัวการเรียนรู้ภาษาอื่นภายในโรงเรียนแห่งความคิดที่คล้ายกัน (การไปBefungeเป็นการกระโดดจาก Java แต่ไม่มากจากForth ) กลายเป็นเรื่องง่าย - มัน 'แค่' แปล AST เป็นภาษาใหม่ซึ่งง่ายกว่าในเวลาที่ 3, 4 และ 5 (ฯลฯ ... )
มีบทความคลาสสิกเป็นโปรแกรมเมอร์จริงไม่ใช้ปาสกาล ส่วนหนึ่งของการอ่านนี้:
... Real Programmer ที่ตั้งใจสามารถเขียนโปรแกรม Fortran ในภาษาใดก็ได้
นอกจากนี้ยังมีบิตที่คุณไม่สามารถใช้จิต AST - คุณต้องคิดในภาษาด้วย ใช้เวลาสักครู่จึงจะสำเร็จ (ฉันยังถูกกล่าวหาว่าเขียนโค้ดPerlใน Python และรหัสLISPแรกของฉันได้รับการตรวจสอบว่า "นี่เป็นโปรแกรม C ที่ดีมาก")
ในการนี้ผมต้องชี้ให้เห็นในบทความที่ตีพิมพ์โดยพลอากาศเอกไม่ว่าจะเขียน Fortran ในภาษาใด ย่อหน้าที่สามของบทความ (ที่ไม่ได้เป็นคำพูดนำ) ตรงคำถามที่อยู่:
มีลักษณะของการเขียนโปรแกรมที่ดีที่อยู่เหนือทุกภาษาการเขียนโปรแกรมวัตถุประสงค์ทั่วไป คุณสามารถใช้การออกแบบที่ดีและมีสไตล์โปร่งใสในเกือบทุกรหัสถ้าคุณใช้กับมัน เพียงเพราะภาษาการเขียนโปรแกรมช่วยให้คุณสามารถเขียนรหัสที่ไม่ดีไม่ได้หมายความว่าคุณต้องทำมัน และภาษาการเขียนโปรแกรมที่ได้รับการออกแบบมาเพื่อส่งเสริมสไตล์ที่ดีและการออกแบบยังสามารถใช้ในการเขียนโค้ดที่แย่ได้หาก coder นั้นมีความคิดสร้างสรรค์เพียงพอ คุณสามารถจมลงในอ่างอาบน้ำที่มีน้ำหนึ่งนิ้วและคุณสามารถเขียนโปรแกรมที่ไม่สามารถอ่านได้และไม่สามารถทำความสะอาดได้อย่างสมบูรณ์ในภาษาที่ไม่มี gotos หรือหมายเลขบรรทัดยกเว้นการจัดการและประเภททั่วไปและการเก็บขยะ ไม่ว่าคุณจะเขียน Fortran หรือ Java, C ++ หรือ Smalltalk คุณสามารถ (และควร) เลือกที่จะเขียนรหัสที่ดีแทนรหัสที่ไม่ดี
มันไม่เพียงพอที่จะมี AST - จำเป็นต้องมี AST เพื่อให้สามารถแปลเป็นภาษาอื่นได้ การมี Fortran AST ในหัวของคุณและการเขียนรหัส Fortran ใน Java นั้นไม่ใช่เรื่องดี เราต้องมีความคุ้นเคยกับภาษาและสำนวนต่าง ๆ เพื่อที่จะสามารถคิดในภาษานั้นได้
ฉันเคยเห็นโค้ด Java เขียนโดยคนที่ไม่ได้หยุดเขียนโค้ด C มีหนึ่งวัตถุที่มีวิธีการหลักคือ ในวัตถุนี้มีพวงของวิธีการคงที่เรียกโดยmain
และชั้นในส่วนตัวที่มีเขตข้อมูลสาธารณะ (และดูเหมือนมากเหมือนเสา) มันเป็นรหัส C ที่เขียนใน Java สิ่งที่ทำเสร็จแล้วคือการแปลไวยากรณ์ของภาษาหนึ่งเป็นอีกภาษาหนึ่ง
เพื่อให้ผ่านจุดนี้ไปเราต้องเขียนโค้ดในหลายภาษาต่อไปไม่ใช่คิดในภาษาเหล่านั้นเมื่อออกแบบรหัส แต่คิดในพวกเขาเมื่อแปลการออกแบบเป็นรหัสเพื่อทำงานกับสำนวนภาษาอย่างถูกต้อง
วิธีเดียวที่จะไปถึงที่นั่น - ความสามารถในการพัฒนาทักษะการเขียนโปรแกรมที่สามารถนำไปใช้กับทุกภาษา - คือการเรียนรู้ภาษาอย่างต่อเนื่องและทำให้ภาษาการเขียนโปรแกรมทางจิตนั้นมีความยืดหยุ่นมากกว่าที่จะเชื่อมโยงกับหนึ่งภาษา
(ฉันขอโทษ ChaosPandion สำหรับการขอยืมอย่างหนักจากความคิดที่เขานำเสนอ )