[รู้อะไรไม่สู้รู้งี้ ตอนที่ 1] คำแนะนำน้อง ๆ วัยเรียนหรือผู้ที่ต้องการทำงานสาย Software Engineer

Thanaphoom Babparn
13 min readAug 30, 2022

--

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

Reference To Another Part
[รู้อะไรไม่สู้รู้งี้ ตอนที่ 1] คำแนะนำน้อง ๆ วัยเรียนหรือผู้ที่ต้องการทำงานสาย Software Engineer
[รู้อะไรไม่สู้รู้งี้ ตอนที่ 2] กรณีศึกษาและคำแนะนำสู่น้อง ๆ ที่เริ่มต้นในสายงาน Software Engineer (Junior/Entry level)
[รู้อะไรไม่สู้รู้งี้ ตอนที่ 3] มุมมองของผมเกี่ยวกับการพัฒนาในสายงาน Backend Software Engineer จาก Mid Level สู่ Senior และต่อ ๆ ไป

Introduction

สำหรับบทความซีรีย์นี้ผมมีความคิดที่จะเขียนมาซักพักแล้ว เพราะเนื่องจากว่าในปัจจุบันสายงาน Software Engineer (SWE) ได้รับความนิยมอย่างมากมาย ไม่ว่าจะทั้งความ Flexible และเป็นสายอาชีพที่ได้รับผลกระทบจาก Pandamic ไม่มากนัก เพราะสามารถทำงานแบบ Remote ได้แถมยังสามารถส่งงานได้ตามปกติ และมากกว่านั้นมีการถามตอบในกลุ่มเป็นจำนวนมากถึงการเริ่มต้นเขียนโปรแกรมว่าควรจะเริ่มต้นยังไง แต่บางครั้งกลับพบว่ามีการถามคำถามซ้ำ ๆ กันเป็นจำนวนมาก และในบางครั้งก็ได้รับคำตอบที่ไม่น่าพึงพอใจกับคนอ่านซักเท่าไร ทำให้ผลลัพธ์ที่ตามมาคือ

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

“การเขียนโปรแกรมมันยากจังวะ” จึงกลายเป็น Keyword ที่โผล่ขึ้นมาเรื่อย ๆ (ซึ่งอันนี้ไม่ติดอะไร เพราะแต่ละบุคคลมีทักษะ จุดแข็งจุดอ่อน และแนวคิดไม่เหมือนกัน)

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

Self-introduction

สวัสดีครับทุกคน ผมชื่อมาร์ทนะครับ ยินดีที่ได้รู้จัก ผมเรียนจบระดับปริญญาตรี (Bachelor’s Degree) แต่ไม่ใช่มหาลัย Top ของประเทศนัก ปัจจุบันอยู่ในสายงาน Software Engineer ที่อาจจะ Focus เป็นหลักไปทาง Backend ที่มีกลิ่นไอ Cloud Engineer/Architect เขียน Frontend ได้บ้าง สามารถเป็น Andriod/Flutter Dev ได้นิดหน่อย JS/TS ได้นะแต่แต่ง CSS บน Website ไม่เก่งเอาซะเลย ไม่เป็นที่รู้จักซักเท่าไหร่เพราะชอบหลบอยู่มุมห้อง มักจะหลับเวลานั่งเรียนนาน ๆ และทำอะไรเบื้องหลังมากกว่า

ประสบการณ์ทำงาน 202208: 3 ปี 2 เดือน + Career Break 1 เดือน

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

Software Engineering คืออะไร?

Software Engineering คือการเขียนโค้ดรึเปล่า? Software Engineer, Software Developer, Programmer คือกรรมกรเขียนโค้ด? การเขียนโปรแกรมเป็นแค่การ Copy + Paste หรือก๊อปวางจริง ๆ หรอ ดังนั้นเรามาเริ่มทำความเข้าใจกันใหม่ ถอดสมองแล้วลองอ่านตามที่ผมต้องการจะสื่อ

Software Engineering => Software + Engineering

Software: ชุดคำสั่ง (Instructions) เรียงกันเป็นโปรแกรมคอมพิวเตอร์ เพื่อสั่งงานให้คอมพิวเตอร์ทำงานตามที่เราสั่ง

Engineering: การประยุกต์ใช้ในเทคโนโลยี วิทยาศาสตร์ คณิตศาสตร์ สิ่งแวดล้อมและทรัพยากรต่าง ๆ เพื่อสรรสร้างนวัตกรรมอย่างมีประสิทธิภาพ ปลอดภัย เชื่อถือได้

Software Engineering: กระบวนการพัฒนาโปรแกรมคอมพิวเตอร์ให้มีประสิทธิภาพ ถูกต้อง เชื่อถือได้ มีผลลัพธ์การทดสอบ รวดเร็ว ปลอดภัย (ไม่ระเบิดบน PROD? 😅)

เป็นสายงานที่อยู่ในหมวด Information Technology (IT) และ Information Systems (IS)

การเขียนโค้ด คือหนึ่งในวิธีที่จะได้ Software ออกมา แต่มันเป็นแค่ส่วนหนึ่ง และอาจจะเป็นส่วนน้อยไปเลยซะด้วย

Source: What is Software Engineering?

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

  • Operating Systems (OS) เช่น Linux, Windows, Android, macOS
  • Drivers ของอุปกรณ์ต่าง ๆ ที่ใช้กับ Computer สมัยนี้หลาย ๆ คนอาจจะไม่เคยใส่แผ่นลงไดรฟ์เวอร์แล้ว
  • Application ต่าง ๆ บน Devices ระดับนี้จะใช้ High Level Languages เขียนแล้ว
  • Chatbot ที่ตอบ Line ตอบ Messenger คุณน่ะแหละ
  • Smartwatch (Embedded + IoT)
  • Artificial Intelligence (AI) ก็คือ software เป็นศาสตร์ที่ทำให้คอมพิวเตอร์มีความรู้สึกนึกคิดลอกเลียนจากสิ่งมีชีวิต
  • Cryptocurrency ฮั๊นแน๊ พลาดไม่ได้เลยน้า

และอีกมายมากนับไม่ถ้วน จนไม่อยากจะนับ ฮ่า ๆ

เกร็ดเล็กน้อยคือ ส่วนใหญ่ที่ทุกคนมองเห็นกันและอยากจะเป็นกันคือ “Enterprise level software development” ทำเว็บทำแอปนู่นนี่ เพื่อทำนู่นนี่ ช่วยเหลือคนนู่นนี่ เอากำไรมาจากนู่นนี่ ก็คิดว่าน่าจะประมาณนี้สำหรับคำจำกัดความแบบสั้น ๆ

เรื่องพื้นฐานที่ต้องทำความเข้าใจ

ไม่มี Degree ตรงสายก็ทำสายนี้ได้ แต่ดีที่สุดคือมี Bachelor’s Degree ขึ้นไป

  • การจะฝืนกฏข้อนี้ส่วนของใบปริญญาได้คือการเข้า Coding Bootcamp หรือการมี Profile ที่สามารถทำงานได้จริง
  • หากเป็น Exceptional ไม่ได้ Company ต่าง ๆ จะปฎิบัติกับเราเป็นอีกแบบนึง ซึ่งอีกตัวเลือกคือการเป็น Freelance
  • Bachelor’s Degree มีผลต่อการขอ Working VISA ในต่างประเทศบางประเทศ

มหาลัยสอนพื้นฐานให้แล้ว แต่หลังจากนั้นเราต้องไปศึกษาเองตามความสนใจ (ตามหา Unlock moment)

  • การเขียนโปรแกรมเบื้องต้นอย่าง Programming Paradigm, การตัดสินใจ (If-else) การทำซ้ำ (While-Do/Repeat-Until)
  • พื้นฐานต่าง ๆ อย่าง Data Structures & Algorithms ในขั้นต้น
  • ระบบเครือข่าย (Networking) พื้นฐาน
  • Database Management System (DBMS)
  • วิชา Software Engineering อาจจะมีหรือไม่มีสอน แล้วแต่หลักสูตร

ยังไม่ต้องสนใจ Keywords ด้านบนนี้ซักเท่าไหร่ ตอนนี้ให้รู้ไว้ว่ามันมีอยู่ก็พอ

การเรียนออนไลน์และการทำงาน Remote เป็นเรื่องปกติของสาย Software Engineer ในปัจจุบัน

  • มี Computer และ Internet ก็สามารถทำอะไรได้หลายอย่างแล้ว
  • และเนื่องจากการทำงานอยู่กับหน้าคอมเยอะมาก ๆ แถมการส่งงานบางทีก็เป็นการ Commit/Push/Review Code ทำหน้าคอม วัน ๆ ก็เป็นประมาณนี้
  • เนื้อหาเวลาศึกษาเพิ่มเติมก็ต้องหาเอาจาก Internet ซึ่งมีการจัดแบบ Onsite แหละ แต่เวลาส่วนใหญ่เราก็เรียนออนไลน์เอา

การศึกษานอกห้องเรียน และการขับเคลื่อนการเรียนรู้ด้วยตัวเอง สำคัญมากสำหรับสายนี้

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

การเริ่มต้น ยิ่งเร็ว ยิ่งดี ยิ่งได้ทำผิดพลาด เราอาจจะรู้จุดพลาดมากกว่าคนอื่น ๆ

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

[Fact] โอกาสการเข้าถึงเนื้อหาและอุปสรรคในชีวิตเป็นสิ่งที่มีอยู่จริง

ในหลาย ๆ ครั้งเราอาจจะต้องเครียดและเผชิญกับมัน อยากให้เข้าใจสภาพสิ่งแวดล้อมที่เป็นอยู่จริง ทำความเข้าใจตัวเอง และคิดวิธีการที่เหมาะสมกับตัวเอง ถ้าร่างกายบ้าพลัง ยอมรับแรงกดดันได้ดี ทำงานได้เกินกว่า 10 hrs ต่อวัน คุณกับผมอาจมีบางสิ่งคล้ายกัน ท่ีสนใจกับช่วงวางรากฐานที่เกี่ยวกับงานในช่วงชีวิตนี้ก่อนจะคิดเอาเรื่อง Work-Life Balance อะไรมาใช้ (ทำงานมากแต่ไม่ใช่ทำตัวให้ยุ่งนะ)

ช่วงปรับจูนพื้นฐาน

ทุกคนมีความสนใจจะไปกันต่อ แสดงว่ามีความสนใจมาก ๆ ฮ่า ๆ จัดไปเลยละกัน งั้นเราต้องปรับความคิดให้เป็น Computation & Algorithms Thinking มากขึ้น

Code.org || Scratch

เป็น Platform ให้เราลองเรียบเรียงความคิด ให้ทำงานแบบ Computer ซึ่งบางคนก็ใช้ Scratch ก็ไม่ว่ากัน คล้าย ๆ กัน

Flow Chart & DFD (Data Flow Diagram) — Crash Course

ขอบคุณทางช่อง BorntoDev ที่อธิบายเข้าใจ ตรงประเด็น และสามารถจินตนาการภาพตามได้ครับ (ซึ่งจริง ๆ แล้วมี Symbol มากกว่านี้อีก)

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

Abstract reasoning test

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

Learning Path for students ระดับ High-School และ University

Programming fundamentals / Programming paradigms

  • Imperative, Declarative (Procedural, Object Oriented, Functional, etc.)
  • Variable ตัวแปร
  • Input/Output
  • การตัดสินใจ (Conditional Statement) If-Else
  • การทำซ้ำ While-Do, Repeat-Until (for loop, while loop)
  • Functions

Compiler & Interpreter

  • ความแตกต่างระหว่าง 2 อย่างนี้แบบกว้าง ๆ คืออะไร
  • ภาษานึงไม่จำเป็นว่าต้องเลือกอย่างใดอย่างนึงมาใช้ จะใช้หนึ่งอย่าง หรือ 2 อย่าง ก็แล้วแต่การดีไซน์ภาษา เช่น Java

รู้จักความรู้ Fundamental อื่น ๆ ที่เกี่ยวข้องกับ Computer (Optionals)

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

การมอง Roadmap กว้าง ๆ ก่อน เปรียบเหมือนอ่านสารบัญของหนังสือ

แต่ถ้าอยากลงเจาะลึกไปเลยว่า ฉันอยากเป็น A อยากเป็น B คงต้องมี Roadmap ในการเดิน จะได้มี Format ที่ถูกต้อง ในการก้าวเดินไปข้างหน้า

Website ของ Developer Roadmap

Developer Roadmap — Youtube Channel

Learning Path for beginner

ถ้าหากใครที่ยังไม่เคยแตะในเรื่องของโปรแกรมมิ่งเลย ให้ย้อนไปดูที่หัวข้อด้านบนไว้ด้วย

