สรุปเทคโนโลยีทุกอย่างสำหรับคนอยากมีเว็บ / แอพในปี 2016 ฉบับเข้าใจง่าย ๆ

rathjung

บทความนี้เผยแพร่ครั้งแรกใน rath.asia

เวลามีเพื่อนมาถามเราว่าอาการแบบนี้ไปหาหมอเฉพาะทางอะไรดี เราก็อาจมีวิธีคิดของเราว่าประวัติแบบนี้มันน่าจะบอกให้ไปหาหมออะไร เวลามีคนมาถามว่าอยากทำโปรเจคท์ IT ประมาณนี้ต้องไปหาใครก็คอนเซ็ปท์เดียวกันครับ ถ้าเราพอรู้ไอเดียของสิ่งที่อยากทำคร่าวๆ มันก็พอแนะนำได้ มีเพื่อนหมอของผมหลายคนเหมือนกันที่มาปรึกษาเรื่องนี้ เลยคิดว่าเขียน blog อธิบายหน่อยดีกว่าครับ

ต้องบอกก่อนว่าเพื่อความง่ายในการเข้าใจภาพรวม ผมจึงจำเป็นต้อง over-simplify ในหลายๆ คอนเซ็ปท์นะครับ แต่ละเรื่องจริงๆ ไม่สามารถฟันธงได้ และมีรายละเอียดมีข้อยกเว้นอีกเยอะ

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

และเนื่องจากผมเองก็ไม่ใช่คนสาย tech ผิดพลาดประการใดโปรดชี้แนะด้วยนะครับ ^.^

ยาวไปไม่อ่าน

  1. ไม่ว่าจะทำเว็บหรือทำแอพ ถ้าต้องดึงข้อมูลจากในเน็ต จะประกอบด้วยสองส่วนเสมอ คือ client (front-end) และ server (back-end) ซึ่งทั้งสองส่วนมักจะใช้โปรแกรมเมอร์ (developer) ส่วนละหนึ่งคน รวมสองคน (แต่บางคนก็ทำได้ทั้งสองอย่าง) รายละเอียดในบทความ
  2. front-end web ถ้าไม่ซับซ้อนใช้ HTML, CSS, jQuery ก็พอ ถ้าเริ่มซับซ้อนหรือจะทำ SPA หา React developer หรือ Angular developer รายละเอียดในบทความ
  3. back-end web แล้วแต่ถนัด แต่สำหรับงานทั่วๆ ไป ส่วนตัวผมเชียร์ให้หา PHP (laravel) developer, Node.js developer หรือ Ruby on Rails developer รายละเอียดในบทความ
  4. แต่ก่อนจะเริ่มโปรเจคท์ใดๆ ก็ตาม อยากให้ดูว่ามันสามารถใช้ CMS ทำได้หรือเปล่า หรือต่อยอดมาได้หรือเปล่า เพื่อการประหยัดเงินและเวลา รายละเอียดในบทความ
  5. ส่วน Mobile app ก็หา native developer ใน platform นั้นๆ ครับ ยกเว้นว่า app ไม่ได้ซับซ้อนมากอาจหา ionic developer ได้ รายละเอียดในบทความ

App ทำงานอย่างไร

App ในที่นี้ ผมหมายถึงโปรแกรมที่รันในที่ต่างๆ นะครับ เช่น มือถือ (mobile app) เว็บ (web app) เครื่องคอม (desktop app) ซึ่งโปรแกรมที่รันในที่ต่างกันก็จะใช้เครื่องมือในการพัฒนา (development หรือมักเรียกกันว่า dev) ต่างกัน

App สามารถรันในเครื่องโดยไม่ต้องต่อกับเครื่องอื่น (standalone) หรือทำงานโดยผ่านเครือข่าย (network) เช่น เครือข่ายภายในองค์กร (intranet) และเครือข่ายอินเตอร์เน็ต

App ที่ทำงานผ่านเครือข่าย มักวางโครงสร้างแบบ client-server โดยโปรแกรมที่รันบนเครื่อง client เรียกว่า client-side (หรือ front-end) และที่รันบนเครื่อง server เรียก server-side (หรือ back-end)

front-end คือส่วนที่ติดต่อกับผู้ใช้ หรือหน้าตาของ app ส่วน back-end คือส่วนทำงานกับระบบต่างๆ เพื่อให้ได้ข้อมูลมาส่งให้ front ผ่านทาง API (Application Programming Interface)

