moonlightkzหนึ่งในงานที่น่าเบื่อที่สุดเวลาที่ทำงานเกี่ยวกับเอกสาร คงหนีไม่พ้นการพิมพ์ และจัดรูปแบบเอกสารกลาย ต้องเคยรู้สึกกันบ้างแหละ ? ที่หงุดหงิดกับการเสียเวลาลาก เมาส์ (Mouse) ไปคลิกปุ่มตัวหนา, ตัวเอียง หรือคอยจัดหัวข้อบนหน้าจอ จนทำให้ไอเดียที่กำลังแล่นอยู่ต้องสะดุดลง ปัญหานี้แก้ไขได้ง่าย ๆ ด้วยการใช้ "Markdown" ภาษาเขียนโค้ดฉบับมินิมอลที่เปลี่ยนหน้ากระดาษพิมพ์งานธรรมดาให้กลายเป็นเอกสารที่สวยงามได้โดยที่คุณไม่ต้องยกมือออกจากคีย์บอร์ดเลยแม้แต่ครั้งเดียว
ที่น่าทึ่งไปกว่านั้น Markdown ไม่ได้อยู่แค่ในโปรแกรมพิมพ์งานอีกต่อไป แต่ในปัจจุบัน มันได้กลายเป็น "ภาษาเบื้องหลัง" ที่ทรงอิทธิพลในโลกของ ปัญญาประดิษฐ์ (AI) ไม่ว่าจะเป็นการสั่งงานระบบ AI Skill, การเขียน Prompt หรือแม้แต่โครงสร้างที่ AI ใช้โต้ตอบกับเรา
หากคุณอยากรู้ว่าเจ้าภาษา Markdown นี้คืออะไร ? ทำไมคนทำงานยุคใหม่ ตั้งแต่นักเขียน, บล็อกเกอร์, โปรแกรมเมอร์ ไปจนถึงผู้พัฒนา AI ถึงได้ตกหลุมรักมัน มาหาคำตอบได้ในบทความนี้เลย ...
Markdown เป็นภาษา Markup (ภาษาสำหรับจัดรูปแบบข้อความ) ที่มีน้ำหนักเบา ซึ่งผู้ใช้สามารถใช้มันเพื่อเพิ่มองค์ประกอบในการจัดรูปแบบลงในเอกสารข้อความธรรมดาได้อย่างรวดเร็ว โดยภาษา Markdown ถูกสร้างขึ้นตั้งแต่ปี ค.ศ. 2004 (พ.ศ. 2547) และในปัจจุบันได้กลายเป็นหนึ่งในภาษา Markup ที่ได้รับความนิยมมากที่สุดในโลก
การใช้งาน Markdown นั้นแตกต่างจากการใช้โปรแกรมแก้ไขข้อความประเภท WYSIWYG (What You See Is What You Get - สิ่งที่เห็นคือสิ่งที่จะได้) อย่างเช่น โปรแกรม Word ผู้ใช้จะใช้วิธีคลิกปุ่มเพื่อจัดรูปแบบคำ และวลีต่าง ๆ และการเปลี่ยนแปลงเหล่านั้นจะปรากฏให้เห็นในทันที แต่ Markdown ไม่ได้เป็นแบบนั้น เมื่อผู้ใช้สร้างไฟล์ที่จัดรูปแบบด้วย Markdown คุณจะต้องเพิ่มไวยากรณ์ (Syntax) ของ Markdown ลงในข้อความเพื่อระบุว่าคำ และวลีใดที่ควรจะดูแตกต่างออกไป
ตัวอย่างเช่น ในการระบุว่าเป็นหัวข้อ (Heading) คุณต้องเพิ่มเครื่องหมายสี่เหลี่ยม หรือเครื่องหมายแฮชไว้ข้างหน้า เช่น # Heading One หรือหากต้องการทำให้เป็นตัวหนา คุณต้องเพิ่มเครื่องหมายดอกจันสองตัวไว้ข้างหน้า และข้างหลังวลีนั้น เช่น ** this text is bold ** มันอาจต้องใช้เวลาเรียนรู้สักพักเพื่อให้เกิดความคุ้นเคยกับการมองเห็นไวยากรณ์ของ Markdown ในข้อความ

