วันอังคารที่ 31 พฤษภาคม พ.ศ. 2554

การได้มาซึ่ง คำว่า "Hacker"

การได้มาซึ่ง คำว่า "Hacker"

ถ้าพูดถึงhacker แล้วหลายคนล้วนแต่มีเจตนารมณ์ตรงกัน


ซึ่งผมจะมา นำเสนอบทความดีๆ ซึ่งอาจกระตุ้นไห้คุณอยากเป็น hacker ได้

และทำไห้ คุณได้รู้ถึงความพร้อมและทักษะต่างๆที่ต้องไช้ สำหรับ hacker


ผม คนนึงได้อ่านบทความนี้จึงได้ศึกษาค้นคว้าตำราต่าง ทั้งprogramming ทักษะการแก้ปัญหา ซึ่งจำเป็นต้องไช้ในการhack อย่างยิบทความเรื่อง "How to become a Hacker" ของ Eric Steven Raymond (ESR)


มาเริ่มกันที่ ESR

หากพูดถึงฟรีซอฟต์แวร์หลายคนคงนึกถึง ดร. ริชาร์ด สตอลแมน (RMS) ผู้เริ่มความคิดเรื่องซอฟต์แวร์เสรี แต่หากจะพูดถึงคำว่าโอเพ่นซอร์ส จะลืมบุรุษผู้นี้ไปไม่ได้ "อีริค สตีเว่น เรย์มอนด์" เขาเป็นหนึ่งในผู้ริเริ่มคอนเซปต์ฟรีซอฟต์แวร์เชิงพาณิชย์เมื่อปี 1998 โดยใช้ Debian Free Software Guideline เขียนโดย บรูซ พีเรนส์ (Bruce Perens) มาเป็นต้นแบบและนิยามมันในชื่อ "โอเพ่นซอร์ส" โดยพื้นฐานทั้งโอเพ่นซอร์ส และ ฟรีซอฟต์แวร์ มีจุดม่งหมายเหมือนกันมาก แต่ ESR เลือกใช้คำว่าโอเพ่นซอร์สซอฟต์แวร์ เพราะอยากให้คนเข้าใจความหมายได้ง่ายกว่าฟรีซอฟต์แวร์ซึ่งมักคิดกันไปว่าคือ "ซอฟต์แวร์แจกฟรี" มากกว่า "ซอฟต์แวร์เสรี"
อย่างไรก็ตาม สิ่งที่ทั้ง RMS และ ESR มีอยู่เหมือนๆ กันก็คือ ทั้งคู่เป็น "แฮ็กเกอร์" !



"กำเนิด แฮ็กเกอร์"

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

"แฮ็กเกอร์เป็นผู้สร้างสรรค์สิ่งต่างๆ ในขณะที่แครกเกอร์คือผู้ทำลาย" ..