เนื่องจากส่วนใหญ่เราพูดถึง app ที่ทำงานผ่านเครือข่ายอินเตอร์เน็ต back-end ของ app จึงมักเป็น web ถ้า app รันบนมือถือ client ก็คือ mobile app ถ้ารันบนเว็บ client ก็คือ web browser ทั้งสองอันใช้ server เดียวกันได้คือ back-end web

basic-tech-01

Language, library, framework และ tools

เวลาเราได้ยินคนวงการ tech พูดศัพท์ซักอย่าง มันมักจะอยู่ใน 4 กลุ่มนี้แหละครับ

Language: App ต้อง dev จากภาษาคอมพิวเตอร์ (programming language) ซึ่งภาษาแต่ละตัวเหมาะกับงานคนละแบบ บางอันเหมาะไปทำ mobile app บางอันเหมาะไปทำ front-end web app บางอันเหมาะไปทำ back-end web แต่ภาษาที่ฮิตๆ ใช้ในสถานการณ์ทั่วไป จะมีอยู่ไม่กี่ตัวครับ ซึ่งจะกล่าวต่อไป

Library: คือชุดของโปรแกรมที่มีคนเขียนไว้ให้แล้ว เพื่อให้โปรแกรมอื่นเอาไปใช้ได้ เพื่อให้ developer สามารถทำงานบางอย่างโดยไม่ต้องเขียนเองใหม่ เปรียบเทียบกับการสร้างบ้านก็คือ เราเอาหน้าต่างสำเร็จรูปมาใช้ ไม่ต้องทำหน้าต่างขึ้นมาเองใหม่

Framework: คือชุดของโปรแกรมที่มีคนเขียนไว้ให้แล้วเช่นกัน แต่นอกจากจะเพิ่มฟังก์ชั่นให้โปรแกรม (เหมือน library) ยังช่วยในการวางโครงสร้างของโปรแกรม เปรียบเทียบคือ สมมติเราจะสร้างบ้านด้วย framework A เราต้องสร้างให้ห้องนอนมี 1 ห้องน้ำเสมอ อยู่ชั้นสองของบ้าน และมีหน้าต่างสำเร็จรูปให้ใช้ เป็นต้น การมีโครงสร้างช่วยให้ง่ายในการบำรุงรักษาและต่อเติม เช่น ช่างคนอื่นเข้ามาก็รู้เลยว่าห้องนอนอยู่ชั้นสอง

ย้ำอีกครั้งว่าข้างต้นคือการ over-simplify นะครับ (เพราะจริงๆ ประเด็น Library vs. Framework มีมากกว่านี้)

tools: ก็ตรงไปตรงมาครับ คือเครื่องมือที่เอาไว้ทำงานบางอย่าง

basic-tech-02

ความงงของคน non-tech คือการไม่ทราบว่าศัพท์ที่ตนเองกำลังคุยอยู่นั้น มันเป็นชื่อของอะไรครับ

————————————-

Web application

เมื่อเราต้องการทำเว็บขึ้นมาเว็บนึง ก็ต้องมีส่วนของ front-end และ back-end

Front-end web technology

เว็บโผล่มาให้เราเห็นใน browser ประกอบด้วย 3 ส่วน

  1. โครงสร้าง – คือบอกว่าในหน้าจะมีอะไรบ้าง ส่วนนี้ใช้ภาษา HTML
  2. หน้าตา – คือส่วนที่บอกว่าแต่ละส่วนจะหน้าตาเป็นอย่างไร ส่วนนี้ใช้ภาษา CSS
  3. การตอบสนอง – คือส่วนที่บอกว่าเมื่อเราทำอะไรกับโครงสร้างหนึ่ง ให้หน้านั้นตอบสนองอย่างไร ส่วนนี้ใช้ภาษา JavaScript (JS)

basic-tech-03

จะเห็นว่า language ที่เกี่ยวข้องมีอยู่สามตัวคือ HTML, CSS, JS โดยแต่ละภาษาก็จะมี Library และ framework ของตนเอง ที่เด่นๆ มีดังนี้

(แต่ก่อนอื่นขอคั่นนิดนึง JavaScript ไม่ได้มีความเกี่ยวข้องอะไรกับ Java นะครับ คือแค่เป็นชื่อของภาษาเหมือนกัน แต่ JavaScript ไม่ใช่ script ที่เขียนในภาษา Java

อีกอย่างคือในภาพมันเป็นเลข 5 จริงๆ เดี๋ยวนี้มันเป็นเวอร์ชั่น 6 นะครับ (Ecmascript6 เป็นชื่อของมาตรฐาน))

