ฉันจะโน้มน้าวหัวหน้าของฉันได้อย่างไรว่า ANSI C ไม่เพียงพอสำหรับโครงการใหม่ของเรา [ปิด]


64

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

เจ้านายของเราจบการศึกษาเมื่อ 30 ปีที่แล้ว (เพื่อไม่ให้ทำผิดฉันมีเวลามากกว่าครึ่งบนหลังของฉันด้วย) และได้รับคำสั่งให้เราพัฒนาแอปพลิเคชั่นนี้ใน ANSI C เหตุผลก็คือเขาเป็นคนเดียวที่ จะอยู่ตลอดเวลาและดังนั้นเขาจะต้องสามารถเข้าใจสิ่งที่เรากำลังทำอยู่ เขาตัดสินว่าเราไม่ควรใช้ประเภทข้อมูลนามธรรม เขายังให้รายชื่อเราด้วยชื่อตัวแปรทั่วโลก (ถอนหายใจ) ที่เขาต้องการให้เราใช้

ฉันลองใช้วิธีนั้นซักพัก แต่ก็ทำให้ฉันช้าลงเพื่อให้แน่ใจว่าการทำงานของตัวชี้ทั้งหมดนั้นปลอดภัยและสตริงทั้งหมดมีขนาดที่ถูกต้อง นอกจากนี้จำนวนบรรทัดของรหัสที่เกี่ยวข้องกับปัญหาที่เกิดขึ้นจริงเป็นเพียงส่วนเล็ก ๆ ของฐานรหัสของเรา หลังจากไม่กี่วันฉันก็ทิ้งทั้งสิ่งและเริ่มต้นใหม่โดยใช้ C # หัวหน้าของเราได้เห็นโปรแกรมกำลังทำงานอยู่และเขาชอบวิธีการทำงาน แต่เขาไม่รู้ว่ามันเขียนในภาษาอื่น

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

คุณขี้ขลาด


220
"โอ้ไม่นี่ไม่ใช่รุ่นสุดท้ายมันเป็นเพียงรุ่น C # ที่เราเขียนอย่างรวดเร็วในสองสามวันสำหรับการสร้างต้นแบบและการทดสอบเพื่อให้แน่ใจว่าเราเข้าใจข้อกำหนดและการปรับแต่ง UI การใช้สิ่งนี้ใน ANSI C จะต้องใช้เวลา อีก X สัปดาห์เพราะคุณรู้ว่าเราจะต้องหลีกเลี่ยงไม่ได้มีทุกคนโครงสร้างข้อมูลแฟนซี. ... ก็ใช่ค่ะตอนนี้ที่คุณพูดถึงมันรุ่น C # ไม่ทำอยู่แล้วทุกอย่างโปรแกรมสุดท้ายควร แต่คุณกล่าวว่า คุณต้องการมันใน ANSI C. ... ตกลงถ้าคุณยืนยันให้อยู่กับรุ่นนี้ ... "
Heinzi

8
@Heinzi: ฉันมีประสบการณ์เดียวกัน: การเขียนต้นแบบ C # ของห้องสมุดใน 2 วันและใช้เวลาหลายสัปดาห์ในการเขียนใหม่ใน C. โชคดีหลังจากโครงการนี้ฉันได้รับโอกาสให้ย้ายทีมอีกด้วย ตัวเลือกภาษาที่เหมาะสม
dan04

49
ตัวแปรทั่วโลกและหัวข้อ? คุณกำลังมีปัญหาเพื่อนของฉันไม่ว่าภาษาการเขียนโปรแกรมที่คุณใช้จะเป็นอย่างไร
Nemanja Trifunovic

16
เหตุผลที่คุณต้องการคือเหตุผลว่าทำไมคุณควรทำงานของคุณ
epo

11
สมมติฐานของคุณไม่ถูกต้อง - ANSI C เพียงพอสำหรับโครงการเกือบทั้งหมด นั่นเป็นเหตุผลว่าทำไมจึงยังคงเป็นที่นิยมในช่วงหลายปีที่ผ่านมา ไม่ว่าจะเป็นคำถามที่ดีที่สุดหรือไม่ก็ตาม
Mark Ransom