คำว่าแฮ็กเกอร์เกิดขึ้นในปีไหน และใครเป็นคนเริ่มไม่มีประวัติแน่นอน แต่ตามที่เข้าใจกัน แฮ็กเกอร์เริ่มก่อตัวเป็นกลุ่มกันในช่วงทศวรรษที่ 1960-1970 โดยมีเอ็มไอทีเป็นศูนย์กลาง กิจกรรมของแฮ็กเกอร์มีตั้งแต่ เขียนซอฟต์แวร์แจก เขียนเรื่องตลก ทำแผนที่ช่องใต้หลังคาเป็นทางไปยังห้องต่างๆ งานดนตรีของศิลปินบางคนก็ถือเป็นการ "แฮ็ก" มากกว่าการแต่งเพลง ว่ากันว่า โยฮัน เซบาสเตียน บาค (Johann Sebastian Bach) นักแต่งเพลงชื่อดัง เป็นคนแรกๆ ที่ "แฮ็ก" โน๊ตดนตรี ตลอดชีวิตบาคประพันธ์เพลงคลาสสิคกว่า 1000 เพลง และมีบางเพลงของบาคสามารถเล่นจากโน๊ตตัวสุดท้ายของย้อนกลับมาตัวแรกได้ ไพเราะไม่แพ้การเล่นแบบปกติ (ไม่รู้ว่าตั้งใจทำอย่างนั้นเปล่า ? คนฟังอาจหูเพี้ยนไปเองก็ได้ Razz) ที่ยกตัวอย่างนี้ขึ้นมาก็เพื่อแสดงให้เห็นว่าแฮ็กเกอร์ไม่ได้มีเฉพาะในโลก คอมพิวเตอร์ และไม่จำเป็นต้องเกี่ยวกับระบบความปลอดภัย หรือเครือข่ายเลย .. อย่างไรก็ตามที่คนมักเข้าใจว่าแฮ็กเกอร์ต้องเป็นเซียนยูนิกซ์ เชี่ยวเรื่องเครือข่ายก็เพราะในสมัยทศวรรษ 1980 นักข่าวเริ่มได้ยินคำนี้หนาหูจากกิจกรรมการแฮกระบบความปลอดภัยของ คอมพิวเตอร์ในเอ็มไอที ก็เลยกลายเป็นว่าแฮ็กเกอร์ในสายตาสื่อคือบรรดาวัยรุ่นที่ชอบเจาะระบบความ ปลอดภัย และนั่นคือนิยามเดียวที่สื่อมอบให้กับคนทั้งโลก ทั้งที่แฮ็กเกอร์ และการแฮ็ก มีอะไรมากกว่านั้น



"อยากจะเป็นแฮ็กเกอร์ ?"

การ จะเป็นแฮ็กเกอร์จะว่าง่ายก็ง่ายจะว่ายากก็ยาก ขึ้นอยู่กับทัศนคติและนิสัยของคนๆ นั้น หลายคนเป็นแฮ็กเกอร์โดยธรรมชาติ เช่น ริชาร์ด สตอลแมน (FSF), อีริค เรย์มอนด์ (OSI), ลินุส ทอร์วาลด์ (Linux Kernel), ลาร์รี่ วอลล์ (Perl), พอล วิกซี่ (Bind/ISC) ในขณะที่หลายคนต้องฝึกฝนจนกว่าจะได้รับการยอมรับกลุ่มคนในวัฒนธรรมของแฮ็ก เกอร์ แฮ็กเกอร์เชื่อในเสรีภาพเรื่องการช่วยเหลือซึ่งกันและกัน ซึ่งเป็นเหตุผลว่าทำไมฟรีซอฟต์แวร์และโอเพ่นซอร์สถึงเกิดขึ้นมาได้ หากจะเป็นแฮ็กเกอร์ได้ก็ต้องมีทัศนคติในแบบเดียวกัน และต้องพิสูจน์ตัวเองให้ได้ว่ามีทัศนคติแบบนั้นจริงๆ .. ฟังๆ ดูเหมือนจะเป็นวัฒนธรรมในแบบฉบับของตัวเอง บางคนแซวว่าเป็นลัทธิ หรือเป็นศาสนาไปเลยก็มี ในส่วนนี้เราจะว่ากันด้วยเรื่องของทัศนคติกันก่อน .. ESR เขียนเอาไว้ว่า ..

