⑴ 什麼是典型的軟體三層結構軟體設計為什麼要分層軟體分層有什麼好處
軟體的三層結構一般指的是 MVC
M 是model的簡稱是指實體層
V是view的簡稱是指視圖層
C是Controller的簡稱是指控制層
具體可查看網路http://ke..com/link?url=_7Iy6spb037lZr5nJHHv-jGRFhxpmck4PCHz6mrXF_-_6M
MVC的優點
1.低耦合性
視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
2.高重用性和可適用性
隨著技術的不斷進步,現在需要用越來越多的方式來訪問應用程序。MVC模式允許你使用各種不同樣式的視圖來訪問同一個伺服器端的代碼。它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。例如,很多數據可能用HTML來表示,但是也有可能用WAP來表示,而這些表示所需要的命令是改變視圖層的實現方式,而控制層和模型層無需做任何改變。
3.較低的生命周期成本
MVC使開發和維護用戶介面的技術含量降低。
4.快速的部署
使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。
5.可維護性
分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。
6.有利於軟體工程化管理
由於不同的層各司其職,每一層不同的應用具有某些相同的特徵,有利於通過工程化、工具化管理程序代碼。
⑵ 單片機程序裡面,經常聽說底層,中間層,應用層,什麼意思 51單片機也需要這么分層嗎
一般當程序比較大、功能比較繁多,需要進行結構化程序設計的時候,才會進行分層。分層的好處是可以將應用與硬體剝離,當硬體發生變更(移植,設計更改)時只需改動底層以及少量中間層;當需求發生變更時只需改動上層以及少量中間層。
底層一般是直接訪問硬體的介面,以串口而言如寄存器操作函數;中間層一般是在底層與上層之間進行數據及信息的轉換,以串口而言如封包/拆包/消息產生/消息響應;上層一般面向應用,在很少考慮硬體實現的前提下以通用的方式實現所需的功能,以串口而言如printf。
分這么多層是為了不同程度的開發人員可以同期工作的原因。比如說,底層就僱傭一個特別熟悉晶元和硬體的人做,中間層大概要找比較熟悉應用的人來把硬體功能來做擴展,應用層就隨便抓一把人來開發了。
這樣,多個項目可以公用一個硬體層,有兩到三組中間層的支持工程師,然後每個項目各有一組應用工程師就好了。51也可以這樣做,這和效率無關,層做得好,執行效率不會影響很大,開發效率提高很多。
單片機的應用:
1,通用專用:
這是按單片機適用范圍來區分的。例如,80C51是通用型單片機,它不是為某種專用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC介面等功能的溫度測量控制電路。
2,線型應用:
這是按單片機是否提供並行匯流排來區分的。匯流排型單片機普遍設置有並行地址匯流排、數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連接,另外,許多單片機已把所需要的外圍器件及外設介面集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶元體積。
3,控制型應用:
這是按照單片機大致應用的領域進行區分的。一般而言,工控型定址范圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設介面集成度高。 顯然,上述分類並不是唯一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。
⑶ 什麼是模式、框架軟體為什麼要分層
模式:就是解決某一類問題的方法論。把解決某類問題的方法總結歸納到理論高度,就是模式。
Alexander有一個經典的定義,每個模式都描述了環境中不斷出現的問題,然後描述了該問題的解決方案的核心。通過這種方式,可以無數次地使用那些已有的解決方案,無需在重復相同的工作。模式有不同的領域,建築領域有建築模式,軟體設計領域也有設計模式。當一個領域逐漸成熟的時候,自然會出現很多模式。
框架:就是某種應用的半成品,是一組組件,供選用完成的系統。
軟體分層的原因是為了實現"高內聚、低耦合"。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源。
需要注意的是,人雖然在創造性方面有絕對優勢,但是在精確性、持久性、效率、質量上是無法比擬機器的。所以我們希望在軟體系統構建過程中,人和機器發揮各自的長處,也就是說,讓人來扮演架構師的角色,而讓機器來扮演程序施工者的角色。
⑷ 為什麼程序員是一個跳槽比較頻繁的職業
程序員這個行業存在著這樣的現象,有些剛畢業的大學生因為沒有見過世面,一不小心被忽悠到那些處在創業階段的「公司」,拿著實習生的工資干著全辦公室的活,而且經常被老闆拉過去談人生理想,剛畢業的程序員都是涉世不深的小男生,那裡經得過這些老狐狸的忽悠,一招畫餅充飢就在那幻想未來美好生活了,但凡事都得有個度啊,時間久了次數多了,小白也變了,只能跳槽另謀出路。
我覺得跳槽的主要原因有兩個,一個是自身原因:因為大多數剛出來實習的程序員大多數對工資方面的要求不是很高,因為他們也知道,自己現在是屬於學習階段,知道自己的價值是多少,所以一般不怎麼要求工資,但是一旦工資幾個月之後,對整個體系有了較大的了解之後,就要要求有對等的工資,因為在一個技術部裡面每個人的工資都是不等的,這樣會覺得自己有那價值但是沒有那回報,心裡也就有些變扭,也就有了跳槽的想法了。還有一個就是當自己有過硬的技術時,一般也會考慮自己出去單干接項目做。
另外一個就是公司體系問題,在國內外包公司之多,所以大多數的程序員也是在外包公司做,而外包公司的規模參差不,大多數也是在剝削壓榨程序員,各種坑也是居多,管理層體系混亂,這也是造成程序員跳槽的原因
1.互聯網技術風起雲涌,變化之快。公司制定的漲薪制度都有著統一的標准,不會因為某個編程語言熱門而增大漲薪幅度。但是新進員工的薪資待遇往往是根據市場幅度在變化的。 so,常常聽到老員工抱怨,那個新來的誰誰誰,哪哪都不如我,工資卻比我高。
2.據不完全統計,互聯網行業的創業公司從天使走到D輪概率尚不足2%。大量初創公司的關門倒閉,致使一些程序員「被迫離職」。
3.互聯網公司會根據市場的變化做一些戰略調整,內部轉崗已是家常便飯。比如本人之前所在的項目組,所做的產品是web端的直播平台。後經市場調研,公司打算將重心放到移動端,部分web組的老員工也就轉崗到了移動端小組。 我想說的是,如果企業內部的調崗不符合個人的職業規劃,那麼也是程序員跳槽的一大原因。
不邀自來,本人目前從事嵌入式軟體開發,也算是程序員大軍中的醫院,下面來回答一下這個問題:
按理說,薪水高,工作環境尚可的工作一般都是很穩定才對啊,但是據一份調查發現連Google,Amzon這些大廠的程序員的平均在職周期都只有1~1.5年,可見程序員頻繁跳槽不是我國或是某個企業特有的,一線國際名企都如此別說國內小廠了, 那麼為什麼造成程序員為什麼會如此平凡的跳槽,我們來分析一下:
IT產業發展迅猛,市場需求旺盛,程序員有更多選擇
雖然我國的計算機行業起步很晚,但這不影響IT產業在我國的迅速發展,發展就需要相關內容的人才,同時我國計算機的培訓起步也不是很早,早起的人才主要是理論研究並不都是真正寫代碼的,供求關系不平衡,導致程序員在就業市場上比較搶手,各行各業一旦某種人才緊缺自然導致有價無市的感覺,所以,各廠想盡辦法招聘讓程序員,誘惑多了選擇自然多了,選擇多了跳槽就頻繁了,這是見怪不怪。
IT行業存在一種「倒掛」的行業怪象,程序員更願意跳槽
「 倒掛 」是指在某個行業內部,由於行業的特殊性,從業人員的薪酬待遇和業務能力以及技術水平不相關的現象,這種現象尤其在程序員行業存在,一個剛大學畢業的新鳥在待遇薪酬方面可能秒殺一個已經工作四五年的優秀程序員,換誰也受不了,沒有工作經驗還需要人帶的新人工資居然比帶他的人高,有些企業寧願花5000塊錢新招一個新人也不願意多給老程序員多加1k來完成同樣的工作,坐等通過技術積累來加碼自己的報酬的希望破滅後,那些受到不公正待遇的程序員通過跳槽去漲薪了,在猿圏有句話更能說明這個問題「People who stay in one spot earn less than those who move(經常換工作的人比那些安分守己的人賺的更多)」。
公司沒有給程序員提供良好的職業發展規劃
雖說職業規劃都是自己為自己規劃,但是自己的規劃能否按計劃順利實施很大程度上取決於公司是否為自己的員工有良好的職業規劃,顯然,一家沒有為程序員薪酬增長和職位升遷做過精細規劃的公司,讓程序員不在有安全感或是讓他們沒有期望,換做誰都得跳槽另找下家。
程序員厭倦了代碼工廠式的工作,想嘗試新鮮的東西
計算機行業是一個日新月異的行業,此外程序員是一類喜歡挑戰新技術的特殊人群,很多公司的業務模式單一或是業務穩定了,程序員的工作變成流水線的單調模式,他們早已厭倦了日復一日的代碼搬運工的工作,一旦嘗試新的技術並且一改往日的單調與無聊,那麼它們會在合適的機會換個領域,此外,程序員是青春飯行業,代碼工廠式的工作會讓他們沒有安全感,因為這會讓他們失去市場競爭力。
從業人員層次不一,淘汰提高了程序員跳槽的幾率
IT的迅猛發展,在巨大市場需求的推動下,編程行業門檻編低,導致從業人員良莠不齊,可能一時的沖動或對自身判斷不足而走上程序員之路,很多人發現程序員並不是媒體所報道的光鮮亮麗,工作壓力大,無休止的加班都會使一些不適合做程序員的人淘汰出局,這在職場非常常見,尤其是剛畢業的新人,這就外界感覺程序員跳槽更頻繁了。
提到跳槽比較頻繁的職業,我想除了題目中提到的程序員之外,應該還有餐飲企業的服務員,餐飲企業服務員跳槽基本就是三種情況,一是薪資低,二是工作好找,三是工作時間長。
我們再來看看程序員跳槽,其實也不外乎是這三個原因。
一、薪資低
看了這一條,你可能會說,程序員薪資怎麼會低,剛畢業的就能拿到個7、8千塊,如果是碩士畢業就拿個1.5萬一點兒不奇怪。
這里說的薪資低不是指薪資行情低,而是每個人都覺得自己的薪資低,對於程序員來說薪資水平差異很大,但人們往往並不關注工作本身,或是人的能力而關注的是自己怎麼比別人少這么多,但在本公司可能調薪並不是件簡單的事,所以只能通過跳槽來實現工資的上漲了。
二、工作好找
程序員現在可以說是一個熱門崗位了,從業人員比較多,但是需求量也很大,如果你是個程序員,簡歷更新之後,估計每天5、6個面試邀約電話都算少的。因為工作好找,所以工資勢必也就水漲船高,誰也不怕裸辭,工資要求不高,只漲個20%今天離職,估計3天後就能有新工作。
三、工作時間長
程序員工作時間長是大家有目共睹的,有個說薪資高,工作時間長很正常,但人的慾望總是無止境的,沒錢的時候想要錢,有錢的時候想要時間和自由,薪資支撐的滿意度最多也就能維持半年,長時間高負荷的工作會讓人產生厭倦,這個時候就會覺得自己工資的性價比不好,要麼找更高工資的,要麼就找沒那麼累的。
因為現在部分公司漲薪速度比較慢,跟不上市場的價位。
打個比方:
如果你有拼搏精神,願意在下班後精進技術、學習,
等幾個月後技術成熟了再跳槽,可以一下子就翻倍,甚至直達15k。
但是要正確地跳槽:
第一,找一個符合自己期望值的平台,讓自己的價值和技術得到最大的發揮。(這里和薪資沒有關系,最重要的是適合自己)
第二,不要只為了加薪而跳槽,不斷地去一個新地方,自己的職業生涯也在不斷地清零,不符合長期的發展。
引起程序員跳槽的原因有很多,但是在所有的崗位中程序員的跳槽頻率確實高於其他工作崗位,一般程序員跳槽的原因有這么常見幾點:
第一、由於互聯網是一個很不錯的創業方向,很多人有著不錯的創業項目,然後開始組建自己的技術團隊,這時候就需要很多的程序員組成產品開發,而由於程序員的工資支出較高,往往在產品還沒有進入收益期的時候公司很難支撐下去,或者缺少產品推廣資金,這時候程序員就會面臨跳槽的可能。
第二、在成熟的互聯網企業中,由於項目的開啟,而組建新的技術團隊,隨著產品上線,企業將更多的精力投資在產品的運營上,而對做技術的程序員來說每天的工作都是很清閑,失去了項目研發期的忙碌,讓程序員感到無所適從,從而引起跳槽。
第三、就是大家常說的一點,不跳槽怎麼加薪。這也是程序員跳槽比較普遍的一個問題了,很多人由於不滿現在的薪資待遇,但自己卻有了很多的項目經驗,所以選擇找下家公司,通過以往的項目經驗來提現自己的價值,從而達到自己想要的薪水,這也就是程序員找工作的時候,工作年限時間是一個因素,更重要的是一共參與開發了多少項目,並且更具項目的大小代碼量是一個較為重要的因素。
第四、就是有些程序員是追隨技術的,他們認為在軟體開發的外包企業中雖然每天都有繁忙的項目要完成,但是對自己而言卻是千篇一律的重復性代碼的敲寫,甚至是直接使用企業自身比較完善的庫或者框架完成程序的開發,覺得對自己的技術提升沒有太大的幫助,從而選擇跳槽。
第五、接受別人的老項目進行改造,由於原先的程序員並沒有留下太多的技術文檔進行參考,所以每天都在糾結一句一行的代碼,再就是程序開發的很多思維思想並不清晰,這就讓程序員很糾結了,所以在與老程序相愛相殺了一兩個月後,實在受不了上級的催促以及難以完成代碼的整理重構而離職,放棄。
歡迎程序員的你在評論中分享自己的跳槽原因和經歷
作為一個在這個行業呆了十幾年的老人感覺上程序員這個職業算是跳槽頻非常高,據不完全統計程序員流動性不低於百分20,相比別的職業已經算是很高的了,為什麼程序員這么容易跳槽,由於程序員這個職業特殊性決定的,是什麼推動了程序員這么多跳槽的勇氣。
1.就目前中國軟體行業的發展,雖然說程序員的數目越來越多,但高手卻是急缺,主要還是前期積累不夠,再過些年可能會稍微改觀些。技術高手的數量在上升但是軟體公司的數量以及業務需求的增加更快,所以給人一種很直觀的感覺,很多大公司是一直處於缺人狀態。
這種狀態催生了程序員的跳槽,有更好的待遇,為什麼不選擇跳槽,這也屬於人之常情,有些程序員離職也不是因為呆的多不開心,而是外面的誘惑實在太大,出來混還不是為了多掙點錢,有待遇更好的就走人。
2.程序員這個職業本身來講屬於重度的腦力勞動,說的再誇張點就是吃青春飯,畢竟年齡大了競爭優勢在減化這是不爭的事實,趁著自己還年輕還能拼的時候,去掙錢多的公司,其實還存在一種大家容易忽略的現象,整天的加班加點很容易造成一種很壓抑的心情,換個公司換個環境放鬆下,可能會人覺得有點矯情,但現實中的確存在很多,或者在薪資相差不大的情況下,換個加班稍微少點的公司,這都是換公司的理由。
3.現在很多招聘網站特別是一些獵頭網站滋生了,程序員的不穩定性,把程序員當作商品來運作了,很多獵頭只要在網上搜到合適的人,就開始千方百計的運作,真有點經紀人的感覺,這種無形之中增加了程序員的不穩定性,而且也在無形推動了這個行業薪資的上漲,其實很多人值不了那麼多錢,但物以稀為貴,現實就是這種狀態。
目前市場上講,程序員的薪資的兩極化越來越嚴重,水平差點的大家都不想要,水平高的大家都跟打了雞血一樣爭搶,很多人覺得程序員這個職業已經不行了,主要還是沒爬到食物鏈的頂端,把技術搞得扎扎實實的大把機會等著你。
希望能幫到你。
因為對其他的行業不太了解,所以也沒辦法對比出來程序員跳槽是不是比較頻繁。
我身邊的程序員,有在一個單位工作十多年的,有像我一樣平均三四年換一家單位的,也有跳槽比較頻繁的,平均每年都會換一家單位。
能頻繁跳槽,我分析不外乎幾點:
崗位多 特別是在北上廣深這些IT行業比較發達的城市,程序員真的是不太愁找工作(工作能力不錯的前提下),真的可以說,在一家單位做的不爽了,直接在招聘網站上把簡歷打開(招聘網站上的狀態設置成考慮跳槽的狀態),就會有不斷的有面試電話打進來(當然大多數主動打電話的單位都是外包,哈哈)。
我跳槽的時候,都是主動給心儀的公司投遞簡歷,基本都是可以得到面試機會的,而且通過率也挺高。
大部分IT公司,每年漲薪都不是很多;而跳槽一次的話,至少得漲個30%吧。
我在第一家單位的時候,起薪3K,每年漲500-1000,是不是很可憐。第一次跳槽,工資就從5K漲到了8K。
第二家單位第二年就漲到了12K,但是從此以後,就是每年漲1K的龜速了。第二次跳槽的時候,月薪雖然漲的不是特別多,但是按照年薪計算的話,應該漲了有60%以上了。
當然也有漲薪比較快的單位,我的一個朋友在一個神奇的網站工作,研究生畢業工資一萬左右,現在工作有三年了,剛剛漲到了20K。如果你在這種單位,好好珍惜吧。
在外包公司的,想去一個非外包公司,跳槽。
傳統行業的,想去互聯網公司尋求技術發展的,跳槽。
互聯網公司的,想去傳統行業養老的,跳槽。
小公司的,想去一個大公司,跳槽。
大公司的,想去初創企業當個技術合夥人,跳槽。
......
歡迎大家在評論中分享自己的跳槽原因和經歷,還有說說跳槽漲了多少錢,哈哈。
幹得不爽,只好選擇辭職。作為一名老程序員,在一家創業公司做了三年多互聯網開發,我現在終於解脫了。三年中加了兩次薪水。第一次700,第二次770。第二次年頭加薪,我要求提高500,老闆說董事會規定一次只能加那麼多,然後要到6月再滿足我。於是到了6月份,我發現並沒有提高500,問之,說到7月份加。快到7月份,有一天晚上項目經理要我留下來加班,我餓著肚子一時間也搞不定手上的任務,就擅自回去了。結果,老闆知道了就取消加薪計劃。5月份以來公司制度越來越嚴格,首先是安裝攝像頭全日監控員工行為,其次規定上班時間不準使用手機,除非工作需要;再次,除了查技術資料,瀏覽各大網頁需要申請;制度下來後,公司天天像在牢房裡渡過,這樣的工作環境,請問大家會喜歡嗎,能否繼續堅持?我是走了……
為什麼程序員是一個跳槽比較頻繁的職業?
因為好的程序員確實值錢,連帶著不那麼好的程序員也相應的值錢了。
其實是現在這個行業導致的,互聯網的世界裡,就算是一頭豬站到了風口上,也能飛的比大師兄還快。
不是你不明白,是我變化快程序員本身是干技術活的,技術迭代比較快,所以一般程序員都有較強的自我學習能力和自我迭代能力,隨著時間的延續,本身的能力水平提高了,那麼肯定期望與之匹配的待遇,但往往很多公司的迭代速度是很慢的,承擔不了程序員這種高薪成長,所以往往滿足不了程序員的需求。
那麼只能跳槽啦!
老用戶與狗不得辦理
還有就是,往往軟體公司也好,互聯網公司也好,很多老闆都喜歡招新人給高薪,但是老人年年不漲薪,最後的結果就是老人紛紛離職,這種情況也造成了外界看來程序員頻頻跳槽的現象,但往往都是情非得已啊。不給漲工資啊。
那麼只能跳槽啦!
跳一跳更 健康
老公司的暮氣沉沉和新公司的造氣蓬勃形成了鮮明的對比,在老公司任勞任怨,每年漲薪不超過10%,但是一跳呢,工資普遍double,這種風氣形成並且傳播,明眼的程序員肯定待不住了啊。
那麼只能跳槽啦!
其實苦的是HR,老闆不給力,還讓留人,你告我咋留!!!!!
⑸ 為什麼有的程序員的代碼結構混亂
程序員都有一顆工程師的心,所以當他們到一片新的場地想做的第一件事就是,將舊的一切推倒重來。是的,他們決不會滿足於簡單的增量勞動。
或許這種微妙的心理定位可以解釋:為什麼程序員進入新項目組後寧願丟掉舊代碼重新寫,也不願意修修補補。他們認為舊代碼簡直一團糟。
但是,事實上真是這樣嗎?你之所以認為舊代碼一團糟,其實是由編程的一個基本定律決定的,那就是:寫代碼容易,讀代碼難。
為什麼你覺得舊代碼異常混亂?因為讀代碼更難。
這大概就是代碼Reuse難以實現的原因。 這就是你組里的每個人都喜歡用不同的功能將分割的字元串轉換成一個數組。比起猜測舊的功能是怎樣實現的,重新寫一個自己的功能要簡單和有趣多了。
作為這個公理的推論,你可以問問身邊的程序員他們正在奮戰的代碼怎麼樣?「簡直是一塌糊塗!」他們肯定會這樣說。「我簡直想推倒重來!」
為什麼認為代碼這么糟糕呢?「額,看看這個功能,竟然有兩頁長!完全不知道這些東西為什麼在這里!完全不知道這些API是干什麼的。」他們會這樣回答你。
漫畫:讀別人代碼是一種怎樣的體驗?
曾經,Borland的創始人 Philippe Kahn當初就是向記者們吹噓:Quattro Pro會比Microsoft Excel要好用得多,因為它是從頭開始編寫的,全部都是新的源代碼!
但是,認為新代碼比舊代碼好簡直就是荒謬。舊代碼是已經運行過的,測試過的。無數的bug在被發現前都上線運行過,發現之後程序員們可能在花了好些日子才修復了這些bug。這種修復可能是一行代碼,也可能是幾個字元,無數的時間和精力都花在了這些bug修復上。
當你決定拋棄這些舊代碼從零開始的時候,你也丟掉全部前任努力的結果。
新代碼一定比舊代買好?NO,重寫可能會帶來更大的風險。
對技術領導者來說,重寫項目的代碼也是一個異常艱難的決定。因為從公司層面說,重現代碼甚至會威脅產品的市場競爭力。一旦決定重寫代碼,那麼與競品相比,你可能落後了2~3年——在軟體行業,這時間可夠長的。
你理想中的新代碼會帶來產品功能的提升▼
但事實上,即便重寫的新代碼可以實現舊代碼的所有功能和需求,但是為產品帶來的市場競爭力只有邊際提升。因為重寫用的新技術、新語言、新框架並沒有給產品帶來質的飛躍。
更不用說在重寫的漫長過程中可能會遇到一些意外情況,比如:
1、缺錢:資金鏈的斷裂▼
2、缺人:核心程序員離職
最終導致效果不佳:達不到原產品應有的所有功能和需求,白白浪費了時間和金錢,也丟掉了市場競爭力。▼
所以重寫代碼意味著,你在把自己置身於非常危險的境地,可能幾年後你也寫不出比以前更好的代碼。你只是花了一大筆錢把已經存在的代碼又寫了一遍。
當你覺得眼前的舊代碼很爛時,該怎麼辦?
你覺得舊代碼寫的很爛,那又怎樣呢?它們已經上線,已經在實際運行中經受住了考驗。所以當你發現前任留下的代碼亂七八糟的時候,不妨冷靜下來,從以下三個方面入手理解代碼、改善代碼:
1、代碼的結構有問題
如果一段網路代碼突然彈出了自己的對話框,應該是UI代碼需要被處理。這些問題可以被解決掉,你要一次次小心地移動代碼,重構,改變介面。還需要一位細心的工程師立馬仔細地檢查這些改變是否有問題,從而不打擾到其他人。事實上,甚至比較大的結構變化也可以不扔掉代碼來完成。
大牛程序員Joel Spolsky回憶說,曾經在某個項目中,他和他的團隊花了好幾個月重新架構在一點上:把代碼動來動去、清理、創建有意義的基類,並創建了模塊之間的完美介面。但是他們始終非常小心翼翼,並沒有產生新的bug、也沒有丟掉任何舊代碼。
2、代碼的效率不高
曾經,Netscape的渲染代碼被傳非常緩慢。但事實上,這只會影響該項目的一小部分,這部分是你可以優化甚至重寫的。你完全不必重寫全部代碼。優化速度的1%工作量,會讓你獲得99%的爆炸性提高。
3、代碼寫得很醜
有些代碼真的寫的很醜,比如Joel曾參與一個項目,開始用下劃線做開始的成員變數約定,但後來改用更標準的「M_」。所以一半的功能用「_」開始,一半用「M」開始,這看起來真的很醜陋。但這個問題5分鍾就能解決,而不用從頭開始寫全部的代碼。
最後,你要記住,從頭開始再寫一遍並不意味著你會寫出比以前更好的代碼。因為你沒有參與到上一個版本的創建,所以你其實根本就不算有經驗。一旦你准備推倒重寫,你可能會再犯一遍版本一犯過的錯,甚至會產生更多的新問題。
一個總結:
面對糟糕的舊代碼,Keep Calm & Carry On !
在大型商業項目中,推倒重來是非常危險的行為。當然,如果你是在做實驗,想到新演算法可以隨時重寫。
⑹ 如何辨別一個程序員水平的高低
1.自己介紹項目,看對項目的提煉總結能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技術深度;
3.設計模式提問,看有沒有學習方法;
4.語法基礎問題,多線,分布,安全等問題,看知識面廣度;
5.智力問題,看反應能力,分析問題思路等
上述五步基本可知是否是一個好程序猿
計科專業從事軟體開發十幾年了,主要在瀏覽器內核領域研究的比較多,最近在研究伺服器後台方向,辨別程序員水平高低主要看做出了什麼產品,如同現在的程序員主要是項目經驗,簡歷上寫的一堆項目經驗都是面試的時候主要提及的問題。經常在面試中會問兩個關鍵點:一個是做過什麼項目;一個是在項目組中承擔什麼職務,畢竟參與過和做的多少程度是不一樣的,這些都是可以通過一些具體的細節檢測出來,問題越具體越是容易看出水準,具體的東西不是能夠編造出來的。
有很多技術公司直接不通過筆試,僅僅通過簡單的面試就確定工資水準了,最簡單的測試程序員水平的直接用筆試的方式,筆試可以把一些細節量化,盡量的細節化也是能測試出程序員基本功的,但這種基本用來測試初級程序員的,很多高級的程序員看到有筆試直接就抬腿走人了,因為有些程序員在一個方向做的時間太長了,很多基本功都忘得差不多了,所以筆試可能不過關,現實中很多程序員筆試不過關,面試還可以,也一樣可以做項目說的就是這類人,起碼這算是非常優秀的程序員。
有很多公司採用谷歌的方式,直接採用上機寫代碼的方式檢驗程序員水平,這種方式比較直接,但在現實中可能消耗的時間以及面試官的精力,目前只有極少數的公司用這種方式,國外的公司用這種方式比較多,這種看基本功非常有效。通過代碼可以看到編碼習慣以及演算法的設計上,都能直接看的出來。
普通的程序員直接看項目的經驗,高級的直接看做過的產品,特別是產品主要設計人員,這就是程序員內心的自豪感,畢竟作為一個程序員起碼要有自己設計開發的產品,也算是不白做一個程序員,在程序員的職業經歷中如果能經歷過一個產品從開始設計的初稿到最後推向市場,如果是完整的經歷,將是一種巨大的財富,只要經歷過一次都會對產品設計有一個比較層次的認識,這種能力需要靠直接的面試語言表達來展示出來,談下對產品的認識以及產品穩定性性能等方面的總結,能到這個層面起碼是高級軟體工程師的級別。
當然有些程序員內在的東西不是靠語言或者寫代碼看出來的,因為一個優秀的程序員不僅僅是代碼能力以及框架能力,還有幾個非常重要的能力
程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
希望能夠幫到你。
自認為不是一個好的面試官,因為我認為在這么短的時間內,准確地衡量出來程序員水平的高低是有比較大的難度的,並且我有多次看走眼的時候,面試的時候覺得能力還不錯,但是入職工作了一段時間之後,編程能力不忍直視。
工作之後接觸一段時間,我會從這么幾個方面觀察他們,以判斷技術能力的高低和發展潛力。
能不能出活兒、能不能debug
能不能把開發任務按時按質量地完成,當然是最主要的衡量標准了:
解決問題的方法
在開發過程中,難免會遇到沒有見過的問題,有些程序員遇到問題無從下手,而優秀的程序員,自有一套解決問題的方法。
分析問題、流程設計的思路
有人會認為,程序員的主要工作就是敲代碼,上班大部分時候都是在敲代碼,其實並不是這樣:
總結問題和改進問題的能力
好的程序員,相同的問題不會犯第二次,差的程序員,總會在一個問題上栽跟頭:
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
不請自來,一介碼農路過,留下些看法。
程序員主要是有四種綜合能力,也就是debug 能力、 performance分析、 保護性編程和 投入產出比。
僅僅獨立完成日後必然成高手?在這里不能說一棒子打死,至少對於很多人來說,能獨立完成是沒什麼問題的,有的是因為對業務熟悉,有的是真的基礎扎實。但怎麼說呢,程序員和瀏覽器打交道是最多的,現在這個互聯網時代,遇到的大部分問題網路都是可以解決的,也就是普通程序員 + 網路 = 超級程序員。 但很多人也沒明白具體的原理,甚至都是這個項目抄抄那個項目抄抄的,久而久之雖然解決了平時的業務,但進步的空間卻很少,甚至止步不前,寫出來的代碼也可能存在很多坑,所以,僅僅能獨立完成任務的話,離高手還有比較遠的一段距離。
如何辨別高手程序員?也就是結合我們一開始列舉的那四個能力進行判斷。不同級別的程序員,在那綜合能力面前,強弱也是不同的。例如在奔潰的或者其他性能調優問題上,即使是面對大量復雜的代碼,在信息不全的時候也會一步步的分析,抽絲剝繭縮小范圍,最終定位根本原因
,並且最終給出一個好的方案。
如何成為高手程序員?
當然還有看他摘了帽子是否禿頂這樣的笑話,就再不贅述了。
第一階段(黃金):會用編程語言實現需求,比如現在的業務系統,都會找一些會搬代碼的人來拼工作量,也就是能自己獨立基於搭好的框架實現crud常規操作。
第二階段(鉑金):除了crud,還會有一些自己踩過坑的經驗,知道如何處理一些常見問題,或者可以基於搜索引擎快速解決一些異常情況。
第三階段(鑽石):能解決一些疑難雜症和會通過debug部分源碼類庫查看到這些疑難雜症是如何引發的,並通過編碼解決這些問題,還能進行一些局部的性能優化,類似某個系統介面緩慢可以單獨去優化。
第四階段(星耀):會基於整個系統進行設計和規劃,根據業務特性選擇合適的框架,從源頭控制開發遇到問題的頻率,可以自主的搭建框架並完善機制,了解各個組件工作原理。
第五階段(王者):小說裡面總是說練武功的永遠比不過創造武功的,同樣的道理,用框架的也往往不如寫框架的,所以寫框架的這類人單獨分層。
第六階段(榮耀):其實這個階段不應該列入進來,因為這類人往往不編碼的,只是給出思想;像Hadoop這種框架就是基於人家發表的一些論文(bigdata)進行編碼實現的,這類人注重的是思想和演算法,區塊鏈,大數據,雲計算等等概念的創造和理論的支撐是這類人提出來的,這些人才是真正影響行業走向的人。
程序員的水平高低,不是靠語言或外在表現就能看出來的,不是看他會多少技術、參加過多少項目、寫了多少博客,而是看他在實際業務場景中解決問題的能力,尤其是面對一些特別復雜的問題,或在高強度、高壓工作狀態下解決問題的能力與態度。
技術可以通過學習掌握,但是解決問題、定位問題的能力卻不是一蹴而就。大家可能會說,「解決問題的能力」這個太寬泛了吧,可以更具象化嗎,有具體的測量方法嗎?簡單整理了以下幾點供參考。
會寫出滿足需求的代碼,早就不是評判程序員水平的標准了。代碼編寫既要滿足業務需求,同時還要考慮後續的軟體維護,說得通俗些,既要自己爽,也要別人爽。一個優秀的程序員,會致力於寫出更簡單、更效率、可讀性強、擴展性強的程序代碼。
程序員在日常工作中,需要理解各式各樣的業務需求,所以這就需要程序員具備一定的邏輯思維能力。可以說,邏輯思維是程序員的靈魂,因為每一行代碼都是程序員邏輯的體現。
項目著急上線,發布時出現問題?
業務高峰時段,系統宕機了?
業務催、運營催、用戶催、老闆催!
各種形態的bug,各種著急的心情,背後無數支眼睛盯得內心慌慌......
這些都是一位合格程序員所需要面對的日常。不同的程序員,在解決問題的方法、效率、質量等方面,都各有千秋。一個經驗豐富的程序員,能夠扛住各方壓力,在復雜條件下找到核心問題,通過抽絲剝繭的分析來找到產生問題的原因,並快速進行應對處理,事後及時復盤總結,減少同類問題出現的概率。
隨之互聯網的發展,越來越多的人湧入程序員這個賽道,競爭日益激烈,加之新技術層出不窮,更新迭代快,程序員所使用的語言、框架、模式都會發生天翻地覆的變化。如果不主動學習,你很快就會被落伍淘汰。
這種其實在面試過程中能體現出來,溝通主要是技術溝通,以及和客戶之間的溝通,所有技術都不是閉門造車就能搞定的,溝通能讓事情推進起來更加順暢,包括和產品經理之間的流暢的溝通也顯得非常重要。程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
線上出bug了,第一時間響應、處理;
團隊項目進度緊張、人手緊缺,主動補位;
又或者,在項目推進過程中如果只是關心自己模塊內容,對於整個項目置之不理,只守著自己的一畝三分地。
隨著時間軸的拉長,你會發現,有此f技術能力不是最好的,甚至不如你的小夥伴,最後做到了技術主管或經理、甚至更高職位,這裡面除了技術實力,還有一個叫「責任心」的東西。
結束語
判斷一個程序員的水平高低,核心是其解決問題的能力,而解決問題的能力養成,需要扎實的底層基礎來支撐,要綜合其代碼質量、項目經驗、框架能力、邏輯思維等等多方面,不能單看某一方面。
而對於1-6歲的程序員來說,想要成為一個高級程序員,變得越來越優秀,唯有持之以恆去學習、積累、實踐、修煉。
----end----
一:50歲的時候,頭發還是黑色的濃密的。
二:賺到的錢能保證家人快樂的生活。
三:當公司不要你的時候能成功轉型。
其他的例如編程經驗、寫代碼厲害啊什麼的根本不值一提。
這就是程序員的面試嘛 :-)
(1)是否能熟練使用所用編程語言的主要功能;
(2)是否知道用合適的數據結構解決問題;
(3)是否知道基本的演算法,並且用這些演算法解決問題;
(4)只看少量代碼的話,從變數命名和程序結構一般能夠判斷是否是新手;
(5)給出具體問題,能夠用程序解決,能考慮到所有的邊界條件;
(6)考慮程序的可擴展性,可維護性;
再往高一點走,就需要
(7)面對模糊的問題能夠分析並且找到細節和具體的需求;
(8)知道利用已有的庫,架構和工具等來解決新的問題,而不是什麼都自己實現;
(9)能發現並改進已有程序中的瓶頸;
(10)對整個大項目的程序架構有很清晰的了解,知道相互之間的依賴,以及知道為什麼採用這樣就架構;
(11)給一個大的項目,能夠對整個項目的程序架構和組件進行合理的設計,考慮並行性,低延遲,大數據量等各種需求和應對方式。
帶領團隊已多年,項目數十個,對判別程序員水平的高低,我有自己的看法,歡迎大家一起交流。
1.代碼質量。
優質的代碼,首先是經得起考驗。靜態分析工具過一遍,無錯誤,無警告。當然警告部分需要人工重審,因為靜態分析工具不一定完全正確。過了這一關,重要的還須過測試關,少Bug或無Bug的代碼,才是好代碼。優質的代碼帶有技術氣質和藝術氣質。閱讀起來,有一種賞心悅目的快感,即工整美觀,干凈利落,又蘊含著理論常識,運用技巧,精準到位。
2.表達能力。
3.文檔能力。
文檔形式包括但不限於PPT,文字,圖表,音視頻。文檔內容包括但不限於API說明,工具手冊,項目事項,技術論述,陷阱總結,方案展示,指導手冊。文檔要求必須是滿足公司或部門的規范和格式,否則五花八門的,不利於交流和傳承。
以上3點,是我量化判斷程序員水平的標准,僅供參考。相比水平,其實我更看重程序員的態度,執行力,時間觀念,自學力等等,也是很重要的團隊作戰能力,也可以說是程序員水平的考量吧。
謝謝大家。
⑺ 一個標準的程序員,它的代碼應該是怎樣分層次的
每個代碼的層次都是不一樣的,都是非常縝密的,除此之外,不光是要會寫代碼,還要成為一個好的程序員才是最重要的。
程序員,隨著計算機和軟體行業的發展,基數越來越大。如何在茫茫的程序員中脫穎而出呢,來看看作為一個好的程序員的標准你都佔了幾條?
1.經常和其他的人交流
什麼時間做什麼事情,做事情按照一定步驟來,好的程序員從來不會在時間緊任務多的時候手忙腳亂。
7. 保持謙虛
技術永無止境,技術范圍很廣,技術水很深。即使在一個領域是專家,到了其他領域還是需要其他人的指點。好的程序員總是把姿態放低,虛心請教。