ผลต่างระหว่างรุ่นของ "นักเขียนโปรแกรม"

ละเมิด http://i-programmer.blogspot.com/2011/03/blog-post.html
(ละเมิด http://i-programmer.blogspot.com/2011/03/blog-post.html)
'''โปรแกรมเมอร์''' ({{lang-en|programmer}}) มีหน้าที่หลักคือ[[การเขียนโปรแกรม|การเขียนโปรแกรมคอมพิวเตอร์]] ซึ่งโปรแกรมเมอร์สามารถหมายถึงผู้ที่เชี่ยวชาญในการโปรแกรมเฉพาะด้าน หรือผู้ที่สามารถเขียนโค้ดได้สำหรับหลากหลายซอฟต์แวร์
[[เอดา ไบรอน]]ได้ชื่อว่าเป็นโปรแกรมเมอร์คนแรกของโลก เพราะเป็นคนแรกที่สามารถนำ[[ขั้นตอนวิธี]] มาเรียบเรียงเป็น[[ชุดคำสั่ง]] ให้กับเครื่องคำนวณได้ในปี [[พ.ศ. 2385]] (ค.ศ. 1842) ในยุคที่ยังไม่มีเครื่องคอมพิวเตอร์)
 
== โปรแกรมเมอร์ (programmer)คือ ใคร? โปรแกรมเมอร์ทำหน้าที่อะไร อาชีพของโปรแกรมเมอร์ ==
 
โปรแกรมเมอร์ (อังกฤษ: programmer) คือ ผู้เขียนโปรแกรมคอมพิวเตอร์ ซึ่งโปรแกรมเมอร์สามารถหมายถึงผู้ที่เชี่ยวชาญในการโปรแกรมเฉพาะด้าน หรือผู้ที่สามารถเขียนโค้ดได้สำหรับหลากหลายซอฟต์แวร์ หรือพูดง่ายๆก็คือ ผู้ที่เขียนโปรแกรมต่างๆที่เราใช้กันในปัจจุบันนี้แหละ เบื้องหนังของโปรแกรมที่เราใช้กันอยู่ทุกวันนี้ เช่นโปรแกรมดูหนัง ฟังเพลง เล่นอินเตอร์เน็ต เกมส์ เกิดจากโปรแกรมเมอร์เป็นผู้สร้างและพัฒนาขึ้นมาให้เราได้ใช้งาน
 
 
 
== หน้าที่หลักของโปรแกรมเมอร์ ==
การเขียนโปรแกรมคอมพิวเตอร์ (อังกฤษ: Computer programming)หรือ การเขียนโค้ด (Coding)เป็นขั้นตอนการเขียน ทดสอบ และดูแลซอร์สโค้ดของโปรแกรมคอมพิวเตอร์ ซึ่งซอร์สโค้ดนั้นจะเขียนด้วยภาษาโปรแกรม ขั้นตอนการเขียนโปรแกรมต้องการความรู้ในหลายด้านด้วยกัน เกี่ยวกับโปรแกรมที่ต้องการจะเขียน และอัลกอริทึมที่จะใช้ ซึ่งในวิศวกรรมซอฟต์แวร์นั้น โปรแกรมเมอร์ นำข้อมูลการออกแบบระบบคอมพิวเตอร์ รายละเอียดการวางโครงสร้างระบบคอมพิวเตอร์ จากนักวิเคราะห์ระบบ(Systems analyst) และนำมาเขียนโปรแกรมต่างๆ ตามที่นักวิเคราะห์ระบบใด้ออกแบบไว้ และทดสอบระบบ ก่อนที่จะนำไปให้นักออกแบบระบบตรวจสอบอีกครั้งเพื่อหาจุดบกพร่องของระบบ
 
