By BouncingBreasts on Tag:

สวัสดีครับ ผมสนใจศึกษา Node js อยู่ แต่ก่อนจะลงลึกไปมากกว่านี้ อยากให้ท่านลองเล่าสักนิด "ในการทำงานจริง" ท่านเคยเจอว่าต้องเขียน Node js ทำอะไรบ้าง ขอบคุณล่วงหน้าครับ

... ความจริงไม่ต้องเจาะจงว่า Node js แต่เป็น framework อื่นคล้าย ๆ กันก็ได้ครับ

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

พูดง่าย ๆ เลยก็คือ ผมเกิดคำถาม : ตกลงเรียนมาทำซ__อะไร น่ะครับ (ฮา ขำ ๆ นะ แต่มีแอบเครียด)
ตั้งแต่ C++ แล้วล่ะครับ เรียนมาแล้วไม่ได้เอามาทำงานเลี้ยงชีพ ตกลงเรียน pointer to function มาเพื่อ ?

ก็เลยมาลองถามดูน่ะครับ Node js นี่ ในโลกจริง เขาใช้ทำงานอะไรกัน

ถ้าตามที่ตอบไปทีแรกอาจจะไม่ตรงเท่าไหร่เพราะมันกล่าวครอบคลุม JS ไปเลยคือใช้ทั้ง frontend, backend, ได้จนถึง DB แต่ถ้าเอาแค่ตัว NodeJS ก็ backend ฮะ จะรวมพวก frontend ที่เป็น server-side render ไปด้วยก็ได้

คำตอบที่ผมคาดหวังก็คือ frontend เช่นอะไรบ้าง แบบฟอร์มธนาคารอะไรอย่างนี้หรือเปล่า (ผมไม่รู้เลยนะครับ)
หรือ backend ที่ว่าเช่นอะไรบ้าง เคยได้ยินมาว่ามีตำแหน่ง Database Programmer เลย (ซึ่งผมก็แค่ได้ยินมา ไม่รู้จริงไม่จริงยังไงนะครับ) เขาถูกสั่งงานอะไรบ้าง

แบบนี้เป็นต้นน่ะครับ

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

เพราะงั้นสิ่งที่หลักสูตรส่วนใหญ่สอน จะไม่มุ่งเน้นสอนของที่ปัจจุบันใช้งานกันจริง แต่จะเน้นในการปูความรู้พื้นฐาน ที่ช่วยให้การเรียนรู้ของที่ใช้งานกันอยู่ได้ง่ายขึ้น ทั้งปัจจุบันและอนาคตครับ

ส่วนใหญ่เท่าที่เห็น ก็จะเรียน C, C++ เพื่อทำความเข้าใจวิธีการเขียนโปรแกรมเบื้องต้น หรือไม่ก็เรียน Java เพื่อทำความเข้าใจหลักการ OOP ด้วย ซึ่งทั้งหมดเป็นพื้นฐานของภาษาใหม่ๆหลายๆภาษา ทำให้อนาคตการฝึกเรียนภาษาใหม่ๆทำให้ง่ายขึ้น

แน่นอนว่าในการทำงานจริง การรู้ภาษาอย่างเดียวยังไม่เพียงพอ ต้องรู้การนำภาษานั้นไป apply ต่างๆด้วย เช่น frontend backend ต่างๆ ซึ่งหลักสูตรต่อจากนี้ก็จะเรียนพื้นฐานเรื่องเหล่านั้น ด้วยเครื่องมือหรือ framework ต่างๆที่อาจจะไม่ได้ยอดนิยมในการทำงานจริงเท่าไหร่ในขณะนั้นเช่นเดียวกันครับ

สำหรับใครที่อยากเรียนของที่ปัจจุบันใช้งานกันจริงๆ แนะนำให้ไปเรียนจากพวกคอร์สระยะสั้นแทนจะตอบโจทย์กว่าครับ

ปล. ผมเคยเป็นผู้ช่วยอาจารย์คณะ com sci ก็เคยเจอคำถามราวๆนี้จากนักศึกษาเหมือนกัน

