關於乙個小問題引發的感慨

2021-08-19 23:54:33 字數 1924 閱讀 7079

首先先來看這樣乙個問題,大家在向後翻之前,先思考一下:

現在有一本書,裡面紙的顏色不同,現在讓你想辦法找出,這裡面有多少種顏色,每種顏色多少張紙?

這個小問題,我問過很多個人,我發現這個問題程式設計師回答的結果五花八門。我先來列舉一下:

將書看成陣列,放到set裡面,就可以知道有多少種顏色了,然後用兩個for迴圈找出每個顏色有多少張

我沒有懂這個問題,你再說明一下?

我想想啊~恩,要有個陣列,來存顏色,不對,應該是個字典,用顏色做key,個數做value,然後……………………

………………不知道

額,好像我沒有見過這樣的例子啊。

這是資料結構的問題麼?是問最優解麼?我來想一想…………額……

首先寫乙個程式………………,然後……

上面的回答都不大令人滿意,下面的回答有趣很多:

把書一頁頁扯下來,然後一樣顏色的堆一起,最後查一查數

測一頁紙的厚度,然後從書的側面來測各個顏色的厚度

用個小本子記下出現的顏色,一頁頁翻過去,然後在顏色上畫正字

最後的答案應該說相當準確和簡單了,它很好的解答了這個問題。可實施性很高,而複雜度很低。

首先是回答不知道,或者半天沒有憋出來的人,這種人不在少數。這類人的問題就是,老是把問題想的很複雜,面對這樣的乙個問題,老是覺得不夠明確,沒有開發環境,沒有工具,沒有api,還可以沒有好多。所以無從下手,似乎解決問題就一定要有趁手api,有裝置,有演算法,有開發環境。當這些沒有的時候,很多的程式設計師就解決不了問題。

然後再來說一說那些專門尋求最優解的人,這些人往往最後沒有回答了問題,只是陷在求解的這樣乙個過程中。他們想建立更好的模型,具有更好的擴充套件性,卻很少注意到問題的本質和場景。你可以做乙個拾取顏色的機械人,然後計數,但是真的有必要麼?很多時候,我們直觀的解決問題就好了。等待問題擴大,再來想復用和擴充套件,不是更好麼?

最後是這些,用set,字典給出答案的人,首先不能說他們是錯的。但是,面對這樣乙個簡單的問題,你真的有必要建立乙個工程,寫上幾行**來搞?而且,這要怎麼實施呢?你的程式怎麼把書當輸入弄進去?程式設計師首先要學會思考,然後再程式設計,如果這樣的問題,因為是我問的,就去找資料結構,找演算法。並沒有把解決問題放在首要,而是拘泥於已學的知識。

那個測量厚度的回答,很有意思。這個答案完全沒有提及程式,的確是分析之後的結果。但是有幾點小問題,第乙個問題就是,這個回答是不可實施的,因為沒有辦法很精確的測量紙的厚度,另外,紙的厚度也不盡相同。第二,這書如果是新的還好,中間空隙少,要是舊的呢,那不是測量出來的比實際多好多頁麼?第三,一切的假設都在同一顏色的頁連在一起上,實際上題目中並沒有說是連在一起啊,或者說,這個答案,解決不了隨機顏色的問題。

這也側面反映了我們程式設計師有時分析問題,不夠全面,對可能的輸入情況判斷不全的缺點毛病。

那個把書撕下來是我問完這個問題,最先想到的答案,直觀,簡單。是因為我故意沒有說這個書讓不讓破壞。可以在現有的條件下,用撕開書頁來解決問題的,應該算另闢蹊徑了。這不是乙個標準答案,不過我還是覺得這樣回答很有趣。

程式設計師是一群使用計算機來解決問題的人,大致可以分兩種,一種是以知識來解決問題的,一種是以思維來解決問題的。而前者佔大多數,這也讓這個浮躁的it圈蒙上了一層灰暗,這也是為什麼公司甄選人才的時候,更看重經驗、學歷、背景公司的主要原因。因為大多數的人,是靠著做過,了解過很多的知識來解決問題的。知識的多寡正好體現了乙個人的價值。然後,真正改變程式界的,是後一小撮人,他們用思維來解決問題,旁徵博引,創新,並且根據問題來分析解決方案,找到很多簡單且有效的方法。

那麼把這個問題延伸開來,你會發現很多相似的問題:

班上要選舉班長,每個人寫了乙個名字,最後要統計誰最高和大家的票數

你有乙個字串,試著統計裡面每個字元出現的次數

你有乙個關於老師資料庫,裡面存著老師戶籍的資料,試著分析老師的**地區的分布

其實我們還可以舉很多例子,能把複雜的問題,想象得簡單,這本身就是大家有的一種能力。只是因為我們的知識在增長,工具在進化,而我們變得懶惰了。很多時候,我們都淪為了羅列api的產業工人。大家不覺得悲哀麼?

關於Jsoup的乙個小問題

利用jsoup可以實現對網頁資訊進行有效解析和提取,例如有網頁內容如下 hello,jsoup jsoup的官方 利用jsoup提取標籤的內容,如下 document doc null trycatch ioexception ioe 提取標籤的內容 string strtitle doc.sele...

乙個關於選擇的小問題

以前看過這樣乙個問題 乙個人參加有獎答題,主持人給出了a b c三個選項。這個不知道問題的答案,就隨便選了乙個選項。然後主持人排除了剩下兩個答案中的乙個,告訴這個人有一次改變自己選項的機會。請問 這時候這個人該不該改變自己的選項?剛看到這個問題,我的第一反映是完全沒必要,因為既然排除了乙個錯誤選項,...

關於指標的乙個小問題

任務 c primer 4th 習題5.18 編寫程式定義乙個vector物件,其每個元素都是指向string型別的指標,讀取該vector物件,輸出每個string的內容及其相應的長度。自己的方法 string s string sarr 10 vector內的每個元素都是指向string型別的指...