คำตอบ:


108

โปรดสังเกตว่า "โปรดทำเช่นนี้ดังนั้นฉันมั่นใจว่าฉันจะสามารถรักษามันได้" เป็นข้อกำหนดที่ดีมาก - โปรแกรมส่วนใหญ่ใช้เวลานานกว่าการดูแลรักษามากกว่าการเขียนและการแก้ปัญหาด้วยเทคโนโลยีที่เป็นที่รู้จักกันดี

แค่คิดว่าเด็กคอมพิวเตอร์ใหม่บางคนเมื่อถูกขอให้เขียนแอปพลิเคชัน C # เขียนไว้ใน Haskell ในอีกสองวันและพูดว่า "เฮ้มันใช้ได้ดีและฉันไปแล้วลาก่อน" ออกจากการบำรุงรักษากับคุณ

แค่คิดว่าเด็กคอมพิวเตอร์ใหม่บางคนเมื่อถูกขอให้เขียนแอปพลิเคชัน ANSI C เมื่อ 15 ปีที่แล้วได้เขียนมันใน Visual Basic 6 ในสองวันและทิ้งไว้ ตอนนี้คุณต้องรักษามันและ Windows 7 เริ่มบ่นแล้วเมื่อสื่อการติดตั้งจะถูกแทรก

นี่อาจเป็นโอกาสที่ดีที่จะพูด - ดังที่ Heinzi พูดถึงในความคิดเห็น - ว่า "นี่คือต้นแบบด่วนที่เขียนใน C # ซึ่งดูเหมือนว่าจะเป็น C - เราจะทำให้การผลิตพร้อมหรือใช้ใน ANSI C เช่นคุณ ถาม "แล้วจึงทำการอภิปรายในขณะนี้ การมีแหล่งที่มาที่แท้จริงเพื่อดูนั้นดีกว่า "เฮ้เราไม่ควรเขียนแอปพลิเคชันถัดไปของเราใน Haskell เพราะเร็วกว่า"

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


26
+1: สำหรับการชี้ให้เห็นความต้องการ "ทำแบบนี้ฉันแน่ใจว่าฉันสามารถรักษามันได้" C # นั้นง่ายกว่า / เร็วกว่า C มากในการพัฒนา (โดยทั่วไป) แต่ C มีการเปลี่ยนแปลงใน 30 ปีที่ผ่านมาน้อยกว่า C # ที่มีการเปลี่ยนแปลงใน 15 ปีที่ผ่านมา ดังนั้นสำหรับผลิตภัณฑ์ที่ต้องรักษานานหลายปี C อาจเหมาะสมกว่า คุณต้องประนีประนอมระหว่างข้อกำหนดทั้งหมด: ความซับซ้อนของโครงการ (C # น่าจะเป็นทางเลือกที่ดีกว่า) การบำรุงรักษาระยะยาว (C ดูเหมือนจะมีเสถียรภาพมากขึ้น) ผู้ที่จะทำการบำรุงรักษา ฯลฯ
Giorgio

4
@Ramhound ผมไม่ได้พูดเกี่ยวกับการสนับสนุน VB6 แต่เกี่ยวกับการสนับสนุน 6 Visual Basic การพัฒนาสภาพแวดล้อม Windows 7 ของฉันแจ้งเตือนฉันอย่างชัดเจนเมื่อฉันใส่สื่อการติดตั้งว่านี่ไม่ใช่ความคิดที่ดี

12
คะแนนดี แต่ถ้าเจ้านายขอให้เขียนเป็นภาษาโคบอล? หรือประกอบ 6502? คุณสามารถพูดอะไรกับเจ้านายของคุณได้ว่า "ภาษานั้นล้าสมัยสำหรับจุดประสงค์นี้และเมื่อคุณจากไปแล้วจะไม่มีใครเหลือที่จะเข้าใจสิ่งนี้"
Ant

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

