โปรแกรมเมอร์เก่งๆ มีแนวทางพัฒนาตัวเองอย่างไรบ้าง [ถาม-ตอบ]

หน้าแรก ฟอรั่ม กระดานสนทนาทั่วไป โปรแกรมเมอร์เก่งๆ มีแนวทางพัฒนาตัวเองอย่างไรบ้าง [ถาม-ตอบ]

กระทู้นี้ประกอบด้วย 1 ข้อความตอบกลับ มี 1 เสียง และอัปเดตครั้งสุดท้ายโดย  admin 5 เดือน มาแล้ว

  • ผู้เขียน
    ข้อความ
  • #196

    admin
    Keymaster

    A: มองหาจุดอ่อนของตัวเองทักษะด้านไหนที่ขาด ด้านไหนเก่งแล้ว ส่วนการพัฒนาตัวเองโดยการไปอ่านบทความคนเก่งๆๆ ในต่างประเทศทดลองทำให้เข้าใจ สุดท้ายควรมีความทะเยอะทะยาน


    B: จะรู้ได้ไงว่าตัวเราเก่งแล้วครับ ผมว่าแค่เราวางเป้าหมายทุกวันว่าจะเรียนรู้อะไรให้ level อัพส่วนนั้นๆ ก็ดีแล้วนะครับสำหรับผม ยิ่งเรียนรู้จะยิ่งเจอส่วนที่ไม่รู้อีกเยอะครับ ใช้วิธีนี้สำหรับการเรียนภาษา และอ่านหนังสือตลอดครับ เพราะเราเรียนรู้ทั้งหมดภายในวันเดียวไม่ได้ ต้องเรียนตามจุดประสงค์ และ mark ส่วนที่ติดไว้ แล้วค่อยมานั่งวางเป้าอ่านส่วนที่ติดทีหลัง พยายามอ่านภาพรวมเข้าใจให้ได้ก่อน แล้วค่อยมุ่งเน้นครับ


    C: อย่างแรกต้องพัฒนาภาษาอังกฤษก่อน ไม่งั้นไม่มีทางเก่ง เพราะความรู้ในไทยแคบมาก วิธีพัฒนาภาษาอังกฤษคือลงโปรแกรมดิกชันนารี เช่น lingoes


    D: โปรแกรมเมอร์เมืองไทยเหมือนต้องคำสาป คือไปถึงจุดนึงมักจะผันตัวเองไปเป็น SA กันเสียส่วนมาก สาเหตุหลักๆ เลยก็คือมันตันที่เพดานรายได้หารด้วยเวลา คือพองานใหญ่ขึ้น ต้นทุนเวลาในการเขียนโปรแกรมมันไม่คุ้มค่าต่อเวลาที่ตัวเองเสียไป งานเขียนโปรแกรมก็มักจะโยนให้เด็กๆเขียนแทน ดังนั้นจึงต้องควบคุมได้(คุยได้)ด้วย พวกที่จะเขียนโปรแกรมต่อหาเลี้ยงชีพเพราะใจรักน้อยมากๆ.
    ดังนั้น โปรแกรมเมอร์เก่งๆ จึงจะวัดกันที่ code สะอาด, มีคอมเมนต์, ส่งต่อได้, พัฒนาต่อยอดได้ (อย่าไปคิดว่านั่งเขียนคนเดียว แบบในหนังนะ มันไม่ใช่นะ!) แต่ที่สำคัญที่สุดคือ การคุยกับคนอื่นรู้เรื่อง ทำงานเป็นทีมได้
    .
    สำหรับ “การคุยกับคนอื่นรู้เรื่อง” นี่ไม่ใช่เรื่องง่ายนะ บอกเลยว่าน้อยคนจะทำได้ เพราะ บางคนก็ EGO สูงเกิน บางคนก็คุยได้แค่ระดับเพื่อนร่วมงาน (แต่คุยกับลูกค้าไม่ได้) บางคนคุยได้หมดแต่วางแผนงานหรือคุมงานไม่ได้ ดังนั้นใครที่ทำได้ก็จะได้รับบทบาทที่สูงขึ้นจนค่าแรงมันสูงกว่าการต้องลงมานั่งเขียนโค้ด ความเทพมันจึงอยู่ตรงนี้ (ผลงาน) พอมูลค่างานมันก็มากขึ้น ผลประโยชน์ก็เลยมากขึ้นตามไปด้วย จนผันตัวเองกลายเป็น SA ในที่สุด
    .
    บ้านเราเป็นประเทศปลายน้ำเทคโนโลยี และวงการมันแคบ ช่องทางการเป็นโปรแกรมเมอร์อาชีพต่อจึงไม่ค่อยหลากหลาย ถ้าถามว่าโปรแกรมเมอร์เก่งๆ พัฒนาตัวอย่างไร ก็ตอบว่าให้ดู SA เป็นแนวทางครับ 🙂


    E: ต้องเก่งเรื่องคน คือ ต่อให้เรา coding เก่งเทพยังไงก็แล้วแต่ มันก็มีเพดานเรื่องเวลา เปรียบเทียบเหมือนเราคนเดียวก็คงสร้างบ้านหรูๆได้สักหลัง แต่ถ้าจะสร้างตึกต้องใช้ทีม ฉะนั้นต้องแบ่งเวลามาพัฒนาคนในทีมด้วย อีกอย่างคือ จัดการความคาดหวังลูกค้าเก่ง คือ สามารถหาวิธีที่จะทำให้งานบรรลุวัตถุประสงค์ได้โดยใช้เวลาและต้นทุนน้อยที่สุด แล้วนำวิธีนั้นไปเสนอกับลูกค้า (มีลูกค้าไม่น้อยที่ไม่รู้ว่ามีวิธีอื่นด้วย) ถ้าเห็นตรงกัน ก็ปิดงานไวขึ้น บางทีอาจไม่จำเป็นทำครบทุกข้อด้วยซ้ำ coding มันต้องเป็นอยู่แล้ว แต่อาจไม่จำเป็นต้องเป็นเทพจุติขนาดนั้น มันก็มีแนวคิดเรื่อง clean code, TDD อยู่ หรือถ้าอยากเก่งจริงๆต้องลองทำงานหลายๆแบบจนมี code library ส่วนตัว พอเจองานใหม่ก็ “อ้อ เคยทำแล้ว” แล้วก็ copy & paste แป๊บเดียวเสร็จ


    F:
    1.สมัยอ่อนหัด เขียนเยอะๆ ไปหาดูโค้ดชาวบ้าน แล้วเอามาประยุกต์เป็นแนวทางของตัวเอง (อย่าไป copy ของเขามาทั้งหมด) การเขียนโปรแกรมมันควรออกมาจากความรู้ของเราถ่ายทอดลงไป ไม่ใช่ copy เขา วิธีการนี้ผมเรียก copy and improvment
    2.เขียนโค้ดให้สะอาด(มีบางท่านเม้นท์แล้ว) การเขียนโค้ดได้กับการเขียนโค้ดเป็นมันต่างกันนะครับ
    3.ตัวแปรควรจะต้องสื่อความหมาย และควรมี comment เอาไว้ว่าใช้ทำอะไร
    4.comment ควรจะทำเอาไว้เพื่ออธิบายความคิดเราว่าฟังก์ชั่นนี้ทำอะไร เพื่อป้องกันเราลิมและคนที่มาอ่านงานเราเยาจะได้เข้าใจ
    5.อะไรที่ใช้งานบ่อยแยกออกมาเป็น module ซะ

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


    G: เก่ง?

    เทียบกับอะไรครับ
    กับภาษาโปรแกรมที่ใช้ว่า เต็มร้อนรึยัง
    กับตัวเอง
    กับคนอื่น
    กับคนในองค์กร

    คือ ต้องมีแนวปฏืบัติ แล้วทำให้ทะลุแนวปฏิบัตินั้น ที่เพื่อนแนะมา ล้วนแค่แนวปฏิบัติ

    แล้วก็ดูว่า แนวฯของท่าน เมือเทียบกับองค์กรอื่นเป็นไง? benchmarking

    อีทีนี้ มองดูรอบๆ ‘วงการ’ นี้ว่ามี ‘มาตรฐาน’ ไหม เอาไป ทาบ กับ มาตรฐาน นั้นได้ไหม?

    อ้อ อย่าไปมองแค่มาตรฐานเดียวน่ะ

    อย่างนี้ พอไปได้ไหม?

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

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

    สองย่อหน้าข้างบนนั่น ทำได้ เก่งสมใจปรารถนาดั่งใจหวัง แน่นวล

    ผมไม่ใช่คนอ่อนน้อมอะไรนัก


    H:

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


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


    J: 1.อัลกอริธึมต้องดี….
    ถ้ารู้ตัวว่ายังไม่เก่งเรื่องนี้เท่าไหร่ ก็ฝึกเขียนออกมาเป็นโฟลวชาร์ตก่อน อดทนกับมัน อดทนเขียนมันออกมาเรื่อย ๆ เดี๋ยวก็เริ่มจับจังหวะการคิดแบบแตกการทำงานย่อย ๆ ออกมาได้เอง รวมถึงคิดออกมาเป็นระบบได้

    2.เบสิกแน่น ๆ….
    ใช้ tools ตัวไหน คำสั่งและวิธีการเขียนของตัวนั้นต้องแม่น อย่างน้อยจำคำสั่งที่เขียนบ่อย ๆ ได้สัก 20% ก็ยังดี
    สิ่งนี้จะช่วยให้เขียนได้ราบรื่นขึ้น
    เพราะเวลาที่ความคิดไหลลื่น ถ้าเราจำคำสั่งได้ เราจะสามารถเขียนโดยไม่สะดุดเลย ก็จะทำให้เราเขียนได้เร็วขึ้น เก่งขึ้น

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


    K: 1. เขียนโค๊ดตาม pattern ที่เค้ามีอยู่เดิม เพื่อให้ maintain ได้ในภายหลัง ไม่ใช่แหวกแนวจน เค้าจะสรรเสริญเมื่อเราไม่อยู่
    2. การเขียนโค๊ด ก้อจะพยายามแตกงานออกก่อนครับ ว่า ต้องทำอะไรยังไงบ้าง .. ซึ่งในบางครั้งก้อรู้ ว่ามันมีจุดบอด หรือ บัค แต่นั่นไม่ใช่ปัญหาใหญ่ ไว้มาแก้ไข เมื่องานรันได้ ดีกว่า ติดแค่ที่บัค แต่ไม่ขยับทำไรต่อไม่ได้เลยยย
    3. ทำความเข้าใจ pattern ที่เค้ามีให้ได้ .. เขียนเป็น ขั้นตอน Flow chart ออกมา เช่น เราต้องทำโมดูลเพิ่ม ที่โปรเจคนี้ เราต้องทำอะไรยังไงบ้าง .. มีไฟล์ อะไร ยังไง ลิงค์กันแบบไหนบ้าง ..


    L: ฝึกเขียนโปรแกรมให้userใช้งานง่ายๆแบบ ลากวาง แสดงผลออกมาเป็นกราฟสวยๆ ใช ้tools อะไรก็ได้ ที่ถนัดๆ , ฝึกทำงานเป็นทีมประสานงานกันด้วยtoolsแบบเดียวกัน github

    คำถาม-คำตอบจาก กลุ่มสมาคมโปรแกรมเมอร์ไทย

  • #665

    admin
    Keymaster

    ถาม:ถ้าผมจะเริ่มศึกษาการเขียนโปรแกรมต้องเริ่มต้นจากตรงไหนครับ
    ตอบ: ถ้าชอบอะไรที่จับต้องได้ เห็นรูปร่างทันทีที่กด save แนะนำลอง web programming ก่อนค่ะ เริ่มจาก html -​> css -​> js ที่เป็นพื้นฐานแบบเพียวๆเลย (หาอ่านใน w3school)​ แล้วค่อยเริ่มใช้พวก lib/framework ง่ายๆ bootstrap(css)​ jquery(js)​ ค่อยๆขยับมาอันที่ใหม่ๆ ซับซ้อนหน่อย angular react หรือ framework อื่นๆ
    ถ้าทำไปทำมา ไม่ได้ชอบทำเว็บละ อยากจะลองเขียนโปรแกรมรับอินพุท แล้วให้ผลลัพธ์ออกมา ก็ขยับต่อ ลองเขียน js เพียวๆ ดู แล้วลองเขียนภาษาอื่นบ้าง java, ruby, python บลาๆ ถ้าเป็นไปได้ ภาษาไหนที่ต้อง compile ลองทำความเข้าใจตัว complier ดู จะช่วยให้เราเขียนโค้ดได้ระวังขึ้น
    ระหว่างเรียนก็ศึกษาคอนเซ็ปโปรแกรมมิ่งต่างๆ OOP, Design Pattern, Functional Programming, Web Service, Database Design, TDD, DDD, Data Structure, Algorithm บลาๆๆ
    อย่าลืมศึกษา methodology ต่างๆในการผลิต software ด้วย มันจะทำให้เราทำงานเป็นระบบมากขึ้น Waterfall, Agile, Scrum, Lean อะไรก็ว่าไป เลือกใช้ที่เหมาะกับธรรมชาติของตัวเอง โปรเจคและทีม
    ศึกษา tool อื่นๆที่ทำให้เราทำงานได้ง่่ายขึ้น version control, git, continuous integration and delivery, cloud
    เฟรมเวิรคไหนที่เอามาใช้แล้วชอบ ศึกษามันลึกๆ เข้าไปอ่านโค้ดใน lib แล้วพยายามทำคมามเข้าใจ เราจะได้รู้ว่า จริงๆมันไม่มีอะไรที่ magic แต่ทุกอย่างเค้าแค่เตรียมไว้ให้เราใช้ง่ายๆแล้ว
    พอเราชอบด้านไหน เจอคีย์เวิร์ดใหม่ เราจะเก็บไปค้นหาอัตโนมัติ
    โลกของโปรแกรมมิ่งมันกว้างงงงมากกกก แต่วิธีการเรียนรู้ที่ทำให้เราเข้าใจมากสุด คงเป็นลงมือทำเลย ผิดถูกช่างมัน วันนี้อาจจะไม่ได้ดีืี้สุด แต่วันพรุ่งนี้มันจะดีกว่าวันนี้เอง
    ลองไปเลย ทุกคนต้องมี hello world ครั้งแรก มี error ครั้งแรก มีก็อบ error ไปเซิร์ดในกุเกิ้ลครั้งแรก มีก๊อบโค้ดคนอื่นครั้งแรก(ฮา)​ มีแก้โค้ดไปแก้โค้ดมาแล้วทำงานได้เฉยครั้งแรก
    แต่ไม่ว่าอะไรก็ตาม the best way คือ ทำมันเลย แล้วพึงบอกกับตัวเองบ่อยๆ I wont write a code that I dont understand. (อาจจะ cheat บ้าง 55555)​ แต่เชื่อเถอะ วันนึงมันจะ pay off เราเอง

คุณต้องเข้าสู่ระบบเพื่อตอบกลับกระทู้นี้