場景一:“這個需求做不了,你想其他產品方案吧”——其實是程式設計師覺得開發起來太難或者太麻煩而糊弄產品經理。在你轉身準備離去的那刻,不巧你眼角的餘光瞟到他輕蔑上揚的嘴角:“憨憨”。場景二:“你一點技術都不懂,這個方案太奇葩,按照目前的技術框架無法實現,鍵盤給你,你來敲”——因為確實無法用技術實現,並向你投來鄙視的眼光,看著你默默走開的背景,他緩緩的放下了雙手側舉的鍵盤。
有些朋友可能遇到過我在上方提到的兩種情況,這也是很多不懂技術的產品經理會擔憂的難題。要麼程式設計師因為太難或太麻煩而不想做需求,就欺負你不懂技術糊弄你;要麼就是你提的需求太天馬行空,沒有考慮技術實現的可行性,落的被程式設計師鄙視的下場(可能還會被打)。這也是為什麼我們經常聽到網上關於產品經理和程式設計師之間的吐槽段子。
那麼問題來了,產品經理到底要不要懂技術呢?應該懂多少呢?個人認為不需要深入到會寫程式碼,但要去了解技術,至少要知道技術實現的基本原理。產品經理懂技術不僅能有利於自身的產品決策,而且在和程式設計師溝通需求方案的時候,你就會更容易理解程式設計師的意思,同時程式設計師也能夠很好的理解你說的話。大大提高與程式設計師的溝通效率,從此媽媽再也不用擔心我被走夜路不安全了呢(#^.^#)
· 正 · 文 · 來 · 啦 ·
接下來就是技術乾貨,通俗易懂,讓零技術基礎的人看完後都能明白基本的技術實現原理。
本文就以一個簡單的開發技術架構展開來說,如下圖:
第一層是產品展現在使用者眼前的樣子,有多種形態,一般稱為“前端”或“終端”。
第二層是閘道器層,是後端與前端互動業務資料的中間層。
第三層是後端服務,由各種後端技術開發完成。幾乎所有的資料處理邏輯都是由後端來完成,比如我們在產品設計時定的登入驗證規則、手機號合法性等等
最底層是資料庫,可以理解為用來儲存資料、檔案的倉庫。
接下來分別講講每一層的含義和原理。
第一層:前端服務
前端服務就是產品最終展現在使用者眼前的樣子,有多種形態,比如APP、WEB前端(web網站—電腦上的網站,wap網站—手機上的網站)、PC客戶端、小程式、快應用等等。
完成一個前端產品的步驟基本分為3大步:
1、畫頁面的樣式(樣子):所有的頁面樣式都是前端開發工程師畫上去的,雖然有一些前端框架可以直接用,但是頁面細節還是需要按照實際需求調整,比如頁面的佈局、按鈕的顏色、柵格欄的間距、字型的大小等等;
2、頁面邏輯(邏輯):一個前端頁面畫好之後,如果沒有寫入邏輯,那隻能算是一個靜態頁面,就好比是一張靜靜的圖片,什麼動效都沒有。如果我們想要頁面產生互動效果,比如點選按鈕實現什麼效果,輸入資訊的驗證、頁面之間的跳轉等等,就需要程式設計師寫入大量的前端處理邏輯。
3、前後端互動(資料閉環):頁面畫完了,邏輯也寫好了,但是還差一個東西——資料!資料要從哪裡來?比如點選使用者頭像,進入該使用者的個人資訊頁面,使用者資訊這個資料從哪裡來?這就是由後端服務提供的。
前端向後端服務發起一個HTTP請求去問後端要資料,後端接受請求後就向前端提供對應的資料。同樣的,如果前端修改一個資訊後點擊提交,也會發起一個HTTP請求給後端,由後端處理完之後再反饋給前端。
剛才提到了,產品可以呈現為多種形態,接下來就講講常見的幾種:
一、APP
目前市場上APP主要分為IOS版本和安卓版本。由於手機作業系統的不同,程式設計師寫程式碼時使用的語言也不同,安卓APP用的主流語言是JAVA,IOS則是用object C開發。這就是為什麼公司裡面有安卓工程師和IOS工程師的區分。當然也有牛逼哥拉斯的程式設計師一人同時幹安卓和IOS的活,不過頭髮可能掉的會更快。
安卓開發:安卓機上的APP剛才說是主要開發語言是JAVA,JAVA語言主要是處理頁面邏輯的,畫頁面樣式還得需要一些佈局檔案,然後去調整細節。
這裡要注意,由於市面上安卓機型眾多,螢幕大小也不同(因為安卓系統是開源的,很多手機廠商都會定製屬於自己的安卓作業系統,比如錘子、小米、華為等)。所以安卓工程師需要花費大部分時間去做不同螢幕的適配、不同機型版本的相容。這也是PM在推進開發過程中需要注意的一點。
IOS開發:IOS系統是蘋果爸爸自己做的,且不是開源的。因為IOS開發者只能在蘋果生態的環境內進行開發工作,而且蘋果的開發者賬號是收費的。這就是為什麼公司裡的IOS開發工程師用的是清一色的蘋果電腦。另外你的產品想上架在APP STORE裡面,還得給蘋果爸爸交所謂的“保護費”。
二、WEB端
我們日常能用瀏覽器開啟的都屬於WEB端。用電腦瀏覽器開啟的是web網頁,用手機瀏覽器開啟的是wap網頁,包括你用微信、支付寶掃碼之後開啟的頁面(小程式除外)。總體來說WEB端的使用率其實比APP還高。WEB端的實現分為3部分:
最基本的HTML頁面佈局。全稱Hypertext Markup Language,也就是超文字連結標誌語言。
CSS層疊樣式表。它是一種用來表現HTML(標準通用標記語言的一個應用)的計算機語言。
JavaScript,也就是程式設計師嘴裡常常提到的“JS”。注意JavaScript和JAVA是兩種語言,不能混為一談
第1部分:HTML頁面。
大家可以這麼理解,我們在網站上看到的是HTML頁面,它是由各種HTML標籤組成的,開頭和結尾分別是<html>和</html>這樣的標籤。
我們看到的內容都被寫在<html><body></body></html>中的<body>標籤裡面。如下圖:
網站中的輸入框,都是被寫在<input/>標籤裡面的,如下圖:
第2部分:CSS樣式表。
它是用於控制和渲染HTML標籤的樣式。CSS就類似女生的化妝品,有的女生化妝就是仙女,不化妝就是路人甲,同樣,如果一個HTML如果沒有CSS控制樣式,那頁面就會醜的讓人無法直視。但有所不同的是,有的女生天生麗質不需要化妝就很好看,但是HTML不化妝就慘不忍睹,你看到的就是參差不齊,亂七八糟的框架,毫無美感。所以HTML是網頁的結構框架,而CSS用於包裝美化網頁,控制網頁佈局,字型,顏色、背景、模組間距以及其他效果等等
最後就是JavaScript。
它是最核心的一個部分。JavaScript的主要功能不僅可以控制頁面邏輯,還負責連線前後端的互動。前端發起HTTP請求到後端請求資料,完成填寫資料後發起HTTP請求到後端提交資料,這些都是由JavaScript來完成的。
這麼說吧,朋友們,沒有JavaScript,只有HTML+CSS樣式,頂多就是畫布上安靜的美女。但是有了JavaScript,那就是在你面前活生生的女神。試想一下,你約女神去吃飯,結果來的只是她的一張自拍照,會是什麼感覺.....
另外我們聽到程式設計師討論時會提到的angularJS(被封裝過的JavaScript),VUE(被封裝過的HTML+CSS樣式),常常弄的我們一頭霧水。作為PM,我們不用知道其具體實現原理,只需要把它們理解為:被封裝過的更牛逼的語言!就類似模板一樣,程式設計師可以直接拿來用。簡單說,封裝邏輯框架就是為了省程式碼,提高開發效率。
三、小程式
拿微信小程式來說,小程式是微信出的一款基於微信內的應用,但它不是一個應用程式,是微信基於網頁端開發語言(CSS、JavaScript)拓展封裝而來。把原來的CSS樣式表、JavaScript進行封裝,然後基於微信APP的功能提供一些可用的介面供開發人員開發,開發完成後提交給微信,微信進行打包處理呈現給終端使用者,就是我們在微信中看到的小程式。
第二層:API閘道器和負載均衡
閘道器一詞較早出現在網路裝置裡面,比如兩個相互獨立的區域網段之間通過路由器或者橋接裝置進行通訊, 這中間的路由或者橋接裝置我們稱之為閘道器。
而API閘道器則是將各系統對外暴露的服務聚合起來,所有要呼叫這些服務的系統都需要通過API閘道器進行訪問,基於這種方式閘道器可以對API(介面)進行統一管控,例如:認證、鑑權、流量控制、協議轉換、監控等等。
這裡只說說我們常見的面向Web或者App的場景,在物理形態上類似前後端分離,前端應用通過 API(介面)呼叫後端服務,需要閘道器具有認證、鑑權、快取、監控告警等功能。
關於負載均衡原理網上的專業詞彙解釋有很多,也很詳細。但是不了解技術的人往往看完還是一頭霧水。我們只需要這樣理解:原本是一臺伺服器幹活,然後工作量增加產生負載,就平均分攤給多個伺服器,從而協同完成工作任務。
第三層:後端服務
前端服務是整個產品的表現層,後端服務就是整個產品底層邏輯最核心的地方,負責處理業務邏輯,資料存取,然後提供介面給前端服務進行呼叫。
這個時候有朋友就會問:你剛講的,前端服務會處理各種邏輯,那為什麼還要後端服務來處理呢?因為前端處理是不安全的,前端是直接暴露給使用者的,前端程式中的JavaScript、HTML、CSS程式碼都會被載入到使用者使用的瀏覽器中,你的資料就很容易被懂技術的不法分子篡改、利用。而後端服務對於使用者來說是不可見的,它只會接受資料請求,返回結果,但是使用者就無法得知它是如何處理資料的。
就拿最常見的登入功能來說,前端服務給使用者展現一個登入的頁面,使用者輸入賬號密碼,點選登入後,前端服務就會發起HTTP請求向後端提交你的賬號密碼,這時候只有你自己和後端伺服器知道你輸入了什麼,後端伺服器就會在資料庫裡的一大推賬號密碼中進行匹配,然後把結果返回給前端。如果匹配成功,說明你是已註冊使用者,就會讓你登入成功,否則就登入失敗。
我們常說“要呼叫後端的介面”,其中的介面就是由後端服務開發的,說簡單點就是開啟一個埠,接收各種資料、處理,再把處理結果返回給你。你可以理解為餐廳裡面的服務員,你要點菜直接叫“服務員我要點菜...”。服務員負責記錄你要點的菜,然後等後廚做好之後再把菜給你端上來,至於後廚的菜到底是怎麼做出來的,用的色拉油還是地溝油你完全不知道,你只管吃就好了。
第四層:資料褲
什麼是資料庫?前端負責提交和拿資料,後端負責處理資料。那麼,當資料被前端提交給後端,後端服務處理資料,資料再被存在庫房裡面,這個庫房就叫資料庫。資料庫分很多種型別,根據不同的資料場景來儲存不同的資料,至於存哪些資料是由後端服務決定的。
最後:打包和釋出
“趕緊打包,打好包就提測了,測試人員在催了”“沒有bug了吧,沒有我就打正式包了,準備正式提交發版了哦”
當開發人員把PM設計的產品開發完成後,是不能直接釋出到伺服器上的,需要經過編譯、打包,也就是把開發語言編譯成機器可以識別的語言,然後把所有檔案放在一個可執行的軟體包裡面才行。當然,一個產品在正式上線之前會放到開發環境、測試環境,當在這兩個環境下測試都沒有問題之後,才能釋出到正式的生產環境。有時候到正式環境之後,為了保險起見,測試人員還會再測一輪,因為不同的環境可能引起不同的問題。
總結
以上就是針對開發流程的簡單概述,真實情況當然要複雜的多。所以我們在平時的工作中應該多和程式設計師交流,在與他們的溝通中,我們自然也會增加對技術知識的理解。也許你還會驚喜的發現,他們也有可愛有趣的一面。
除此之外,在工作之餘,產品經理也要多去看看技術相關方面的書籍和資料,通過這種方式多去了解一些技術方面的知識。當我們了解的更多,設計產品的時候,我們就會在產品設計初期就把一些目前無法實現的功能給換一種方式實現。