ok. 一個標準的產品經理有這麼幾個技能點,那麼作爲一個程序員,只能給一些工程技術方面的建議了。
從大體環境上來講,有操作系統(OS), 數據庫,服務器,編程語言。
我的工作大致就是使用編程語言,將合適的數據通過目前最優的控件顯示出來,通過監控用戶的動作來實現交互。
先來解釋簡單的數據庫和服務器:
1.數據庫:
人類從最初的龜殼到紙張再到現在的計算機,所體現的就是體積越小,存儲容量大,查找愈發方便。 一臺計算機就能將一個讀書館的所有知識放在數據庫中,還能以很快的查找效率找到想要的,關鍵數據庫還有一些其他不能比擬的優點,比如事務,索引,併發,關係型。
1.1事務,比如銀行轉賬,A轉給B,那麼A的賬戶需要減少,B需要增加,在代碼的世界裏總有許多事故,也就是你時常測試時點着點着就不動了,專業術語爲異常(Exception),可能爲程序問題,網絡,硬件,斷電問題等等,在A減少成功後,這個時候發生了異常,那麼A減少了,B卻沒有增加,這是絕對不能容忍的,事務就是處理這些一連串操作問題的,要麼A減少後B增加完整的完成整個流程,要麼任意失敗一項就回滾到前面的狀態,即A,B不變。這就是事務。
1.2 索引, index,你可以理解爲索引,現實中比如書的目錄,倉庫分類編號,超市XX區,淘寶天貓京東的導航,我們所有的數據都放在一個數據庫文件裏面,爲一個高效率組織數據的文件,我們從數據庫拿數據的時候會掃描一次,索引的作用就是掃描部分數據,這樣會大大加快查找速度,之前我們做的點餐餐桌頁面,下單頁面就經過索引優化。一旦數據量很大,查找速度緩慢就得考慮性能優化,任何事物都有倆面性,索引在一方面提升了查找速度,但是在另一方面會降低添加,更新操作效率,因爲這些操作需要將數據放到特定的區域,需要額外的時間去處理。腦補讀書館,參照顯示原型。
1.3 併發,可能在我們的項目裏面體現不大,因爲大部分都是一個人或者多個人操作,不會有千萬級別的,併發的簡單概念,你使用迅雷下載時,你可以同時下載多個任務而不會只是下載一個任務,這就是併發,可能在你看來非常正常,對啊,爲什麼不能多個下載,但是實質上是CPU只有一個,你開的多個任務其實底層是這樣的,例如A,B,C三個任務,先執行一下A,停止A,執行B,停止B,執行C,停止C,執行X,停止X..........
一直到三個任務完成。 更形象的例子,皇帝翻牌子,皇帝只有一個,而後宮佳麗三千,每天一個,三千個程序,每個程序執行一次進度增加,一直到100%即完成退出翻牌子打入冷宮,真實情況是計算機執行非常之快,所以你看不到什麼停留的現場,記住,非常快。但是像百度谷歌那樣的公司,即使這麼快也沒用,還需要加強,因爲百度谷歌日訪問量太大了。
1.4 關係型,在現實的生活裏,你可能有很多人際關係,親人,同事,男性朋友,女性朋友,同時你身上還有其他信息,比如所在公司,學歷,外貌顏值, 那麼這些東西如何高效的存儲在數據庫裏面呢,一對一,一對多,多對一,多對多。你的外貌顏值,學歷和你的一對一的關係,你和你的朋友是一對多的關係,你和公司是多對一的關係,你們的朋友們組成的網狀型關係爲多對多(參照fackbook)。
你使用Excel的時候,如下表1.4.1,對應爲姓名,職業,戰鬥力,所屬公司,那麼公司詳細信息存儲在另一張表上,裏面有公司名稱,地址,法定代表人等等一系列詳細的信息,如果你不這樣做,像1.4.2,雖然看起來很直觀,但是將這樣的數據存儲到數據庫文件中會產生數據冗餘,就是不必要重複的數據,詳細的設計可以看我們項目的代碼,這就是關係型的概念。
劉備
|
總經理
|
30000
|
西蜀
|
關羽 | 副總經理 |
10000
|
西蜀
|
張飛 |
副總經理
|
10000
|
西蜀
|
........
|
........
|
........
|
........
|
(表1.4.1)
姓名
|
職位
|
工資
|
公司名稱
|
公司地址
|
公司其他信息
|
劉備
|
總經理
|
30000
|
西蜀
|
深圳福田區 |
xxxxxxxxxxxxxx
|
關羽 | 副總經理 |
10000
|
西蜀
|
深圳福田區
|
xxxxxxxxxxxxxx
|
張飛 |
副總經理
|
10000
|
西蜀
|
深圳福田區
|
xxxxxxxxxxxxxx
|
........
|
........
|
........
|
........
|
........
|
................
|
(表1.4.2)
2.服務器
我們的項目分爲倆個版本,一個爲單機版,一個爲服務器版,單機版的數據放在本機數據庫中, CRUD操作都在本機進行,而服務器版則使用的是作爲服務器的那臺主機的數據庫進行CRUD。 CRUD是Create(創建)、Read(讀取)、Update(更新)和Delete(刪除)的縮寫。可以理解爲一個面向所有電話的一箇中繼站,這樣就實現了其他設備的交流,就拿網站服務器來說,你通過你的電腦上的Chrom瀏覽器打開我們的網址,Chrom瀏覽器將網址包裝成一個數據包然後通過我們的路由器經過一系列的轉發發送給我們的服務器,服務器接收到後會對數據包進行解析,然後將所請求的數據文件發送給你電腦,你的Chrom瀏覽器會自動將那些數據和文件解析成恰當的格式給你顯示出啦,打開Chrom瀏覽器按F12可以查看詳細信息,那些源代碼其實就是一個.html文件,下載到你的電腦中,Chrom瀏覽器只是做數據包裝和解析的。當然我們的項目沒有這麼多數據格式,我們的項目回傳的數據沒有文件,只是一串數據,比如訂單信息,客戶信息等等,是一個純數據庫服務器。不論如何,你將服務器理解爲一個數據存儲遠程基地即可。
3.操作系統
這個我也不知道如何下手,因爲涵蓋的太廣了,簡單理解就是這個東西將非常底層的硬件給封裝起來只提供方法給軟件來調用,是軟件和硬件的中間橋樑,要知道底層的硬件代碼一般人學習起來門檻高,而且稍微弄不好系統就掛了,所以這堆瑣事就給操作系統(OS)了,操作系統常見的有Linux,Unix, Windows。 安卓手機上是一個小型的Linux系統,而Iphone是基於Unix內核的操作系統,windows就不用說了,win7,win10等等,真正的Linux和Unix操作系統一般用於大型服務器,而且沒有圖形界面,全是密密麻麻的Dos命令,因爲最吃內存的就是圖形渲染了,這也可以解釋爲什麼win7下設置畫質極差的時候系統運行的很快。
但是這種系統一般人不會使用,一般像我們程序員這種開發者纔會喜愛。
當你使用Win10點擊QQ時,彈出QQ登錄界面,實質是開啓了QQ的相關程序,OS爲其分配內存在界面上渲染圖形,OS的鍵盤(OS硬件)被QQ的相關程序捕捉然後反饋到界面,重新繪製圖形,然後點擊登錄後QQ程序將調用OS的網絡服務(OS資源)將數據發送給Tencent的服務器,服務器回傳數據給OS,OS再將數據給QQ程序進行解密和解析,然後順利登陸,開始主面板程序,分配內存,初始化界面......
上面說的OS的作用,和程序密切結合,程序通過OS調用硬件,使用OS的資源,OS的所有都可以看作是資源,CPU,內存,外存,網絡。 因爲太基礎,所以哪裏都有OS的影子和作用。
4.編程語言
編程語言從開始至今,已經發展了許多種,從開始的機器語言,彙編語言到現在使用的高級語言,計算機能直接識別的是二進制指令集合,由0和1組成,例如001010101010101001,給計算機去執行,會出現什麼結果? 我也不知道,目前已經不使用這種語言,雖然快,但是學習和開發成本太高。 後來出現了彙編,理解爲機器語言的封裝,但是對於開發和學習成本還是太高,於是就出現了高級語言,可以理解爲彙編語言的封裝。
比如機器語言的"001010101010101001",使用彙編語言封裝爲一個符號"+", 高級語言也是這個道理。
目前高級語言比較靠前有java, C, C++, Python, C#, PHP, Javascript........。 Java一般用於安卓,JavaEE企業級應用,比如大型網站,C和C++比較和硬件結合的多,比如智能控制系統,C#和Java類似,PHP和Javascript爲動態網站和前段腳本語言......... 世界上沒有最好的語言,它只是工具,只有最適合的工具。心中無劍才能無敵於天下。
如何在不知道編程語言的情況下看懂代碼?
如何學習編程?
作爲一名產品經理,還是需要了解一下基礎的編程知識,以java爲例,需要了解java的設計哲學"萬物皆對象"的面向對象編程思想OOP(Object Oriented Programimng),爲什麼要OOP,便於管理和理解,將現實生活抽象化,和之前的數據庫設計有點類似,一對一,一對多,多對一,多對多。 當然說的太多還不如看實際的代碼。
封裝,繼承,多態。
封裝的目的是爲了讓使用者忽略不必要了解的知識,比如叫外賣,你只需要點餐和付錢,那麼美味的涼皮和肉夾饃就自動給你送過來,你不需要了解中間的過程。
繼承的目的是爲了減少重複代碼,比如一個對象,在java中用類表示,人,男人,女人,男人繼承人,女人也繼承人,那麼人就有男人和女人的相同屬性,比如有一雙眼睛,一雙手..... 而男人和女人 不同的屬性可以在各自的類中添加進去。 兒子繼承父親,那麼就有了父親的所有屬性,多個兒子就不需要一個一個的聲明瞭,說到底是一種編程手法而已。
多態,男人有很多種,女人也有很多種,有些男人比較張狂,有些男人比較沉穩,有些女人比較漂亮,有些女人比較柔情。so,這就是多態。
在我的代碼世界裏,從剛剛開始的一個小菜鳥成長至今,做的活無非就是調用其它已經寫好的接口和方法,知道這一塊代碼要幹什麼事,執行後有什麼效果,有沒有更好的方法去實現,對於別人給的方法和接口,能用就是好的,如果有新功能,那麼看看有沒有別人已經寫好的代碼,拿過來能用則用,不能用稍加修改可用就行,如果還是不行,那就去研究相關的API自己造輪子。
我想產品經理應該使用超級語言,也就是在機器語言-> 彙編語言-> 高級語言上的封裝語言 -> 超級語言,看懂並和架構師討論達成代碼模塊,至於底層具體實現也不需要了解,那是我們程序員苦力活,懂得apk的運行的大致流程,瞭解開發的套路,懂得取數據原理,界面的編寫方法,事件監聽原理。
要用代碼說話。剛剛開始不要深入瞭解代碼塊,後面可以寫個小程序實現。
Jul 2016 | Jul 2015 | Change | Programming Language | Ratings | Change |
---|---|---|---|---|---|
1 | 1 |
|
Java | 19.804% | +2.08% |
2 | 2 |
|
C | 12.238% | -3.91% |
3 | 3 |
|
C++ | 6.311% | -2.33% |
4 | 5 | Python | 4.166% | -0.09% | |
5 | 4 | C# | 3.920% | -1.73% | |
6 | 7 | PHP | 3.272% | +0.38% | |
7 | 9 | JavaScript | 2.643% | +0.45% | |
8 | 8 |
|
Visual Basic .NET | 2.517% | +0.09% |
9 | 11 | Perl | 2.428% | +0.62% | |
10 | 12 | Assembly language | 2.281% | +0.75% |
數據來源 http://www.tiobe.com/tiobe_index 獲取時間: 2016年7月23日12:35:20
附帶一張我們程序員學新技術的圖,希望有幫助。
I'm fish. I'm on.