ตัวอย่างการใช้งาน Markdown ใน โปรแกรม Visual Studio Code
ภาพจาก : https://www.markdownguide.org/getting-started/
ผู้ใช้สามารถเพิ่มองค์ประกอบการจัดรูปแบบของ Markdown ลงในไฟล์ข้อความธรรมดาได้โดยใช้โปรแกรมแก้ไขข้อความทั่วไป หรือจะเลือกใช้โปรแกรมที่ถูกออกแบบมาโดยเฉพาะสำหรับการเขียนด้วย Markdown ที่มีอยู่มากมายก็ได้ เช่น โปรแกรม Markdown Edit, โปรแกรม MiaoYan ฯลฯ
หลายคนอาจจะสงสัยว่าทำไมมีคนจำนวนมากเลือกใช้ Markdown แทนที่จะเป็นโปรแกรมแก้ไขข้อความประเภท WYSIWYG ที่พิมพ์อย่างไรก็เห็นหน้าตาออกมาอย่างนั้น ? ซึ่งน่าจะใช้งานได้ง่ายกว่ามาก ทำไมต้องมานั่งเขียนด้วย Markdown ในเมื่อเราสามารถกดปุ่มบนหน้าต่างโปรแกรมเพื่อจัดรูปแบบข้อความได้ ? แต่ความจริงแล้ว มีเหตุผลหลายประการเลยทีเดียวที่ทำให้ผู้คนนิยมเลือกใช้ Markdown แทนโปรแกรมแก้ไขข้อความทั่วไป
เมื่อผู้ใช้เขียนด้วย Markdown ข้อความจะถูกจัดเก็บไว้ในไฟล์ข้อความธรรมดา (plaintext) ที่มีนามสกุล .md หรือ .markdown แต่ไฟล์ที่จัดรูปแบบด้วย Markdown จะถูกแปลงเป็น HTML หรือเอกสารที่พร้อมสั่งพิมพ์ได้อย่างไร ? เรามาเจาะลึกขั้นตอนการทำงานกันสักหน่อย
อันดับแรก เราต้องมีโปรแกรมที่สามารถประมวลผลไฟล์ Markdown ได้ ซึ่งปัจจุบันมีโปรแกรมให้เลือกใช้มากมาย ตั้งแต่สคริปต์ง่าย ๆ ไปจนถึงโปรแกรมบนเดสก์ท็อปที่มีหน้าตาเหมือน Microsoft Word ถึงแม้ว่ารูปลักษณ์ภายนอกจะแตกต่างกัน แต่โปรแกรมทั้งหมดล้วนทำงานแบบเดียวกัน โดยโปรแกรมเหล่านี้จะแปลงข้อความที่จัดรูปแบบด้วย Markdown ให้เป็น ภาษา HTML เพื่อให้สามารถแสดงผลบน เว็บเบราว์เซอร์ (Web Browser) ได้
โปรแกรม Markdown จะใช้สิ่งที่เรียกว่า "ตัวประมวลผล Markdown" (Markdown processor) หรือที่มักเรียกกันทั่วไปว่า "พาร์เซอร์" (Parser) หรือ "อิมพลีเมนเทชัน" (Implementation) ในการนำข้อความที่จัดรูปแบบด้วย Markdown นั้นมาแปลง และส่งออกเป็นรูปแบบ HTML เมื่อถึงขั้นตอนนี้ เอกสารของเราก็จะสามารถเปิดดูในเว็บเบราว์เซอร์ หรือนำไปรวมเข้ากับสไตล์ชีต (StyleSsheet) แล้วสั่งพิมพ์ออกมาได้
กระบวนการนี้ประกอบด้วย 4 ขั้นตอน ดังนี้

ภาพจาก : https://www.markdownguide.org/getting-started/
โปรแกรมที่รองรับ Markdown เกือบทั้งหมด จะรองรับไวยากรณ์พื้นฐานที่ระบุไว้ในเอกสารการออกแบบ Markdown ฉบับดั้งเดิม ทั้งนี้ อาจมีความแตกต่าง และความคลาดเคลื่อนเล็ก ๆ น้อย ๆ ระหว่างตัวประมวลผล Markdown แต่ละตัว ตัวอย่างไวยากรณ์พื้นฐานก็อย่างเช่น
การสร้างหัวข้อ (Heading) ให้เติมเครื่องหมายแฮช หรือสี่เหลี่ยม (#) ไว้ข้างหน้าคำ หรือวลี โดยจำนวนของเครื่องหมาย # ที่ใช้ จะสอดคล้องกับระดับของหัวข้อนั้น ๆ ตัวอย่างเช่น ถ้าต้องการสร้างหัวข้อระดับ 3 ให้ใช้เครื่องหมาย # สามตัว (เช่น ### หัวข้อของฉัน)
| Markdown | HTML |
|---|---|
| # Heading level 1 | Heading level 1 |
| ## Heading level 2 | Heading level 2 |
| ### Heading level 3 | Heading level 3 |
| #### Heading level 4 | Heading level 4 |
| ##### Heading level 5 | Heading level 5 |
| ###### Heading level 6 | Heading level 6 |
การสร้างย่อหน้าใหม่ ให้ใช้การเว้นบรรทัดว่าง 1 บรรทัด เพื่อแยกบรรทัดข้อความออกจากกัน
| Markdown | HTML |
|---|---|
| I really like using Markdown. | I really like using Markdown. I think I'll use it to format all of my documents from now on. |
การทำตัวหนา (Bold) ให้เพิ่มเครื่องหมายดอกจัน หรือเครื่องหมายขีดล่าง (Underscore) สองตัว ไว้ข้างหน้า และข้างหลังคำหรือวลี และหากต้องการเน้นตัวหนาเฉพาะตรงกลางคำ ให้เพิ่มเครื่องหมายดอกจันสองตัวติดกับตัวอักษรนั้น ๆ โดยไม่ต้องเว้นวรรค
| Markdown | HTML |
|---|---|
| I just love **bold text**. | I just love bold text. |
| I just love __bold text__. | I just love bold text. |
| Love**is**bold | Loveisbold |
การทำตัวเอียง (Italic) ให้เพิ่มเครื่องหมายดอกจัน หรือเครื่องหมายขีดล่าง (Underscore) หนึ่งตัว ไว้ข้างหน้า และข้างหลังคำหรือวลี และหากต้องการเน้นตัวเอียงเฉพาะตรงกลางคำ ให้เพิ่มเครื่องหมายดอกจันหนึ่งตัวติดกับตัวอักษรนั้น ๆ โดยไม่ต้องเว้นวรรค
| Markdown | HTML |
|---|---|
| Italicized text is the *cat's meow*. | Italicized text is the cat's meow. |
| Italicized text is the _cat's meow_. | Italicized text is the cat's meow. |
| A*cat*meow | Acatmeow |
แม้ Markdown จะเป็นระบบภาษาที่มีความเรียบง่าย และตรงไปตรงมา แต่มันก็มีปัญหาที่สร้างความสับสนมากที่สุดในการใช้งาน Markdown คือ การที่โปรแกรม Markdown ต่างก็ปรับใช้ Markdown ในเวอร์ชันที่แตกต่างกันเล็กน้อย รูปแบบที่แตกต่างกันเหล่านี้ของ Markdown จะถูกเรียกว่า "Flavors" มันเป็นหน้าที่ของผู้ใช้ที่จะต้องมีความรู้ว่า Markdown ที่ใช้งาน รองรับ Flavors ตัวไหน ?
เผื่อใครงง ให้คิดว่า Flavors ก็เป็นเหมือนภาษาถิ่น ผู้คนในกรุงเทพก็พูดภาษาไทยเหมือนคนในอุดรธานี แต่มีความแตกต่างกันอย่างมากระหว่างภาษาถิ่นที่ใช้ในทั้งสองเมือง สิ่งเดียวกันนี้ก็เกิดขึ้นกับการใช้งาน Markdown เช่นกัน
ในทางปฏิบัติ สิ่งนี้หมายความว่าผู้ใช้จะไม่มีวันรู้ได้อย่างชัดเจนเลยว่า การที่โปรแกรมตัวหนึ่งบอกว่ารองรับ "Markdown" ผู้พัฒนากำลังพูดถึงการรองรับเฉพาะองค์ประกอบไวยากรณ์พื้นฐาน (Basic Syntax Elements) หรือองค์ประกอบไวยากรณ์พื้นฐาน และองค์ประกอบไวยากรณ์ส่วนขยาย (Extended Syntax Elements) ทั้งหมดรวมกัน หรือการผสมผสานองค์ประกอบไวยากรณ์ต่าง ๆ ตามใจชอบ ? ผู้ใช้จะไม่รู้เลยจนกว่าจะได้อ่านเอกสารคู่มือ หรือเริ่มใช้งานจริง
Markdown ได้รับแรงบันดาลใจมาจากรูปแบบการจัดข้อความธรรมดา (Plain Text) ที่นิยมใช้กันในอีเมล และระบบ Usenet ในอดีต รวมถึงอิทธิพลจากภาษาจัดรูปแบบยุคแรก ๆ อย่าง โปรแกรม setext ที่ได้รับความนิยมในปี ค.ศ. 1992 (พ.ศ. 2535), โปรแกรม Textile ปี ค.ศ. 2002 (พ.ศ. 2545) และโปรแกรม reStructuredText ปี ค.ศ. 2002 (พ.ศ. 2545)
ต่อมาในปี ค.ศ. 2002 (พ.ศ. 2545) Aaron Swartz ได้พัฒนา ระบบโครงสร้างข้อความแบบ "atx" ขึ้นมา โดยนิยามว่ามันคือ "รูปแบบข้อความที่มีโครงสร้างอย่างแท้จริง" จากนั้นในปี 2004 (พ.ศ. 2547) John Gruber จึงได้ร่วมมือกับ Swartz ซึ่งทำหน้าที่เป็นที่ปรึกษา และผู้ร่วมแลกเปลี่ยนไอเดีย เพื่อสร้างภาษา Markdown ขึ้นมา โดยมีเป้าหมายหลักคือ ช่วยให้ผู้คน "สามารถเขียนข้อความด้วยรูปแบบ Plain Text ที่อ่านง่าย และเขียนง่าย และยังแปลงไปเป็น XHTML (หรือ HTML) ที่มีโครงสร้างถูกต้องได้อย่างสมบูรณ์"
หัวใจสำคัญอีกประการในการออกแบบ Markdown คือ "ความง่ายในการอ่าน (Readability)" หมายความว่า ตัวเอกสารต้องสามารถอ่านเข้าใจได้ทันทีในตัวมันเอง โดยไม่ดูรกตาไปด้วยแท็ก หรือคำสั่งจัดรูปแบบต่าง ๆ ซึ่งต่างจากภาษาจัดรูปแบบที่ "รก" กว่าอย่าง RTF, HTML หรือแม้กระทั่ง wikitext ที่มักจะมีแท็กแทรกอยู่ตามข้อความจนทำให้มนุษย์อ่านเข้าใจได้ยากขึ้น
John Gruber ยังได้เขียนสคริปต์ด้วยภาษา Perl ขึ้นมาในชื่อ Markdown.pl ทำหน้าที่แปลงข้อความที่จัดรูปแบบด้วย Markdown ให้กลายเป็น XHTML หรือ HTML ที่ถูกต้อง โดยสคริปต์นี้จะช่วยแปลงเครื่องหมายอย่างวงเล็บเหลี่ยม (<, >) และ Ampersand (&) เพื่อไม่ให้ระบบเข้าใจผิดว่าเป็นโค้ดคำสั่ง ซึ่งมันสามารถนำไปใช้งานได้หลากหลาย ทั้งแบบสคริปต์เดี่ยว (Standalone Script), ปลั๊กอิน (Plug-in) สำหรับแพลตฟอร์ม Blosxom และ Movable Type หรือจะใช้เป็นตัวกรองข้อความ (Text Filter) สำหรับโปรแกรม BBEdit ก็ได้
เมื่อ Markdown ได้รับความนิยมอย่างก้าวกระโดด นักพัฒนาจำนวนมากจึงเริ่มสร้างระบบแปลงภาษา Markdown (Implementations) ของตัวเองขึ้นมา โดยมีแรงผลักดันหลักมาจากความต้องการฟีเจอร์เพิ่มเติมที่เวอร์ชันต้นตำรับไม่มี เช่น การสร้างตาราง, ฟุตโน้ต (เชิงอรรถ), รายการคำนิยาม (Definition Lists) รวมถึงการใส่โค้ด Markdown ไว้ภายในบล็อกคำสั่ง HTML
ส่งผลให้พฤติกรรมการทำงานของระบบเวอร์ชันใหม่ ๆ เริ่มแตกต่าง และแยกสายออกจากเวอร์ชันต้นแบบของ John Gruber เนื่องจากในตอนนั้น Markdown มีเพียงแค่ "ข้อกำหนดแบบไม่เป็นทางการ" และมีเพียงสคริปต์ Perl เท่านั้นที่ใช้เป็นมาตรฐานอ้างอิงในการแปลงไฟล์เป็น HTML
ในขณะเดียวกัน ความคลุมเครือหลายจุดในข้อกำหนดที่ไม่เป็นทางการนี้ก็เริ่มกลายเป็นประเด็น ปัญหานี้กระตุ้นให้เกิดการสร้างเครื่องมืออย่าง Babelmark ขึ้นมา เพื่อเปรียบเทียบผลลัพธ์ที่ได้จากระบบแปลงผลของค่ายต่าง ๆ และทำให้นักพัฒนาบางกลุ่มพยายามจะสร้าง "มาตรฐานกลาง" ร่วมกัน
อย่างไรก็ตาม John Gruber กลับมองว่าการทำมาตรฐานให้เหมือนกันหมด 100% อาจเป็นข้อผิดพลาด โดยเขาให้เหตุผลว่า "แต่ละเว็บไซต์ และแต่ละคน มีความต้องการที่แตกต่างกัน ไม่มีทางที่ไวยากรณ์รูปแบบเดียวจะทำให้ทุกคนพึงพอใจได้หรอก" นอกจากนี้ Gruber ยังจงใจหลีกเลี่ยงการใช้เครื่องหมายปีกกา { } ในภาษา Markdown เพื่อแอบเว้นว่างไว้ให้เหล่านักพัฒนานำไปใช้ต่อยอดเป็นฟีเจอร์เฉพาะตัวในระบบของตัวเองอย่างไม่เป็นทางการอีกด้วย
คำสำคัญ »
|
|
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ |