『壹』 為何大多數程序猿會轉行做產品經理的背後的原因有哪些
產品經理這個工作對之前的工作經歷或者學歷沒有太高的要求,再加上這兩種工作有聯系,作為程序員了解產品的屬性或者性質,程序員的溝通能力很強,所以可以好好的勝任產品經理這個工作。
『貳』 好累,程序員聽不懂產品經理提的需求,問多了,產品經理嫌煩。該怎麼辦
這個東西應該有一定經驗積累會理解比較快,也是一個過程。只有多溝通,在溝通前想想溝通的目的,這次溝通要解決什麼問題。用筆記下來。然後在實操,在實操過程中如果遇到問題先想一想,試著自己去解決一下。再去詢問,至少讓別人感受你是在用心做這件事。而且也是想做好這件事。其實你們的目的都是一致的。注意方式方法,不要讓別人覺得你一個問題重復的問還沒什麼結果。大家都有自己的事情都會比較煩。
『叄』 程序員面試經常被提到的問題
java 程序員常用面試題- -
Java程序員面試三十二問
Java程序員面試三十二問
作者:佚名 來自:未知
第一,談談final, finally, finalize的區別。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以
implements(實現)interface(介面)?
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
第四,&和&&的區別。
第五,HashMap和Hashtable的區別。
第六,Collection 和 Collections的區別。
第七,什麼時候用assert.
第八,GC是什麼? 為什麼要有GC?
第九,String s = new String("xyz");創建了幾個String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
第十二,sleep() 和 wait() 有什麼區別?
第十三,Java有沒有goto?
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()?
它們有何區別?
第十七,給我一個你最常見到的runtime exception.
第十八,error和exception有什麼區別?
第十九,List, Set, Map是否繼承自Collection介面?
第二十,abstract class和interface有什麼區別?
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是
synchronized?
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體
類(concrete class)?
第二十三,啟動一個線程是用run()還是start()?
第二十四,構造器Constructor是否可被override?
第二十五,是否可以繼承String類?
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它
方法?
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行
,什麼時候被執行,在return前還是後?
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
?
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後
的結果,那麼這里到底是值傳遞還是引用傳遞?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,編程題: 寫一個Singleton出來。
以下是答案
第一,談談final, finally, finalize的區別。
final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父
類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,
可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能
讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally?再異常處理時提供 finally
塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入
finally 塊(如果有的話)。
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去
之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是
在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執
行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以
implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面
,由另一個內部類實現。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套
類最大的不同就在於是否有指向外部的引用上。具體可見http:
//www.frontfree.net/articles/services/view.asp?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2
不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步
的。
第六,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
第七,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為
false,那麼系統會報告一個 AssertionError。它用於調試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。
不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參
數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任
何方式改變程序的狀態。
第八,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收
集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為
s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
第十二,sleep() 和 wait() 有什麼區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。
這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)"醒來"的線程具有更
高的優先順序,(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對
象進入等待狀態,直到被喚醒或等待時間到。
第十三,Java有沒有goto?
Goto?java中的保留字,現在沒有在java中使用。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類
之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其
父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子
類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或
有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改
變返回值的類型。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它
們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相
等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的
內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException,
BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException,
CMMException, , DOMException, EmptyStackException,
IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException, IndexOutOfBoundsException,
MissingResourceException, NegativeArraySizeException, NoSuchElementException,
NullPointerException, ProfileDataException, ProviderException, RasterFormatException,
SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException,
UnsupportedOperationException
第十八,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能
處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
第十九,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是
第二十,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基
本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而
可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象
靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代
之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的
介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數
。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即
將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。
由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類
型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是
synchronized?
都不能
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類
(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類
必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由
JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它
方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行
,什麼時候被執行,在return前還是後?
會執行,在return前執行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後
的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數
的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int
、 short、 char 或者 byte。long,string 都不能作用於swtich。
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,
在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為
contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,
不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
『肆』 APP上線出重大bug,產品經理欲開除程序員網友:把你自己開了!
對於程序員而言,出現bug就像吃飯一樣稀鬆平常。出現bug?改就是了。但最近出了個讓眾網友都嘖嘖稱奇的事。某公司的APP上線之後,出現了重大bug,這位產品經理居然去網上問該不該開出程序員。頓時,眾程序員就炸了。這是什麼情況呢?
為什麼會有這么多程序員都氣炸呢?這么說吧,首先,程序員不可能一點bug都不出,但是現在這么重大的bug到APP上線了才被發現。很明顯是測試的責任更大,現在這個產品經理卻是讓程序員走人。再者,不管是測試還是前端的錯,首先,最大的責任應該是這個產品經理的錯。而他,現在只想找程序員的責任。最後,出現了錯誤,他的第一想法不是解決問題,不是找出各部門的責任,不好好復盤而一味的甩鍋給程序員們。
眾網友也是氣憤不已,表示,開!就應該讓這個產品經理把自己開了,不懂前後端還敢管程序員做APP。出了事情不自己扛還找人背鍋。另一部分則表示趕緊開除程序員,放他們一條生路。
不管怎麼說,這位產品經理的行為,著實讓人十分寒心。身為管理者,出事了首先就應該從自己找原因。我們公司的負責人,有問題首先都是自己先承擔,然後再說如何去懲罰出錯誤的部門。即便是懲罰也不會說像這樣直接讓人走人。說實話,這種行為就像夫妻吵架說離婚一樣的性質。即便後來問題解決,也和好了,但是心卻寒了。
對此,各位小夥伴有什麼不同的想法呢?
『伍』 為防被程序員「砍」,產品經理需要注意這些場景
互聯網行業中,眾人熱衷於討論「程序員砍產品經理」。雖然,「砍」更多是調侃的意思,一種消遣工作的方式;但是,這不是一個飯後笑話,側面反應了產品經理和程序員間的對立關系。很多時候,產品經理和程序員間就像對手,產品研發過程就像打仗,總要爭個你死我亡。「砍」的本質,是程序員表達對產品經理的不滿,也是一種情緒的宣洩。
在產品研發的過程中,產品經理與程序員對立關系,會嚴重影響項目的推進。一旦產品經理和程序員對立關系公開化,很容易導致團隊人心渙散。這種對立關系,經常滋生出一些極端的事情,罵娘、打架已屢見不鮮。
下文就列舉一些程序員想砍產品經理的場景。這些場景都是我過去和很多程序員朋友交流時,他們遇到的對產品不滿的場景。這些場景,都會以產品經理的溝通話語表現出來。通過這些場景,去解析這種對立關系產生的原因。以及,作為對照,產品經理應該如何規避和處理這種對立關系。
這樣說法是程序員們最不喜歡的,最容易惹毛程序員的。這句話,在程序員們看來就是削減工時、加班的代名詞,他們當然不喜歡。而且他們也非常討厭,一個非技術人員為技術人員做技術難度的定論。簡不簡單,都需要技術人員做了技術評估,才能下結論。
這種言語,會讓程序員們覺得產品經理不靠譜。大家通常都是比較排斥借鑒。借鑒你也得有合理明確的理由。以我某程序員朋友的話來說:微信怎麼做的,你就怎麼做,那你不如去微信做產品算了。
每個產品,在表面的UI下,都有其背後的復雜的業務邏輯。如果產品經理只是叫程序員照著某個產品做,很多時候技術們是很難實現的,因為他們也需要弄懂背後的邏輯和流程。當然,這應該是產品經理的工作。
這就是抬杠。產品經理雖然名字裡面有「經理」二字,但並沒有經理的權利,當然不能命令合作的技術們。這句話,言下之意也是拒絕了商量和討論。而程序員也需要參與感和團隊感。
這就是質疑他人能力,是人都不會喜歡。如果產品經理提出的方案,程序員們沒有理解。那就說明產品經理的解釋說明和文檔,做的不夠優秀,不夠簡潔易懂。讓程序員們理解需求,是產品經理的基本工作內容。
在互聯網產品開發中,修改需求和插入新需求都是挺常見的。對於程序員們來說,這是非常不爽的事情。這種操作通常會打斷程序員的思路,思路被打斷是非常痛苦的。當然,這樣也會影響他們的開發效率。更可怕的是,反復的修改需求,會使他們有種勞動成果不被尊重的感受,同時也會對項目的未來抱有懷疑的態度。反復的更改方案,也說明產品經理設計是未經過嚴密的論證,或對細節的把控是不夠。
程序員都比較討厭反復的催促。當項目的節點確定後,技術們會嚴格遵守節點,產品應該信任他們。當然,時間比較緊湊時,反復催促也會加大程序員們的壓力,使他們變得非常煩躁。在這種時候,催促就是添麻煩。
甩鍋會導致團隊分崩離析,人心不齊。不管任何問題,都是團隊的責任,不要將責任指定給某人。特別是在項目復盤時,如果心態不好同事,這是非常難堪的。所以,我們要盡量以原因和結果為導向,而不是責任為導向。
程序員也是也是團隊的一份子,有權利知道知道需求的背景。同時,了解需求背景也利於程序員們更好的開發程序。
產品經理給程序員們畫餅是最不切實際的,只會引起大家的反感。程序員都是喜歡偏實際的東西,虛的東西只會招致白眼。
任何傳遞給程序員的需求,都是需要有計劃和規范的。如果口頭傳達一個需求,很容易導致開發出的功能與需求不匹配。同時,因為缺乏相關的記錄和文檔,可能會造成需求流失。這對於程序員們來說,可能就是延遲、加班、返工、擔責等等風險。這是團隊合作的大忌,也是項目管理不專業的體現。
以上的這些場景,可能出現一次,程序員們都會順著我們的想法做。但是,這會漸漸改變程序員們的心態,最終會使產品經理與程序員間產生隔閡和矛盾。如果出現這些場景,作為產品經理都需要小心的處理好,以免影響項目的正常推進。當然,最好是不要出現這些場景。作為產品經理,我們的最終目標,都是要保證我們的產品,准時、保質、保量的落地。
產品經理在與程序員們合作時,產品經理需要講究合作共贏、互相體諒。在產品經理的相關工作中,最要避免的就是抬杠。抬杠是一切矛盾的根源。很多時候,產品經理要站在程序員的角度考慮問題。比如,對於產品來說可能就是改改需求,但對於程序員,他們更在意的可能是因為改需求而導致的加班。
產品經理在工作中,經常會追求產品上的極致。追求極致本身是好事,但是切忌過分偏執。我們也需要考慮團隊的現狀和資源,在極致和現實間尋找均衡。畢竟,如果沒有喬布斯的團隊,要像喬布斯一樣做產品,只會拖垮團隊。
在產品開發的過程,改需求、改方案等項目異常,都是不可避免的。這是項目管理的第一部分。如何進行項目異常的處理,考驗的是產品經理的溝通能力和項目管理能力。產品經理需要在保持技術們高效工作的情況下,完成項目異常的處理。
當然,在產品經理工作中,矛盾的根源也並不總是產品經理。有時候,也可能是某些程序員的性格或者對該工作的態度導致的。這時候,產品經理要明確,作為團隊的潤滑劑,有責任推動和協調大家的工作。如果,矛盾不可調和,我們需要盡早提出問題、控制風險,避免「勉強」行事。
有時候,程序員在私下評價一起工作的產品經理時,總是會補加一句「我感覺我也能做產品經理」。這句話的背後,是產品經理沒有讓程序員們感受到產品工作的價值。在這種背景下,產品經理是很難獲取程序員們的注重,也會為很多爭論埋下誘因。那如何感受到我們工作的價值那?其實很簡單,就是保持工作信息的透明。將我們針對需求和產品做的相關工作,體現在我們的溝通或者文檔中。
導致程序員想「砍」產品經理,本質是產品經理工作方式的問題,也有情商的問題。在我的產品經理工作經驗中,我總結下了以下四點,我們需要注意和避免的。這四點,都可以和上文的場景相對應,是最容易慢慢改變程序員的心態的。
『陸』 產品經理如何應對技術的「做不了」這樣的問題
我們先了解一個問題「做不了」,為什麼做不了,無非就是程序員技術問題,做不了,金錢問題做不了,產品沖突做不了,那麼認識到這幾個問題了,產品經理還有做不了的事嗎?馬化騰都說了「在騰訊不要說什麼事是技術上無法實現的」
第一溝通問題。產品經理盡可能地向開發人員溝通,要做到這一點就是要解決什麼樣的問題,我想從解決問題的角度看,有時我們應該聽開發商解決這種方案」。
總之就是要和技術人員多溝通,了解開發產品的困難等等。
『柒』 程序員面試時,總是問有沒有項目
面試的時候肯定會問這個的,有項目經驗的自然比較占優勢。
如果你參與過項目,一般面試的會就你在項目中扮演的角色和負責的主要工作進行一些詢問,比如項目的大體架構,採用了什麼樣的技術,然後就可以順勢問你一個某某技術領域的問題,看你究竟掌握的如何。
抄寫代碼也是一種能力,因為剛開始的時候,很多東西都不會都是需要模仿別人的,不過在面試的時候這種經歷應該不會被算做項目經歷。
『捌』 產品經理怎麼和程序員打交道【3】
經常有人問我:「嗨,費傑你好!請問阿里巴巴的需求文檔怎麼寫?「,但很少聽到人談:「嗨,哥們你好!請問產品經理怎麼和程序員打交道?」你回去稍微琢磨了一下,心裡就會得到下面三種情況:1) 很多產品經理之前就是程序員,所以非常了解程序員是什麼樣的一個狀態;2) 很多產品經理還停留在關注自己產品規劃、設計本身,缺乏對團隊配合的思考;3) 很多產品經理,其實是有和程序員打交道的實踐技巧、心得的,但沒有重視和分享。事實上在很多產品研發體系下,產品經理和程序員因為思考方式、關注范圍、職能職責的差異,導致了溝通上的困難。如何更好的與程序員建立起一座暢通的橋梁也是每位產品經理需要思考的問題。一般情況下,產品經理和程序員溝通困難大概的原因:�0�21、得到信息不對稱;�0�2�0�2產品經理得到的信息一般集中在:商業需求、商業策略、戰略方向、產品規劃、運營數據、整體營收、目標任務等方面。產品經理往往在根據公司現階段的情況,以及市場的競爭情況,做一些產品策略或者一些產品的方案的策劃、發起、實施。
所以這個過程中,產品經理扮演的角色是翻譯:「市場需求、商業需求」,成為:「產品需求」,所有的信息全部圍繞需求本身。為什麼要做需求?怎麼做需求?先做什麼需求、後做什麼?基於怎麼樣一個思路去推送產品進行實施、從一個利益平衡獲得空間增長指標後達到另外一個利益平衡。程序員不一樣,很多時候程序員得到的信息是:有一個需求,可能是小需求、產品需求、或大到項目需求,然後得到一系列需求列表,然後產品經理會讓程序員看:「需求」哪些通過code改改就可以實現,哪些是需要開發可以實現,哪些是技術或構架或因為成本的原因不能實現。
所以在這個過程中,程序員扮演的角色是翻譯:「產品需求」,成為:「技術語言」的評估,所有的信息全部圍繞開發需求本身。如何開發這些需求?是溝通資料庫增加欄位?調用介面?開發新的介面?需要開發組件?重新構架引擎?來實現滿足或支撐這些需求?那這個時候問題來了,很多情況下我們只是把程序員當做一個寫代碼,通過編程語言來操作計算機完成需求的工具了。�0�22、溝通語言不對稱;�0�2�0�2說到兩者溝通的語言,這肯定是困擾產品經理本身的。產品經理的語言是:「描述「、」形容「,我也見過很多產品經理,很多人的需求文檔就是漫天飛舞的文字,一整段的描述+描述,不要說程序員看不清,可能過段時間連自己都看不清楚。除了書面語言,產品經理的溝通語言也是含糊的,沒有太多的邏輯去組織,很多時候總是試圖去述說一個需求,被程序員的一個計算機術語而打斷。程序員的語言,更偏向於技術化。很多產品經理做過技術,有技術背景,但是還有很多產品經理不懂得技術。所以在這個時候,程序員在解說或回答一個需求的時候,會把自己習以為常的變數、函數、實現方式說出來。於是很多產品經理聽到:「Sdk、webshell、select、api、組件、插件、控制項「等等的時候會雲里霧里,那這個時候問題來了,很多情況下我們總站在自己的立場上、自己的世界裡認為別人也懂自己在說什麼?實際呢?大家都是聽得一半一半,溝通沒有徹底到位。�0�23、思考角度不對稱�0�2�0�2產品經理思考的角度在於產品本身,對技術的細節、技術的性能沒有太多的發言權。很多產品經理要是的實現的業務邏輯,不管程序員是採用:c++ 、java、php、Python、找開源代碼改的,還是自己寫的都沒有關系。程序員只要在約定的時間里,把約定的業務邏輯開發出來就可以,產品經理不去會考慮目前伺服器的配置、程序員手上任務的配置、技術能力的情況,要的是結果。而且很情願的認為團隊中的工程師都是世界上最好的工程師,想做什麼都可以做,對因為技術原因而不能支持實現需求不能接受。程序員思考的角度有點區別,我也看到不到程序員本身對產品追求完美對需求的背景、意義去研究了解;但很多程序員還是停留在自己接單子任務一樣來一個做一個的境界,做好了自己玩自己的。程序員考慮程序實現的方式同樣的一個請求是get還是post,程序員考慮代碼的性能,從而採取不一樣的方案去實現需求,考慮請求並發量壓力和安全性。但是很多情況下,程序員對技術的理解會導致有一些業務需求滿足不了,不是因為不能實現,是因為實現了覺得是廢代碼,或者構架不完美了。那這個時候問題來了,很多情況下到底傾斜誰的立場上思考問題?我之前也會碰到很多情況程序員就程序的角度說業務需求不合理,產品經理說程序員消極罷工、霸得蠻。�0�24、考核標准不對稱;�0�2�0�2誰也不尿誰,哼!你能把我怎麼樣。產品經理和程序員有為完全溝通或誤會的時候,極端情況下,有一方會罷工。這個時候主要是2個角色的各個考核標准不一樣,所以在很多情況下顯得非常的無奈。產品經理很可能考核的是方案和上線的時間、產品上線後的數據;而工程師考核的是程序的性能、很多時候產品經理催的急要的急,但程序員每天的時間有限,還是得慢慢構架慢慢開發,程序員開發時間少了,未知的執行BUG沒考慮過是要負責的。這個時候問題又來了,產品經理天天干著急!咋辦?以上是我結合幾年來的工作經驗總結出來的,當然這4大因素把很多共性的因素概況進來了。當然過程中還是會因為很多產品經理或程序員本身(個性)的溝通技巧、態度、情商等因素導致的溝通不倡,影響了彼此之間的默契。其實仔細的分析一下,產品經理和程序員打交道的過程中不管是共性的因素還是個性的因素,也不是想像中那麼困難。通過一些努力之後,我們總是會找到一些快速和程序員建立溝通橋梁的辦法。我個觀點如下:�0�21、 要看到項目層面,不要只看需求本身。�0�2�0�2上面說到的幾點不管是:「信息不對稱「、」溝通的語言不對稱「、」思考角度不對稱「還是」考核的標准不對稱「是我們常見的幾個客觀隱私。把幾個因素抽取出來剖析,發現還是由於我們站問題的視角的高度不一致造成的。產品經理只是看到自己得到了商業的需求,策劃了產品的需求,接下來會把很多事情拋給程序員做了,那還是站在需求方的角色中。那如果真正的是站在意識層面的項目經理的角度,這個時候看待問題的視眼會廣很多。這個時候你就想著為了做這個項目這個需求,程序員是不是明白了為什麼要做?是不是對這哪些需求的優先順序有了重要的認識?作為產品經理我用怎麼樣一種表達方式程序員更明白?是不是需要把時間點等劃定?目前程序員的資源和伺服器情況允許他們能做的空間是多大?怎麼樣才能拉動他們的積極性更好的完成這個項目?適當的時候,需要幫助程序員做哪些申請或讓步?對產品經理來說,同樣張羅一件事情,同樣會了得到一個結果,但是中間的過程很可能是完全不一樣的。所以因為思考角度僅僅從做完一個需求死磨硬泡上升到,站在項目的角度去考慮各個關節的風險點、時間點,得到的效果是完全不一樣的。�0�22、從理解程序員開始,換位思考會更好。�0�2�0�2一直在問一個問題:「程序員是什麼一群人?「就和問自己:」產品經理是什麼一群人?「一樣,有點好笑、有點幼稚。從小工到專家,從CSDN到走出軟體作坊,發現很多很多非常優秀的程序員的心聲。程序員是什麼樣一群人?像切西瓜一樣一刀一刀切:寫php的寫Java的寫windows C的寫liunx C的寫C++的編程水平一般的編程水平還行的編程水平牛逼的編程水平大師級的構架牛的資料庫牛的勤奮的懶於思考的不會JavaScript的積極的喜歡鑽研的……好像都不太合適,因為你找不到解決和工程師溝通的好的辦法。而且這些很多是外在的條件,隨隨都在改變。看到很多朋友一年之間經歷幾個大項目水平突然猛進,態度、一些特點也變得完全不一樣。這個時候你需要的是了解和掌握程序員,作為職場的人,和我們一樣的人共同需要的一些特點。如下4點:1) 是不是特別想被肯定、獲得尊重;理解、肯定、尊重。這3個詞或許非常的空但確確實實是一個非常好的方子。靜下心來走近程序員,聽聽他們的心聲、他們的抱怨,或許產品經理和程序員的距離將不再是那麼遙遠。雖然很多時候我們講德行說尊重,但真正領悟到心裡、落實到行動、表現在態度上的完全不一樣的。真正,你是不是一言、一行本真理解、肯定、尊重程序員的,程序員是有感知的。2) 是不是想給產品提供自己的建議,而不是僅僅做一個編程的機器;很多程序員對產品非常熱愛、對產品有獨特的想法,但多數又局限於技術情節對產品的建議常常被忽視。相信很多程序員都希望參與產品,通過自己的專長改變產品,進而打磨出一款完美的產品。所以產品經理也可以適當的給程序員一點發揮的空間,特別是在技術創新、產品需要技術驅動的方面,在商業可控的層面讓程序員發揮排頭兵的作用。這樣程序員會開足馬力投入到開發實施的過程中。3) 是不是不僅僅和人任務指派,需求更多的和諧的人與人之間的溝通建立。產品經理和程序員兩者之間沒有一個良好的溝通,只是基於做與不做,做好做不好,什麼時候做好,這樣的功利性溝通肯定是不可靠的。往往兩者因默契不夠,或一方因溝通技巧不足、對待工作態度不夠積極,造成矛盾。建立一個人與人之間的良好溝通,幫助產品經理或程序員更好的認知對方、了解對方,這樣無論是在平時的溝通過程,還是在項目的合作過程中更好的促進了解、達成共致都會有一個前提保障。4)是不是需要別人的幫助,讓他在非技術領域獲得真知。看到很多產品經理朋友和程序員打成一片,和程序員一天聊天、抽煙、一起下班打游戲、打球,甚至有些時候產品頭腦風暴的時候要去幾個有產品情節的工程師參與前期的討論,效果都不錯。可能這些現象從另外一個層面來解決我們上面的一些疑惑。3、產品經理要改善心智,不斷自我學習。�0�2�0�2最近突然覺得說得想的,有點像哲學。群里的一個朋友說了, 其實哲學就是我們生活一些事情表現出來的道路。產品經理跟程序員打交道也好,對待生活也好,我個人認為是產品經理對哲學的認識、理解、應用。產品經理越往下走,拋開產品技能本身不談,沉澱商業以及人脈資源,都是需要以一種良好、可靠的思維方式去支撐的,也就是所說的心智模型。很多時候產品經理改善心智可以不斷的增強一些事物的判斷。如:遇到程序員的拒絕的、不行的理由,這個時候你通過分析起碼要判斷得出來,這個是程序員隔個人的態度問題,還是流程問題,有一點微妙的。所以產品經理需要不斷的學習,學習提高軟技能。說到學習,回應這篇《產品經理怎麼樣和程序員打交道》中,程序員常用的一些技術原理、技術術語得去學習一下、研究一下。Right? OK, End !