CSS Framework

กลุ่มนี้คือ CSS สำเร็จรูปที่เป็นหน้าตาของ element ที่เราเจอซ้ำๆ ในเว็บต่างๆ ก็มีคนรวบรวมไว้ เวลาจะใช้ก็ง่าย มีแนวทางการเขียน code สำหรับ framework นั้นๆ กลุ่มนี้ที่ฮิตที่สุด คือ Twitter Bootstrap ตามมาด้วย Zurb Foundation (แต่คนชอบบอก Foundation ดีกว่านะ 55)

basic-tech-04

ความจริงทั้งสองตัวมีส่วนที่เป็น HTML, JS ด้วย แต่ช่างมัน วันนี้เรามา over-simplify

CSS Tools

เนื่องจาก CSS เป็นภาษาที่ไม่ใช่ programming language มันเลยทำอะไรไม่ค่อยสะดวก จึงเกิดเครื่องมือต่างๆ มาเพื่อให้มันสะดวกขึ้น พวกนี้เช่น SASS, LESS, Stylus, PostCSS ซึ่งพวกนี้คุ้นๆ ชื่อไว้พอครับไม่ต้องรู้รายละเอียด

JS library

ที่น่ารู้จักคือ jQuery อันอื่นไม่ต้องสนมากก็ได้ครับ jQuery เคยครองโลกอยู่ช่วยนึง (ทุกวันนี้ก็ยังครองอยู่) เป็นเครื่องมือที่ทำให้เขียน JavaScript ได้ง่ายขึ้นและ cross-platform (เปิดใน browser ไหนก็แสดงผลเหมือนกัน) ช่วงหลังๆ มานี้ความจำเป็นต้องใช้ jQuery ลดลงเรื่อยๆ

jquery_logo-300x74

JS framework

ในเว็บที่ส่วน front-end มีความซับซ้อน มี user interaction เยอะ ต้องการให้ตอบสนองเร็วๆ คล้าย native desktop app เรามักจะทำสิ่งที่เรียกว่า Single page web application (SPA) นึกภาพ gmail, google calendar พวกนั้นครับ ซึ่งจะทำสิ่งนี้มักจะใช้ JS framework เป็นหลัก

JS framework ที่ฮิตๆ กัน ณ ตอนนี้มี 3-4 ตัว

  • Angular – หนุนโดย Google เป็น front-end framework ที่ฮิตที่สุด ณ ตอนนี้ ฟังก็ชั่นครบถ้วน แต่กำลังจะออกเวอร์ชั่น 2 และเป็น major change ที่ทำให้จะอัพจาก 1.x ไปไม่ง่าย เลยเกิดภาวะ ใช้ 1.x ก็แป๊ปเดียวล้าสมัย แต่ 2 ก็ยังไม่ค่อยโอที่จะใช้จริง คนเลยหนีไป React
  • React – หนุนโดย Facebook จริงๆ ถ้าเอาแค่ปีที่ผ่านมา ผมว่าอันนี้ฮิตสุด จริงๆ แล้ว React ไม่เชิงเป็น framework เป็นส่วนที่เกี่ยวข้องกับการแสดงผลมากกว่า
  • Ember – ไม่ได้มียักษ์หนุน แต่ developer community ค่อนข้างแข็ง และขึ้นชื่อเรื่องความใช้ง่าย และความเข้ากันได้กับ Ruby on Rails
  • Backbone – เป็น Framework ขนาดเล็ก และยืดหยุ่น เอาไปใช้กับอะไรก็ได้ แต่ช่วงหลังๆ ความนิยมแผ่วลงเรื่อยๆ

basic-tech-05

Front-end technology อื่นๆ

เล่าให้ฟังให้พอรู้จักชื่อเฉยๆ นะครับ

  • Automate task runner – Gulp และ Grunt โดย Gulp ฮิตกว่าแล้วในปีหลังๆ
  • Dependency management – Browserify, Webpack
  • Package management – Bower, npm (จริงๆ อันนี้ใช้ใน back-end ด้วย)
  • Build tool – Yeoman

สรุป Front-end web development

  • ถ้าเว็บไม่ซับซ้อน HTML, CSS, jQuery จบ
  • ถ้าจะทำ SPA หา React developer ไม่ก็ Angular developer กลุ่มนี้บางคนอาจเป็น Full-stack web developer หรือทำได้ทั้ง front และ back
  • แต่โดยทั่วไป เรามักต้องใช้อย่างน้อยสองคนคือ front 1 คน และ back 1 คน
  • แต่ถ้า app ไม่ได้ซับซ้อนมาก front-end dev บางคนก็อาจใช้บริการพวก Backend-as-a-service (เช่น Firebase ของ Google, Parse ของ Facebook) คือทำให้เขาทำ back-end ได้ด้วยตนเองด้วยเลย แต่ก็จะมีค่าใช้จ่ายค่า service พวกนี้มา คุ้มหรือไม่ต้องดูเป็นโปรเจคท์ไปครับ

————————————-

Back-end web technology

ต้องบอกก่อนว่า ผมทำ back-end ไม่เป็นนะครับ 55 เพราะงั้นจะรู้แค่ concept คร่าวๆ

เว็บในปัจจุบันเรามักวางโครงสร้างในลักษณะ front กับ back คุยกันผ่าน API (เรียกว่า RESTful API) ซึ่งการจะทำ back-end web เรามีทางเลือกหลักๆ คือเลือกภาษา โดยแต่ละภาษาก็จะมี framework ที่นิยมใช้คู่กันอยู่ framework ที่ฮิตๆ ในแต่ละภาษาก็จะมีอยู่ไม่กี่ตัว ภาษาที่นิยมใช้ทำ back-end มีดังนี้

PHP

เป็นภาษาที่ครองโลก web development มานาน มี developer community ขนาดใหญ่มาก มี libray ให้เลือกใช้เยอะ ทั้งฟรีทั้งเสียเงิน ที่สำคัญคือ Content Management System (CMS) ใหญ่ๆ ล้วนเขียนด้วย PHP ปัญหาของ PHP คือ โดยตัวภาษาเองแล้วไม่ได้เหมาะเท่าไหร่ในการทำ large scale application แต่จะทำก็ทำได้นะครับ (ฟังเขาว่ามานะฮะ ส่วนตัวไม่เคยเขียนจริงจัง จริงหรือเปล่าไม่รู้ แฟนคลับ PHP เถียงได้ฮะ 55)

Framework ของ PHP ที่ฮิตๆ กันในเมืองไทย ณ ตอนนี้ผมว่าคือ Laravel ส่วนตัวอื่นๆ ก็เช่น Symfony, Yii, Nette, CodeIgniter

โปรเจคท์ที่เหมาะกับ PHP:

  • โปรเจคท์ที่อยากหา developer ร่วมทีมได้ง่ายๆ เพราะ PHP developer น่าจะเยอะสุดแล้ว
  • โปรเจคท์ที่จะพัฒนาต่อยอดมากจาก CMS ซึ่งเอาจริงๆ โปรเจคท์ส่วนใหญ่ ถ้าไอเดียไม่ได้ใหม่หน่อย มันก็มักจะใช้ CMS ได้ (แต่ถ้าจะใช้ CMS ก็ควรหา developer ที่เล่น CMS นั้นๆ)
  • โปรเจคท์ที่คิดว่าน่าจะซื้อหรือหา code สำเร็จรูปมาทำต่อได้ง่ายๆ
  • โปรเจคท์ที่ไม่ซับซ้อนมาก
  • ย้ำอีกทีว่าข้อสรุปข้างต้นเป็นการ over-simplify

basic-tech-06

Node.JS

จริงๆ Node.js ไม่ใช่ชื่อภาษานะครับ ภาษาคือ JavaScript (ภาษาเดียวกันกับที่เราใช้ทำ interaction ใน front-end) Node.js เป็นโปรแกรมที่ทำให้เราเขียน JavaScript สั่งงานเครื่อง server ได้ เลยเอามาทำ back-end ได้ เป็นภาษาที่กำลังได้รับความนิยมอย่างรวดเร็วในช่วงปีหลังๆ

Framework ที่นิยมใช้กันกับ Node.js ชื่อว่า Express.js ตัวอื่นๆ ก็เช่น Hapi.js, Sails.js, Koa.js ไม่รู้จักใครใช้เหมือนกันครับ ส่วนใหญ่ที่เห็นก็ Express.js

โปรเจคท์ที่เหมาะกับ Node.js:

  • โปรเจคท์ที่ต้องการ concurrency สูงๆ เพราะเขาขึ้นชื่อเรื่องรับโหลดได้พร้อมกันมากๆ
  • โปรเจคท์ที่อยากเขียนภาษาเดียวกันทั้ง front-end และ back-end (ภาษา JavaScript) เพื่อความง่ายในการ maintenance และความเข้ากันได้
  • โปรเจคท์ที่พร้อมรับความเสี่ยง เนื่องจากเป็นเทคโนโลยีใหม่ มี tools มีแนวคิดใหม่ๆ ออกมาเรื่อยๆ ในขณะเดียวกันพวก library สำหรับงานต่างๆ ก็อาจจะน้อยกว่าภาษาที่ mature แล้ว ทำให้งานบางอย่างที่ภาษาอื่นง่ายๆ ใน Node.js อาจไม่ได้ง่าย

basic-tech-07

Ruby on Rails

Ruby เป็นชื่อภาษาครับ ส่วน Rails เป็นชื่อ framework เลยเรียกเป็น Ruby on Rails (ROR) ตัว RoR นี้ขึ้นชื่อเรื่องความง่ายและความเร็วในการพัฒนา web app ลองดูโพสท์นี้ครับ What can a Ruby on Rails developer create in 1 hour, 1 day, 1 week and 1 month? จึงทำให้เหมาะในการเอามาทำ startup ครับ เพราะ ต้องการความยืดหยุ่น release early, release often

ข้อเสียของ RoR คือไม่ค่อยเหมาะจะเอาไปใช้ในโปรเจคท์ใหญ่ๆ (อันนี้ผมก็ฟังเขาว่ามา) แต่ที่เห็นก็คือบริษัท startup เมืองนอกมักเริ่มจาก RoR พอจะ scale ก็เปลี่ยนไปใช้เทคโนโลยีอื่น

โปรเจคท์ที่เหมาะกับ RoR:

  • Startup ที่ทำ web application เน้นออก prototype เร็วๆ แล้วค่อยไปเปลี่ยนตอน scale

basic-tech-08

Python

เป็นภาษาที่ออกมานานแล้ว ขึ้นชื่อเรื่องความง่ายในการเรียน แต่ก็ powerful พอจะทำอะไรก็ได้ จริงๆ Python สามารถเอาไปทำ app ในไหนก็ได้ (จริงๆ สายงานที่นิยมใช้ Python ที่สุดคืองานสาย data science) ถ้าจะเอา Python มาทำเว็บ มักจะใช้กับ framework ชื่อ Django แต่ผมก็ไม่ค่อยเห็นคนใช้ Python ทำเว็บเท่าไหร่ในไทยนะ ยิ่งถ้าเทียบกับ PHP, RoR หรือ Node.js

โปรเจคท์ที่เหมาะกับ Python:

  • งานที่เกี่ยวกับ Data Science ทั้งหลาย

basic-tech-09

Java

ภาษาครอบจักรวาลกว่า Python อีกมั้ง เอาไปทำได้ตั้งแต่ android app, desktop app, web ฯลฯ มักใช้ใน open source และ enterprise software คนเอามาทำเว็บก็เยอะอยู่ framework ดังๆ ก็เช่น Play, Grails, Spring

เนื่องจากผมไม่ค่อยรู้เกี่ยวกับภาษานี้เลย จึงไม่รู้เหมือนกันครับว่าโปรเจคท์ web แบบไหนที่ควรใช้ Java แต่ส่วนตัวรู้สึกน่าจะเป็นโปรเจคท์ที่ stable ระดับนึง ต้องการภาษาที่ mature แล้ว แต่ไม่ต้องการพึ่งพิง Microsoft

basic-tech-10

ASP.NET

จริงๆ ASP.NET เป็นชื่อ framework ครับ สามารถใช้ได้หลายภาษา ที่นิยมที่สุดคือใช้กับภาษา C# ตัวนี้เหมือน Java คือออกมานาน mature แล้วเช่นกัน แต่มักใช้ในคนที่เล่นเทคโนโลยีของ Microsoft

เนื่องจากผมไม่ค่อยรู้เรื่องภาษานี้เช่นกัน เลยบอกโปรเจคท์ที่เหมาะไม่ได้ แต่ส่วนตัวคิดว่าน่าจะเป็นทีมที่ชอบใช้เทคโนโลยีของ Microsoft อยู่เดิม เวลา dev ใช้ visual studio ใช้กับ Microsoft SQL database แล้ว deploy ขึ้น Windows Server อะไรแนวๆ นี้ครับ

aspnet

ภาษาอื่นๆ

ที่กำลังฮิตๆ กันผมก็เห็นมีพวก Go, Erlang, Scala แต่มันใช้ทำอะไรผมก็ไม่รู้เหมือนกันครับ

basic-tech-11

เทคโนโลยีอื่นๆ ที่เกี่ยวข้องกับ Back-end

อันนี้ผมจะไม่พูดยาวนะครับ (เพราะผมเองก็ไม่ค่อยรู้) แนะนำว่าเลือกภาษาได้ เดี๋ยว dev เขาก็เลือกพวกนี้ให้เอง แต่ให้พอรู้ไว้ว่ามีอะไรบ้างก็พอครับ

  • Database: ตอนนี้หลักๆ คือ SQL (MySQL, Microsoft SQL, PostgreSQL, MariaDB) และ NoSQL (MongoDB) อันนี้ปล่อย dev เขาเลือกไปเลยครับ
  • Web Hosting: ก็คือจะเอาเว็บไปวางไว้ในไหน shared-host, virtual private server (VPS), dedicated host, cloud
  • DevOps: ก็คือพวกที่เกี่ยวข้องกับการทำงานประสานกันระหว่างฝ่าย development กับฝ่าย IT operation เรื่องนี้เป็นเรื่องที่รายละเอียดอีกเยอะมาก แนะนำว่าให้ dev เขาจัดการครับ

สรุป Back-end web development

  • ทำ startup เล็กๆ เลือกระหว่าง PHP (Laravel) หรือ Ruby on Rails หรือ Node.js developer
  • ต้องการ concurrency สูงๆ รับ user ได้เยอะๆ และพร้อมรับความเสี่ยงในเทคโนโลยีที่ยังไม่ mature แต่ดูมีอนาคตมาก เลือก Node.js developer
  • ทำโปรเจคท์ที่น่าจะต่อยอดจาก CMS ได้ หรือคิดจะหาซื้อ code มาทำต่อ เลือก PHP developer (แต่ต้องถามดูว่าเขาเล่น CMS นั้นด้วยหรือเปล่านะครับ)
  • ทำ Enterprise app รัก Microsoft เลือก ASP.NET ถ้าอยากไปสาย open source เลือก Java
  • ไม่ว่าจะเลือกภาษาอะไร แต่ผมแนะนำให้บอก dev ใช้ framework เสมอ ไม่งั้นสุดท้ายเขียนจนเสร็จพอเขาออกไป มีคนใหม่เข้ามาก็ได้รื้อใหม่หมด ไม่มีใครชอบรื้อ code คนอื่นครับ โดยเฉพาะ code ที่วาง structure ไม่ดี การใช้ framework ทำให้ง่ายกว่าในขั้นตอนการพัฒนา และการ maintenance (จริงๆ จะไม่ใช้ก็ได้ แต่เขาต้องมีเหตุผลที่ดีพอในการที่จะไม่ใช้)

————————————-

Content Management System (CMS)

เนื่องจากเป็นเรื่องที่ค่อนข้างมีรายละเอียดเยอะ เลยแยกออกมาต่างหากครับ

CMS ก็คือโปรแกรมสำเร็จรูปสำหรับให้เราปรับเปลี่ยนแก้ไขเนื้อหาภายในเว็บได้โดยไม่ต้องมีความรู้ web development ส่วนใหญ่แล้ว CMS มักจะมีฟังก์ชั่นอื่นๆ แถมมาด้วยเช่นกัน เช่น user management, ปรับแต่งธีม ฯลฯ CMS ประกอบด้วยทั้ง front-end และ back-end มาให้ในโปรแกรมเลย ตัว back-end จริงๆ เขียนด้วยภาษาอะไรก็ได้ แต่ที่ฮิตที่สุดก็เป็น PHP ใช้กับ MySQL database

CMS มักออกแบบมาให้เหมาะกับงานเป็นอย่างๆ บางอันเหมาะทำเว็บ บางอันเหมาะทำ blog บางอันเหมาะทำร้านค้า โดย CMS ที่ได้รับความนิยมสูงสุดในโลก ณ ตอนนี้คือ WordPress เจ้าตัวเขาบอกว่าเว็บราว 25% ในโลกใช้ WordPress เป็น CMS

WordPress

wordpress-logo-stacked-rgb-300x186

WordPress ในทีนี้ผมหมายถึง WordPress.org ที่เราดาวน์โหลดโปรแกรมมาแล้วมาโฮสท์เองนะครับ ส่วน WordPress.com อันนั้นเว็บสำเร็จรูป ตัว WordPress เองเขียนด้วย PHP ใช้กับฐานข้อมูล MySQL

