Triết lý lập trình của NASA

2104

Làm việc ở Kennedy Space Center không có nghĩa tôi là phát ngôn viên của NASA. Bài viết này dựa trên quan điểm cá nhân tôi và thông tin từ một cuộc đối thoại trực tiếp trên Twitch.

Trong số chúng ta ai là người nói thật?

Thế giới của phần mềm hiện đại ( Modern Software )

Có một chủ đề được lặp lại trong các cộng đồng lập trình liên quan đến việc tìm ra “cách tốt hơn” để viết “Modern Software”. Liệu “hiện đại” có thực sự hữu ích hay không, lập trình máy tính luôn luôn bị ấn tượng bởi cái gì đó “mới” hay “tốt hơn”. Và nếu chúng ta quan tâm đến các cuộc thảo luận xung quanh phát triển phần mềm ngày hôm nay, chúng ta sẽ nhanh chóng nhận ra tầm quan trọng của việc lựa chọn cái gì hữu ích và cái gì không.

NASA đã vượt qua đống rắc rối

Với tất cả những gì được bàn luận xung quanh vấn đề Modern Software, tôi thấy các lập trình viên mới bắt đầu thường hỏi tôi câu hỏi quan trọng nhất trong sự nghiệp của họ: “Chúng ta nên chú ý đến điều gì?” và thật sự khó khăn để trả lời họ:

  • Lập trình hướng đối tượng là tương lai của phần mềm
  • Hãy tham gia vào Rust Evangelism Strikeforce LUL
  • Cải thiện tốt hơn  <language_with_other_design_goals>?

Ít nhất, đó không phải là cách mà NASA trả lời câu hỏi đó khi được hỏi. Câu chuyện của một cơ quan nổi tiếng, một chuyến du hành ngoài không gian có thể bị tổn thất không thể sửa chữa nếu bất kỳ phần mềm nào của nó không chính xác, thậm chí dẫn đến cái chết. Sự khắc nghiệt của thực tế đó đã buộc họ có một thái độ nghiêm túc đối với việc lập trình.

Với nhiều năm kinh nghiệp làm việc ở đó, tôi muốn cung cấp một số thông tin về triết lý mà cơ quan vũ trụ NASA rạo ra các phần mềm đáng tin cậy nhất trên thế giới và tôi sẽ chia sẻ về thái độ của họ đối với chương trình cùng bốn giả định mà tôi nghĩ rằng khiến các lập trình viên nghiêm túc hơn trong công việc.

Bốn giả định của NASA

Bạn sẽ đối mặt với cố vấn

“Ai là cố vấn của bạn?”

Là một người mà bất kỳ lập trình viên NASA nào cũng đổ mồ hôi hột khi tiếp xúc và đó là do thoả thuận của cơ quan đảm bảo rằng mỗi lập trình viên có thể có một người cố vấn. Nó có thể ở mức độ công việc với chương trình Mentor-Protégé của OSBP, dự án NEXT nội bộ hoặc với Pathways Agency Cross-Center Connection (PAXC). Thật thú vị, bạn không cần phải đi tìm cách có quyền truy cập vào bởi vì tất cả chúng ta đều được chỉ định một cố vấn cá nhân ngay từ đầu.

Chúng tôi tin tưởng vào tiềm năng của nhau

Để có được mức độ tin cậy nhất định khi tham gia đội ngũ lập trình viên của NASA bạn phải vượt qua các cuộc điều tra về lí lịch. Tuy nhiên, cũng giả định rằng mọi người đều có điều gì đó giá trị để cung cấp và chúng tôi tin tưởng vào tiềm năng của cá nhân họ. Hãy chứng tỏ bạn tốt và mọi thứ khác sẽ trở nên gần như vô nghĩa.

Bạn sẽ nói “Tôi không hiểu”

Sẽ có các lập trình viên cấp cao có kinh nghiệm hỏi các thực tập viên “Tôi không hiểu phần này của codebase. Đó có phải là một tính năng mà tôi chưa biết chưa? ” Hoặc kỹ sư quản lý yêu cầu “Tôi không chắc những gì tác động của công việc của bạn ngày hôm nay là gì. Liệu chúng ta có thể xem xét lại nó một vài lần cho đến khi tôi nắm bắt được nó?” Những câu hỏi này là thoái quen hàng ngày của họ.

Chúng tôi chú trọng vào cách hoạt động của hệ thống máy tính

NASA hiểu biết sâu sắc về cách thức hoạt động của máy tính và họ tìm ra giá trị trong việc phát hiện, các hạn chế cơ bản của hệ thống để ngăn chặn việc đưa ra quyết định phát triển phần mềm sai lầm.

Gene Amdahl- Ông là một nhà tiên phong về máy tính đầu tiên với một cuộc điều tra thú vị: hiệu quả của việc cải tiến một thành phần của một hệ thống là gì? Rằng 50% thời gian chạy chương trình của bạn đã được cải thiện bằng một phần tư. Và bây giờ chúng tôi muốn biết ứng dụng đó nhanh như thế nào. Nói cách khác, một cái gì đó đã mất thời gian T1 để chạy hoàn thành và bây giờ là một phần của cái gì đó (mà mất một phần f từ T1) là k lần nhanh hơn. Tôi sẽ dành cho bạn bất kỳ toán học, mặc dù nó rất đơn giản – xác định thời gian mới T2 sử dụng T1, f, k, và thể hiện sự gia tăng hiệu suất tương đối như một tỷ lệ T1T2. Bạn sẽ kết thúc bằng phương trình sau:

Áp dụng định luật Amdahl để thực hiện ví dụ trên, bây giờ chỉ đơn giản là áp dụng công thức trên để biết ứng dụng của bạn chạy ở mức độ nào :

Kết quả phép tính bằng 1,6 . Bạn đã tối giản một nửa chương trình của mình, và tối ưu hóa nó nhanh gấp bốn lần, hệ thống tổng thể chỉ nhanh hơn 1,6 lần. Chúng ta hãy sốc hơn nữa. Giả sử bạn lấy một số thành phần khác và thời gian cần để chạy bây giờ là 0 (k hướng tới vô cùng). Bạn nhận được một trường hợp đặc biệt của Luật Amdahl:

Giả sử rằng thành phần này bao gồm 60% thời gian chạy chương trình của bạn, và bây giờ nó có hiệu quả không có thời gian để chạy nó. Tăng tốc tối đa lý thuyết là 2,5 … Luật của Amdahl cho chúng ta biết rằng để cải thiện đáng kể tốc độ của một hệ thống, chúng ta sẽ phải cải thiện một phần rất lớn của nó. Sự thật đơn giản, nhưng dễ bị quên lãng. Định luật được sử dụng thường xuyên trong tính toán song song để dự đoán tốc độ sử dụng bộ vi xử lý đa lõi và Julian Browne đã định nghĩa lại nó trong bối cảnh đó: “Về cơ bản luật quy định rằng trong khi một quy trình có thể được phân tách thành các bước mà sau đó có thể chạy song song, Toàn bộ quá trình sẽ được tối ưu đáng kể bởi các bước được chay song song.”

Với những giả định trên, phần còn lại của bài viết đưa ra một cái nhìn chủ quan hơn về những bài học nào có thể được tiếp nhận từ NASA.

Tránh các nguồn không đáng tin cậy

Một số người bạn của tôi đồng ý rằng nghề lập trình vẫn chưa thực sự trưởng thành vì nó đang ở giai đoạn tiền khoa học. Tôi cho rằng nhiều người trong chúng ta đang bí mật theo dõi các nguồn kiến thức mặc dù biết nó không đáng tin cậy và theo như tôi có thể nói NASA đã làm tốt để tự bảo vệ mình chống lại chúng:

Đức tin

Tôi không nói về đức tin trong nghĩa là hy vọng. Đức tin được sử dụng khi chúng ta muốn tin vào cái gì đó mà không có lý do chính đáng để tin vào nó:

Lead: “Tôi thích các tính năng mới của ứng dụng bạn đã viết cho khách hàng của chúng ta, bạn cho tôi biết bạn đã tải xuống thư viện nào để viết chúng?”

Junior: “Vâng. Cho đến nay nó đã hoạt động rất tốt . ”

Lead: “Nó là mã nguồn mở? Nếu không ai là nhà cung cấp và họ tốt như thế nào mà hỗ trợ? Bạn đã chứng minh nó mạnh mẽ và thử nghiệm nó trên môi trường tham số của chúng ta? ”

Junior: “Không, nhưng tôi đã sử dụng nó một thời gian và nó đã không gây ra bất kỳ vấn đề.”

Lead: “???”

Điều này xảy ra không chỉ cho tải ngẫu nhiên, nhưng khi code của bạn không hoạt động nhưng sau đó nó đã hô biến và bạn quyết định sử dụng nó. Khó ai có thể để niềm tin ảnh hưởng đến quyết định phần mềm của họ tốt hay không, nhưng nếu về lâu dài thì nó sẽ dẫn đến phần mềm bị chậm và xuất hiện nhiều bug.

Khải huyền

Ý tôi là sự “khải huyền” bắt đầu khi một nhân vật chính quyền tiết lộ điều gì đó là không đúng sự thật, hoặc một vài sự kiện đã được truyền lại từ thời kỳ trước đó và bạn tin rằng nó đúng vì nó được cho là đúng. Nếu bạn buộc nó với sự cần thiết để xác định với một số tập hợp ngẫu nhiên của cộng đồng lập trình và mức độ sử dụng của một ngôn ngữ giúp bạn trở thành một lập trình thực thụ.

Uy tín

Hội nghị được tổ chức với bầu không khí hưng phấn; Hứng thú vì những gì sắp được công bố, các bài chia sẻ và thuyết trình về các nguyên tắc mới nhất. Với khả năng tự nhiên để làm việc với đám đông, và khung cảnh mà tác giả nói, thật khó có thể nhận ra rằng chúng ta đã tin tưởng vào những tuyên bố của tác giả. Và quan trọng nhất là mua sách của họ.

Hào quang

Tôi nhận ra đó là một từ lạ lùng để sử dụng, nhưng khi một ý tưởng hấp dẫn và thú vị, nó dường như phát ra một “ánh sáng rực rỡ”. Nó lấp lánh và nó là sự thật.

Chúng ta có thể tiếp tục, nhưng dần ra khỏi danh sách này là những gì có ý nghĩa để được khoa học về sự tiến bộ công nghệ của chúng tôi.

Mở rộng khả năng sử dụng máy tính của bạn

Một cuộc nói chuyện về bản chất của vũ trụ nói chung là hữu ích hơn khi những bài tham luận khoa học. Tương tự, một cuộc thảo luận về lập trình có lợi cho tất cả mọi người đạt đến một ngưỡng nhất định trong khả năng sử dụng máy tính. Nếu chúng ta tự gọi mình là chuyên gia, chúng tôi có trách nhiệm học các khái niệm cơ bản đằng sau các máy tính. Nó bảo vệ chúng ta khỏi những nguồn kiến thức không đáng tin cậy, và nó chỉ cho chúng ta những điều chúng ta phải quan tâm. NASA nhận ra điều này, và đã đảm bảo rằng nền văn hoá của tổ chức cho phép mọi người nâng cao trình độ cá nhân.

Khuyến khích

Bạn có phải là một lập trình tìm cách cải thiện khả năng sử dụng máy tính của bạn? Nếu vậy tôi có một vài gợi ý cá nhân.

Computer Systems: A Programmer’s Perspective

Computer System’s: A Programmer’s Perspective đó là cuốn sác yêu thích của tôi và góp phần vào sự nghiệp thành công của tôi.  Các chủ đề được đề cập ở đây là loại nền tảng mà tôi nghĩ mọi người nên có. Ít nhất, một nghiên cứu kỹ lưỡng các chương 1-3, hệ thống phân cấp bộ nhớ và System I / O đang mở mắt. Nếu bạn đang làm việc trên bất cứ điều gì liên quan đến web, tất nhiên các chương về Lập trình mạng là quan trọng.

Tìm kiếm những người cùng chí hướng

Có một cộng đồng nhỏ được gọi là Mạng Handmade, với một đội ngũ đáng chuyên gia kinh nghiệm (Tôi là thành viên của nhóm) khi chúng tôi cố gắng xây dựng một nơi mà chúng tôi có thể tránh khỏi cuộc trò chuyện về modern software và thay vào đó nói về những điều tôi đã nói ở trên. Chúng ta dễ bị tổn thương như các cộng đồng tín ngưỡng khác (và chúng ta đã gặp phải trong quá khứ), nhưng chúng ta cố gắng để ý thức về nó.

Cộng đồng cũng đã có các cuộc phỏng vấn với các lập trình viên nổi tiếng thảo luận về tình hình công việc, có hay không việc họ đồng ý với kết luận của chúng tôi. Những cái trước đây có sẵn ở đây.

Techtalk via Mystudentvoices