วันพุธที่ 6 เมษายน พ.ศ. 2559

ชวนคุยจาวา part 2 : เส้นทางเดิน

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

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

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

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

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

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

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

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

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

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

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

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

สรุป ส่วนตัวผมยังทำงานบริษัท บริษัทส่วนมากไม่ใช้ .NET ก็ Java เฉพาะทางจริงๆจึงจะเห็นว่าใช้ภาษา C ซึ่งผมขอผ่าน (มักจะยุ่งกับฮาร์ดแวร์) ถ้าเป็นบริษัทหรือกลุ่มขนาดเล็กถึงกลางก็ใช้ PHP พวกขายของแต่ไม่พัฒนาโปรแกรมใช้เองก็มักซื้อโปรแกรม (ที่เขียนและทดสอบเสร็จแล้ว) จำพวก Content Management System มาใช้ โอเค ให้ผมเลือก ผมก็ยังอยากเป็นพนักงานบริษัท ทำงานกับบริษัทที่มีเงินทุนเยอะ มีทีมที่ช่วยกันพัฒนา ผมจึงเลือก จาวา ครับ

>> กว่าจะจริงจังกับจาวา...
ผมเองแรกเริ่มก็เขียนปาสคาล (จำเวอร์ชันไม่ได้) ถัดมาก็ภาษาซี เฮ้ผมอยากบอกว่าภาษาซีนี่สนุกครับ มีไวยากรณ์และรูปแบบที่เข้าใจได้ไม่ยาก int x = 0; นี่เป็นอะไรที่ผมงงมากเมื่อนำมาประกอบกับ x++; ซึ่งบรรจุอยู่ภายใน loop ผมใช้เวลาทำความเข้าใจกับ for loop นานมากว่าค่าของมันเพิ่มขึ้น 1 ได้อย่างไร อย่างไรก็ตามเมื่อผมศึกษาเรื่องคลาสของภาษาซี ผมกลับรู้สึกว่ามันตรวจสอบยากและซับซ้อน ทั้งยังมีอะไรให้จำเยอะแยะ แต่มันก็เป็นครูคนแรกในฐานะที่ทำให้ผมรู้จักกับ OOP แบบผิวเผิน

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

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

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

>> แล้วรูปด้านล่างนี้ก็คือหนังสือที่ผมใช้เรียนด้วยตัวเองประกอบกับความรู้ที่อาจารย์สอนผม ซึ่งผมเลือกใช้ไลบรารี JOGL เป็นตัวหลักในการวาดครับ


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


>> ไว้ผมจะมาเล่าให้ฟังใหม่นะ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น