作為軟件開發人員需要的技術技能


 
        

我們一度都是新手,開始時可能有點困難。但是,如果您剛剛成為一名專業軟件開發人員,那么本文將包含一些實用且易於理解的建議。

如果你不能實際編寫代碼並開發軟件,那么你所學到的所有軟技能都不會對你有很大幫助。也許你會成為一名優秀的經理或管理人員,但不是軟件開發人員。但是,如果您正在閱讀本書的這一部分,我假設您有興趣成為一名軟件開發人員 - 或者更好的 - 所以讓我們談談您需要了解的技術技能

撿起技能包

現在,這是一個傾向於壓倒許多初級軟件開發人員的話題,因為你可能感覺有 很多東西需要知道,甚至很難 知道從哪里開始

我將嘗試將其分解為最有用和有益的 技術技能,這些技能最有助於您 成為軟件開發人員

本章絕不是一本詳盡的列表,列出了作為軟件開發人員可能需要的所有技術技能,但我已經嘗試列出了必要的技術,並在此給出了概述。

所以,如果沒有進一步的說明,這里簡要介紹一下我認為最重要的技術技能。

 

一種編程語言

我認為我們最好從這個開始,不是嗎?

不知道編程語言真的不能成為程序員 - 你知道我的意思嗎,對吧!

不過,我會很快說 ,選擇哪種編程語言 並不像你想象的那么重要

相反,讓我們來談談為什么我建議從一種編程語言開始,而不是試圖學習太陽下的一切。

許多初學程序員試圖通過一次學習幾種編程語言或在他們嘗試作為軟件開發人員完成第一份工作之前來充實自己。

雖然我認為你最終應該學習不止一種編程語言,但 我建議不要提前做, 因為它只會導致混亂,並且會將你的精力從你需要學習的許多其他技術技能上轉移開來。

相反,我建議你 深入學習並學習單一編程語言的細節,這樣你就可以對用這種語言編寫代碼的能力充滿信心。

 

書籍和文章推薦:

我挑選幾本入門級的書籍和文章進行推薦,比較深入的書 等你學完可以自行選擇購買

 

如何構造代碼

在學習了編程語言之后 - 或者最好在學習它的同時 - 我堅信你需要知道的下一件事是如何正確地構建你的代碼。

構建代碼我的意思是什么?

我的意思是編寫 好的,清晰的,可理解的代碼,不需要大量的注釋,因為代碼本身是通用的

許多軟件開發人員在沒有學習這項技能的情況下經歷了整個職業生涯,這很不幸,因為這是我和其他許多人評判軟件開發人員技能和能力的主要方式。

良好的代碼結構表明了對工藝的專注,而不僅僅是完成工作。

構建代碼實際上是軟件開發的藝術部分,但它也很重要,因為您和您的同事必須使用代碼將花費更多時間來維護現有代碼而不是編寫新代碼。

我不打算在本書中詳細介紹如何正確構建代碼 - 就像我說的 - 我已經為您提供了一個很好的資源,但 您應該努力學習如何從一開始就編寫好的,干凈的代碼 而不是事后學習這個技能。

我可以保證,即使你是初學者,如果你能寫出好的,干凈的,簡潔的,可理解的代碼,在結構本身中表達它的意義,那么任何看到你的代碼的瀏覽者都會 認為你是經驗豐富的專業

在某種程度上,你將會,或者至少在未來的道路上,因為你將把編碼視為一種職業,而不僅僅是一份工作

書籍和文章推薦:

 

面向對象設計

這個是有爭議的,特別是如果你正在學習一種非面向對象(OO)的程序語言,但是 足夠的軟件開發世界會考慮OO設計,所以你需要確保你理解它

面向對象設計 是一種設計復雜程序的方法,這些程序將它們分解為單個類或對象(類的實例化),它們封裝了功能並具有特定的角色和職責。

在軟件開發中, 我們總是試圖管理復雜性

根據對象進行思考有助於我們這樣做,因為它允許我們從一堆交互組件中定義和設計一個復雜的系統,而不是試圖從整體上解決整個復雜性。

今天有很多函數式編程語言,但是 在軟件開發中你會發現的最流行的語言和模式仍然會受到面向對象設計和分析的影響。

您應該很好地理解類是什么,不同類型的繼承是什么 - 以及何時使用它們 - 以及理解多態 和封裝等術語 。

算法和數據結構

如果您參加傳統的大學或大學計划獲得計算機科學學位,這將是您將要學習或將要學到的內容的很大一部分。

算法是解決各種計算機科學/編程問題的常用方法。

例如,有幾種算法通常用於以編程方式對事物列表進行排序。這些排序算法中的每一種都有一組不同的屬性,包括速度,內存大小要求以及它所處理的理想數據類型。

在計算機科學領域有許多這樣的算法,理解如何編寫 這些算法的自己變體 以解決在解決實際編程問題時可能遇到的棘手問題也 很重要

通常,熟悉算法可以讓一個開發人員在一小時內解決問題,這可能需要另一個開發人員幾天才能弄明白。

除非你熟悉並且熟悉算法,否則你 甚至不知道已經存在一個優雅的解決方案。所以,僅僅因為這個原因,我認為這是一項有價值的技能。

數據結構屬於類似的類別, 並與算法結合使用。

所有軟件開發人員都應該熟悉幾種數據結構,包括:

  • 數組或向量

  • 鏈接列表

  • 堆棧

  • 隊列

  • 哈希

通過很好地掌握數據結構和算法,您可以輕松而優雅地解決許多困難的編程問題

當我第一次開始編程時,我在數據結構和算法上非常糟糕,因為我主要是自學成才。

很快,很明顯這些技能在真正的編程世界中是多么有用,因為我遇到了以前不知道如何解決的問題,現在這些問題非常容易和有趣。

事實上, 我認為這是軟件開發中最有趣的領域之一。通過解決一個棘手的問題並利用數據結構和算法來開發一個干凈,優雅的解決方案非常有效。

學習這些東西是一個挑戰,但非常值得。這是可以讓你遠遠超過同齡人的技能之一。 軟件開發人員的大多數人都在這方面設備不足

如果你想通過微軟或谷歌等公司的面試, 你肯定需要掌握這個技能

書籍和文章推薦:

開發平台及相關技術

您應該對至少一個開發平台以及隨之而來的相關技術或框架有一些經驗和掌握。

平台是什么意思?

嗯, 通常它意味着操作系統(OS),但它也可以應用於其他類似於操作系統的抽象。

例如,您可能是專注於Mac或Windows操作系統的Mac開發人員或Windows開發人員,但您也可以是專注於特定Web平台的Web開發人員。

我不想將其歸結為關於平台究竟是什么的討論 - 不同的人會有不同的意見 - 但為了討論的目的, 我將把平台定義為您開發的特定環境,它有自己的生態系統和特殊性

再一次,這是另一個我不認為你 選擇的東西如此重要的東西,就像你選擇的東西一樣

公司通常雇用開發人員來開發特定的平台或技術。

如果您具有該特定平台的專業知識,那么作為iOS開發人員獲得工作將更容易。

這意味着熟悉平台本身,以及程序員在為該平台開發時通常使用的開發工具,慣用模式和通用框架。

您可能認為編程語言的選擇決定了平台,但實際上很少這樣

今天拿C#。您可以成為C#開發人員並為Windows,Mac,iOS,Android,Linux甚至嵌入式系統編寫代碼。

所以不要只選擇一種語言; 選擇一個平台。

框架或技術棧

除了學習特定的編程語言和平台之外,我還強烈建議學習一個框架,或者更好的是,一個完整的開發堆棧。

什么是框架?

什么是技術棧?

框架只是一組用於在特定平台或多個平台上開發代碼的庫。它通常使該平台上的常見編程任務更容易。