ผมอยากจะบอกว่า บางทีการที่เรารู้ไปก่อนลงมือทำก็ดี แต่การลงมือทำไปก่อน แล้วระหว่างนั้นค่อย ๆ เปิดค้นหาเอา ก็จะเป็นการค่อย ๆ ปลดล๊อกเช่นเดียวกัน ดังนั้นบางอย่างมันอาจจะเป็น Keywords ที่หล่นลงมาระหว่างทาง ก็ยังไม่ต้องกังวลไปว่าฉันจะแตกฉานก่อน ค่อยไปเรียน ไม่ ไม่ใช่อย่างนั้นแน่นอน กระบวนการเรียนรู้มันเกิดจากการลงมือทำ และการเรียนรู้ควบคู่กันไป

ไม่จำเป็นเลยที่ต้องรู้ทั้งหมดข้างล่างนี่ก่อนถึงจะเริ่มลงมือทำ

Resources สำหรับการเรียนรู้

ซึ่งจะแตกต่างไปตามที่เราสนใจ รวมถึงงบประมาณ

Free

Paid (แบบประหยัด)

  • Udemy คอยดูว่ามันลดราคาเหลือประมาณ $10 ตอนไหน และเลือกซื้อตามที่เราสนใจ ดู Rating ของ Course และ Feedback comments ให้ดี [ข้อควรระวัง] ยิ่งถูก เราอาจจะเผลอให้คุณค่าของสิ่งนั้นน้อยลง ฉะนั้นอย่าซื้อมาเก็บเอาไว้แบบผม (พ่อยอดนักดอง)
รูปเฉพาะที่ยังไม่ได้ Archive

Subscription

Exclusive Subscription

  • Udacity Nanodegrees ส่วนตัวผู้เขียน ไม่เคยเรียน ค่าใช้จ่ายเข้าไม่ถึงครับ แต่ถ้าถึงตัวนี้คงเป็นตัวเลือกอันดับต้น ๆ เพราะชื่อเสียงของ Nanodegree

Apply Coding Bootcamp

  • ใครรู้สึกใจถึง และห้าวมาก ๆ ก็จัดเลย
  • ค่าใช้จ่ายสูงมาก บางที่ก็ให้ผ่อนชำระเอา
  • แต่ถ้าที่ไหนฟรี ก็จัดเลย โอกาสของเราทั้งนั้น
  • ส่วนตัวผู้เขียน ไม่เคยเรียน ค่าใช้จ่ายเข้าไม่ถึงครับ

Tips: เนื้อหาที่เรียนส่วนใหญ่อาจจะเป็นแนว Integrate ระหว่างระบบ แต่ถ้าหา Course Data Structures & Algorithms ให้ตัวเองได้ตั้งแต่ตอนนี้เลย ก็จะดีมากขึ้นครับ

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

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

คราวนี้ถ้าถามผมว่าเอาตัวไหนก่อน สำหรับแบบแรกเริ่มและไม่รู้จะไปทางไหนดีเลย

  1. Python
  2. JavaScript

ถ้าอยากให้ผมอวย ก็คงเป็น Java กับ Kotlin ครับ

ทั้งนี้ทั้งนั้นตรวจสอบความชอบของตัวเองก่อนนะ เพราะแต่ละคนมีสไตล์ที่อาจจะคล้ายกัน หรือไม่เหมือนกันไปเลยครับ 😁

Python

ง่ายต่อผู้เริ่มต้น ลด syntax การเขียนได้เยอะ ใช้กันอย่างแพร่หลายในหลายโอกาส เช่น Backend, Machine Learning, Data Analysis

Python for Beginners จาก Microsoft Developer

Python for Beginners — Full Course [Programming Tutorial] จาก freeCodeCamp

Django related

FastAPI related

ซึ่งบางคนคิดว่าอยากไปเป็นสาย Data เลย ผมก็คงจะแนะนำ Kaggle กับ Datacamp

Datacamp (ให้เราในเรื่อง Career Track ด้วยนะ)

Kaggle

ด้านล่างเป็นคลิปที่ผมเคยดู เขาบอกว่า Data Engineering Track ของ Datacamp ตอบโจทย์ Scenarios การทำงานในปัจจุบัน

ส่วนคนที่เป็นสาย Automation, Infrastructure หรือ Network ก็มี Learning Site จากทางฝั่ง Cisco DevNet

— — —

JavaScript (Node.js)

ง่ายต่อผู้เริ่มต้นจากการเขียน Website ใช้กันอย่างแพร่หลายในแอปพลิเคชันต่าง ๆ บนเว็บ และ Cross-Platform Mobile รวมถึง Backend (ถ้ายังไม่นับ Event Loop ในตอนนี้)

Course ภาษาไทย
ขอบคุณคอร์สออนไลน์ Crash Course จากพี่วรายุทธ ทาง Youtube และ Skooldio ด้วยครับ

— — —

Java/Kotlin

Java เป็นภาษาที่อยู่กันมาอย่างยาวนาน และยังตามหาคน Dev เป็นจำนวนมากเช่นกัน (บางที่ก็อาจจะย้ายไปใช้ Go แล้ว) ใช้แพร่หลายใน Enterprise Backend และในปัจจุบัน Java เริ่มเข้าสู่ Cloud Native มากขึ้น

Google Pathway
เป็น Course จากทาง Google โดยตรง

Source: Introduction to programming in Kotlin

Introduction to programming in Kotlin

Kotlin Bootcamp

Kotlin for Java

Course ภาษาไทย
ขอบคุณคอร์สออนไลน์จากทาง Skooldio ของพี่เอก Akexorcist ด้วยครับ

เพิ่มเติม: Scala สามารถอยู่ในหมวดนี้ด้วยเช่นกัน แต่เป็น Optional ครับ สำหรับผู้เริ่มต้น

— — —

C# และ .NET

.NET สามารถเขียนได้หลากหลายโอกาสเลย ในปัจจุบันใช้ในระดับ Enterprise อย่างแพร่หลาย

  • Community .NET Thailand บางอันสามารถเข้าไปดูศึกษาได้ แต่บางอันก็ Advanced มาหน่อย อาจจะต้องระวังนิดนึง

— — —

C, C++

ว่ากันตามจริง ผมก็เรียนมาตั้งแต่มัธยมแล้ว 55555 ตอนนั้นก็สนุกด้วยนะ แต่ถ้าเทียบกับปัจจุบันและรู้อะไรมากขึ้น คนเริ่มต้นน่าจะมาจาก Python เพื่อเรียน Concept ต่าง ๆ แทน แต่ว่า C และ C++ ก็ใช้สอนได้ และมีโซนทำงานนะ เช่น Arduino ก็เข้าสู่โลก IoT ได้เลย แต่มันไม่ได้มีแค่นั้นนะ พวกเกมก็มี C++ และพวก HPC ก็เป็นพวก C ด้วย เพราะเป็นภาษาที่อยู่กับเรามานาน จึงมีความ Classic เร็วแรงพอสมควร (แต่การจอง Memory ก็ต้องทำเองเหมือนกัน ก็เลยอาจจะไม่เหมาะถ้าคนมาจากสายอื่น แต่ถ้าเป็น Computer Science, Computer Engineer, Electric Engineer อันนี้ก็เริ่มจากตรงนี้ได้เหมือนกัน)

แต่ Arduino มันใช้พื้นมาจากพวกนี้นะครับ แต่พอไปเขียนจริง ๆ แล้ว มันก็ให้ความรู้สึกกลายเป็น “ภาษา Arduino” ซะอย่างงั้น 5555555

เพิ่มเติม 1: ผมก็เรียน Data Structures & Algorithms มาจากภาษา C ครับ

เพิ่มเติม 2: Competitive Programmer ใช้ C++ กันเยอะ

— — —

Go

ในปัจจุบัน Backend เริ่มโยกไปใช้ Go กันเพราะว่าเหตุผลในเรื่องของ Performance/Benchmark ที่ดีมาก บริษัทใหญ่ ๆ ในไทยก็ให้ความสำคัญกับภาษานี้เช่นกัน

Backend Framework ที่นิยม

  1. Gin
  2. Echo
  3. Fiber

Course ภาษาไทย

Go Programming จาก CodeBangkok (สอนหลายอย่างเลยนะ)

— — —

Dart

ปัจจุบันแพร่หลายใน Flutter แต่ก็เอาไปเขียน Backend ได้นะ แต่ผมคงแนะนำเขียน Flutter แหละ ถึงจะได้จับ Dart

Tutorial จาก Flutter’s Documentation

Build apps with Flutter จาก Google Pathway

และ freeCodeCamp 37 ชั่วโมง

— — —

HTML + CSS หรือ Frontend Framework ของเว็บไซต์

ผมมองว่าถ้าคนอยากเขียน Website ก็เริ่มที่ตรงนี้เลย HTML + CSS วิธีการจะแตกต่างจาก Programming Languages

(New) Responsive Web Design — freeCodeCamp

ส่วน Frontend Framework อย่างพวก React, Angular, Vue, Svelte มันคืออีกขั้นนึงที่ทำให้เรา Follow requirements การพัฒนาเว็บไซต์ได้ดีมากยิ่งขึ้น

Tips: หากเจอคำว่า TypeScript อยากให้รู้ว่า TypeScript เป็น Superset ของ JavaScript ที่เพิ่มเรื่อง Static Type เข้าไป

— — —

PHP

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

— — —

ทั้งนี้ทั้งนั้น ไม่ได้ห้ามว่าต้องไปเรียนอะไร แค่อยากให้เข้าใจ Concept การเขียนโปรแกรมรวมถึงกระบวนการคิดวิเคราะห์ คุณจะไปเรียน Solidity เพื่อทำบน Ethereum ก็ได้ จะเริ่มด้วย Rust แล้วเขียน Web Backend, System Programming หรือ Solana ก็ได้ ไม่มีอะไรตายตัว แล้วแต่คุณชอบ

ในเบื้องต้นนั้นคุณสามารถเรียนรู้ได้จาก freeCodeCamp คุณสามารถเลือกดูเนื้อหาจากสิ่งที่คุณสนใจได้เลย ซึ่งผมคิดว่าตัวนี้คุ้มค่าต่อการเริ่มต้น รวมถึงเนื้อหาที่ Advanced มากขึ้นจาก Community ของเขาเช่นกัน

freeCodeCamp (Website)

freeCodeCamp (Youtube)

— — —

[BE Required] ระบบฐานข้อมูล — Database Management System (DBMS)

มองแบบ Beginner มันคือที่เก็บข้อมูลครับ มองลึกไปอีกก็จะเป็นโปรแกรมที่ถูกเขียนขึ้นโดย Implement ให้มันดูแลในเรื่องของ Logical storage

ซึ่งการเก็บข้อมูลในปัจจุบันมีเป็นแบบมีโครงสร้าง (RDBMS) หรือไม่มีโครงสร้าง (NoSQL)

ซึ่งไม่ Required นักสำหรับสายอื่น แต่ถ้าหากว่าเกี่ยวข้องกับฐานข้อมูลขึ้นมา ยังไงก็ต้องศึกษาไว้ครับ

ที่ผมนำมาแนะนำคือ สอน PostgreSQL (prasertcbs)

— — —

API (Application Programming Interface)

ผมเคยเขียนไปตอนสมัยหนุ่ม ๆ คิดว่าน่าจะยังตรงตามโลกความจริงได้อยู่

สั้น ๆ คือ การทำให้ Software/Applications คุยกัน หรือ Interact ไปมาหากัน และไม่จำเป็นต้องเป็นต้องผ่าน HTTP Protocol ส่วนผ่านอะไรนั้นขึ้นอยู่กับแนวคิดและการออกแบบของ API นั้น ๆ

— — —

หัดใช้ Git

Git เป็นหนึ่งใน Version Control System (VCS) ที่ได้รับความนิยมมากที่สุด (และผมก็ใช้ตัวอื่นไม่เป็นนะ 555555) ถ้าใช้คำศัพท์ง่าย ๆ ก็คือ เป็นวิธีการเก็บโค้ดไว้บน Remote Repository (ที่เก็บโค้ดแบบออนไลน์) คราวนี้เวลาเราทำงานเป็นกลุ่มเป็นทีม เราก็แยกย้ายกันทำ แล้วเอาโค้ดมารวมกันครับ

หรือง่าย ๆ คือ เราทำอะไรคนเดียว พอเราอยากจะให้เพื่อนมาดู อวดเพื่อน หรือส่งงานอาจารย์ ก็ไม่ต้องใช้ Git มือแล้วครับ (ครับ ผมหมายถึง Flashdrive/Thumbdrive)

Git Remote Repository of choices

  • GitHub (Most Popular + Writer Recommend)
  • Gitlab
  • Bitbucket

การตามหา Areas of interest

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