1. โลกเต็มไปด้วยปัญหาที่น่าสนใจรอการแก้ไข
การเป็นแฮ็กเกอร์เป็นเรื่อง สนุก แต่เป็นความสนุกที่ต้องทุ่มเทสุดๆ เหมือนกัน การจะทุ่มเทสุดๆ ได้ก็ต้องมีแรงจูงใจ มีแรงบันดาลใจ เช่นเดียวกับนักกีฬาที่ต้องการพาตัวเองไปข้ามขีดจำกัดทางกายภาพ แฮ็กเกอร์จะสนุกและตื่นเต้นกับการแก้ปัญหาเพื่อฝึกฝนทักษะและสติปัญญาของตัว เอง เพื่อขยายขีดจำกัดทางสติปัญญาให้กว้างขึ้น .. เรื่องนี้ไม่เกี่ยวอะไรกับเงินทอง หรือชื่อเสียง ไม่มีแฮ็กเกอร์คนไหนทำเพื่อสิ่งเหล่านี้ แต่ก็ไม่ใช่ว่าแฮ็กเกอร์จะต้องเป็นพวกไส้แห้ง ผมว่าคล้ายกับนักเขียนนะ พวกไส้แห้งก็มี พวกที่ได้ทั้งกล่องได้ทั้งเงินทองก็มี และนักเขียนที่ประสบความสำเร็จ ก็เพราะเขามีความสามารถ มีความคิดสร้างสรรค์ และใช้มันอย่างสุดขีด .. จะต่างกันก็ตรงนักเขียนเป็นอาชีพที่สูงส่ง (ในต่างประเทศ) ในขณะที่คนมักติดว่าแฮ็กเกอร์เป็นพวกใต้ดิน ..
2. ปัญหาไม่ควรได้รับการแก้ไขซ้ำสอง
ความคิดสร้างสรรค์เป็นสิ่งมีค่าและมี จำกัด จึงไม่ควรเสียเปล่าไปกับปัญหาที่ได้รับการแก้ไขไปแล้ว การจะเป็นแฮ็กเกอร์ก็ต้องเชื่อมั่นในสติปัญญาและความทุ่มเทต่องานของ แฮ็กเกอร์คนอื่นๆ ด้วย ดังนั้นจึงไม่มีความจำเป็นใดๆ ที่จะต้องทำงานซ้ำซ้อน หากจะทำก็ควรเป็นการพัฒนาให้ดีขึ้น
3. ความเบื่อหน่าย งานซ้ำซาก เป็นสิ่งชั่วร้าย
แฮ็กเกอร์ไม่ควรเบื่อหน่ายกับการทำงานซ้ำๆ ซากๆ หรือไร้สาระ เพราะถ้ามันเกิดขึ้น แสดงว่าปัญหายังไม่ได้รับการแก้ไข และถ้ายังไม่แก้ ทุกคนก็ต้องทำงานซ้ำๆ ซากๆ อยู่อย่างเดิม งานน่าเบื่อซ้ำซากจึงเป็นโอกาสที่จะได้แก้ปัญหา ทำให้มันอัตโนมัติให้มากที่สุดเท่าที่จะเป็นไปได้ หากทำได้ ผลงานที่ออกมาก็จะเป็นประโยชน์กับคนอื่นๆ ด้วย
4. เสรีภาพคือสิ่งที่ดี
โดย ธรรมชาติ แฮ็กเกอร์เป็นพวกต่อต้านผู้มีอิทธิพล หากใครสามารถสั่งให้เราทำหรือหยุดทำอะไรบางอย่างได้ ก็หมายความว่ากรอบความคิดเราถูกจำกัดไว้ แต่ไม่ได้หมายความว่าแฮ็กเกอร์เป็นพวกต่อต้านอำนาจทุกประเภทและทำ ทุกอย่างอย่างเสรี แฮ็กเกอร์ยินดีจะอยู่ในกรอบวัฒนธรรมและสังคม ตราบใดที่มันไม่ส่งผลต่ออิสระทางความคิดสร้างสรรค์
5. ทัศนคติอย่างเดียวไม่พอ
อย่างที่บอกตอนแรกว่าจะเป็นแฮ็กเกอร์ ต้องมีทัศนคติแบบแฮ็กเกอร์ แต่เพียงทัศนคติไม่ได้ทำให้เป็นแฮ็กเกอร์ได้ แฮ็กเกอร์ ต้องมีสติปัญญาที่ดี มีการฝึกฝน ทุ่มเท และทำงานเต็มที่ แฮ็กเกอร์ชื่นชมความสามารถ การมีความสามารถในสิ่งที่น้อยคนมีถือเป็นเรื่องดี แต่ความสามารถทางด้านจิตใจ สมาธิ ฝีมือเชิงช่าง ถือเป็นเรื่องสุดยอด



?ทักษะ พื้นฐานของแฮ็กเกอร์"

จะเป็นแฮ็กเกอร์ต้องมีทั้งทัศนคติและฝีมือ และจะต้องฝึกฝน เรียนรู้สิ่งใหม่ๆ อยู่ตลอดเวลา เพราะเทคโนโลยีเปลี่ยนเร็ว เครื่องไม้เครื่องมือก็เปลี่ยนไปด้วย ผมว่าหลายคนมีพื้นฐานประมาณนึงแล้ว จึงไม่ใช่เรื่องยากนักที่จะพัฒนาทักษะเพื่อเป็นแฮ็กเกอร์

# เรียนรู้การเขียนโปรแกรม

การเขียนโปรแกรมเป็นรากฐานของการแฮ็ก ถ้ายังไม่เคยรู้ภาษาไหนมาก่อนเลย ESR แนะนำให้หัดภาษา Python เพราะออกแบบมาอย่างเรียบง่าย ประสิทธิภาพสูง เอกสารคู่มือที่มีอยู่ก็มีคุณภาพดี และค่อนข้างเหมาะกับมือใหม่ Java ก็ถือว่าน่าสนใจ อาจจะเรียนรู้ได้ยากกว่า Python แต่ก็ทำงานได้เร็วกว่า และใช้งานได้กว้างกว่า

ถ้าจะเขียนโปรแกรมเป็นเรื่องเป็นราว ก็ยังจำเป็นต้องใช้ C อยู่เหมือนเดิม.. อย่างไรก็ตาม C จะแสดงความสามารถของมันออกมาเมื่อได้ใช้การจัดการระดับต่ำ เช่นเรื่องของหน่วยความจำ I/O ซึ่งมีความซับซ้อน และเกิดบักได้ง่าย การใช้ C จึงต้องแม่นประมาณนึง .. ข้างล่างนี้เป็นตัวอย่าง code C ที่เขียนกันแบบสุดขีดเลย ใครคิดว่างตัวเองเก่ง C ลองอ่าน แล้วลองบอกว่ามันทำอะไรและหาผลลัพธ์ได้ยังไง ? ลองเขียนให้มันสั้นกว่านี้ เร็วกว่านี้ ถ้าทำได้นั่นล่ะคือ "การแฮ็ก"

CODE:
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f*a,f=d%--g,d/=g--,--b; d*=;}ภาษาอื่นๆ ที่น่าสนใจคือ Perl และ LISP ... ภาษา Perl เหมาะจะใช้ในทางปฏิบัติเพราะเขียนได้สั้น พัฒนาได้เร็ว (source code โปรแกรม descramble DVD เขียนด้วย Perl ยาวแค่ 4xx bytes) แม้ Python จะมาแทนที่ Perl ได้ในบางเรื่อง แต่อย่างน้อยก็ควรจะอ่านภาษา Perl รู้เรื่อง ภาษา LISP มีความน่าสนใจด้วยเหตุผลที่ต่างออกไป LISP เป็น functional programming language จึงมีแนวคิดในการเขียนโปรแกรมที่ต่างจากภาษาที่กล่าวมาก่อนหน้านี้ทั้งหมด เรื่องนี้อธิบายยาว และเข้าใจได้ยากสำหรับคนที่ชินกับ procedural programming language .. อย่างไรก็ตามหากเขียน LISP หรือ functional programming language อื่นๆ เป็น ก็จะเข้าใจแก่นของคำว่า "โปรแกรม" ได้ดีขึ้น เข้าใจการทำงานของมันบนเครื่องจักรคำนวณ เขียนโปรแกรมได้มีระเบียบ ตรงกับปัญหาที่ต้องการแก้ไขมากขึ้น

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

# ใช้โอเพ่นซอร์สยูนิกซ์

เช่นลีนุกซ์ หรือ *บีเอสดี เหตุผลคือ เข้าถึงซอร์สโค้ดได้ง่าย จะดู หรือแก้ไขก็เป็นไปได้ และยูนิกซ์เป็นระบบปฏิบัติการสำหรับอินเทอร์เน็ต จริงอยู่ว่าเราใช้โอเอสอื่นได้หากเราต้องการใช้อินเทอร์เน็ต แต่เป็นไปไม่ได้เลยที่จะเป็นอินเทอร์เน็ตแฮ็กเกอร์โดยไม่รู้ยูนิกซ์ ข้อดีของโอเพ่นซอร์สอีกอย่างคือมีเครื่องมือพัฒนาซอฟต์แวร์ประสิทธิภาพสูง ให้ใช้ (ทั้ง C, Python, Perl, LISP)

# หัดใช้เว็บ และเขียน HTML

อัน นี้คงไม่ใช่เรื่องยากเท่าไหร่ แต่อยากจะเน้นในเรื่องการ "ใช้" เว็บ .. เป็นเรื่องแปลกที่ทุกวันนี้คนจำนวนมากใช้คำว่า "เล่นเน็ต" หรือ "เล่นเว็บ" มากกว่าจะเป็นคำว่า "ใช้" ผมว่ามันแสดงให้เห็นวัฒนธรรมอะไรบางอย่างในบ้านเรา (หรือแม้แต่ในภาควิชาฯ) .. ถ้ายังเล่นอยู่ ผมว่าได้เวลาหัดใช้ให้เป็นแล้วนะครับ คุณหาข้อมูลที่ต้องการจากเว็บได้หรือเปล่า ใช้ search engine แล้วเจอเว็บที่ต้องการหรือไม่ เขียนเว็บเพจที่ดีเป็นหรือยัง ?

# ภาษาอังกฤษ

เหอะๆๆ .. เป็นเรื่องที่ช่วยไม่ได้ ถ้าจะเป็นแฮ็กเกอร์ ภาษาอังกฤษควรจะแข็งแรงประมาณนึง อย่าลืมว่าคุณต้องสื่อสารกับคนทั่วโลก เอกสารส่วนใหญ่ก็เป็นภาษาอังกฤษ เอกสารที่คุณจะเผยแพร่ก็ควรจะมีทั้งภาษาหลักและภาษาอังกฤษ .. เรียนซะเถอะครับ



"วัฒนธรรมของแฮ็กเกอร์"

วัฒนธรรมแฮ กเกอร์ไม่ได้ดำเนินไปด้วยเศรษฐกิจที่พึ่งพาเงินตรา แต่ดำเนินไปด้วยการยอมรับนับถือในฝีมือและความสามารถ การจะได้ชื่อว่าเป็นแฮ็กเกอร์จริงๆ จึงต้องพิสูจน์ตัวเองให้ได้ว่ามีความสามารถมากพอจนเป็นที่ยอมรับของ แฮ็กเกอร์คนอื่นๆ สังคมของแฮ็กเกอร์เป็นสังคมในรูปแบบ gift culture ฐานะทางสังคมจึงไม่ได้เกิดจาก ความร่ำรวย หล่อ สวย เก่ง หรือมีในสิ่งที่คนอื่นไม่มี แต่ได้มาด้วยการ "ให้" ดังนั้นการจะได้รับการยอมรับจึงเริ่มต้นที่การให้เป็นหลัก เช่น

1. เขียนซอฟต์แวร์โอเพ่นซอร์ส ถือเป็นงานหลักของแฮ็กเกอร์เลยก็ว่าได้ เขียนเสร็จแล้วจะเผยแพร่ด้วยสัญญาอนุญาตแบบไหนก็ค่อยว่ากันอีกที ถ้าไม่มีวัตถุประสงค์อื่นๆ แล้วแฮ็กเกอร์ส่วนใหญ่จะใช้ GNU/GPL เป็นหลัก
2. ช่วยทดสอบ หรือดีบักซอฟต์แวร์โอเพ่นซอร์ส เป็นการสละเวลา ซึ่งบางครั้งนานกว่าเขียน code เสียอีก บรรดานักทดสอบเก่งๆ จึงได้รับการยกย่องและได้เครดิตเสมอ
3. เขียน แต่ง เผยแพร่เอกสารที่มีประโยชน์ต่อสังคม เช่น How To, FAQs
4. ช่วยเหลือกิจการโครงสร้างพื้นฐานหลักๆ กิจการหลายๆ อย่างของอินเทอร์เน็ต ดำเนินไปด้วยการอาสาสมัคร เช่น การพัฒนามาตรฐานสำหรับอินเทอ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น