不經(jīng)意看到了程序員的一期算法專(zhuān)題,細(xì)細(xì)研讀多位高手(包括李開(kāi)復(fù))的文字之后,對(duì)算法的重要性重新進(jìn)行了反思。我研究生畢業(yè)
2
年,一直從事
J2EE
開(kāi)發(fā),由于項(xiàng)目的原因,很少需要自己去設(shè)計(jì)算法,甚至
stack
,
tree
這些數(shù)據(jù)結(jié)構(gòu)都很少使用。還好自己也不甘于平淡,如
Effective Java
,
Practical Java
,
Refactory
,
Design Pattern
等等這些流行書(shū)還是抽空學(xué)習(xí),這些書(shū)的確很是經(jīng)典,對(duì)我的編碼風(fēng)格,模式的理解,設(shè)計(jì)能力都起到了很好的促進(jìn)。也快速的由一個(gè)程序員成長(zhǎng)為架構(gòu)師(只是公司的,離真正的架構(gòu)師還差得遠(yuǎn))。
因?yàn)轫?xiàng)目需要,去年下半年開(kāi)始全面接觸開(kāi)源軟件,使用了
spring
,
maven
,
hibernate
,
ibatis
等眾多開(kāi)源軟件,也對(duì)開(kāi)源軟件產(chǎn)生了濃厚的興趣,于是拿這些開(kāi)源軟件做了
openfans
,一方面是推進(jìn)開(kāi)源軟件在中國(guó)的使用的交流,一方面也為自己在實(shí)踐中更多使用這些軟件(因?yàn)闆](méi)有項(xiàng)目和利益因素,可以做想做的事,用想用的軟件)。使用這些開(kāi)源軟件倒很是順利,很多軟件拿來(lái)就能用,都有
sample
,簡(jiǎn)單使用還是不難的。
但一些關(guān)鍵的問(wèn)題一直懸而未決!比如
tag
的設(shè)計(jì):我現(xiàn)在簡(jiǎn)單的使用平鋪的模型,
tag
沒(méi)有層次之分,
tag
間產(chǎn)生雙向關(guān)聯(lián)。但這樣是最符合
tag
特性的模型嗎?如何對(duì)這些
tag
進(jìn)行分類(lèi),如何定義
tag
的多級(jí)關(guān)聯(lián)(如
spring
和
hibernate
有關(guān)聯(lián),
hibernate
又與持久層關(guān)聯(lián),
spring
是否與持久層有間接關(guān)聯(lián),依次類(lèi)推)。。。。。。而做出一個(gè)好的
tag
模型,可能就需要圖論方面的知識(shí)。再比如用戶(hù)相似度設(shè)計(jì)(號(hào)稱(chēng)是豆瓣的核心,難以復(fù)制):每個(gè)用戶(hù)擁有了一些
tag
,如何根據(jù)這些
tag
定義用戶(hù)的相似度,一個(gè)用戶(hù)有
spring
,
hibernate
這
2
個(gè)
tag
,一個(gè)用戶(hù)有
spring
,
ibatis
這
2
個(gè)
tag
,他們相似度為多少,如果每個(gè)人
tag
都很多,再加上權(quán)重的概念,問(wèn)題又復(fù)雜的多。簡(jiǎn)單的做法就是每個(gè)用戶(hù)
tag
一個(gè)個(gè)匹配,匹配的越多相似度越大,但這樣設(shè)計(jì)一是不準(zhǔn)確,二是時(shí)間復(fù)雜度很大,最壞情況為
n*n*m*m
,
n
為用戶(hù)數(shù),
m
為每個(gè)用戶(hù)的
tag
數(shù)。
這些都需要扎實(shí)的算法基礎(chǔ)。而我的基礎(chǔ)就很薄弱:本科學(xué)的比文科還文科的專(zhuān)業(yè),研究生又學(xué)的比較上層的東西(
UML
,
RUP
,
PM
等,也都一知半解),選修了一門(mén)算法導(dǎo)論,又被
1000
多頁(yè)的經(jīng)典英文教材嚇趴下了,上了幾次課就直接放棄,沒(méi)敢參加最后考試。現(xiàn)在想臨時(shí)抱佛腳,談何容易。
所以算法也并非沒(méi)有用處,關(guān)鍵要看你在做什么,想做什么。想去
google
、百度不用會(huì)
spring
,算法基礎(chǔ)扎實(shí),只會(huì)
c
語(yǔ)言都行;一些行業(yè)如電信、金融也很是需要算法高手。而國(guó)內(nèi)更多的企業(yè)做企業(yè)應(yīng)用,一般是連連數(shù)據(jù)庫(kù),寫(xiě)寫(xiě)頁(yè)面,最多引入些開(kāi)源框架和軟件,如
spring
,
hibernate
,
struts
等。這方面的需求較大,會(huì)了
spring
,省了公司的培訓(xùn)成本,自然還是給找工作加了一些砝碼。
所以有時(shí)聽(tīng)到某些人對(duì)某項(xiàng)技術(shù)不以為然,說(shuō)“這些東西有什么是我在幾個(gè)星期學(xué)不會(huì)的”的時(shí)候,一方面是對(duì)其狂妄進(jìn)行些鄙視,一方面也真要問(wèn)問(wèn)自己,我的核心價(jià)值到底在哪。這個(gè)問(wèn)題很重要,涉及面很廣,選擇也很多,而我也只是有些模糊的答案,等以后再仔細(xì)寫(xiě)寫(xiě)。
不管如何,我是要開(kāi)始研究算法了,得解決問(wèn)題阿!先在
openfans
開(kāi)個(gè)算法的
tag
,一邊學(xué)一邊積累,對(duì)算法有興趣的同學(xué)也可以跟我一塊進(jìn)步。
PS
:做個(gè)廣告,
blogjava
很多好的
bloger
,能否到
www.openfans.net
導(dǎo)入下
blog
,跟大家分享下你的感悟,謝謝!