ประสบการณ์ของการเข้ามาเรียนวิศวะคอม โดยไม่รู้จักการเขียนโปรแกรม

PlanC
4 min readMar 14, 2024

--

Photo by Christopher Gower on Unsplash

สวัสดีครับ

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

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

Section 1: การเตรียมตัวก่อนเข้ามหาลัย

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

เกมตามรูปข้างบทเลยครับ (https://studio.code.org/hoc/1) ตอนนั้นรู้สึกว่ามันก็เป็นเกมธรรมดาๆเกมนึงไม่ได้รู้สึกว่ามันเกี่ยวกับการเขียนโปรแกรม แต่มันก็เป็นการฝึก Logic ง่ายๆ แต่ส่วนตัวผมมองว่าถ้าอยู่ในระดับมัธยมควรจะฝึกเขียนจริงๆมากกว่า แต่ถ้าใครที่ไม่เคยเล่นมาก่อนก็ไปลองกันได้ เพราะอาจจะช่วยตัดสินใจได้นิดหน่อย ว่าเราชอบวาง Algorithm หรือป่าว

1.1) การเตรียมตัว

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

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

แต่ถ้าดูจากสถานการณ์ของผมแล้วก็คงเข้ารอบ portfolio ไม่ได้ เลยต้องเข้ารอบรับตรงเท่านั้น (เพราะมีที่ที่อยากเข้าแล้วต่างหากล่ะ !! เห็นโอกาสแค่รอบนี้รอบเดียวด้วย)

ผมตัดสินใจตีกรอบไว้ว่าจะเข้าวิศวะมาตั้งแต่ขึ้น ม.4 แล้ว ถึงจะไขว้เขว ออกนอกลู่นอกทางไปหลายครั้งแต่สุดท้ายก็กลับมาวิศวะ ส่วนสาขาเดี๋ยวค่อยคิดเอาทีหลังเพราะใกล้สอบ TCAS แล้ว เลยตั้งใจจะเตรียมตัวสอบก่อน โดยวิศวะเกือบทุก
มหาลัยและทุกสาขา จะใช้คะแนน GAT + PAT1 + PAT3 บางที่อาจมี PAT2 แต่ปัจจุบันน่าจะเปลี่ยนชื่อเปลี่ยนอะไรไปแล้ว แต่มันคือ ความถนัดทั่วไป ความถนัดวิศวกรรม ความถนัดคณิต ความถนัดวิทย์

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

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

1.2) ทำไมถึงเลือกวิศวะคอม

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

สามารถลองไปพวกงาน Open House ตามมหาลัย เพื่อดูแนวทางตามหาสิ่งที่ตนเองสนใจ

Section 2: เข้ามหาลัยแล้ว

โดยก่อนที่จะเริ่มเปิดภาคเรียนนั้น ผมได้เข้าร่วมกิจกรรมหรือที่เป็น Boost camp ของรุ่นพี่ที่มหาลัยโดยจะมีการแนะนำการเรียนและสอนเขียนโปรแกรมเบื้องต้นในภาษา C ซึ่งผมเองก็ได้เริ่มต้นจากที่นี่เหมือนกัน

ซึ่งถ้าถามว่า พึ่งจะเริ่มเขียนโปรแกรม หรือเริ่มเขียนโค้ดตอนตอนขึ้นปี 1 เนี่ยจะทันไหม คำตอบก็คือทันอยู่แล้วครับ เป็นเรื่องเล็กมาก ความสำคัญอยู่ที่การมีวิธีคิดเพราะเป็นพื้นฐานของการเขียนโปรแกรม แต่ถ้าการเอาไปใช้งานจริงก็แล้วแต่อีกว่าจะเขียนโปรแกรมไปใช้ทำอะไร กับอะไร บางอย่างมันก็ไม่ได้ต้องใช้ Logic ซับซ้อนขนาดนั้น ยิ่งเป็นภาษาที่เป็น High-Level ยิ่งมี Library และ Framework หลายตัวมาเป็นตัวช่วยให้เราจัดการสิ่งต่างๆได้สะดวกมากขึ้นด้วย

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

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