ทีนี้เนื่องจากมันมีความนิยมสูงมาก มันเลยมีคนไปพัฒนาต่อยอดอะไรเยอะแยะมากมาย ดังนั้น ถ้าโปรเจคท์ของเราเป็นเว็บเน้นแค่เขียนอ่าน database อาจมี filter ข้อมูลนั่นนี่ แต่ไม่ได้มีฟังก์ชั่นอะไรสลับซับซ้อน ให้สันนิษฐานไว้ก่อนเลยครับว่ามันจะมีคนทำ plug-in ของ WordPress ไว้อยู่แล้ว ทำให้เรา dev โปรเจคท์ที่เราต้องการขึ้นมาได้ง่าย หรือถ้ายังไม่มีใครทำ การ dev ต่อยอดจาก CMS ก็มักจะง่ายกว่าเขียนใหม่จาก framework

ยกตัวอย่าง โปรเจคท์ที่เราสามารถทำได้ด้วย WordPress

จริงอยู่ว่าการใช้ WordPress มาต่อยอดอะไรเยอะแยะ มักส่งผลต่อ performance เว็บ แต่แลกกับการที่เรา dev ได้เร็ว launch เร็ว ในราคาที่ถูก เพื่อ proof ว่าไอเดียเรามันถูกต้องแล้ว ผมว่าคุ้มนะ ไว้จะ scale ค่อยใช้เทคโนโลยีอื่นๆ มาทำใหม่ (จริงๆ ประเด็นเรื่อง performance นี่ ถ้าคนไม่ได้เข้าเว็บเยอะจริงๆ ก็ไม่ค่อยเห็นหรอกครับ ซึ่งประเด็นคือคนที่ทำเว็บส่วนใหญ่ไม่ได้พาเว็บไปถึงจุดที่ว่ากันได้บ่อยนัก)

CMS อื่นๆ

ที่ดังๆ ส่วนใหญ่เป็น PHP + MySQL หมดเลย  ยกตัวอย่างเช่น

  • สายทำเว็บไซต์ทั่วไป เช่น Drupal, Joomla
  • สายทำเว็บขายของ e-commerce เช่น Magento (อันนี้มีแต่คนว่าดีกว่า WooCommerce อีกครับ ในแง่ทำร้าน), OpenCart

basic-tech-12

สรุป CMS

  • ไม่ว่าไอเดียของเราจะเป็นอะไรก็ตาม ผมอยากให้ลองมองๆ ดูก่อนว่าจะมีอะไรสำเร็จรูปที่เอามาใช้แล้วตอบโจทย์ได้หรือเปล่า ถ้ามีก็ใช้เถิดครับ ประหยัดเงิน ประหยัดเวลา เอาไว้มันเวิร์คจริงๆ ค่อยทำดีๆ
  • แต่ถ้าใช้ CMS แล้วดันแพงหรือช้ากว่าเขียนใหม่ แสดงว่า CMS นั้นอาจไม่ใช่ solution ที่เหมาะสมกับเราแล้วแหละครับ เลยต้อง customize เยอะ อาจพิจารณาเริ่มใหม่ด้วย framework

————————————-

Mobile Application

เนื่องจากไม่ใช่ฟิลด์ที่ผมเชี่ยวชาญ ดังนั้นจะสรุปสั้นๆ นะครับ คือไม่ว่าจะ iOS หรือ Android ก็ตาม วิธีการพัฒนา app มันมีอยู่สามวิธี (ลองดูเพิ่มเติมที่เว็บพี่เนย NuuNoei)

1. Native app

ใช้ภาษาที่ผู้พัฒนา platform บอกให้เราใช้ เพื่อเขียนคำสั่งให้ Software Development Kit (SDK) ของ platform นั้นๆ compile ออกมาเป็น mobile app ให้เราใช้ เช่น Android ก็ใช้ภาษา Java เขียนกับ Android Studio‎ ส่วน iOS ก็ใช้ภาษา Swift ทำงานกับ Xcode เป็นต้น

basic-tech-13

2. Hybrid app

ใช้เทคโนโลยีเว็บในการพัฒนาแอพ (HTML, CSS, JS) โดยจะมีโปรแกรมมาครอบอีกทีเพื่อให้ออกมาเป็น mobile app กดได้เหมือนเป็น app (จริงๆ มันเป็นเว็บ) ข้อดีก็คือมัน cross-platform ทำครั้งเดียวออกได้ทั้ง iOS และ Android ข้อดีอีกอย่างคือคนที่มาจากสายเว็บสามารถทำ mobile app ได้เลย แต่แลกกับข้อเสียคือมีปัญหา Performance ที่ไม่ลื่นเท่า Native app

