เรียนไปทำไม (Part I)

หลายคนสงสัยว่า เรียนไปทำไม ออกมาทำงานเลยดีกว่าไหม ได้ตังค์ด้วย เรียนไปทำไม บางวิชาไม่เห็นได้ใช้เลย เรียนไปก็เสียเวลาเปล่า

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

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

สิ่งสำคัญ คือ เป้าหมาย และ วิธีการ นั่นเอง

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

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


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

 — — — — — --- UX & UI Design ---— — — — — 
— — — — — ------ Frontend ------— — — — —
— — — — — ------ Backend -------— — — — —
— — — — — --- Infrastructure ---— — — — —
— — — — — ------ Network -------— — — — —
— — — — — ------ Hardware-------— — — — —

พอจะเห็นบ้างแล้วใช่ไหมครับ เดี๋ยวผมจะแจกแจงให้ดูทีละชั้นละกัน

  1. UX & UI Design
    เป็นส่วนที่เป็นหน้าเป็นตาของซอฟต์แวร์ที่ผู้ใช้เห็น และสัมผัสได้ มันคือส่วนที่สำคัญส่วนหนึ่งที่จะทำให้ผู้ใช้อยากใช้หรือไม่ เพราะฉะนั้นก่อนออกแบบ ควรจะมีการวิเคราะห์คนที่จะใช้ซอฟต์แวร์ของเราว่าเป็นอย่างไร หลังจากออกแบบและมีผู้ใช้งานไปสักระยะหนึ่ง ก็็มีการวิเคราะห์จากค่า Probability and Statistic เพื่อเป็นข้อมูลสำหรับการออกแบบในครั้งต่อไป
  2. Frontend & Backend
    เป็นส่วนที่ผู้ใช้งานได้ใช้ซอฟต์แวร์จริง ต้องใช้ logic ต่างๆ ในการสร้างมันขึ้นมา ผ่านภาษาทางโปรแกรม ซึ่งต้องมีความเข้าใจใน Abstract Data Type ของแต่ละภาษาอยู่บ้าง และสามารถแก้ปัญหาต่างๆ ได้ด้วย Algorithm เท่านั้นยังไม่พอเวลาเราสร้างซอฟต์แวร์หนึ่ง เราจะแบ่งมันออกเป็นก้อน เช่น กล่องเครื่องมือ พื้นที่แสดงผลข้อมูล แถบเมนู เป็นต้น ตามหลัก Object Oriented Programming และข้อมูลของผู้ใช้จะต้องมีการจัดเก็บใน Database อย่างเรียบร้อย เพื่อให้ง่ายต่อการจัดการ และส่วนเบื้องหลังของ Programming Language และ Library หรือ Framework ต่างๆ ก็ได้หลักการมาจาก Theory of Computation
  3. Infrastructure
    เป็นส่วนที่ซอฟต์แวร์รันอยู่ อย่างเช่น Operating System หรือ Virtual Machine หรือในปัจจุนิยมใช้ Docker Container ซึ่งในส่วนนี้ก็สำคัญมาก ถ้าเราเลือกใช้ OS หรือเทคโนโลยีที่เหมาะสมกับซอฟต์แวร์นั้น ก็จะง่ายต่อการจัดการนั่นเอง และรวมไปถึงความปลอดภัยอีกด้วย
  4. Network
    เป็นส่วนที่เชื่อมต่อระหว่างอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง โดยซอฟต์แวร์ส่วนใหญ่จะเป็นซอฟต์แวร์แบบออนไลน์ต่อมีการเชื่อมต่อกับที่อื่นๆ มีการยิง api เพื่อเรียกข้อมูล ถ้ามีปัญหา ได้ข้อมูลล่าช้าอาจจะเป็นที่การเชื่อมต่อด้าน Computer Network ก็เป็นได้ หรือการแบ่ง domain ต่างๆ เพื่อจะได้เพิ่มช่องทางในการเข้าถึง server ที่รันซอฟต์แวร์อยู่ ก็ต้องอาศัยความรู้ด้าน Network เช่นกัน
  5. Hardware
    ถ้าเราทำซอฟต์แวร์จ๋าเลย จะไม่ค่อยได้แตะเรื่อง Hardware สักเท่าไรนัก แต่ก็ควรจะรู้บ้าง บางครั้งต้องการใช้อุปกรณ์เสริมบางอย่าง เช่น Micro Controller Board ซึ่งต้องอาศัยความรู้ด้าน Electronic และ Digital System บ้าง

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

ผมไม่ผู้เชี่ยวชาญอะไร ถ้าผิดพลาดประการใด ขออภัย ณ ที่นี้ด้วย

เห็นภาพไหมครับ จบ