回到C#示例。大多數C#開發人員使用.NET Framework編寫C#應用程序。.NET Framework由許多庫和類組成,這些庫和類允許C#開發人員在更高的抽象級別工作,因為他不必在每次想要做某事時完全重新發明輪子。

例如,.NET Framework的一部分包含用於處理圖像的代碼。這段代碼從頭開始編寫起來非常困難,因此框架對於編寫需要以某種方式操作圖像的代碼的C#開發人員來說是一個巨大的好處。

技術棧有點不同。 技術棧是一組技術,通常包括框架,它們通常一起用於創建完整的應用程序

MongoDB是一種數據庫技術。

Express.js是一個用於創建Web應用程序的Node.js框架。

AngularJS是一個前端JavaScript框架,用於為Web應用程序創建用戶界面。

最后,Node.js是一個用於在JavaScript中開發基於Web的應用程序的運行時環境。

技術棧使創建應用程序變得更容易, 因為它們提供了許多開發人員用來開發應用程序的通用范例,因此可以輕松地共享知識,並且可以確保一組特定的技術可以協同工作。

學習技術棧可能非常有價值,因為這意味着您擁有開發完整應用程序所需的所有技能。許多擁有使用特定技術棧開發的應用程序的公司將尋找熟悉該技術棧並可以立即運行的軟件開發人員。

基礎數據庫知識

雖然數據庫的情況在過去幾年中已經發生了很大的變化,但我認為數據庫不會很快消失,所以我認為你可能應該對它們有所了解,不是嗎?

在編寫本文章時, 有兩種主要的數據庫技術:關系數據庫和文檔數據庫。

我想說今天的開發人員至少應該熟悉關系數據庫,並且可能也應該對非關系數據庫有一些了解。

在軟件開發中,數據庫通常用於存儲應用程序的數據。

當然,有些團隊會有專門的數據庫開發人員或數據庫管理員(DBA),但這並不能讓您至少不了解數據庫的基礎知識。

至少,你應該知道:

  • 數據庫如何工作

  • 如何執行基本查詢以獲取數據

  • 如何插入,更新和刪除數據

  • 如何將數據集連接在一起

此外,您可能希望了解如何 使用所選平台和/或框架以編程方式從代碼中檢索和存儲數據

期望大多數開發人員能夠編寫可與數據庫交互的代碼。

書籍及文章推薦:

  1. 關系性數據庫

    另外,MySQL 的官方文檔,寫的也是非常不錯的,英語比較好的讀者,也可以看看。

  2. 非關系數據庫

 

版本控制

版本控制是任何軟件開發項目的一個組成部分。

回到當年,在我們使用版本控制之前,我們將擁有項目所有文件進行網絡共享,或者我們用U盤或者硬盤來回拷貝項目代碼。

至少在大學時,進行項目開發和畢業設計的時候,我都是這么做的。

但是, 我當年比較年輕。我真蠢。你沒有必要。

今天幾乎所有的專業開發人員都應該知道如何使用版本控制來提交代碼,檢查代碼,並希望合並來自多個源的更改

最基本級別的版本控制允許您保留對軟件項目中不同文件所做更改的歷史記錄。

它還允許多個開發人員同時處理相同的代碼 並將這些更改合並在一起。

我不會在這里詳細介紹,但 您應該知道如何使用至少一個版本控制系統,並且您應該熟悉大多數基本的源代碼控制概念。

幾乎所有專業軟件開發團隊都會在當今的軟件開發領域中使用某種版本控制。

書籍及文章推薦:

  1. 超級強烈推薦 《Git 教程》文字 + 圖片 + 視頻 。

文字 + 圖片 + 視頻 。

比較淺顯易懂

  1. marklodato 《圖解 Git》

構建和部署

今天,大多數軟件開發項目都有某種自動構建和部署系統。

有幾種不同的軟件應用程序可以幫助團隊自動完成這兩項任務,這些任務曾經是手動的,對於某些團隊來說仍然如此。

你問什么是構建和部署?

好問題。

至少,構建系統將編譯所有代碼並確保沒有編譯錯誤。

復雜的構建系統 還可以 運行單元測試或用戶測試,運行代碼質量檢查,並提供 有關代碼庫當前狀態的一些報告

部署系統 將負責將代碼部署到生產計算機或部署到某種測試環境。

您不必是這些技術的絕對專家,但 至少要了解這些系統如何工作的基礎知識以及構建和部署代碼的過程非常重要

通常,創建和維護構建和部署系統的實際責任屬於一個快速增長的領域,稱為DevOps(開發人員操作的簡稱)。

但是,這並不能成為您理解至少這個過程如何運作的基礎知識的借口。

書籍和文章推薦:

Jenkins官方網站

<<持續交付>>

測試

過去,開發人員不必了解有關測試的知識。

我們會編寫一堆代碼並將其“扔到牆上” 給一群測試人員,他們會在我們的代碼中發現各種錯誤,我們會修復錯誤,就是這樣。

不再。

有這么多軟件項目采用所謂的敏捷過程(我們將在討論方法時對此進行更多討論),軟件開發人員和測試人員必須 更緊密地合作。

質量確實成為整個團隊的責任 -我認為它一直都是。

話雖如此,您需要了解有關測試的知識。

你應該至少熟悉一些基本術語,比如:

  • 白盒測試

  • 黑盒測試

  • 單元測試(不是真正的測試)

  • 邊界條件

  • 測試自動化

  • 驗收測試

我假設你至少想要成為一名優秀的開發人員 - 在將自己的代碼提供給其他人之前測試它們。

如果你真的想成為一名專業人士,而不僅僅是一個黑客,這是不容 談判的

調試

啊,許多新手軟件開發人員將他的夢想砸在調試器的磐石上。

每個人都想寫代碼,對嗎?

但是,沒有人想調試他們的代碼嗎?你聽到了嗎?

真相時間。

作為一名軟件開發人員,您將花費大約90%的時間來確定 您的代碼無法運行的原因

我知道這不富有魅力。我知道你只想整天編寫新的代碼,但這個世界並沒有這樣做。

如果你使用測試驅動開發這樣的方法,你可能會花很少的時間在調試器上,但無論你做什么,無論你如何嘗試和繞過它, 你將不得不學習如何調試你的代碼 或別人的。

所以,不要對自己知道的必須做的事情采取隨意的方法,你應該 咬緊牙關,學習如何有效地做到這一點

方法

你需要知道的事情清單還有嗎?這么嚇人!

如果沒有,這里還有一個 - 但我保證這是最后一個。

雖然一些軟件開發團隊剛剛開始編寫代碼並在完成后完成工作,但 大多數團隊都有一些他們至少假裝遵循的方法

(順便說一下,請注意: 不要指望任何團隊真正遵循他們自稱使用的軟件開發方法。我不是想在這里玩世不恭或指責。我只是一個現實主義者,而我碰巧知道有很多人說他們正在做像Scrum這樣的軟件開發方法,因為他們每天都會舉行會議。)

因此,至少熟悉最常見的軟件開發方法背后的一些基本思想至關重要。

今天,我想說這些是 瀑布式開發敏捷開發

大多數團隊都聲稱他們正在做敏捷。敏捷本身就是一個非常寬松的概念,但是有一些實踐,而且,我敢說,如果你想能夠談論談話,你可以說,並且適合敏捷團隊,你應該注意的儀式。

我們將在關於軟件開發方法的章節中更深入地討論這個問題。

書籍和文章推薦:

不堪重負?不要

我知道這是相當多的東西,而且我在這些主題的大部分內容上幾乎都沒有深入進去。

現在你可能會感到有些不知所措, 並且你不了解這些技術技能的大部分內容。

沒關系。您不應該 - 除非您已經是一名職業軟件開發人員,在這種情況下,您會感到羞恥!(開個玩笑。我愛你,但 你最好還是從新了解一下上述技能 - 真的。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM