<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                第三節、技能的延伸與總結 在前面講的幾個方向中,我們是從專業化工種的角度來對所學習的方向進行了劃分,但是實際上,在學習一個方向時,不可避免,會從兩個角度來延伸所學的東西。即使在同一段時間,我們專注于一個技術方向上,但是隨著技術發展,項目的進展或者我們自身的成長,也會了解得越來越多,所以對于工作多年的程序員而言,學習多種技術,不是被迫,而是自然而然的結果,下面我們來稍加展開來描述。 一個方向就是本身技術鏈條上的加深,指的是你做的這一行,會牽涉到開發的上下游關系,如果你不想有所作為的話,也可以只專注在手上的那點事情,完成工作就 OK 了,但是這對個人的成長是不利的,你應該沿著上下游戲去了解更多的技術,加深對業務的鞏固和了解。 比如 PHP 開發程序員,做到了兩到三年,必然就面臨著一個新的提升,你如何完成這個提升,需要學習的內容就不僅僅再學一個框架,學會使用 PHP 技術做數據庫增刪改查的問題了。而是你需要去考慮 PHP 本身在大項目中,代碼組織如何更為優雅,如果考慮使用設計模式等技術,讓代碼本身也更加的規整和漂亮,同時性能也更優化。比如對數據庫的了解除了熟練編寫 SQL 語句之外,可能還需要加上運維的環節,除了程序本身的部署之外,還需要加上數據庫的優化,甚至是結合其他技術來提升整個系統的效率。比如我們可能需要用到 Memcached 來做緩存,需要用到 APC 來做 OpCode 優化,需要用到 Redis 或者 MongoDB 來存儲非傳統的關系型數據,需要用到全文檢索等分離服務,減輕數據庫的壓力。只有經過這樣的一個環節的進步,你的開發水平,才能由一個普通的開發人員,往高級甚至資深的開發人員邁進,否則,可能永遠只是一個搬磚的碼農。到這里我想起了筆者曾經在講座上做過一個調查,就是在場的朋友們,有多少人認為編程是一碗青春飯?有多少人認為編程到了一定程度就去轉管理?不出所料,在場舉手的人數在1/3到1/2,在場的還都是有一定工作經驗的程序員,如果要是小白或者大學生,這個舉手比例也許會更高。這就是對程序員生涯的一種理解問題。筆者認為,如果我們在學習一個職業方向之后,不去持續學習和做技能的延伸學習,比如學習了 PHP 之后,做的就是簡單業務開發和增刪改查的工作,那編程就是一碗青春飯,因為你做到了 30 歲,還在做增刪改查,你不見得做得過初出茅廬的小伙子。工資還比他們高,公司不淘汰你淘汰誰呢?但是像上面所說,你在技術的鏈條上,越鉆越深,那編程就不是一碗青春飯。至于編程轉管理,更是一個偽命題,首先管理者始終是少數,其次,在編程這一行當,做管理的前提是技術牛,如果技術不行,做了管理,也做不好,是服不了眾的。 言歸正傳,這些高級內容的進步和學習,也是基于你有良好的基本功之上的,比如你連基本的增刪改查都沒有利索,就去追求一些高級的名詞和技術,這會讓你的高塔起于浮沙之上,這是相當危險的。除了技術上的提升之外,作為程序員,在本身鏈條上的延伸,還包括一些軟性的東西,比如項目管理,比如對業務的分析和組織能力,這些能力也將決定你的高度,如果是資深碼農,可能不需要這種能力,但是要作主管或者架構師,業務能力就是必須的了。 二是技術棧上的延伸 技術棧是指完成一件事情所需要的技術,這里分別以移動端應用開發和 Web 前端舉例來進行說明。移動應用開發,相對所需要的技術是比較少的,Java 或者 Swift 語言,然后就是控件庫、網絡庫、第三方庫等,構成了移動應用。但是一方面為了更好地同項目團隊的成員溝通,一方面也為了了解整個項目的運行。所學的東西,就可以移動應用開發為基準點來向后延伸。對 HTTP 協議的了解是第一層次的,更多的包括各種云服務的使用,對于即時通信的部分,使用 HTTP 協議,還是用 WebSocket 協議來建立通信機制,API 的開發和設計規范、實現等也值得去了解。那個這種延伸學習方式就與第一種不同,是完成一件事情在技術棧上的延伸,從移動應用前端延伸到相關的 API 和協議,再從協議延伸到后端技術,甚至從后端技術延伸到后端架構,形成了完整的這樣一個技術棧,就達到了所謂全棧工程師的境界。 技術棧的延伸并不簡單,這意味著要學習更多的技術、軟件,也需要學習新的編程語言。但是對于 Web 前端的開發人員,這種延伸相對更加容易,因為 JavaScript 也能應用在后端開發中。這就是著名的 Node.js。作為 Web 前端的開發人員,前端的學習已經很不簡單,各種瀏覽器兼容、庫、響應式設計、動畫特效設計等。與此同時,前端開發人員還需要了解如何同后端進行數據通信,包手 Socket.io 這種通信方式也包括 Ajax 這種方式,無論那種,前端人員都可以也應該了解后端是如何實現的,進一步就可以了解后端應用和后端 API 的開發,簡單地講,就是 Node.js 后端應用的開發,學習 Node.js,畢竟比學習一門全新的語言,比如 PHP 成本更低。學習 Node.js 就需要了解異步機制、事件模型、模板引擎、數據庫等技術。前后結合,無論是對開發的認識,還是開發水平,都會提升到一個新的層次。在前端優化準則,像緩存、etags、BigPipe 等技術,都是需要前后端結合了解的。 三是技術廣度上的延伸 在學習同一門技術時,我們不能僅限于眼下的技術,以此為專業的同時,還需要站在更高的角度看問題。比如移動互聯網客戶端開發技術,客戶端應用的開發也分成了幾個方向和開發手段,以平臺為例,有 iOS、Android、Windows Phone 方向,比跨平臺性為例,有跨平臺的 HTML5 WebApp 包裝、有 Adode Air 的開發模式、也有跨平臺的原生技術,如 Xamarin,在 2015 年,Facebook 還推出了React Native 技術,讓我們能使用 JavaScript 實現原生移動應用開發。從開發模式上看,也有純 WebApp 模式、Cordova 混合開發模式和原生開發模式。盡管我們可能只是從事其中的一方面,但是對其他的了解和關注,也是非常必要的。這里有一種心態,我建議大家慎重對待。筆者相對是比較快接受 Swift 從事 iOS 開發的,但是在同一些經驗相對豐富的 iOS 人員交流的時候,他們對此不屑一顧,認為 Swift 目前還遠遠沒有完善,只是玩具。如果這種心態對待 Swift ,我想是不正確的。任何新事物剛剛出現的時候都是比較弱小的,但是不妨礙它已經能適合生產使用,對開發人員更友好,提高開發效率。這也是我推崇在技術的學習上一定要延伸的原因。 四是萬變不離其宗 對于各個方向延伸的表述,我并沒有針對一個方向一個方向地展開來講,因為一句話,萬變不離其宗。這句話有三層含義: 一是上面分別對于特定技術的延伸的這些描述,放到其他方向上也是適用的,無論你學哪個語言作為后端,或者是前端還是移動端開發,緩存、效率、優化,這些名詞都是成為高手的必經之路。而項目管理和業務分析技能更是和使用何種技術沒有關系。 另一層含義是學習看起來這么多方向和各種語言,其實核心和精髓都是一致的,這也是很多高手,為什么半天就能學會一門編程語言,一個周末就能開發出應用來的原因,筆者當初就用了一個周末學習了 Swift 語言,并成功地開發出 Swift 2048 這樣就小游戲,同時在周一的時候,就錄制成視頻課程。為什么會這么塊?因為技術太相通了。學過了 C、C++、Java、PHP 等語言之后,面對新的 Swift,只需要去了解一些不同的新概念,然后輔助以實例。而不需要一點點地從頭學起。所有的語言無外乎都是這樣的一個套路。 1、變量、常量定義、數據類型等基本語法,再加上順序、條件、循環等結構,然后進行函數、面向對象的環節,而面向對象又是封裝、繼承、多態、重載、覆蓋、抽象、靜態等術語不同的實現。 2、了解完這些,基本語法就差不多了,我們就進入函數庫的環節,無非就是輸入、輸出、文件、多線程、時間、日期、網絡等庫和內容需要了解。 3、如果是有界面開發的,無論是 C# 的 Windows Form、還是 Java 的 AWT、Swing 還是 Android 的 View、iOS 的 UIKit,都是相通的。甚至操作方式都相通。 第三層含義,那些基礎和核心的東西,包括操作系統原理、計算機組成、網絡原理,尤其是數據結構、算法,這是我們做一切程序開發的基本,這些東西的厚度和我們的努力程度決定你在計算機編程行業的高度和深度。尤其是從別的專業轉行到計算機編程行業的童鞋,這一塊是比較薄弱的,無論如何一定要補上基礎的部分。這才是“萬變不離其宗”的那個真正的宗。 總結來看,即使延伸,我們看到的也是有依據的延伸,不是今天學這個,明天學那個。同時學東西要抓住核心和本質的內容,然后重點關注不同,這樣學起東西來才快。 第四節、全棧工程師與架構師 經過了方向的學習和技能延伸的學習,就可以討論兩個更為高級的技術方向了。當技術棧在一個方向上延伸,同時在技術棧上有一定積累的時候,實現了一專多能,就可以說是全棧工程師了。那到底什么是全棧工程師,全棧工程師好還是不好,也是眾所紛紜。 跟谷歌所倡導的“創意型人才”類似,全棧工程師是Facebook 所首倡的人才標準。筆者也有幸同Facebook的早期技術專家蔣長浩和魏小亮有過近距離的交流,了解到Facebook在招人時,招進來的往往是應屆生,并且不限崗位,而是用新兵訓練營類似的機制發現和選拔人才,并且工程師文化決定了工程師的話語權和相當的工作自由度,導致了人的能力相對全面和從事項目的多樣性。至于具體定義下來,什么是全棧工程師,作為國內第一家倡導全棧工程師培訓的企業,優才學院自己的看法如下: 全棧工程師(Full Stack Engineer 或 Full Stack Developer),又名全端工程師,是對軟件開發人員的一種定義,主要指那些掌握多種技能,并能利用多種技能獨立解決各種問題的人才。作為優秀人才的全棧工程師,滿足以下四點要求。 * 技術全面 作為全棧工程師,其技術當然要比較全面。從前端到后端、從運維到優化、從PC到移動,都難不倒,即使暫時不會,也能夠通過短暫的時間學習能攻克難關。 但又有自己比較精通的一方面。也就是說作為全棧工程師既要有專深,同樣也要有廣博,這樣才能在解決問題時不受局限,融會貫通,但是又不能什么都會,什么都不精,因為這樣,他的職業價值就不存在。 * 思維心態 全棧工程師以積極主動的姿態來面對和解決工作中的問題。以全局的觀點來看待自己所從事的項目, 而不只是自己負責的一小部分。以做成產品、做成一件事的觀點來看待整個開發流程,而不僅僅是技術實現。 因為只能這樣的心態和觀點,他才會積極主動地去學習其他技術,用其他技術解決問題。否則可能就會局限在自己的技術和工作范圍中,不會用心努力地學習更多的技術,用更多的方法來解決問題。 * 上升能力 全棧工程師并不意味著全能,什么都會。但是全棧工程師有良好的基礎技能。 這個技能,既包括計算機科學的基礎,也包括英語基礎,有了這個基礎, 加上積極的態度,開放的心胸,就能快速地學習所需要的技術,比如像Swift語言,那都不是事兒。 并應用在所需要的開發工作中,上升能力說到底是一種持續積累形成的學習能力。 * 職業價值 Facebook說,他們只喜歡全棧工程師,創業公司說,我們需要全棧工程師。無論是在大公司,還是創業公司, 全棧工程師都將成為搶手人才!那是因為,全棧工程師不但技能全面,而且心態積極,學習能力強!所以全棧工程師有很好的工作前景。筆者常舉的一個例子是,有一個朋友,是做PHP的,曾經在騰訊做微博產品,在騰訊這樣基礎設施完善的公司,其實做產品開發是很幸福的,難度也不大,因為只需要調 API,寫業務邏輯就OK了。但是當他升T3.1的時候,公司還是考核了很多架構方面的能力,這就是說,大公司的資深工程師,也必須是全棧工程師。 我們認為,全棧工程師不是所有的技術都會,才叫全棧工程師,在技術棧上一專多能就可能稱為全棧工程師,所以優才把全棧工程師也按 Web、JS、Android、iOS 方向進行區分,但是在課程體系的設計上,在相應的方向上進行技術棧的延伸。比如 Web 全棧方向上以 PHP 為主要語言基礎,會對 HTML、CSS、JavaScript 等基本開發功底進行提升訓練,同時會從 PHP 延展到數據庫的優化、分布式系統和運維相關的內容。對于 JS 方向,則除了瀏覽器端和移動端前端的學習之外,也會去了解 HTTP 協議以及后端 API 服務等的開發,會從 Node.js 和 PHP 這些方向去延展 JS 學習的視野,而不僅僅局限在瀏覽器上,當然到了現在這個時代,混合式開發和 React Native 等原生開發技術,也成為 JS 全棧學習的重要內容。Android 和 iOS 同前端開發有些類似,除了應用端業務邏輯的的開發之外,也會去了解后端的內容和跨平臺開發的內容。在業務技能之外,優才也會重視基本功的訓練和學習,比如特有的OnlineJudge 系統,讓學員可以進行算法提升的訓練,讓其具備一個扎實的工程師基礎,尤其是一個全棧工程師的基礎。 至于架構師,是全棧工程師發展的下一層境界。對于全棧工程師的要求更多的是在技能的層面。而架構師的要求則上升到一個統籌的層面。我們從做事的層面也分析一下工程師和架構師有何不同。 工程師,由于專注技能,往往是指功能開發和需求實現,而這種實現也是強調局部或者一個版塊的。比如前端工程師負責瀏覽器或者移動端的實現,后端工程師負責服務器端邏輯的實現,即使全棧工程師,也不過是一個人既實現了前端和實現了后端罷了。那么架構師呢?他的側重點,除了能參與編寫整個項目的一部分核心代碼之外,更需要理解整個產品的業務結構,從而對項目版塊的切分、技術人員的安排、服務器的規劃部署、關鍵技術的選型、技術方案設計有相當的研究,從而使整個產品開發,走在順利的路上,使項目的生產運營也穩定快速,在重要技術的使用上,也少一些坑,從而降低項目風險。在互聯網團隊中,項目周期等管理的角色,往往由產品經理來主導,而技術經理的角色往往在于技術人員的分工協調和難題解決,架構師的角色,則為整個項目的開發,提供了強大的技術支持和起到了主心骨的角色。架構師由于在資源有限的環境下規劃項目資源的使用,所以常見的看法是架構師在項目中往往起到妥協和平衡的作用。要么空間換時間,要么時間換空間,要么體驗換速度,要么速度換體驗,當然這個置換下來的體驗也是產品經理能接受,用戶不易察覺的體驗。有關如何成為架構師,如何做好一名優秀的架構師,已經脫離了本書的討論范疇,這里也不再展開敘述,只想送給大家一句,架構師,應該是任何一個想在技術上有所成就的程序員所追求的目標,而不僅僅是全棧工程師。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看