ออกไปตามงาน Conference หรือ Meeting
วิธีนี้คุณจะได้เห็นสิ่งต่าง ๆ แบบ Live Demo หรือคุณจะได้คุยกับคนสายนั้น ๆ โดยตรง คุณจะเหมือนกึ่งมี Mentor นิดหน่อย แต่ถ้าออกไปแล้วยังรู้สึกมึน ๆ ในช่วงแรก เป็นเรื่องปกติครับ ต้องค่อย ๆ connect the dots ไปเรื่อย ๆ พอคุณพัฒนามากขึ้น แล้วกลับมาอ่าน มาดู คุณจะเข้าใจมากขึ้นแน่นอนครับ

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

พอผ่านกระบวนการข้างบนแล้ว บางคนอาจจะอยากเป็น Web Developer, Mobile Developer, UX/UI Designer, Backend Developer, Full-Stack Developer, Software Engineer in Test, AI Engineer หรืออะไรก็ตามแต่ แต่คุณจะมีโอกาสได้ค้นพบ แต่ถ้าผ่านกระบวนการข้างบนแล้ว ยังรู้สึกว่าไม่รู้จะเอาไปทำอะไร งั้นผมว่าบางที Software Engineer อาจจะยังไม่ใช่สไตล์ของคุณก็ได้ แต่ถ้าคุณชอบ Technology เป็นทุนเดิม โอกาสเป็นไปได้ที่หาเจอมีสูง

ซึ่งสิ่งที่อยากเพิ่มเติมแต่อาจจะไม่ได้ลง Code มากนักก็คงจะเป็นสาย Product, Technology Consultant, Business Analyst แบบนี้ไปเลย ได้งมกับ Technology เหมือนกัน อาจจะมีเกี่ยวกับโค้ดบ้าง แต่ไม่ได้ลงหนักเท่า SWE

Requirement Management อย่างง่าย

Client A: “เล็กน้ำ ไม่งอก ไม่เปื่อย” หลังจากอ่านข้อความนี้คุณกำลังคิดอะไรในหัวอยู่กันนะ ก๋วยเตี๋ยวใส่เส้นเล็ก โอเคเป็นแบบน้ำ ไม่ใส่ถั่วงอก เอ๊ะ ใส่ผักบุ้งป่าวนะ หมูเปื่อยหรือเนื้อเปื่อยวะ แล้วถ้าร้านคุณเป็นก๋วยเตี๋ยวน้ำตกอีก คุณก็ต้องถามต่อไปอีกใช่มั้ยครับ ว่าจะเอาน้ำใสหรือน้ำตก

นั่นคือหนึ่งในกระบวนการคิดเวลากำลังเก็บ Requirement กับลูกค้า

สิ่งที่คุณจะทำตามมา เพื่อให้ได้ผลลัพธ์ที่ถูกต้องพึงพอใจลูกค้า ก็คงอาจจะเป็น

  • น้ำใสหรือน้ำตกนะครับ
  • ผักอย่างอื่นใส่รึเปล่าครับ
  • หมูหรือเนื้อนะครับ หรือถ้าตอนนั้นเนื้อหมด คำที่พูดคือเหลือแต่หมูนะครับ

สิ่งที่เรากำลังทำคือ คาดหวังว่าเรากำลัง Deliver บางสิ่งที่ถูกต้องตรงตามที่ Client ต้องการ หรือเห็นพ้องต้องกัน รวมถึงการบริหารทรัพยากร รวมถึง Budget ที่มีและอื่น ๆ ที่เกี่ยวข้อง

Software Development Life Cycle (SDLC)

ขอนอกเรื่องซักครู่นึง เมื่อ Software release และมีการเริ่มต้นใช้งาน Bug กระจุยกระจาย แล้วเราก็ค่อย ๆ ซ่อมกันไป วน ๆ อยู่แบบนั้นล่ะ ถ้าหากว่ามีการเปลี่ยนแปลงเกิดข้ึน จนกระทั่งมันนิ่ง และพอมันถูกใช้นาน ๆ ก็เป็นไปได้ที่มีอาจจะถูกโล๊ะ

Software ถูกทำให้เกิดมาแล้ว เกิดบั๊กหรือเปลี่ยนแปลง ก็ได้รับการซ่อมแซมปรับปรุง และพอเก่าแก่มากนัก ไม่มีคนใช้แล้ว ก็ดับสูญหายไป

คำอธิบายเปรียบเปรยด้านบน คือภาพรวมของกระบวนการ SDLC

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

Software Process Model

ขอ Focus แค่ 2 ตัว ที่พบเจอกัน

  • Waterfall ทำงานเรียงลำดับตามขั้นตอนลงไป ถ้าแก้ก็วนกลับมาไกลพอสมควร
  • Agile Methodology ทำจบไปทีละนิด ๆ เก็บ Feedback ในการทำ และปรับปรุงไปเรื่อย ๆ จนสมบูรณ์

อ่านเพิ่มเติมได้ที่

Learning By Doing

เรียนแล้ว ให้ลงมือทำ ทำเดี๋ยวนั้นหรือในอีก 1–2 ชม. อันใกล้ เพื่อดูว่าสิ่งที่เราเข้าใจถูกต้องรึเปล่า ที่เขาสอน version มันเก่าไปแล้วรึเปล่า มีการเปลี่ยนแปลงตรงไหนรึเปล่า กลยุทธ์มี 2 อย่าง

  • ทำตาม Tutorial แบบ Follow
  • เปิดโค้ดจาก Tutorial ดูแล้วทำอะไรเป็นของตัวเอง

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

Testing

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

Type of Software Testing for Developers 101

Unit Test: เป็นการเขียนโค้ดเพื่อจุดประสงค์ทดสอบโค้ดระดับ Function ที่เขียนขึ้น

Integration Test: เป็นการทดสอบเพื่อทดสอบผลลัพธ์และความเป็นไประหว่าง Module

Manual Test: กดมือ เพื่อทดสอบผลลัพธ์ว่าถูกต้องตามเหตุการณ์ที่เกิดขึ้น

ซึ่งมีมากกว่านี้อีกเยอะแยะ ไม่ว่าจะเป็น Systems Test, User Acceptance Test, End to End Test, Penetration Test เป็นต้น แต่ขอเลือกมาแค่บางตัวเพื่อให้เข้าใจในภาพรวม

Source: Agile Test Pyramid

Learning in Advanced

หัวข้อนี้บอกเลยว่า For someone who can be, who wants to be, or who gets an opportunity to do เพราะไม่ใช่ทุกคนที่ได้ทำ เนื่องจากเวลา ปัจจัยและช่วงชีวิตของแต่ละบุคคลนั้นแตกต่างกันออกไป

การสนับสนุนทางการศึกษา

  • ค่าย สอวน คอม ถ้าหากโรงเรียนเปิดให้โอกาสกับเรา ก็ทำให้เต็มที่ครับ
  • การเข้าร่วมการแข่งขันวิชาการภายในสถาบันและระหว่างสถาบัน
  • ACM-ICPC การแข่งขันการเขียนโปรแกรมในระดับนานาชาติ

Apply Hackathon or Competition

Hackathon คืออะไร?
กิจกรรมการระดมสมอง ทั้งแบบเดี่ยวหรือแบบทีม เพื่อจุดมุ่งหมายการคิดค้นไอเดียใหม่ ๆ ภายใต้กฏเกณฑ์ที่ได้รับ

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

เป็นสิ่งที่มีอยู่จริง ดังนั้นคิดทบทวนผลดีผลเสีย ถ้าเราคิดแล้วมีประโยชน์ ก็จัดไปเลย

Coding Competition

โดยส่วนตัวของผู้เขียน นี่คือหนึ่งในสภาวะรู้งี้ที่เกิดขึ้นจริง ดังนั้นจึงต้องบอกต่อตั้งแต่เนิ่น ๆ

Google/Meta Coding Competition สำหรับน้อง ๆ ที่อยากจะทำ Profile ตั้งแต่มัธยมหรือมหาลัย และรวมไปถึงบุคคลที่สนใจ (Kick Start เป็นการเริ่มต้นที่ดี และผมก็ไม่เอาอ่าวเอาซะเลย 555555)

Mindset เพิ่มเติม

ไม่ใช่ว่าทำไม่ได้ เราแค่ยังไม่รู้

ในตอนแรกคุณจะรู้สึกยากมันไปทุกอย่าง แล้วมีความคิดในหัวว่า เราทำไม่ได้แน่ ๆ เลย ไม่ต้องห่วงครับ ความรู้สึกแบบนี้มันเข้าออกกับคนทุกคน แม้แต่ผมที่บอกคุณอยู่เนี่ยแหละ มันคือการเดินอยู่บน Risk/Danger Zone แต่ถ้าเรามีสติควบคุมตัวเองได้ แล้วเปลี่ยนเป็นคำว่า เราแค่ยังไม่รู้ ส่วนมากเราจะเหลือระดับลงมาเป็น Strecth Zone หลังจากนั้นไปทำให้ตัวเองรู้มากขึ้นครับ ซึ่งเป็นศิลปะในการจัดการกับความไม่รู้อย่างนึง

การสร้างความสมดุลระหว่าง Input และ Output

Input: เราเรียนรู้มาจากแหล่งต่าง ๆ เช่น Text Books, Videos, Courses
Output: การ Apply สิ่งที่ได้เรียนไป ลงสนามเด็กเล่นของตัวเอง เพื่อลองใช้จริง และหาความเป็นไปได้ในการใช้งาน พร้อมกับประยุกต์ใช้
การรักษาสมดุล 2 อย่างนี้ ทำให้เกิด Long term memory มากขึ้น

ไม่ตั้งเป้าที่ความสมบูรณ์แบบ

“You live in an imperfect world and no way if you are still in this world” คุณอยู่ในโลกที่ไม่สมบูรณ์แบบ และไม่มีทางเกิดขึ้น

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

ตอนคุณได้เริ่มเขียนโปรแกรม มักจะเริ่มต้นที่ “Hello World” “Calculator” แล้วยังไงต่อล่ะ? อาจจะลองหาสิ่งที่คุณสนใจเพิ่ม แล้วมาประยุกต์ใช้ ไม่ต้องห่วงความไม่สวย หรือไม่เท่ เดี๋ยวคุณอีก 1–2 ปีมาดู ก็ปวดหัวกับโค้ดตอนนี้เหมือนกัน 5555555

  • ถ้าชอบ Football ลองทำ Score board ดีมั้ยนะ
  • ถ้าชอบดนตรี ลองหา Library มาใช้เรื่องเสียงดีมั้ยนะ กด A ได้ chord A เป็นต้น
  • อยากทำรายรับรายจ่าย เราลองใช้โปรแกรมที่เราทำดูดีรึเปล่า
  • ต่อกับกล้อง Webcam ลอง Detect บางสิ่งบางอย่างดู

เราไม่จำเป็นต้องรู้ทุกอย่างก่อนเริ่มทำอะไร ซึ่งเวลาเราเรียนรู้ สามารถอ้างอิงได้ตาม Dunning-Kruger Effect ด้านล่าง

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

เริ่มจากสิ่งเล็ก ๆ สะสมความมั่นใจจากความสำเร็จ และเริ่มต้นจากจุดนั้น

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

กล้าที่จะถาม และต้องถามอย่างมีศิลปะ

ขอบคุณบทความของพี่ somkiat.cc ใช่แล้วครับ เวลาเจอทางตันคือต้องตั้งคำถาม เวลาตั้งคำถามให้ถามได้เลยครับไม่ต้องกลัวโดนดุ แต่อย่าถามคำถามเดิมซ้ำเยอะ ๆ

หลังจากนั้นให้ลงรายละเอียดไปซักหน่อยว่า

  • เราอยากจะทำอะไร (Objective)
  • เราทำอะไรไปแล้วบ้าง (Past actions)
  • ผลลัพธ์ที่ไม่พึงประสงค์ที่เกิดขึ้น (Incorrect/Error Results)
  • สภาวะแวดล้อมของตัวเองที่เป็นอยู่ เช่น Version ของ Java, Python (Environment)

ยิ่งเราลองทำไปหลายวิธีแล้ว ให้ List ออกมาให้หมด ว่าผลลัพธ์เป็นยังไง

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

ลด Ego ตัวเองลง และลดการตัดสินด้วยอารมณ์ชี้นำ

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

แต่ถ้าเมื่อต้องคุยกับคนอื่นแล้ว การเปิดใจคุยอย่างเปิดเผยและมั่นใจ ลด Ego ตัวเอง ทำให้มี Vision การมองเห็นกว้างมากขึ้น และเข้าใจคนอื่น ๆ ได้มากขึ้น

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

Recognize yourself

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

Myers–Briggs Type Indicator (MBTI)

เป็นแบบทดสอบวัดบุคลิกภาพ ไว้รับรู้ตัวเองว่าบุคลิกเราเป็นเป็นอย่างไร ซึ่งผลลัพธ์จากการทดสอบจะเป็นดังรูปตัวอย่าง

My MBTI: Thanaphoom Babparn — MBTI

แบบทดสอบ CliftonStrengths [StrengthsFinder] (เสียตัง)

เรียกว่าเป็นแบบทดสอบที่ลึกกว่าแบบ MBTI เพราะแบบทดสอบนี้จะบ่งบอกจุดแข็งของตัวเองได้มากยิ่งขึ้น และเมื่อทำเสร็จแล้ว เราจะได้รายงานมายาวมากมายจนขี้เกียจอ่าน ซึ่งผลลัพธ์ที่ได้บางส่วนจะหน้าตาประมาณนี้

Specialist or Generalist (เป็ด)

ก่อนจะตัดสินใจว่าจะเป็นยังไงต่อไปดีนะ อยากให้คุณดูรูปด้านล่างก่อน

Source: From I-Shaped to T-Shaped — Why IT Professionals Need to be Multi-Skilled

ไม่จำเป็นในตอนนี้เลยที่คุณคิดอยากจะเป็นอะไรอย่างใดอย่างนึง ในแค่จังหวะที่คุณลองทำอะไรเล็ก ๆ ของสิ่งที่คุณสนใจ คุณก็เริ่มขยายความเป็น T-Shaped แล้ว แม้คุณจะไม่ได้ Expert ในด้านนั้น ๆ แต่คุณจะได้รู้ Fundamental ในการทำมาบ้างแน่นอน

บทความที่เกี่ยวข้อง

From I-Shaped to T-Shaped — Why IT Professionals Need to be Multi-Skilled

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

English fundamentals and communications

ปฎิเสธไม่ได้ว่าในสายงานนี้ นี้คือภาษาที่ต้องใช้แบบสุด ๆ เผลอ ๆ อาจจะมากกว่า ภาษาเขียนโปรแกรมด้วยซ้ำ เพราะว่าการอ่าน Documentation ก็ต้องใช้ ค้นหาก็ต้องใช้ อ่านคำถาม คำตอบใน StackOverflow ก็ต้องใช้เหมือนกัน

สามารถทดสอบระดับภาษาตัวเองเบื้องต้นได้ตามลิงค์ด้านล่าง

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

  1. Reading อ่าน
  2. Listening ฟัง
  3. Speaking พูด
  4. Writing เขียน

Cheatsheet แบบรวดเร็ว (ทางวิชาการมีมากกว่านี้ แต่นี่เอาแบบมีชีวิตรอด)

  1. Present Simple Tense (ตอนนี้) => Subject + Verb + Object
  2. Past Simple Tense (อดีต)=> เติม ed หรือ Verb 2
  3. Future Tense (เดี๋ยวจะเกิดในอนาคต) =>เติม will หน้า Verb
  4. Perfect Tense (ทำไปแล้วไง) => Subject + have/has + Verb 3

นึกไม่ออก ใช้มือช่วย ปั้นรูปอะไรซักอย่างในมือ หรือชี้ไปที่สิ่งที่เราจะสื่อ

ไม่ต้องสนใจว่า คนรอบข้างมองเราเป็นยังไง ขอแค่คนที่เราต้องการรับสาร เข้าใจความหมายที่เราจะสื่อออกไป ในส่วนนี้ให้ระวังเรื่องการออกเสียงแต่สามารถฝึกฝนกันได้

Math หรือคณิตศาสตร์ เป็นสิ่งจำเป็น และอาจจะลึกมากขึ้นในบางงาน

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

แล้วเราต้องรู้ถึงระดับไหนล่ะ ถึงจะอยู่รอด

  • คุณสามารถบวกลบคูณหาร ได้รึเปล่า
  • เลขฐาน 2 => 0/1
  • สมการและเศษส่วน
  • หาค่าเฉลี่ยเบื้องต้นได้มั้ย?
  • Factorial => 5! = ?
  • Set => {1, 2, 3} ∩ { 2, 3, 5} = ?
  • ตรรกศาสตร์ => False/True => 0/1?
  • เลขยกกำลัง และ Logarithms แบบเบื้องต้น (ทำไม 9 ยกกำลัง 2 ถึงเท่ากับ 3 ยกกำลัง 4)
  • ความน่าจะเป็น เช่น มีบอล 10 ลูก ในนั้นคือบอลสีแดง 7 ลูก จะมีโอกาสจับได้บอลสีแดงเป็นความน่าจะเป็นเท่าใด? คิดเป็นกี่เปอร์เซ็นต์?

รวม ๆ แล้ว ก็คือ Basic และ Discrete mathematics (Theory of Computations) แปลไทยคือคณิตศาสตร์ไม่ต่อเนื่อง (ถ้าต่อเนื่องคือพวก Calculus Differential/Integral)

ถ้าคุณทำตรงนี้ได้ซึ่งไม่จำเป็นต้องทั้งหมดหรือทำได้ขั้นสูง ก็มีพื้นที่ SWE ให้กับคุณแน่นอน

การเทพ Math ในวงการ SWE คือคุณมีฮาคิแห่งราชันย์

ตอนนี้พร้อมบวกแล้ว อยากสมัครงาน?

ก่อนอื่น ทำความเข้าใจ Company และความเป็นไปได้ของสายงานก่อนว่ามีประเภทไหนบ้าง ได้แก่

  1. Product Based
    ทำ Software แล้วเปิดให้คนอื่น ๆ ใช้ Software ตัวเอง
  2. Internal Based
    ขายอย่างอื่น แต่ต้องการ Software เพื่อสนับสนุนธุรกิจของตัวเอง
  3. Service Based (Consulting)
    ใช้ Professional Hours ของคนนั้น ๆ เพื่อสนับสนุนลูกค้าเติมเต็มความต้องการ

สำหรับคนอยากสมัครงาน [คำแนะนำส่วนตัว]

โดยส่วนตัวก็คงเป็น LinkedIn มีความเป็น Professional

  1. สร้าง Profile LinkedIn ของตัวเองขึ้นมา
    LinkedIn Jobs

2. สร้างโปรไฟล์ภาษา English เป็นภาษาหลัก

นอกเหนือจากนั้นก็คงเป็นกลุ่ม FB ที่หางาน หรือ jobDB แต่ว่าผมไม่ prefer methods นั้นซักเท่าไหร่ ขอประทานโทษด้วยนะครับ อาจจะมีแวะเข้าไปกด 👍 หรือ ❤️ เวลามีคนลง Resume ไว้ในกลุ่ม อันนั้นผมเห็นว่าทำออกมาได้ดีพอสมควร (บางอันดีกว่าของผมอีก 5555555)