ผมคิดว่าภาษาส่วนมากมันใช้แทนกันได้เกือบหมด ยกเว้นภาษาเฉพาะทาง เช่น R, Julia, Shell script ถ้าบอกว่าเขียนโปรแกรมภาษานี้ได้ก็คือควรจะเขียนแอพที่ได้รับมอบหมายได้ในภาษานั้นๆ (ไม่ใช่ว่า resume บอกว่าเขียนภาษา Rust ได้แต่ถามจริงๆ บอกว่าเคยลองอยู่นิดหน่อย แค่โปรแกรมตัดเกรด)

สิ่งที่จะต่างก็คือภาษามันมี ecosystem ของมันซึ่งบางอันมันกินขาดจริงๆ เช่นงาน data sci, AI ยังไงก็ต้องใช้ Python เพราะไม่ใช้ก็ต้องไปสร้าง numpy, scipy, pytorch ในภาษาอื่นก่อน ตรงนี้ผมมองว่าเหมือนกระบี่ที่ต้องหยิบมาใช้ให้ถูกเล่มถูกโอกาส

ของ JavaScript จุดที่คิดว่า ecosystem กินขาดกว่าทุกภาษาก็คือ

  1. งานฝั่ง frontend ซึ่งโดน browser ผูกขาด ตรงนี้ก็จะมีพวก React, Vue ที่ได้รับความนิยม และพอมี Server side rendering แล้วเส้นแบ่งงาน frontend-backend มันเริ่มบางลง ผมมักจะเห็น full stack developer ที่ไม่มีความเข้าใจ backend มากขึ้นแล้วสร้างปัญหาโดยไม่รู้ตัว (เช่นสร้าง global state ซึ่งทำให้เกิด SSR bugs) พวกนี้ภาษาอื่นๆ เข้ามาแทนไม่ได้เพราะ optimize bundle size ของ WASM สู้ไม่ได้ และบางภาษามีระบบ compile to JS (เช่น Kotlin/JS, GWT) ก็จะเจอ leaky abstraction ที่ในระดับสูงก็ต้องเข้าใจ JS อยู่ดี. ที่น่าสนใจคือ JavaScript build ecosystem กำลังพบว่าภาษาอื่นมันเร็วกว่า JS จริงๆ และ build tool ที่เขียนในภาษาอื่น (esbuild, Bun, Astro, turbopack, parcel, swc) กำลังเข้ามาแทนที่ pure JS แบบ Webpack-Babel
  2. งานฝั่ง backend ซึ่งผมพบว่ามันกลายเป็น new PHP ไปแล้ว นศ จบใหม่สัก 5 ปีที่ผ่านมามักจะเขียน Node เป็นมากกว่า PHP (ไม่นับมหาวิทยาลัยที่สอน JS หรือ PHP ในหลักสูตร) เพราะเรียนภาษาเดียว จบงาน freelance ส่วนมากได้เลย ส่วนตัวผมคิดว่าถ้าไม่นับ SSR แล้ว Go ดีกว่า Node มากทั้งความอ่านง่ายของโค้ด และประสิทธิภาพ เนื่องจาก Node เป็น single thread ทำให้มันช้ากว่า แต่เขียนง่ายไม่ต้องระวังเรื่อง concurrency มาก ในมุมผู้ประกอบการ Go หาคนได้ยากกว่า และแพงกว่า Node เลยอาจจะยังเลือกใช้ Node กันอยู่. Library ที่กินขาดทุกภาษาใน Node backend ผมคิดว่าคงเป็น socket.io ซึ่ง WebSocket ภาษาไหนๆ ก็มี แต่ว่า socket.io มันเก่าแก่ เกิดก่อน WebSocket ทำให้มี transport หลายแบบมากกว่า
  3. ผมเริ่มเห็น Node.js เอาไปใช้ใน embedded interpreter มากขึ้น (ไม่เกี่ยวกับ embedded system) ซึ่งเดิม Lua แทบจะผูกขาดวงการนี้ ตอนนี้ก็จะเริ่มเห็น dnscontrol, Pulumi ที่เอา JS ไปทำ infra as code, k6 ที่เอา V8 มาเขียน load testing script, polkit ใช้ JavaScript เขียน authorization policy ใน Linux หรือ njs ที่ nginx ทำมาสู้กับ OpenResty ที่ใช้ Lua,. ที่น่าจับตามองคือ Cloudflare Workers ที่เขาคิดว่า ถ้า JavaScript รัน untrusted code ใน browser ได้อย่างปลอดภัยแต่ไม่ต้องใช้ VM มันก็น่าจะใช้รันงาน serverless ได้ด้วยต้นทุนที่ต่ำ ซึ่งภาษาอื่นเวลา sandbox แบบนี้โดนแหกคุกมาแล้วหลายครั้ง (JVM บน Browser, RPython ก็เลิกแล้ว)
  4. Desktop application ยุคใหม่ๆ มักจะเขียนด้วย Electron ก็คือเว็บ frontend ผมคิดว่ามันมาจากที่มันเขียนง่ายกว่า, cross platform ทันทีแบบไม่ต้องทำอะไร และมันฟรี เมื่อเทียบกับ Qt ที่ต้องซื้อ license, .NET ที่ Microsoft เอาแน่เอานอนไม่ได้ว่า UI Framework วันนี้จะไป WinForms, WPF, Silverlight, XAML หรือ MAUI ดี แต่คิดว่าเร็วๆ นี้ Flutter (ภาษา Dart) อาจจะกำลังมา
  5. Game UI ก็กลายเป็น JavaScript มากขึ้น (แต่อาจจะไม่ใช่ HTML) จากความนิยมของ CEF ที่ฟรี และการล่มสลายของ Flash ที่ Scaleform ใช้ เช่น Guild Wars 2, FiveM (CEF), CS:GO, Dota 2 (Valve Panorama), Sea of Thieves, World of Warship, PUBG (Gameface) ไปจนถึงทั้งเกมแบบ shapez, Game Dev Tycoon
  6. React Native ยังเป็นที่น่าจับตามองอยู่ว่า cross platform mobile application จะไปทางไหน สุดท้าย Flutter จะทลาย React Native ให้ตกกระป๋องไปได้มั้ย หรือ Microsoft จะทำ .NET MAUI ได้สำเร็จ

