หากมี 'ประโยชน์' ประการหนึ่งจากอาชีพไอที 50 ปีของฉัน ก็คือการใช้เครื่องมือที่เหมาะสมสำหรับแต่ละสถานการณ์เสมอ

พ่อของฉันเป็นช่างไม้/ช่างก่อสร้าง และชาวออสเตรเลียมีทัศนคติที่ดูถูกเหยียดหยามสำหรับค้อนแบบเก่าๆ เรียกว่า "ไขควงแยงกี" ซึ่งแม้แต่สกรูก็ยังได้รับการปฏิบัติเหมือนตะปู

การใช้เครื่องมือเพียงชิ้นเดียวสำหรับทุกงานถือเป็นกรณีคลาสสิก แม้ว่าจะมีเครื่องมือที่ดีกว่าก็ตาม (เครื่องมือแบรนด์ 'Yankee' ย้อนกลับไปในสมัยสงครามโลกครั้งที่ 1 โดยทั่วไปแล้วเป็นเครื่องมือประเภทไขควงที่มีดอกสว่านที่เปลี่ยนได้และโดยปกติจะใช้เฟืองวงล้อแบบกดและดึง)

ย้อนหลังบ้าง

หลังจาก "เรียนรู้การเขียนโปรแกรม FORTAN2" ครั้งแรกที่ค่ายนักเรียนวิทยาศาสตร์ในโรงเรียนในปี 1966 ฉันก้าวหน้าไปสู่ระดับวิทยาศาสตร์ทั่วไปรวมถึงการเขียนโปรแกรมการวิเคราะห์ข้อมูลวิธีตัวเลขในปีที่ 1 วิชาเอกปีที่ 3 ของฉันคือวิทยาการคอมพิวเตอร์ (1969) รวมถึง 5 หรือ 6 วิชาที่แตกต่างกัน ภาษา ตั้งแต่แอสเซมเบลอร์ ไปจนถึงเชิงฟังก์ชันไปจนถึงเชิงวัตถุ ("SIMULA67" - พรีโปรเซสเซอร์ส่วนขยายการจำลองเป็น ALGOL60) การมอบหมาย/โครงการมีตั้งแต่เรื่องธรรมดาไปจนถึงการสร้างแบบจำลอง 3 มิติพร้อมการวางแผนเปอร์สเปคทีฟ ไปจนถึงการจำลองวงจรดิจิทัล วิชารอง ได้แก่ ฟิสิกส์ และคณิตศาสตร์บริสุทธิ์

จากนั้น ฉันใช้เวลาหนึ่งปี GAP ในการทำงานเกี่ยวกับ "ระบบอัตโนมัติในห้องปฏิบัติการชีวเคมี"

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

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

Taming The Tiger — ข้อกำหนดที่คลุมเครือหรือความยืดหยุ่นของผู้ใช้ปลายทาง?

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

จากเรียลไทม์ไปจนถึงการประมวลผลข้อมูล

เมื่อฉันมาถึง ฉันพบวิศวกรสองสามคนกำลังเล่นซออยู่บริเวณขอบของโครงการ แต่ฉันเห็นได้ทันทีว่าการออกแบบโครงการจำเป็นต้องมี "การแบ่งแยกตามฟังก์ชันตามลำดับเวลา" (เครื่องมือที่เหมาะสมสำหรับงานในขั้นตอนนั้น) ใช่ มีการเก็บข้อมูลแบบเรียลไทม์และการควบคุมกระบวนการ และการแสดงสถานะกราฟิกแบบเรียลไทม์ แต่ที่ผ่านมา เรียลไทม์ไม่ใช่ปัจจัย — มีบันทึกสัญญาณเตือน รายงานกะ (8 ชั่วโมง) รายงานรายวันและรายเดือนที่รวมการป้อนข้อมูลด้วยตนเอง (โดยทั่วไปคือผลการวิเคราะห์ทางเคมี) ดังนั้นฉันจึงได้ Data Flow Diagram ขึ้นมาดังต่อไปนี้

พจนานุกรมข้อมูลที่กำหนดค่าได้อย่างยืดหยุ่น

ระบบโรงงานจะต้องมีสัญญาณเตือนแบบไบนารี 700 สัญญาณ และอินพุตค่าดิจิทัล 150 ช่อง (แปลงแอนะล็อกเป็นดิจิทัล) ไม่มีการระบุสิ่งเหล่านี้ แต่สามารถกำหนดค่าได้ทั้งหมดผ่านแผงสวิตช์อิเล็กทรอนิกส์ จำเป็นต้องป้อนข้อมูลด้วยตนเอง แต่ไม่มีการกำหนดรายละเอียดเฉพาะอีกครั้ง ในทำนองเดียวกันมีการระบุระยะเวลาของรายงาน แต่ไม่มีข้อกำหนดว่าจะมีรายงานจำนวนเท่าใดหรือข้อมูลใดที่จะรายงาน เนื้อหาและเค้าโครงรายงานจะต้อง "กำหนดค่าโดยผู้ใช้ปลายทางได้"

การจัดการข้อมูลที่ยืดหยุ่น — อธิบาย Meta-Data ด้วยตนเอง

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

โปรแกรมป้อนข้อมูลที่ขับเคลื่อนด้วยตารางทั่วไปได้รับการพัฒนาซึ่งแมปคำจำกัดความของไฟล์/บันทึกไปยังหน้าจอ ดังนั้นจึงมีฟังก์ชันสำหรับการป้อนข้อมูลประเภทผลการทดสอบและพารามิเตอร์ควบคุมกระบวนการด้วยตนเอง ในทำนองเดียวกัน ตัวสร้างรายงานทั่วไปจะดึงรายการข้อมูลจากตารางฐาน ใช้อัลกอริธึมการสรุปใดๆ และสร้างบรรทัดรายงาน ขั้นตอนที่ชัดเจน (?) คือการกำหนดตารางข้อมูลเมตาที่อธิบายบันทึกพจนานุกรมข้อมูลแอปพลิเคชัน ดังนั้นตารางระบบและการกำหนดค่ารายงานจึงถูกสร้างขึ้นจาก 'บูตสแตรป'

ในทำนองเดียวกัน การควบคุมกระบวนการขับเคลื่อนด้วยตาราง สัญญาณเอาท์พุต 32 สัญญาณได้มาจากสัญญาณอินพุตตามที่ถูกเข้ารหัสไว้ในบันทึกการควบคุมกระบวนการ พร้อมด้วยค่าควบคุมพารามิเตอร์แบบแมนนวล ที่ป้อนและดูแลรักษาผ่านโปรแกรมบำรุงรักษาข้อมูลทั่วไป มีการใช้อัลกอริธึมป้อนกลับการควบคุมกระบวนการแบบทั่วไปที่ขับเคลื่อนด้วยพารามิเตอร์ — มีเอาต์พุตควบคุมกระบวนการ 4 เอาต์พุตสำหรับเครื่องย่อยตะกอน 8 เครื่องแต่ละตัว เช่น อุณหภูมิในเครื่องย่อยตะกอนจะต้องอยู่ในช่วงแคบเพื่อให้แบคทีเรียที่ไม่ใช้ออกซิเจนมีชีวิตอยู่ และควบคุมอุณหภูมิการแลกเปลี่ยนความร้อน ในทำนองเดียวกัน การไหลของปั๊มรีไซเคิลจะปรับตามระดับของตะกอนในถังหมัก

ภาษามาร์กอัปการแสดงผลกราฟิก (แดชบอร์ด)

มีการร้องขอการแสดงกราฟิกแบบเรียลไทม์สามรายการในรายละเอียดบางอย่าง แต่ข้อกำหนดดังกล่าวยังต้องการ "การออกแบบจอแสดงผลที่ผู้ใช้สามารถกำหนดค่าได้สำหรับการใช้งานในอนาคต" บริษัทวิศวกรรมได้เลือกเทอร์มินัลการแสดงผลกราฟิก RAMTEK ที่ใช้ภาษา 'มาร์กอัป' เพื่อวาดการออกแบบกราฟิก (ซึ่งเป็นเวลา 13 ปีก่อน HTML) มาร์กอัปถูกส่งไปยังเทอร์มินัลเป็นสตรีมข้อมูล ASCII ตัวอย่างเช่น:-

[COLOR RED][RECT <x-value>,<y-value>,<width value>,<height value>]

<values> ทั้งหมดมีหน่วยเป็นพิกเซล (ยกโทษให้ฉัน RAMTEK ถ้าฉันจำไวยากรณ์ของคุณไม่ถูกต้อง) ดังนั้น ในความเป็นจริง มันค่อนข้างสมเหตุสมผลที่จะวาดเค้าโครงที่ต้องการบนกระดาษกราฟและเขียนโค้ดลำดับการวาดที่ต้องการ แต่กราฟิกที่เราต้องการจะต้องแสดงข้อมูลไดนามิกใน "เรียลไทม์" จะมีการอ่านค่ามิเตอร์ สัญญาณสีแดง/เหลือง/เขียว สวิตช์/สต็อปวาล์วที่ระบุว่า “เปิด/ปิด” ลูกศรที่เปลี่ยนทิศทางได้ ฯลฯ ลองนึกถึง “แดชบอร์ด”

วิธีแก้ปัญหาของฉันคือขยายภาษา RAMTEK ด้วยโครงสร้างง่ายๆ สามโครงสร้าง

  • ประการแรก ค่าสามารถถูกแทนที่ด้วยตัวแปรที่มีชื่อซึ่งอ้างอิงถึงค่าในสตรีมข้อมูลในหน่วยความจำ ตัวแปรมีสองประเภท ได้แก่ บูลีน (เปิด/ปิด) และจำนวนเต็ม ซึ่งแสดงเป็น “Bnnn” และ “Innn”
  • ประการที่สอง สามารถกำหนดป้ายกำกับให้กับคำสั่งใดๆ ได้ — เช่น ลินน์:.
  • ประการที่สาม โครงสร้างการทดสอบตัวแปรอย่างง่ายถูกกำหนดด้วยตัวดำเนินการบูลีนและตรรกะอย่างง่าย ซึ่งหากการทดสอบ "จริง" จะนำ "การดำเนินการ" ไปยังป้ายกำกับที่ระบุ (เช่น [IF B123 ON L456]

ในสำนวนปัจจุบัน สิ่งนี้เรียกว่า “เทมเพลต” (เช่น PHP c.1995) การใช้งานคือโปรแกรมล่ามของเราเองที่ประมวลผลไฟล์เทมเพลต แทนที่ตัวแปรด้วยค่าแบบเรียลไทม์ ทำการทดสอบและแยกสาขา และส่งออกคำสั่งการวาดไปยังเทอร์มินัลอย่างต่อเนื่อง จุดสิ้นสุดของไฟล์เทมเพลตจะวนกลับไปที่จุดเริ่มต้น ดังนั้นการรีเฟรชหน้าจอ "แบบเรียลไทม์" จึงถูกกำหนดโดยความเร็วของการดำเนินการลูปการตีความนี้

การแสดงทั้ง 3 รายการ ได้แก่:-

  1. การไหลของไฮดรอลิก — การไหล ระดับถัง สถานะของปั๊ม
  2. การตรวจสอบเครื่องย่อยตะกอน — การไหล อุณหภูมิ การทำงานของปั๊มรีไซเคิล และระดับถัง

3. การตรวจสอบการผลิตไฟฟ้า (ขับเคลื่อนโดยมีเทนจากเครื่องย่อยตะกอน) ป้อนกลับเข้าสู่โครงข่ายไฟฟ้าของเมือง - สถานะของเบรกเกอร์ แรงดันไฟฟ้า การใช้พลังงานภายในโรงงาน สวิตช์เงื่อนไข

มาตรฐาน นโยบาย ขั้นตอน เทมเพลต ไลบรารี พจนานุกรมข้อมูล และเครื่องมือ

ฉันมองว่าสิ่งเหล่านี้เป็น 'เครื่องมือ' สำหรับขั้นตอนต่างๆ ใน ​​SDLC ซึ่งสามารถพบสิ่งเหล่านี้ได้ในวิธีการจัดการแบบมีโครงสร้าง เช่น PRINCE2 ขณะนี้ส่วนอื่นๆ ที่เกี่ยวข้องกับด้านเทคนิคมีให้ใช้งานแล้วภายใน IDE และสถาปัตยกรรมซอฟต์แวร์แบบกำหนดเอง

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

เชิงอรรถทางเทคนิค

ระบบนี้ได้รับการพัฒนาบน PDP-11 ภายใต้ระบบปฏิบัติการแบบเรียลไทม์ RSX11M พาร์ติชันหน่วยความจำแบบแบ่งใช้ RSX11 ถูกใช้เป็นตัวรับหลักสำหรับข้อมูลอินพุตจากโรงงาน ก่อนที่จะหาค่าเฉลี่ยและเขียนตามช่วงเวลาของบันทึกรายชั่วโมง

ใช้ภาษาการเขียนโปรแกรม Pascal พร้อมส่วนขยายการเขียนโปรแกรมระบบบางส่วน รองรับเฉพาะไฟล์การเข้าถึงแบบอนุกรมและแบบโดยตรงเท่านั้น

เนื่องจากโครงการนี้เกิดขึ้นในปี 1980 ก่อนที่จะมีคอมพิวเตอร์ส่วนบุคคลและโปรแกรมประมวลผลคำ ดังนั้นเอกสารประกอบจึงเป็นไดอะแกรมมือยาวและวาดด้วยมือทั้งหมด

ฉันออกไปหลังจาก 6 เดือนหลังจากเสร็จสิ้นการพัฒนาซอฟต์แวร์ การออกแบบระบบจำเป็นต้องมีการกำหนดค่าที่กว้างขวางโดยผู้รับเหมาช่วงระบบอิเล็กทรอนิกส์ระบบควบคุมที่ร่วมมือกับบุคลากรในโรงงาน ฉันเชื่อว่า Prime Contractor ประสบปัญหาทางการเงิน ดังนั้นการดำเนินการขั้นสุดท้ายจึงมีความล่าช้าเป็นเวลานาน

Want to Connect?
I have a blog, “A Software Engineering Retrospective” which recounts some more interesting projects in my career.