Photo by Riho Kroll on Unsplash

2.1) สิ่งที่จะได้เรียน

สิ่งที่วิศวะคอมจะได้เรียนจะสามารถมองเป็นภาพกว้างๆได้ 3 อย่าง คือ

  • Hardware

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

  • Software

ในด้านนี้เราจะได้เพิ่มความชำนาญในภาษาการเขียนโปรแกรม เช่น C, C++, Java, Python และ Assembly ได้ทำความเข้าใจหลักการของระบบปฏิบัติการ (operating system) รวมถึง process management การจัดการหน่วยความจำ ระบบไฟล์ ได้ศึกษาอัลกอริทึมและโครงสร้างข้อมูลที่ใช้ในการพัฒนาซอฟต์แวร์ ได้เรียนรู้การออกแบบซอฟต์แวร์ เป็นต้น

  • Network

สำหรับวิชาที่อยู่ในหมวดนี้ผมรู้สึกว่าทฤษฎีมันจะค่อนข้างเยอะ จะเป็นหมวดที่เราจะได้เรียนเกี่ยวกับการติดต่อสื่อสาร ข้อมูลที่รับส่งกันมันส่งกันไปกันมาอย่างไร ความปลอดภัยในการรับส่งข้อมูลเป็นอย่างไร ได้เรียนรู้เกี่ยวกับสถาปัตยกรรมเครือข่ายคอมพิวเตอร์ โปรโตคอล และเทคโนโลยี เช่น TCP/IP Ethernet และเครือข่ายไร้สาย (wireless networks) ได้เรียนรู้การจัดการและการ config อุปกรณ์เครือข่าย รวมถึงการกำหนด IP Address การ routing และการแก้ไขปัญหาเครือข่าย

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

2.2) งานในคลาสและโปรเจกต์ที่จะได้ทำ

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

ตัวอย่าง

งานในคาบ Lab + Mini Project
พัฒนา LIFF Application

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

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

2.3) ด้านสังคม

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

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

2.4) เรียนจบแล้วจะได้ทำอะไร

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

ตัวอย่าง

  • Software Engineer / Developer: พัฒนาพวก Web App, Mobile App, Game หรือ ระบบอื่นๆ ด้วยการเขียนโปรแกรม
  • Quality Assurance Engineer / Tester: ตรวจสอบคุณภาพ Software หรือ Hardware เพื่อให้มั่นใจว่าทำงานได้ตรงตามมาตรฐานที่กำหนดไว้
  • Network Engineer: ออกแบบ จัดการ และดูแลระบบเครือข่ายในองค์กร
  • Database Administrator: ออกแบบ จัดการ และการบำรุงรักษาฐานข้อมูลโดยคำนึงหลักของ Confidentiality, Integrity และ Availability

ยังมีอีกหลายตำแหน่งที่ไม่ได้พูดถึง ที่คุ้นหูกันอย่างเช่น DevOps, Data Analyst หรือสาย Machine Learning และอื่นๆ สามารถไปลองศึกษาเพิ่มเติมกันได้

Section3: การฝึกงาน

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

ซึ่งถ้าเป็นสาย Web dev หากเรียนรู้การใช้ HTML + CSS + Javascript มาแล้ว ต่อจากนั้นเราควรเริ่มฝึกใช้ Library หรือ Framework ที่ใช้ช่วยทำ Web ของเรา โดยเราอาจจะเลือกตัวที่เป็นที่นิยมเนื่องจากจะได้ เช่น เช่น React.js หรือ Angular แต่ส่วนตัวผมเริ่มจากการใช้ React และลองฝึก Backend โดยอาจเริ่มสร้าง Rest API จาก Node.js และ Express จากนั้นก็ต่อเข้ากับ Database ถ้าง่ายที่สุดก็แนะนำเป็น MongoDB เพราะเป็น NoSQL คือลักษณะจะคล้ายๆกับเก็บลงใน Array

