7 ปัจจัย ที่ใช้ในการเลือกเรียนรู้ภาษา Programming

06-มี.ค.-19

คัมภีร์เทพ IT

เชื่อว่าคงมี Programmer/Developer หลายคนที่เคยเกิดคำถามในใจที่สุด Classic ว่า “ควรจะเรียนรู้ภาษา Programming ใดดี” เนื่องจากแต่ละภาษาล้วนมีวัตถุประสงค์หรือจุดเด่น-จุดด้อย ที่แตกต่างกันไป วันนี้ทีมงานมีบทความของคุณ Kamil Lelonek มาให้ได้อ่านกัน เพราะเขาจะมาบอกถึง 7 ปัจจัย ที่ใช้ในการเลือกเรียนรู้ภาษา Programming มาดูกันว่ามีปัจจัยใดบ้าง

1. Adoption

  • มีบริษัทประเภทใดบ้างที่ใช้มัน?
  • มีการนำมันไปใช้งานในด้านใดบ้าง?
  • วัตถุประสงค์หลักของมันคืออะไร?

ก่อนอื่นคุณต้องพิจารณาให้ดีถึง Field ที่เฉพาะด้านที่จะนำ Technology ไปใช้ด้วย เช่น ด้าน Automotive (C++), ML/AI (Python), Low-level และที่เกี่ยวกับ Server (GO), Web Applications (Ruby), Enterprise Projects (Java/C#) เป็นต้น

และคุณต้องสำรวจความสนใจของคุณด้วยว่า อยากทำงานในบริษัทแบบใดไม่ว่าจะเป็น Startup, Software House ขนาดเล็ก, Corporation ขนาดใหญ่, Fin-Tech หรือองค์กรภาครัฐ แล้วค้นหาเทคโนโลยีที่เหมาะสมกับแต่ละที่ เช่น .NET ส่วนใหญ่มักจะใช้ในองค์กรขนาดใหญ่ แต่หากคุณต้องการทำงานในบริษัทขนาดเล็ก บางทีคุณอาจต้องพิจารณา Ruby แทน เป็นต้น

2. Community

Developer

คุณเคยอยากรู้ไหมว่า แต่ละภาษา Programming มี Developer ใช้งานมันอยู่กี่คน? มีสักกี่คนที่ใช้ RUST หรือ F#? ทำไมเรื่องนี้จึงสำคัญ ก็เพราะว่า คุณจะได้รู้ว่ามีคนที่จะช่วย Support คุณมากน้อยแค่ไหนยังไงล่ะ

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

Recruitment

เรื่องนี้ Programmer มือใหม่อาจจะไม่ค่อยให้ความสำคัญมากนัก เพราะคุณคงสมัครงานตามความสามารถที่คุณมี แต่หากคุณเป็น CTO หรือ Tech/Team Lead แล้วล่ะก็ เรื่องนี้จำเป็นมาก เพราะหน้าที่คุณคือ การเลือก Tool, Technology และต้องรับสมัครคนเพื่อมาทำงานใน Project ของคุณด้วย หากคุณเลือกภาษาที่แปลกใหม่หรือคนมีใช้งานน้อย (เช่น Elm) เชื่อว่าการหาคนที่มีประสบการณ์มาทำงานกับคุณคงไม่ใช่เรื่องง่ายเลย

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

3. Supporter

Creator

  • ใครคือ Creator?
  • Creator มีส่วนร่วมใน Community บ้างไหม?
  • Creator มีความยึดติดกับสิ่งที่พวกเขาสร้างมากน้อยแค่ไหน

นี่เป็นสิ่งสำคัญในเรื่องของ Technology เพราะ Creator อาจมีส่วนร่วมใน Community ก็จริง แต่วันดีคืนดีเขาอาจถอนตัวไปก็ได้

ขอยกตัวอย่างภาษา Elixir ซึ่งมี José Valim เป็นทั้ง Co-founder & Creator เห็นได้ชัดว่า José มีส่วนร่วมในการ Develop ภาษาอย่างแท้จริง เขาตอบกลับคำถาม, ข้อสงสัยต่างๆ มากเท่าที่จะทำได้บน GitHub เขาให้ Feedback ใน Elixir Forum และได้เข้าร่วม Meetup และ Conference ต่างๆ แม้จะเป็นงานเล็กๆ ก็ตาม เพราะอยากมีส่วนร่วมและสนับสนุนให้ผู้คนหันมาใช้ Elixir

Company

  • มีบริษัทใดบ้าง ที่ Support ภาษาเหล่านั้น?
  • อะไรคือสิ่งที่ทำให้ภาษานั้น “หายไป” ในไม่ช้า?
  • มีเงินทุนสนับสนุนในภาษานั้นๆ มากน้อยแค่ไหน?
  • ภาษาเหล่านั้นมีวิวัฒนาการเป็นอย่างไรบ้าง?

บางครั้งการพิจารณาถึง การมีบริษัทที่ให้การสนับสนุนภาษาใดภาษาหนึ่ง ก็เป็นสิ่งสำคัญ เช่น Google เป็นผู้สนับสนุน GO? หรือ Facebook เป็นผู้อยู่เบื้องหลัง React? Rust ได้รับการสนับสนุนโดย Mozilla, C# มาจาก Microsoft และ Swift ได้รับการพัฒนาโดย Apple เป็นต้น ในทางกลับกัน Clojure และ Python ได้รับการกล่าวขานว่า ได้รับการขับเคลื่อนจาก Community ซึ่งอาจมีทั้ข้อดีและข้อเสีย

ส่วนเรื่องเงินสนับสนุนก็เป็นเรื่องสำคัญ เช่น Oracle จะพัฒนา Java ทุกปี ทำให้ไม่ต้องกังวลเกี่ยวกับอนาคต ความต้องการของตลาด และเรื่องงาน คุณจะเห็นว่า Angular จะถูก Release ทุกๆ 6 เดือน ซึ่งคุณจะรู้สึกมั่นใจว่าจะมี Feature ใหม่ๆ ออกมาเรื่อยๆ และคุณจะสามารถวางแผนการ Upgrade ได้

4. Library

  • มี Library อยู่มากน้อยแค่ไหน?
  • มีอะไรที่ช่วย Integrate Service ต่างๆ หรือไม่?

อย่างเช่น หากพิจารณา Ruby หรือ JavaScript คุณสามารถมั่นใจได้เกือบ 100% ว่า แทบทุก Tool มีการ Integrate กับภาษาเหล่านี้ คุณไม่ต้องกังวลกับการเขียน Tool หรือการทำงานกับ API บางตัว คุณจะพบ Library ที่สามารถ Integrate เข้ากับ Twitter, Twillio, GitHub, Dropbox และอื่นๆ ได้ อย่างไรก็ตามหากคุณเลือก Elixir คุณอาจมีปัญหาในการหา Library ที่ได้รับการ Maintain จาก Community แม้ตอนนี้จะดีกว่าเมื่อ 4 ปีที่แล้ว แต่บางครั้งก็ยังพบปัญหาอยู่บ้าง

ดังนั้น หากคุณวางแผนที่จะสร้าง Tool ที่จะต้องอาศัย External API อย่างมาก และรวมการ Integrate หลายๆ อย่างเข้าด้วยกันคุณอาจจำเป็นต้องพิจารณา Technology ที่แปลกใหม่ให้น้อยลง จำไว้ว่า เป้าหมายของคุณคือ การสร้าง Product และนำเสนอ Feature ทางธุรกิจ ไม่ใช่เพื่อการ Develop Library หรือการ Integrate (เว้นแต่นั่นคือ ธุรกิจจริงๆ ของคุณ)

5. Salary

  • Programmer ที่ใช้ภาษานั้นๆ ได้รับค่าตอบแทนดีไหม?
  • อะไรคือความต้องการของตลาดสำหรับ Technology นั้นๆ?
  • มีการแข่งขันสูงระหว่าง Developer หรือไม่?

How is it currently?

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

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

Trends

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

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

6. Complexity

มันคุ้มค่าที่จะพิจารณาตรวจสอบดูว่า คุณชอบ Syntax ของภาษานั้นๆ มากน้อยแค่ไหน, มีวิธีจัดการ Error อย่างไรบ้าง, ต้องเขียน Code มากแค่ไหนเพื่อให้เกิด Concurrency หรือ Parallelizm, ต้องใช้เวลาในการอ่านและทำความเข้าใจ Code มากน้อยเพียงใด

อย่าง Ruby หรือ Python มันเป็นภาษาที่ทุกคนสามารถเข้าใจได้ง่าย พอมาดูที่ภาษา C คุณอาจต้องใช้ความพยายามอย่างมากเพื่อให้เข้าใจสิ่งที่เกิดขึ้น ส่วน Java และ C# นั้นมักต้องเขียน Code ยาวเทอะทะ ในขณะที่ Clojure อาจมีความซับซ้อนเกินไปในบางครั้ง

7. Tooling

หากไม่กล่าวถึง Library แล้ว Tool ที่ Support ในการ Develop ก็นเป็นอีกหนึ่งปัจจัยที่ต้องพิจารณา ซึ่งอาจรวมถึง Builders, Compilers, Static Analyzers, Formatters, Testing และ Deployment Tools ด้วย

ลองคิดดูว่า มันยากแค่ไหนตอนที่จะเริ่มต้นสัก Project หนึ่ง ต้องเขียน Code ต้อง Test มันและ Deploy มันไปสู่ Production, 9ต้องใช้เวลานานแค่ไหนในการ Release Application เวอร์ชันใหม่ หลังจากทำการ Lint Codebase ของคุณ, มันง่ายแค่ไหนในการ Migrate Database, Download และ Upgrade Dependencies หรือ Build Executable Package ของคุณ

หลังจากผ่านไประยะหนึ่ง คุณอาจมีชุดของ Script ที่ใช้ทำงาน แต่ลองคิดถึง Programmer ที่เพิ่งมาใหม่หรือเป็นมือใหม่ดูสิ คิดว่าพวกเขาจะทำสิ่งเหล่านี้ได้อย่างง่ายดายเหมือนคุณหรือไม่? Feature เหล่านี้มีอยู่ในภาษานั้นอยู่แล้ว หรือ Developer ต้องเตรียม Tool ของตัวเอง? Syntax ก็เป็นอีกเรื่องหนึ่ง แต่ในที่สุดคุณก็ต้องเปิดเผย Application ของคุณไปทั่วโลก คุณต้องทุ่มเทอะไรกับมันไปบ้าง

สรุป

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

ที่มา:  https://blog.lelonek.me/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด