欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3121|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

設(shè)計(jì)與程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:91350 發(fā)表于 2015-10-30 14:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

我們的生活離不開設(shè)計(jì),或者說,幾乎所有的東西都是被設(shè)計(jì)出來的。今天我就寫點(diǎn)東西談一談設(shè)計(jì)和程序設(shè)計(jì)

一、石板路,下圖的設(shè)計(jì)恐怕大家都見過,這就是傳說中的“一步娘炮,兩步扯蛋”。

 

你說它好看嗎?確實(shí)好看,草叢中的小路,總是讓人覺得富有詩(shī)意。但只有走在上面才知道它設(shè)計(jì)的有多糟糕,更坑爹的還在于,有些石板路不是為了讓你由AB,它偏偏讓去一個(gè)你不想去的地方,然后你又原路返回。這也是為什么很多有石板路的草坪總是被人踩出另一條路來。所以說,好看的程序并不一定就使用。

這一點(diǎn)就像i++i=i+1,我們姑且不討論二者之間的誰效率更高,也不說i++++i的區(qū)別。我們討論,到底是寫i++還是i=i+1呢?i++在書寫效率上是快一些,也美觀些,這是絕對(duì)的。比如下面這兩段代碼

  




我們更傾向于寫前者,那么后者就一無是處嗎?

當(dāng)然不是,程序在調(diào)試的過程中,需要更改變量的增量(減量),有時(shí)候需要寫成i=i+2i=i+3這種i=i+N的格式,因?yàn)樾枰@些測(cè)試。那么如果還是之前的i++結(jié)構(gòu),就不得不刪除從寫,所以說,實(shí)際調(diào)試中,i=i+1的寫法更直觀,更易于調(diào)試。

當(dāng)然,如果你是出于習(xí)慣或者你的程序不需要這些調(diào)試,是沒必要糾結(jié)這些的。這里只研究那種寫法更適合調(diào)試,不討論其他。

二、左撇子和右撇子問題

下圖恐怕大家都遇到過,盡管現(xiàn)在少見了,因?yàn)榫W(wǎng)線插口都被設(shè)計(jì)到了左側(cè),與之類似的還有手機(jī)側(cè)鍵,現(xiàn)在的手機(jī)側(cè)鍵有些在左側(cè),有些在右側(cè)。這里要說一下羅永浩錘子手機(jī)的雙側(cè)鍵。
 

首先我們先來看看網(wǎng)線插口設(shè)計(jì),幾年前我見過一些設(shè)計(jì)在右側(cè)的筆記本。這無疑讓右撇子很難受,那根網(wǎng)線會(huì)經(jīng)常影響你的動(dòng)作或者導(dǎo)致網(wǎng)線掉落。但現(xiàn)在少見了,大多數(shù)網(wǎng)線接口都設(shè)計(jì)在了左側(cè)。好像是方便了,那么實(shí)際呢,對(duì)于左撇子呢?現(xiàn)在很多接口如VGAHDMI、網(wǎng)線接口都被設(shè)計(jì)到了左側(cè),這是不利于左撇子的設(shè)計(jì)。當(dāng)然作為設(shè)計(jì)者本身會(huì)考慮到,左撇子的用戶較少,只能為了滿足大多數(shù)人。是的,這沒錯(cuò),不可能專門為左撇子也設(shè)計(jì)一款筆記本。更何況,絕大多數(shù)左撇子都會(huì)用右手,特別是在中國(guó),受家庭的管教。我們左撇子幾乎都用右手寫字,用右手使用鼠標(biāo)。我作為左撇子(操作上更多喜歡左手),就覺得很多設(shè)計(jì)非常不近人情,但也只能和其他左撇子一樣,盡量去適應(yīng)本來就是給右撇子的設(shè)計(jì)。

那么再看看手機(jī),手機(jī)側(cè)鍵有些在左側(cè)(蘋果),有些在右側(cè)(諾基亞)。羅永浩的錘子手機(jī)是兩側(cè)都有的,聲稱是為了滿足左撇子和有撇子的操作問題。我到很想知道,羅永浩先生本人是左撇子還是右撇子。如果是右撇子,他可能嘗試過用左手操作左側(cè)側(cè)鍵的設(shè)計(jì),這的確不方便(或者說不習(xí)慣),所以萌生雙側(cè)鍵的設(shè)計(jì)。但如果他本人就是左撇子,那么他應(yīng)該會(huì)發(fā)現(xiàn),即便是側(cè)鍵在左側(cè),左撇子也可以像右撇子一樣熟練的操作左側(cè)側(cè)鍵。正如前文所說,左撇子們?cè)谏钪性缫蚜?xí)慣了那些給右撇子設(shè)計(jì)的東西。雖然我沒玩過錘子手機(jī),但我的確使用過左側(cè)側(cè)鍵和右側(cè)側(cè)鍵的手機(jī),對(duì)于一個(gè)左撇子來說,我不覺得有左側(cè)側(cè)鍵和右側(cè)側(cè)鍵有多么不習(xí)慣。至于右撇子怎么想的,我不清楚,但我很多朋友和我一樣用的是諾基亞lumia系列(側(cè)鍵在右側(cè)),他們都是右撇子,我看用起來也很順暢,后來?yè)Q為蘋果后(側(cè)鍵在左側(cè)),也沒抱怨過不方便。