ที่สำคัญควรลองเล็งหาที่ฝึกงานไว้ตั้งแต่เนิ่นๆ ลืมบอกไปว่าในช่วงปี 3 ปิดเทอมจะมีการบังคับให้ฝึกงาน (ขึ้นอยู่กับแต่มหาลัยด้วยว่าบังคับให้ฝึกช่วงไหน) ในการฝึกงานครั้งนี้จะค่อนข้างสำคัญเพราะเราอาจจะได้ offer ให้เป็น Full-time ได้เลยหรืออาจได้ต่อเป็น Part-time ก็แล้วแต่การตกลง ซึ่งถ้าเรามีที่ที่สนใจเราควรกดเข้าไปดู requirements ของตำแหน่งที่เราสนใจก่อนได้ว่าบริษัทนั้นๆเค้าใช้ Techstack อะไร ต้องการอะไรเป็นพิเศษ หรือโครงการรับสมัครฝึกงาน (internship) ของบริษัทนั้นเป็นยังไงเริ่มช่วงไหนอาจเค้าไปดูบทสัมภาษณ์หรือบทความ วิดีโอแนะนำบริษัทนั้นๆก่อนว่ารู้สึกสนใจหรือป่าว

ตัวอย่าง requirements ของ Frontend บริษัท A
ตัวอย่าง requirements ของ Backend บริษัท A
ตัวอย่าง requirements ของ Backend บริษัท B

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

และในการสมัครหาที่ฝึกงานจะมี 3 Part หลักๆ คือ

  1. Resume
    ในรอบนี้เค้าแค่ scan ว่า Resume ของเราผ่านหรือป่าว โปรเจกต์อะไร มีประสบการณ์ทำงานด้านไหนมาบ้าง ใช้อะไรเป็นบ้าง เช่น ภาษาโปรแกรมที่เราใช้ Library หรือ Framework ต่างๆ หรือ เครื่องมืออื่นๆ ที่เค้าต้องการ แต่การที่เราเขียนอะไรลงไปใน Resume ก็จะเป็นสิ่งที่เรามีโอกาสที่จะโดนถามในขั้นตอน Interview โดยในส่วนการจัดทำ Resume มีหลากหลายคลิปหรือบทความที่แนะนำไว้ สามารถลองไปศึกษากันโดยเน้นไปที่สายงานของตนเองและอัพเดทให้เข้ากับยุคสมัยปัจจุบันด้วย
  2. Assignment
    ในรอบนี้จะเป็นช่วงที่เราจะได้รับ Assignment จากบริษัท ซึ่งก็ขึ้นอยู่กับแต่ละตำแหน่งว่าเราสมัครว่าเราจะได้ Assignment แบบไหน เช่น ถ้าเป็น Frontend ก็อาจจะให้ทำ หน้า Web หรือก็จะได้เป็นคำถามให้ตอบใน Form ซึ่งเป็นถามตอบความรู้บ้าง โจทย์โปรแกรมบ้าง โดยไม่ว่าจะเป็น Assignment แบบไหน เราควรดูเกณฑ์ในการพิจารณาให้ดีดูว่า Requirement ที่ได้รับมานั้นเราทำครบหรือป่าว
  3. Interview
    ในรอบนี้จะเป็นการสัมภาษณ์ซึ่งแต่ละที่ก็จะแตกต่างกัน โดยอาจจะได้ Online บ้าง On site บ้าง แน่นอนว่าสิ่งที่จะได้ถามเหมือนกันก็คือส่วนการแนะนำตัวเอง แนะนำว่าเราทำอะไรมาบ้างซึ่งก็จะเป็นสิ่งที่อยู่ใน Resume ของเรานั่นแหละ แล้วอย่างที่บอกไปในว่าสิ่งที่เราเขียนไปใน Resume อาจจะโดนถามในรอบนี้ ซึ่งถ้าเราไม่ได้ทำการบ้านหรือมีความรู้ไม่แน่นพอก็อาจจะลำบาก ดังนั้นก็ควรเน้นใส่สิ่งที่เรามั่นใจหรือใช้งานบ่อยพอ ซึ่งจริงๆควรเน้นไปในตำแหน่งที่เราสมัครด้วย ไม่จำเป็นต้องใส่ไปทั้งหมด ส่วนคำถามอื่นๆก็จะเป็นส่วนของบริษัทที่เค้าอยากดูบุคลิกนิสัยเรา ในส่วนนี้หลายๆบริษัทและหลายๆสายงานก็อาจจะมีคำถามที่คล้ายๆกันสามารถไปทำการบ้านกันมาก่อนได้ และที่สำคัญก็คืออาจจะมี Coding ด้วย

