Ⅰ 程序員如何才能有獨立開發項目能力
難!我本身是軟體工程師,我從業都十多年了,就拿網站來說吧,比如你獨立開發一套PHP或者是java的網站,通常,美工+WEB前端+後端開發+需求分析,設計的能力,相當於,你一個人,頂一個團隊的工作量,連項目經理都兼任,維護客戶都兼任!因為你得分析需求啊。
如果Java更難了,相當於美工(1人)+WEB前端(1人)+後端開發(3-7個),如果是APP的,還得加安卓+IOS工程師+項目經理。
如果是C++,巨難,雖然我也可以獨立開發。問題是,太耗費精力了。特別是嵌入式,其實C語言都有幾種,Java也有幾種,其他人,半桶水,不專業的。
最終,你要給客戶看到的效果!如果你美工 不行,後端不得,只要有一個嚴重的短板,你就不勝任真實的項目獨立開發的能力,自娛自樂可以。
寫驅動,談何容易,全世界,不超過1000人會寫底層的驅動。
第二個,我看到你說,做嵌入式的是學c++還是java ,我java比c++好一些,說明,你基礎不行,雖然是科班出生,科班難出人才,除非自學成才的天才例外!如果天才,你這個年紀的,或者大一點的,都能獨立開發了。特別是美工,需要天賦的!編程也是。需要悟性的,才有創造力,如果死讀書的書獃子,沒什麼創造力的。少數例外。
Ⅱ 軟體工程十分需要創造性么
如果你打算自己創業有自己的品牌,產品當然少不了創造性。一般的程序員只是熟能生巧而已。
Ⅲ 在大家眼中,程序員是一個怎樣的職業
為什麼有人在技術造神
大家應該已經感受到,技術圈這兩年已經和娛樂圈創業圈差不多的氛圍了,這其實是有原因的。
最主要的原因是,創業公司和創業媒體越來越多,他們需要大量的程序員投身到創業這個高風險的行業中,而造神,正是讓程序員們自動跳進火坑的絕佳辦法。不是說程序員不能創業,我是說,創業媒體們故意模糊了創造和創業的界限,把程序員們的創造沖動偷換概念,鼓吹了太多不適合的人去創業。
另一個原因是,招聘成本高漲,CTO 們為了能提升影響力,不得不頻頻出席各種大會刷臉。文筆好的再做做自媒體和技術社群,既能強化個人品牌提高身價,又能在融資的時候提升成功率。
總之,這個行業出現了各種技術大神。
這些大神在普通人類和初級程序員眼裡是無所不能的,是他們嚮往的目標;在中級程序員和高級程序員眼裡,這些大神就是他自己,只不過他還沒紅起來而已…
於是攀比心理也開始泛濫,全國第三的架構師比比皆是,整個圈子漸漸就浮躁起來。
然而絕大部分程序員,依然是雇員
媒體們在包裝時,最喜歡按獨立開發者的路線來整。「從小就對技術有天分」、「大學時曾在某編程大賽一鳴驚人」、「寫了個 APP 玩結果一個月有了千萬用戶」、「從公司離職自立門戶三年上市」。
OK,這的確是程序員的一條職業路線圖。但是媒體們不願意告訴你的是,一:只有極少數程序員是通過這個路線成功的;二:這條線其實需要太多非程序員職位的技能,比如產品設計能力和銷售能力。
程序員的價值決定
絕大部分互聯網公司的程序員職位,沒有技術門檻
然而不幸的是,絕大部分互聯網公司都不是技術驅動的公司。真的就是鳥哥說的那樣,絕大部分技術崗位,其實技術門檻都不高(門檻在工程上,後文細講)。技術不過是這些公司的護航艦,而不是破冰船。
先別打我,冷靜下來想想,到底有多少你會的那些技術,是你的同行們不會的呢?不多,對吧?
幾年前億級別的搜索還是問題,現在已經到處是通用解決方案了;幾年前千萬到億級別的網站和 APP 解決方案還在大公司手裡,現在各個架構大會都講爛啦,而且其實都差不多;就連 DeepLearning,帶 API 介面的框架也開始涌現,只需要把圖片用 REST 傳進去就能取到結果了。
很多事情,已經沒有難度,只需要持續投入。是的,對絕大部分程序員來講,他們不需要成為科學家,而需要成為工程師,成為從科學家手裡接過火種,去燎原大地的人。
怎樣才是一個好工程師
工程的本質不是創造,而是去風險化。
工程是關於如何低成本、高效率、按時按量完成既定任務的。所以判斷一個工程師是否優秀,並不是他多有創意多有名氣,而是看他有多穩,看他能多 GettingThingsDone,中文就是「靠譜」。
有時候一個好的解決方案,未必採用了最新的技術和框架,而是看上去朴實無華,功力都包涵在背後的細節里。就像頂尖高手打的斯洛克檯球,每一桿都平淡無奇,只是因為上一桿的回球太到位。
有同學問,那我工程做的太好,豈不是沒有機會遇到一些高難度挑戰了么?放心,一般公司都僱傭了產品經理來幫你製造高危事件。
同樣的,一個好的工程師,會選擇最適合需求和團隊的方案,考慮開發效率和系統效率的均衡,從而已達到最優效果;而不是整天和別人去爭論什麼語言最好、哪些框架過時了。
工程的另一個要求是進度控制和質量控制。
在項目立項之後動工之前,對要做的事項作出詳盡的規劃,對未來一到兩周的工作給出細致的排期,這是進度控制的基礎。
代碼的及時入庫與合並,自動化測試和每日構建,CodeReview 和文檔編寫,這些看似無關緊要的習慣則決定了項目質量。
不幸的是,很多程序員把這些工程上至關重要的東西當成垃圾,視為對他們「創造力」的壓抑。
他們總是以創造力為借口去尋求自身的自在,比如上班不帶胸牌不打卡,中午休息時間在公司看視頻打游戲,最好可以遠程上班,項目到期之前再來檢查進度,公司不要用統一框架,只有傻逼才寫文檔。
對職業的理解偏差和工程能力上的荒蕪,培養了大批能寫代碼但死活寫不好代碼的「碼農」,反而讓那些有著彪悍工程能力和良好習慣的程序員變得奇貨可居。
最後,來說說程序員那無處安放的創造力
有了錘子想找釘子是很正常的原始沖動,但我們必須認識到,創造力對於程序員這個職業來講,是錦上添花的東西。如果你沒有強大的工程能力,那麼創造力也不過是無本之木。所以扎扎實實的把工程基礎打好,這是最根本的。
在此基礎上,我比較推薦程序員採用內外兩條線來培養自己。在公司內的項目上採取相對保守的策略,盡力把穩定性做到最好,培養出自己卓越的工程能力;然後在公司外的開源項目和自己的獨立項目上,採用一些新的技術、實踐一些新的想法、充分發揮自己的創造力,夢想還是要有的,對吧。
這樣做最明顯的好處是,你可以了解到新技術和激進方案的優缺點,從而在進行方案選型時,有更多的依據;還有一個職業發展上的好處:如果不是主負責人,公司的項目往往不能代表你的能力;但獨立項目卻可以作為一個非常好的能力證明出現在你的簡歷里邊。
你可以是一個身懷絕技的手藝人,在自己家裡你嘗試各種手法各種風格的個人作品;但當你參與頤和園這種級別的工程時,好好的把自己負責的石頭雕成總設計師要求的樣子就好 —— 畢竟這個時代一個人已經很難負責整個項目了。這就是我所理解的程序員的工匠精神。
Ⅳ 如何成為有思想、創新的程序員
寫這篇文章也源於我和新員工的一些談話心得,一些基礎比較薄弱的技術人員,看起來有點像沒有思想和靈魂的程序員。你可能也會覺得國內有很多小企業出來的人或者剛畢業的人,會的最多也是CRUD和拖拉控制項。我也接觸過一些技術人員,他們告訴我他們再也不想搞技術了,因為技術是在太無聊了,特別年紀稍大一點的,想的最多的就是轉行。曾經我非常驚訝於這樣的狀況,事實上,寫程序是一件很有創造力的事情,但為何很多人都會覺得無聊呢。 隨著年紀的增長,這些問題的答案慢慢變得清晰一些。在這里,我不敢說,我說的都是正確的,我只是在一直不停的探索。在探索之後,我對我的新員工說了以下的話:「進入我們公司,雖然我們也是很不起眼的剛創業的小公司,但是,你在這里需要做一些改變了。我知道你們以前的工作性質可能是上司給你交代任務,告訴你怎麼做,然後你管也不管就照章辦事,拉拉控制項,以完成項目功能為首要任務。在我們這里,你需要成為一個有思想的程序員。有思想的程序員需要懂得如何使用聰明的腦袋瓜。事實上,很多人都不知道我們的腦袋瓜到底能做多少事情,不過,一旦你嘗試了,你就會體會到『不是做不到,而是想不到』。需要記住這些話,從思想上改變,從今天開始。首先,我們是做軟體產品的公司,質量是產品生存的首要標准,產品質量的最低要求就是易用性;其次,我們要保證產品的質量,代碼的質量首先要過關,標准編碼方式、異常處理方式、代碼的生命周期管理、編碼的完整性都需要兼顧;第三,避免寫一些垃圾代碼和重復的代碼,這需要動用你聰明的腦袋,我曾經寫了10幾個的CRUD產品,從而自主創新了控制項關系映射、對象-對象映射、通用窗體框架,乃至我們現在的OSGi.NET產品和雲計算SaaS商店平台,都是從這些重復的勞作中不斷思索發明的。我看到設計模式的書時,可以驕傲的向同學們吹牛,我也設計過幾個『模式』;第四,學會發現問題,探索問題,積極詢問,避免把問題遺留下來或者拖機取巧。浪費一個發現問題和解決問題的機會,相當於浪費提高自己的機會。最後,你要有信心成為一流有思想和靈魂的技術人員,別哪一天你離開尤埃時,丟我們的臉,:)。」 我不敢說,我現在多有思想,但是,我隱隱約約感覺到一些這樣的有意思的東西。我崇拜「道法自然」,它告訴我違反規律就會受到懲罰,因此,我會時刻反省我是否有做錯的事情,包括在平時編碼、設計和架構的時候,以及平時生活上的為人處事。接下來,我介紹一下,我如何來發明我曾經的產品,希望能夠給人一些啟發。 1 我是如何發明了控制項關系映射組件 控制項關系映射的發明源自於我在參與一款MIS系統的設計,該系統是一個鋼管管理系統,每一個鋼管的信息有很多很多的屬性,我記得鋼管廠給我們的數據說明書裡面,一個管子的信息有驚人的380多列。因此,我們在查詢、修改、添加記錄的時候,總是會有類似以下成片成片的代碼。1 var add***Sql = "insert into Test(a1,a2,....aN) values(@a1,@a2,....@aN)";2 ...... 3 var para1 = new SqlParameter("@a1", SqlDbType.String, a1.Text.Trim(); 6 var paraN = new SqlParameter("@aN", SqlDbType.String, a1.Text.Trim(); (忽略中間的N-3行代碼,以及查詢、修改和刪除的代碼)我記得,我們一起做的另一個小伙拿了一個CRUD一千多個欄位的表來向我們顯耀說:「我他媽的把這功能實現了!」。我不知道大家是否反感這樣的代碼,反正我是厭倦了。當我想到這是一件很痛苦的事情的時候,我考慮了如何來解決它。經過一些思考,我驚訝的發現,所有的CRUD以及界面的流程都可以抽象為「輸入-處理-輸出-輸入-處理-輸出......」的過程,處理的過程實際上是獲取輸入,然後組裝成SQL語句,最後在響應到界面。這個過程是以SQL語句為中心,SQL語句的參數來源於界面的控制項或者界面類的其它成員,SQL語句執行的結果可能是跑到另一個頁面、執行DataGrid綁定、執行下拉列表綁定、給控制項賦值。因此,我想到一個方法,可以設計一個SQL映射的配置,即利用這個配置,直接將界面控制項映射到資料庫,並且也可以執行反向映射。以下是映射SQL的配置。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 以下是調用映射SQL語句實現CRUD中的一個操作。 1 namespace HumanDispSolution2 {3 public class login : CrmPage4 {5 private void btnLogin_Click(object sender, System.EventArgs e)6 {7 DataSet ds = this.ExecuteMapping("Login") as DataSet; 8 if(ds.Tables[0].Rows.Count > 0) //登入 9 { 10 System.Web.Security.FormsAuthentication.RedirectFromLoginPage(UID.Text,false);11 }12 else13 this.lAlert.Text = "alert('登錄失敗,請重新輸入帳戶信息!');";14 }15 }16 } 另外,我還編寫了一個工具來自動生成這樣的配置文件,從此以後,關於資料庫的CRUD,我爽了!! 2 我是如何發明了通用窗體框架 控制項關系映射的發明也是源於上面提到的鋼管系統。當超過2個人一起參與一個復雜項目時,可能他們都需要操作主界面,在主界面加上各自模塊需要的菜單、需要的界面元素,此外兩個人設計的東西也完全不一致。這就造成一些問題了,因為如何實現兩個人的集成就有一些麻煩,而且經常出現意外。於是我就發明了一個通用窗體框架,這個框架提供了以下功能:(1)集成用戶許可權;(2)集成數據訪問;(3)插件式支持,每一個人都可以並行開發,集成時僅需要將配置文件集成一起就形成一個組裝起來的軟體了。 每一個開發人員只需要編寫類似以下的配置文件就可以集成了: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 我是如何設計了對象-對象關系映射 ORM對於一些小型應用感覺有點龐大,但是對於大型應用,我想是一個比較總要的組件了。在我們使用ORM組件時,也經常會寫以下代碼。1 var user = new User(); 2 user.Name = NameTextBox.Text.Trim(); 5 OrmFactory.Save(user); 6 ----------------------------------------------7 var user = OrmFactory.QueryScalar(...); 8 NameTextBox.Text = user.Name; 9 ...... 如果一個MIS系統充斥了大量這樣的代碼,估計你也會膩味,從而喪失對編程的興趣了。記得我剛才說什麼來了,「有問題,意味著升華」,「做一個有思想的程序員」。因此,接下來的問題就是,我們如何來解決類似這樣重復的勞動。我在2006年時想到的辦法就是實現一個對象-對象的映射。首先,設計如下實體類: 1 public class UserEntity2 {3 ……4 [Member]5 public int Age; 6 [Control] 7 public string Name8 {9 get { return this._Name; } 10 set { this._Name = value; }11 }12 [Control("CardNo.Text")] 13 public string CardNo14 {15 get { return this._CardNo; } 16 set { this._CardNo = value; }17 }18 ……19 }20 21 public class EmployeeEntity22 {23 ……24 [Reference(typeof(UserEntity))] 25 public UserEntity User26 {27 get { return this._User; } 28 set { this._User = value; }29 }30 [Control] 31 public float PostSalary32 {33 get { return this._PostSalary; } 34 set { this._PostSalary = value; }35 }36 ……37 } 其次,調用ObjectEngine實現OO映射。A 實現表單類與實體類映射1 private void Map_Click(object sender, System.EventArgs e)2 {3 this.o = CZB.ObjectMapper.ObjectEngine.Map(this,typeof(EmployeeEntity)) as EmployeeEntity; 4 } B 實現實體類與表單類的映射1 private void InverseMap_Click(object sender, System.EventArgs e)2 {3 this.o.User.Name = "c.z.b in"; 4 this.o.User.Age = 19; 5 this.o.CompoInsurance = 0; 6 CZB.ObjectMapper.ObjectEngine.InverseMap(this,o); 7 } 4 我是如何設計OSGi.NET和SaaS商店產品 至於OSGi.NET和SaaS商店是我在不斷思索通用窗體框架以及對現有科技的趨勢的把握下,由幾個很有創造力的編程人員,在建立了完善的產品保障體系下,構建起來的。這兩個產品我會在後面介紹如何設計的。他們的設計我用了很長的時間。 我不是什麼老鳥,希望我們在如此多的技術的世界中能夠多多交流,共同進步。解決這些問題,不僅增加了編程的樂趣,更是增加了自己的見識,從而避免自己成為一個沒有思想的程序員!我也知道,我們可以找到很多理由來反駁文中提到的做法和觀點,但是,提高自己才是最重要的,不要去著急的否定一些什麼,並給自己找借口。
Ⅳ 什麼性格的人適合做程序員什麼樣的性格做美工
做程序員必須夠細心,有創造力,最重要的,耐得住寂寞,看到做銷售做行政的朋友發財了,在外面花天酒地了,你要靜得下心。 做美工相對好點,對性格要求不大,但是必須要有創造力,那是做藝術這一行的人的生命,不然只有一輩子碌碌無為。
Ⅵ 程序員20%的空閑時間要做什麼,
做程序員兩年有餘,其中辛酸真是一言難盡。新技術層出不窮,在疲於業務的同時,很少有時間去看書學習新東西,也不想去想自己再不充電就會被淘汰。一天一天,就這樣做一天和尚撞一天鍾……
恰巧,前幾天因為查找資料,到網上的技術論壇神遊了一下,不禁為自己的固步自封暗暗慚愧。其中有這么一篇文章,更是讓我汗顏,誰知心中頓時一股豪氣沖膽邊生:我以後也要這么樣去要求自己!
不斷學習,增強知道儲備
利用平時的時間鑽研業務,學習英語,多讀一些書籍、文章。對於電子版的資料,不要以為保存在硬碟就等於記住了。要多看,多實踐,多做筆記。建議用自己的博客記錄成長的軌跡。
充分利用8小時內的時間
不要在上班時間看笑話,發笑話。除非有明確的目的,否則不要上網。為每天的工作制定計劃。
採用高效的溝通方式
發行量少用電子郵件和即時通迅工具,盡量當面溝通,或通過電話。除非你和對方的英語都非常熟練,否則請盡量用漢語寫郵件。郵件只發送和抄送給必要的人。回復郵件時不要輕易使用「全部回復」。
分享時間
把你的經驗、成果與別人分享。去幫助別人,你會得到更多的朋友,更多的尊重和更多的知識,你會沒有任何損失。當你遇到困難,主動尋求幫助,不要因為你一個人耽誤整個團隊的進行。
程序員不是代碼藍領,程序員是創造力,想像力和代名詞。多點時間追求愛好,陶冶情操,鍛煉身體,享受生活,讓我們自豪的宣布「讓我們程序員成為正常人,讓程序員成為藝術家」。
心中一直有一個希望,理想因有了希望而變得不再遙遠。這篇文章就是我人生當中的一個坐標,假如橫坐標代表時間,縱坐標代表成長歷程和成就。
Ⅶ 軟體程序員和軟體測試員在做事方面有什麼區別
如果我來說,程序員重點是寫代碼,需要更有創造力一些
測試員主要是測試代碼的正確性,平時會寫一些測試代碼,但是不多。需要考慮問題很周密,
Ⅷ 程序員最基本的要求是什麼
程序員基本素質:
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具 有的素質。
1:團隊精神和協作能力
2:文檔習慣
3:規范化,標准化的代碼編寫習慣
4:需求理解能力
5:復用性,模塊化思維能力
6:測試習慣
7:學習和總結的能力
Ⅸ 能一輩子做程序員嗎
出來做程序員,一寫就是好多年,發現身邊的大齡程序員也多了起來,盛傳的"程序員30"的這道坎是不是會落在每個人頭上? 的確,快三十的人慢慢地不大願意像以前那樣加班了,得考慮身體和家庭;薪水漲到了不少,但經濟壓力還是那麼重,估計再找工作,很多老闆看到簡歷的薪水要求就會馬上把自己否決;技術更新那麼快,自己沒有時間去一一追逐;想想同學都是什麼經理,什麼長了,自己還是一個developer, 也許頂個leader的小頭銜,老爸老媽是否還能像以前那樣誇兒子有出息.隨著年紀繼續大下去,還玩得起么? 程序世界不是只有VC/DELPHIC這些程序語言,也不是只有MFC/GLIBC這些庫,NT/Linux這些操作系統, 也許有人覺得做特種兵就是要精通各種語言, 熟悉各種LIB和SDK, 才能玩得轉, 這些都是耗費巨大體力和精力的事情, 老了就完完了. 人家一個密碼學的專家可以幹上一輩子, 為什麼程序員甚至程序特種兵30就玩不動了? 假如一個程序員把自己的價值就定位到VC JAVA DotNet上, 的確就會疲於奔命, 漸漸就玩不動了. 你看招聘, 很多公司上來就要求各種語言,各種資料庫, 甚至還要你精通PS,還能算帳頂個會計, 要求多得不得了. 你看了以後要麼自卑,要麼鄙視: 他們自己都不知道該做什麼東西, 該要什麼人. 那些招聘網站的首頁,那些有名的外企,絕對不會show這種招聘廣告: 丟人哪. 他們只會在基本的程序和平台外語技能後面加上: 精通xxx尤佳,最好該領域有xx年經驗. 這里xxx可能是內核定製,可能是語音視頻技術,可能是OA系統開發, 或者...這些才是他們想要的關鍵技能, 才是你的價值所在. (語言是很基礎很重要的技能,它們就像廚師的菜刀和鍋鏟,它們是一門藝術,但是一個廚師不應該僅僅了解這些。) 常常看到有人問: 我精通這個語言,那個語言,大家看看我到底值多少錢哪? 假如你幹了兩年還這么問,你就麻煩了, 老闆看的不是你單純的程序語言技能, 他要的是你解決問題的能力, 這些更多的和你做過什麼項目, 從事哪個領域或者行業的開發有關. 舉個例子: 你給一家外包公司的簡歷, 說你精通VC或者其他什麼的那行(不是不要你說), 遠遠比不上你說有在外包企業從事3年工作的那行文字重要. 很多人說外企好,別人老闆尊重程序員,他們的程序員干到50還樂呵呵. 這裡面文化的原因當然有, 但是更加主要的原因, 是因為資本家覺得他們還有價值, 而且是比那些剛入行的青年有大得多的價值. 那麼多的內部技術文獻, 那麼多年通過開發和維護系統換來的經驗, 該領域裡面那麼多的細節, 系統該這么作,不該那麼作, 只有這些老傢伙了解, 而且幾乎是直覺上的了解, 我不僅不能開掉他們, 還要讓他們HAPPY, 不能讓他們被別人挖走了.不可能每個人都能轉成市場和管理,每個人都能做首席架構師, 但是這不妨礙我們繼續在一個自己精通的領域內作我們的特種兵: 我們比客戶還清楚他們要什麼; 我們不僅知道系統怎麼做的, 而且知道為什麼必須這樣做. 有些地方, 架構師設計的時候, 必須通過我們的REVIEW評審他才放心; 而且有一點很重要: 這些知識比那些易變的語言甚至穩固的硬體更難過時. ------------------- 不管大公司小公司,對於一些不管什麼項目都做的公司,只想安心做事情的程序員是永遠沒有前途的,對於那些沒有根,沒有技術積淀,沒有行業背景的公司,程序員假如不能轉型成市場或者管理者,他不僅低人一頭,而且對於公司永遠只是一個可以隨時炒掉的螺絲釘。 成為為資深技術人員是出路之一,但是需要合適的土壤,歐美這方面的確好很多,但是在中國找到類似的土壤並非不可能。另外做技術比不上管理風光是必然的,外國中國都一樣,但是是否一直做技術,要看個人興趣和能力。不要迷信外企的"技術管理雙階晉升",那是糊弄人的,但是他們會給技術人員一個起碼的自尊,你起碼可以說:在公司我比經理級別高(雖然你沒有那麼大的辦公室)。 這也是一個一直做技術是否現實的問題,一個如何實現更高的自我價值的問題:有人說年紀大了學習能力並沒有下降,但即使保持了學習能力,給你開那麼多的薪水,你比剛入行的小夥子的優勢在哪裡?可以說,對於新的語言的掌握甚至實戰能力,很多學校出來的新人非常不錯甚至可以說精通,你難道和一批批的新人反反復復的拼這些?就算你樣樣比他們強,性價比呢? 改編自:
Ⅹ 做程序員有出路嗎
做一個有創意的程序員不僅有出路,
而且路很寬。
沒有創意,
也就一個模仿秀,
就不太好預報了。