Case-Study ตัวผมเอง ตอนก่อนเป็น SWE

  • ครอบครัวเป็นชนชั้นแรงงาน เกือบกลาง มีทักษะติดตัวบ้างคือการเช็คแอร์และซ่อมแอร์เบื้องต้น ล้างคอยล์ร้อนแอร์ ปีนบันไดพาด ปีนระเบียง และเคยตกหลังคา 4 เมตรหัวแตก
  • ไม่เรียนพิเศษเลยในช่วงมัธยมศึกษา ได้เกรด 1 คณิตศาสตร์ ตอน ม.5 สอบ PAT1 รอบแรก ได้ไม่ถึง 40 คะแนน
  • เริ่มจากเขียนภาษา C สมัยมัธยมเป็นวิชาเรียนทั่วไป ทำได้แต่ไม่ได้จริงจังอะไร
  • ได้เขียน Visual Basic สมัยมัธยมอีก ทำได้แต่ไม่จริงจังอะไร
  • เรียนวิศวะคอมใกล้บ้านเพราะได้โควต้า สอบสู้คนอื่น ๆ เพื่อเข้ามหาลัยใหญ่ ๆ ไม่ไหว และอาจจะค่าใช้จ่ายไม่ถึงถ้าได้เรียนใน กทม. ซึ่งที่นี่ก็ได้เรียนรู้พื้นฐานเกี่ยวกับคอมพิวเตอร์มากขึ้น แต่ก็ตั้งคำถามว่าเรียนไป แล้วจะจบไปทำอะไร
  • ปี 3 ลองทำมันเกือบทุกสิ่งอย่าง แบบมึน ๆ ในใจอยากเป็น SWE กับ SysAdmin
    - เขียนเว็บด้วย PHP (XAMPP) รู้สึกว่ามันไม่ใช่ละ ถอย
    - IoT (Embedded) Arduino, Raspberry Pi ขี้เกียจต่อสายไฟ สุดท้ายเลิกไป
    - Networking ก็พอทำได้บ้างนะ LAN, VLANs, TCP/IP, RIP, EIGRP, OSPF ถือไว้ก่อน ได้ความรู้ Data Communications และ Network ไป
    - ตอนนั้นรู้สึกอยากเขียน Java เลยลองไปศึกษา Object Oriented Programming ด้วยตัวเอง ก็รู้สึกเข้าท่า โอเคถือไว้ก่อน (Playlist นี้ผมอัดตอนช่วงปี 2018 ทำขึ้นเพื่อสอนน้องมหาลัยปี 3) Java Programming
  • ปี 4 ออกไปฝึกสหกิจใน กทม. ได้เขียน Node.js ES2018 ก็รู้สึกสนุก แต่ก็ทำมันทุกอย่างอยู่ดี ได้เรียนเขียน Node.js, Angular, Android Kotlin กับ MongoDB
  • [Unlock Moment หรือ Connect the dot] ปรากฏการณ์รู้ตื่นขั้นต้น
    เอ๊ะ? แอปมันคุยกันยังไงน้าา ลองทำอะไร ๆ แบบนี้ดูหน่อยซิ้?
    ป๊าบ! API เป็นสื่อกลางในการสื่อสารข้อมูล (OSI Model + Backend Programming)
    ป๊าบ! Database คอยเก็บข้อมูลให้ API (DBMS + SQL)
    ป๊าบ! Frontend เอาข้อมูลไปแสดงผลจาก API ด้วย RESTful (Client-Server Architecture)
    ป๊าบ! Frontend ไปเอาข้อมูลมาไม่ได้ถ้าคุยกับ API ไม่ได้ เพราะ Network คนละวง, ไม่ได้ใส่ Whitelist, หรือไม่ได้ Deploy (TCP/IP + Security)
    เรียบร้อย! ทุกสิ่งที่เรียนมา Merged กันลงตัว ในด้าน Enterprise Software Development พร้อมพุ่งทะยานมากขึ้น
  • ออกไปตามงาน Conference แบบหลบในมุมมืด แล้วหลงสเน่ห์แห่ง Firebase เข้า ซึ่งผมเข้าร่วม Conference นี้ตอน Live Demo ML Kit ของพี่ตี๋ Jirawatee ด้วย หลังจากนั้นก็ศึกษา Cloud Computing ด้วยตนเอง เริ่มต้นที่ Firebase ไปจนถึง GCP และลามไป AWS, Azure จึงเกิดเป็นบทความสอบ Certified ที่ผ่าน ๆ มา รวมถึง Docker, Kubernetes ในลำดับต่อ ๆ มา

Summary

เป็นไงกันบ้างครับสำหรับบทความนี้ ขอบคุณทุกคนมากที่อ่านจนจบ บทความนี้ยาวมาก ๆ เลย ก็ได้รู้จักคำจำกัดความของ Software Engineering เบื้องต้น รู้แนวคิด แนวทางในการไปใช้ได้ต่อบ้าง ทักษะที่เกี่ยวข้องที่จำเป็นต้องใช้ แต่นี่คือเพียงเสี้ยว ๆ เล็กในอุตสาหกรรมเท่านั้น รวมถึงกรณีศึกษาจะเห็นว่า ผมอาจจะได้เขียนอะไรมาบ้างตั้งแต่เด็ก แต่ก็ไม่ได้จริงจังอะไร พึ่งจะมาตั้งใจและเข้าใจจริง ๆ ก็ตอนปี 3 แล้ว ในใจก็แอบคิดว่า ถ้าเรารู้ตัวเร็วกว่านี้ อีกซักแปปนึง 1–2 ปี เราน่าจะเป็นอีกคนนึงไปแล้ว แต่ก็ต้องใช้ชีวิตที่มีอยู่ปัจจุบัน และวางแผนเผื่ออนาคตเอาไว้

อันนี้อาจจะเกี่ยวข้องบ้างเล็กน้อย แต่นี่คือหนึ่งใน Trends ที่เกิดขึ้นจริงของปี 2022

สุดท้ายนี้ หากผู้อ่านมีข้อสงสัยเพิ่มเติม สามารถติดต่อได้ช่องทางด้านล่างนี้ หากผมสามารถช่วยได้ ก็ยินดีช่วยเหลือครับ

Facebook: Thanaphoom Babparn

LinkedIn: Thanaphoom Babparn
(ยังไม่รับ Opportunity ใด ๆ นะครับ ขอบคุณมาก ๆ ครับ)

--

--

Thanaphoom Babparn
Thanaphoom Babparn

Written by Thanaphoom Babparn

Software engineer who wanna improve himself and make an impact on the world.

No responses yet