Ⅰ 程序員該如何創業
團隊很重要,先成立一個團隊..有激情,然後就詳細的創業計劃,分步實施.
Ⅱ 程序員工作到底能幹多久程序員的前途如何
千千萬萬的程序員們一直困惑程序員的前途如何、程序員工作到底能幹多久的問題。目前比較普遍的認識,程序員的職業通道有兩條進階路線。一條 是技術路線,即由程序員、高級程序員、系統分析師,到架構設計師。在這條路線上,立足於從業務模型到計算機軟體模型的轉換,成為高端的軟體技術工作者。另 一條是管理路線,即由程序員,經開發小組負責人、項目經理,再到企業中高層管理者。程序員加強自己管理意識的培養,多站在組織的角度來分析問題和解決問 題,成為優秀的管理者,甚至職業經理人。 近年來,產品管理成為企業多產品經營形勢下一個越來越受重視的管理課題。特別是知識經濟環境下,諸如互聯網與軟體、創意、傳媒等現代新型產業鏈中, 其幾乎可以忽略不計的復製成本,有競爭力的產品與優秀的產品管理成為了制勝的關鍵。基於產品的商業化運營,在越來越具聚合效應的網路時代,扁平經營、草根 聚合、精準營銷、直通車服務等全新的經營環境常常造就了贏者通吃的局面,以產品為中心的企業管理逐漸形成獨立的產品管理體系,被眾多企業所關注和採用。 在軟體企業中,隨著產品管理的興起,可以說,走向產品,是程序員在技術與管理之外的第三條職業通道。越來越多的程序員開始轉型做產品工作,特別是對 那些具有創業意識的程序員而言,走向產品是一條必經之路。騰訊的馬化騰和360的周鴻禕,他們都是由程序員做起,然後開創自已的產品和事業。 產品管理的興起,產生了以產品經理為中心的產品工作職業方向。產品職業方向可以從產品系列的職務與崗位兩個維度來觀察。職務上,有首席產品官 (CPO)、產品總監、產品經理、產品專員、產品助理,其中尤以產品經理一職最為中心;崗位上,有產品競爭分析與用戶需求管理、產品創意與策劃、產品原型 設計、產品運營規劃、產品實現過程跟蹤、產品商品化實施、產品運營、產品經營成果分析與跟蹤、產品升級維護管理、產品管理體系與制度建設、產品人員技能培 養等。這些基於產品而設計的崗位以有效滿足用戶需求為中心,它不同於其它以專業技術和職能效率為中心的因職能分工而產生的崗位。 產品管理是近些年隨著IT和互聯網的快速興起而被各企業所重視,而現在的各大院校並沒有產品管理相關的專業,各類培訓機構也少有類似培訓課程,從事 產品工作的人員大多是從不同專業、不同崗位轉型過來的。相比較而言,程序員有著營銷、測試、客服等崗位走向產品的人員所難以比擬的優勢。有些公司甚至做出 了規定,欲從事產品工作,必須要有多年的軟體開發經驗。程序員轉型從事產品工作所具有的獨特優勢主要包括以下幾點: 第一,程序員能夠更好地理解產品的實現方案,所策劃的產品更具可行性。做產品策劃工作,也許缺的不是點子或創意,而是有效可行的方案。多年的程序員 工作經驗,對軟體技術和軟體實現方案的判斷,可以規避那些天馬行空的產品想法,工作更有成效。比如在整理用戶需求時,程序員的前期有效判斷和可行性辨別, 會大大提高產品的策劃質量與速度。程序員出身的產品人員可以和研發人員進行無隙的溝通,用更便於研發人員理解的語言和思路來進行產品方案的解讀和跟進。 第二,程序員的軟體開發工作,與其說是代碼的編寫,不如說是邏輯語句的組織。程序員一般都具備嚴密的邏輯思維能力,這是進行紛繁而雜亂的需求分析和 產品概念設計必備的優勢,更有利於從中分門別類理清脈絡關系,轉換為產品功能規劃,把產品做成精品。例如需要往U盤寫文件,產品人員可能只想到正常的操作 邏輯,但程序員可能會想到更多異常情況,如:U盤損壞、傳輸過程中拔出、斷電、傳輸的文件損壞、U盤防寫、重復文件、焦點位置、空間不足等等。再有,好 的用戶體驗的產品,在本質上,就是產品功能的邏輯展示,或者說用戶操作的邏輯引導。 第三,程序員往系統分析的技術方向發展,從本質上來說,同往產品策劃方向發展是相通的,都需要對真實世界本質關系有著充分的理解與把握。能夠走向系 統分析員的優秀程序員,完全有可能成為一個優秀的產品策劃人員。差別在於系統分析員的工作成果是面向程序員、面向計算機,而產品策劃是面向用戶、面向市 場。每一名程序員也必定是某個軟體產品開發工具的使用者,有深厚的軟體產品使用體驗,具有從用戶出發來表述問題的基礎。 第四,程序員一般都具有快速學習能力,保持對計算機相關行業動態和技術革新的觀察與思考,這在一定程度上會培養對行業與技術的洞察力。產品策劃和設 計工作,最後能否獲得市場的成功,考驗的正是這種洞察力。因為產品工作是時時圍繞解決的是什麼人的什麼問題來開展,也就是始終圍繞做正確的事。只 有對行業與技術有洞察力的人,才能夠站在用戶需求的角度來理解與體驗,激發創意,做出好產品來。 當然,程序員雖具備上述獨特優勢,並不等於程序員轉做產品工作,就一定能夠成功。要策劃出好的產品,要成為一名優秀的產品經理,他們也面臨著各種挑戰: 第一,創新和結構化思維的沖突。 結構化思維可以說是程序員的典型標志,這種思維模式對於把一件事情做好是很重要的,但它往往也會是創新思維的天敵。創新卻是產品工作的靈魂,程序員需要不斷打破常規激發靈感才能做好產品工作,就必須克服已經形成的思維定勢。 第二,團隊協作與英雄主義的矛盾。 程序員往往習慣於單打獨斗的工作方式,崇尚技術牛人,缺少團隊協作意識和與人溝通的技能。產品工作則需要大量的溝通協調,甚至組織領導工作,強調的是團隊作戰。在合作精神方面,想要轉向產品工作的程序員的確亟待加強。 第三,商業意識和市場運營知識匱乏。 特別是在全面產品管理思想下,產品人員需要有很強的市場營銷方面的知識和商業化運作的策劃與分析能力,僅僅把產 品做出來是不夠的,賣得掉才是硬道理。產品策劃的環節,面臨著營銷模式、目標用戶、渠道選擇、競爭策略等的選擇與設計,這也是擺在技術出身的程序員面前的 重要課程。 每個企業,都會根據自身所在行業特點和本企業的資源優勢,來部署不同形式的產品管理機制。程序員針對自己的性格特點和能力特徵,抓住產品管理這一方興未艾的職業機遇,走向產品,以優秀產品經理的能力模型培養來規劃學習道路與職業生涯,是值得重視的一個職業方向。 ------------------------------------------------------------------------------ 安徽高新專修學院
Ⅲ 程序員可以通過什麼方式賺錢
Google Adsense
利用Adsense可以將廣告發布到你的網站上去,通過訪客點擊廣告來賺取傭金。這似乎是一個很不錯的主意,如果你有一個不錯的創意,寫一個網站對於程序員的你應該不難,網站放上Adsense廣告,推廣、引流、收美金。
02
Android App交易市場收入
首先,他的Android應用是免費的,他並不是靠賣App來賺錢,而是通過向App中投放廣告來賺取傭金的。如果你對Android技術非常熟悉,或者你的工作就是做Android開發,那麼為什麼不自己開發一個應用放到Android市場,為自己創造另一份收入。
03
參加一些開發者大賽
這是一種最實在的方法了,拿獎金,只賺不賠,不過前提是你得有足夠的實力。他參加過Google的Android開發者大賽,很得瑟的跟我們說那時候他贏得了2000美金,盡管不是很多,但從中也可以學到不少知識,至少,通過學習,他可以自己開發Android應用來賺取廣告費了。
04
承接一些項目
當然這要花費你很大一部分時間,承接時你要考慮時間成本,至少這些時間要和你的工資相當。個人不怎麼推薦這種方法,有時候周期會很長,很容易喪失積極性,不過也算是一種方法
05
刷機、越獄
現在都是智能手機,有些用久了,卡了,像電腦一樣要重裝系統,一些小白有教程都搞不定,這時候你可以藉此開展刷機業務。還有iOS的越獄,這個需要你對iOS的操作非常熟悉。你可以將此業務掛到淘寶上,幫助買家實現他們要的功能。
06
做黑客
黑入銀行,盜取前女友現任老公的所有錢,哈哈,開玩笑了。不過,做一名優秀的計算機黑客確實可以幫你賺取很大一筆收入,比如幫助一些企業提高計算機網路的安全性、做一些抵禦攻擊的積極措施等。
07
寫評測
DevStore專門收集各種開發者評測,開發者花幾個小時測試下,如果文筆好的話可以大賺一筆,一篇評測600以上吧。
08
兼職論壇大神
各種開發者論壇會專門聘請一些大神,專門回復論壇各種小白問題,提高論壇的專業度。
09
做網站、博客
沒事寫個博客,整個論壇,招幾個編輯幫你維護著。平時在編程過程中有什麼心得感悟什麼的都寫下來,不知不覺網站流量就上來了,你就可以收廣告錢了。
Ⅳ 【創業點子】 我們是幾個程序員組成的小團隊,想開發一個創意類的軟體,怕被大公司剽竊抄襲,怎麼辦程
賣給他們,再經營,龐大了,再跳出來
Ⅳ 程序員要具備什麼技能
一名合格的程序員需要掌握哪些技能呢?
熟練掌握開發工具
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C編寫。而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVA One很可能會成為未來的主流開發工具之一。其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,C Builder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
熟知資料庫
為什麼資料庫是如此重要?作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL, Postgres等。
對操作系統有一定的了解
當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。只有對操作系統有一定的了解後,你會發現自己上了一個新的台階。
懂得網路協議TCP/IP
在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式,從最早的客戶/伺服器結構,到今天的WEB Services,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,所以,深入掌握TCP/IP協議是非常必要的。至少,你需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。
明白DCOM/CORBA/XML/WEB Services存在的意義
隨著技術的發展,軟體與網路的無縫結合是必然趨勢,軟體系統的位置無關性是未來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分布計算的中間平台,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。程序員需要做的不僅僅是利用商業的開發平台來開發軟體,而是要理解這些技術的初衷,即為什麼需要這項技術,如果你能理解了這一點,再回頭看這些技術的具體實現,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的「世界語」,是分布計算的基石之一。
不要將軟體工程與CMM分開
現代大型軟體系統的開發中,工程化的開發控製取代個人英雄主義,成為軟體系統成功的保證,一個編程高手並不一定是一個優秀的程序員,一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟體工程思想有機結合,編程只是軟體生命周期中的其中一環,優秀的程序員應該掌握軟體開發各個階段的基本技能,如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟體測試等。一句話可以概括我的看法:「創意無限,流程保證」。
擁有強烈的好奇心
什麼才是一個程序員的終極武器呢,那就是強烈的好奇心和學習精神。沒有比強烈的好奇心和學習精神更好的武器了,它是程序員們永攀高峰的源泉和動力所在。
Ⅵ 如何成為優秀的程序員
首先是 來自自身內部的創造性的一面
雖然你可以從別人那裡學到很多東西,也可以已有的東西中得到靈感。但真正的創意靈感來自於你自己。例如喬布斯,他不是一名工程師,也不是程序員,但他很有創意,他推動蘋果公司創造了iOS,Siri。
或許你想問編程需要什麼創意?任何人都可以在線或離線學習一些課程,閱讀一些書籍就可以開始寫代碼了。但這些東西都是別人灌輸給你的,你需要有自己的一些想法和創意,想出自己的框架。例如Dennis Ritchie,他就創造性地編寫了C編程語言,而且目前這是使用最廣泛的語言。
它像任何口語一樣,每個人都知道一些語言,但不是每個人都是一個詩人或一個作家。你需要創造性的技能才能被稱為偉大的詩人或作家。
其次是技術方面
你需要從一些編程語言開始。過去很多人開始是以C語言開始編寫程序。然後很多人開始使用BASIC。現在人們從Python或PHP開始。其實從什麼語言開始不重要。重要的是一旦你掌握了這些概念,你就可以編寫演算法並繪制流程圖。
總的說來,如果你花太多時間做下面的事情,它可能會提高你的技能一點點,但你永遠不會是一個好的程序員:
只知道看書的程序員用永遠不會成為一個好程序員。俗話說All read and no practice makes Jack a ll boy,古人的話絕對是有道理的,不是說讓你不要閱讀,只是不要只有閱讀,你應該通過應用你學到的東西來構建簡單的應用程序。
通過記憶代碼和演算法。編程是思考而不是記憶。你可以擁有最好的記憶力,但是如果你沒有自己思考,你永遠不會是一個好的程序員。我們有計算機和互聯網為我們記住事情,你不需要記住任何東西 , 你只需要了解在哪裡以及如何找到你需要的信息。
通過編寫你看的書中的單個函數和演算法,即編寫愚蠢的冒泡排序函數和類似的無用演算法。
通過測試其他人的代碼。例如是否使用測試軟體或編寫單元測試等
通過閱讀和調試其他人的代碼。這可能會在短期內有所幫助,但是只是在對方的代碼寫得很好的情況下,你可以從中學到別人的一些良好的習慣;但閱讀不好的代碼作為例子會教你養成不良的習慣,而且你或許一直會記得這個錯誤的習慣。從長遠來看,花費太多時間閱讀和調試其他人的代碼將不利於你的成長。
讓別人來管理你。編程就是為自己思考,你需要自己管理自己,也就是上面所說的,要有自己創造性的思考。
成為優秀的程序員最好的打開方式就是:
你必須自己完整的完成一個項目。不要過多地把重點放在閱讀書籍,語法,演算法和功能上,也就是說,在開始時不要太關注細節。你可以簡單地坐下來思考一個你想為自己開發的應用程序/系統......如果實在需要的話,可以問你身邊的同事/老師的想法,但是你必須有自己的思考並且自己獨立去完成它。
一旦你想明白了,就把這個想法留在腦海,並且富有激情的去完成它,所有的一切都會慢慢地開始。你會想到你要實現的功能,你將開始研究如何實現這個或那個。
只有在這個時候,你才應該拿起一本書或在互聯網上搜索關於如何實現這個你認為可以做的很酷的功能的答案。隨著你的應用程序/系統的發展,你將會慢慢地開始考慮編寫更簡潔的代碼,以便在將來也可以派上用場,讓自己的工作更輕松。
只有通過把自己的想法帶入生活,你才能學會如何成為一名優秀的程序員。你應該把自己看成是一個藝術家,而不是像編寫代碼的人那樣去編譯和運行。如果你只是在別人的代碼上工作,或者只是閱讀書籍等,你將很快失去動力,你永遠不會發現或利用你的才華。
Ⅶ 在大家眼中,程序員是一個怎樣的職業
為什麼有人在技術造神
大家應該已經感受到,技術圈這兩年已經和娛樂圈創業圈差不多的氛圍了,這其實是有原因的。
最主要的原因是,創業公司和創業媒體越來越多,他們需要大量的程序員投身到創業這個高風險的行業中,而造神,正是讓程序員們自動跳進火坑的絕佳辦法。不是說程序員不能創業,我是說,創業媒體們故意模糊了創造和創業的界限,把程序員們的創造沖動偷換概念,鼓吹了太多不適合的人去創業。
另一個原因是,招聘成本高漲,CTO 們為了能提升影響力,不得不頻頻出席各種大會刷臉。文筆好的再做做自媒體和技術社群,既能強化個人品牌提高身價,又能在融資的時候提升成功率。
總之,這個行業出現了各種技術大神。
這些大神在普通人類和初級程序員眼裡是無所不能的,是他們嚮往的目標;在中級程序員和高級程序員眼裡,這些大神就是他自己,只不過他還沒紅起來而已…
於是攀比心理也開始泛濫,全國第三的架構師比比皆是,整個圈子漸漸就浮躁起來。
然而絕大部分程序員,依然是雇員
媒體們在包裝時,最喜歡按獨立開發者的路線來整。「從小就對技術有天分」、「大學時曾在某編程大賽一鳴驚人」、「寫了個 APP 玩結果一個月有了千萬用戶」、「從公司離職自立門戶三年上市」。
OK,這的確是程序員的一條職業路線圖。但是媒體們不願意告訴你的是,一:只有極少數程序員是通過這個路線成功的;二:這條線其實需要太多非程序員職位的技能,比如產品設計能力和銷售能力。
程序員的價值決定
絕大部分互聯網公司的程序員職位,沒有技術門檻
然而不幸的是,絕大部分互聯網公司都不是技術驅動的公司。真的就是鳥哥說的那樣,絕大部分技術崗位,其實技術門檻都不高(門檻在工程上,後文細講)。技術不過是這些公司的護航艦,而不是破冰船。
先別打我,冷靜下來想想,到底有多少你會的那些技術,是你的同行們不會的呢?不多,對吧?
幾年前億級別的搜索還是問題,現在已經到處是通用解決方案了;幾年前千萬到億級別的網站和 APP 解決方案還在大公司手裡,現在各個架構大會都講爛啦,而且其實都差不多;就連 DeepLearning,帶 API 介面的框架也開始涌現,只需要把圖片用 REST 傳進去就能取到結果了。
很多事情,已經沒有難度,只需要持續投入。是的,對絕大部分程序員來講,他們不需要成為科學家,而需要成為工程師,成為從科學家手裡接過火種,去燎原大地的人。
怎樣才是一個好工程師
工程的本質不是創造,而是去風險化。
工程是關於如何低成本、高效率、按時按量完成既定任務的。所以判斷一個工程師是否優秀,並不是他多有創意多有名氣,而是看他有多穩,看他能多 GettingThingsDone,中文就是「靠譜」。
有時候一個好的解決方案,未必採用了最新的技術和框架,而是看上去朴實無華,功力都包涵在背後的細節里。就像頂尖高手打的斯洛克檯球,每一桿都平淡無奇,只是因為上一桿的回球太到位。
有同學問,那我工程做的太好,豈不是沒有機會遇到一些高難度挑戰了么?放心,一般公司都僱傭了產品經理來幫你製造高危事件。
同樣的,一個好的工程師,會選擇最適合需求和團隊的方案,考慮開發效率和系統效率的均衡,從而已達到最優效果;而不是整天和別人去爭論什麼語言最好、哪些框架過時了。
工程的另一個要求是進度控制和質量控制。
在項目立項之後動工之前,對要做的事項作出詳盡的規劃,對未來一到兩周的工作給出細致的排期,這是進度控制的基礎。
代碼的及時入庫與合並,自動化測試和每日構建,CodeReview 和文檔編寫,這些看似無關緊要的習慣則決定了項目質量。
不幸的是,很多程序員把這些工程上至關重要的東西當成垃圾,視為對他們「創造力」的壓抑。
他們總是以創造力為借口去尋求自身的自在,比如上班不帶胸牌不打卡,中午休息時間在公司看視頻打游戲,最好可以遠程上班,項目到期之前再來檢查進度,公司不要用統一框架,只有傻逼才寫文檔。
對職業的理解偏差和工程能力上的荒蕪,培養了大批能寫代碼但死活寫不好代碼的「碼農」,反而讓那些有著彪悍工程能力和良好習慣的程序員變得奇貨可居。
最後,來說說程序員那無處安放的創造力
有了錘子想找釘子是很正常的原始沖動,但我們必須認識到,創造力對於程序員這個職業來講,是錦上添花的東西。如果你沒有強大的工程能力,那麼創造力也不過是無本之木。所以扎扎實實的把工程基礎打好,這是最根本的。
在此基礎上,我比較推薦程序員採用內外兩條線來培養自己。在公司內的項目上採取相對保守的策略,盡力把穩定性做到最好,培養出自己卓越的工程能力;然後在公司外的開源項目和自己的獨立項目上,採用一些新的技術、實踐一些新的想法、充分發揮自己的創造力,夢想還是要有的,對吧。
這樣做最明顯的好處是,你可以了解到新技術和激進方案的優缺點,從而在進行方案選型時,有更多的依據;還有一個職業發展上的好處:如果不是主負責人,公司的項目往往不能代表你的能力;但獨立項目卻可以作為一個非常好的能力證明出現在你的簡歷里邊。
你可以是一個身懷絕技的手藝人,在自己家裡你嘗試各種手法各種風格的個人作品;但當你參與頤和園這種級別的工程時,好好的把自己負責的石頭雕成總設計師要求的樣子就好 —— 畢竟這個時代一個人已經很難負責整個項目了。這就是我所理解的程序員的工匠精神。
Ⅷ 程序員工作到底能幹多久程序員的前途如何
千千萬萬的程序員們一直困惑「程序員的前途如何」、「程序員工作到底能幹多久」的問題。目前比較普遍的認識,程序員的職業通道有兩條進階路線。一條 是技術路線,即由程序員、高級程序員、系統分析師,到架構設計師。在這條路線上,立足於從業務模型到計算機軟體模型的轉換,成為高端的軟體技術工作者。另 一條是管理路線,即由程序員,經開發小組負責人、項目經理,再到企業中高層管理者。程序員加強自己管理意識的培養,多站在組織的角度來分析問題和解決問 題,成為優秀的管理者,甚至職業經理人。近年來,產品管理成為企業多產品經營形勢下一個越來越受重視的管理課題。特別是知識經濟環境下,諸如互聯網與軟體、創意、傳媒等現代新型產業鏈中, 其幾乎可以忽略不計的復製成本,有競爭力的產品與優秀的產品管理成為了制勝的關鍵。基於產品的商業化運營,在越來越具聚合效應的網路時代,扁平經營、草根 聚合、精準營銷、直通車服務等全新的經營環境常常造就了贏者通吃的局面,以產品為中心的企業管理逐漸形成獨立的產品管理體系,被眾多企業所關注和採用。在軟體企業中,隨著產品管理的興起,可以說,走向產品,是程序員在技術與管理之外的第三條職業通道。越來越多的程序員開始轉型做產品工作,特別是對 那些具有創業意識的程序員而言,走向產品是一條必經之路。騰訊的馬化騰和360的周鴻禕,他們都是由程序員做起,然後開創自已的產品和事業。產品管理的興起,產生了以產品經理為中心的產品工作職業方向。產品職業方向可以從產品系列的職務與崗位兩個維度來觀察。職務上,有首席產品官 (CPO)、產品總監、產品經理、產品專員、產品助理,其中尤以產品經理一職最為中心;崗位上,有產品競爭分析與用戶需求管理、產品創意與策劃、產品原型 設計、產品運營規劃、產品實現過程跟蹤、產品商品化實施、產品運營、產品經營成果分析與跟蹤、產品升級維護管理、產品管理體系與制度建設、產品人員技能培 養等。這些基於產品而設計的崗位以有效滿足用戶需求為中心,它不同於其它以專業技術和職能效率為中心的因職能分工而產生的崗位。產品管理是近些年隨著IT和互聯網的快速興起而被各企業所重視,而現在的各大院校並沒有產品管理相關的專業,各類培訓機構也少有類似培訓課程,從事 產品工作的人員大多是從不同專業、不同崗位轉型過來的。相比較而言,程序員有著營銷、測試、客服等崗位走向產品的人員所難以比擬的優勢。有些公司甚至做出 了規定,欲從事產品工作,必須要有多年的軟體開發經驗。程序員轉型從事產品工作所具有的獨特優勢主要包括以下幾點:第一,程序員能夠更好地理解產品的實現方案,所策劃的產品更具可行性。做產品策劃工作,也許缺的不是點子或創意,而是有效可行的方案。多年的程序員 工作經驗,對軟體技術和軟體實現方案的判斷,可以規避那些天馬行空的產品想法,工作更有成效。比如在整理用戶需求時,程序員的前期有效判斷和可行性辨別, 會大大提高產品的策劃質量與速度。程序員出身的產品人員可以和研發人員進行無隙的溝通,用更便於研發人員理解的語言和思路來進行產品方案的解讀和跟進。第二,程序員的軟體開發工作,與其說是代碼的編寫,不如說是邏輯語句的組織。程序員一般都具備嚴密的邏輯思維能力,這是進行紛繁而雜亂的需求分析和 產品概念設計必備的優勢,更有利於從中分門別類理清脈絡關系,轉換為產品功能規劃,把產品做成精品。例如需要往U盤寫文件,產品人員可能只想到正常的操作 邏輯,但程序員可能會想到更多異常情況,如:U盤損壞、傳輸過程中拔出、斷電、傳輸的文件損壞、U盤防寫、重復文件、焦點位置、空間不足等等。再有,好 的用戶體驗的產品,在本質上,就是產品功能的邏輯展示,或者說用戶操作的邏輯引導。第三,程序員往系統分析的技術方向發展,從本質上來說,同往產品策劃方向發展是相通的,都需要對真實世界本質關系有著充分的理解與把握。能夠走向系 統分析員的優秀程序員,完全有可能成為一個優秀的產品策劃人員。差別在於系統分析員的工作成果是面向程序員、面向計算機,而產品策劃是面向用戶、面向市 場。每一名程序員也必定是某個軟體產品開發工具的使用者,有深厚的軟體產品使用體驗,具有從用戶出發來表述問題的基礎。第四,程序員一般都具有快速學習能力,保持對計算機相關行業動態和技術革新的觀察與思考,這在一定程度上會培養對行業與技術的洞察力。產品策劃和設 計工作,最後能否獲得市場的成功,考驗的正是這種洞察力。因為產品工作是時時圍繞「解決的是什麼人的什麼問題」來開展,也就是始終圍繞「做正確的事」。只 有對行業與技術有洞察力的人,才能夠站在用戶需求的角度來理解與體驗,激發創意,做出好產品來。當然,程序員雖具備上述獨特優勢,並不等於程序員轉做產品工作,就一定能夠成功。要策劃出好的產品,要成為一名優秀的產品經理,他們也面臨著各種挑戰:第一,創新和結構化思維的沖突。結構化思維可以說是程序員的典型標志,這種思維模式對於把一件事情做好是很重要的,但它往往也會是創新思維的天敵。創新卻是產品工作的靈魂,程序員需要不斷打破常規激發靈感才能做好產品工作,就必須克服已經形成的思維定勢。第二,團隊協作與英雄主義的矛盾。程序員往往習慣於單打獨斗的工作方式,崇尚技術牛人,缺少團隊協作意識和與人溝通的技能。產品工作則需要大量的溝通協調,甚至組織領導工作,強調的是團隊作戰。在合作精神方面,想要轉向產品工作的程序員的確亟待加強。第三,商業意識和市場運營知識匱乏。特別是在全面產品管理思想下,產品人員需要有很強的市場營銷方面的知識和商業化運作的策劃與分析能力,僅僅把產 品做出來是不夠的,賣得掉才是硬道理。產品策劃的環節,面臨著營銷模式、目標用戶、渠道選擇、競爭策略等的選擇與設計,這也是擺在技術出身的程序員面前的 重要課程。每個企業,都會根據自身所在行業特點和本企業的資源優勢,來部署不同形式的產品管理機制。程序員針對自己的性格特點和能力特徵,抓住產品管理這一方興未艾的職業機遇,走向產品,以優秀產品經理的能力模型培養來規劃學習道路與職業生涯,是值得重視的一個職業方向。沈陽師范大學火熱招生中!
Ⅸ 程序員提升開發技術需要注意哪些
一、不提升非技術技能
我們認為非技術技能是項目成功的主要因素。這些非技術技能也可以稱之為「軟技能」,總體上來說,它已經被公司證明為能夠駕馭企業和客戶之間的長期商業關系,因此也能決定公司的成長發展路徑。一些關鍵的軟技能指標包括:
a.紀律——這是最重要的特徵之一,缺乏紀律,最終會讓這個開發團隊在開發能力上「缺乏自信」。解決這一問題的矯正方法就是每天制定詳細的to-do清單:兌現你的承諾、完成你開始做的事情、避免多重任務,因為這些往往會讓你的生活產生混亂。
b.顧客的聲音——不把客戶置於決策的核心地位只會跟你們業務的原始目的相沖突。如果客戶不高興,即使你擁有世界上一流的專業知識和資源也不會起什麼作用。保持符合客戶期望的解決方案、及時交付才能體現出項目的真正價值。
c.溝通——尤其是當客戶和供應商並不在同一地點的時候,明確而及時的溝通是填補服務空白的極好措施。主要集中在這三個方面你就能克服問題——進行主題討論、清晰表達、乾脆簡潔。
d.了解需求——在整個開發生命周期過程中,決定成功和失敗的之間的一個至關重要的區別將會給人留下深刻的印象。通過最初的頭腦風暴法了解問題狀態,以及後續的交貨程序,這其中都要和客戶完美配合。只有這樣,客戶才會贊賞你的工作,給你好評。
二、對編碼不理智
古人雲:善泅者溺,善騎者墮。但估計絕大多數 的程序員都認為自己的編程技術絕對的牛。而同樣真實的是,每一個代碼,讓不同的程序員去實現的話都會不可避免地發現它所存在的缺陷。所以說,只有通過在一 個項目上的合作,程序員之間必然有的摩擦才能證明誰是最好的。健康的競爭是好事,但它不應該成為一個本來可以成功的項目的負擔。
另一個創意阻礙是無法將預定義的模板使用在對你有利的開發項目里。幾乎所有的編程語言有一個很好的在線 /內置的代碼片段存儲庫,可以修補代碼,防止重新編程。然而,如果因為不理解需求或缺乏接觸各種可用庫/模板的話,這就意味著程序員最終會無意間將一開始 就創建的代碼付之東流。這不僅增加了開發時間,也提高了總體成本。另外一點就是,發布了的代碼已經經過了質量檢測,所以只有將它用作模板才能發揮它更大的 價值。
三、不一定什麼都要被理解
如果你是剛調到這個團隊來的編程人員,對於手頭的工作並不是很熟悉,那該怎麼辦?肯定是先看一些前任留下來的工作計劃,要是他寫的詳細倒也沒什麼,如果寫的不詳細,估計會讓你更加的撓頭。
因此,推己及人,在需要交代的工作上,最好是把任務寫的盡可能的詳細。這么做也是非常現實的原因:能夠把編程問題解決掉,最好是保證使用解釋性的語言和英語發音來表示變數。一些基本的指針可以讓你的程序更容易被理解,包括:
a.把所有參數、引用、方法和變數名稱盡可能接近英語表達。保持文件名簡短但有助於理解的功能。
b.使用++包裝文字是一個好辦法,能讓代碼和注釋更加清晰。
c.將編寫的程序保持在一個連續的流程上,尤其是在使用OOP基礎上的語言:C#、C 和 C++。
d.對於不同的代碼塊使用不同的描述名稱。
四、不使用經過驗證的工具和技術
程序員的好壞從他使用的編程工具和調試工具上就能看出。在異常情況的跟蹤上,下面就是程序員經常會出現的常見錯誤。
對一些可能會對其它代碼有影響的常見案例進行捕捉,處理這些比較常見的異常情況(而不是特殊的異常)意味著無意中除除掉了會抑制整個程序的殘留部分,因此並不會影響他人的代碼。
也許程序員可能帶有惡意的意圖來捕捉所有的異常情況,但即使是捕捉到了也不實施採取措施,這就是常說的「虛假安全閥」,這種異常處理手段是對整個軟體的穩定和安全的一種妥協方式。
五、較差的控製版本
在任何涉及多個團隊的項目里,當談到版本控制的時候不去介紹使用最佳實踐都是一個十足的罪過。版本控制的目的是確保由一個人執行的編輯或修訂不去影響另一個人的工作。
版本控制不僅有助於將由兩個或兩個以上的程序員的編輯工作合並到一起,還有助於跟蹤程序的更改歷史。所以說,任何開發團隊都應該做一些好的改進措施以確保強大的版本控制,這其中就包括:
為每個解決方案創建一個「邏輯單元」
給解決方案制定描述性的名稱
確保你所使用的都是最先進的文件
頻繁的向團隊分享你所做的各種改變
六、擁有最新信息的個人代表不了團隊
這是相對有趣的一點,所有的商業產品都想要以自身的敏捷技術和產品文化來給客戶留下深刻的印象,但是現 實中很少有廠商會花時間去磨練他們員工在介紹產品特點上的技能。許多公司只是簡單地提供了一些基本的培訓,並且抱希望與員工在真實的日常項目里學到更多的 技能。所以部門經理和項目的直接領導可以通過以下兩個辦法來提高員工的業績:
一旦有新員工加入,就立刻強制安排他參加專業培訓,讓他知道他的角色是用來干什麼的,盡早產生創造力。例如一個測試人與加入之後,就應該向他介紹編程的理念,之後將培訓重點放到測試實踐上,而不是繼續闡述編程的重要性。
現階段的技術的進化程度比以往任何時候都要快,,所以要記住,定期培訓是必不可少的,這是在給團隊創造價值。例如一個Web 設計師需要知道響應式設計,提供給設計師大量的用戶日常使用的移動設備的不斷擴張的樣品,希望他們能獲得靈感。
七、不恰當的測試
測試作為整個系統開發生命周期(Systems Development Life Cycle,簡稱SDLC)的重要一個要素,通常不需要開發團隊給出太驚人的結果。但是如果在測試環節沒有付出恰當的、相應的努力的話,這是說不過去的。 下面的一些方法或許對你的測試團隊有用,至少在你們交付產品的時候能夠給用戶一個好的交代。
單元測試
實物模型
綜合測試
八、注意安全漏洞
有的時候在軟體開發過程中,就會遇見如下這樣的安全漏洞:
A、不同組件之間意想不到的交互作用:a、輸入不正確的驗證信息;b、SQL資料隱碼攻擊;c、跨網站指令碼;d、命令植入攻擊;e、跨站請求偽造(CSRF);
B、難以實施的資源管理,包括:a、不尊重可用內存緩沖區;b、對外控制;c、使用有潛在危險的功能;
九、和客戶交流
最初的合同簽訂後,開發公司通常會忘記每天與客戶進行產品上的信息交互,以至於在交貨的時候還需要進行升級。兩大關鍵的交流點可以讓你和客戶保持更好的、更長的關系:
在客戶開問之前,開發方應該和客戶進行交流溝通。
和客戶保持周期性的交流。
十、避免標准實踐面臨的迫在眉睫的最後期限
通 常情況下項目都會遇到進度延誤的現象。然而,這不是說你有理由去偷工減料或者是在開發或測試階段耍花招,未經測試的模塊絕對是一個隱患,會讓你的開發團隊 名譽受損的。一個更好的方法來管理延遲是提前告知客戶並且積極執行延遲計劃。只要延期的理由是有效的,客戶應該會理解,也會給你額外的時間來解決這個問 題。
Ⅹ 如何成為有思想、創新的程序員
寫這篇文章也源於我和新員工的一些談話心得,一些基礎比較薄弱的技術人員,看起來有點像沒有思想和靈魂的程序員。你可能也會覺得國內有很多小企業出來的人或者剛畢業的人,會的最多也是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商店是我在不斷思索通用窗體框架以及對現有科技的趨勢的把握下,由幾個很有創造力的編程人員,在建立了完善的產品保障體系下,構建起來的。這兩個產品我會在後面介紹如何設計的。他們的設計我用了很長的時間。 我不是什麼老鳥,希望我們在如此多的技術的世界中能夠多多交流,共同進步。解決這些問題,不僅增加了編程的樂趣,更是增加了自己的見識,從而避免自己成為一個沒有思想的程序員!我也知道,我們可以找到很多理由來反駁文中提到的做法和觀點,但是,提高自己才是最重要的,不要去著急的否定一些什麼,並給自己找借口。