ซึ่งก็ไม่ใช่ทุกที่ที่จะมีทั้ง 3 รอบนะครับ บางที่ก็จะไม่มีรอบ Assignment จะข้ามไปรอบ Interview เลย ซึ่งถ้าเป็นแบบนี้สิ่งที่เราต้องเน้นอย่างมากคือ Resume เนื่องจากไม่ได้มี Assignment มาพิจารณา ดังนั้นเราต้องทำ Resume ให้น่าสนใจที่ทำให้เค้าเรียกไปสัมภาษณ์ และโดยปกติถ้าเป็นกรณีแบบนี้ (ไม่มี Assignment) ก็จะมีการทดสอบรอบ Interview แทน เช่น Code แก้โจทย์ปัญหา หรือถ้าเป็น Frontend ก็อาจจะเป็นโจทย์ React เป็นต้น

ในการ Coding Interview สิ่งที่สำคัญคือการคิดของเราซึ่งบางครั้งไม่จำเป็นที่เราจะต้องแก้ปัญหานั้นได้สำเร็จ ขอแค่มีแนวคิดที่จะสามารถนำไปแก้ปัญหาได้ที่สำคัญอยู่ที่การอธิบายในสิ่งที่เราคิดให้เค้าเข้าใจ โดยเราสามารถไปหาโจทย์มาฝึก Coding ได้หลากหลายที่เช่น https://leetcode.com/ เป็นที่ที่ใช้ฝึก Coding ที่นิยมที่สุดและโจทย์จากที่นี่ก็ถูกเอาไปใช้ในการสัมภาษณ์หลายๆที่ด้วย ซึ่งก็อาจจะถูกดัดแปลงบ้างแต่แนวทางจะเหมือนๆกัน ก็แนะนำให้เริ่มฝึกจากที่นี่

https://leetcode.com/

และนอกเหนือจากแนวคิดแล้วยังมีอีกสิ่งที่สำคัญด้วยซึ่งก็คือส่วนของ Data Structure ที่ใช้และ Time Complexity ที่อาจคุ้นในชื่อ Big O notation ซึ่งก็ควรรู้ไว้สำหรับการ Coding Interview ด้วย

Big O notation

3.1) ประสบการณ์การฝึกงานของผม

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

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

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

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

สรุป

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

ซึ่งทักษะการแก้ปัญหามันก็มีความตรงกับวิชาคณิตศาสตร์นั่นแหละ ถ้าชอบคณิตศาสตร์อยู่แล้วก็ไม่เป็นปัญหาอะไรเลย แค่ต้องเรียนรู้และฝึกใช้ภาษาโปรแกรมนั้นๆ แต่ถ้าไม่ได้เก่งหรือชอบคณิตศาสตร์ก็สามารถเขียนโปรแกรมได้ครับ ขึ้นอยู่กับประเภทงานที่ทำ หากงานนั้นไม่ได้ซับซ้อนมาก เช่น ทำหน้า Web Application ก็ไม่ได้มีการใช้ Logic ที่ซับซ้อน สามารถอาศัยประสบการณ์ในการพัฒนาได้ ดังนั้นจึงขึ้นอยู่กับงานที่ทำมากกว่าว่าต้องเน้น Logic มากขนาดไหน

แต่ถ้าพูดถึงการเรียนวิศวะคอม มันก็ไม่ได้มีแค่การเขียนโปรแกรมอย่างเดียว มี 3 ด้านที่ต้องเรียนรู้ ทั้ง Hardware, Software และ Network และในแต่ละด้านก็ต้องใช้เวลาพัฒนาหรืออยู่กับมันค่อนข้างมาก

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

--

--