IDE ตัวสุดท้ายที่ผมได้ใช้งานอย่างจริงจังคือ Turbo Pascal สมัยเรียนมหาวิทยาลัยปีหนึ่ง และที่ใช้งานในยุคนั้นมีเหตุผลเดียวคือผมไม่รู้จักคอมไพล์เลอร์ว่ามันจะไปอยู่แยกจากเอดิตเตอร์ได้ยังไง (แล้วจะสั่งคอมไพล์ตรงไหน????)
ต่อมาเมื่อเข้าสู่โลกของ vim, gcc, และ make แล้ว ผมก็ไม่ได้กลับไปใช้ IDE ใดๆ อีกเลย ด้วยความที่คิดว่าพิมพ์มือเอาเร็วกว่าที่ต้องไปนั่งไล่เมนู
ทุกวันนี้ตัวช่วยในการเขียนโปรแกรมของผมจึงกลายเป็น jEdit ที่ต้องคอยเปิด header ต่างๆ เอาไว้เพื่อให้สามารถทำ autocomplete ได้
หลายคนที่เพิ่งเรียนเขียนโปรแกรมอาจจะไม่รู้ว่า โค้ดที่เราเขียนลงไปนั้น มักจะผ่านกระบวนการจากซอฟต์แวร์หลายต่อหลายตัว โดยทั่วไปเท่าที่นึกออกก็จะมี Pre-Processor, Compiler, Assembler, Linker, และ Loader
Pre-Processor นั้นถ้าใครเขียนภาษาซีก็เคยเจอคำสั่งที่อยู่หลังเครื่องหมาย # ทั้งหลาย เช่น define และ include คำสั่งเหล่านี้เป็นคำสั่งที่จะถูกประมวลผลโดยซอฟต์แวร์ตัวนี้ โดยมากแล้วมักเป็นการแทนที่ เช่นเอาตัวเลขไปแทนที่คำที่กำหนด หรือไม่ก็เอาโค้ดจากไฟล์หนึ่งไปวางไว้อีกไฟล์ (include)
Compiler หลายคนเข้าใจผิดว่าคอมไพล์เลอร์ให้ผลลัพธ์เป็นโปรแกรมที่รันได้เสมอ เช่น .exe ในวินโดวส์ แต่แท้จริงแล้วคอมไพล์เลอร์นั้นเป็นตัวแปลงจากภาษาที่เราใช้พัฒนาซอฟต์แวร์ มาเป็นภาษาสำหรับเครื่องซึ่งโดยทั่วไปแล้วก็เป็นภาษาแอสแซมบลี
Assembler ภาษาแอสแซมบลีนั้นอาจจะอ่านยากมาก แต่ที่จริงแล้วภาษาแอสแซมบลีนั้นเป็นภาษาระดับล่างสุดที่คนอาจจะอ่านเข้าใจได้ แต่เครื่องคอมพิวเตอร์ซึ่งเข้าใจแต่เลขฐานสองก็ยังไม่เข้าใจมันอยู่ดี ตัวแอสแซมเบลอนี้เองที่จะเข้ามาแปลงไฟล์เท็กที่เป็นภาษาแอสแซมบลีให้เป็นข้อมูลที่ซีพียูเข้าใจได้จริงๆ
Linker เวลาทำงานจริงซอฟต์แวร์จำนวนมากสามารถใช้ฟังก์ชั่นหลายๆ อย่างร่วมกันได้ อย่างเช่น printf ดังนั้นแล้วจึงเป็นเรื่องที่ดีที่จะแยกไฟล์เหล่านี้เอาไว้ต่างหาก ด้วยเหตุผลด้านพื้นที่ดิสก์ และเวลาที่มีการปรับปรุงในเรื่องของความปลอดภัยจะได้มีผลทีเดียวหลายๆ โปรแกรม ตัว Linker นี้จะรับอินพุตเป็นไฟล์จากแอสแซมเบลอ มีสองแบบคือแบบ static ที่ก่อนโปรแกรมจะทำงานได้ต้องทำการรวมไลบรารีเข้าไว้ในไฟล์ก่อน กับแบบ dynamic ที่เมื่อรันโปรแกรมแล้วจึงมีการเรียก dynamic-linker มาเชื่อมไลบราลีต่างๆ เข้าด้วยกันอีกที แบบหลังนี่หลายๆ คนน่าจะเคยเห็นไฟล์ dll ในวินโดวส์ นั่นหล่ะครับที่มันต้องเอามาเชื่อมกันตอนรัน
Loader เป็นโปรแกรมตัวสุดท้ายที่จะเอาโปรแกรมของเราไปวางไว้ในเมมโมรี ก่อนที่จะเริ่มป้อนโปรแกรมของเราเข้าซีพียู เราไม่ค่อยเห็นโปรแกรมตัวนี้เท่าใหร่เพราะว่ามันมักจะผูกกับระบบปฏิบัติการอย่างแนบแน่น
เมื่อวันก่อนผมนั่งอธิบายให้รุ่นน้องฟัง ว่าอะไรคือ IDE คะไรคือโค้ด อะไรคือตัวภาษาเขียนโปรแกรม อะไรคือไลบราลี่ อะไรคือคอมไพล์เลอร์ อะไรคือ editor ใช้เวลาครึ่งชั่วโมง ประสบความล้มเหลวโดยสิ้นเชิง (ส่วนหนึ่งคงเป็นเพราะเวลาน้อย และรุ่นน้องเป็นคนใจร้อน ผมอธิบายอะไรไม่จบสักอย่าง ก็โดนถามเสียแล้ว)
รุ่นน้องคนนี้เพิ่งหัดเขียนโปรแกรมได้ไม่กี่วัน เพื่อเตรียมตัวเรียนในมหาวิทยาลัย โดยใช้ C++ Builder แต่ตอนเรียนต้องเขียน C แบบคลาสสิค ทำให้ผมมองเห็นปัญหาที่จะเกิดขึ้น เลยพยายามอธิบาย ตอนอธิบายก็พอจะจับได้ว่า เขามอง C++ Builder เป็นโปรแกรมเมือน MS Word และโค้ดเป็นเหมือนเอกสารฉบับหนึ่ง การจะแก้เอกสาร หรือโค้ด ต้องใช้โปรแกรมเฉพาะของมัน ซึ่งมาเป็นก้อน ๆ พอจะอธิบายว่าไอ้ในก้อน ๆ นั้นมีอะไรบ้าง เลยยาก เพราะคนเข้าใจแบบนั้นไปแล้ว ต้องทำลายความเข้าใจเดิมก่อน
เรื่องนี้ต้องโทษหนังสือที่เขาอ่าน เพราะในหนังสือเริ่มต้นก็สอนใช้ C++ Builder เลย ไม่ได้บอกว่าอะไรเป็นอะไร บางทีการที่เด็กรุ่นใหม่หลาย ๆ คนรู้จักแต่ IDE ผมคิดว่าส่วนหนึ่งเป็นความผิดพลาดของผู้สอนด้วย ที่ตอนเริ่มเขียนโปรแกรมก็เปิด IDE เลย โดยที่ไม่อธฺบายเรื่องพื้นฐานเหล่านี้
เรื่องหนังสือ ผมมองตรงข้ามเลยนะครับ หนังสือควรพาผู้ใช้เข้าไปสู่ส่วนที่สนุกที่สุดก่อนที่จะย้อนกลับมาที่พื้นฐาน อันนี้เป็นมุมมองส่วนตัว ว่าการเรียนที่ดีน่าจะเป็น Top-Down มากกว่า Bottom-Up
ผมมองว่ามันถูกต้องแล้วที่หนังสือจะเร่งเข้าสู่ช่วงของการเขียนโปรแกรมให้เร็วๆ แต่ปัญหาคือมันต้องมีต่อจากนั้น
หนังสือไทยส่วนมากเอามาประมาณ 1 ใน 4 ของหนังสือต่างประเทศ คล้ายๆ หนังสือเน็ตเวิร์คที่ดึงกันมาแต่เรื่องของสายแลนกับคอนฟิก ไม่ลงว่าสรุปแล้วรูปร่างหน้าตาของ TCP/IP มันเป็นยังไง
ผมเห็นต่างจากคุณ lew นะครับ ผมว่าเราควรเรียนแบบ Bottom-Up ไปซะก่อน อย่างเช่นถ้าเรารู้ว่าไฟล์ .c มันเป็น source code ของภาษา C เมื่อเวลาจะหาtools มาใช้ ก็หาแค่ tools ที่เหมาะสมและสามารถพัฒนางานได้รวดเร็ว
แต่ถ้าเราเรียนแบบ Top-Down บางครั้งเราก็จะไม่รู้ว่า จริงๆแล้ว สิ่งที่เราเขียนมันคืออะไร ทำให้เกิดการยึดติดกับเครื่องมือเหมือนอย่างที่คุณ bow_der_kleine บอก
ในการทำงาน เราต้องเป็นคนเลือกเครื่องมือนะครับ ไม่ใช่ให้เครื่องมือมาเลือกเรา
สุดยอดของความสนุกคือการเขียนโปรแกรม ชอบเขียนโปรแกรมเหมือนกันครับ