編程結構師
A. 現在程序員有前途嗎我一直想從程序員做起,然後構架師什麼的,我不是學計算機專業的,學編程就是自學的
作為一個不是科班出身、沒有正規學習過計算機知識的架構師,想在這里把我這幾年學習的經歷體驗和大家分享一下,談談自己對架構師成長之路的一些感想。
奠定扎實的理論基礎
千里之行,始於足下!技術不是一蹴而就的事情,而是長時間積累的成果。扎實的基本功是做好所有事情的開始。到現在我還記得對我影響非常大的幾本書:
■《C++編程思想》
■《深入淺出MFC》
■《Windows 核心編程》
■《數據結構》《編譯原理》
我學習計算機正是按照這幾本書的順序,之前學習C的經歷就不必說了,而轉折點正是《C++ 編程思想》——它讓我感覺到程序和語言竟然這么有意思,至今仍對虛表的概念記憶猶新,尤其指針的用法,對我以後學習java語言有很大的幫助,對多態和語言的特性也有了很高的認識。
《深入淺出MFC》這本書,記憶最深刻的還是其中強大無比的宏定義和對象層次設計。然而學習MFC的過程中,我遇到的最大問題就是:很多東西都是黑盒的,這引發了我刨根問底的慾望。所以後來我學習了《Windows核心編程》,這本書給我的最大收獲,就是了解了很多操作系統底層的知識,操作系統是如何運行的。不過遺憾的是,如果當時從linux 或者Unix 開始學習,應該會了解得更系統一些。
之後我深入學習了《數據結構》和《編譯原理》。這是我經過了很多實踐以後,又回過頭來重新學習。拿《編譯原理》來說,以前對這門學科的了解非常有限,後來為了實現一個東西,要用到腳本語言,找來找去找到了Velocity(後來想想使用Groovy 應該更好一點),用了以後覺得很好。以前修改程序邏輯,是需要重新編譯或者修改配置重新發布才能OK,而現在只需要編輯然後保存一下,就能得到自己想要的結果。這令我著迷,於是想知道它是如何實現的,翻看源代碼才曉得原來還有 JavaCC這個東西。就這樣,我從解釋語言入手,逐漸開始了瘋狂學習編譯原理的過程,越發覺得編程語言非常有意思。
回頭想想以前和現在學習的語言,感覺程序語言就是在不斷抽象:從匯編、C、C++, 再到Java、C#,再到更動態一點的語言如Perl、Python、Ruby 等等。不管它再怎麼變、再怎麼抽象,還是編譯原理應用的產物。
講了這么多,就是想強調理論基礎知識的重要性!雖然我們現在使用的框架如此之多,但是如果你有了扎實的基礎理論知識,這些東西就跟玩具一樣。基礎就是一個無招勝有招的殺手工具。
培養完善的抽象思維
抽象的能力也是作為一名好的程序員必須具備的能力。我們在考慮問題的時候可能會遇到錯綜復雜的場景,從這些迷霧中找到一條明路是我們做好程序員的關鍵。這些年來學習了很多框架,回過頭來想想自己都有點後怕,這也令很多初學者望而生畏。但認真想想,真的有那麼可怕嗎?
讓我們從語言層面逐漸剖析這個問題,應該很容易做出解釋。程序語言就是我們在某種場景下交流的工具,匯編是機器語言;C和C++ 是編譯型語言,它們是一種針對匯編的高級抽象;而Java 和 C# 就是更高級的抽象了,甚至於抽象了一層虛擬機出來(這個產生的影響就是,之後的很多高級語言評判標准,都是「是否支持虛擬機」),再到後面的許多動態語言,那就是更抽象了。說到這里你會問到,講這么多語言類的東西和學習框架有什麼聯系?讓我慢慢道來。
我們使用一種語言就是用它的語法進行編程,而學習一個框架實際也是為了用這個框架所提供的語言來寫程序:Struts——我們使用很多配置還有 Action 和Form ;Spring——我們使用Bean 模型,這是它的最基本模型(現在 Spring 已經龐大得讓很多人無法學習了);iBatis——我是用它的XML-sql 模型;JBPM——使用它所謂的GOP模型(面向圖元的編程);Web flow——是在使用它的頁面流模型。這樣的例子我可以舉出很多(這也是DSL現在如此流行的原因)。
很多人會說:學習這么多我已經暈掉了!不妨想想,為什麼會有這么多東西存在? Struts 是為了解決Web編程的困擾;iBatis、Hibernate 是為了解決在資料庫編程時的麻煩;原有的Web頁面編程都是獨立的具體單元,Web flow能夠讓這些頁面形成流的形式,讓開發更順其自然;從JBPM的GOP可以看出,JBoss 的開發人員對抽象的理解度很深。我舉這么多例子,實際是讓大家不要害怕現有的這些框架,有了扎實的基礎,抽象的概念是很容易理解的!缺乏抽象的能力,你就不能更快更好地解決問題。
實際抽象能力衍生出來的一點就是,需要我們對已學過的知識定期進行梳理。這樣能讓你鞏固已有的知識,為以後的學習做好准備。知識就好比一棵生物進化樹,最終目標都是一樣的,關鍵是看如何選擇進化的路線,讓自己的知識結構能夠有機的結合在一起。做到學以致用。過一段時間就梳理一下,你會有更多的發現。
擴充現有的知識層面
在鞏固原有知識結構的前提下,我們更需要擴充現有的知識面。井底之蛙,看到的永遠是井口大的那片天,只有跳出來,才能看見無限美好的藍天白雲。我曾經也常常局限在自己已熟悉的那塊領域沾沾自喜,但是走出來以後才發現,自己原本是多麼膚淺!學習的知識越多,對新事物的洞察力將會越准確!這樣有助於你鞏固已有的知識,系統地學習新的知識。
那我們是否需要無限平行式的學習知識呢?我的答案是「No」。人的知識面是有限的,我們需要一個T型的知識結構。你的知識面要廣,但是對於某些技術點要專,這才是做好一個架構師的關鍵。有時 「專」可以讓你對很多「廣」的知識產生觸類旁通的感覺。
實踐也是非常重要的一環,不要有畏難心理,覺得這個東西太難,我無法完成!有時候事情的結果可能是糟糕的,但是過程是非常寶貴的,其中可以學習到很多東西,同時也可以讓自己避免輕浮的心理。
還要著重培養自己良好的溝通與解說能力。架構師面對客戶群具有多樣性,有技術工程師、業務人員、公司管理層,甚至直接面對客戶等。要把一個高度抽象又復雜的系統說清楚,這對於架構師來說也是一種挑戰。所以架構師必須掌握技巧,應用多種表達方式來闡述架構與產品設計、與具體業務、與公司戰略之間的關系等。培養良好的溝通能力,多和周圍的人進行溝通,你能夠學到更多的知識!
「平衡」是架構設計的藝術,我們設計一個東西,就是在平衡各方面的利益。平衡有可能是時間上的,比如需要支持多少年的系統可用性;平衡有可能是縱向的,比如要支持系統的向下兼容性,要保證程序員編程模型上的簡單性等等。這種平衡就是因人因時因地而異了。平衡的把握很可能就是評判一個架構師架構水平的標准!架構師在設計的時候應該權衡維度、整體性和擴展性,考慮問題時不要局限於自己的一畝三分地。多種點田,會長出很多莊稼的!
擁有一個扎實的基礎,不斷擴充自己的知識面、完善知識體系,在對現有知識抽象的基礎上,不斷去溝通實踐,你將獲得更強的架構平衡能力。最後我還要說,業務知識非常重要,這個是你實踐的關鍵!
B. 成為一個架構師,對於編程語言是應該學多還是學精,又
【原創回答】我本人是一名軟體架構師,這個問題非常大,不太好回答。我總結一下,軟體架構師的能力大概分為三個方面:1.技術,這個應該沒懸念,如果沒有過硬的開發技術,就不要期望做架構師了;設計模式,系統模式,架構模型,系統理論,甚至編程語言,演算法,操作系統,網路,資料庫,都需要有扎實的掌握。
2.是業務知識,也即領域知識。軟體架構師實際上是把業務需求落實成開發藍圖的總設計師,如果你對業務一竅不通,空有一身技術也只能望業務興嘆。3.就是溝通表達的能力,架構師需要推進自己的架構設計理念給開發團隊,所以也需要這方面的能力,當然最重要的還是前兩部分的能力。
C. 軟體架構師主要是做什麼啊
軟體架構師是軟體行業中一種新興職業,工作職責是在一個軟體項目開發過程中,將客戶的需求轉換為規范的開發計劃及文本,並制定這個項目的總體架構,指導整個開發團隊完成這個計劃。主導系統全局分析設計和實施、負責軟體構架和關鍵技術決策的人員。根據「第三屆中國軟體工程大會」的報告,在中國,未來五年,高端軟體人才需求缺口達20萬。而每年自動成長起來的軟體架構師只有幾百人,可見市場需求的巨大。
(3)編程結構師擴展閱讀:
架構師的主要任務:
1、領導與協調整個項目中的技術活動(分析、設計和實施等)
2、推動主要的技術決策,並最終表達為軟體構架
3、確定和文檔化系統的相對構架而言意義重大的方面,包括系統的需求、設計、實施和部署等「視圖」
D. 如何才能從一個程序員成為一名優秀的架構師
我建議你看一下網上很火的一篇文章叫:程序員的十層樓。
我再寫寫我自己的經驗吧:
[經驗之談]30歲,我的程序,我的夢!
程序人生 : 30歲,我的程序員夢想
作 者: redbridge (雪燃)
30歲,開始實現我的程序員夢,從一個編程愛好者,從一個業余的程序員,一個水平不高的程序員,一個半道出家的程序員......
我的經歷到這里就告一段落了,五年裡跳了五次槽,不知道和大家比算不算多J,沒有什麼太多起伏,但我想很多朋友可能會和我有類似的經歷,不知道能不能引起你們的共鳴。我想對我上面所說的話給一個總結:
1. 如果你覺得自己應該追求什麼,不管遇到什麼困難千萬不要放棄,一定要堅持下去。
2. 不要因為自己年輕就找理由揮霍時間,少玩一點SC、CS、魔獸3、傳奇、魔力或者…….,多看點書,多練練題。
3. 如果你還是在校的學生,英語很差,專業課也很差。沒關系,想怎麼學計算機就怎麼學計算機吧。其它地只要能混到畢業證就行了。除非你對自己的未來沒有信心。(當然,如果你的理想不僅僅是要做一個程序員,那你別丟掉英語。)
4. 如果你不是科班出身,想要轉行而不知該怎麼開始的話,建議你先看兩類書:(1)計算機原理;(2)數據結構和演算法。(看數據結構之前先看C語言)。
5. 什麼時候努力都不晚,關鍵是你明白要努力了,大器晚成總比一事無成要好的多。
6. Java、.net、C++、PB、VB、Delphi、匯編到底應該學哪個?我的經驗,哪個最簡單就先學哪個、公司用哪個你就學哪個、哪個和你有緣(比如剛好你認識一個願意幫助你的Delphi高手)你就學哪個,如果你都學,或者三天兩頭的換,我可以告訴你結果肯定是什麼都不會,不要心浮氣燥,他們都只是工具,學精一門其它的就相通了,重要的是掌握編程的思想。如果你問我面向對象(好像現在已經是面向需求了)、UML、WebLogic、WebService、軟體工程、XML…….應該怎麼學呀,對不起,這些我也確實不是都會,但請相信,你先實實在在的寫上十萬行以上的代碼以後,那些東西你自然就慢慢會了。
7. 不要以為程序員的工資都很高,程序員之間的水平差異也大。公司衡量一個人的待遇標準是他能給公司帶來多大的效益。如果你體現了自己的價值,公司會主動給你加薪的,當然你也可以自己主動提,但一定要在你表現出了自己的價值之後。
8. 輕易不要跳槽,如果非要跳,也要保持工作經驗上的延續,而不是從新開始,不然就會象我一樣走很多彎路。
9. 如果你以為程序員都是熬夜熬出來的,那麼你錯了,因為它的代價就是縮短你的青春!大家不要象我一樣,真的,熬夜一點也不好!記住老毛的話:如有恆,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網,竹籃打水一場空!
10. 這一點是我覺得最精華的一點:「君子性非異也,善假於物也。」這句話的本意是一個水平很高的人本身並不一定很高明,關鍵是他善於利用別人的高明!我在這里做個借鑒,就是要充分利用自己身邊的資源,不放過任何一個可以提高自己的機會。大家不要誤會,這里的假於物可不是指抄襲別人的源代碼,而是指通過學習別人的源代碼把他的思想擴展到自己的思想里去。
註:上面的十大「精華」純屬我個人的「謬論」,您自己看著消化,有用的收下,沒用的請拖入「回收站」。如果你覺得這些總結不過是一些浮華之詞,那請你先問問自己:「是不是在行動上都真正做到了。」
這就是我,一個不算優秀,不算勤奮;玩能玩通宵,學也學能學通宵;對夢想的追求很執著;到了30才開始真正寫程序;一個很平凡但又不甘於平凡的人……我的經歷相信很多朋友都有過的,我現在也不能算是一個成功人士,但我相信我的經歷卻是值得大家借鑒的,因為我終究代表了一類人。
最後我還想說一點:現在很多朋友都抱怨中國的軟體業環境太差,前途渺茫。確實是這樣,我有同感。不過我想軟體業不過是千萬個行業中的一種,每一個行業總是會有起落的,中國的軟體業環境差有她的歷史原因,我們不要總是簡單地和印度相比。抱怨沒有意義,已經這樣了,抱怨不能使她變好,希望我們每一個人多貢獻一份自己的力量,總有一天她會變的比印度還好,甚至比美國還好。
最後:希望所有的程序員和擁有成為程序員夢想的朋友們在新的一年裡心想事成,萬事如意。請相信我:明天不一定更美好,但美好的一天一定會來!
===================================================================
好好看看這篇文章,對你肯定有用.
E. 系統架構師有沒有前途,待遇怎麼樣。
你好,互聯網架構師是行業內緊缺的Java高端人才,待遇屬年薪百萬級。
1、Java構架師之路
對於工作多年的程序員而言,日後的職業發展大部分人無非是轉型管理和晉升架構師兩種選擇。
架構師在公司中擔當著「IT架構靈魂人物」的角色,因為他們不僅做著架構師的本職工作,還同時做程序開發,寫核心代碼。另外,架構師依舊是技術高手,編程能力依然是一流的。
對於架構師和項目經理,不同能力的人,不同的公司,薪資水平都不盡相同。但就這兩個職位而言,都需要具備非常高的編程技能。
希望我的回答對你有幫助!
F. 專業架構師,第 1 部分: 開發人員如何成為架構師
在尋找優秀的指揮的時候,您首先要找的是一名優秀的音樂演奏家。但並非每個音樂演奏家都能成為優秀的指揮。架構師的專業發展方面也與此類似。越來越多的 IT 組織開始認識到良好軟體體系結構的重要性,架構師職業正迅速發展為 IT 內一個獨立的門類。由於要從相當小的候選范圍內招募架構師,因此這就給管理帶來了一些新挑戰。即使人力資源部門找到了候選者,針對經驗進行的篩選也比其他門類更為嚴格。跨越這些障礙的最快方式是要認識到,大部分好的架構師同時也是好的開發人員,因此尋找架構師人才時可能首先應該從普通開發人員中找起。招聘人員在對候選者(內部或外部)進行詳細審查時,應該考慮這個觀點。不過,對此資源進行挑選可能比較麻煩,因為只有極少的優秀開發人員具有成為架構師的特徵或願望。本文列出了開發人員成為架構師要進行的工作。我將從可能考慮進行此轉型的開發人員和評估進行此轉型的開發人員的經理這兩個方面來探討這一問題。我還將提供一系列在做出這些決策時要考慮的因素。個人特徵軟體開發團隊和管理層之間的聯系始終是 IT 中的一個關鍵所在。二者都傾向於以完全不同的方式考慮給定的問題。大部分相關技術都是討論項目經理應如何跟蹤和解釋開發人員的進度和問題。但溝通不足的情況仍然非常普遍,而且這是項目失敗的首要原因。好的架構師是解決這個問題的最有效辦法。架構師的主要責任是提供開發人員和項目經理之間的共用溝通媒體。他們負責讓業務規則及需求與工程實踐及限制相適應,以確保成功。以下是成功架構師的一些主要特徵。願意並有能力進行溝通:在開發人員中發現架構師的最有價值標準是有效的溝通。您需要技術嫻熟、經驗豐富的開發人員,這樣的人員需要有就項目中的業務相關問題進行溝通的經歷。架構師經常必須對理解方面的差距進行預計,然後才能有所貢獻。他們必須願意克服困難來確保技術和業務觀點的融合。他們並不必對意見交換工作進行計劃和協調;這仍然主要是項目經理的工作。他們的任務是確定表述系統設計時的最佳工具和構件,以促進有效的意見交換。他們必須能夠判斷當前方法顯得不足而需要採用新方法的情況。寫作技能也非常重要,還需要具有製作草圖的技能或使用制圖軟體的能力。具有處理談判細節方面的經驗:架構師經常需要負責討論系統開發的技術折衷方案。優先順序的沖突可能會帶來實踐限制、風險規避或可能導致在各個不同業務組之間需求不同。優秀的架構師能夠有效地評估技術可能性,並能在不損失項目的主要價值的前提下制訂開發計劃來處理各種利害關系和限制。這與前面討論的溝通技能緊密相關,但同時也要體現架構師的技術能力。好的架構師候選者應該是經常幫助對有爭議的討論進行引導的人,能夠使討論得出新的想法,而不會使其在一個位置停滯不前。自覺主動;積極解決設計問題:架構師的日常工作目標經常並不明確。很多開發人員直接參考功能規范來列出任務清單。架構師通常則是向這些開發人員提供所需結構的人員,以便盡可能提高工作效率。好的候選者不僅進行溝通方面的工作,而且也會預計各種設計問題並加以解決——通常在沒有任何具體指示的情況下自覺進行。無論所分配的職責如何,積極參與項目的開發人員都有機會從一起工作的人員中脫穎而出。抽象思維和分析:架構師必須能夠理解表述模糊的概念並將其變成相關各方能夠理解的項目構件。他們必須能夠理解抽象概念,並以具體的語言對其進行溝通。開發人員中好的候選者經常要求或自己主動解釋開發生命周期中容易混淆的問題。他們能迅速評估各種想法並將其納入後續工作的操作建議中。開發人員經常具有很強的數學能力,而好的架構師則傾向於表現出更強的口頭表達能力。管理人員經常說開發人員具有「工程意識」,而這是一個用於評估架構師的非常有意義的方面。架構師應該具有很強的解決技術問題的能力,但還必須能夠准確獲知更為全面的人員如何與技術交互的信息。這要求具有某種形式的抽象思維(而不再是代碼的細節),這種思維能力可能較難形成。有些人認為,某種級別的正式教育是成為優秀開發人員的必備條件之一,我並不同意這種精英論。我遇到了很多高中就輟學的優秀開發人員。不過,對於體系結構設計工作,我的個人經驗以及我對所需能力的認識都讓我相信,好的架構師通常至少獲得了一個有挑戰性的學士學位。跟蹤生命周期好的架構師通常有在具備定義良好的軟體開發生命周期(Software Development Life Cycle,SDLC)的組織工作的經驗。架構師必須理解在其所屬專業內最重要的操作過程。這並不意味著需要有其他前提,例如,並不需要高能力成熟度模型(Capability Maturity Model,CMM)級別的工作經驗。好的架構師可能來自使用 SDLC 的多個小型迭代的極限編程(Extreme Programming,XP)方法的組織。務必注意各種傳統軟體開發操作,如 Michael A. Jackson 的方法:Jackson 結構編程(Jackson Structured Programming,JSP)和 Jackson 系統開發(Jackson System Development,JSD)(請參見參考資料)。Jackson 的研究對架構師職業發展的意義就像 Donald Knuth 的研究對程序員一樣重要。架構師可以偏愛任何經典的、經過時間考驗的軟體系統開發方法。SDLC 也可以成為評估架構師合適人選的有用機制。每個 SDLC 階段都具有能提供相關線索的特徵。SDLC 包含很多小的變體,但在此部分,我將使用幾乎所有方法的公共基礎部分。下面的列表詳細說明了 SDLC 的各個階段,並列出了好的架構師候選者在每個階段表現出來的特徵。分析:在分析期間,好的架構師會考慮非技術影響,以便了解需求和將在其中進行開發的環境。架構師可為風險評估任務帶來廣泛的軟體經驗供參考。尋找具有豐富經驗的開發人員,以幫助業務部門理解技術人員正確解釋需求所需的信息。尋找在開發的早期階段能夠預計可能遇到的問題的開發人員。設計:在高級設計期間,好的架構師會收集問題空間的各個抽象元素,並就其進行溝通,以便開發團隊草擬將要開發的系統的相關圖表。架構師負責將需求謹慎地映射到所得到的系統體系結構的功能。在詳細設計期間,他們所扮演的角色並不是核心角色,但為了根據整個系統的規則對特定模塊的元素進行審查,仍然需要他們。尋找善於讓團隊能夠預計設計決策對最終系統的影響的開發人員。尋找善於確定一些最佳構件來促進與技術和非技術受眾溝通設計問題的開發人員。實現:在實現期間,架構師對項目進行引導,以確保其符合系統體系結構。他們在一線評估技術更改請求,並確定如何對設計進行調整,以最好地處理此類請求。架構師還要密切了解開發人員的進度,特別要跟蹤系統中模塊間的集成點的狀態。尋找經常對討論進行引導來連接多個子系統的開發人員。尋找項目經理可以依賴其快速地進行與更改和出現的問題相關的風險評估的開發人員。測試:架構師對系統集成和用戶接受度測試進行指導,並負責評估進度的正確溝通的持續測試結果。尋找理解錯誤模式且善於將測試復查結果轉換為行動計劃的開發人員。維護:在維護期間,架構師將發起關於系統集成的討論。無論處理 IT 基礎設施問題,還是確保部門之間的技術合作,架構師都必須完全理解應用程序,必須快速學習姊妹應用程序的體系結構,而且必須就集成點和風險進行有效溝通。尋找具有系統集成經驗且表現出快速掌握全貌的能力的開發人員。系統集成是一項獨特的任務。回頁首架構師培養建議有些組織能比其他組織更有效地進行架構師培養。如果充分考慮到招聘此類新專業人才的困難,努力促成能鼓勵開發人員發展為架構師的環境是非常明智的策略。但務必避免對不願意或不適合走這條路的開發人員進行處罰。組織應該為開發人員制訂多條發展路線,包括那些願意繼續擔任開發人員的人。對架構師而言,資深開發人員不可或缺。他們可以實現系統中最關鍵的模塊。通過對其他開發人員進行代碼檢查和測試支持,他們可幫助確保總體軟體質量,而如果質量不能保證,即使最好的體系結構也毫無用處。 組織應制訂個人評估程序,以鼓勵開發人員考慮其職業目標,其中要包含體系結構設計的選項。應該鼓勵經理在其下屬中尋找體系結構設計人才。應該實現指導計劃,讓架構師與希望成為架構師的開發人員協作工作。應該鼓勵開發人員通過參加各種協會、撰寫文章和參加會議,從而參與到專業領域中來。通過這樣參與進來,可幫助開發人員從新的角度理解系統,並幫助他們更好地就其認識進行溝通。這樣還能培養可提高效率的重要創新想法。回頁首結束語開發人員一旦邁出了通向體系結構設計專業方向的第一步,就可以利用很多資源來獲得幫助,其中包括很多來自 IBM 的資源。有時候,此過程的最困難的部分就是第一步,而本文提供了一些線索和提示,經理和開發人員可以利用其來評估應該鼓勵哪些人努力成為架構師。參考資料 學習您可以參閱本文在 developerWorks 全球站點上的 英文原文。
訪問Michael A. Jackson 的主頁,他是最有影響力的軟體開發研究者之一。可從中獲得他的著作的鏈接,其中很多在此領域中都具有開創性價值。
閱讀「The Tao of the Software Architect」(Philippe Kruchten,developerWorks,2001 年 3 月),其中對架構師的職業進行了非常有意思的分析。
有關更多體系結構資源,請訪問 developerWorks Architecture 專區。
有關SOA 的更多信息,請訪問 developerWorks SOA and Web services 專區。
了解關於 developerWorks 技術事件和網路廣播的最新消息。
獲得產品和技術使用IBM 試用軟體開發您的下一個項目,可直接從 developerWorks 下載這些試用軟體。
討論參與developerWorks 博客,從而加入到 developerWorks 社區中來。
與SOA and Web services 討論論壇中的架構師和開發人員社區協作。
關於作者Uche Ogbuji 是 Fourthought Inc. 的顧問和合夥創始人,該公司是專門為企業知識管理應用提供 XML 解決方案的軟體提供商和顧問。Fourthought 開發了 4Suite,一個 XML、RDF 以及知識管理應用程序的開放源碼平台。Ogbuji 先生還擔任 Versa RDF 查詢語言的首席開發人員。他是一名出生於奈及利亞的計算機工程師和作家,生活和工作在美國科羅拉多州的博耳德。想要了解更多,可訪問 Ogbuji 先生的博客 Copia 或者通過電子郵件 [email protected] 與他聯系。關閉[x]關於報告濫用的幫助報告濫用謝謝! 此內容已經標識給管理員注意。關閉[x]關於報告濫用的幫助報告濫用報告濫用提交失敗。 請稍後重試。關閉[x]developerWorks:登錄IBM ID:需要一個 IBM ID?忘記IBM ID?密碼:忘記密碼?更改您的密碼 保持登錄。單擊提交則表示您同意developerWorks 的條款和條件。 使用條款 當您初次登錄到 developerWorks 時,將會為您創建一份概要信息。您在developerWorks 概要信息中選擇公開的信息將公開顯示給其他人,但您可以隨時修改這些信息的顯示狀態。您的姓名(除非選擇隱藏)和昵稱將和您在 developerWorks 發布的內容一同顯示。所有提交的信息確保安全。關閉[x]請選擇您的昵稱:當您初次登錄到 developerWorks 時,將會為您創建一份概要信息,您需要指定一個昵稱。您的昵稱將和您在 developerWorks 發布的內容顯示在一起。昵稱長度在 3 至 31 個字元之間。 您的昵稱在 developerWorks 社區中必須是唯一的,並且出於隱私保護的原因,不能是您的電子郵件地址。昵稱:(長度在 3 至 31 個字元之間)單擊提交則表示您同意developerWorks 的條款和條件。 使用條款. 所有提交的信息確保安全。為本文評分評論回頁首
G. 要成為一個 Java 架構師得學習哪些知識
既然java架構師,首先你要是一個高級java攻城屍,熟練使用各種框架,並知道它們實現的原理。jvm虛擬機原理、調優,懂得jvm能讓你寫出性能更好的代碼;池技術,什麼對象池,連接池,線程池...:;java反射技術,寫框架必備的技術,但是有嚴重的性能問題,替代方案java位元組碼技術;nio,沒什麼好說的,值得注意的是"直接內存"的特點,使用場景;java多線程同步非同步;java各種集合對象的實現原理,了解這些可以讓你在解決問題時選擇合適的數據結構,高效的解決問題,比如hashmap的實現原理,好多五年以上經驗的人都弄不清楚,還有為什擴容時有性能問題?不弄清楚這些原理,就寫不出高效的代碼,還會認為自己做的很對;總之一句話越基礎的東西越重要,很多人認為自己會用它們寫代碼了,其實僅僅是知道如何調用api而已,離會用還差的遠。
熟練使用各種數據結構和演算法,數組、哈希、鏈表、排序樹...,一句話要麼是時間換空間要麼是空間換時間,這里展開可以說一大堆,需要有一定的應用經驗,用於解決各種性能或業務上的問題;有時間再補充。
熟練使用linux操作系統,必備,沒什麼好說的 。
熟悉tcp協議,創建連接三次握手和斷開連接四次握手的整個過程,不了解的話,無法對高並發網路應用做優化; 熟悉http協議,尤其是http頭,我發現好多工作五年以上的都弄不清session和cookie的生命周期以及它們之間的關聯。
系統集群、負載均衡、反向代理、動靜分離,網站靜態化 。
分布式存儲系統nfs,fastdfs,tfs,Hadoop了解他們的優缺點,適用場景 。
分布式緩存技術memcached,redis,提高系統性能必備,一句話,把硬碟上的內容放到內存里來提速,順便提個演算法一致性hash 。
工具nginx必備技能超級好用,高性能,基本不會掛掉的伺服器,功能多多,解決各種問題。
資料庫的設計能力,mysql必備,最基礎的資料庫工具,免費好用,對它基本的參數優化,慢查詢日誌分析,主從復制的配置,至少要成為半個mysql dba。其他nosql資料庫如mongodb。
還有隊列中間件。如消息推送,可以先把消息寫入資料庫,推送放隊列伺服器上,由推送伺服器去隊列獲取處理,這樣就可以將消息放資料庫和隊列里後直接給用戶反饋,推送過程則由推送伺服器和隊列伺服器完成,好處非同步處理、緩解伺服器壓力,解藕系統。
以上純粹是常用的技術,還有很多自己慢慢去摸索吧;因為要知道的東西很多,所以要成為一名合格的架構師,必須要有強大的自學能力,沒有人會手把手的教給你所有的東西。
想成為架構師不是懂了一大堆技術就可以了,這些是解決問題的基礎、是工具,不懂這些怎麼去提解決方案呢?這是成為架構師的必要條件。
架構師還要針對業務特點、系統的性能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人用戶的系統,訪問量不大,數據量小,你給人家上集群、上分布式存儲、上高端伺服器,為了架構而架構,這是最扯淡的,架構師的作用就是第一滿足業務需求,第二最低的硬體網路成本和技術維護成本。
架構師還要根據業務發展階段,提前預見發展到下一個階段系統架構的解決方案,並且設計當前架構時將架構的升級擴展考慮進去,做到易於升級;否則等系統瓶頸來了,出問題了再去出方案,或現有架構無法擴展直接扔掉重做,或擴展麻煩問題一大堆,這會對企業造成損失;
手機手工輸入的,想到哪裡寫到哪裡,很亂..做技術的,表達能力不強,將就著看吧,歡迎大家補充,互相學習交流,有學習有交流才有進步。
剛用知乎發現它的編輯器真難用,發布後段落前面的空格沒有了,存草稿後回車換行沒有了,剛剛重新整理了一下
H. 程序員,如何少走彎路,成為一名技術專家或者架構師
#1 專業技能
@首先當然基礎知識要扎實,一些經典的專業書籍一定要看。比如,設計模式,演算法,數據結構,所在領域的編程語言的專業書籍等.關於不同的能力階段,需要讀取什麼類型的書籍,請參考ThoughtWorks(中國)程序員讀書雷達,每年都有更新。
@作為架構師,review別人的代碼並給出合理的建議是基本功,比如變數或者方法命名的規則;所以代碼大全,重構,改善既有代碼的設計,Clean code 等等肯定需要看。
@ 對於某一個技術領域或者業務領域,一定要有一門技術是精通的,因為這樣你才能體會到以後遇到自己不懂的技術的時候,如何能夠快速成為這一方面的行家。
@ 平常有時間一定要多多進行代碼的訓練,也就是Martin Flower常說的Kata練習,這個比喻來自於跆拳道,跆拳道選手一般每天都會找一些基本的招式,進行反復的練習,從而訓練肌肉的條件發射,那麼對於我們程序員來說,一定也要進行持續的編程訓練,比如上面提到的那位同事,給的建議是,雖然把大部分時間花在了溝通和協調上面,沒有機會寫代碼,但是自己一定要利用業余時間,自己找一些例子來聯系,比如,參與開源項目,或者到網上去搜索一些大師的經典Kata聯系的例子;或者看工作裡面是否有一些小工具,是否能夠提升自己的溝通效率,當然已經天天寫代碼的童鞋們除外。請參考我轉發的另外一篇文章和另外一篇介紹能在線練習Kata code的文章.
@ 最好能夠在精通一門語言的基礎之上,學習其他的語言,從而站在一個更高的角度,對於程序語言有一個更高層次的抽象認識,比如,學了Java之後,可以學學Ruby,Groovy,C#等等,其實語言之間都是相互借鑒的,比如Lamba表達式,連java也慢慢的向函數式編程方向靠攏。
@ 如果有時間,一定要自己維護一個博客,既然選擇了架構師,就決定了自己以後不僅僅是一個技術專家,同時也要成為一個佈道師,為企業組織或者社會上的其他IT同行們貢獻自己的一些微薄之力。
@ 多參加一些社會上舉辦的軟體專業會議或者活動,了解當前比較流行的技術和框架。
@ 這條不提倡,我以前有一個同事,幾乎每年都要更新簡歷1~2次,目的不是真正的換工作,而是通過面試得到當前市場上大部分公司正在使用什麼技術和框架。對於這條,請慎用!!!!
@如果有結對編程的機會一定要好好珍惜,特別是和高手大拿一起結對的時候。
@如果大家上面都已經做的非常的好了,這個時候可以看看架構設計方面的書籍,比如企業應用架構模式,架構之美等等。
@ 去51Job上搜索架構師這個職位標簽,看看不同行業的企業對於架構師的技術要求和標准,然後結合自己當前所處的行業和你自己的技術特點,比如擅長前段或者後端,有選擇性的學習一些自己感興趣的技術或者方法。
@ 關於常用的網站,沒有定論,筆者主要是根據搜索的結果去發現適合自己的網站,所以需要讀者掌握一定的搜索的技巧,筆者一般喜歡用英文搜索,這樣的話資料比較全也比較新;如果下載電子書的話或者查看博客的話 一般會首選CSDN;如果是解決工作中的問題的話,在StackOverFlow上面被解答的概率是最大的,此外平常自己也需要去積累一些自己感興趣的技術的人氣比較旺的網站列表,比如一般和Window相關的就是MSDN;如果對Java入門比較感興趣,可以看看這個網站。對於一些開源的框架,一般都會有想對應的社區,google一搜索,很快就能找到。另外一個德國人寫的博客的非常的精緻,如果對Eclipse插件開發特別感興趣的朋友們可以去參考它。
@大家如果時間和精煉允許,最好能在Github開源和分享自己平常寫的代碼。這樣一方面可以熟悉git用法,另外一方面也可以把自己平常練手的代碼免費保存,何樂而不為呢?
@如果大家平常遇到什麼問題,可以到StackOverFlow上面去尋找答案;當然,如果你能自己注冊一個StackOverFlow賬號那是最好不過的,這樣不但可以提問,還可以幫助別人,同時上面還有很多工作簽證的工作機會。
#2 軟技能(現代社會,一個合格科學家不僅僅是某一個行業的技術專家同時也是一名專業的社會活動家)
@遇到問題,一定要多想,遇到一個問題,如果解決了,就要反思為什麼能夠解決,如果以後遇到類似的問題,
如何更快速的解決。
@英語的重要性,不言而喻,因為現在很多新技術的框架的中文文檔非常的少,即使翻譯成中文,也是二手的了(國內自己的開發的一些開源框架除外)
@ 有時間的話,看一些溝通方面的書籍,如果有參與溝通的機會的時候,一定要想如何把溝通做的更好更舒暢。
@ 如果有機會的話,可以參加PMP的考試,關於如何備考PMP,請大家參閱另外一篇文章:如何備考PMP,但是如果不想參加的話,也沒有關系,至少要涉獵到項目管理方面的書籍,否則以後如果成為架構師之後,客戶或者管理者給你說一些項目管理上一些專業術語時,到時候就會一頭霧水。
@架構師其實從某種意義上就是一種角色,而不是一種職位。一定要時時刻刻保持空杯心態。
@一定要有一顆保持飢渴學習和耐得住寂寞的赤子之心。
@當前的技術節湊是非常快的,特別是結婚以後又有小孩了。一定要好好的利用自己碎片時間,對於一些技術,當時讀不懂不要緊,但是一定要記住和了解其關鍵詞,這個主要是為了拓寬自己的視野。比如,當前你想自己開發一個系統,結果已經有一個開源框架實現了,而且還很穩定,這個時候,自己就沒有必要重復發明輪子了。
@與不同的技術、編程語言、設計模式和結構等(甚至是它並沒有在日常中給予你直接的幫助)打交道。你永遠都不知道這些知識是否會在未來派上用場,但是對你絕對是有益無害。
@在工作中,能夠幫助到別人解決技術難題,一定要盡量全力以赴,因為這不但可以贏得同事的好感和口碑,同時也能增長你解決問題的經驗和提高你的技術思維能力
@ 一定要掌控好自己的時間,對工作沒有幫助的會議,能不參加盡量不要參加,當然,企業安全,公司規章制度如果是強制性的,該參加還得參加,但是如果沒有工作效率和扯皮的會議,盡量避免參加。
@程序員要耐得住寂寞,要在自己的領域深挖,不能看啥火,就學啥,一定要有自己的想法和判定,如果決定不了,可以向資深的同事或者朋友溝通。
@盡量參與到項目中的編碼,因為架構師不能與項目脫離。
@ 如果有機會可以鍛煉一下自己在大眾環境下的演講和PTT的能力。
@有機會多做知識分享,因為你一旦分享了知識,你就會對這門技術有深刻的印象,同時也能樹立在同事中的良好的技術形象,從而贏得更多的專家影響力而不是職位影響力。
上面只是我當前能想到的,知易行難,知道了上面的一些經驗,並不代表年輕程序員們就能馬上成功,畢竟這需要一個鳳凰涅槃和實踐的過程,但是肯定能幫助有志於於此的年輕程序員們少走一些彎路,限於筆者水平,如有總結不恰當或者不到位的地方,還望批評指正。
I. 程序員如何才能晉升為優秀的高薪架構師
優秀和天賦以及努力息息相關,程序員想要進程為優秀的高薪架構師,那麼首先要有吃苦耐勞的精神,而且要有良好的工作業績和豐富的經驗以及履歷,這樣才能夠在競爭中脫穎而出,得到升職加薪的機會。
J. 程序員往上做是什麼軟體分析師、架構師、工程師有什麼區別
程序員往上做是軟體分析師、架構師這些高級技術人員。要說層級關系軟體分析師、架構師、工程師比程序員高級,這些都是從基礎程序員做起的。
(10)編程結構師擴展閱讀
對於軟體工程師,不太重視學歷,但並不是對學歷沒有要求,重點關注項目的經驗和學習知識的能力,能否利用軟體工程專業知識來解決問題,根據崗位不同,對軟體工程師的要求也有所不同。
具體能力要根據崗位和自己的興趣愛好選定自己的職業規劃方向,一方面要詳細了解軟體工程師的要求,可以關注企業的招聘信息;一方面自己要貯備通用的知識技能。
可以確定的是軟體工程師的前途在未來的發展依然是不斷升溫的職業,比較需要有技術和良好前景的專業。
參考資料
網路—軟體工程師
網路—程序員
網路—系統架構設計師
網路—系統分析師