Hybrid app framework ที่ฮิตที่สุดในความรู้สึกผมคือ Ionic framework รองๆ ลงมาที่เห็นคนพูดๆ ถึงก็ PhoneGap, Kendo, Sencha touch

อัพเดท: มีผู้รู้แจ้งมาครับว่า PhoneGap ขายให้ Adobe ไปแล้ว –> กลายเป็น Cordova ซึ่ง Ionic ส่วนนึงก็ต่อยอดมาจาก Cordova เพราะงั้นก็คือไม่ต้องสน PhoneGap แล้วนะครับ

basic-tech-14

3. ภาษาอื่น compile เป็น native

เนื่องจาก Hybrid app มักมีปัญหา performance แต่การเขียน Java ครั้งนึง Swift ครั้งนึง มันก็เหนื่อย เราอยากเขียนครั้งเดียวออกได้ทุกที่ครับ ก็เลยมี Tool ที่ให้เราเขียนเป็นภาษาอื่น แต่ compile ออกมาเป็น native app ได้ เช่น Unity, Xamarin, Rubymotion กลุ่มนี้ยอมรับว่าไม่ค่อยรู้จักครับ จริงๆ ผมเคยได้ยินพวก React Native, Kony, Appcelerator Titanium แต่ผมไม่แน่ใจว่าพวกนี้เป็นกลุ่มสองหรือสาม

basic-tech-15

เกี่ยวกับ Mobile development

  • จากประสบการณ์ส่วนตัว ผมไม่ค่อยเห็น Hybrid app ที่ออกมาแล้ว performance ดีๆ ครับ (ยกเว้นแอพจะไม่ได้ซับซ้อนมาก) ส่วนแนวข้อสามนี่ก็ไม่ค่อยเห็นคนทำครับ ยกเว้น Unity ที่ถ้าจะทำเกม ก็คงต้อง Unity
  • ไม่ว่าจะทำ app จากอะไร ถ้า app นั้นไม่ใช่ standalone app หมายถึง app นั้นต้องพึ่ง server เพื่อทำงานได้ ยังไงก็ต้องมี back-end web developer อีกคนอยู่ดีครับ ส่วนตัวผมก็ไม่ค่อยเห็นคนที่ทำ Mobile ได้ด้วยและทำ Back-end ได้ด้วย
  • แต่เช่นเดียวกับ web client นั่นคือ mobile dev บางคนก็ทำ back-end web ได้ หรือไม่ก็ใช้ Backend-as-a-service เอาเลย

สรุป Mobile development

  • หา native developer ครับ iOS, Android ก็ว่าไป แล้วหา back-end web developer อีกคนนึง
  • ถ้า app ไม่ได้ซับซ้อนมาก การใช้ Hybrid app ก็โอเค คงต้อง Ionic เป็นหลัก

————————————-

สรุปทั้งหมด

เขียนออกมายาวมากกก ไม่รู้จะตัดตรงไหนออกเหมือนกันครับ แนวทางการหา developer ก็ตามที่ผมกล่าวข้างต้นครับ แต่ในรายละเอียดก่อนการร่วมงานจริงๆ ต้องดูอีกเยอะ เขียนเป็นอีก blog ได้เลย และเทคโนโลยีทั้งหมดที่กล่าวมาข้างต้นก็เป็นแค่ overview เฉยๆ นะครับ จริงๆ มีอะไรอีกเยอะมากในแต่ละฟิลด์

ก็หวังว่าจะเป็นประโยชน์นะครับ ผมว่ายุคนี้เราปฏิเสธไม่ได้ครับว่าไม่ว่าเราจะทำธุรกิจอะไรก็ตาม การนำ IT เข้ามาเป็นการเพิ่มประสิทธิภาพให้องค์กรของเราได้ โดยเฉพาะสาย healthcare นี่ผมว่ายังมีโอกาสทำอะไรได้อีกเยอะครับ ก็ถ้าเพื่อนหมอ หรือสายอื่นๆ ก็ตามคนไหน อยากทำเว็บทำแอพ ก็คุยกันได้ครับ ถ้าหาคนให้ได้ผมจะช่วยหา :)

rathjung

rathjung

A doctor who interested in tech startup, a front-end web developer and UI/UX designer
บทความทั้งหมด