JavaRush /Java Blog /Random-TW /誰是軟體工程師?軟體工程 VS “僅僅”編程

誰是軟體工程師?軟體工程 VS “僅僅”編程

在 Random-TW 群組發布
我們提請您注意Samer Buna 的一篇文章的改編版,該文章涉及軟體工程和程式設計之間的差異,或者開發軟體概念與「只是編碼」有何不同。
誰是軟體工程師? 軟體工程VS
所有軟體工程師都會編碼,但並非所有程式設計師都可以開發軟體概念。有些人不喜歡「軟體工程師」(又稱軟體工程師)這個詞,因為我們在談論更物理的東西(例如建築)時通常使用「工程師」這個詞。當然,我們的文章不是關於這個術語本身。如果它突然引起你的拒絕,它很容易被與創造力相關的東西所取代。「軟體創作者」、「軟體作者」...甚至「軟體創作者」!
當我們談論「軟體工程師」時,我們指的是一個主要任務不僅僅是編寫程式碼,而是創建高品質應用程式的人。在此,他看到了自己的使命,將科學方法和統計方法應用於他的工作。對他來說,程式設計不僅僅是一種賺錢買食物的方式。
程式設計能力並不自動使一個人成為軟體工程師。任何人都可以學習編碼,而且比看起來容易得多。任何人都可以創建一個簡單的程式供自己使用,但這並不能保證相同的程式也適用於其他人。我最喜歡的例子是這樣的:我們很多人在淋浴時唱歌,但是,可惜的是,這種表演並不總是值得在專業舞台上表演。當然,為了獲得高品質的音樂體驗,您很可能會求助於專業人士。 你需要更多例子嗎?
  • 我們都在學校學習數學和寫作,但這並不能讓我們成為數學家和作家。
  • 我們大多數人都有能力準備一道還過得去、有時甚至非常美味的菜餚,但並不是每個人都敢為大使館晚宴準備一桌100人的菜餚。在這種情況下,我們聘請了一名廚師。
  • 您現在準備好將新房子的建造完全委託給鄰居的孩子,他用樂高創造了令人印象深刻的傑作嗎?
我在本文中試圖傳達的主要觀點是,簡單的程序與工程師設計的程序有很大不同。 程式設計過程的最簡單定義:為電腦制定有序的操作序列,以便在給定給定的輸入參數的情況下獲得特定的輸出。 軟體工程的過程是設計、編寫、測試和策劃電腦程式來為許多使用者解決問題。這是關於創建可靠且安全的解決方案,這些解決方案將經受時間的考驗,並能夠應對一些可能未知的挑戰。
誰是軟體工程師? 軟體工程VS
軟體工程師了解他們解決的問題、他們提出的解決方案、這些解決方案的局限性、他們的隱私和安全的一切。在我看來,如果一個人不理解問題的本質,他甚至不應該開始寫解決方案。

工程思維-尋找應用解決方案

軟體工程師並不認為編寫軟體本身是他們的主要目標。他們從滿足需求和解決問題的角度思考。這很重要,因為並非每個問題都需要軟體解決方案。其中一些可以使用現有程序來處理。有些問題的發生有時可以事先預測,並且藉助優秀的程式設計,可以在將來避免這些問題的發生。

“知識分子解決問題,天才預防問題”

- 艾爾伯特愛因斯坦

誰是軟體工程師? 軟體工程VS
複雜的問題往往需要寫大量的程式。有些任務需要並行運行應用程序,而有些任務則需要順序執行多個程序。只需培訓使用者即可解決許多問題。在開始創建程式之前,軟體工程師會問自己一些問題:
  • 我該解決什麼問題?
  • 除了寫程式碼來解決這些問題之外,你還能做什麼?
  • 我可以做什麼來讓應用程式更輕鬆地完成這些任務?

程式品質和代碼質量

好的程式是清晰易讀的。它們很容易擴展,可以與其他程式很好地配合,而且使用起來不會是一場噩夢。代碼品質是不容談判的。應該很高,僅此而已。在考慮時,諸如程式設計師心情不好或期限太緊(哦,那些期限!)之類的藉口是不可接受的。軟體開發最重要的方面之一是以易於將來維護和修改的方式設計程式(你好,OOP!)。如今,幾乎所有軟體都是可修改的,通常這個過程即使沒有用戶參與也會發生,或者不需要用戶做任何事情,除了「您的程式已更新,點擊「確定」或「推遲」。當然,用戶有權要求應用程式提供新功能(特別是如果我們談論的是用 Java 編寫的長期運行的企業軟體,或者可以玩多年的線上遊戲)。
想了解更多 Java 程式設計的知識嗎?加入Java 開發者小組!
一段程式碼本身很難說是有用的。軟體的有用功能始於不同的應用程式相互溝通、交換資料並共同執行向使用者呈現資料和介面的任務。
誰是軟體工程師? 軟體工程VS
設計程序時應牢記這幾點!他們收到什麼訊息?監控哪些事件?身份驗證和授權是如何發生的?好程式的另一個同樣重要的標誌是程式碼的清晰度,而不是應用程式已通過的測試數量,甚至不是良好的測試覆蓋率。看似簡單的問題:“除了我之外,其他人能理解我的程式碼嗎?”、“我今天能編寫這段程式碼並在幾週後理解它嗎?” 關於程式設計中最困難的兩件事的流行名言是這樣的:

“只有兩件真正困難的事情:快取失效和實體命名”

——菲爾·卡爾頓。

程式碼可讀性比通常認為的重要得多。不幸的是,為了程式碼的清晰性,不可能定義精確的度量或參數。記住普遍接受的語言規範、良好的軟體模型和開發方法會有一定幫助。但通常這還不夠。可以說,隨著時間和經驗的積累,真正的專業人士會發展出一種“清晰感”,類似於直覺。寫作比喻在這裡很有效:知道很多單字並不能幫助你寫出簡潔明了的東西。

“我本來可以寫得短一些,但我沒有時間。”

——馬克‧吐溫。

快速、輕鬆地修復錯誤的能力是優秀軟體的關鍵特徵。程式中的錯誤應發送明確的訊息並集中記錄以供追蹤。當報告新錯誤時,修復它的人必須具有調試它的能力。他需要輕鬆連接到系統,隨時存取執行訊息,還能夠輕鬆檢查系統任何部分的功能。

環境和測試

當軟體工程師開發應用程式時,他們會盡力確保它們可以在不同架構和不同作業系統的電腦上運行。重要的是,該軟體可以在不同的解析度和螢幕方向下運行,並且不會「消耗」超出所需的記憶體和處理能力。
誰是軟體工程師? 軟體工程VS
當涉及到 Web 應用程式時,它們必須能夠在所有主流瀏覽器中運行。建立桌面應用程式時,您需要確保它可以在 Mac、Windows 和 Linux 上啟動並正常運作。好吧,程式依賴數據,那麼即使在數據連接速度慢或沒有數據連接的情況下,應用程式也應該可以工作。為了編寫一個軟體,工程師會考慮各種場景選項並計劃對其進行測試。這一切都始於選擇理想的選項,一切正常,不會有錯誤。然後他們記錄任何潛在的問題並將其寫入測試計劃。一些工程師首先編寫程式碼,他們稱之為測試案例,它模擬所有可能出現的問題和錯誤的場景。然後編寫一個可以與所考慮的任何選項一起工作的程式。才華橫溢的軟體工程師的獨特能力不是知道如何編寫程式碼,而是了解應用程式作為輸出到底應該做什麼以及如何實現它。當客戶的軟體需求不完整且可能不明確時,工程師需要正確評估並「理解」它們。

成本與效率

在大多數情況下,軟體工程師可以快速解決問題。如果您認為僱用「昂貴」的經驗豐富的程式設計師會增加您的成本,請再想一想。僱用的程式設計師越有經驗,他就能越快提供簡單、整潔、可靠且易於使用的解決方案。從長遠來看,這肯定會降低軟體開發成本。
誰是軟體工程師? 軟體工程VS
還需要考慮執行程序的成本。任何程式都會消耗計算資源,而且它們都不是免費的。
軟體工程師的工作是編寫不會不必要地使用計算資源的高效程式碼。
例如,快取經常存取的資料是用於實現所需結果的可能策略之一。但這只是可能有數百種可以使程式更快、更有效率的工具和解決方案之一。新手程式設計師可能會為您提供廉價的解決方案,但使用這樣的解決方案最終將使您和您的客戶付出的代價比與首先創建有效解決方案的經驗豐富的開發人員合作要高得多。

注重使用者體驗

優秀的程式設計師在開發時會牢記使用者體驗 (UX)。人機互動是一個研究和解決方案無窮無盡的議題。應用的解決方案越多,程式的結果就應該越好。以下是一些範例,只是為了讓您了解這個方向是什麼:
  • 在設計電子郵件等資料輸入表單時,好的程式應該忽略電子郵件地址的大小寫。如果按下 CAPSLOCK 鍵,則不會引發錯誤,因為電子郵件地址的小寫形式是唯一的。如果程式接受新的電子郵件地址作為輸入,請在輸入過程中儘早進行檢查,以提醒使用者他們使用了錯誤的地址格式。該解決方案既包括明顯的檢查,例如缺少“@”符號,也包括不那麼明顯的檢查,例如檢查字元順序是否錯誤,例如“gmail.ocm”

  • 當使用者被重定向去執行某些操作時,一個好的程式應該記住他目前的位置,並在完成後將他返回。一個好的程式也應該記住用戶已經傳輸的數據,這對於與他進一步互動非常重要。

    假設您正在以訪客身分在 Expedia 上搜尋航空旅行。後來您決定建立一個帳戶。該應用程式應將您之前的所有搜尋保存在新帳戶中,並且您應該能夠從其他裝置存取它們。


  • 誰是軟體工程師? 軟體工程VS
  • 一個好的程式是在設計時考慮到使用者行為場景的。您不需要只在「馬馬虎虎」的基礎上添加新功能;要設身處地為用戶著想。有一天,我在預訂機票時忘記提供我的飛行常客號碼。收到確認後,我決定去航空公司的網站添加以獲得折扣。為了弄清楚如何做到這一點,我在這個網站上閒逛了整整 10 分鐘。該應用程式是如此不明顯,以至於我只是漫無目的地瀏覽網站的不同頁面,以找到我需要的東西。後來,我發現我已經登陸了幾次正確的頁面,但我什至不明白它,因為我需要的欄位在其他類似的巨大表格欄位中丟失了。

    原來,為了編輯行程訊息,我需要滾動大約二十行表格,輸入會員卡號和電話號碼,否則表格無法發送進行驗證。這是一個在開發時沒有考慮使用者使用起來有多舒服的程式的範例。

可靠性、安全性、安全性

在我看來,專業軟體開發人員和業餘愛好者之間最重要的區別是在創建應用程式時考慮應用程式的可靠性、安全性和安全性等參數。
真正的專業人士知道他對其解決方案的安全負責。
程式的某些部分必須能夠容忍不正確的輸入、不正確的狀態和不正確的互動。這確實很難執行,也是我們聽到人們因軟體錯誤而死亡的主要原因。使用者已經輸入、正在輸入並將繼續在程式中輸入不正確的資料。這必須被接受為事實。此外,有些人會故意這樣做,目的是破壞應用程式並獲取可用的資源。
誰是軟體工程師? 軟體工程VS
這是一個現實生活中的例子:據稱對最近 Equifax 資料外洩事件負責的人被指控未能履行其工作職責,即開發解決方案以抵制向公眾提供的所有軟體產品中的不良和惡意輸入。資訊安全相關事件不僅涉及錯誤、惡意輸入,還涉及錯誤輸入的資料。如果使用者忘記了密碼,他可以嘗試輸入幾次?以後你會屏蔽他嗎?如果其他人試圖阻止他的帳戶怎麼辦?用戶可以透過未加密的資料通道傳輸其憑證嗎?如果登入請求來自異常位置怎麼辦?如果登入嘗試似乎是自動的,您會怎麼做?您採取了哪些措施來保護您的使用者免受跨站點腳本、跨站點請求偽造和常見網路釣魚的侵害?如果您的伺服器遭受 DDoS 攻擊,您是否有備份策略?這些問題僅突顯了一些需要考慮的問題。受保護的程序不會以文字形式保存重要資訊。它使用複雜的單向密碼(一種很容易加密但沒有密鑰幾乎不可能解密的密碼)來保護它。這些是程式被駭客攻擊時的備份措施。駭客會發現對他們無用的加密資料。即使在最好的程式中也會出現意想不到的問題。一個沒有為它們的發生做好準備的程式設計師很難被稱為專業人士。在他預料到意外行為之前,他不是工程師。他是「不安全程式的作者」。程式中的錯誤並不總是顯而易見的。我們預測和預防已知錯誤的智力能力是有限的。這就是為什麼軟體工程師了解良好工具的重要性,使他們能夠編寫正確且安全的軟體。

所需工具

毫無疑問,我們需要不同的、好的開發工具。他們的作用經常被低估,但事實上他們節省了大量的時間和精力,將一些任務簡化了一個數量級。想像一下,如果您仍然需要透過 FTP 上傳檔案進行部署,可以說是老式的方式。想像一下在沒有 Chrome DevTools 的情況下調試網路和效能問題!如今,如果沒有 ESlit 和 Prettier,編寫 JavaScript 程式碼的效率將是多麼低!
誰是軟體工程師? 軟體工程VS
任何可以減少編寫程式碼時回饋時間的工具都應該受到歡迎。當我發現一個以前不熟悉但真正有用且有效的工具時,我只能後悔沒有在那個快樂的時刻之前使用它。
更好、更現代的工具將幫助您成為更好的程式設計師。找到它們、使用它們、欣賞它們,如果可以的話,改進它們。而且不要沉迷於同一件事:誰知道呢,也許使用一個新工具,你會花時間安裝和學習一次,然後你解決問題的速度會快很多倍?

軟體工程的演變

沒有人可以在兩個月、六個月甚至一年內學會軟體工程。課程、大學或訓練營不會教你如何成為軟體工程師。我已經學習了二十多年,現在仍在繼續學習。經過十年的學習和開發、創建和維護成千上萬用戶使用的應用程式後,我才能輕鬆地稱自己為經驗豐富的程式設計師。軟體工程並不適合所有人,但每個人都應該學會使用電腦解決他們的問題。如果您可以學習編寫簡單的程序,那麼您應該學習。如果您可以學習使用公開軟體,您就應該學習。如果您可以學習使用開源軟體並為自己自訂它,那麼您就擁有了超能力!每天都會為開發人員帶來新的挑戰、新的問題,這就是為什麼需要軟體工程。這個職業的主要任務是創建軟體,使普通人不必多年處理它。這樣就不需要長時間的學習來與程式互動。然而,軟體工程師不斷思考創建更好的工具來解決更複雜的已知問題,並盡一切可能確保新問題盡可能少地出現。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION