回覆列表
  • 1 # 湖北濤哥

    一名優秀的前端工程師應該具備以下技能,看看你是否符合吧!

    【必備】

    PhotoShop/Fireworks Design

    配合美工將草圖形成具體的符合WebPage的設計

    有快速製作分層高品質PSD、PNG的能力

    能迅速將PSD、PNG的內容構思成div+css或者table等HTML程式碼

    Flash Design

    基本動畫效果

    複雜的互動體系設計,瞭解第三方swf輔助設計軟體

    複雜的互動體系設計以及較強的對各類外埠資源(PNG、JPG、MP3、WAV等)的整合能力。精通部分第三方輔助設計軟體(AE、SwishMax、Swift3D等)

    【必備】

    XHTML/CSS

    基本的layout實現

    嚴格跨平臺的layout實現以

    優雅的HTML code,儘可能符合標準並有SEO的考慮因素。在任何平臺、瀏覽器下基本保持一致。不要求瞭解各種CSS的hacks,但要求知道遇到問題應該如何查閱資料以在第一時間內解決。能夠為JavaScript開發人員提供最好操作的DOM結構,讓JS開發人員在開發的時候認為”一切都已經準備就緒了”,而不是”捉襟見肘”。

    JavaScript/Ajax/DOM

    基本的DOM操作,瞭解AJAX,可以實現資料通訊

    基本的DOM操作,能寫高效率的OOP程式碼,以降低維護成本

    基於需求,進行不同的開發,選擇合適的框架,做到程式碼效率最高,使用者體驗最好,程式碼下載量最小,並且可以在單獨甚至更多產品線中最大限度重用程式碼

    Flash Developement

    基於Timeline的ActionScript操作,能實現簡單互動

    掌握a外,能實現資料層通訊(與伺服器以及本地SharedObject)

    精通AS1-3,能根據需求進行各類RIA開發。無論是要求支援FlashPlayer8的,還是FlashPlayer9的,都能做到開發效率最高、靈活性最大(比如對HTML層的介面設計,等等)。

    【必備】

    Apollo

    產品級的封裝,基本技術瞭解(如何打包、如何加入HTML和JavaScript等)

    掌握a的同時,能利用Apollo的API獨立設計、開發OS的檔案I/O功能。

    掌握基本技能的同時,對”3D概念體系”有所認知。這裡”3D”即:Design(設計)、Development(開發)、Deploy(產品部署)。能用Apollo

    Windows Presentation Foundation、WPF/E(Silverlight)

    等等(這只是部分)

    總結:可以不瞭解技術細節,但應該知道原理,最好能掌握一兩套設計思想(畢竟資料邏輯都在這裡走,光看HTML和JavaScript,對人的見識還是有侷限的,這種侷限限制了我自己很久的時間),那將是一比寶貴的財富。

  • 2 # 聆聽ye雨

    我認為是具有思考習慣的人。工作中一定會遇到問題,碰到過很多人說這樣寫不行我換另外一種寫法就OK瞭然後就不管了,但是不會去想為什麼這樣就可以或者那樣就不可以,前端的庫都是開源的,某些瀏覽器的程式碼也是開源的,當然99%的問題壓根都追溯不到瀏覽器實現那層,可是你要說連jQuery的外掛的程式碼你都懶得看一看,找找問題出在哪

  • 3 # IT極客老兵

    作為一個前端工程師,我認為最重要的能力就是自學能力:

    一、前端技術日新月異

    前端技術發展非常迅速,之前後端工程師會點html、JavaScript和JSP也可以做前端,現在前端技術進步太快,包括前端框架如:AngularJs、React和Vue等框架技術層出不窮,甚至出現了可以取代後端的nodejs技術,讓你只要會JavaScript就可以做後端的事。

    二、前後端分離導致專業度更高

    目前我們基本上都採用前後端分離的開發模式,導致專業度更高,就要求你的自學能力更強,否則無法鑽研的更深入,而最新的資料都在國外的一些開源專案網站上,如果GitHub上,如果你不去經常學習,只能浮在表面上,無法更進一步。

    三、全棧工程師是未來趨勢

    全棧工程師將是未來的趨勢,這要求你除了學習前端技術,還要學習後端技術,這麼多技術要學習,沒有過硬的學習能力是辦不到的。

  • 4 # 北京華億神州

    手機響了,是一個實施工程師打過來的,說現場的資料採集不上來,問怎麼解決。我問軟體的版本,儀器的型號,作業系統的資訊,具體的問題描述。我告訴他可能是什麼原因,給了一個解決辦法,讓他嘗試一下。

    他試了一下後,說還是不行,又問怎麼辦,於是我又給他一個辦法,他又去嘗試了,反饋回來說還是不行,又問我怎麼辦。我然後我又給他提供方案,繼續解決……終於解決了。

    這種場景不是一次兩次了,也不是一個人兩個人用這樣的方式解決問題了。實際上,問題並不複雜,有些甚至很簡單,簡單到只需要把重啟一下軟體就可解決的地步。

    但是,很多人依然不知道怎樣解決問題。類似的情況還包括開發人員在程式設計遇到bug的時候,無法獨立搞定,也一直問同事該怎麼解決。

    我們部門有個架構師,他一直從事的是c++語言的開發工作,幾乎c++任何方面的疑難問題他都能很快解決。

    專案上需要使用移動應用、大資料技術、java、js、python等不同開發語言開發時,他也能從頭很快學起,為大家指明方向,搭建框架,遇到新問題,總能找到解決辦法將問題解決,保證了專案的進度和質量。

    我時常想為什麼出現這種現象?工程師最重要的能力是什麼?我認為是解決問題的能力。能夠獨立、快速、有效的解決問題,是起碼是一個優秀工程師必須具備的能力之一。

    具備解決問題的能力的人自然擁有了一項自己的核心競爭力。他人解決不了的問題,你能解決;他人擺不平的事情,你能擺平;他人搞不定的麻煩,你能搞定。

    遇到加薪升職的事情,哪個老闆不得想著你?想起一句話,越想越有道理:“搞定就是穩定,擺平就是水平”。

    如何培養解決問題的能力呢?這個話題可能有些大,我想到以下幾點:

    1、首先要有責任心,把心態擺正,把這個問題當成自己要獨立處理的問題,不要總覺得有靠山、有退路。

    我清楚得記得有個實施工程師,在現場給同事打電話,說裝置的資料採集不上來。後來同事問了一下,原因是採集資料的軟體沒有安裝。這真是讓人哭笑不得。

    就像一個人買了輛汽車,給銷售打電話說汽車怎麼踩油門也不動,原因是汽車沒有插入鑰匙發動起來一樣。稍微有一點知識,用腦筋想一想,就不用出現這種低階的笑話。

    如果總覺得這個事情即使你不做,也會有人做,來幫你做,那麼,就容易出現懶惰現象,往床上一躺,打個電話,讓他人解決,自己在那裡睡覺。這種狀態是不可能有任何解決問題的能力培養出來的。

    只有把事情當成自己的事情,自己要面對和解決的問題,才能踏下心來想怎麼解決這個問題,才有可能自己獨立解決這個問題,才有可能透過解決這個問題,積累類似的解決問題的經驗和教訓。否則,永遠處於0的狀態,不會有任何進步。

    2、需要儲備一定的知識和技能。這是前提。老闆也不會安排一個廚師去給客人理髮。所有安排給你的任務,大機率是在你從事的相關技能領域內,至少能沾點邊。

    一個工程師總得有一點是自己擅長的,熟悉的。這個技能或者特長,需要一定時間的積累,例如上大學所學的專業或者參加某個知識培訓班而掌握的。

    學到了知識,掌握了技能,就具備瞭解決這個領域內的問題的基本前提。有了這個前提,一個工程師才有能力解決某個具體問題。如果你還不具備這個前提,可以現在就開始學習了。

    3、深耕你的技能。具備了一定的技能,是能夠解決一些常見的問題了,但是想要解決更多更復雜的問題,則需要更高深的專業技能。這就是高手和牛人的要求了,想成為高手,必不可少的要花費更多的時間和精力去提升技能。

    "一萬小時理論"闡述了一個人要想成為某方面的專家,就需要一萬個小時的積累。這或許沒有什麼捷徑可以走,但要掌握好解決問題的技能,總會有一些好的方法,能夠加速掌握技能的時間。

    就像學生時代有的同學掌握了適合自己的學習方法,就達到了事半功倍的效果。好的方法是需要自己多思考多揣摩多實踐,慢慢總結出來的一個套路,這就需要平時多學多練。總之,你得先付出,並且在付出努力的過程中,不斷總結提煉,才能把你的技能練得爐火純青。

    4、形成解決問題的思維和方法。具備了深厚的技術技能,由於一個人的精力有限,也往往是某一方面的。

    當問題的發生超出了一個人所熟知的技術領域時,就需要具備一定的解決問題的思維和方法,才能進一步解決問題。

    例如,一個實施工程師如果只是對所實施的軟體瞭如指掌,而對現場的計算機網路、資料庫等一無所知的話,他還是解決不了最終的問題。

    所以,他需要一個全域性性的視野,與問題相關的方方面面,他都要有所瞭解,才能綜合分析出問題的根源所在,進而找到解決問題的方法。

    解決問題的思維包括解決問題的步驟,第一步做什麼,第二步做什麼,問題之間的關聯,如果第一步怎麼樣了,那麼第二步應該做什麼。

    具備瞭解決問題的思維和方法,即使缺少相應的某一方面的技能,也能透過學習使其具備一定的臨時性的技能,從而推進解決問題的進度。

    在解決問題時,注意最好多想一步,敢於突破自己的極限,要相信自己的潛力。

    5、善於總結,形成知識庫。解決完一個問題後,要注意進行總結,最好記錄下來。

    雖然最終還是解決了,但還是浪費了不少時間。如果在解決問題過後,及時記錄下解決的方法和步驟,再次遇到同樣的問題時,就能很快將其解決掉,這麼一來,省下的時間都是自己的。

    這有點像學生時代的“錯題本”,有時一道題做錯了,下次遇到的時候,還可能犯錯。因為這正是一個學生掌握不好的地方,知識薄弱的地方。有了“錯題本”,針對錯誤的題目加深印象,學習時多關注一些,再遇到類似的題目時,就變成了熟悉的知識了,也就不容易錯了。

    隨著解決的問題越來越多,自己形成的知識庫越來越龐大,工程師的能力自然越來越強。

    如何增強解決問題的能力,還有很多途徑和方法,條條大路通羅馬,只要認真對待問題,相信那句話:世上無難事,只怕有心人。

  • 5 # 愛覺隔壁小王

    網站上提供的產品和服務實現一流的Web介面,最佳化程式碼並保持良好相容性;

    Web前端表現層及與前後端互動的架構設計和開發;

    JavaScript程式模組開發,通用類庫、框架編寫;

    利用各種Web技術模擬開發產品原型;

    配合後臺開發人員實現產品介面和功能;

    Web新技術調研和資訊整理;

    精通HTML/XHTML、CSS,熟悉頁面架構和佈局,精通Ajax、JavaScript、DOM等前端技術,掌握面向物件程式設計思想;

    熟悉一種以上後臺開發語言(如PHP/Java以及一種資料庫(如MySQL/Oracle)。

  • 6 # 君胖叨叨叨

    自學能力

    現在科技,日新月異的,各種技術更新迭代快,彷彿一不留神就Out了,所以要緊跟時代前沿技術。

    要掌握新技術,新發展,就應該有較好的學習能力。

    1、首先制定學習計劃(學習時間、學習方向)

    2、學習的途徑(網路自學、接受線上課程、線下學習)

    3、學習實踐(學以致用才為有用)

    領悟與創新能力

    1、學習只是一個準備,學會了學要加入自己的理解。

    2、為技術發展而做貢獻。

    全棧工程師發展

    技術可以只精一面,但要觸類旁通,只是涉獵要廣些。

    以便日後發展與提升空間更大。

    預祝你早日成為吧

  • 7 # 北辰郊野公園

    前端開發是建立Web頁面或app等前端介面呈現給使用者的過程,透過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現網際網路產品的使用者介面互動[1]。它從網頁製作演變而來,名稱上有很明顯的時代特徵。在網際網路的演化程序中,網頁製作是Web1.0時代的產物,早期網站主要內容都是靜態,以圖片和文字為主,使用者使用網站的行為也以瀏覽為主。隨著網際網路技術的發展和HTML5、CSS3的應用,現代網頁更加美觀,互動效果顯著,功能更加強大。[2]

    移動網際網路帶來了大量高效能的移動終端裝置以及快速的無線網路,HTML5,node.jS的廣泛應用,各類框架類庫層出不窮。[1]

    中文名

    Web前端開發

    外文名

    Web front-end development

    主要技術

    HTML、CSS、JS、jQuery等[2]

    主流框架技術

    Vue.js、AngularJS、React等[2]

    應用領域

    網站、小程式、Webapp開發等[2]

    發展歷程

    前端技術的發展是網際網路自身發展變化的一個縮影。

    前端技術指透過瀏覽器到使用者端計算機的統稱,存貯於伺服器端的統稱為後端技術。

    前端開發主要職能就是把網站的介面更好地呈現給使用者。

    以前會Photoshop和Dreamweaver就可以製作網頁,隨著網站開發難度加大、開發方式多樣,網頁製作更接近傳統的網站後臺開發,網頁製作更多被稱為Web前端開發。前端技術包括4個部分:前端美工、瀏覽器相容、CSS、HTML“傳統”技術與Adobe AIR、Google Gears,以及概念性較強的互動式設計,藝術性較強的視覺設計等。

    在Web1.0時代,由於網速和終端能力的限制,大部分網站只能呈現簡單的圖文資訊,並不能滿足使用者在介面上的需求,對介面技術的要求也不高。隨著硬體的完善、高效能瀏覽器的出現和寬頻的普及,技術可以在使用者體驗方面實現更多種可能,前端技術領域迸發出旺盛的生命力。

    2005年以後,網際網路進入Web2.0時代,各種類似桌面軟體的Web應用大量湧現,前端由此發生了翻天覆地的變化。網頁不再只是承載單一的文字和圖片,各種富媒體讓網頁的內容更加生動,網頁上軟體化的互動形式為使用者提供了更好的使用體驗,這些都是基於前端技術實現的。

    隨著手機成為人們生活中不可或缺的一部分,成為人們身體的延伸,人們迎來了體驗為王的時代。移動端的前端技術開發前景寬闊。此外,前端技術還能應用於智慧電視、智慧手錶甚至人工智慧領域。[1]

    核心技術

    HTML語言

    掌握HTML是網頁的核心,是一種製作全球資訊網頁面的標準語言,是全球資訊網瀏覽器使用的一種語言,它消除了不同計算機之間資訊交流的障礙。因此,它是網路上應用最為廣泛的語言,也是構成網頁文件的主要語言,學好HTML是成為Web開發人員的基本條件。

    HTML是一種標記語言,能夠實現Web頁面並在瀏覽器中顯示。HTML5作為HTML的最新版本,引入了多項新技術,大大增強了對於應用的支援能力,使得Web技術不再侷限於呈現網頁內容。

    隨著CSS、JavaScript、Flash等技術的發展,Web對於應用的處理能力逐漸增強,使用者瀏覽網頁的體驗已經有了較大的改善。不過HTML5中的幾項新技術實現了質的突破,使得Web技術首次被認為能夠接近於本地原生應用技術,開發Web應用真正成為開發者的一個選擇。

    HTML5可以使開發者的工作大大簡化,理論上單次開發就可以在不同平臺藉助瀏覽器執行,降低開發的成本,這也是產業界普遍認為HTML5技術的主要優點之一。AppMobi、摩托羅拉、Sencha、Appcelerator等公司均已推出了較為成熟的開發工具,支援HTML5應用的發展。[3]

    CSS

    學好CSS是網頁外觀的重要一點,CSS可以幫助把網頁外觀做得更加美觀。

    JavaScript

    學習JavaScript的基本語法,以及如何使用JavaScript程式設計將會提高開發人員的個人技能。

    作業系統

    瞭解Unix和Linux的基本知識,對於開發人員有益無害。

    網路伺服器

    瞭解Web伺服器,包括對Apache的基本配置,htaccess配置技巧的掌握等。

      

    最佳化

    儘量減少HTTP請求 (Make Fewer HTTP Requests)

    減少DNS 查詢 (Reduce DNS Lookups)

    避免重定向 (Avoid Redirects)

    使得 Ajax 可快取 (Make Ajax Cacheable)

    延遲載入元件 (Post-load Components)

    預載入元件 (Preload Components)

    減少DOM元素數量 (Reduce the Number of DOM Elements)

    切分元件到多個域 (Split Components Across Domains)

    最小化iframe的數量 (Minimize the Number of iframes)

    杜絕 http404錯誤 (No 404s)

    以上10條涵蓋了Web前端開發中遇到的各種頁面處理技術,讓前端開發人員能夠準確和快速地把握整個網頁的架構,從而達到減少開發成本和頁面美化目的。

    前端框架

    學好Web框架

    熟悉掌握HTML、伺服器端指令碼語言、CSS和JavaScript之後,學習Web框架可以加快Web開發速度,節約時間。PHP程式設計師可選的框架包括CakePHP、CodeIgniter、Zend等,Python程式設計師喜歡使用Django和 webpy,Ruby程式設計師常用RoR。

    隨著Web 越來越規範和標準的統一,Web元件化技術不斷革新,移動端開發不斷昇華,以下是一些常見開源前端框架:

    Bootstrap

    主流框架之一,Bootstrap 是基於 HTML、CSS、JavaScript的,它簡潔靈活,使得 Web 開發更加快捷。

    html5-boilerplate

    該框架可以快速構建健壯,且適應力強的web app或網站。

    Meteor

    Meteor是新一代的開發即時web應用的開源框架,它能在較短時間內完成開發。

    Semantic UI

    基於自然語言有效原則的UI元件框架

    Foundation

    優秀的響應式前端框架

    Materialize

    基於材料設計的現代化響應式前端框架。可提供預設的樣式,自定義元件。此外,Materialize還改進動畫和過渡,為開發人員提供流暢的體驗。

    Pure

    幾乎可以在每一個web專案中使用的一組小的和響應式的CSS模組。

    Vue

    Vue.js 是用於構建互動式的 Web 介面的庫。它提供了 MVVM 資料繫結和一個可組合的元件系統,具有簡單、靈活的 API。

    Skeleton

    Skeleton 是一個小的 JS 和 CSS 檔案的集合,可快速開發漂亮的網站,適合各種螢幕裝置包括手機。Skeleton 基於 960 grid 開發。它是一個 UI 框架。

    Amaze UI

    國內首個開源HTML5跨屏前端框架產品系列,中文排版支援更優、本土化元件豐富。該產品系列中有專門針對移動端的HTML5混合應用開發框架Amaze UI Touch以及針對跨屏HTML5網頁開發的Amaze UI Web。其中,Amaze UI Touch可以幫助開發者透過豐富的元件,快速構建出與原生APP相媲美的專屬移動端的HTML5應用。

    UIkit

    一個輕量級的和模組化的前端框架,用於快速開發和功能強大的web介面。

    Yui

    Yahoo! UI Library (YUI) 是一個開放原始碼的 JavaScript 函式庫,為了能建立一個高互動的網頁,它採用了AJAX, DHTML 和 DOM 等程式碼技術。它也包含了許多 CSS 資源。使用授權為 BSD許可證。

    kissy

    一款跨終端、模組化、高效能、使用簡單的 JavaScript 框架。

    MUI

    最接近原生App體驗的前端框架的框架。

    Arale

    一個開放、簡單、易用的前端基礎類庫。

    JX

    JX 是模組化的非侵入式Web前端框架,特別適合構建和組織大規模、工業級的Web App。

    GMU

    GMU是基於zepto的mobile UI元件庫,提供webapp、pad端簡單易用的UI元件! Web App。

    ZUI

    開源HTML5前端框架

    Clouda Touch.js

    Touch.js是移動裝置上的手勢識別與事件庫,也是在百度內部廣泛使用的開發。[4]

    職業機會

    2015年12月5日,《廣州網際網路行業人才緊缺指數(TSI)報告》顯示,前端開發工程師成為廣州網際網路行業中最緊俏的職位。[5]

    常見前端開發工程師職位職責要求:

      

    (1)使用Div+css並結合Javascript負責產品的前端開發和頁面製作。[6]

    (2)熟悉W3C標準和各主流瀏覽器在前端開發中的差異,能熟練運用DIV+CSS,提供針對不同瀏覽器的前端頁面解決方案[6] 。移動HTML5的效能和其他最佳化,為使用者呈現最好的介面互動體驗和最好的效能。[7]

    (3)負責相關產品的需求以及前端程式的實現,提供合理的前端架構[6] 。改進和最佳化開發工具、開發流程、和開發框架[7]

    (4)與產品、後臺開發人員保持良好溝通,能快速理解、消化各方需求,並落實為具體的開發工作[6] ;能獨立完成功能頁面的設計與程式碼編寫,配合產品團隊完成功能頁面的需求調研和分析。[8]

    (5)瞭解伺服器端的相關工作,在互動體驗、產品設計等方面有自己的見解。

    資深前端開發工程師

    相比較“前端開發工程師”而言,更加資深,工作職責更大。一般而言,資深前端開發工程師需要使用JavaScript或者ActionScript來編寫和封裝具有良好效能的前端互動元件,熟練使用CSS+XHTML完美輸出視覺介面。同時還要對Web專案的前端實現方案 提供專業指導和監督並在日常工作之中對新人及相關開發人員進行前端技能的培訓和指導。另外,還要跟蹤研究前端技術,設計並實施全網前端最佳化。HTML5、node.js(JavaScript程式設計的後臺語言)興起,要求資深前端熟悉後端,並且要在商業模式、程式碼架構思想等維度去整體考慮前端的全域性佈局。[9]

    前端架構師

    前端架構師更偏管理,但職責要求不僅限於管理。前端架構師需要帶領組員實現全網的前端框架和最佳化,建立前端的相應標準和規範,完善並推廣和應用自己的標準和框架。同時,還要站在全域性的角色為整個網站的資訊架構和技術選型提供專業意見和方案。

  • 8 # 喂喂vv

    邏輯能力

    無論前臺後臺這個是最重要的

    基礎能力,基本功紮實。只會玩庫的人吃棗藥丸。

    編寫指令碼。至少會幾種指令碼語言吧。

    懂得協議解析。

    圖層,介面的搭建。

    當然我說的都是應該會的,追逐前沿的技術雖好,但是技術必須紮實,年輕人少點浮躁,有的人離開工具都不會寫程式碼了,你千萬別成為這樣的人

  • 9 # 安小彥

    感謝邀請,作為一名前端開發工程師,最重要的能力是什麼呢,我覺得首先,作為一名前端開發工程師,技術能力肯定是第一位的,畢竟這個是你成功入職最重要的能力,其次是溝通能力,應該懂得和上游的設計師以及產品經理之間的溝通,同時也應該和下游的伺服器工程師進行相關的溝通。當然還有一個學習能力,不能僅僅把眼光侷限在前端,一定要掌握相關的後端開發語言,儘量讓自己熟悉各種和設計相關的基礎知識。IT技術總在更新,要多關注技術,有更新就多學習,畢竟要是想提升自己,學習是必不可少的,充實自己很重要,祝好

  • 10 # 馬哥有財氣

    作為一名前端開發工程師,你覺得最重要的能力是什麼?首先基礎能力就不必具體敘述了,這個是你吃飯的本錢。但是要想辦法,成為一個資深的程式設計師或者前端(前端開發永遠成為不了CTO,所以我建議轉開發)這樣可以成為首席技術官,技術總監就距離你更近一步了。

    資深程式設計師是團隊中最強大的生產力,但往往被不合理的工作安排浪費掉。因此作為一個團隊的技術的“頭”,必須要有明確清晰的認識,把主要的事務性工作剝離出來。並且放棄大量的管理“權力”,以提高團隊開發質量和效率為最主要的目標去安排自己的工作。一般來說技術總監其實會被要求做事實上是2個職位的工作:主程、專案經理(技術化)

    因此必須明確此兩個職位的工作任務分割。然後把專案經理的工作,安排給另外一個人做,當然其職稱可能同樣也得叫“技術總監”或“主程”,總之聽起來越牛X越好。而真正的主程(技術總監)則應該投身於儘量多的技術工作中。而最重要的工作則是開發——生產程式碼和文件。從來沒有一個資深的外科醫生會放下手術刀,而轉到手術室外面指手畫腳。一個資深的程式設計師也不應該離開程式碼和文件的編寫,而只是做做架構圖。作為對一個複雜系統的負責人,必須親手領導和參與建造,才能有足夠的能力去負擔起這個責任。因此需要至少使用60%的時間來參與開發的工作,並且建議從一開始上班就開始,雖然早上的效率很低,但是跟任何艱鉅工作都一樣:萬事開頭難。在你好不容易等待電腦慢吞吞的打開了所有的IDE、需求文件、參考資料、工作計劃這堆要命的東西之後,你就邁出了最重要的一步,你會發現你不在需要在網上看微博和聊QQ來提振開始工作的激情,而會被某一個最佳化程式碼的靈感而激勵,或者被一個複雜而有趣的問題所吸引,從而更快的能投入到開發中。堅持開啟電腦做的第一件事是開啟IDE軟體,是這一切最重要的一步。開發的工作內容包括有:一般來說功能需求總是讓開發人員焦頭爛額的主要原因。但是實際上很多專案死在釋出之後,卻是因為效能、產品質量、擴充套件性、二次開發效率等非功能性需求沒認真去解決而導致的。主程作為經驗最豐富的成員,必須要利用自己曾經的經驗和教訓(在這裡教訓往往比經驗重要),提出那些自己折騰自己的“非功能性需求”,來保障整個專案在釋出後不會轟然倒塌。這是個吃力不討好的工作,因為老闆和客戶往往只會抱怨技術人員在玩弄把戲,騙取更多的資源或者杞人憂天。如何說服這些傢伙也許不是主程的工作,但是主程必須要以高度的責任心把問題放到檯面上來。溝通的工作也許讓專案經理去做會更好,他們有一整套如何威逼利誘老闆和客戶的戲法。軟體架構設計至關重要,而且工作繁重。不畫圖紙就敢開工的技術人員要麼是天才要麼是笨蛋。對於團隊來說,架構在分工合作、避免風險、提高質量等多個方面有無可替代的作用。架構要避免成為空洞的文件,最重要的一步是有人來掌控和實施。而主程主持設計和修正的架構,並且親手實施,讓團隊中的腹誹之徒完全無法避開,否則程式碼將無法執行!所謂設計和修正架構,並不意味所有的文件應該一個人寫,而是指這個架構的每個環節,都是經過主程決策同意的。當然最好這些文件能儘量由他撰寫,對於“菜鳥”團隊來說,輸出這種文件本身就意味著“權勢”,有助於主程建立個人威信——這種看起來有點骯髒的“政治”東西,在避免團隊內無止境的扯皮,以及穩定那些隨時準備跳槽的成員來說,都是相當實用的。主程必須寫程式碼,寫那些大家都認為風險大的程式碼。有的系統對於效能要求很高,他就必須去完成容易出效能問題的部分,比如IO操作或者設計資料庫索引。有些系統的需求非常飄忽,他就要去想辦法完成框架程式碼或者指令碼引擎,以便眾多小弟可以跟著產品人員疲於奔命。這種工作內容會讓主程不必完全的讀過所有程式碼,而能牢牢的“掌握”程式碼,以免團隊成員甩耙子的時候能充當備胎。因為融入團隊的程式碼開發,也是一個讓架構設計從日常工作中真正控制系統的工作。而且主程程式碼通常會被別人接觸,能直接教育其他團隊成員,同時也能建立——威信。這個工作其實和程式碼開發是一致的,如果沒有平日的開發,通常緊急問題的解決也是比較難處理的。但是這個也有一個除錯技巧的要求,比如要求會使用各種診斷工具。這些工具一般的開發人員可能會比較少使用。找問題的過程本身也可以提高團隊其他人的技術水平。培訓的工作應該佔用30%左右的工作時間。培訓是穩定團隊人員最重要的手段。也是提高團隊開發效率最有效的手段。工具、過程、制度、獎懲,這些都代替不了程式設計師一行行的去寫程式碼,最直接的方法是讓他們做的更快更好,這些需要經驗和知識的積累。關於程式碼審查,有太多的論述。但是程式碼審查還是一種“強迫”推行某種風格或者技巧的手段,這是最真實的“控制”系統的手段。也是推廣知識和經驗最直接的手段。一個人寫的程式碼通常應對的問題不會特別“廣泛”,因此只要審查其中一部分程式碼,就能給大部分別的程式碼帶來好處。什麼事情應該寫一個技術方案,然後進行評審,這是一個關鍵的問題。一般認為開發時間在2周以上的單項工作應該先做個方案。往往技術方案是系統架構的完善和補充,或者是挑戰。所以主程的參與是非常必要的。但是要注意不需要去做的太瑣碎,而是要提煉出“關鍵”的需求和“關鍵”的解決方案進行評審,而這些“關鍵”往往不是功能,而是質量上的需求,如這個系統的擴充套件性,是否能方便後續開發等等。也有可能在這些會議上會發生爭吵,但是決策人是主程的地位是不容動搖的。君子和而不同,每個程式設計師都可以擁有自己的看法,但是程式碼必須能按方案執行起來,主程必須經常申明這點。如果團隊碰到問題,沒有新的方法和技術去解決,是不會提高開發效率的。就好像你用牛來耕地,不管用什麼管理方法,都不會趕上機械化的速度。而主程承擔著不斷突破自己的技術上限,介紹和推動團隊使用更新的技術來解決問題的責任。抱殘守缺,思想僵化,最後會被團隊成員所拋棄,而且也會讓團隊的效能落後於業界,最後直接影響產品的生死。每年學一門新語言,這個說法可能有點激進,但是這也是作為程式設計師應該有的激情。管理等於權勢?管理等於溝通?管理等於文山會海?多年專業訓練出來的技術人員如何去做管理?管理的目標是提高績效,如果和這個目標無關,而只是和“管理者”這個頭銜有關的事情,最好丟給別人去做,包括那個頭銜。管理主要手段是創新:想出新的方法去解決問題,而不是繁雜的事務性工作!——一個專業秘書能比主程做的好一百倍。技術工作的創新,最主要還是在技術工作裡面,而不是跳出來說:做這個,做那個。管理的事情如果超過10%的工作時間,等於說你更像一個專案經理而非主程。以專業的意見來衡量別人的工作,這個負擔是無人能夠承擔的。這個工作往往是利益分配的一種手段。類似獎懲手段。這種管理方法已經不是新事物了。但是實際上技術人員對於績效往往持一定保留和曖昧的態度,因為這種事情難以很清晰的界定出來。需要判斷而非量度,才是績效的真正手段。如果一定要打分,一共兩項足夠了:進度、質量,5分制即可。更重要的事情是,告訴每個人主程的看法,告訴別人,怎樣做才是更好。或者告訴團隊,怎樣做才更有利於我們成功(發財、上市、贏得老闆和客戶……)——把目標清晰告訴團隊,發揮他們的主動性,是績效評定最重要的目標。最讓技術人員頭疼的可能就是和客戶談判。這個事情實際上不應該讓技術人員來傷心,有專案經理就可以了。而需求評定更多的是可行性的討論。主程如果參加每個需求評定,他要三頭六臂也搞不定,正確的做法應該是具體開發的團隊人員參加,而主程在開會前給與自己的意見,或者會後聽取參與者的總結。——這是瞭解別人做什麼事的一個重要手段,但無需陷入太深,因為還有程式碼評審和專案經理的幫忙。實在沒必要參加,能躲就躲,這是扯皮的天堂。讓專案經理去吧,他們的專業技巧能讓這些事情更加有效。只要回來後讓專案經理告訴你發生了什麼事情就可以了。又是一個很有“權勢”的工作,實際上團隊成員的情況大家都知道,決定誰應該做什麼事情並非需要很多時間去想的事情。所以大可以把方向性的意見告訴專案經理,讓他去做。很多優秀的開發者玩EXCELPROJECT之類的水平還不如只有一年工作經驗的秘書,別折騰自己了。如果真想幫忙,準備一份有區分度的筆試題目吧。不靠譜的人太多,老闆可不是花錢請你和他們聊天的。讓專案經理去聊,不用擔心他們技術不強,再不夠,也會比大多數面試者要牛X。他們搞不定的人,就是應該僱傭的傢伙。畢業生招聘怎麼辦?只要看看他們課外活動是不是有搞些專業的事情就可以了,上進心比別的東西都重要,HR會比主程看的更準,相信我。飯無好飯,會無好會,超過6個人的會議應該堅決抵制。如果你有一個程式等著你去寫,你一定無比痛恨這些會議,順應你的內心吧!上帝保佑你。專案經理就像下水道的清潔工,所有那些主程不願意去做的事情,他們都彎下腰去認真的把玩,實在是太偉大了。既然如此,為何不讓他們擁有更好一點的頭銜呢?如果沒有他們去處理這些工作,任何一個主程都會被逼瘋掉,或者他們自己變成了專案經理,讓團隊損失了最強力的一臺程式碼發動機。指定工作計劃進度檢查和告警工作總結和統計整合提供各種資源,如找DBA,IT,運維人員,硬體,SVN許可權,測試環境,福利,週末的活動……面試:人員是最重要的資源,不是嗎?資源談判:往往是和老闆談判,讓別人明白現在的真實情況。又一個吃力不討好的差事,但是總需要人做。需求評審:和需求方討價還價,專案經理真是命苦啊……組織會議或者用其他方式通知資訊給所有人:小喇叭、大喇叭、全服廣播、世界頻道……對於一個小型公司,職權,頭銜,收益,往往會更加敏感。但是這些都不是讓專案失敗的理由。一顆叫程式設計師的種子說:長大了我就是叫管理者的樹。這個錯誤的觀念只會讓這個種子永遠無法發芽。軟體開發是類似外科醫生的行業,而不是血汗工廠,所以不需要手持皮鞭的經理,而需要仁心仁術的神醫。

  • 中秋節和大豐收的關聯?
  • 人得了一次癌症,還會得其它癌症嗎?