แชร์ประสบการณ์การ dev บน linux กว่า 1 ปี

หน้า desktop ของตัวเอง

สวัสดีเพื่อนๆ ทุกคน ช่วงหลังมานี้ผมไม่ค่อยได้เขียนบทความเท่าไหร่เลย ต้องขออภัยจริงๆ ครับ ด้วยความที่ติดงานด้วย ทำให้ไม่ค่อยมีเวลามาเขียนบล็อกสักเท่าไหร่ และช่วงนี้กำลังยกเครื่องเว็บ naijab ใหม่ทั้งหมด (จริงๆ ปรับปรุงบ่อยมาก 555+ ) โอเคมาเข้าเรื่องกันดีกว่า

Linux หนึ่งในโครงการ open source สุดยิ่งใหญ่ อาจจะคุ้นหูกันบ้างนะครับ ถ้าใครทำงานเกี่ยวกับ devops หรือ infra ก็น่าจะรู้จักกันเป็นอย่างดี ไม่ว่าจะ CentOS, Ubuntu, debian หรือตัวอื่นๆ ที่ผมไม่ได้กล่าวถึง ตัว linux เองก็ถือว่าได้รับความนิยมในการใช้บน server ต่างๆ (lamp stack, lemp stack เอย ต่างก็ใช้ linux ทั้งนั้น) ทั้งอยู่ใน devices ต่างๆ เช่น android เองก็เป็น linux distro ตัวนึง หรือพวกอุปกรณ์ embedded, IOT (Internet of Thing)

distro ก็ย่อมาจาก distribution นั้นละครับ — linux distro ก็คือกิ่งก้านสาขาต่างๆ ที่พัฒนาโดยใช้ linux เป็น kernel

เรามาดูภาพเล็กๆ กันสักหน่อยว่า Linux มี distro อะไรบ้าง (ตัดภาพมาบางส่วน เพราะด้วยขนาดมันใหญ่มากจริงๆ ภาพเต็มๆ ไปดูได้ที่นี่เลยครับ : ภาพจาก wiki

เมื่อเข้าไปดูภาพ พอคร่าวๆ แล้ว ก็จะเห็นได้ว่า linux มีการพัฒนาไปอย่างน่าทึ่ง (ในภาพข้างบน ยังไม่รวม custom distro ของบางเจ้าที่ไม่ได้เผยแพร่) และด้วยเหตุที่ linux มี distro เยอะมากๆ ทำให้หลายคนก็เลือกไม่ถูกว่าจะใช้ distro ตัวไหนดี

Linux distro ในปัจจุบัน ก็แบ่งเป็น 2 สายใหญ่ๆ ในการนำไปใช้งาน

  • กลุ่มผู้ใช้ทั่วไป (ฟรี): เช่น CentOS, Ubuntu, Debian
  • กลุ่มผู้ใช้ Enterprise (ไม่ฟรี + ค่า support): เช่น Red Hat Enterprise Linux, SUSE

ทั้งยังมีการนำไปใช้ในด้านอื่นๆ อย่าง วงการวิทยาศาสตร์, อุตสาหกรรม และด้านอื่นๆ อีกมากแล้วสำหรับผู้เขียนเองละ ? ใช้ตัวไหนอยู่ : ตอนนี้ผมใช้ Ubuntu ครับ ก็จะมีคำถามอีกว่า

แล้วทำไมต้องเป็น Ubuntu

เคยใช้ OS ตัวไหนบ้าง

ย้อนกลับไปเมื่อสมัยคราวเรียนชั้น ป.6 ด้วยความที่สมัยนั้นผมรู้จักแค่ windows xp, windows 7 ก็อยากจะรู้ว่าในโลกนี้มันมีแค่ windows หรือเปล่า ผมก็ลองค้นหาใน google ดูก็ทราบว่า มีหลายตัวเลยละ ไม่ว่าจะ Unix, macOS หรือ ตัวอื่นๆ

ภาพ ubuntu 11 จาก https://en.wikipedia.org/wiki/File:Ubuntu-11-04-cat.png

แต่ตัวที่เราลองเล่นเป็นครั้งแรกคือ Ubuntu ถ้าจำไม่ผิดตอนนั้นใช้ version 11 ครับ ตอนแรกๆ ยังไม่เข้าใจหรอกมันใช้ยังไงกันแน่ เพราะด้วยตอนนั้นใช้เป็นแค่เปิด Firefox ที่มากับ Ubuntu กับโปรแกรมที่มาด้วยกัน อย่างพวก LibreOffice แค่นั้นเลยครับ เคยพยายามหาวิธีติดตั้งโปรแกรมใหม่ๆ เข้าไปก็ยังไม่เข้าใจสักเท่าไหร่ เลยใช้ไปแค่นิดๆ ก็เลิกใช้ครับ

ภาพ linux tle จาก http://distroworldthai.blogspot.com/2014/06/linux-tle.html

ตัวต่อมาที่เราได้ลองเล่น คือ Linux tle พัฒนาโดย nectec ไทยเรานิละครับ ( พัฒนามาจาก Ubuntu โดยเพิ่มภาษาไทย เพิ่มโปรแกรมเข้าไป ) หน้าตาก็จะประมาณนี้ครับ แต่ด้วยที่เรายังไม่เข้าใจ หรือด้วยหน้าตามันไม่สวย เลยกลับไปใช้ ubuntu ตามเคย 55+

ถึงแม้ว่าผมจะใช้ Ubuntu แต่ก็ใช้แค่ครั้งคราว เพราะสุดท้ายตอนเรียน ตอนทำเอกสารรายงาน เล่นเกมส์ ก็ยังต้องใช้ windows อยู่ดี ทำให้กลับมาใช้ windows เรื่อยมา

ภาพ Mac OS X Lion จาก https://www.lifewire.com/thmb/pCbNG_S0UYOrfyF5R8_vhGUdOYs=/768x0/filters:no_upscale():max_bytes(150000):strip_icc():format(webp)/installLion-593095fe5f9b589eb486ddda.jpg

ประมาณชั้น ม.3 มีอยู่ช่วงนึง ที่ผมคลั่งไคล้ macOS (เมื่อก่อนเรียก Mac OSX) มาก ในตอนนั้นเลยพยายามหาวิธีลง ลงซ้ำแล้วซ้ำเล่าจนสำเร็จ (Hackintosh นั่นเองครับ)ตอนนั้นใช้ Mac OSX Lion ก็ใช้อยู่สักสองสามเดือน ก็ปัญหาเดิมครับ ต้องใช้ windows เพราะด้วยมันไม่มีโปรแกรมที่เราเรียนอยู่ตอนนั้น รันบน macOS ได้เลย ผมก็พยายามใช้วิธี เช่น ใช้ parallel แต่ด้วยสเปกคอมผมไม่แรงมาก สุดท้ายก็ต้องใช้ windows อีกตามเคย

จุดเริ่มต้นในการใช้ Ubuntu เป็นตัวหลักในการ dev

เมื่อกลางปีที่แล้ว ผมก็ตัดสินใจกลับไปมาใช้ Ubuntu อีกครั้งคราวนี้ใช้ป็น OS หลักในการทำงานจริงๆ จังๆ เลย จัดการลง Ubuntu version 16 LTS ซึ่งก็อัปเดต version เรื่อยมา ตั้งแต่ 17 จนถึงปัจจุบันคือ version 18 LTS

สาเหตุที่ผมไม่พอใจ windows 10 คือ ผมพยายามหัดใช้ docker แต่มีปัญหากับ windows hyper v และแล้วก็นึกถึง Ubuntu ทันใด ก็จัดการลงซะ (แต่ยังไม่ลบ windows ทิ้งนะครับ ยังกลับไปเล่นเกมส์อยู่บ้างในบางคราว)
LTS มาจากคำว่า Long term support — หมายถึง version ที่มีระยะ support นานกว่า version ปกติ นั้นเอง

ใช้ Ubuntu ด้านใดบ้าง

ด้วยความที่ใช้ Ubuntu เป็น OS หลัก โดยใช้ในการทำงาน, การเรียน และความบันเทิง (ดูหนัง, ฟังเพลง) แต่เวลาส่วนใหญ่ของผมจะใช้ในการทำงานมากกว่า ไม่ว่าจะทำฟรีแลนซ์ หรือเขียนบล็อก ให้เพื่อนๆ อ่านกัน

ด้านการ dev
สำหรับการทำงานในตอนนี้จะเป็น

  • Front-end — HTML, CSS, React.js, Angular
  • Back-end — Node.js, Express.js

ตอนนี้เรียกว่าผมโดน JavaScript ครอบงำซะแล้ว :D แต่ก็ใช้เขียนภาษาอื่นๆ อยู่บ้าง อย่าง java, kotlin, python และยังมีตัวอื่นๆ บ้างที่ผมจะลองเล่น

ด้าน design
นอกจากการใช้งานด้าน dev ต่างๆ แล้ว ผมก็ใช้ในการ design บ้าง โดยจะใช้ Gravit designer มา design พวก UI แอพหรือเว็บด้วย

ต่อมามาดูว่าตอน dev ผมใช้ซอฟต์แวร์ตัวไหนบ้าง

ซอฟต์แวร์ที่ใช้บ่อย

Visual Studio Code Insider— เมื่อก่อนใช้ atom สักพักเปลี่ยนมาใช้ Brackets แล้วก็จึงมาใช้ VS Code ด้วยความที่ตัวมันเร็วกว่า (สำหรับผมนะ) มีธีมเยอะ มี extension ใช้ครบครัน ตามงานที่ผมกำลังทำอยู่ และด้วยที่มันเป็น version insider คือจะมีอัปเดตสดๆ ร้อนๆ ออกมาให้เราได้ใช้ก่อน version ปกติ (ที่ผ่านมาไม่เคยเจอปํญหาร้ายแรง จนเปิดไม่ได้เลย)

Quake Terminal— เป็น drop down terminal ที่ผมชอบมาก ด้วยความที่มันเรียกได้ง่ายๆ จากที่ไหนก็ได้ ตอนเปิด chrome อยู่ก็เรียกมาได้เลย แค่กด f12 พอโผล่มาก็รัวคำสั่ง และพอกด f12 อีกครั้งมันจะหายไป มันยังทำงานอยู่นะครับ โดย run เป็น background task

Git Kraken— ปกติในการ dev ผมจะใช้ git เป็น version control ด้วย และ git kraken เป็น git gui ตัวนึงที่ผมชอบมาก เคยใช้มาหลายตัว แต่พบว่าตัวนี้ละ ลงตัวมากสำหรับตัวเอง

และก็มีอีกหลายตัวที่ใช้บ้าง อย่าง android studio ไว้ทำแอพ android หรือจะเขียน java, kotlin บน IntelliJ IDEA และ MySQL workbench ไว้จัดการฐานข้อมูล

ความรู้สึก

ด้วยความที่ผมเคยใช้ windows, macOS มาก่อนแล้ว ยิ่งทำให้ความรู้สึกเวลาเปรียบเทียบกันแล้วมันชัดมาก ต้องขอออกตัวก่อนเลยว่า ไม่ได้มีเจตนาว่าร้ายกับตัวที่จะเทียบให้ฟังเลยนะครับ แค่ผมจะเล่าสิ่งที่เจอมากับตัว

windows — เป็นตัวเจ้าปัญหาสำหรับผมเลย ย้อนกลับไปตอน dev แอพ android ใหม่ๆ มีปัญหาในการ debug กับมือถืออย่างมาก ด้วยตอนนั้นต้องไล่ลง driver มือถือก่อนถึงจะใช้งานได้, บางครั้งก็ติดปัญหา android emulator บ้างละ สุดท้ายเจอปัญหา docker กับตัว windows hyper v ทำให้รู้สึกมองว่า windows เป็นปัญหาสำหรับผมอย่างมาก และบางทีก็เจอ windows update เข้าไปตู้ม (หลายๆ คนถ้าเคยเจอจะเข้าใจ) เมื่อเทียบกับ Ubuntu แล้วผมถือว่าตอบโจทย์ เช่น ไม่ต้องลง driver มือถือให้ยาก, ไม่มีปัญหากับ docker

macOS — สวยมากๆ เคลิ้มไประยะนึง 555+ (จะสังเกตว่าหน้าจอ desktop ของผมจะคล้ายๆ กับ macOS ไม่ต้องสงสัยครับ ผมชอบสไตล์โล่งๆ แบบนั้นแหละครับ ) ตัว macOS เป็น os ที่ก็ไม่ได้ใช้ dev จริงจังเท่าไหร่นัก แต่มีความสุขมากกว่า windows พอตัว + หน้าตาอันสวยงาม โล่งๆ หากเทียบกับ Ubuntu ที่ผมกำลังใช้อยู่ความรู้สึกจะใกล้เคียงกันครับ คือไม่มีปัญหาที่เคยเจอบน windows (เจอปัญหาอื่นแทนนะซิ 555+)

Ubuntu — ตัวนี้เป็น linux distro ที่ผมตัดสินใจใช้ ก็ต้องบอกว่าด้วยความที่เป็น Linux ทำให้เราเติมหรือปรับแต่งหลายๆ ส่วนได้อย่างอิสระ ไม่ว่าจะหน้าตาหรือส่วนต่างๆ ตอนนี้ผมใช้ Gnome เป็น Desktop Environment เพราะด้วยความที่มี theme สวยๆ เยอะ ที่ลงตัว และมี extension ไว้เติมที่เราอยากให้มี อย่างที่ใช้ประจำ ก็มี docker status ไว้ดูว่า container ตัวไหนกำลัง run อยู่บ้าง หรือพวกพยากรณ์อากาศ

Desktop Environment — มันก็คือหน้าตา GUI ทั้งหมดนั้นละครับ ซึ่งจะ GUI ติดต่อกับระบบปฏิบัติการอีกที (OS) อย่าง windows ก็มี Aero, macOS ก็ตัว aqua

และด้วยความมีอิสระทำให้ผมมีความสุข เหมือนได้รับการเติมเต็ม (เวอร์) ก็ด้วยมันสามารถแก้ปํญหาจุกจิกที่เราเคยเจอตอนสมัยอยู่บน windows ได้ มันก็ถือว่าตอบโจทย์เราอย่างมาก ทั้งพอมันเป็น Linux ด้วยแล้ว งานที่กำลัง dev อยู่ ก็พอมั่นใจได้ในระดับนึงว่าเครื่อง production จะไม่ต่างไปจากนี้มาก (แต่เพื่อ make sure ควรใช้ docker นะครับ จะได้มีสภาพแวดล้อมเหมือนกันหมดทั้งตอน dev และ production) อีกเหตุผลเลยทำให้เราได้ความรู้กลับมาอย่างมากมาย เพราะการจะติดตั้งซอฟต์ก็ต้องรู้จัก terminal (จริงๆ ก็มี software center กดติดตั้งได้เลย แต่ยังไม่ครอบคลุมเท่าติดตั้งเอง) การรู้จัก vim (ตอนแรกที่ใช้ ยอมรับว่าหาทางออกไม่เจอจริง) ซึ่งเป็นประสบการที่ดีอย่างมาก สำหรับชีวิตนักพัฒนาคนนึง

สรุปส่งท้าย

Linux ก็ถือว่าเป็นสุดยอดโครงการ open source ตัวนึงที่เราชื่นชอบ ในโลก open source ก็ยิ่งทำให้เราได้เจอซอฟต์แวร์อีกมากมาย ที่ไม่เคยเจอ เหมือนเป็นการเปิดโลกใบใหม่ให้เราเลย ผมไม่ตัดสินหรอกนะครับว่า OS ไหนดีที่สุดในโลก แต่คุณต่างหากเป็นคนตัดสินว่าจะใช้ตัวไหนในการ dev ของคุณเอง

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

แล้วเจอกันในบทความต่อไปครับ :D