8
@ant ผู้ที่จ่ายเงินให้กับวงดนตรีจะได้เลือกดนตรี (และเราเป็นร้านค้าภาษาโคบอล - ไม่มีปัญหาในการสนับสนุน)

35

เจ้านายของคุณดูเหมือนจะเป็นลูกค้าของคุณในกรณีนี้และความต้องการหลักของเขาก็คือเขาสามารถรักษาแอปพลิเคชันไว้ได้เมื่อคุณดำเนินการต่อ ดูเหมือนว่าค่อนข้างสมเหตุสมผล

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


21
OP ละเว้นข้อกำหนดอย่างชัดเจนโดยไม่มีการแจ้งเตือนหรือการสนทนา เจ้านายเป็นลูกค้าเชิงพาณิชย์ที่เขาสามารถปฏิเสธการชำระเงินและอาจฟ้องค่าใช้จ่ายที่เกิดขึ้นเนื่องจากเสียเวลา ย้อนกลับบทบาทจะทำอย่างไรถ้าคุณสั่งชุดสูทแบบ bespoke และพบว่าช่างตัดเสื้อไม่ชอบทำงานกับผ้าที่คุณระบุไว้เพื่อทดแทนสิ่งที่เขาไม่ชอบอย่างเงียบ ๆ ในสีที่เขาเลือก ปัญหาของ OP ในตอนนี้คือเขาไม่สามารถเชื่อถือโครงการที่ไม่มีการดูแลอย่างใกล้ชิดแสดงให้เห็นถึงการขาดทักษะผู้คนและไม่มีความเคารพต่อการจัดการ
EPO

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

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

26

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

มันเร็วพกพาได้ (ฉันไม่เคยเขียนด้วยภาษา C # แต่ฉันคิดว่ามันใช้งานไม่ได้หากไม่มีเฟรมเวิร์กรุ่นใดรุ่นหนึ่งติดตั้งอยู่และมักใช้เฉพาะ windows เท่านั้น)

โดยทั้งหมดคุณสามารถใช้ภาษาอื่นในการทำ GUI แต่คุณสามารถช่วยตัวเองได้และใช้แพ็คเกจที่มีอยู่ก่อน (มีโอเพ่นซอร์สที่ดีอยู่บ้าง)

เพื่อสรุปฉันพูดสำหรับการเชื่อมต่อพื้นฐานกับส่วนฮาร์ดแวร์ C เป็นตัวเลือกที่ดี


7
ฉันเคยประสบความสำเร็จในการย้ายรหัส C # จาก Windows ไปยัง Linux (โดยใช้ Mono) มากกว่าที่ฉันเคยมีด้วยรหัส C ++
dan04

8
@ dan04: ปัญหาอะไรที่คุณมีกับ C ++? ฉันคิดว่า C ++ น่าจะพกพาได้ นอกจากนี้ C ++ ไม่ใช่ C ฉันมักพบการใช้ C กับไลบรารี GNU C แบบพกพาที่สวยมากเช่นระหว่าง GNU Linux และ cygwin
จอร์โจ

4
@ dan04 C! = C ++

2
@Giorgio: ส่วนใหญ่ที่น่ารำคาญของมันคือสตริง เราต้องนำTCHARอึเฉพาะของ Windows ออกทั้งหมด(ซึ่งเราไม่ได้ใช้อย่างต่อเนื่อง) และใช้มาตรฐานทีมในการใช้UTF-8ในเวลาเดียวกับการเปลี่ยนลีนุกซ์ น่าเสียดายที่ต้องมีการนำไลบรารี่มาตรฐานขนาดใหญ่มาใช้กับ Windows อีกครั้งโดยboost::nowideไม่ต้องมีอยู่จริงในขณะนั้น
dan04

3
@ dan04: ตามที่กล่าวไว้ C ไม่แน่นอนเท่า C # (หรือ C ++ สำหรับเรื่องนั้น) แต่ฉันใช้ไลบรารี GNU C ( gnu.org/software/libc ) มาตั้งแต่ปี 1997 และมีความเสถียรและพกพาได้จริง สำหรับ C ++ ฉันจะดู Qt (หรือที่ boost และไลบรารี่มาตรฐาน) เพราะมันค่อนข้างพกพา ฉันจะหลีกเลี่ยงเนื้อหาเฉพาะของ Windows ถ้าเป็นไปได้: AFAIK ไม่เคยมีเป้าหมายของ Microsoft ในการผลิตซอฟต์แวร์พกพาเนื่องจากการล็อคลูกค้าเป็นส่วนหนึ่งของกลยุทธ์การตลาดของพวกเขา
จอร์โจ

24

โอ้ที่รัก นี่เป็นแอปพลิเคชันตามเวลาจริงหรือไม่ การควบคุมอุปกรณ์แบบเรียลไทม์? กำลังรวบรวมข้อมูลแบบเรียลไทม์? ใช้ภาษากับที่เก็บขยะหรือไม่? โอ้ที่รัก

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

ฉันจะแนะนำให้คุณทำต้นแบบใน C # หรือ Python เพียงเพื่อทดสอบฟังก์ชั่นหลักและ UI จากนั้นทดสอบห่างจากนั้นวัดเวลาแฝงและเวลาตอบสนองที่แท้จริงเมื่อแอปได้รับข้อมูลจำนวนมากตลอดระยะเวลาหลายวันของการทำงานอย่างต่อเนื่อง อัตราต่อรองคือแอพอาจจบลงช้าเกินไปหรือล้มเหลวในเวลาสุ่มเมื่อ VM หรือตัวรวบรวมขยะเริ่มทำงาน

ฉันขอแนะนำให้คุณนำเสนอสิ่งที่คุณทำในฐานะ PROTOTYPE

การเข้ารหัสใน C นั้นไม่ใช่เรื่องยาก หากคุณไม่ได้พูดถึง มีพวกเรามากมายรอรับการท้าทาย (ฉันได้ทำการเข้ารหัส C ตามเวลาจริงมาหลายสิบปีแล้ว)


3
ให้วลีแรกแตกต่างกัน โอ้ที่รัก นี่เป็นแอปพลิเคชันตามเวลาจริงหรือไม่ การควบคุมอุปกรณ์แบบเรียลไทม์? กำลังรวบรวมข้อมูลแบบเรียลไทม์? กำลังวิ่งในสภาพแวดล้อมที่ไม่เป็นความจริงแบบเรียลไทม์? โอ้ที่รัก คุณจะต้องมีตัวอย่างเสมอเมื่อคุณข้ามขอบเขตของอุปกรณ์ 'เรียลไทม์' เป็นอาร์กิวเมนต์ฟางคนและข้อกำหนดที่ไม่ดี C # ใช้ได้
Gusdor

คุณได้เห็นได้ชัดว่าไม่เคยได้ยินจากการทำงานของโจดัฟฟี่ เขาได้ทำงานเกี่ยวกับการเขียนโปรแกรมระบบใน C # อย่างน้อยตั้งแต่ 2013 คอมไพเลอร์ Roslyn สามารถคอมไพล์เป็นโค้ดเนทีฟ (นั่นคือวิธีที่ UWP ทำงาน) และการรวบรวมขยะไม่ใช่ปัญหาถ้าคุณใส่ใจกับสิ่งที่คุณทำ
RubberDuck

14

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

ยิ่งคุณจัดการกับสิ่งนี้ได้เร็วเท่าใด

ประการที่สองฉันไม่คิดว่าคุณจะสามารถโน้มน้าวเขาได้ว่า ANSI C ไม่เพียงพอสิ่งที่คุณต้องทำคือทำให้เขาเชื่อในสิ่งอื่น ๆ (1) ที่ c # นั้นเพียงพอ (2) เขาสามารถเรียนรู้ที่จะรักษา c #, (3) ) ที่คุณมี inadquate ที่จะเขียนมันใน C. สมมติว่าคุณยังคงมีงานและเป็นส่วนหนึ่งที่จะเล่นกับโครงการนี้ผมจะมีสมาธิในวันที่ 2 เน้นความคล้ายคลึงกันระหว่าง C และ C #

คำพูดเพื่อตอบความคิดเห็น ...

ไม่กี่เดือนที่ผ่านมาเราเริ่มพัฒนาแอป [... ] หลังจากไม่กี่วันฉันก็ทิ้งทุกสิ่งและเริ่มต้นใหม่โดยใช้ C #


ไม่มีที่ไหนที่เขาพูดถึงว่าเขาจะสร้างเวอร์ชั่น C # เป็นเวลาหลายเดือน?
ไม่ระบุตัวตน

1
@Anonymous - มันไม่สำคัญว่ามันจะเป็นวันหรือเป็นเดือนเขายังคงไม่ปฏิบัติตามคำแนะนำของผู้จัดการ ผู้เขียนไม่มีทักษะที่จำเป็นในการพัฒนาแอปพลิเคชันใน ANSI C
Ramhound

1
@Ramhound - ฉันไม่ได้โต้แย้งว่าเขาไม่ได้ทำตามคำแนะนำผู้จัดการของฉันฉันแค่บอกว่า jmoerno กำลังทำออกมาราวกับว่าเขาใช้เวลาหลายเดือนในการไปสัมผัสกัน นอกจากนี้หากเขารวมโครงการเข้าด้วยกันในอีกสองสามวันเพื่อทำหน้าที่เป็นต้นแบบการทำงานซึ่งรุ่น C ที่มีความเสถียรมากกว่าที่ระบุสามารถอ้างอิงได้จากนั้นจึงสมเหตุสมผลดี มันเป็นส่วนหนึ่งของขั้นตอนการวางแผน
ไม่ระบุตัวตน

@jmoreno - ขอโทษฉันต้องอ่านคำถามผิด
ไม่ระบุตัวตน

2
@jmoreno - แน่นอน ฉันโพสต์ความคิดเห็นล่าสุดหลังจากเห็นข้อความที่คุณเพิ่ม ขอโทษอีกครั้ง
ไม่ระบุตัวตน

12

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

นี่เป็นข้อกำหนดที่สมเหตุสมผล

เขาตัดสินว่าเราไม่ควรใช้ประเภทข้อมูลนามธรรม

มันไม่สมเหตุสมผล ตอนนี้มันเริ่มมีกลิ่นที่น่าสงสัยเล็กน้อยเพราะนี่เป็นข้อกำหนดของการออกแบบโปรแกรมและไม่ใช่ข้อกำหนดด้านภาษา หากรหัสควรง่ายต่อการบำรุงรักษาการใช้ ADT หรือการทดสอบที่ดีควรมีลำดับความสำคัญที่มีอยู่ก่อน

เขายังให้รายชื่อเราด้วยชื่อตัวแปรทั่วโลก (ถอนหายใจ) ที่เขาต้องการให้เราใช้

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

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

ดังนั้นสิ่งนี้ไม่เกี่ยวข้องกับภาษาการเขียนโปรแกรม C คุณสามารถเขียนโปรแกรม icky ที่เท่าเทียมกันใน C # ได้เช่นกัน เป็นความผิดพลาดทั่วไปที่เชื่อได้ว่าการออกแบบโปรแกรมที่ดีนั้นขึ้นอยู่กับภาษา นั่นไม่ใช่ความจริง!

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

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


1
+1 สำหรับ "คุณสามารถเขียนโปรแกรมที่น่ากลัวอย่างเท่าเทียมกันใน C # ได้เช่นกัน"
Javier

11

ปัญหาแรกที่คุณต้องพูดถึงคือเรื่องอารมณ์ความรู้สึกไม่มีเหตุผล อุตสาหกรรมไอทีเป็นอุตสาหกรรมที่มีการเปลี่ยนแปลงอย่างต่อเนื่องและถึงแม้จะมีสถานที่สำหรับทุกสิ่ง แต่การปฏิเสธที่จะปรับปรุงหรือยอมรับการเปลี่ยนแปลงเป็นปัญหา

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

หากคุณไม่แก้ปัญหานี้ข้อโต้แย้งที่มีเหตุผลทั้งหมดที่คุณสามารถนำมาใช้จะสูญเปล่า ในฐานะผู้อยู่ใต้บังคับบัญชาคุณอาจไม่ใช่คนที่สามารถสนทนากับเขาได้ บางทีทาบทามเรื่องนี้กับหนึ่งในผู้จัดการอื่น ๆ หากมี

พิจารณาจากมุมมองของคุณด้วย ทำไมคุณถึงต้องการใช้ C # มีความปรารถนาที่จะใช้สิ่งใหม่และเท่ห์มากน้อยแค่ไหน? ซื่อสัตย์กับตัวเอง หากคุณรู้จักสิ่งนี้มันจะช่วยให้คุณเถียงได้อย่างมีประสิทธิภาพมากขึ้น

ปัญหาที่สองคือหนึ่งในความเสี่ยงและค่าใช้จ่าย ซอฟต์แวร์การเขียนมีราคาแพงและการเลือกใช้ภาษาเป็นปัจจัยสำคัญในการนั้น พิจารณา:

  1. ใช้เวลาในการเขียนใน C # กับ C นานเท่าใด ด้วยการวางแนววัตถุที่ง่ายขึ้นและการรวบรวมขยะที่ดีกว่า C # อาจจะง่ายขึ้น อย่างไรก็ตามหากแอปพลิเคชันใช้การเรียก API ที่ไม่มีการจัดการจำนวนมาก C อาจง่ายขึ้น
  2. หากคุณใช้ C # คุณจำเป็นต้องซื้อเครื่องมือเพิ่มเติมหรือไม่ ดูเหมือนว่าคุณใช้ Visual Studio อยู่แล้ว แต่คุณต้องการเครื่องมือเพิ่มเติมสำหรับการแปล, การตรวจสอบรหัสและการวิเคราะห์, การดีบักเป็นต้น
  3. การดูแลรักษาง่ายแค่ไหน? หากคุณพบข้อบกพร่องจะสามารถแก้ไขได้เร็วเพียงใด C # สามารถลดการวางแนววัตถุนี้ การรวบรวมขยะอัตโนมัติยังช่วยหลีกเลี่ยงปัญหาหน่วยความจำรั่วและตัวชี้ส่วนใหญ่
  4. สนับสนุนง่ายแค่ไหน? หากคุณมีพนักงานให้ความช่วยเหลือพวกเขาอาจรู้วิธีอ่านการถ่ายโอนข้อมูลผิดพลาด แต่พวกเขารู้วิธีใช้ windbg กับ SOS หรือไม่ เครื่องเป้าหมายมีการติดตั้ง. NET Framework เวอร์ชั่นที่เหมาะสมหรือไม่?
  5. พิจารณาการจัดพนักงาน มีกี่คนที่รู้จัก C เทียบกับ C # หากคุณหรือทั้งสองคนออกจากองค์กรคุณจะมาแทนที่คุณได้ง่ายแค่ไหน? นักพัฒนา C ถูกกว่าหรือแพงกว่านักพัฒนา C # หรือไม่

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

บางที C เป็นตัวเลือกที่ดีกว่า C # จะไม่ดีกว่าโดยอัตโนมัติสำหรับทุกสถานการณ์ บางทีคุณอาจทำโครงการนี้โดยใช้ C แต่ทำ C # พิสูจน์แนวคิดสำหรับถัดไป จำไว้ว่าคุณสามารถแพ้การต่อสู้ แต่ก็ยังชนะสงครามได้เช่นกัน


5
ฉันไม่เห็นด้วยกับข้อสันนิษฐานโดยนัยว่า C # เป็นค่าเริ่มต้นตัวเลือกที่ดีกว่า ANSI C ตัวอย่างเช่นหากคุณต้องการอยู่แพลตฟอร์มอิสระ C # น่าจะเป็นตัวเลือกที่ไม่ดี

@ ThorbjørnRavnAndersenฉันเห็นด้วย โปรดดูย่อหน้าสุดท้าย ฉันยังพูดถึงกรณีต่างๆเช่นการเรียกใช้รหัสที่ไม่มีการจัดการ ฉันถือว่าความเป็นอิสระของแพลตฟอร์มจะไม่รวม C # ใน OP บางทีนี่อาจเป็นข้อสันนิษฐานที่ไม่ถูกต้อง
akton

1
ความเป็นอิสระของแพลตฟอร์มเป็นเพียงหนึ่งในเหตุผลที่เป็นไปได้ ข้อความเช่น "ยึดมั่นกับ ANSI C" ไม่ - ในความคิดของฉัน - ระบุอคติ

@akton - ตั้งแต่เมื่อคุณไม่สามารถเรียกรหัสที่ไม่มีการจัดการจาก C # แน่นอนมันต้องใช้เสื้อคลุมและแนะนำปัญหาการสนับสนุนเพิ่มเติม แต่เป็นไปได้ นอกจากนี้คุณสามารถรองรับ C # บนหลายแพลตฟอร์มได้หากต้องการ Mono รองรับทุกแพลตฟอร์มเดสก์ท็อปหลัก (OS X, Windows และ Linux) ได้รับเนื่องจาก Microsoft Windows .NET Framework ที่ได้รับการเลื่อนขั้นฐานคุณลักษณะของ Mono จะไม่ตรงกัน (นั่นเป็นกรณีของ WPF) และแน่นอนว่าคุณจะไม่สามารถพัฒนาแอปพลิเคชั่น Metro ที่ทำงานบน Linux ได้ แน่นอนมันไม่น่าที่จะทำในกรณีนี้
Ramhound

@ แรมฮาวด์ฉันไม่ได้บอกว่าคุณไม่สามารถเรียกรหัสที่ไม่ได้รับการจัดการจาก C # เพียงแค่ว่ามันอาจจะเจ็บปวดมาก ในทำนองเดียวกันคุณสามารถพัฒนาข้ามแพลตฟอร์มใน C # แต่ C เกือบจะเป็นสากลเช่นเดียวกับ Thorbjorn กล่าว
akton

7

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

ตอนนี้นักเรียนวิทยาศาสตร์คอมพิวเตอร์ทุกคนจะฆ่าฉัน


ANSI C เป็นหนึ่งในสิ่งแรกที่ฉันเรียนที่วิทยาลัย ฉันเริ่มในปี 2004 ดังนั้นภายใน 10 ปีที่ผ่านมาก็ยังคงได้รับการสอน ฉันใช้เวลาหลายคืนในการเชื่อมต่อผ่าน SSH กับสภาพแวดล้อม Unix ที่พยายามรวบรวมรหัสของฉัน
Ramhound

1
ตลกฉันไม่ได้เรียน ANSI C จนกระทั่งปีสุดท้ายที่มหาวิทยาลัย ภาษาแรกที่สอนคือปาสคาลเพื่อที่ฉันจะได้รับการปกป้อง ...
tehnyit

บัณฑิตล่าสุดที่นี่; เราได้รับทั้ง C และ C ++ อย่างไรก็ตาม C อยู่ในบริบทฝังตัวและน้อยที่สุด ทั้งคู่อยู่ในปีสุดท้ายของฉัน - C # และ Java ล้วนๆก่อนหน้านั้น
Ross

2
C ยากที่จะเขียนโปรแกรมให้ถูกต้องน่าจะเป็นจุดที่ดีที่สุดในการใช้งาน C.
Paul Nathan

7

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

ฉันคิดว่าปัญหาคือว่าคุณกำลังเขียนโปรแกรมใน C ด้วยความคิดของคุณใน C # ฉันมีปัญหาที่คล้ายกันเมื่อฉันเปลี่ยนจาก Perl เป็น C หรือ java คุณต้องเรียนรู้ที่จะปรับตัวเข้ากับภาษาและไม่เรียนรู้ที่จะแปลจากวิธีคิดของคุณไปสู่ภาษาของวันนั้น

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


4
ขอบคุณสำหรับการตอบคำถามแรกของคุณในโปรแกรมเมอร์แลกเปลี่ยนกอง อย่างไรก็ตามคุณอาจต้องการทำให้คำตอบในอนาคตของคุณมีความเป็นส่วนตัวน้อยลงโดยไม่ใช้วลีเช่น "คุณล้มเหลวโดยสิ้นเชิง" "ปัญหาคือเพื่อเปิดใจของคุณ" โปรดตรวจสอบคำถามที่พบบ่อยprogrammers.stackexchange.com/faq#etiquette ฉันคิดว่าคุณสามารถอธิบายจุดที่ดีของคุณด้วยภาษาที่เป็นกลาง
DeveloperDon

2

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

ตอนนี้วิธีที่ดีที่สุดในการอธิบายสิ่งเหล่านี้กับหัวหน้า / ผู้จัดการคือการใส่มันในแง่ของเวลาและเงิน ประมาณเวลาที่โครงการดังกล่าวใช้เวลาใน ANSI C จากนั้นประมาณเวลาที่ใช้ในระดับที่สูงขึ้นเช่น C # หมายเหตุฉันบอกว่าระดับที่สูงขึ้นไม่ทันสมัย สิ่งนี้อาจช่วยให้สิ่งต่าง ๆ ราบรื่นได้เช่นกัน ฉันหมายความว่าคุณจะไม่เล่นงานห้องด้วยแปรงทาสีเล็ก ๆ คุณต้องใช้ลูกกลิ้งและสิ่งอื่น ๆ ที่ทำให้แต่ละจังหวะ (เส้นรหัส) ครอบคลุมพื้นที่โครงการมากขึ้น นอกจากนี้หากคุณหรือหนึ่งในสมาชิกในทีมของคุณไม่ทราบว่า C หรือสร้างโครงการขนาดใหญ่ใน C ได้อย่างสะดวกสิ่งนี้จะช่วยแก้ไขปัญหาเวลาได้มากขึ้นเพราะพวกเขาจะต้องเร่งความเร็ว

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


การจ่ายได้ดูเหมือนเป็นข้อโต้แย้งที่เป็นไปได้ ในขณะที่หัวหน้า (ในฐานะลูกค้าตามคำแนะนำของ @ MatthewFlynn) ระบุว่าเขาไม่สามารถซื้อโปรแกรมที่ไม่ได้เขียนใน C, OP สามารถยืนยันได้ว่าหัวหน้าจะไม่สามารถจ่ายค่าดำเนินการและค่าบำรุงรักษาที่เกี่ยวข้องกับโปรแกรมได้ เขียนใน C. ไม่ว่าจะด้วยวิธีใดการประนีประนอมเป็นสิ่งจำเป็นเพื่อทำให้สิ่งต่าง ๆ เกิดขึ้น
rwong

1

ความไม่ชอบผู้บังคับบัญชาต่อ ADT ได้รับการกล่าวถึงที่อื่นเช่นเดียวกับที่ dev ดูเหมือนจะไม่รู้ต้นทุน GC ดังนั้นฉันจะเน้นที่ "เธรด"

บางทีแทนที่จะคิดในแง่ของการทำ. NET (หรือ JVM หากทำเช่นนั้น) การทำเกลียวสิ่งที่คุณอาจต้องการคือกระบวนการหลายกระบวนการโดยใช้กลไกการสื่อสารระหว่างกระบวนการ (IPC) เพื่อสื่อสารระหว่างกัน เช่น - ข้อความ windows, หน่วยความจำที่แชร์, บัฟเฟอร์ไฟล์หน่วยความจำที่แมป, ชื่อไพพ์, อะไรก็ตาม อุทิศกระบวนการขนาดเล็กเพื่อโต้ตอบกับอุปกรณ์หรือมุมมองของอุปกรณ์และตรวจสอบ IPC เพื่อสื่อสารการปรับปรุงและรับทราบคำขอและมีกระบวนการที่ค่อนข้างใหญ่ในการบำรุงรักษา GUI และสื่อสารกับอุปกรณ์ "จอภาพ" โดยใช้ IPC ที่คุณเลือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.