หากคุณเป็นโปรแกรมเมอร์อย่าคิดว่าตัวเองเป็น "นักวิทยาศาสตร์คอมพิวเตอร์" นักวิทยาศาสตร์คอมพิวเตอร์เป็นผู้สร้างคอมพิวเตอร์รุ่นต่อไปซึ่งบางส่วนยังคงเป็นนิยายวิทยาศาสตร์จนกว่าจะมีการผสมผสานที่ถูกต้องของวัสดุ miniatuization และทฤษฎีการคำนวณ พวกเขาเป็นเพียงจุดเริ่มต้นของท่อ ผู้ที่พัฒนาซอฟต์แวร์ในที่นี้และในตอนนี้คือ "วิศวกรซอฟต์แวร์" พวกเขาใช้ทฤษฏีและเครื่องมือซึ่งบางครั้งก็สร้างทฤษฎีภาคปฏิบัติและเครื่องมือในโลกแห่งความจริงขึ้นมาเพื่อควบคุมพลังในศักยภาพของพ่อมดศาสตร์ไฟฟ้าที่ซับซ้อนและทำให้มันเป็นไปตามที่เราต้องการ นั่นคือความเชี่ยวชาญเฉพาะด้านของ "วิศวกรรมคอมพิวเตอร์" ซึ่งใช้ทฤษฎีของนักวิทยาศาสตร์คอมพิวเตอร์และใช้พวกเขาฮาร์ดแวร์และซอฟต์แวร์ไปยังโซลูชันอิเล็กทรอนิกส์สำหรับผู้ใช้ปลายทางที่แท้จริงของโลก
นี่คือ IMO ที่ซึ่งธุรกิจสอดคล้องกับทฤษฎี ในกรณีประเภทนี้สุภาษิตโบราณ "ศัตรูที่ดีกว่าดีพอ" สามารถหันกลับมาอ่านได้ง่าย ๆ "ศัตรูของดีพอจะดีกว่า" พิจารณาตัวเองเป็น "วิศวกร" แทนที่จะเป็น "นักวิทยาศาสตร์" และวางสิ่งที่คุณทำควบคู่ไปกับสาขาวิชาวิศวกรรมอื่น ๆ โยนความแตกต่างในการบรรเทา
สมมติว่าลูกค้ามาหาคุณวิศวกรโยธา / โครงสร้างและขอให้คุณสร้างสะพาน สะพานนั้นต้องมีความยาว 20 ฟุตรองรับตัวเองและรับน้ำหนักได้ 1 ตันควรใช้เวลา 10 ปีในการบำรุงรักษาตามปกติและพวกเขาต้องการในเดือนเดียวราคา $ 20,000 นี่คือข้อ จำกัด ของคุณ ตอบสนองขั้นต่ำในขณะที่ไม่เกินจำนวนสูงสุด การทำเช่นนั้นคือ "ดีพอ" และทำให้คุณได้รับเงินเดือน มันจะเป็นวิศวกรรมที่แย่สำหรับคุณที่จะสร้างสะพานโกลเด้นเกทเกินกว่ารายละเอียดการออกแบบและงบประมาณตามคำสั่งหลายขนาด คุณมักจะจบลงด้วยการกินค่าใช้จ่ายที่มากเกินไปและจ่ายค่าปรับสำหรับการใช้เวลามากเกินไป นอกจากนี้ยังเป็นงานวิศวกรรมที่ไม่ดีสำหรับคุณที่จะสร้างสะพานเชือกที่จัดอันดับโดยน้ำหนักของผู้ชายที่ปลูก 5 คนแม้ว่ามันจะมีราคาเพียง $ 1,000 ในเวลาและวัสดุ คุณไม่ได้รับคำวิจารณ์และคำชื่นชมจากลูกค้าที่ดี
กลับไปที่ซอฟต์แวร์บอกว่าคุณมีไคลเอนต์ที่ต้องการระบบประมวลผลไฟล์ที่สร้างขึ้นเพื่อแยกย่อยไฟล์ที่เข้ามาและนำข้อมูลเข้าสู่ระบบ พวกเขาต้องการให้เสร็จภายในหนึ่งสัปดาห์และต้องจัดการห้าไฟล์ต่อวันประมาณ 10MB ของข้อมูล 'เพราะนั่นคือปริมาณการใช้งานทั้งหมดที่พวกเขาได้รับในปัจจุบัน ทฤษฎีอันมีค่าของคุณส่วนใหญ่ออกไปนอกหน้าต่าง งานของคุณคือการสร้างผลิตภัณฑ์ที่ตรงตามข้อกำหนดในหนึ่งสัปดาห์เพราะการทำเช่นนั้นคุณยังเป็นไปตามงบประมาณค่าใช้จ่ายของลูกค้า (โดยทั่วไปวัสดุจะลดลงในที่เก็บสำหรับสัญญาซอฟต์แวร์ขนาดนี้ การใช้เวลาสองสัปดาห์แม้จะเพิ่มเป็นสิบเท่าไม่ใช่ตัวเลือก แต่เป็นไปได้มากว่าไม่ใช่โปรแกรมที่สร้างขึ้นในวันเดียวที่สามารถรองรับปริมาณงานได้เพียงครึ่งเดียวโดยมีคำสั่งให้ทำงานสองชุด
หากคุณคิดว่ากรณีนี้เป็นเรื่องจริงแสดงว่าคุณผิด นี่คือสภาพแวดล้อมประจำวันของผู้ที่เข้าชมมากที่สุด เหตุผลคือ ROI; โปรแกรมเริ่มต้นนี้มีค่าใช้จ่ายไม่มากนักและจะจ่ายให้เองอย่างรวดเร็ว เมื่อผู้ใช้ต้องการให้ทำมากขึ้นหรือเร็วขึ้นรหัสก็สามารถปรับและลดขนาดได้
นั่นคือเหตุผลหลักที่อยู่เบื้องหลังสถานะปัจจุบันของการเขียนโปรแกรม ข้อสันนิษฐานที่เกิดจากประวัติการคำนวณทั้งหมดคือว่าโปรแกรมไม่เคยมีการเคลื่อนไหว มันจะต้องได้รับการอัพเกรดและจะถูกแทนที่ในที่สุด ในแบบคู่ขนานการปรับปรุงอย่างต่อเนื่องของคอมพิวเตอร์ที่โปรแกรมทำงานทั้งคู่ช่วยให้ลดความสนใจไปที่ประสิทธิภาพเชิงทฤษฎีและเพิ่มความสนใจต่อความสามารถในการขยายและขนาน (อัลกอริทึมที่ทำงานในเวลา N-squared แต่สามารถขนานกัน ปรากฏเป็นเส้นตรงและบ่อยครั้งที่ค่าใช้จ่ายเพิ่มเติมของฮาร์ดแวร์มีราคาถูกกว่าของผู้พัฒนาเพื่อคิดค้นโซลูชันที่มีประสิทธิภาพมากขึ้น)
ยิ่งไปกว่านั้นมีหลักการง่าย ๆ ที่รหัสของนักพัฒนาซอฟต์แวร์ทุกบรรทัดเป็นอย่างอื่นที่ผิดพลาดได้ นักพัฒนาน้อยเขียนมีโอกาสน้อยที่เป็นสิ่งที่เขาเขียนมีปัญหา นี่ไม่ใช่คำวิจารณ์ของ "อัตราการผิดพลาด" ของทุกคน มันเป็นคำแถลงความจริงง่ายๆ คุณอาจรู้วิธีการเขียน MergeSort ไปข้างหลังและส่งต่อใน 5 ภาษา แต่ถ้าคุณอ้วนเพียงหนึ่งตัวระบุในหนึ่งบรรทัดของรหัสเรียงทั้งหมดไม่ทำงานและถ้าคอมไพเลอร์ไม่ได้จับมันอาจนำคุณ ชั่วโมงในการแก้ปัญหา ตรงกันข้ามกับ List.Sort (); มันมีประสิทธิภาพในกรณีทั่วไปและนี่คือสิ่งที่ดีที่สุดใช้งานได้แล้ว
ดังนั้นคุณสมบัติมากมายของแพลตฟอร์มที่ทันสมัยและหลักการของวิธีการออกแบบที่ทันสมัยจึงถูกสร้างขึ้นโดยคำนึงถึงสิ่งนี้:
- OOP - สร้างข้อมูลและตรรกะที่เกี่ยวข้องลงในวัตถุและที่ใดก็ตามที่แนวคิดของวัตถุนั้นถูกต้องดังนั้นมันจึงเป็นวัตถุหรือการสืบทอดพิเศษ
- เทมเพลตที่สร้างไว้ล่วงหน้า - รหัสที่ดี 60% หรือมากกว่านั้นคือ cruft ด้านการสร้างประโยคและพื้นฐานของการทำให้โปรแกรมแสดงบางอย่างบนหน้าจอ ด้วยการสร้างมาตรฐานและการสร้างรหัสนี้โดยอัตโนมัติคุณสามารถลดปริมาณงานของผู้พัฒนาได้ครึ่งหนึ่งจึงช่วยเพิ่มผลผลิต
- ไลบรารีของอัลกอริธึมและโครงสร้างข้อมูล - ดังที่กล่าวข้างต้นคุณอาจรู้วิธีเขียน Stack, Queue, QuickSort และอื่น ๆ แต่ทำไมคุณต้องทำเมื่อมีไลบรารีของรหัสที่สร้างขึ้นทั้งหมดนี้ คุณจะไม่เขียน IIS หรือ Apache ใหม่เพราะคุณต้องการเว็บไซต์ดังนั้นทำไมจึงใช้อัลกอริทึม QuickSort หรือวัตถุต้นไม้สีแดงสีดำเมื่อมีการใช้งานที่ยอดเยี่ยมหลายอย่าง
- อินเทอร์เฟซ Fluent - ตามบรรทัดเดียวกันคุณอาจมีอัลกอริทึมที่กรองและเรียงลำดับระเบียน มันเร็ว แต่ก็ไม่สามารถอ่านได้มาก มันต้องใช้นักพัฒนาจูเนียร์ของคุณเพียงวันเดียวเพื่อทำความเข้าใจกับมันทำให้การเปลี่ยนแปลงการผ่าตัดจำเป็นต้องจัดเรียงในฟิลด์เพิ่มเติมในวัตถุบันทึก แต่ไลบรารี่เช่น Linq จะแทนที่โค้ดที่น่าเกลียดมากซึ่งมักจะเปราะบางด้วยการเรียกเมธอดที่กำหนดค่าได้หนึ่งหรือสองบรรทัดเพื่อเปลี่ยนรายการของวัตถุให้กลายเป็นวัตถุที่ถูกกรองเรียงลำดับและถูกฉาย