所以個(gè)人認(rèn)為,錘子手機(jī)的雙側(cè)按鍵有些雞肋,此觀點(diǎn)僅代表左撇子的個(gè)人觀點(diǎn),不喜勿噴。

在程序設(shè)計(jì)中,也有這種類似的雞肋,我稱之為“不需要糾結(jié)的人為錯(cuò)誤”。比如ifi==1)和if1==i)。我是習(xí)慣性的寫ifi==1),有次我的朋友看到后,對(duì)此嗤之以鼻(他的編程水平確實(shí)比我高),我問他為何不認(rèn)同這種寫法。他說,你寫成這樣,如果少打了一個(gè)“=”號(hào),那邊就變成了ifi=1),成了賦值語句,判斷的條件就會(huì)永遠(yuǎn)為“真”,容易導(dǎo)致出錯(cuò)。但如果寫成if1==i),即便是你少敲了一個(gè)“=”號(hào),那么編譯器在編譯的時(shí)候會(huì)給你提示一個(gè)“leftside of asn-op not an lvalue”的Error(錯(cuò)誤)。開始我聽了覺得很有道理,恨不得把自己寫過的所有程序都改為if1==i)格式。后來,隨著閱歷的增長(zhǎng),覺得這種寫法完全是雞肋,很多程序員看了新手的程序(比如我那朋友就是看我的程序才引發(fā)出這個(gè)問題的)不是先考慮怎么解決問題,而是先挑你的毛病,這里不對(duì),那里不對(duì)。如果看到你寫的是ifi==1)而不是if1==i)他會(huì)先批評(píng)你。

那么這種批評(píng)對(duì)嗎?首先要確定的是,不管哪種寫法,少敲一個(gè)=號(hào)的概率是完全一樣的。所以說,沒有在本質(zhì)上解決出現(xiàn)這種問題的方法。那么在編譯后呢?

keil4版本下,如果在寫ifi==1)的時(shí)候真的少敲了一個(gè)“=”號(hào),那么程序執(zhí)行的結(jié)果肯定是會(huì)出錯(cuò)的,這個(gè)沒疑問,那么這個(gè)錯(cuò)誤就真的那么難以發(fā)覺嗎?真實(shí)的情況是,當(dāng)你把ifi==1)寫成ifi=1)時(shí),執(zhí)行build后,keil會(huì)給出一個(gè)“constant  in condition  expression”的Warning(警告),雙擊這個(gè)Warning,會(huì)給自動(dòng)指示到這個(gè)ifi=1)這個(gè)有問題的地方。

 

所以說,少打一個(gè)=號(hào)的情況是容易產(chǎn)生,但還不至于說不易于被發(fā)現(xiàn)(少敲一個(gè)符號(hào)的概率是一樣的)。只能說,ErrorWarning比起來,前者更讓程序員關(guān)注,也更容易找到錯(cuò)誤。我不否認(rèn)連我自己都懶得管Warning這種警告,但隨著閱歷的增加和責(zé)任心的成長(zhǎng),不管是Error還是Warning,我都會(huì)重視。一個(gè)合格的程序員,他不會(huì)忽略掉這種“constant  in condition  expression”的警告信息,因?yàn)樗皇恰?/span>uncalled segment….

再后來,我又知道,這是編譯器本身的問題,就是所謂的“人為錯(cuò)誤”。因?yàn)橐粋(gè)合理的編譯器應(yīng)該不允許你寫出ifi=1)這種格式(雖然它給出了警告),但條件語句里面本來就應(yīng)該是表達(dá)式而不是賦值語句,它給出一個(gè)Error(錯(cuò)誤)到合理些。這是編譯器本身的設(shè)計(jì)失誤,而if1==i)這種寫法又不能讓你完全改掉少打一個(gè)=號(hào)的問題,何必去糾結(jié)這些“人為錯(cuò)誤”呢,也因此我把這種情況稱之為“不需要糾結(jié)的人為錯(cuò)誤”。我沒必要為前人的錯(cuò)誤買單。

說到這,在單片機(jī)領(lǐng)域,程序員更多都是判斷“真”或“假”。如果真的想避免輸錯(cuò)符號(hào)帶來的麻煩,寫成ifi)這種格式好很多吧!我不覺得if1==i)比ifi)多高明,因?yàn)樗旧砭褪墙鉀Q一個(gè)本不應(yīng)該有的錯(cuò)誤。

 

三、各種插座






對(duì)于這些設(shè)計(jì),估計(jì)大家和我一樣,忍受很久了。但這不能把錯(cuò)誤全部歸咎于插座設(shè)計(jì)師上,有時(shí)候很多插頭的設(shè)計(jì)本身就不合理。比如現(xiàn)在市面上各種外觀的U盤,它本身就不方便插入,除了好看,還是好看。我欣賞好看的東西,但不能忽略實(shí)用,何況,那些設(shè)計(jì)的樸實(shí)無華的優(yōu)盤,本身也具備美感。

至于為何會(huì)出現(xiàn)這種坑爹設(shè)計(jì),我不知道。我們可以容忍一些設(shè)計(jì)的不足,但一個(gè)設(shè)計(jì)總不能讓大多數(shù)人都覺得X蛋吧?!也許作為設(shè)計(jì)者本身,他是想做好事—一個(gè)插板可以插兩種插頭,結(jié)果事與愿違。

在編程中,就有人喜歡搞這種設(shè)計(jì)(不針對(duì)初學(xué)者),因?yàn)槌绦騿T本身很難具備包容心態(tài),就好比一個(gè)是設(shè)計(jì)插板的,一個(gè)是設(shè)計(jì)插頭的。假如這個(gè)情況發(fā)生在一個(gè)插頭設(shè)計(jì)師身上,他肯定會(huì)說插板設(shè)計(jì)的不合理,可發(fā)生在插板設(shè)計(jì)師身上呢?他肯定會(huì)罵那個(gè)坑爹的插頭設(shè)計(jì)者。這有點(diǎn)曹丕的“文人相輕”的意思。這里我好奇一下,同一家公司出的插座(插板)和插頭,會(huì)不會(huì)出現(xiàn)不能插入的情況呢?因?yàn)槲覐臎]這樣配置過插線板和插頭。希望有知道的朋友告訴我一下。

這里我要說的是程序員的狹隘性(包括我自己也有),程序員本身很難面面俱到,TA的程序不見得就很好,但卻很難坐下來去研究其他程序員的想法。我之前的兩個(gè)例子恐怕就會(huì)引起一些程序員的誤解。他們有自己的一套理論來解釋i++i=i+i(有效率上的,有美觀上的),只有少部分人清楚它們只是寫法的不同,甚至有人看到這個(gè),就會(huì)想到++i(盡管我沒討論++i)。總之,當(dāng)你的代碼(程序設(shè)計(jì)、觀點(diǎn))與別人相抵觸時(shí),你最先批判的是別人,而不是先認(rèn)清本質(zhì),我不覺得我的觀點(diǎn)全對(duì),但和我討論的,有多少是研究問題本身呢?程序語言不是達(dá)爾文的進(jìn)化論,不能說“存在即有道理”,它是人設(shè)計(jì)的,編譯器也是人設(shè)計(jì)的,這就難免出現(xiàn)設(shè)計(jì)錯(cuò)誤,不是所有存在的東西都有道理,王垠甚至認(rèn)為,自增自減(i++,i--)本身就是錯(cuò)誤的設(shè)計(jì)。

同樣的,作為插座和插板,他們都是人設(shè)計(jì)的,也一樣會(huì)存在問題。如果說插板設(shè)計(jì)師的這種設(shè)計(jì)錯(cuò)誤只是讓你少用一個(gè)插頭,那么程序員的這種類似失誤就是一種災(zāi)難。

 

本文涉及到的程序僅限于keil4下的C51編譯環(huán)境。本文內(nèi)容純屬個(gè)人觀點(diǎn),難免有不足之處,希望高手予以指出,本人將不勝感激!

 



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:643751 發(fā)表于 2020-2-18 23:52 | 只看該作者
全部看完 寫的有道理 不知道老哥你什么年齡 我在20200218 在你的所有主題里看了我感興趣的貼子 價(jià)值很高的我都收藏了。感謝 今天很有收貨。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表