『壹』 為什麼中國的程序員會把 1024 作為程序員節日
1024程序員節是中國程序員的共同節日。1024是2的十次方,二進制計數的基本計量單位之一。程序員(英文Programmer)是從事程序開發、維護的專業人員。程序員就像是一個個1024,以最低調、踏實、核心的功能模塊搭建起這個科技世界。1G=1024M,而1G與1級諧音,也有一級棒的意思。
1024程序員節,是中國程序員的共同節日。在1842年,人稱「數字女王」的阿達·洛芙萊斯(Ada Lovelace)編寫了歷史上首款電腦程序。
在1834年,阿達的朋友——英國數學家、發明家兼機械工程師查爾斯·巴貝其(Charles Babbage)——發明了一台分析機;阿達則致力於為該分析機編寫演算法,並於1843 年公布了世界上第一套演算法。巴貝其分析機後來被認為是最早期的計算機雛形,而阿達的演算法則被認為是最早的計算機程序和軟體。
現今,一般將程序員分為程序設計人員和程序編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程序員、高級程序員、系統分析員,系統架構師,測試工程師五大類。
『貳』 為何程序員喜歡把回車鍵敲那麼響
很多人打字,空格是左手中指無名指拍一下,回車是右手中指無名指抬起來砸下去的,當然就響了,至於為什麼砸回車,一段代碼敲完或者一行命令打完就意味著可以休息一下了,手就會抬得高一點。關於「回車鍵」的來歷,還得從機械英文打字機說起。在機械英文打字機上,有一個部件叫「字車」,每打一個字元(原為單詞,但是個人覺得這里應該是字元),「字車」就前進一格。當打滿一行字元後,打字者就得推動「字車」到起始位置,這時打字機會有兩個動作響應:一是「字車」被歸位,二是滾筒上卷一行,以便開始輸入下一行,這個推動「字車」的動作叫「回車」。後來,在電動英文打字機上,人們增加了一個直接起「回車」作用的鍵。這個新增的鍵就被稱為「回車鍵」。
『叄』 為什麼程序員都喜歡用等寬字體
Consolas字體 明顯特徵「0內有一撇,3的上部是平的一橫這是程序員常用的英文等寬字體!如果這個字體還是不是你想要的字體,那麼你可以從這個方向出發,查找等寬字體,我想一定會找到答案的! 但是這些字體一般WIN上沒有(試過一遍了都沒找到),需要另外下載安裝!以下內容可以選讀: 等寬字體的標准(我想第六條就是你想要的吧): 1.所有字元等寬; 2.簡潔、清晰、規范的字元形體; 3.支持ASCII碼為128以上的擴展字元集; 4.空白字元(ASCII:0x20)與其他字元等寬; 5.'1'、'l'和'i'等三個字元易於區分; 6.'0'、'o'和'O'等三個字元易於區分; 7.雙引號、單引號的前後部分易於區分,最好是鏡像對稱的; 8.清晰的標點符號外形,尤其是大括符、圓括符和方括符。
『肆』 為什麼前端日誌喜歡用中文標點符號這是什麼毛病
除了程序員中文輸入下不會用英文符號的,大部分前端都是半路出家,所以很正常。
『伍』 程序員的符號是什麼意思
1、程序員的符號有很多種,你具體是在指什麼符號。
2、比如運算符號,加減乘除等等,與數學運算符號的意義基本相同。
3、還有特殊符號,比如#號,@號等等,會有一些特殊的含義,在不同語言中指代意義不盡相同。
4、還有分隔符號,這個一般是程序中自定義的。
5、希望對你有幫助。
『陸』 c語言編程用的符號有哪些
如果真正掌握了C 語言,你就能很輕易的回答上來。這個問題就請讀者試著回答一下吧。本章不會像關鍵字一樣一個一個深入討論,只是將容易出錯的地方討論一下。
表(2.1)標准C 語言的基本符號
C 語言的基本符號就有20 多個,每個符號可能同時具有多重含義,而且這些符號之間相互組合又使得C 語言中的符號變得更加復雜起來。
你也許聽說過「國際C 語言亂碼大賽(IOCCC)」,能獲獎的人毫無疑問是世界頂級C程序員。這是他們利用C 語言的特點極限挖掘的結果。下面這個例子就是網上廣為流傳的一個經典作品:
#i nclude <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d
"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw'
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:
uwloca-O;m.vpbks,fxntdCeghiry"),a+1);}
還沒發狂?看來你抵抗力夠強的。這是IOCCC 1988 年獲獎作品,作者是Ian Phillipps。
毫無疑問,Ian Phillipps 是世界上最頂級的C 語言程序員之一。你可以數數這裡面用了多少個符號。當然這里我並不會討論這段代碼,也並不是鼓勵你也去寫這樣的代碼(關於這段代碼的分析,你可以上網查詢)。
『柒』 對於程序員,編程經常遇到的那些符號,比如{}[]:;"'<>,.等,都必須用小拇指打出來嗎
我以前都沒注音過哦,看個人習慣吧。{}我是用無名指和小指,()我是用中指和無名指,左手小指shift,<>是用右手中指無名指,右手小指shift
『捌』 為什麼很多程序員不用switch,而是大量的if……else if
我個人覺得switch其實非常多餘。
1 大部分場景,都是2到3個可能分支,用個if else就可以了,除非有4 個以上分支,太多else顯得不好看,才考慮用switch.
2 switch限制多。switch必須是常量變數。if後面可以寫任意表達式。
3用法復雜,case後面要麼break,要麼return,要是不寫,居然還會繼續執行剩下的分支,對於新手來說分分鍾掉坑。
4 寫法上其實也不比if else優雅簡潔,switch xxx case xxxx ….
所以,switch徒增復雜性,真的不怎麼實用。
如果有10000種switch的可能性,有1000000個值需要被處理,怕是你們說的這些個switch的好處就完全消失了,預期平均每次要比較5000次,1000000個值,總計要比較50億次,不知道你們的CPU是啥主頻能扛得住這個計算量,針對這種情況的終極武器還是hash,根據不同的語言,hash的value可以是匿名函數,可以是介面的不同實現,用hash來快速確定處理演算法,而不是switch
答案:主要因為switch不適合業務系統的實際復雜需求,業務不斷的變更迭代,一更改需求,條件的復雜度高了,switch無力處理。
switch優點
那麼什麼時候適合switch,它的場景是:基於單一變數的值(如枚舉),這樣的可讀性比if條件更清晰。
switch缺點
從上面的場景來看,實在太局限,我來簡單說一下它的一些缺點吧:
1. 現實的業務場景很復雜,條件不單一,一旦需求變更,維護代碼相當崩潰。
2. switch經常忘記寫break,估計很多人一不小心就忘記寫了。如果你看過google的代碼規范,你會發現,Google對switch的要求非常多。
switch的封裝才更靈活
其實switch有人還在用也有一部分是 歷史 原因,但是隨著 科技 的發展,原有的設計以及落後了。
有些編程語言,如Python都沒有switch這種語法。當然也有部分新語言Golang和Kotlin還是繼承下來,但是又把switch包裝了一下,去掉了令人誤會的語法,這才讓switch變得靈活起來了。 如果不封裝,很難用。
IF語句的好處
通過上面描述的缺點也就是if語句更靈活的地方,根據業務進行邏輯條件編寫,可維護性高。同時只要寫的代碼質量高,可讀性也就會更高。
建議
現實的業務實際是很復雜的,我也不建議一定要用大量的if……else if,而是應該盡早返回來減少嵌套,這樣增加了可讀性以及降低維護的成本。
從C/ C++來看,當分支較多且switch要比較的值是連續的話,執行速度遠遠遠遠快於if,因為switch是直接跳到目標代碼執行的,而if則需要執行很多條語句,慢的不是一點點,一般編譯器會根據分支數量和比較的值是否連續生成不同匯編代碼,如果編譯器判定不能提升速度的話,switch生成的匯編代碼和if是一模一樣的沒有任何區別。
至於很多人不用switch我覺得可能是:
1.為了方便寫代碼,思維習慣隨手就用if寫了;
2.可能根本就不懂為什麼要用switch吧。
作為程序員來說,我更喜歡switch的結構,更直觀更容易找到相應的代碼塊。不過為什麼很多程序員不用Switch,而是使用大量的if...else if的結構,甚至像Python已經不支持原生Switch語法了?
這個原因很簡單,因為switch語法結構最後編譯還是通過if...else if來完成代碼的,所以從效率角度來說和if...else if一樣的。但是switch對比條件比較單一,絕大多數支持switch的編程語言都支持等於比較,也就是說變數只能等於case中的條件才會執行代碼塊。但是現實情況中,對比條件絕大多數比單一等於運算要復雜得多,因此很多程序員就直接使用if...else if。但是if...else if的結構,後期維護起來會比較不清晰,畢竟沒有Case...Break那麼直觀。但是添加一些註解應該還是能解決這個問題的。
所以,我現在能使用Switch的時候還是會使用switch,畢竟後期代碼維護起來方便點。不過更多時候還是用if...else if。
送大家以下java學習資料
我曾經接手過一份代碼,遇到過一個三十幾個if else套if else的模塊。
心理罵罵咧咧誰他喵寫的這玩意,然後開始review 歷史 。
大致情況是這樣的:第一個程序員寫下這段代碼時,只有兩個if else;後來開始逐漸加需求,先是一個、兩個,隨後量變引起質變,於是邏輯分支快速擴張。
這個時候已經沒有人願意去重構成switch或是其他什麼設計模式了,畢竟復雜度擺在那裡,萬一崩了還得背鍋。
三四個程序員接手這段代碼之後,就變成我現在這種局面了。
第一個程序員絕對沒有料到這么簡單的邏輯在之後會變成這么復雜的模塊,甚至在增添第一第二條else時,也只是很隨意的加上。
所以我覺得,這個鍋絕對是是甲方的,讓他娘的隨便改需求。
這么一想心裡就好受多了,編程嘛,最重要的是要看的開。
於是我又增加了兩條else,測試,提交,下班。
有時候真的不是我們不想寫好代碼,是不能寫好代碼。寫著寫著需求砍了、需求變了,什麼設計模式都不頂用,最終還是怎樣快怎樣方便怎樣來,因為根本沒人知道這段代碼還能不能活的過下一段需求變動。
有的人肯定要說怎麼不訂合同。合同肯定是有的,但是明明白紙黑字寫的合同,該改還是得改,畢竟你要是不同意甲方那些「微小的變動」,以後還做不做了?!金主真能去得罪?
還是要學會得過且過,跟什麼過不去也不能跟自己過不去,糟糕的代碼忍一忍就完了:代碼能跑、頭發不少,對我們這些打工的人而言比什麼都重要。
現實工作絕不是課本中的理想狀態,會有無數的突發情況在等著你。你定義了半天觀察者、備忘錄,第二天這部分需求被砍了;寫了半天介面,抽象類,忽然下午告訴你要加個十萬八千里打不著邊的啥東西,於是又開始加適配器,等你加完了告訴你又砍了。甚至有次半夜被喊起來改代碼,等改完了發現需求被撤回了,氣的我直接請了兩天假調整心情。
設計模式和大的框架絕對是一個項目中非常重要的東西,但不是絕對重要的;一個好的PM團隊,在某種意義上,才真正決定了這個項目的代碼質量。[1]
請用5秒鍾的時間查看下面的代碼是否存在bug。
OK,熟練的程序猿應該已經發現Bug所在了,在第8行和第10行下面我沒有添加關鍵字break; 這就導致這段代碼的行為邏輯與我的設計初衷不符了。
這就是第一個理由為什麼程序猿很少使用switch來做條件判斷,對於新手來說忘記寫break實在是再普通不過了,就算是老猿忘記寫也是時有發生的事情,而這個語法錯誤在諸多的語法檢查器上沒有辦法檢查出來的,因為從語法角度來說是正確的!可是代碼的處理邏輯卻是錯誤的!用if來重寫這段代碼的話,就不會發生這種錯誤。
上面的代碼為了保證正確我添加了else做一個邏輯上的保證,其實如果不寫else,這段代碼也不會發生邏輯錯誤,而且一旦我忘記寫花括弧的時候,語法編譯器是會提示我添加的,甚至可以使用eslint這種的工具強制我使用花括弧,這樣就不會犯語法錯誤了,一旦出現bug,那麼肯定是我邏輯上的問題了。
switch盡管對於break很寬容,但是對判斷條件很嚴苛,case後面只能跟常量,如果你用C編寫的話,甚至只能用int類型作為判斷條件。對於我們這么瀟灑自如的程序猿來說,這種限制實在是太麻煩了,用if的話,別說是常量了,我用函數都可以,真正做到方便快捷。
這個缺點跟缺點一有關,為了防止漏寫break,因此建議把分支處理方法獨立成一個子函數來處理,這樣在閱讀代碼的時候就會減少忘記寫break帶來的bug,那麼用if來寫的話,我想怎麼寫就怎麼寫,非常隨意自由,但是這也導致了代碼的可讀性大大降低。
switch的優點
既然switch有這么嚴重的缺點,那怎麼在所有語言中依然會存在呢?那就說下switch的優點吧,它的優點也剛好是它的缺點。
在很久很久以前,那時候的電腦性能還不如一台小霸學習機的時候,聰明的計算機科學家為了提高計算機的處理速度,將一些邏輯分支處理方法簡化了一下,把一些需要做邏輯判斷的操作給固定死,然後只要查表一樣一個一個對一下就能做出相應的反應了。
比如說a=0的判斷,switch和if在cpu上面的處理方式是不一樣的,switch是在編譯階段將子函數的地址和判斷條件綁定了,只要直接將a的直接映射到子函數地址去執行就可以了,但是if處理起來就不一樣了。
它首先要把a的值放到CPU的寄存器中,然後要把比較的值放到CPU的另一個寄存器中,然後做減法,然後根據計算結果跳轉到子函數去執行,這樣一來就要多出3步的操作了,如果邏輯判斷多的話,那麼將會比switch多處許多倍的操作,盡管寄存器操作的速度很快,但是對於當時的學習機來說,這點速度根本不夠用啊。
那還有一個問題,為什麼要使用break來做一個判斷結束呢?這不是很容易造成語法錯誤了?那就要說到子函數的問題上了。
在早起的電腦代碼中是沒有子函數的概念的,那時候都是用goto隨意跳轉的,你想去第10行代碼,很簡單goto 10就可以了。這種編程思維在C的早期階段還是一直受到影響的,因此早期的C也沒有子函數,都是一堆邏輯處理混亂在一起,goto滿天飛,所以那時候你沒有一個最強大腦是寫不了程序的。那為了告訴程序我這里條件判斷處理結束,就添加了break作為終止符號。後來慢慢的有了子程序,有了更好的編程規范,才一步一步的將寫代碼淪落到體力勞動。
後來發展的新語言為了標榜自己的血統,多少都要參考下C,然後就把switch這種詭異的語法也繼承下來了。但是也不是所有的語言都照搬,比如Google發明的新語言golang和kotlin就又把switch包裝了一下,去掉了令人誤會的語法,又讓switch變得靈活起來了,對了,在代碼重構的時候,還是用switch把,這樣看起來的確代碼更簡潔哦![2]
switch只能用於簡單判斷,不支持表達式。
沒有if else 使用方便。
不是盡量別用,而是不合適沒法用,合適得時候該用還是用。
比如說,變數i要求大於10,小於20,一條if(i>10&&i
『玖』 程序員最喜歡的英文字母是哪一個
f吧
開心的時候就是和各種function跳舞。
邏輯走不出來的時候就喜歡print(「f**k up」);
p也是喜歡的人也不少。
『拾』 >>>符號是什麼意思
<<是左移符號,列x<<1,就是x的內容左移一位(x的內容並不改變)
>>是帶符號位的右移符號,x>>1就是x的內容右移一位,如果開頭是1則補1,是0責補0,(x的內容並不改變).
>>>是不帶符號位的右移,x>>>1就是x的內容右移一位,開頭補0(x的內容並不改變)
位移運算符只能用於byte,short,char,int,long類型. 對於低於int類型的操作數先自動轉換為int再位移,而且位移量不能大於31,對於位移量系統先做對32的模,得到的結果才是真正的位移量,因為int類型為4個位元組,即32位,移動32位將沒有任何意義.對於long則是模64.
映射到二進制的演算法,java中比較搞笑的運算。舉例:
32除以2,演算法可以 a = 32; a = a / 2; 這樣寫的話編譯器會首先創建內存空間a,然後開辟空間 32, 然後開辟空間2,然後運算。。。過程比較復雜
但是如果用移位運算的話,二進制的32是100000,用移位運算,右移移位並左補零,就變成了010000,這樣就是16了,省去了開辟內存的麻煩。。。
這種運算C程序員普遍使用。有C基礎的人寫Java程序就會很喜歡用這些運算符。
有什麼不清楚的可以繼續補充,呵呵。