作為軟體開發人員需要具備的技術技能

2020-12-06 Java從零開始

我是幫助軟體開發人員開發除技術技能之外的「軟技能」的堅定支持者。但是不可否認:技術技能很重要

我的意思是,如果您實際上不能編寫代碼和開發軟體,那麼您學到的所有軟技能都不會真正幫到您。也許您會成為一名優秀的項目經理,而不是一名優秀的軟體開發人員。

但是,如果您正在閱讀本書的這一部分,那麼我假設您有興趣成為一名軟體開發人員,或者成為一名更好的軟體開發人員,因此,讓我們談談您需要了解的技術技能

一種程式語言

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

真的不懂程式語言就不能成為程式設計師-你知道我的意思嗎,

我們將在巧妙地命名為「要學習的程式語言」一章中討論選擇要學習的程式語言,因此,請不要再強調這一點

不過,我很快會說, 選擇學習哪種程式語言並不像您認為的那麼重要

相反,讓我們談談為什麼我建議只從一種程式語言開始,而不是嘗試學習陽光下的一切。

許多剛開始的程式設計師試圖通過一次或多次學習幾種程式語言來對衝自己的賭注,然後才嘗試擔任軟體開發人員的第一份工作。

雖然我認為您最終應該學習一種以上的程式語言,但 我建議不要提前使用因為這只會導致混亂,並且會將您的精力從您需要學習的許多其他技術技能中轉移出來。

相反,我建議您 深入學習,並專注於學習單一程式語言的來龍去脈,以便對使用該語言編寫代碼的能力充滿信心。

還記得我們在決定要成為什麼樣的軟體開發人員時如何談論儘可能具體的事情?

這就是這裡的想法。

如何構造代碼

在學習了一種程式語言之後,或者最好是在學習它的同時,我堅信,接下來您需要知道的是如何正確地構造代碼。

結構化代碼是什麼意思?

我的意思是編寫 優秀,清晰,可理解的代碼,因為代碼本身是可交流的,因此不需要大量注釋

許多軟體開發人員在整個職業生涯中都沒有學習此技能,這是不幸的,因為這是我以及其他許多人判斷軟體開發人員的技能和能力的主要方式。

良好的代碼結構顯示出對工藝的奉獻精神,而不僅僅是完成工作。

結構化代碼確實是軟體開發中的藝術部分,但也很關鍵,因為您和您的必須與您的代碼一起工作的同事將花費大量時間維護現有代碼,而不是編寫新代碼。

就像我說過的那樣,我不會在本書中討論如何正確地構建代碼,因為我已經為您提供了很好的資源,但是 您應該從一開始就努力學習如何編寫優質,簡潔的代碼。 而不是事後學習這項技能。

我可以保證,即使您是初學者,也可以編寫出清晰,簡潔,易懂的代碼來表達其在結構本身中的含義,幾乎所有看到您的代碼的面試官都將 假設您是有經驗的專業人士

在某種程度上,您將成為,或者至少在將來會成為,因為您將把這個職業視為一種職業,而不僅僅是一份工作: 一個真正的工匠的標誌。

面向對象設計

這是值得商bat的,尤其是在您學習的不是面向對象(OO)的程序語言時,但是在軟體開發界,有 足夠的人從OO設計的角度來思考,因此您需要確保自己理解它

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

在軟體開發中, 我們始終試圖管理複雜性

以對象的方式思考有助於我們做到這一點,因為它使我們能夠從一堆相互作用的組件中定義和設計一個複雜的系統,而不是試圖從整體上解決整個複雜性。

當今有許多功能性程式語言,但是 在軟體開發中可以找到的最流行的語言和模式,即使不是全部,也仍然會受到面向對象設計和分析的嚴重影響(即使不是完全)

您應該對類是什麼,繼承的不同類型是什麼以及何時使用它們有一個很好的了解,並且應該理解諸如多態性 和封裝之類的術語 。

算法和數據結構

如果您修讀傳統的學院或大學課程來獲得計算機科學學位,那麼這將是您所學或將學到的大部分內容。

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

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

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

通常,擅長算法可以使一個開發人員在一個小時內解決問題,這可能需要另一位開發人員花費幾天的時間才能弄清楚。

除非您熟悉算法並精通算法,否則您 甚至都不知道那裡已經存在一個優雅的解決方案。因此,僅出於這個原因,我認為這是一項寶貴的技能。

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

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

· 數組或向量

· 鍊表

· 堆棧

· Queue列

· 樹木

· 散列

· 套裝

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

剛開始編程時,我真的很擅長數據結構和算法,因為我大多是自學成才。

直到我開始在一個名為TopCoder的站點上競爭時,我才意識到它們的真正價值。 在該站點上 ,了解數據結構和對其進行運算的算法為您帶來了明顯的競爭優勢。

很快,當我遇到以前不知道如何解決的問題時,這些技能在實際的編程世界中變得多麼有用,而這些問題現在變得非常容易且有趣。

實際上, 我認為這是軟體開發中最有趣的領域之一。解決一個棘手的問題並利用數據結構和算法來開發出性能良好的乾淨,優雅的解決方案,這確實是一種收穫。

至少在撰寫本文時,最好的資源是GayleLaakmannMcDowell的絕妙著作《 CrackingtheCodingInterview》。

在本書中,她介紹了您需要了解的有關算法和數據結構的所有內容。

學習這些東西是一個挑戰,但值得。這是可以使您遠遠超越同行的技能之一。 在這一領域,許多軟體開發人員裝備不足

而且,如果您想在像Microsoft或Google這樣的公司進行面試, 您肯定需要掌握這種技能

開發平臺及相關技術

您應該對至少一個開發平臺以及與之配套的相關技術或框架有一定的經驗和精通。

平臺是什麼意思?

好吧, 通常它指的是作業系統(OS),但是它也可以應用於其他類似於作業系統的抽象。

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

我不想將其歸納為一個平臺究竟是什麼的討論(不同的人會有不同的看法),但是出於討論的目的, 我將定義一個平臺作為您要為其開發的特定環境。擁有自己的生態系統和特殊性

再說一遍,這是另一件事,我認為您選擇的內容並不那麼重要,而是您選擇的東西是如此重要。

公司通常會聘請開發人員針對特定平臺或技術進行開發。

如果您具有特定平臺的專業知識,則可以輕鬆獲得iOS開發人員的工作。

這意味著要熟悉平臺本身,以及程式設計師在針對該平臺進行開發時通常使用的開發工具,慣用模式和常用框架。

您可能會認為程式語言的選擇決定了平臺,但實際上情況並非如此

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

因此,不要只選擇一種語言。選擇一個平臺。

框架或堆棧

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

什麼是框架?

什麼是堆棧?

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

回到C#示例。大多數C#開發人員都使用.NETFramework編寫C#應用程式。.NETFramework由許多庫和類組成,它們使C#開發人員可以在更高的抽象水平上工作,因為他不必每次想做的事情都完全重新發明輪子。

例如,.NETFramework的一部分包含用於處理圖像的代碼。從頭開始編寫該代碼將非常困難,因此對於C#開發人員編寫需要以某種方式處理圖像的代碼而言,該框架是一個巨大的好處。

堆棧有點不同。 堆棧是通常結合在一起使用以創建完整應用程式的一組技術,通常包括一個框架

例如,有一個通用的堆棧稱為MEAN堆棧。它代表MongoDB,Express.js,AngularJS和Node.js。

MongoDB是一種資料庫技術。

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

AngularJS是用於創建Web應用程式用戶界面的前端JavaScript框架。

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

除非您將成為MEAN開發人員,否則了解所有內容並不重要,但要理解的重要一點是,如果您了解所有這些技術和框架,就可以開發整個Web應用程式。

堆棧使創建應用程式更加容易,因為它們提供了許多開發人員用來開發應用程式的通用範例,因此可以輕鬆共享知識,並且可以確保特定的技術集可以協同工作。

學習堆棧非常有價值,因為這意味著您具有開發完整應用程式所需的所有技能。許多擁有使用特定堆棧開發的應用程式的公司都將尋找熟悉該堆棧並可以開始運作的軟體開發人員。

基本資料庫知識

即使最近幾年資料庫的狀況發生了很大變化,我也看不到資料庫很快就會消失,所以我認為您可能應該了解一兩件事,不是嗎?

在撰寫本書時, 主要有兩種資料庫技術:關係資料庫和文檔資料庫。

我想說,今天的開發人員至少應該熟悉關係資料庫,並且可能還應該對文檔資料庫有所了解。

在軟體開發中,資料庫通常用於存儲應用程式的數據。

當然,有些團隊將有專門的資料庫開發人員或資料庫管理員(DBA),但這並不能為您起碼至少不了解資料庫的基礎。

至少,您應該知道:

· 資料庫如何工作

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

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

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

另外,您可能會想知道如何 使用所選平臺和/或框架以編程方式從代碼中檢索和存儲數據

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

原始碼控制

原始碼控制是任何軟體開發項目的組成部分。

回顧過去,在使用原始碼管理之前,我們將與項目中的所有文件共享網絡,或者在其上使用不同版本的軟體來回傳遞拇指驅動器。

我很ham愧地承認我不止一次參與了這些惡作劇。

但是, 我還年輕。我真蠢啊。您不必如此。

如今,幾乎所有專業開發人員都應該知道如何使用原始碼控制來檢入代碼,檢出代碼,並希望合併來自多個源的更改

原始碼管理最基本的級別允許您保留對軟體項目中不同文件所做更改的歷史記錄。

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

我們不會在這裡詳細介紹,但是 您應該知道如何很好地使用至少一個原始碼控制系統,並且您應該熟悉大多數基本的原始碼控制概念。

在當今的軟體開發世界中,幾乎所有專業軟體開發團隊都將使用某種原始碼控制。

構建和部署

如今,大多數軟體開發項目都具有某種自動化的構建和部署系統。

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

您問什麼是構建和部署?

好問題。

好吧,您知道如何編寫該代碼並將其檢入到原始碼控制系統中嗎?

擁有某種方法來確保在籤入代碼後代碼確實有效,這將是一個好主意

這就是構建系統的用武之地。

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

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

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

您不必一定是這些技術的絕對專家,但是 至少了解這些系統的工作原理以及構建和部署代碼的過程非常重要

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

但是,這並不能免除您至少了解此過程如何工作的基礎知識。

測試

過去,開發人員不必對測試了解太多。

過去,我們要編寫一堆代碼,然後「扔到牆上」給一群測試人員,這些測試人員會在我們的代碼中找到各種錯誤,然後修復這些錯誤,僅此而已

不再。

如此眾多的軟體項目採用了所謂的敏捷流程(在使用方法論時,我們將對此進行更多討論),軟體開發人員和測試人員必須 緊密合作。

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

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

您至少應該熟悉一些基本術語,例如:

· 白盒測試

· 黑盒測試

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

· 邊界條件

· 測試自動化

· 驗收測試

一個好的開發人員(我假設您至少希望成為一個好的開發人員)在將其代碼提供給他人之前先進行測試。

如果您真的想被視為專業人士而不僅僅是黑客,那是不容 商量的

調試

嗯,許多新手軟體開發人員的夢想都砸在了調試器的堅石上。

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

但是不是沒有人想要調試他們的代碼嗎?雅聽到我嗎?

雅感覺到我嗎?

真相時間。

您可能需要花費90%的時間作為軟體開發人員來弄清楚 為什麼您的代碼無法正常工作。

我知道這並不迷人。我知道您只想整天編寫新代碼,但是整個世界都無法正常工作。

如果您採用諸如測試驅動開發之類的方法,則可能會在調試器上花費更少的時間,但是無論您做什麼,無論您如何嘗試並解決它, 都必須學習如何調試您的代碼或其他人的代碼

因此,您應該只是硬著頭皮,切實學習如何有效地做到這一點,而不是隨便採取一些您知道 必須要做的事情

在調試一章中,我將詳細介紹這一點,但是到目前為止,您只知道如何做到這一點。

方法論

洗衣清單讓您感到恐懼嗎?

如果不是,這是另外一個-但我保證這是最後一個。

儘管一些軟體開發團隊只是開始編寫代碼並在完成工作後就完成工作,但大多數團隊都有某種至少可以假裝遵循的方法論

因此,至關重要的是,您至少必須熟悉最常見的軟體開發方法背後的一些基本思想。

今天,我要說的是 瀑布式開發敏捷開發

大多數團隊會聲稱他們在做敏捷。敏捷本身是一個非常寬鬆的概念,但是有一些實踐,並且,我敢說,如果您希望能夠講話,可以這麼說並適合加入敏捷團隊,則應該注意一些習慣。

我們將在軟體開發方法論這一章中更深入地討論這一點。

最後,開發這麼多年我也總結了一套學習Java的資料與面試題,如果你在技術上面想提升自己的話,可以關注我,私信發送領取資料或者在評論區留下自己的聯繫方式,有時間記得幫我點下轉發讓跟多的人看到哦。

相關焦點

  • 高級軟體工程師需要具備的專業技能
    隨著我國信息化的不斷發展,網際網路方面人才需求量越來越大,如今很多企業需要掌握Java技術的軟體開發人員,並且只有掌握高級技術的開發程式設計師才能擁有立足之地。那麼學習Java應該掌握哪些高級技術呢?一名高級軟體工程師需要具備哪些能力?
  • 前端Web開發人員應 該具備的十大技能,你掌握了幾個?
    什麼是前端Web開發?前端Web開發是一種通過使用HTML,CSS和JavaScript將數據轉換為圖形界面的實踐,以便用戶可以查看該數據並與之交互。#web前端#前端Web開發是當今技術行業中最需求的技能之一。隨著新技術的創新,該行業不斷變化。
  • 寫作,被開發人員們忽略的最重要技能之一……
    但如果我告訴你,寫作技能對技術人員在職業生涯中取得成功比以往任何時候都重要,您會怎麼想?老闆想讓開發人員具有這一技巧2020年使所有領域都發生了改變,求職市場也受到顛覆。疫情奠定了如今的工作規則和趨勢,遠程工作興起。大多數老闆已經意識到,遠程團隊可以很好地工作,甚至比在辦公室裡更有效率。
  • 大數據開發是做什麼的?需要具備什麼技能?
    大數據開發、數據倉庫、數據安全、數據分析、數據挖掘等都是圍繞大數據的商業價值應運而生。大數據開發主要分為大數據平臺開發(研發級)、大數據應用開發和大數據分析(統計學和機器學習),不同崗位需要面對不同的崗位職責,也需要具備不同的知識結構。大數據開發做什麼?
  • 學習軟體開發技術是否有前景以及需要注意哪些因素
    首先,在當前的網絡化、智能化時代背景下,從事軟體開發工作還是比較有發展前景的,從近些年計算機專業研究生的就業情況來看,不僅崗位選擇空間比較大,整體的薪資待遇也比較可觀,大數據、雲計算、人工智慧等相關方向的畢業生更是如此。
  • 2020年成為數據科學家需要具備哪些技能?
    那麼如今成為數據科學家需要哪些技能呢?本文我們就來帶你了解這一問題。 CDA數據分析師 出品 編譯:Mika「數據科學家」是近年來增長最快的工作之一。這是一個令人興奮的高薪職業,並為你提供了大量的發展機會。而且,由於合格數據科學家的供應尚未趕上巨大的業務需求,因此職位需求仍然很多。
  • 軟體開發需要學什麼?
    很多想學軟體開發的同學都在問學軟體開發需要學什麼,今天小編特意諮詢了北大青鳥信獅教育軟體開發專業的老師,老師是這樣說的:軟體開發目前涵蓋的領域還是比較廣泛的,不同的開發方向需要掌握不同的知識結構,開發環境和設備也有所區別。
  • 軟體測試工程師需要掌握哪些技能
    軟體測試工程師需要掌握哪些技能大家都知道功能測試是測試工程師的基本功,今天就來和大家說說功能測試需要掌握哪些技能...熟練使用SQL1.常用的sql語句一定會寫。比如說增刪改之類。LINUXLinux是測試人員的基本功,不需要掌握太難或者很不常見的Linux命令,正常能做到查看日誌,定位問題就可以了。1.基本命令常用的Linux基本命令,面試經常會問的,或者給出一種場景,問你用什麼命令。
  • [評論]為什麼需要一個對開發人員友好的API
    現今API在軟體開發領域中扮演的角色越來越重要。計算和開發領域的進化在被不斷升級的抽象計算和高級語言主導,但除此以外,也被開發平臺、庫、和架構的發展所推動。Douglass C. Smith 教授在2006年IEEE的報告中指出:後者的進程和發展將超越具體算法語言的發展。
  • 從技術角度剖析西安軟體公司軟體開發管理的短板
    初入軟體開發行業作為程式設計師不太關注集體的力量,更多精力放在自己個人能力的提高上,經過近10年的努力個人能力提高到一定程度後,越來越覺得一個人的力量是非常渺小的,能把更多的人管理好工作效率提高了,日常工作定位、分工合理才能幹大事。
  • 有何作用,成為一名架構師需要具備怎樣的能力?
    在軟體架構師領域中軟體開發設計的架構師,他們負責規劃程序的運行模式,層次結構,調用關係,規划具體的實現技術類型,甚至配合整個團隊做好軟體開發中的項目管理。摩託羅拉說副總裁 Toby Redshaw 說摩託羅拉的副總裁 Toby Redshaw 說,架構師是「IT 策略中的中樞」,而且這一角色對公司的影響確實非常大。
  • 為什麼說寫作技能對於軟體工程師來說很重要?
    >全文共1570字,預計學習時長4分鐘圖源:unsplash我從事軟體開發行業已經有段時間了這種類型的面試無法發現工程師其它的技能——這些技能通常被低估,但是能給團隊帶來很多好處。其中有一項對工程師尤為重要,雖然它常常被忽視。所以它是什麼呢?是寫作技能。我們花了大量的時間來學習如何成為一個更好的編碼員,但沒有將足夠的時間用在寫作和交流上。
  • 學習軟體開發需要準備什麼?
    2020年,隨著Internet的不斷發展,現在Internet已經融入到每個人的生活中,所以在計算機行業的發展中,軟體開發技術就顯得非常重要,因為它是與我們的生活息息相關的,選擇許多人想學習Java軟體開發技術,但是如何做?
  • 軟體工程師除了寫代碼,還能做什麼工作?
    作為一個有技術背景的人,你自然更理解開發人員的思維方式,會比傳統的營銷人員有更大的優勢。 SlashData 發布了很多關於開發者營銷的內容,包括在 2018 年就這一主題出版的一本書。如果你想在這個領域起步,可以學習一下網絡營銷:SEO、社交媒體、內容營銷、影響者營銷,等等。你可以在你的博客上練習這些技能,在應聘崗位之前先把自己的能力展示出來。
  • Android惡意軟體開發的新技術 | 360惡意軟體專題報告
    從惡意軟體開發技術角度看, 2016年惡意軟體利用社會工程學、界面劫持、破解接口、開源項目、簡易開發工具、碎片化代碼、注入系統根進程、篡改系統引導區以及代理反彈技術,成為主要使用的新技術。四、開發工具(一) 簡易開發工具被廣泛應用AIDE是Android環境下的開發工具,這種開發工具不需要藉助電腦,只需要在手機上操作
  • Android惡意軟體開發的新技術|360惡意軟體專題報告
    釣魚軟體、勒索軟體、色情播放器軟體、頑固木馬成為2016年流行的惡意軟體。從惡意軟體開發技術角度看, 2016年惡意軟體利用社會工程學、界面劫持、破解接口、開源項目、簡易開發工具、碎片化代碼、注入系統根進程、篡改系統引導區以及代理反彈技術,成為主要使用的新技術。
  • 每個業務分析專家應具備的9個關鍵技能
    本文為大家介紹了每個業務分析專家應具備的9個關鍵技能,並對每個技能做了簡單的介紹。在以下各節中,我們將介紹成為一個業務分析專家(BAP)應具備的關鍵技能。業務分析專家所需的技術技能讓我們看看成為優秀的業務分析專家所需的技術和理論技能。A) 概率和統計通過概率和統計可以更好地理解數字,回答一些相關性假設並且做出更好的預測。
  • 華為軟體開發雲釋放莫比嗨客開發潛能
    「華為軟體開發雲一體化的代碼編輯、託管、編譯、部署、維護、任務的分配、OA功能令莫比嗨客印象深刻,而這些對於像莫比嗨客這樣一方面需要節省成本,另一方面又需要快速產出產品的小微企業會很有幫助,同時,對於強調創新和實用的高校教育也會很有益處,因此,華為軟體開發雲可以說是軟體領域貼心的管家。
  • 2020年蘇州大學應用技術學院實驗技術人員招聘公告
    江蘇公務員考試網現將其公布如下:   2020年秋季實驗技術人員招聘公告   蘇州大學應用技術學院因工作及發展需要,現面向社會招聘實驗技術人員。具體招聘事項公告如下:   一、招聘基本要求:   1.熱愛教育事業,教育背景、知識結構、研究方向符合實驗技術人員要求,具備從事高等學校實驗技術相關工作的能力。具有團隊合作精神和良好的職業道德、師德師風,認同學院文化及辦學理念,個人綜合素質符合高校實驗技術人員任職基本條件,身心健康。   2. 學歷要求:已取得全日制本科及以上學歷。
  • 軟體開發流程的6個步驟是什麼?怎樣繪製軟體開發流程圖?
    軟體開發流程圖的8個步驟是什麼?怎樣繪製流程圖?大家可能見過各種各樣的軟體,這個軟體有哪些功能,哪個軟體什麼地方比較好用。這些都是我們的用戶體驗,那麼大家知道軟體開發流程的步驟有什麼,又該怎樣在電腦上繪製軟體開發流程圖嗎?今天小編給大家分享一下。