== คุณสมบัติของนักโปรแกรมเมอร์ ==
• สำเร็จการศึกษาปริญญาตรีทางด้านคอมพิวเตอร์ เช่น เอกวิทยาการคอมพิวเตอร์ หรือเกี่ยวข้อง
• มีทักษะในการการเขียนภาษาคอมพิวเตอร์ เช่น PHP JAVA OOP VB เป็นต้น
• มีความคิดสร้างสรรค์ สามารถประยุกต์และดัดแปลงความรู้ความสามารถทางด้านโปรแรกมคอมพิวเตอร์ได้เป็นอย่างดี
• เป็นคนละเอียด การเขียนโปรแกรมต้องการความอดทนในการวิเคราะห์รายละเอียด ความเป็นคนละเอียดทำให้ programmer หลายๆ คนพัฒนาตนเองจนกลายเป็นมืออาชีพ
• มีความคิดลึกซึ้ง สามารถคิดได้หลายชั้น และมีความสามารถในการแบ่งงานเป็นส่วนๆ ได้โดยไม่หลงทิศทาง โปรแกรมบางโปรแกรมที่มีขนาดใหญ่
 
== Hacker ==
Hacker (แฮ๊คเกอร์) เป็นคำที่ใช้กับบางคนที่หมายถึง “โปรแกรมเมอร์ชาญฉลาด” และโดยคนอื่น โดยเฉพาะคนในสื่อยอดนิยม หมายความว่า “บางคน ผู้พยายามเจาะระบบคอมพิวเตอร์”
1) Eric Raymond ผู้ประมวล The New Hacker's Dictionary นิยาม hacker เป็นโปรแกรมเมอร์ชาญฉลาด “good hack” คือ คำตอบฉลาดของปัญหาทางโปรแกรมและ “hacking” เป็นการกระทำนั้น Raymond ให้คุณลักษณะห้าแบบที่เป็นคุณสมบัติเพียงพอของ hacker
- บุคคล ผู้สนุกสนานกับการเรียนรู้รายละเอียดของภาษาโปรแกรมหรือระบบ
- บุคคล ผู้สุกสนานกับการกระทำจริงจังด้านโปรแกรมแทนที่เพียวทฤษฎีเกี่ยวกับเรื่องนี้
- บุคคล ที่มีความสามารถเจาะเข้าไปในบุคคลอื่น
- บุคคล ผู้เข้าใจโปรแกรมอย่างรวดเร็ว
- บุคคล ผู้เชี่ยวชาญภาษาโปรแกรมหรือระบบเฉพาะ เช่น “Unix hacker” นักเจาะระบบ Unix
Raymond ไม่เห็นด้วยกับการใช้คำนี้สำหรับบางคน ผู้พยายามเจาะระบบของคนอื่น หรือกรณีอื่น ใช้โปรแกรมหรือความรู้เชี่ยวชาญเพื่อกระทำให้เสียหาย เขาพอใจกับคำว่า cracker กับความหมายนี้
2) คำว่า hacker นิยมใช้ในสื่อเพื่ออธิบายคนบางคน ผู้พยายามเจาะเข้าสู่ระบบคอมพิวเตอร์ ตามปกติ hackerประเภทนี้จะเป็นโปรแกรมเมอร์หรือวิศวกรที่มีความสามารถกับความรู้ทางเทคนิคเพียงพอเพื่อทำความเข้าใจจุดอ่อนในระบบคอมพิวเตอร์ สำหรับการใช้งานมากกว่านี้
 
== อาชีพโปรแกรมเมอร์ ==
ในยุคที่เทคโนโลยีได้รับการพัฒนาไปอย่างรวดเร็ว คงไม่มีใครปฏิเสธว่าสิ่งอำนวยความสะดวก ไม่ว่าจะเป็นอุปกรณ์อิเล็กทรอนิกส์ เครื่องใช้ไฟฟ้าต่าง ๆ ได้เข้ามาปรับเปลี่ยนวิถีการดำเนินชีวิตของมนุษย์ให้มีความสะดวกสบายและรวดเร็วมากยิ่งขึ้น
คอมพิวเตอร์ ก็เป็นอีกผลงานหนึ่งที่เข้ามามีบทบาทต่อการดำรงชีวิตในปัจจุบัน เราใช้คอมพิวเตอร์เพื่อการทำงานในออฟฟิส การจัดการเอกสาร การค้นหาข้อมูล หรือแม้กระทั่งการติดต่อสื่อสารกับคนที่อยู่ต่างสถานที่ในเวลาที่รวดเร็ว บุคคลผู้ที่อยู่เบื้องหลังความสำเร็จของผลงานเหล่านี้ คือ ผู้เขียนโปรแกรมคอมพิวเตอร์ หรือที่เรารู้จักกันในชื่อ โปรแกรมเมอร์ (Programmer) ที่บุกเบิกสิ่งประดิษฐ์และนวัตกรรมขึ้นมา พวกเขาทำงานกันอย่างไร ต้องมีความรู้และคุณสมบัติอย่างไรเพื่อจะเป็นโปรแกรมเมอร์ วันนี้เรามาทราบกันครับ
 
== ลักษณะการทำงานของนักโปรแกรมเมอร์ ==
โปรแกรมเมอร์ จะทำหน้าที่ นำข้อมูลการออกแบบรายละเอียดการวางโครงสร้างระบบคอมพิวเตอร์ จากนักวิเคราะห์ระบบงาน มาเขียนเป็นโปรแกรมต่าง ๆ ภาษาที่ใช้ในการเขียนโปรแกรมจะแตกต่างกันไปตามลักษณะเครื่องของระบบฐานข้อมูล ทดสอบระบบและส่งให้นักวิเคราะห์ระบบทำการตรวจสอบอีกครั้งเพื่อหากจุดบกพร่องและแก้ไขก่อนนำไปใช้จริง
โปรแกรมเมอร์ยังต้องทำหน้าที่ รับรายละเอียดของความต้องการของผู้ใช้ระบบ (User) จากนักวิเคราะห์ระบบ (System Analyst) จัดทำแผนภูมิ (Flowchart) ขั้นตอนการทำงานที่ละเอียด และถูกต้องตามหลักวิชา เพื่อประโยชน์ในการเขียนโปรแกรมสำหรับการประมวลผลด้วยคอมพิวเตอร์ วิเคราะห์แผนภูมิหรือแผนผังสายงาน แต่เพียงบางส่วนหรือทั้งหมด
 
== คุณสมบัติที่จำเป็นในการเป็นโปรแกรมเมอร์ ==
• มีความรู้ทางด้านคอมพิวเตอร์ซึ่งสามารถเข้ารับศึกษาได้ในสถานบันการศึกษาที่เรียนทำการสอนหรือสำเร็จการศึกษาปริญญาตรีทางด้านคอมพิวเตอร์
• มีทักษะในการการเขียนภาษาคอมพิวเตอร์
• มีความคิดสร้างสรรค์ สามารถประยุกต์และดัดแปลงความรู้ความสามารถทางด้านโปรแรกมคอมพิวเตอร์ได้เป็นอย่างดี
 
== ความก้าวหน้าในการประกอบอาชีพ ==
นักเขียนโปแกรมคอมพิวเตอร์สามารถเลื่อนตำแหน่งให้สูงขึ้นได้ หากมีความสามารถในการวิเคราะห์ระบบและมีทักษะในการสื่อสารและถ่ายทอดความรู้ที่ดี สามารถก้าวไปยังตำแหน่ง นักวิเคราะห์ระบบงานหรือตำแหน่งที่สูงขึ้นไปอีกก็ได้ หรืออาจจะหาอาชีพเสริมได้ด้วยการรับสอนภาษาคอมพิวเตอร์และรับเขียนโปรแกรมและวางระบบคอมพิวเตอร์ในหน่วยงานหรือองค์กรต่าง ๆ รับเขียนโปรแกรมสำเร็จรูป หรือจัดตั้งบริษัทที่ปรึกษาทางด้านคอมพิวเตอร์ก็ได้
 
== ความต้องการของตลาดแรงงาน ==
การพัฒนาศักยภาพทางคอมพิวเตอร์ยังสามารถขยายตัวไปได้อีกมาก จำนวนโปรแกรมเมอร์ที่มีอยู่ในปัจจุบันจึงยังไม่เพียงพอกับความต้องการขยายตลาดวงการไอที อาชีพนี้จึงยังมีแนวโน้มความต้องการในตลาดแรงงานค่อนข้างสูงและให้ผลตอบแทนสูง สำหรับผู้ที่มีประสบการณ์และความสามารถมาก ดังนั้นโปรแกรมเมอร์จึงควรที่จะศึกษาหาความรู้เพิ่มขึ้นเพื่อนำมาปรับปรุงใช้ในงานและพัฒนาฝีมือให้เป็นที่ยอมรับมากขึ้น
 
== โปรแกรมเมอร์คนแรกของโลก ==
Lady Augusta Ada Byron, Coutress of Lovelace The world's first programmer
เลดี้ ออคุสตา เอดา เลฟเลค ได้รับการยกย่องว่าเป็นโปรแกรมเมอร์คนแรกของโลก
 
เกิดเมื่อปี ค.ศ.1816 ต่อมาพ่อแม่ของเธอก็แยกทางกัน ทางคุณแม่ของเอดาคิดว่า การศึกษาจะทำให้ลูกสาวได้ประโยชน์มากในอนาคต ตอนนั้นเอดาก็เลยถูกเลี้ยงมาให้เป็นผู้หญิงสมัยใหม่ ที่เรียนรู้ทั้งเรื่องวิทยาศาสตร์และคณิตศาสตร์ ต่างจากผู้หญิงสมัยก่อนๆ คือสังคมชั้นสูง แต่งสวยไปวันๆ
 
พออายุ 18 ปี เอดาได้ไปงานเลี้ยงอาหารค่ำที่บ้านของ Mrs. Somerville จนได้พบกับ Charles Babbage (บิดาของคอมพิวเตอร์) ผู้เชี่ยวชาญทางด้านคณิตศาสตร์ที่ได้รับการยอมรับอย่างสูง เอดาได้สนใจในแนวคิดของ Babbage มากๆจนอาสา เป็นผู้ช่วยงานและพัฒนา โดยสิ่งที่เธอทำคือการคิดสร้างภาษา(Progrmming)สำหรับเครื่อง Analytical Engine จากนั้นก็พัฒนาและคิดค้นแนวคิดต่างๆมาเรื่อยๆ
 
ในยุคนั้น ผู้หญิงอย่างเอดาก็ไม่ได้รับการยกย่องในงานทางวิทยาศาสตร์มากนัก แต่เธอก็ได้กำลังจากจากสามี ที่คอยให้ความเห็นอกเห็นใจ เอาใจช่วยในการฝ่าฟันปัญหาและอุปสรรคต่างๆ จนเธอได้การยอมรับในภายหลัง
 
เอดาเสียชีวิตด้วยโรคมะเร็งเมื่อปี ค.ศ.1852 ต่อมาปี ค.ศ.1979 ได้มีการตั้งชื่อคอมพิวเตอร์ที่เป็นระบบไร้คนควบคุมเครื่องหนึ่งซึ่งพัฒนาโดยกระทรวงกลาโหมของประเทศสหรัฐอเมริกาว่า "เอดา" เพื่อเป็นเกียรติให้กับเธอด้วย
 
เอดาจึงเป็นคนแรกที่มีแนวคิดว่าคอมพิวเตอร์เป็นเครื่องมือในการคำนวณ และไม่เพียงแต่คำนวณได้เท่านั้น เอดายังสามารถคาดการณ์เอาไว้ล่วงหน้าได้อีกว่า ในอนาคตคอมพิวเตอร์จะสามารถนำมาใช้สร้างเสียงดนตรีและช่วยกระบวนการ อุตสาหกรรมได้
 
 
== เริ่มต้นเป็นโปรแกรมเมอร์ ==
ในการพัฒนาโปรแกรมต่างๆนั้น จากประสบการณ์ของผมเห็นว่าการออกแบบเป็นส่วนสำคัญ การที่เราจะสามารถออกแบบสิ่งใดได้นั้น เราต้องมีความรู้ความเข้าใจอย่างน้อยก็ขอบเขต และข้อจำกัดของสิ่งๆนั้น เพื่อใช้ในการตัดสินใจ เช่น ขอบเขตต้องการให้เดินทางจากกรุงเทพฯ ไปยังนครสวรรค์ บางคนอาาจะบอกว่านั่งรถ, บางคนอาจจะนั่งเรือ, บางคนอาจจะนั่งรถไฟ หรือแม้กระทั่งการนั่งเครื่องบิน
 
จะเห็นว่าขอบเขตเป็นสิ่งสำคัญ ผลจากการทำงานได้เหมือนกันแต่กระบวนการทำงานต่างกัน ทำให้ค่าใช้จ่าย (Cost) ที่เกิดขึ้นต่างกันได้ จากประสบการณ์ ในกรณีที่เราพัฒนาโปรแกรมตามความต้องการของเรา แน่นอนว่าเรารู้ความต้องการ และขอบเขตของโปรแกรม แต่เมื่อเราพัฒนาโปรแกรมตวามความต้องการของผู้อื่น การระบุขอบเขตที่แน่นอนจำเป็นอย่างมาก เนื่องจากต้องใช้ในการออกแบบเลือกส่วนประกอบต่างๆในการพัฒนา
 
ข้อจำกัดนั้นเป็นส่วนที่เราจะสามารถระบุได้ว่าควรเลือกสิ่งใด เช่น การเลือกเลือกใช้ภาษาในการพัฒนา เมื่อเราต้องพัฒนา web application เราอาจจะมีตัวเลือกมากมาย เช่น perl, php, asp, c#.net, vb.net, python, jsp, ฯลฯ แต่ถ้าระบุว่าต้องทำงานบน *nix platform เราต้องรู้ว่าภาษาใดสามารถทำงานได้บน *nix platform ได้บ้างในที่นี้ตัวเลือกเราก็จะตัด asp, c#.net, vb.net ออกไปได้ ส่วนที่เหลือเราก็เลือกเอาตามความถนัด เนื่องจากภาษาต่างๆความสามารถเกือบจะเท่ากัน ต่างกันตรงที่ความยากง่ายในการพัฒนาเท่านั้น
 
ในทางการพัฒนาโปรแกรมนั้น ผมสามารถแยกการออกแบบได้เป็น 2 ส่วนคือ
 
Control flow การออกแบบเกี่ยวกับการควบคุมโปรแกรมในส่วนต่างๆ
Data flow การออกแบบเกี่ยวกับการจัดการข้อมูล
โดยปกติแล้วการออกแบบทั้ง 2 ส่วนจะต้องมีความสัมพันธ์กัน
 
การออกแบบ control flow ในที่นี้คือการออกแบบโครงสร้างการทำงานของโปรแกรม การตัดสินใจต่างๆ เช่น เมื่อ user เข้าใช้งานจำเป็นต้องมีการ authorize หรือไม,่ ถ้ามีจะมีกี่ level, permission ต่างๆเป็นอย่างไร, ฯลฯ โดยอาจจะเริ่มจากการเขียน policy ของโปรแกรมที่ต้องการ จากนั้นก็ลงรายละเอียดเป็น flow chart ในส่วนต่างๆ
 
บ่อยครั้งที่ผมไม่มีการเขียน policy และ flow chart เนื่องจากเหตุผลต่างๆ เมื่อเริ่มการ coding แล้วนั้นโปรแกรมส่วนใหญ่ไม่สามารถเขียนเสร็จได้ภายในวันเดียว ดังนั้น policy และ flow chart จะทำให้ในครั้งต่อๆไป เราสามารถทราบได้ว่าเป้าหมายเป็นจุดใด และต้องเขียนต่อที่ตรงไหน การที่มี policy และ flow chart นั้นจะช่วยได้มากหากมีการพัฒนาเป็นทีม
 
การออกแบบ data flow เป็นการออกแบบเกี่ยวกับการจัดการข้อมูล ไม่ว่าจะเป็นการเก็บข้อมูล, การรวบรวมข้อมูล ฯลฯ โดยการออกแบบ data flow ที่ดีนั้นต้องให้มีการไหลของข้อมูลได้ดีและปลอดภัยที่สุด ความปลอดภัยของข้อมูลเป็นสิ่งที่ต้องคำนึงถึง แม้ข้อมูลบางอย่างเช่น ข้อมูลการรักษาสิวของนาย ก. อาจจะไม่มีค่าแต่ก็จำเป็นต้องรักษาไว้ให้ดีที่สุด เนื่องจากเป็นข้อมูลส่วนบุคคล
 
== อยากเป็นโปรแกรมเมอร์ต้องทำยังไง ==
อยากเป็นโปรแกรมเมอร์ต้องเข้าใจก่อนว่า โปรแกรมเมอร์คืออะไร?
 
โปรแกรมเมอร์ คือใคร หมายถึงอะไร?
โปรแกรมเมอร์คืออาชีพๆหนึ่ง ที่หลักๆคือการเขียนโปรแกรมคอมพิวเตอร์
แต่โปรแกรมเมอร์นั้น มักจะรู้อะไรหลายๆอย่างเกี่ยวกับคอมพิวเตอร์ในอีกหลายๆส่วน แต่งานหลักๆก็คือเขียนโปรแกรมนั่นแหละครับ
 
เรียนคอมเป็นอะไรได้บ้าง?
ได้หลายอย่างครับ เป็น Programmer, System Analysis, Database Admin, Software Architecture
, Web Designner, Tester, IT Support, etc.
หลายอย่างมากครับจนผมจำไม่ได้ว่ามีอะไรบ้าง
 
โปรแกรมเมอร์ต้องเรียนจบจากสาขาไหน?
โปรแกรมเมอร์นั้นมาได้จากหลายสาขามากผมจำไม่หมดหรอกที่แน่ๆ เน้นๆ มาจาก Computer Engineering
และ Computer Science นี่น่าจะเป็นสายตรงมากกว่า
ส่วนถ้าต้องการข้ามสายก็จะเป็นพวก Math, State ก็สามารถข้ามสายมาได้เช่นกัน หรือไม่ก็พวกสายอาชีวะ
 
โปรแกรมเมอร์เป็นยากไหม?
ก็เป็นอยากอยู่นะ เพราะต้องเรียนคอมนั้นต้องเรียนเกียวกับการคำนวนแทบทุกวิชาเลย แต่การเรียนคอมนั้นใช่ว่าจะต้องเป็นโปรแกรมเมอร์ทุกคน
 
ก่อนจะเรียนคอมเป็นโปรแกรมเมอร์ต้องรู้อะไรบ้าง?
- ไม่ต้องรู้อะไรเลยก็ได้ ถ้ารู้คอมบ้างเล็กน้อยก็ดี ก่อนที่ผมจะเรียนนะ ผมชอบคอมอยู่แล้ว ก็เลยศึกษาเรื่องการประกอบคอมพิวเตอร์
ชอบทุกอย่างที่มันต่อคอมได้ รู้ส่วนประกอบของคอมพิวเตอร์แต่ละส่วนว่ามันทำงานยังไง รื้อแล้วก็ประกอบ รับจ้างประกอบเครื่อง
รับจ้างลง windows อะไรพวกนี้ แต่การลง window ไม่ได้เรียนในมหาลัยนะ เค้าไม่สอน ฮ่าๆ
สรุปว่าเราก็ต้องอ่านเองแหละ
 
- เคยหัดเขียน web เล็กๆน้อยๆ มั่วๆ เคยเขียนโปรแกรมเล็กๆ น้อยๆ มั่วๆเหมือนกัน ไม่ค่อยเข้าใจหรอก หาหนังสือมาอ่าน
แต่ก็เป็นพื้นที่ดี ผมอ่านหมดเลย อะไรที่เกี่ยวกับคอม อ่านเองลองเองรู้เอง
 
สรุปคือถ้าอยากเป็นโปรแกรมเมอร์ก็ควรจบทางสายคอมพิวเตอร์แหละ เพราะตอนสมัครงานเค้ามักจะดูการศึกษาตรงนี้
 
== ดูเพิ่ม ==