แนวทางการเรียนรู้ Coding สำหรับปี 2019

แนวทางการเรียนรู้ Coding สำหรับปี 2019

HOME › แนวทางการเรียนรู้ Coding สำห...

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

ในช่วง 5 ปีที่ผ่านมาดูเหมือนจะมีการผลักดันให้คนหันมาเรียนรู้การ coding และเป็น software engineer กันมากขึ้น ซึ่งหากคุณดูจาก Google Trends จะเห็นการเติบโตตั้งแต่ช่วงปี 2012

จากการทำงานกับ Coderbyte ในช่วง 7 ปีที่ผ่านมา พร้อมกับการทำงานในฐานะ software engineer ในบริษัทต่างๆ Daniel มีโอกาสที่จะช่วยคนอื่นๆ ในกระบวนการเรียนรู้ Coding และดูพวกเขากลายเป็น software developer มืออาชีพ นี่คือ 3 เรื่องสำคัญที่เขาได้เรียนรู้ เพื่อให้ผู้ที่จะเข้ามาในแวดวงนี้ได้เข้าใจมากขึ้น

1. programming language ที่คุณเริ่มต้นเรียนรู้ ควรสอดคล้องกับเป้าหมายของคุณ

บางครั้งคุณอาจเห็น senior engineers สนับสนุนให้คนอื่นลองเรียนรู้ภาษา C ก่อน เพราะจะได้เข้าใจใน concept ต่างๆ ที่สำคัญของ Computer Science ยิ่งขึ้น แต่ปัญหาคือ ที่จริงคุณสามารถเรียนรู้วิธีการเขียน Code และได้งาน software engineer ได้โดยไม่จำเป็นต้องรู้ภาษา C ก็ได้

หากมีใครที่กำลังเรียนรู้เกี่ยวการ Coding เพื่อให้สามารถออกแบบ website และได้งานทำที่ดีขึ้น พวกเขาก็ไม่ควรได้รับคำแนะนำให้มาเขียน Program ผ่าน lambda calculus หรือ Lisp แต่ควรจะเริ่มด้วย HTML, CSS และ JavaScript ถ้ามีใครต้องการที่จะเป็น Android developer พวกเขาควรฝึกฝนและเรียนรู้ภาษา Java
Yaron Minsky จาก Jane Street เขียนบทความที่มีประโยชน์มากเกี่ยวกับ ภาษาใดที่เขาจะสอนในหลักสูตรการเขียน program เบื้องต้น ซึ่งเขาได้แสดงความเห็นไว้ดังนี้:

" ในหลายๆ ทาง ภาษา Python ดูจะเป็นภาษาที่ใช้เพื่อการสัมภาษณ์งานที่ดีเยี่ยม แต่สิ่งที่ Daniel เห็นก็คือนักเรียนที่เรียนรู้ Python มักจะเดินออกไปพร้อมกับ model ที่ค่อนข้างหลวมๆ ในเรื่อง semantics ของภาษา คุณอาจจะประหลาดใจที่ส่วนหนึ่งของนักเรียนที่มีความสามารถสูงในการเขียน program ใน Python ไม่สามารถบอกได้ว่า Python lists ถูก implement ได้อย่างไร เขาไม่มีอะไรจะพูดเกี่ยวกับความสามารถของนักเรียนเหล่านั้นในการอธิบายถึง semantics ของ language features อย่าง generators หรือ decorators "

จากข้อความด้านบน อาจดูเหมือนบางคนอาจยังใหม่ในการเขียน program หากพวกเขาอยากเป็น programmer ที่ดีและได้งานทำ พวกเขาอาจต้องเรียนรู้ภาษาอย่างเช่น ภาษา C แล้วถ้าพวกเขาตัดสินใจที่จะเรียนรู้ Python เพิ่มด้วย พวกเขาจะต้องเข้าใจว่าวิธีที่ generators ถูก implement หรือ ผู้สัมภาษณ์อาจคิดว่าพวกเขาไม่ใช่ programmer ที่ดี ซึ่งนั่นไม่เป็นความจริง

ถ้าเป้าหมายของคุณคือ อยากได้งานแรกเป็น software developer คุณอาจไม่จำเป็นต้องเข้าใจสิ่งต่างๆ ในย่อหน้าก่อนไปซะทั้งหมด (แต่ที่จริงมันมีประโยชน์) ในทางกลับกัน ถ้าคุณทำงานด้าน programming อยู่แล้ว และเป้าหมายของคุณคือ การทำความเข้าใจวิธีการทำงานของ computer ให้ดียิ่งขึ้น บางทีการเรียนรู้ภาษา C หรือ Assembly ก็เป็นแนวคิดที่ดี แต่ทุกอย่างขึ้นอยู่กับเป้าหมายของคุณด้วย

นี่คือ Stack Overflow 2018 Developer Survey ซึ่งมีการจัดอันดับของภาษายอดนิยม อีกทั้ง Peter Norvig ได้เขียน essay ที่ดีมากเกี่ยวกับการเรียนรู้การ coding และนี่คือสิ่งที่เขาเขียนไว้ในตอนท้าย:

" คำแนะนำของผมสำหรับภาษา programming แรก น่าจะเป็น Python หรือ Scheme อีกทางเลือกหนึ่งคือ Javascript ซึ่งไม่ใช่เพราะมันมีการออกแบบมาอย่างดีสำหรับผู้ที่อยากจะเริ่มต้น แต่เนื่องจากมันมี online tutorials เป็นจำนวนมาก "

ข้อคิด: ควรแน่ใจว่าสิ่งที่คุณกำลังเรียนรู้ ไปในทางเดียวกันกับเป้าหมายของคุณ อย่าตัดสินใจเลือกภาษา C หรือ Lisp เพียงเพราะมันถูกสอนใน computer science

2. Computer science Software engineering

มีเรื่องที่เป็นที่รู้กันว่า software engineer ที่ดี ควรจะเข้าใจในหัวข้อพื้นฐานของ Computer Science ได้เช่น data structures, memory allocation, วิธีการทำงานของ parser, caching, database indexes เป็นต้น ในขณะที่สิ่งเหล่านี้เป็น concept ที่สำคัญมากในด้าน Computer Science แต่เมื่อมาถึงการสร้าง software จริงๆ อาจมี concept เหล่านี้บางส่วนที่สำคัญน้อยกว่าที่คุณคาดหวังไว้ นี่คือสิ่งที่ Chuck Connell เขียนไว้ essay ชื่อ " Software Engineering ≠ Computer Science " ไว้ดังนี้:

" Software engineering มีส่วนประกอบที่จำเป็นต่อมนุษย์ อย่างเช่น Software maintainability เป็นความสามารถของมนุษย์ในการทำความเข้าใจ ค้นหา และซ่อมแซมข้อบกพร่อง ใน software system การบำรุงรักษา software อาจได้รับอิทธิพลจากความคิดทางด้าน Computer Science บางอย่าง...แต่ความสามารถในการบำรุงรักษามีความเกี่ยวข้องกับมนุษย์ และความสามารถของพวกเขาในการเข้าใจความหมายและความตั้งใจของ source code นั้น "

นี่คือเหตุผลที่มี engineers และ software developers จำนวนมากที่มุ่งเน้นไปในการแก้ปัญหาด้วยชุดเครื่องมือ แม้ว่าพวกเขาจะไม่มีพื้นฐานความรู้ในด้านนี้อย่างเป็นทางการ แต่ตอนนี้พวกเขาก็ได้ทำงาน engineers ในบริษัทที่เป็นที่มีชื่อเสียง อย่างเช่น Sebastian McKenzie ได้สร้าง Babel โดยที่ไม่ได้มีความรู้อย่างชัดเจนในหัวข้อต่างๆ เช่น language grammars, parsers, or programming language design

Computer science และ software engineering เป็นสิ่งที่ควบคู่ไปด้วยกัน แต่คุณไม่จำเป็นต้องเข้าใจในหัวข้อต่างๆ ของ Computer science ในขั้นสูงนับหลายร้อยเรื่อง เพียงเพื่อให้ได้งานด้านการพัฒนา software (แต่คุณจะได้เรียนรู้มากขึ้นในการทำงาน) Daniel เคยได้ร่วมงานกับ engineers จำนวนมากที่มาจากหลากหลายสาขา เช่น economics, art และ writing และพวกเขาก็ไม่ได้มีความเป็น engineer น้อยไปกว่าคนที่จบ computer science มาเลย ขอแนะนำว่าคุณควรมีความเข้าใจในหัวข้อต่อไปนี้:

  • Basic data structures/algorithms
  • Git/version control
  • Terminal/UNIX commands
  • How a database and indexes work
  • MVC concepts (back-end vs. front-end)

ข้อคิด: อย่ากลัว concept ในขั้นสูงของ computer science คุณควรให้ความสำคัญกับการสร้าง software รวมทั้งการเรียนรู้อยู่เสมอและท้าทายตัวคุณเอง อย่าคิดว่าคุณต้องอ่านหนังสือ computer architecture ขั้นสูงหรือ TAOCP เพื่อจะได้เรียกตัวเองว่าเป็น software engineer "อย่างแท้จริง"

3. การสัมภาษณ์งานทางด้าน Technical อาจไม่ใช่สิ่งที่ดีที่สุด

มีบทความนับไม่ถ้วนบน internet เกี่ยวกับการสัมภาษณ์ทางด้าน technical ที่ช่างน่ารำคาญ แย่ และมีข้อบกพร่องมากมาย อย่างที่เห็นด้านล่างนี้ ก็เป็นบทความส่วนหนึ่ง:

มี resources มากมายบนโลก online ที่ช่วยให้คุณ เตรียมตัวสำหรับการสัมภาษณ์เกี่ยวกับการ coding เช่น CoderbyteLeetCodeInterview CakeInterviewBit และอื่นๆ อีกมากมาย

สิ่งสำคัญก็คือ เนื่องจากการสัมภาษณ์ทางด้าน Technical เป็นเพียง hot topic ใน community ต่างๆ และเนื่องจากแต่ละบริษัททำมันแตกต่างกัน คุณต้องเข้าใจก่อนว่า แค่การที่บางบริษัทปฏิเสธคุณ มันก็ไม่ได้หมายความว่าคุณจะไม่ได้เป็น software engineer มีตัวอย่างให้เห็นมากมายที่ engineer ถูกปฏิเสธจากบริษัทชั้นนำบางแห่ง แล้วจากนั้นพวกเขาก็ไปทำงานที่อื่นหรือแม้แต่มีบริษัทเป็นของตัวเอง

มีบางบริษัท อย่างเช่น Stripe ที่มีการเปลี่ยนแปลงวิธีการสัมภาษณ์งานให้สอดคล้องกับการทำงานจริงของ engineer :

เราให้ผู้สมัครสอบสัมภาษณ์ผ่าน laptop ของตนเอง ” ซึ่งกล่าวโดย Raylene Yung, head of product ของ Stripe นี่เป็นรูปแบบที่สร้างความกดดันที่ต่ำกว่า ซึ่งทำให้ผู้สมัครสามารถแก้ไขสถานการณ์ได้อย่างรวดเร็วและเป็นส่วนตัวในกรณีที่พวกเขาทำอะไรผิดพลาดไป เมื่อผู้สมัครทำเสร็จสิ้นแล้ว พวกเขาก็จะแสดงผลงานออกมา 

ข้อคิด: การสัมภาษณ์ทางด้าน Technical อาจสร้างปัญหาเกี่ยวกับเรื่องความเหลื่อมล้ำทางการศึกษา  การถูกปฏิเสธ ก็ไม่ได้หมายความว่า คุณจะไม่ใช่ software engineer ที่ดี เพียงคุณฝึกฝนและเรียนรู้ แล้วในที่สุดคุณจะสามารถไปถึงจุดที่คุณต้องการได้เช่นกัน

ที่มา:  https://medium.com/


ISM Technology Recruitment Ltd. (#1 Tech Recruiter in Thailand) เราเชี่ยวชาญในธุรกิจ IT Recruitment & IT Outsourcing โดยเฉพาะ เปิดทำการกว่า 25 ปี มีพนักงานทุกสายและทุกระดับทางด้าน IT ที่ได้ร่วมงานกับลูกค้าองค์กรใหญ่ที่มีชื่อเสียงและบริษัทข้ามชาติมากมาย หากคุณเป็นคน IT ที่อยากทำงานท้าทายและร่วมงานกับองค์กรชั้นนำ สามารถฝากประวัติการทำงาน (Resume) ของคุณไว้กับ ISM ได้ที่ https://www.ismtech.net/submit-your-resume แล้วคุณจะพบว่าอนาคตและโอกาสก้าวหน้ากำลังรอคุณอยู่