❶ 創造力、好奇心和交流技對一個程序員來說有啥用
創造力就是創新吧 當然重要了 不然那創新工場建來幹嘛 沒有創新 哪來的微博 哪來的facetime。 好奇心就是打破沙鍋問到底的態度唄 理解要透徹 這樣才能舉一反三。 交流不止對程序員來說重要 基本是個人都需要交流 這我就不細說了。
❷ 程序員如何才能有獨立開發項目能力
難!我本身是軟體工程師,我從業都十多年了,就拿網站來說吧,比如你獨立開發一套PHP或者是Java的網站,通常,美工+WEB前端+後端開發+需求分析,設計友伏的能力,相當於,你一個人,頂一個團隊的工作量,連項目經理都兼任,維護客戶都兼任!因為你得分析需求啊。
如果Java更難了,相當於美工(1人)+WEB前端(1人)+後端開發(3-7個),如果是APP的,還得加安卓+IOS工程師+項目經理。
如果是C++,巨難,雖然我也可以獨立開發。問題是,太耗費精力了。特別是嵌入式,其實C語言都有幾種,Java也有幾種,其他人,半桶水,不專業的。
最終,你要給客戶看到的效果!如果你美工 不行,後端不得,只要有一個嚴重的短板,你就不勝任真實的項目獨立開發的能力,自娛自樂可以。
寫驅動,談何容易,全世界好枝攜,不超過1000人會寫底層的驅動。
第二個,我看到你說,做嵌入式的是學c++還是java ,我java比c++好一些,說明,你基礎不行,雖然是科班出生,科班難出人才,除非自學成才的天才例外!如果天才,你這個年紀的,或者大一點的,都能獨立開發了。特別是美工,需要天搭凳賦的!編程也是。需要悟性的,才有創造力,如果死讀書的書獃子,沒什麼創造力的。少數例外。
❸ 程序員提升開發技術需要注意哪些
一、不提升非技術技能
我們認為非技術技能是項目成功的主要因素。這些非技術技能也可以稱之為「軟技能」,總體上來說,它已經被公司證明為能夠駕馭企業和客戶之間的長期商業關系,因此也能決定公司的成長發展路徑。一些關鍵的軟技能指標包括:
a.紀律——這是最重要的特徵之一,缺乏紀律,最終會讓這個開發團隊在開發能力上「缺乏自信」。解決這一問題的矯正方法就是每天制定詳細的to-do清單:兌現你的承諾、完成你開始做的事情、避免多重任務,因為這些往往會讓你的生活產生混亂。
b.顧客的聲音——不把客戶置於決策的核心地位只會跟你們業務的原始目的相沖突。如果客戶不高興,即使你擁有世界上一流的專業知識和資源也不會起什麼作用。保持符合客戶期望的解決方案、及時交付才能體現出項目的真正價值。
c.溝通——尤其是當客戶和供應商並不在同一地點的時候,明確而及時的溝通是填補服務空白的極好措施。主要集中在這衡團三個方面你就能克服問題——進行主題討論、清晰表達、乾脆簡潔。
d.了解需求——在整個開發生命周期過程中,決定成功和失敗的之間的一個至關重要的區別將會給人留下深刻的印象。通過最初的頭腦風暴法了解問題狀態,以及後續的交貨程序,這其中都要和客戶完美配合。只有這樣,客戶才會贊賞你的工作,給你好評。
二、對編碼不理智
古人雲:善泅者溺,善騎者墮。但估計絕大多數的程序員都認為自己的編程技術絕對的牛。而同樣真實的是,每一個代碼,讓不同的程序員去實現的話都會不可避免地發現它所存在的缺陷。所以說,只有通過在一個項目上的合作,程序員之間必然有的摩擦才能證明誰是最好的。健康的競爭是好事,但它不應該成為一個本來可以成功的項目的負擔。
另一個創意阻礙是無法將預定義的模板使用在對你有利的開發項目里。幾乎所有的編程語言有一個很好的在線/內置的代碼片段存儲庫,可以咐閉橘修補代碼,防止重新編程。然而,如果因為不理解需求或缺乏接觸各種可用庫/模板的話,這就意味著程序員最終會無意間將一開始就創建的代碼付之東流。這不僅增加了開發時間,也提高了總體成本。另外一點就是,發布了的代碼已經經過了質量檢測,所以只有將它用作模板才能發揮它更大的價值。
三、不一定什麼都要被理解
如果你是剛調到這個團隊來的編程人員,對於手頭的工作並不是很熟悉,那該怎麼辦?肯定是先看一些前任留下來的工作計劃,要是他寫的詳細倒也沒什麼,如果寫的不詳細,估計會讓你更加的撓頭。
因此,推己及人,在需要交代的工作上,最好是把任務寫的盡可能的詳細。這么做也是非常現實的原因:能夠把編程問題解決掉,最好是保證使用解釋性的語言和英語發音來表示變數。一些基本的指針可以讓你的程序更容易被理解,包括:
a.把所有參數、引用、方法和變數名稱盡可能接近英語表達。保持文件名簡短但有助於理解的功能。
b.使用++包裝文字是一個好辦法,能讓代碼和注釋更加清晰。
c.將編寫的程序保持在一個連續的流程上,尤其是在使用OOP基礎上的語言:C、C和C++。
d.對於不同的代碼塊使用不同的描述名稱。
四、不使用經過驗證的工具和技術
程序員的好壞從他使用的編程工具和調試工具上就能看出。在異常情況的跟蹤上,下面就是程序員經常會出現的常見錯誤。
對一些可能會對其它代碼有影響的常見案例進行捕捉,處理這些比較常見的異常情況(而不是特殊的異常)意味著無意中除除掉了會抑制整個程序的殘留部分,因此並不會影響他人的代碼。
也許程序員可能帶有惡意的意圖來捕捉所有的異常情況,但即使是捕捉到了也不實施採取措施,這就是常說的「虛假安全閥」,這種異常處理手段是態轎對整個軟體的穩定和安全的一種妥協方式。
五、較差的控製版本
在任何涉及多個團隊的項目里,當談到版本控制的時候不去介紹使用最佳實踐都是一個十足的罪過。版本控制的目的是確保由一個人執行的編輯或修訂不去影響另一個人的工作。
版本控制不僅有助於將由兩個或兩個以上的程序員的編輯工作合並到一起,還有助於跟蹤程序的更改歷史。所以說,任何開發團隊都應該做一些好的改進措施以確保強大的版本控制,這其中就包括:
為每個解決方案創建一個「邏輯單元」
給解決方案制定描述性的名稱
確保你所使用的都是最先進的文件
頻繁的向團隊分享你所做的各種改變
六、擁有最新信息的個人代表不了團隊
一旦有新員工加入,就立刻強制安排他參加專業培訓,讓他知道他的角色是用來干什麼的,盡早產生創造力。例如一個測試人與加入之後,就應該向他介紹編程的理念,之後將培訓重點放到測試實踐上,而不是繼續闡述編程的重要性。
現階段的技術的進化程度比以往任何時候都要快,,所以要記住,定期培訓是必不可少的,這是在給團隊創造價值。例如一個Web設計師需要知道響應式設計,提供給設計師大量的用戶日常使用的移動設備的不斷擴張的樣品,希望他們能獲得靈感。
七、不恰當的測試
測試作為整個系統開發生命周期(SystemsDevelopmentLifeCycle,簡稱SDLC)的重要一個要素,通常不需要開發團隊給出太驚人的結果。但是如果在測試環節沒有付出恰當的、相應的努力的話,這是說不過去的。下面的一些方法或許對你的測試團隊有用,至少在你們交付產品的時候能夠給用戶一個好的交代。
單元測試
實物模型
綜合測試
八、注意安全漏洞
有的時候在軟體開發過程中,就會遇見如下這樣的安全漏洞:
A、不同組件之間意想不到的交互作用:a、輸入不正確的驗證信息;b、SQL資料隱碼攻擊;c、跨網站指令碼;d、命令植入攻擊;e、跨站請求偽造(CSRF);
B、難以實施的資源管理,包括:a、不尊重可用內存緩沖區;b、對外控制;c、使用有潛在危險的功能;
九、和客戶交流
最初的合同簽訂後,開發公司通常會忘記每天與客戶進行產品上的信息交互,以至於在交貨的時候還需要進行升級。兩大關鍵的交流點可以讓你和客戶保持更好的、更長的關系:
在客戶開問之前,開發方應該和客戶進行交流溝通。
和客戶保持周期性的交流。
十、避免標准實踐面臨的迫在眉睫的最後期限
通常情況下項目都會遇到進度延誤的現象。然而,這不是說你有理由去偷工減料或者是在開發或測試階段耍花招,未經測試的模塊絕對是一個隱患,會讓你的開發團隊名譽受損的。一個更好的方法來管理延遲是提前告知客戶並且積極執行延遲計劃。只要延期的理由是有效的,客戶應該會理解,也會給你額外的時間來解決這個問題。
❹ 程序員是如何提高工作效率的
提高工作效率其實是我們大家每一個人都希望的事情,同時呢也是公司上司希望大家可以辦到的,專業技能、專業知識、創造力、經驗都是程序員該必備的東西。當然,還有工作態度、工作效率和工作質量更尤為重要。那麼問題來了,程序員又是如何提到自己的工作效率的呢!
對於程序員來說,他們的工作沒有效率,那就意味著他們所投入的時間和精力是沒有效果的。
我個人感覺,還有一個很重要的就是大家無論干什麼都要學會持之以恆,我感覺只要堅持那麼總會有成效的。尤其呢,作為程序員來說,編程是一項磨練程序員韌勁和耐性的工作。所以一切都是貴在堅持的!
❺ 如何成為一名合格的程序員
很多人想要成為程序員,在學習編程的過程中,面對各種bug和源源不斷的問題,有時會對自己是否適合編程這一問題產生困擾。
作為一名教授全棧Web開發的教育工作者,我已經帶領很多新手成為了程序員。好消息是,我發現沒有任何人是不能學習編程的。我把它看作是一種基本的人類技能,就像閱讀、寫作和算術一樣,任何人都可以做到。它是我們人類能力的一部分,只是需要學習。
在過去的幾年的教學中,我目睹了不同的學生在學習過程中的斗爭,以及在他們的掙扎中出現的一些共同問題。
下面的列表將幫助你了解你是否喜歡編程
1、缺乏好奇心
如果你對計算機是如何工作的缺乏好奇心,那麼,作為一個程序員,你將永遠不會成功。
學習的一個基本要求是對你所學的東西有積極的興趣。如果你沒有一個對技術好奇的頭腦,你就沒有精力去堅持學習要成為一個成功的程序員所需要的廣博而深入的知識。相比之下,技術的世界就像一個巨大的海洋,裡面充滿了各種有趣的領域、相互聯系的思想和各種可能,它們可以激發人們的想像力。想要潛入這片海洋並發現你所能發現的一切,需要內在的動力。
找到你的好奇心:問問你自己,編程是否真的讓你感興趣?如果沒有興趣,去找你感興趣的東西,以節省時間和精力。但是如果你的答案是感興趣,那麼就強迫自鄭襪己去發現一些你以前沒有注意到的新事物,認識到浩瀚的技術海洋,再往下潛一點。
2、缺乏自主性
如果你不培養自己解決問題的能力,你就永遠不會成為一個成功的程序員。
毫無疑問,要成為一個成功的開發人員,你必須對自己的學習能力充滿信心。這實際上是一項基本的生活技能,如果你年滿18歲,沒有人有義務教你任何東西。這就是現實。當你想學習技術所需的技能時,首先要學會的是,在谷歌中輸入你想要的任何東西並獲取你需要的信息。除此之外,所有編程語言都有文檔和規范,這些文檔和規范對語言的工作方式解釋的非常清楚,它們就像字典一樣。作為一個程序員,最快速、最可靠的學習方法就是簡單地閱讀這些文檔。
當你有問題的時候,在問別人答案和查閱官方文檔之前,強迫自己先搜索一下,節省別人的時間。
3、面對問題缺乏毅力
如果你在遇到問題時輕易放棄,作為一個程序員,你將永遠不會成功。
編程的本質是解決問題,這也是計算機產生的全部原因!每當你開始編寫一個程序時,你總是會遇到一大堆問題。一旦你解決了一個問題,那麼幾乎總是有另一個問題在後面等著你。你在進步,但總是會有新的問題要面對。
這堆問題會讓人望而生畏,令人感到沮喪。如果你覺得程序應該「能用就好」,那麼你就沒有精力堅持下去,因為問題還在繼續出現,它們會一點一點地擊潰你的情緒和決心。從字面上來說,你的工作就是找出程序為什麼不能跑起來。
從我在授課上的經驗來看,通常每個班都有一兩個學生,和其他學生相比,他們似乎更容易遇到更多的問題——通常是非常隨機和模糊的問題。我提醒學生,他們面對的問題越多,學習越深入、越徹底的可能性就越大。如果他們能通過這些問題獲得深刻的理解,他們會很快發現他們變得更加自信了,因為他們面對和解決的問題比普通學生多。
你需要認識到,問題不僅僅只是問題,它實際上也是挑戰。你所面臨和克服的每一個挑戰都能讓你更深入地理解技術,更好地面對新的挑戰,並迅速解決舊的挑戰。
4、解決問題之後沒有成就感
如果你在解決一個問題後沒有興奮感和成就感,作為一個程序員,你將永遠不會成功。
與上一個問題相關的是,你成功地解決了一個問題,卻缺乏「良好的感覺」。當修復bug和問題變成了一個永遠不會結束的事情時,你會失去與克服問題的動力。
當你解決一個問題時,你需要的是多巴胺的釋放。這類似於在電子游戲中完成了一個關卡,或者解決了一個像縱橫字謎或數獨這樣的挑戰。我們都知道,堅持通過一項挑戰,然後最終贏得比賽,一般都會有成就感和興奮感。但是如果你失去了感受這些快樂的能力,或者從一開始就沒有真正有過這些感受,你將無法體驗到編程帶來的快樂。如果你把編程看作是一種磨礪,你只想盡可能容易地得到結果,那麼你永遠不會真正成為一個成功的程序員。
無論何時,當你解決了一個一直在努力解決的問題時,無論這個問題多麼微小,你總是為你的成就感到驕傲。你需要休息一下,祝賀你自己完成了一項出色的工作,讓成功的感覺滲透進你的心裡,為你即將面臨的下一個問題注入活力。
5、無法獨立思考
如果你期望別人為你著想,並且主動看到你自己所在的處境喊純激的細節,你將永遠不會成為一個真正成功的褲脊程序員。
當你在學習新的東西時,很容易感到缺乏知識和經驗,並沒有自己的觀點。主動做事或者說錯話似乎是有風險的。對於錯誤,我們的內心都有一種恐懼感。當對錯誤的恐懼抑制了你的探索和好奇心時,你會扼殺開發真正知識、從經驗中獲得的知識和「失敗」的能力。當你需要依靠「權威」的觀點、一個受歡迎的博客、一個最佳實踐或「教科書」的答案時,那麼你就沒有真正地整合編程的知識。你需要對什麼有效,什麼無效形成自己的觀點。你需要理解為什麼你認為你的解決方案有效,以及使用這個方案有什麼好處。你需要建立一個微妙的視角,超越那些顯而易見的東西。你需要能夠「證實」你的立場。
為自己著想。通過你的經驗和批判性思維技巧,發展出你自己的思想體系。做出合理的猜測,堅定立場,並願意隨著新信息的出現而改變立場。
6、僵化、狹隘、混亂的思維
如果你的思維僵化,並且難以保持代碼的條理化,那麼你將永遠無法成為一名真正成功的程序員。
我有時在學生中看到兩個極端。第一種是僵化和狹隘的思維方式。擁有這種態度的人拒絕幫助,盡管會有反饋,但不會有改變。他們看事情只從一個角度看,別人給的建議被忽略。
我看到的第二個極端是思維混亂。學生們似乎使事情變得更加復雜,他們的代碼雜亂無章,難以理解。他們過度思考問題,寫100行代碼,而其中只有10行是有用的。
當這兩種心態結合在一起時,結果就是一種用蠻力的方法去設計程序。我們需要的是回顧解決方案,重新評估它,放棄最初的方法,並重新組織方法。
無法看到其他可能性或無法反思反饋會抑製成長的能力。思維雜亂無章會減慢你的成長速度,阻止你看到那些原本顯而易見的模式。你的工作質量也會下降。
自我反省。你需要退後一步,看看你是接觸的事物的大局是什麼樣子的。你要怎樣才能做得更好?你能做些什麼讓你的生活更輕松嗎?你需要什麼來幫助你?
7、需要「正確」的答案,而不是識別一系列「好」和「壞」的答案的方法
如果你認為編程的最終目標是找到正確的解決方案,而不是一系列解決方案,那麼作為一個程序員,你將永遠不會真正成功。
當開始學習技能或編程時,學生往往想知道他們所做的是否「正確」,而答案總是「視情況而定」。
計算機科學是一門評估權衡的科學。在不同的環境下,哪條路更好,這完全取決於所處的環境和目標。當你把編程看作是一個有正確答案或錯誤答案的測試時,你就失去了對全局的認識,放棄了你的創造力。任何答案都可以是「正確的」,前提是你能根據具體情況證明這一點。現實情況是,編程更像是寫詩或寫短篇小說(如果程序很大,則可能是小說)。在你的代碼中可以看到一種美學和美麗,這些東西有時只有你和其他程序員能夠識別出來。你決定解決方案的原因,以及你對答案的設想,比「正確的方式」或「錯誤的方式」更重要。擁有一個藝術家的頭腦可以讓你編的程序具有選擇和可能性,而不是認為只有一種處理方式。這就是編程的美——有很多方法可以解決問題,考慮不同的可能性,然後決定哪種方法最適合當前的情況。
創造性很重要。你要認識到,解決問題的方法有很多種,通過經驗和積累,你會對哪些解決方案比其他解決方案感覺更好產生細微的理解。縱觀全局,想像不同的可能性,相信你的直覺,你會得到更滿意、更好的解決方案
如果你對學習編程感興趣,我鼓勵你開始這段旅程。記住提到的七條,並開始學習、探索在線資源,這些資源可以讓你快速學習。你不會後悔的!
合格程序員,對於一種計算機程序設計語言,我們將其分為語法、語義、語用三個層面。僅僅掌握語法是不夠的,不算學好。但是很多人,在履歷上寫自己掌握(甚至精通)了某種語言,其實就是解了語法,會寫簡單的程序而已。這就是為什麼我們行業特別不喜歡「精通」這個詞的原因。
現代軟體開發,規模都比較大,不是寫個HelloWorld那麼簡單,也不可能每個項目每件事都從頭開始造輪子,我們都是站在前輩、同行們的肩膀上工作的。也就是說,語言之外,還有「庫」這個東西需要掌握,不然就寸步難行。庫有語言級別支持的BuildIn的庫,比如JAVA裡面的util、concurrent,CPP的IOSTREAM、STL等等;更多的更豐富的還有第三方提供的庫,比如JDBC、Servlet、EJB的implementations等等。這些東西掌握了,幹活兒才可能得心應手,不然寸步難行。
比Libaray更高層一些的,是Framework。框架的作用在於,將某一方面開發的BestPractices搞到一起,給你提供一個更易用的、不關注底層的腳手架。比如做企業應用的,SpringFramework是標配了;訪問數據,Hibernate或者MyBatis也離不開,很少直接用JDBC去幹活的了;做WEB的,各種MVCFramework起碼得掌握一兩個(springmvcorstruts2?);做網路的,Netty,MINA怎麼也得掌握一個......總而言之,框架是繞不過去的一個門檻。
然後呢,就是環境、輔助工具。應用伺服器,怎麼也得會調試配置那麼兩個吧。TOMCAT是入門標配,JBOSS,WEBLOGIC之類,起碼要弄得跑得起來;針對不同應用場景,還要會選擇。開發/管理工具,ECLIPSE是標配、GIT和SVN起碼要搞熟一款;其它比如單元測試工具、Build工具、測試覆蓋率、CodeReview這些插件...也得知道怎麼用。
最後,通用的,計算機科學的基礎,不說多扎實,至少不能一竅不通。說起來就那幾大件,操作系統、數據結構&演算法、編譯原理、體系結構。要懂一點點,你才知道你編的程序是怎麼run起來的,哪兒可能存在效率問題性能瓶頸,除了問題知道怎麼debug。如果僅僅把計算機當作一個黑盒子,那也不算學好了。
最最後,還有一樣,就是你要訓練一下,快速理解領域知識的能力。你參與做一個項目,你懂的只是上面這些專業知識,但並不懂客戶的行業知識。如何盡快地理解業務,並用你手頭的工具實現業務邏輯,這點對程序員而言是非常重要的,否則你做的東西客戶總不滿意,GET不到重點,很麻煩。
我覺得這是一個合格的程序員的基本要求。你看,我並沒要求你懂需求工程、懂項目管理、懂架構設計、懂很多演算法、模式,甚至更深的專業知識。
❻ 一個優秀的程序員需要養成哪些良好的習慣
怎麼樣才能成為一個優秀的程序員?這是一個頗為奇怪的問題。怎樣才是一個優秀的軟體開發人員,在今天,你該怎樣發展你的職業生涯?以下是DevStore總結的優秀程序員必備十大習慣。按照這些技巧和規則,你可以改善你的現狀,由一個普通的程序員,成為一名優秀的程序員。
學會學習
就算是你有了10年以上的程序員經歷,你也得要不斷地學習,因為你在計算機這個充滿一創造力的領域,每天都會有很多很多的新事物出現。你需要跟上時代的步伐。你需要去了解新的程序語言,以及了解正在發展中的程序語言,以及一些編程框架。還需要去閱讀一些業內的新聞,並到一些熱門的社區去參與在線的討論,這樣你才能明白和了解整個軟體開發的趨勢。
掌握多種語言
程序語言總是有其最適合的領域。當你面對需要解決的問題時,你需要找到一個最適合的語言來解決這些問題。比如,如果你需要性能,可能C/C++是首選,如果你需要跨平台,可能Java是首選,如果你要寫一個Web上的開發程序,那麼PHP,ASP,Ajax,JSP可能會是你的選擇,如果你要處理一些文本並和別的應用交互,可能Perl, Python會是最好的。所以,花一些時間去探索一下其它你並熟悉的程序語言,能讓你的眼界變寬,因為你被武裝得更好,你思考問題也就更為全面,這對於自己和項目都會有好的幫助。
理性面對不同的操作系統或技術
程序員們總是有自己心目中無可比擬的技術和操作系統。只有一部分優秀的程序員明白不同操作系統的優勢和長處和短處,這樣,在系統選型的時候,才能做到真正的客觀和公正,而不會讓情緒影響到自己。同樣,語言也是一樣,有太多的程序員總是喜歡糾纏於語言的對比,如:Java和Perl。哪個剛剛出道的程序員沒有爭論去類似的話題呢?比如VC++和Delphi等等。爭論這些東西只能表明自己的膚淺和浮燥。優秀的程序並不會執著於這些,而是能夠理性的分析和理心地面對,從而才能客觀地做出正確的選擇。
別把自己框在單一的開發環境中
再一次,正如上面所述,每個程序員都有自己忠愛的工具和技術,有的喜歡使用像VC++一樣的圖形界面的調試器,而我更喜歡GDB命令行方面的調式器。等等等等。程序員在使用什麼樣的工具上的爭論還少嗎?到處都是啊。使用什麼樣的工具本來無所謂,只要你能更好更快地達到你的目的。但是有一點是優秀程序員都應該了解的——那就是應該去嘗試一下別的工作環境。沒有比較,你永遠不知道誰好誰不好,你也永遠不知道你所不知道的。
使用版本管理工具管理你的代碼
千萬不要告訴我你不知道源碼的版本管理,如果你的團隊開發的源代碼並沒有版本管理系統,那麼我要告訴你,你的軟體開發還處於石器時代。趕快使用一個版式本管理工具吧。使用什麼樣的版本管理工具依賴於你的團隊的大小和地理分布,你也許正在使用最有效率或最沒有效率的工具來管理你的源代碼。但一個優秀的程序員總是會使用一款源碼版本管理工具來管理自己的代碼。
做一個優秀的團隊成員
除非你喜歡獨奏,除非你是孤膽英雄。但我想告訴你,今天,可能沒有一個成熟的軟體是你一個人能做的到的,你可能是你團隊中最牛的大拿,但這並不意味著你就是好的團隊成員。你的能力只有放到一個團隊中才能施展開來。你在和你的團隊成員交流中有禮貌嗎?你是否經常和他們溝通,並且大家都喜歡和你在一起討論問題?想一想一個足球隊吧,你是這個隊中好的成員嗎?當別人看到你在場上的跑動時,當別人看到你的傳球和接球和搶斷時,你的團員成員能因為你的動作受到鼓舞嗎?
把你的工作變成文檔
這一條目當然包括了在代碼中寫注釋,但那還僅僅不夠,你還需要做得更多。有良好的注釋風格的代碼是一個文檔的基礎,他能夠讓你和你的團隊容易的明白你的意圖和想法。寫下文檔,並不僅僅是怕我們忘了當時的想法,而且還是一種團隊的離線交流的方法,更是一種知識傳遞的方法。記錄下你所知道的一切會是一個好的習慣。因為,我相信你不希望別人總是在你最忙的時候來打斷你問問題,或是你在休假的時候接到公司的電話來詢問你問題。而你自己如果老是守著自己的東西,其結果只可能是讓你自己長時間地深陷在這塊東西內,而你就更本不可以去做更多的事情。包括向上的晉升。你可能以為「教會徒弟能餓死師父」,但我告訴你,你的保守會讓你失去更多更好的東西,請你相信我,我絕不是在這里聳人聽聞。
注意備份和安全
可能你覺得這是一個「廢話」,你已明白了備份的重要性。但是,我還是要在這里提出,丟失東西是我們人生中的一部份,你總是會丟東西,這點你永遠無法避免。比如:你的筆記本電腦被人偷了,你的硬碟損壞了,你的電腦中病毒了,你的系統被人入侵了,甚至整個大樓被燒了,等等,等等。所以,做好備份工作是非常非常重要的事情,硬碟是不可信的,所以定期的刻錄光碟或是磁帶可能會是一個好的方法,網路也是不可信的,所以小心病毒和黑客,不但使用軟體方面的安全策略,你更需要一個健全的管理制度。此外,盡量的讓你的數據放在不同的地方,並做好定期(每日,每周,每月)的備份策略。
設計要足夠靈活
可能你的需求只會要求你實現一個死的東西,但是,你作為一個優秀的程序,你應該隨時在思考這個死的東西是否可以有靈活的一面,比如把一些參數變成可以配置的,把一些公用的東西形成你的函數庫以便以後重用,是否提供插件方面的功能?你的模塊是否要以像積木一樣隨意組合?如果要有修改的話,你的設計是否能夠馬上應付?當然,靈活的設計可能並不是要你去重新發明輪子,你應該盡可能是使用標准化的東西。所謂靈話的設計就是要讓讓考慮更多需求之外的東西,把需求中這一類的問題都考慮到,而不是只處理需求中所說的那一特定的東西。比如說,需要需要的屏幕解析度是800×600,那麼你的設計能否靈活於其他的解析度?程序設計總是需要我們去處理不同的環境,以及未來的趨勢。我們需要用動態的眼光去思考問題,而不是刻舟求劍。也許有一天,你今天寫的程序就要移植到別的環境中去,那個時候你就能真正明白什麼是靈活的設計了。
不要搬起石頭砸自己的腳
程序員總是有一種不好的習慣,那就是總是想趕快地完成自己手上的工作。但情況卻往往事已願違。越是想做得快,就越是容易出問題,越是想做得快,就越是容易遺漏問題,最終,程序改過來改過去,按下葫蘆起了瓢,最後花費的時間和精力反而更多。欲速而不達。優秀程序員的習慣是前面多花一些時間多作一些調查,試驗一下不同的解決方案,如果時間允許,一個好的習慣是,每4個小時的編程,需要一個小時的休息,然後又是4個小時的編碼。當然,這因人而異,但其目的就是讓你時常回頭看看,讓你想一想這樣三個問題:1)是否這么做是對的?2)是否這么做考慮到了所有的情況?3)是否有更好的方法?想好了再說,時常回頭看看走過的路,時常總結一下過去事,會對你有很大的幫助。
❼ 為什麼中國的程序員總被稱為碼農求解
而同時如果要真正提高自己的技術和創造力,是需要投入大量的時間和精力的,是需要內心將其當作一種興趣愛好來鑽研的,而不是作為一種謀生的工具;我也只能說在我朝面對這樣的事情,很多都是無奈的,但是這篇文章寫的確實99%的東西都是非常中肯的, 有時間和精力的碼農們還是以謙虛的姿態多多像老外哥學習鑽研就對啦,至少是有那麼些幸福感咯。=================以下是原文,值得品味================
實際上IT行業在中國並不是特別差的行業,而程序員的工資也並不低,但為什麼中國的程序員總被稱作碼農或者說是苦逼的程序員?中國的程序員生活和歐美的有什麼不一樣?之前,研發頻道曾發過《東方程序員怎麼看西方程序員》和《西方同行眼中的東方程序員》這兩篇文章。來自世界各地的程序員們各抒己見。或許,從上面兩篇文章中也多少能得出「」下面是來自知乎網上各位大牛的看法。讓我們來一起看下!一位叫吳濤的程序員的回答:編程活動和機械電子一樣可以視為一種工藝(craftsmanship),從事此類工藝活動的人可以叫做工匠或者工程師。經歷過工業革命的歐美國 家,有深厚的工程根底,從機械到電子再到軟體,都是國家產業的支柱,滋養著社會中堅力量的中產階級。工程師的社會地位普遍比較高,他們有工藝的傳承,有文 化圈,有產業的歷史。而國內目前的軟體工業和製造業非常相似,以來料加工式的低水平重復勞動為主。就好像農民仰賴著老天提供種子、土壤、陽光和水,中國程序員仰賴著洋人提供設備、技術和理念,從微處理器、操作系統、編程語言、編譯器、IDE、編程框架到應用程序,除了做晶圓的沙子是本 地產的,幾乎沒有什麼屬於自己,每天的工作內容主要就是把別人已有的東西按照自己的——甚至不是自己的——需求裝配一下,沒有什麼創造性,也很少有業界的 技術積累和傳承出現,即便有也流傳不開,畢竟程序員文化水平普遍不高——「有知識,沒文化」,就是說這樣的狀況。記得劣質盜版VCD滿天飛的時代,有個程 序員做出一款醜陋但是解碼容錯能力很好的播放器,貼合國情,一炮成名,結果好容易寫本書,沒有幾個句子能寫通順的。這種技術書籍的拙劣狀況一直保持到現 在,而且拙劣的方式更加多樣化了。沒有技術傳承,沒有文化圈,不乏有人上大學之前對編程一竅不通,學計算機只是因為計算機「熱門」而已。如同包辦的婚姻, 沒有一絲愛情,最後以編程為業,只是因為也不會做別的什麼了。另一方面,國內程序員不論薪水如何,的確很苦。許多人長期被迫加班,最後甚至會成為一種自願的習慣。可生產率和產品質量並未因此而提高,就像千百年 來用慣鋤頭和鐮刀的農夫,很少有人會想要去學習、改進自己使用的工具和習慣,甚至對於新興的思潮和方法抱有非理性的抵觸情緒。生活如此悲慘,卻又如此不思 進取,和農民的問題很相似。再加上,就好像城裡人眼中的鄉下人一樣,程序員們木訥、邋遢、缺乏情調、土。可偏偏又自負而且互相看不起。總而言之,在中國做一個程序員,很少有什麼事情能讓人覺得自己從事的工作很體面。那麼,在整個社會以自嘲為風尚、許多行業都喜歡好勇鬥狠地自輕自賤 的狀況中,使勁貶低自己的職業,自嘲和群吵時,就不會有什麼心理包袱。不過,就好像黑人可以自稱或者互稱「黑鬼」,但是白人如果敢講立刻會惹禍一樣,喜歡 以此自稱的程序員並不見得能容忍其他人這樣稱呼自己。最後,英語有類似的說法,將帶有隔斷的辦公室叫做cube farm,常見於傳統的軟體公司。以諷刺(但不限於)軟體公司日常生活為主題的漫畫Dilbert就有不少格子辦公室里的場景。不過cube farm說的並不是程序員們像農民,而是說他們像地里的莊稼或者果樹,產出成果,等待收割。畢竟,歐美發達國家的農民生活往往比程序員更好。高收入,農機 勞作,大片的私有土地,寧靜的田園生活。農民的生活在那裡,如果不是令人嚮往,至少也並無貶義。補充:本版同文所說的code monkey在英語中的語用,與「碼農」在中文裡的用法並不一樣。code monkey是指以計算機程序員或者那些以編碼為生的人。這個術語可能包含輕微的貶義,這意味著開發者可能編寫代碼,但不能執行復雜點的任務,比如:構建軟體結構、分析和設計,一般指初級程序員。如果一名code monkey正在努力增加知識和提升職業技能,那麼會有另一個等級名詞賦予他。其實code monkey這個術語在層次劃分上還是有點困難的,因為像那些真正熟練的開發人員或程序員他們仍然在做編碼工作。或許像這樣劃分會好一點:coder:編碼員programmer:程序員software engineer:軟體工程師software analyst:軟體分析師software architect:軟體架構師或許還可以在前面加「初級」、「中級」、「高級」這幾個前綴。這些都反映了一定的等級、技能水平和薪資。請注意:它只能在小范圍確定的某種層次結構,例如在一個公司、甚至一個部門。一個在A公司工作的「程序員」可能比B公司的中級架構師所要求的技能更多。下面是關注前端技術的鄧陳華同學的回答:首先, 問題的題目」「是有一定的可辯論性的,因為我所了解的事實是,大多時候是「中國的程序員自稱為碼農」,很少有不同行的人 稱呼程序員為「碼農」。當然,可能和我所處環境有關系。認可濤吳所說的「自稱碼農的程序員並不見得能容忍其他人這樣稱呼自己」,因為這就像他所舉的例子, 黑人允許自稱,但不允許白人稱呼,同樣的詞在熟人說來是親切、是自嘲、甚至可以是自諷,但在外人說來,那不僅是不尊重,還有可能是侮辱。其次,身處互聯網行業,程序員工作辛苦,加班再正常不過,項目進度、突發情況、公司文化都可能成為加班的理由,雖然收入不一定差,但夠苦逼。另外一 方面, 程序員魚龍混雜,水平參差不齊,而互聯網向來是一個強調能力的開放行業,有多少能力就拿多少工資,這樣註定有相當大一部分因為水平不夠,導致收入問題成為 「碼農」的心病。而「 工作辛苦」、「收入低」和農民有類似,所以無論自嘲或者是被別人冠以「碼農」的稱謂,辛苦、收入低這兩個標志包含其一的可能性非常大。如果兩者兼有,那就是純種『碼農』一枚,夠苦逼。當然,還有第三種情況就是像趙劼姐夫這樣,「彈鋼琴的碼農」,已經做「碼農」做到一種境界,並不一定強調其辛苦、更不會收入差,以「碼農」調侃的口 吻戲謔人生,這個心態和大家自稱屌絲是一樣的,更多的自嘲自諷。其實,這樣收入高而且相對不這么辛苦的精英「碼農」在行業內也不少。下面是在讀研究生吳洲提供的,來自圖靈中文社區電子雜志《碼農》第一期的首卷語:《所謂碼農》一文的解釋:對於「碼農」這個稱呼,有些人喜愛有加,有些人不以為然。區別在於對待「農」這個字的感覺。農當然是指農民,這個詞寓義很豐富,既可以說它偉大,也 可以說它渺小。說它偉大,是因為我們的生存離不開農民,而且中國一直是個農業為本的國家,曾經說是百分之八十的人是農民,這意味著往前翻?兩代,你我眾人 皆是農民出身。以此觀之,農可謂大哉。說它渺小,則是因為大家的觀念里,農民意味著有很多缺點,冠冕堂皇的說法是劣根性,比如目光短淺、思維陳舊、自私小 氣等等,總之是為我們受過教育的人群所看不慣的種種毛病——這些毛病雖然我們自己也有,但是我們看不見——於是乎「農民」成為了罵人時常用的字眼。其實,把自己的編程生涯與田間地頭的鋤禾日當午對應起來,確是有那麼些相似之處的。你能想像得到,田間整齊栽種的秧苗,與屏幕上顯示的錯落有致的代 碼行有幾分神似。各種莊稼的種植是有講究的,正如你要注意編程風格。施肥灌溉,猶如你對代碼進行的編譯鏈接。除草除蟲,自然是在做著debug 。你挑水來我澆園,大概是在小菜園中進行的結對編程。因為靠天吃飯,農民們也要學點雲計算,去五道口職業技術學校進修的人也多起來了。收割的季節,活多人 少,也常常是要搞外包的,因為deadline 很重要。不過坦率地說,「碼農」這個叫法讓人體會更多的是滑稽、搞怪、無厘頭。畢竟一個是簡單的體力勞動,一個是高智商的腦力勞動,不可同日而語。而程序 員卻偏愛這樣的時空錯亂的感覺,自嘲(我就是個農民!)的同時卻又自命不凡(我是碼農我怕誰?!),特立獨行極了。碼農的草帽底下,是一顆充滿創造力的自由不羈的頭腦。他們遵從最佳實踐而痛恨陳規教條,他們欣賞天才而不迷信權威,他們喜歡思考而不輕易苟同。他們 是技術人,卻追求人文理想;他們敢於吶喊,說出自己的觀點和主張,也更善於腳踏實地,用自己的點滴工作去改變現狀。碼農們是勤奮的,加班加點的工作是常有 的事情,城市夜間的燈火,有多少是在碼農們的辦公室和居所點燃?周末四處舉辦的技術交流和講座,又活躍著多少碼農的身影?線下讀書,線上討論,冥思苦想, 動手實踐,新技術驅動著碼農們的腳步,碼農們在改變著我們的生活。生存離不開農民,生活離不開碼農。各位「碼農」,你們是如何看待這個稱呼的呢?對於上面幾位大牛的觀點,你們有啥想說的?不妨和我們分享一下吧!