ในไทยตอนนี้ C++ หางานยาก (ถึงยากมาก) ครับ แต่บอกเลยมั่นใจได้ว่าถึงได้งานจริงก้ไม่ได้เขียน pointer-to-function นะ (ฮา) ถ้าเป็นทีมผม ผมจับเขียน std::function หมดล่ะ ง่ายกว่า

แต่ในประเทศที่เป็นต้นทางของเทคโนโลยีนี่ยังไปได้อยู่นะ คือภาษาดัง ๆ เอนจินดัง ๆ พอลองขุดลงไปก็จะเจอ C++ เต็มไปหมด (ยิ่ง OS นี่จะเจอ C ด้วย) ถึงแม้ว่า rust จะเริ่มเข้ามาแทนบ้างแล้วครับ

ส่วนสายเว็บผมว่ายังไงของใหม่กว่าก็น่าเล่นกว่าเสมอ rust ก็เลยมาครับ (แต่พูดตรง ๆ C++ string processing ก็ยังไม่ค่อยดี ต้องใช้ lib เพิ่ม (จุดแข็งก็อยู่ที่ใช้กับสตริงของอะไรก็ได้ ไม่ได้บังคับเหมือนภาษาอื่น) ยิ่ง C แล้วคือเข้าขั้นยากเลยล่ะ)

ในการทำงานจริง คำถามอาจจะกลับด้านครับ คือไม่ได้ตั้งต้นมาจากว่าเราจะใช้ Node.js ทำอะไรได้บ้าง

แต่มาจาก business problem ว่าเรามีปัญหาหรือต้องการ feature อย่างนึง เราจะแก้ยังไงได้บ้าง Node.js ก็จะมาเป็น option นึงจากหลายๆทางเลือก

ทั้งนี้ บริษัทส่วนใหญ่ จะมี technology ที่ใช้อยู่แล้ว เลือกมาจากหลายๆอันตาม strategy ที่คิดกันมา สุดท้ายอาจจะจบตรงที่ project นี้เราจะใช้ Node.js หรือเราจะใช้ backend technology ตัวอื่นดี เช่น .NET / Java / Golang / Python

เท่าที่เจอมา ส่วนใหญ่คนที่เลือก Node.js มาแก้ปัญหา มักจะมีเหตุผลเหล่านี้

  • ง่าย ขึ้น project ใหม่ๆ เร็วๆ ได้สะดวก
  • มีคนใช้เยอะ ตัวอย่างหาได้ไม่ยาก library opensource มีให้ใช้เยอะ
  • javascript/typescript เป็นภาษาที่ใช้ทำ frontend ได้ด้วย ทีมเลยอาจจะเป็น fullstack ได้เลยทีมเล็กๆจบงายทุกอย่างได้

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

  • พอ project ขึ้นง่าย ตอนแรกๆก็ไม่ได้คิดว่ามันจะโตมาก ซับซ้อนขึ้น การวาง structure project เริ่มทำให้แก้ไขยาก
  • performance ของแอพไม่เร็วพอ (เมื่อเทียบกับ cpu/ram consumption)
  • opensource library หลายๆตัวเริ่มไม่น่าเชื่อถือ หรือเลิกทำ
  • application เริ่มติดข้อจำกัดของการทำงานแบบ single thread

ขอบคุณครับ
เคยเขียน HTML ขึ้นเป็นหน้าเว็บ แล้วก็พอจะรู้จักการวาง script แล้วพ่นแท็กใส่บริเวณนั้นอยู่บ้าง
แต่เพราะไม่เคยเจอกับงานจริง โปรเจ็คจริง เลยรู้สึกว่าตัวเองเสียเปรียบมากเวลาถูกสัมภาษณ์

ความจริงของสถานที่ทำงานไม่เหมือนห้องเรียน สิ่งที่ผมมักถูกถามคือ "คุณมีประโยชน์อะไร ?"
เลยทิ้งความคิดไปแล้วว่าจะมีสถานที่ไหนรับไปเรียนรู้งานบ้าง (ผมเลยเลข 3 เข้าไปแล้วครับ)

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

แนะนำว่า ลองซื้อคอร์สจาก udemy ที่ชอบมีช่วงลดราคาเหลือ 299-399 บาท แล้วหาคอร์สเรื่อง NodeJS มาศึกษาดูครับ
พวกคอร์สเหล่านี้ส่วนใหญ่จะให้ลองทำจริง ทำให้เห็นว่ามันเอาไปพัฒนาต่ออะไรได้บ้างครับ

ส่วนตัวผมมีอาชีพหลักที่ไม่ได้เป็น Dev อยู่ แต่ทุกวันนี้คือใช้ความรู้จาก udemy นี่แหละครับ มา dev solution ต่างๆ ใช้ในที่ทำงานครับ จนแทบจะ dev เป็นหลัก งานจริงเป็นรองไปแล้ว

เอาที่ทำมาตลอดหลายปีนะครับ
ทำ backend ให้แอพรับส่งผู้โดยสาร
ทำ micro service ส่ง notification
ทำ web scraping รัน daily task
ทำ backend ให้ระบบ wallet
ทำ backend ให้ระบบ resource management
ทำ ระบบ generate video
ทำ ระบบ machine learning สำหรับวิเคราะ+จับคู่รูปภาพ
ทำ ระบบ trade crypto เชื่อมกับ exchange

ทั้งหมดนี้ไม่จำเป็นต้องใช้ nodejs ก็ได้ ภาษาอื่นๆก็จบงานได้ ขอแค่ภาษา+runtime มีความสามารถถึง
แต่ผมเลือก nodejs เพราะถนัดแล้ว เข้ามือแล้ว จริงๆต้องบอกว่าผมสาย C# เสียมากกว่าแต่โดนโปรเจคแรกคือ ระบบ generate video ที่เขาวางเป็น nodejs ไว้แล้ว เลยต้องมางมๆ จนเข้าใจว่า nodejs มันก็เจ๋งเหมือนกันนี่นา จากนั้นก็ nodejs มายาวๆ

ถ้าให้แนะนำคือหาโปรเจคง่ายๆทำ หรือถ้ามีโปรเจคที่เคยทำแต่เขียนจากภาษาอื่นก็ลองเอามาสร้างใหม่เป็น nodejs ดูครับ แบบนี้จะให้การเรียนรู้แบบงานจริงๆได้ดีครับ

ส่วนใหญ่จะคาดหวังว่าแค่ Insert/update ธรรมดาแล้วถูกต้องก็พอครับ แต่พอทำไปๆ เราจะเจอโจทย์ยากเอง
แต่ถ้าไปรับงานต่อคนอื่นอันนี้จะโดนคาดหวังว่าต้องเก่งระดับหนึ่ง

แวะเข้ามาอ่านครับ

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

อ่านรู้เรื่องบ้าง ไม่รู้เรื่องบ้าง แต่อ่านเพลินดีครับ น่าเสียดายที่รู้จักเว็บนี้ช้าไป ในช่วงที่คนตั้งกระทู้ไม่ค่อยคึกคัก 55+

พิมพ์ซะยาว แต่ไม่ได้ตรงกับหัวข้อกระทู้เลยแม้แต่ย่อหน้าเดียว ขออภัย จขกท ด้วยนะครับ

เข้าใจครับ ผมก็แนว ๆ นั้นแหละ 555
ที่ไหนกวนทีน เยาะเย้ย มีเกรียนบ่อย ๆ ผมจะพยายามหลีก ๆ
เว็บบอร์ดพวกเกมออนไลน์มักเป็นแบบนั้นกัน

ผมไม่ขอพูดในเชิงเทคนิคแล้วกัน เนื่องจากมันมีหลายปัจจัย แต่ถ้าเป็นเรื่องเขียนแล้วขายให้ลูกค้า ก็ต้องดูว่าคุณทำเอง หรือมีทีม ถ้ามีทีมก็ต้องเลือกภาษา หรือ framework ที่จะหาคนได้ง่ายในตลาด มี document เยอะเพียงพอที่จะให้คนที่รับงานไปทำสามารถศึกษาเพื่อเขียนต่อได้ มีการบำรุงรักษา และติดตั้งที่ง่าย เพราะเวลาที่คนทำลาออกจะก่อปัญหาให้คุณมหาศาลถ้าดันไปเลือกภาษาที่มีคนใช้งานน้อย

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

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

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

เคยทำที่แรกและ learn the hard way มาครับ

  • อย่าว่าแต่ซูเปอร์แมน ผมอ่อนกว่าหลาย ๆ คนด้วยซ้ำ
  • การจะเชี่ยวชาญสักภาษาให้ได้ต้องใช้เวลาหลักปีและความอดทน ยังไม่นับเรื่องอิทธิบาท 4
  • ทำให้ไม่กล้าคิดอีกเลยที่จะไปตายเอาดาบหน้าขณะสัมภาษณ์
  • แม้จะมีความรู้ C++ Java C# ก็ตาม คือมันสำคัญแต่มันไม่ได้เป็นยาวิเศษ
  • Runtime error "หลาย ๆ ครั้ง" ทำให้ผมปวดไมเกรน บางครั้งก็เคยร้องไห้ ผมเคยทำให้เพื่อนร่วมงานรำคาญ
  • ทำให้รู้ด้วยว่าตัวเองยังต้องฝึกเย็น ๆ นิ่ง ๆ อีกเยอะ
  • และทำให้เข้าใจว่าความรู้กับปัญญาไม่เหมือนกัน รู้มากไม่ได้การันตีว่าจะแก้ปัญหาได้

เพราะงั้น Freelance งานแบบนี้ สำหรับผมน่ากลัวมากครับ

... แต่ตอนสมัครไปเรียน ASP.NET อาจารย์เคยเปรยว่าคนสายนี้ถูกคาดหวังว่าต้องเป็นซูเปอร์แมน รู้มันทุกอย่าง ผมก็เลยคิดว่า :
"..."

ก่อนอื่นเลย NodeJS เป็นรันไทม์ภาษา JavaScript (JS) มันทำให้เรารันคำสั่งภาษา JS นอกเว็บบราวเซอร์ได้เพราะตัวมันเองใช้ V8 JS engine เหมือนกับบราวเซอร์เจ้าดัง และมันไม่ใช่ Framework ถ้าพูดถึง Framework ฝั่ง Backend ก็ NestJS ฯ, Frontend ก็พวก Angular, VueJS, NextJS ฯ
ในแง่ของการใช้งานจริงผมคล้ายหลายๆท่านอธิบายไว้ครับ เช่น ทำ Backend ระบบจัดการข้อมูล, ใช้ทำหน้าที่ batch ให้โหลดข้อมูลจากอีกที่มาเก็บไว้ ส่วนนึงขึ้นกับความถนัดของเราและทีม

เท่าที่ได้เขียนมา ผมรู้สึกว่างานส่วนใหญ่ที่เจอกับภาษา JavaScript (และ Node.js) มักจะเป็นแนวๆ "เขียนเชื่อม" (เท่าที่ผมเรียกเองนะครับ) คือแนวๆ ว่า ข้อมูลเราก็เอาจาก Database, assets ต่างๆ ก็เอามาจาก storage อื่นๆ, หรือในฝั่ง Browser ก็ยังพึ่งความสามารถของ framework ต่างๆ รวมทั้งความสามารถของ browser เอง ในการทำงาน

ดังนั้น โค้ดที่เราเขียน ก็มักจะไม่ได้เหลืออะไรไปมากกว่า เรียกข้อมูล รับข้อมูล ตรวจสอบ ส่งต่อ หรือส่งไปเก็บ หรือคำนวณนิดหน่อยครับ ซึ่ง ส่วนใหญ่ก็คือระบบทั่วไปที่ เรียกข้อมูลมาดู สร้าง ลบ แก้ วนไปครับ จะยากง่ายก็คือตัว policy หรือลักษณะข้อมูลของแต่ละระบบ

แต่ถ้ามาพูดถึงความสะดวกในการเอามาใช้งาน

  • ด้วยความที่มันเป็น script เลยไม่ต้องคอมไพล์ สะดวกใช้งาน
  • ด้วยความที่ว่า Node.js และ Browser เป็นภาษา JavaScript เหมือนกัน ดังนั้น ผมว่ามันสะดวกดี
  • ขึ้น project ง่าย (ผมว่าใกล้ๆ กับ PHP แต่ระบบ module มันติดมาให้แล้ว เลยอาจจะง่ายกว่า)
  • syntax ที่ยืดหยุ่น (และพาหลายคนงง) บวกกับ REPL ทำให้มันสามารถเอามาใช้เป็น command-line หรือ script หลายๆ อย่างได้ โดยไม่ต้องกังวลเรื่อง Windows/macOS/Linux มากสักเท่าไหร่

ลืมพูดการทำงานจริงของตัวเองไปเลย

ถ้าไม่ได้ใช้ Framework ที่กำหนดว่าต้องใช้อะไรเป็นพิเศษไหม โค้ด Node.JS ที่ผมเขียนใช้งานจริงแทบจะเป็น Boilerplate ทุกอย่างเลย แค่ว่าผมจะเขียนแบบ Procedural ให้คนอื่นตามอ่านได้ง่าย ลองเขียนตามหลักสถาปัตยกรรมซอฟต์แวร์แล้วออกมาไม่จืดเลยทีเดียว ระดับที่ว่า TS ก็ไม่ช่วย อย่างแรกสเกลงานมันมีแค่นั้น อย่างสองคือยิ่งถ้าเขียนซับซ้อนขึ้น Test ก็เยอะขึ้นเป็นเงาตามตัว

กฎเหล็กที่ผมยึดมั่นตอนเขียน Node.JS ทุกครั้งคือ อย่ากลัว Error และพยายามจัดการกับมันทุกครั้ง ให้ศึกษาเลยว่าแต่ละคำสั่งที่เสี่ยง ๆ เช่น Disk IO, Database, 3rd Party Lib จะปล่อย Error อะไรออกมาบ้าง เพราะ Node.JS ชอบปล่อยปัญหาให้เกิดตอน Runtime และ TS ก็ช่วยอะไรไม่ได้ อย่าแค่ว่าอัดใส่ try...catch แล้วจบ โค้ดผมติด try...catch ส่วนมากผม Throw ต่อไปยัง Upper Stack ด้วยซ้ำเพราะจะปล่อยให้ตัวด้านบนจัดการแสดง Error อย่างถูกต้องอีกที พยายามอย่า Default Value ของ Data ที่เข้าไปในระบบด้วยถ้าฟิลด์ใด ๆ จำเป็นสำหรับกระบวนการนั้น ปล่อยให้มัน Error แล้วตอบกลับอย่างถูกต้องดีกว่า จากนั้นกำหนดขอบเขตการทำงานให้ชัดเจนว่า โปรแกรมจะได้รับอะไร แล้วจะตอบกลับด้วยอะไร เท่านี้เราจะได้เขียนเฉพาะที่มันได้ทำงาน แล้วเอาเวลาที่เหลือไป Smooth Out ไปกลบ Error ที่เป็นไปได้ในระหว่าง Process แล้วเขียน Test ปิดเฉพาะส่วนที่ต้องใช้งาน แล้วที่เหลือให้เป็นงาน Smart Monkey ไปทุบงานของเราให้เละอีกทีแล้วให้เราตามไปอุดต่อ

สรุปคือ ถ้าไม่ได้ใช้ Framework ครอบทับ สเกลงาน Node.JS จะเท่ากับความสามารถของโปรแกรมเมอร์ คูณด้วย 0.1 เพราะกับงานสเกลใหญ่ด้วย Node.JS มันตีขอบเขตและออกแบบยากจริง ผมคิดว่าผมใช้เวลาเขียนโปรแกรมง่าย ๆ กับ Node.JS มากกว่าภาษาอื่น ๆ ด้วยซ้ำ แค่ว่า Entry Point ของภาษามันง่ายมาก ๆ แค่นั้น แต่เขียนจริงให้เรียบร้อยและคงทนน่ะยากมาก ฉะนั้นไม่ต้องโทษตัวเอง ^^

เขียนโปรแกรมอ่าน id card รันเป็น local server ง่อยๆ ในเครื่อง client ให้เว็บมาเรียกเพราะนั่งกดๆ webUSB แล้วขีเกียจก็เลยใช้ node นี้่แหละ google หา lib หาวิธีเขียนชั่วโมงนึง จบ

ส่วนตัวใช้ Node อยู่แค่ 2 อย่างครับ

  • เขียนเว็บ Frontend (ผ่าน Framework อย่าง React)
  • เขียนพวก helper script สลับกับ Python แต่แค่บางกรณี เช่นที่ต้องรันบน Windows ด้วย ส่วนบน Unix/Linux เพราะผมชอบ script ที่โบราณอย่าง bash มากกว่า

ส่วนงาน Backend ชอบเป็นภาษาที่เป็น strongly typed มากกว่าครับ อันนี้แค่ความชอบส่วนตัว :)

เคยใช้ทำ API อยู่บ้าง ผมว่า ... มันก็เป็นภาษาที่ดีจนกระทั่งมันมีปัญหาน่ะครับ (ฮา)

ถ้ามี Resource เหลือเฟือ มีซีพียูเหลือเฟือ มีแรมเหลือเฟือ แล้วไม่ได้มีปัจจัยอะไรมาบีบเยอะมากมาย ผมว่า JS ก็ดีครับ มันก็ง่ายดี และมันก็มักง่ายได้เยอะดีเหมือนกัน

แต่ถ้าแบบว่าเริ่มมี requirement อะไรมาบีบเยอะขึ้นก็ต้องวิเคราะห์ดูครับว่า ใช้ JS แล้วมันจะโอเคหรือเปล่า แต่เดี๋ยวนี้มันก็ดีขึ้นมากแล้วครับ คือ resource สมัยนี้มันดีกว่าเมื่อก่อนน่ะ (ตัว runtime มันก็มีส่วนแหละแต่ผมให้ที่ฝั่ง hardware มากกว่า 555)

มันทำได้หลายอย่างมากครับ แต่เรื่อง performance/throughput คงไม่สู้พวก Rust / C อะไรแนวนั้น จะเขียนให้เป็น OOP จ๋าๆ ก็ได้แหละ แต่ข้อจำกัดทางภาษาก็เยอะ

แต่ถ้าสนใจเอาไว้หางานสาย opensource แนว client/server ก็ nodejs, php, sql (mysql) นี่แหละครับ

เขียน go,Ruby,Rust ได้เงินเดือนจะสูง แต่ไม่ค่อยมีแหล่งงานรองรับ

ถ้าไปสาย enterprise ก็ Java / C / .NET / SQL Server / Oracle ครับ