日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员成长之路(转)

發(fā)布時(shí)間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员成长之路(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么時(shí)候才能成為一個(gè)專業(yè)程序員呢?三年還是五年工作經(jīng)驗(yàn)?其實(shí)不用的,你馬上就可以了,我沒有騙你,因?yàn)閷I(yè)程序員與業(yè)余程序員的區(qū)別主要在于一種態(tài)度,如果缺乏這種態(tài)度,擁有十年工作經(jīng)驗(yàn)也還是業(yè)余的。

什么態(tài)度?專業(yè)態(tài)度!也就是星爺常說的專業(yè)精神。專業(yè)態(tài)度有多種表現(xiàn)形式,以后我們會(huì)一一介紹的。這里先介紹一下有關(guān)形象的態(tài)度,專業(yè)的程序員是很注重自己的形象的,當(dāng)然程序員的形象不是表現(xiàn)在衣著和言談上,而是表現(xiàn)在代碼風(fēng)格上,代碼就是程序員的社交工具,代碼風(fēng)格可是攸關(guān)形象的大事。

有人說過,傻瓜都可以寫出機(jī)器能讀懂的代碼,但只有專業(yè)程序員才能寫出人能讀懂的代碼。作為專業(yè)程序員,每當(dāng)寫下一行代碼時(shí),要記得程序首先是給人讀的,其次才是給機(jī)器讀的。你要從一個(gè)業(yè)余程序員轉(zhuǎn)向?qū)I(yè)程序員,就要先從代碼風(fēng)格開始,并從此養(yǎng)成一種嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度,生活上的不拘小節(jié)可不能帶到編程中來。

代碼風(fēng)格有很多種,Windows 和Linux都有自己主流的代碼風(fēng)格,每個(gè)團(tuán)隊(duì)、每個(gè)公司也可能有自己的代碼風(fēng)格,爭論哪種風(fēng)格好哪種風(fēng)格壞根本沒有什么意義。有助于其他程序員理解的代碼風(fēng)格都是可以接受的,因?yàn)樽裱囟ùa風(fēng)格的目的就是為了便于交流。

1 命名要展示對(duì)象的功能

1.1 文件名

文件名一定要能傳達(dá)文件的內(nèi)容信息,別人一看到文件名就能知道文件中放的是什么內(nèi)容。把一個(gè)類的代碼或者某一類代碼放在一起是好的習(xí)慣,這樣就很容易給文件取一個(gè)直觀的名字。業(yè)余愛好者常常把很多沒關(guān)系的代碼糅到一個(gè)文件中,結(jié)果造成代碼雜亂無章,也很難給它取一個(gè)恰當(dāng)?shù)拿?

1.2 函數(shù)名

單詞小寫,多個(gè)單詞用下劃線分隔。如:find_node

一個(gè)函數(shù)只完成單一功能。不要用代碼的長度來衡量是否要把一段代碼獨(dú)立成一個(gè)函數(shù)。即使只有幾行代碼,只要這些代碼完成的是一項(xiàng)獨(dú)立的功能,都應(yīng)該將其寫為一個(gè)單獨(dú)的函數(shù),而函數(shù)名要能夠直觀地反應(yīng)出它的功能。如果在給函數(shù)起名時(shí)遇到了困難,通常是函數(shù)設(shè)計(jì)不合理,則應(yīng)該仔細(xì)思考一下并對(duì)函數(shù)進(jìn)行相應(yīng)修改。

1.3 結(jié)構(gòu)/枚舉/聯(lián)合名

首字母大寫,多個(gè)單詞連寫。如:struct _DListNode

宏名:單詞大寫,多個(gè)單詞下劃線分隔。

如:#define MAX_PATH 260

變量名:單詞小寫,多個(gè)單詞下劃線分隔。

如:DListNode* node = NULL;

1.4 面向?qū)ο竺绞?/h3>

(1) 以對(duì)象為中心,采用“主語(對(duì)象)+謂語(動(dòng)作)”的形式來命名,取代傳統(tǒng)的“謂語(動(dòng)作)+賓語(目標(biāo))”的形式。

如:dlist_append

(2) 第一個(gè)參數(shù)為對(duì)象,并用thiz命名。

如:dlist_append(DList* thiz, void* value);

(3) 對(duì)象有自己的生命周期,因此都有相應(yīng)的創(chuàng)建和銷毀函數(shù)。

2 排版布局要美觀大方

2.1 合理使用空行

函數(shù)體之間用空行分隔。

結(jié)構(gòu)/聯(lián)合/枚舉聲明用空行分隔。

不同功能的代碼塊之間用空行分隔。

將功能類似的代碼(如宏定義、類型定義、函數(shù)聲明和全局變量)放在一起,和其他部分用空行分隔。

使用空行時(shí),一行就夠了,不要使用連續(xù)多個(gè)空行,那樣會(huì)讓人感覺代碼段空蕩蕩的。

2.2 合理使用空格

等號(hào)兩邊用空格。如:int a = 100;

參數(shù)之間用空格。如:test(int a, int b, int c)

語句末的分號(hào)與前面內(nèi)容不要加空格。如:test(a, b, c);

其他能讓代碼更美觀的地方。

2.3 合理使用括號(hào)

用括號(hào)分隔子表達(dá)式,不要只靠默認(rèn)優(yōu)先級(jí)來判斷。((a && b) || (c && d))

用括號(hào)分隔if/while/for等語句的代碼塊,那怕代碼只有一行。

2.4 合理縮進(jìn)

每一級(jí)都正常縮進(jìn),用tab縮進(jìn)取代空格縮進(jìn)(Linux內(nèi)核源代碼也遵循此規(guī)則)。用空格縮進(jìn)的目的是防止代碼因編輯器的tab寬度不同而變亂,這個(gè)擔(dān)心現(xiàn)在是多余的 了,代碼編輯器都支持tab寬度設(shè)置了。如果代碼縮進(jìn)的層次太多(比如超過三層),則可能是代碼設(shè)計(jì)上出了問題。

2.5 遵從團(tuán)隊(duì)的習(xí)慣

這一點(diǎn)是最重要的,一個(gè)團(tuán)隊(duì)就要有一個(gè)團(tuán)隊(duì)的樣子,不管你的水平有多高,遵循團(tuán)隊(duì)的規(guī)則是一個(gè)程序員的基本素養(yǎng)。如果團(tuán)隊(duì)的規(guī)則確實(shí)不好,大家應(yīng)該一起完善它。做到這一點(diǎn),你已經(jīng)離成為專業(yè)程序員這個(gè)目標(biāo)更近一步了,重新做一遍練習(xí)吧。隨著后面的學(xué)習(xí),你就可以真正走進(jìn)專業(yè)程序員這個(gè)行列了。

3 誰動(dòng)了你的隱私

3.1 什么是封裝

人有隱私,程序也有隱私。有隱私不是什么壞事,問題是不應(yīng)該讓別人知道自己的隱私,否則可能會(huì)對(duì)自己造成不小的傷害,甚至?xí)B累相關(guān)人物跟著倒霉。程序隱私的暴露,造成的不良影響不一定會(huì)泄露個(gè)人隱私那么大,但也不容小覷。封裝就是要保護(hù)好程序的隱私,不該讓調(diào)用者知道的事,就堅(jiān)決不要暴露出來。

3.2 為什么要封裝

總的來說,封裝主要有以下兩大好處。

隔離變化。程序的隱私通常是程序最容易變化的部分,比如內(nèi)部數(shù)據(jù)結(jié)構(gòu)、內(nèi)部使用的函數(shù)和全局變量等,我們需要把這些代碼封裝起來,從而讓它們的變化不會(huì)影響系統(tǒng)的其他部分。

降低復(fù)雜度。接口最小化是軟件設(shè)計(jì)的基本原則之一,最小化的接口容易被理解和使用。封裝內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只暴露最小的接口,會(huì)讓系統(tǒng)變得簡單明了,在一定程度上降低了系統(tǒng)的復(fù)雜度。

3.3 如何封裝

總的來說,封裝主要有以下兩大好處(具體影響后面再說)。隔離變化。程序的隱私通常是程序最容易變化的部分,比如內(nèi)部數(shù)據(jù)結(jié)構(gòu)、內(nèi)部使用的函數(shù)和全局變量等,我們需要把這些代碼封裝起來,從而讓它們的變化不會(huì)影響系統(tǒng)的其他部分。降低復(fù)雜度。接口最小化是軟件設(shè)計(jì)的基本原則之一,最小化的接口容易被理解和使用。封裝內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只暴露最小的接口,會(huì)讓系統(tǒng)變得簡單明了,在一定程度上降低了系統(tǒng)的復(fù)雜度。封裝過程中應(yīng)注意一下問題:

內(nèi)部函數(shù)通常實(shí)現(xiàn)一些特定的算法(如果具有通用性,應(yīng)該放到一個(gè)公共函數(shù)庫里),對(duì)調(diào)用者沒有多大用處,但它的暴露會(huì)干擾調(diào)用者的思路,讓系統(tǒng)看起來比實(shí)際的復(fù)雜。函數(shù)名也會(huì)污染全局名字空間,造成重名問題。它還會(huì)誘導(dǎo)調(diào)用者繞過正規(guī)接口走捷徑,造成不必要的耦合。隱藏內(nèi)部函數(shù)的做法很簡單。

(1)在頭文件中,只放最少的接口函數(shù)的聲明。

(2)在C文件中,所有內(nèi)部函數(shù)都加上static關(guān)鍵字。

全局變量始終都會(huì)占用內(nèi)存空間,共享庫的全局變量是按頁分配的,哪怕只有一個(gè)字節(jié)的全局變量也占用一個(gè)頁,這樣一來就會(huì)造成不必要內(nèi)存空間浪費(fèi)。全局變量也會(huì)給程序并發(fā)造成困難,想把程序從單線程改為多線程將會(huì)遇到麻煩。重要的是,如果調(diào)用者直接訪問這些全局變量,會(huì)造成調(diào)用者和實(shí)現(xiàn)者之間的耦合。

4 Write once, run anywhere(WORA)

4.1 專用鏈表和通用鏈表各自的特點(diǎn)與適用范圍

專用鏈表在這里是指該鏈表的實(shí)現(xiàn)和調(diào)用耦合在一起,只能被一個(gè)調(diào)用者使用,而不能單獨(dú)在其他地方被重用。通用鏈表則相反,它具有通用性,可以在多處被重復(fù)使用。盡管通用鏈表相對(duì)專用鏈表來說有很多優(yōu)越之處,不過草率地?cái)喽ㄍㄓ面湵肀葘S面湵砗靡彩遣还?#xff0c;因?yàn)樗鼈兌加凶约旱膬?yōu)點(diǎn)和適用范圍。()

注意 在本節(jié)中,為了避免讀起來拗口,我把雙向鏈表簡寫成鏈表了,希望大家不要介意。

專用鏈表的優(yōu)點(diǎn)

考慮到鏈表是最常用的數(shù)據(jù)結(jié)構(gòu)之一,很多地方都會(huì)用到它,實(shí)現(xiàn)通用的鏈表會(huì)更有價(jià)值。接下來我們要實(shí)現(xiàn)一個(gè)通用的鏈表,不過請(qǐng)大家記住,實(shí)現(xiàn)通用的鏈表并不是我們的目標(biāo),而是我們學(xué)習(xí)軟件設(shè)計(jì)方法的手段。前面我許諾過要以簡單的數(shù)據(jù)結(jié)構(gòu)講述復(fù)雜的軟件設(shè)計(jì)方法,鏈表就是其中的載體之一。

5 擁抱變化

在專用雙向鏈表中,dlist_printf的實(shí)現(xiàn)非常簡單,如果里面存放的是整數(shù),用 %d 打印,存放的是字符串,用 %s 打印。現(xiàn)在的麻煩在于雙向鏈表是通用的,我們無法預(yù)知其中存在的數(shù)據(jù)類型,也就是說我們要面對(duì)數(shù)據(jù)類型的變化。怎么辦呢?初學(xué)者可以參考的常用方法有以下幾種。

5.1 實(shí)現(xiàn)多個(gè)函數(shù),需要哪個(gè)就用哪個(gè)

比如實(shí)現(xiàn)dlist_print_int用來打印存放整數(shù)的雙向鏈表,dlist_print_string用來打印存放字符串的雙向鏈表等,其他類型都有自己的打印函數(shù)。

不過這種做法也有一些缺點(diǎn)。一是每個(gè)函數(shù)的實(shí)現(xiàn)方式類似,會(huì)帶來大量重復(fù)的代碼。二是由于數(shù)據(jù)類型的種類不確定,如果為每種數(shù)據(jù)類型都實(shí)現(xiàn)一個(gè)print函數(shù),當(dāng)要存放新的數(shù)據(jù)類型時(shí),就不得不修改dlist的實(shí)現(xiàn)。

5.2 傳入一個(gè)附加參數(shù)來決定如何打印

比如傳入1表示按整數(shù)方式打印,傳入2表示按字符串方式打印,以此類推。

這種做法比第一種好一點(diǎn),至少不會(huì)造成大量重復(fù)的代碼。但是同樣存在增加新類型時(shí)要修改dlist_print函數(shù)的問題。

5.3 調(diào)用dlist的接口函數(shù)獲取每一個(gè)位置的數(shù)據(jù)并打印出來

這種方法沒有前面兩種方法的缺點(diǎn),而且是一種相當(dāng)直觀的方式。但奇怪的是偏偏很少有人使用這個(gè)方法,原因可能有兩個(gè):其一是太拘泥于傳統(tǒng)的實(shí)現(xiàn)方式而沒有想到這一種;其二是擔(dān)心性能問題,因?yàn)橥ㄟ^索引取值,每一次都要從頭開始定位,其性能開銷為O.

其實(shí)這種方法是可以接受的,dlist_print函數(shù)只是用于輔助測(cè)試,我們并不需要太在乎它的性能開銷,而且我們很少會(huì)在鏈表中存放成千上萬的數(shù)據(jù),因此這個(gè)函數(shù)帶來的性能影響根本沒有想的那樣嚴(yán)重。所以在這里我們要介紹一種新的方法。

dlist_print的大體框架如下。

在上面代碼中,我們主要是不知道如何實(shí)現(xiàn) print(iter->data); 這行代碼。那么誰知道呢?很明顯,調(diào)用者知道,因?yàn)檎{(diào)用者知道鏈表里面所存放的數(shù)據(jù)類型。好吧,那就讓調(diào)用者來做好了,調(diào)用者在調(diào)用dlist_print時(shí)會(huì)提供一個(gè)函數(shù)給dlist_print來調(diào)用,這種回調(diào)調(diào)用者所提供函數(shù)的方法,我們可以稱之為回調(diào)函數(shù)法。

調(diào)用者如何提供函數(shù)給dlist_print呢?當(dāng)然是通過函數(shù)指針了。變量指針指向的是一塊數(shù)據(jù),指針指向不同的變量,則取到的是不同的數(shù)據(jù)。函數(shù)指針指向的是一段代碼(即函數(shù)),指針指向不同的函數(shù),則具有不同的行為。函數(shù)指針是實(shí)現(xiàn)多態(tài)的手段,多態(tài)就是隔離變化的秘訣,這里只是一個(gè)開端,后面我們會(huì)逐步地深入學(xué)習(xí)。

請(qǐng)看詳細(xì)實(shí)現(xiàn)過程

6 Don’t Repeat Yourself(DRY)

我見過不少任勞任怨的程序員,別人讓他做什么他就做什么,不管是不是份內(nèi)的事,不管是上司要求的還是同事要求的,都來者不拒。別人說需要一個(gè)某某功能的函數(shù),他就寫一個(gè)在他的模塊里,日積月累,他的模塊就成了一鍋“大雜燴”。我親眼見過有程序員在系統(tǒng)設(shè)置和桌面兩個(gè)模塊里,提供很多毫不相干的函數(shù),這些函數(shù)會(huì)造成不必要的耦合和復(fù)雜度。在這里也是一樣的,求和與求最大值并不是dlist應(yīng)該提供的功能,放在dlist里面實(shí)現(xiàn)是不應(yīng)該的。為了能實(shí)現(xiàn)這些功能,我們提供一種滿足這些需求的機(jī)制就好了。熱心腸是好的,但一定不要“管得太寬”,否則就費(fèi)力不討好了。

7 你的數(shù)據(jù)放在哪里

對(duì)于初學(xué)者來說這道題有點(diǎn)難度,很少有人能完全做對(duì)。不過沒關(guān)系,我并不是要出一道難題來難倒大家,而是要刺激大家去思考,以期達(dá)到加深學(xué)習(xí)印象的效果。有了前面兩次的經(jīng)驗(yàn),我想應(yīng)該沒人會(huì)去寫一個(gè)dlist_to_upper函數(shù),大家都會(huì)調(diào)用dlist_foreach來實(shí)現(xiàn)。不過新的問題又出現(xiàn)了,初學(xué)者還是有可能犯以下幾種常犯的錯(cuò)誤。

7.1 轉(zhuǎn)換大寫的方法不對(duì)

這是我們?cè)谡n本里學(xué)到的寫法,但在工程中是不能這樣做的。因?yàn)榇笮懽帜冈诓煌Z言中的定義是不一樣的,“a”是一個(gè)字符常量,它的值在任何時(shí)候都是97,但在不同語言中,97卻不一定代表“a”。我們不能簡單地認(rèn)為在97(a)—122(z)之間的字符就是小寫字母,而是應(yīng)該調(diào)用標(biāo)準(zhǔn)C函數(shù)islower來判斷,同樣轉(zhuǎn)換為大寫應(yīng)該調(diào)用toupper而不是減去一個(gè)常量。

7.2 在雙向鏈表中存放常量字符串,轉(zhuǎn)換時(shí)出現(xiàn)段錯(cuò)誤。

運(yùn)行時(shí)會(huì)出現(xiàn)“Segmentation fault”錯(cuò)誤。原因是“It”等字符串是常量,常量是不能被修改的。

7.3 在雙向鏈表中存放的是臨時(shí)變量,轉(zhuǎn)換后發(fā)現(xiàn)所有字符串都一樣。

運(yùn)行時(shí)發(fā)現(xiàn)打印出幾個(gè)感嘆號(hào)。原因是執(zhí)行dlist_append時(shí)沒有復(fù)制一份,所以在dlist中存放的是同一個(gè)地址。而且這個(gè)dlist在當(dāng)前函數(shù)返回后,里面保存的數(shù)據(jù)都無效了,因?yàn)檫@些數(shù)據(jù)指向的是臨時(shí)變量。

7.4 存放時(shí)復(fù)制了數(shù)據(jù),但沒有釋放所分配的內(nèi)存。

這里看起來工作正常了,但存在內(nèi)存泄露的bug。strdup調(diào)用malloc分配了內(nèi)存,但沒有地方去釋放它們。

初學(xué)者對(duì)內(nèi)存和指針只有一知半解的認(rèn)識(shí),常常犯一些連自己都莫名其妙的錯(cuò)誤。為了避免這些不必要的錯(cuò)誤,今天我們要學(xué)習(xí)各種數(shù)據(jù)存放的位置以及它們的特性,讓初學(xué)者對(duì)編程有更進(jìn)一步的認(rèn)識(shí)。在程序中,數(shù)據(jù)存放的位置主要有以下幾個(gè)。

7.5未初始化的全局變量(.bss段)

通俗地講,bss段被用來存放那些沒有初始化或初始化為0的全局變量。它有什么特點(diǎn)呢,讓我們先來看看一個(gè)小程序的表現(xiàn)。

變量bss_array的大小為4M,而可執(zhí)行文件的大小只有5K。由此可見,bss類型的全局變量只占運(yùn)行時(shí)的內(nèi)存空間,而不占用文件空間。

現(xiàn)在大多數(shù)操作系統(tǒng)在加載程序時(shí),會(huì)把所有的bss全局變量清零。但為了保證程序的可移植性,最好能手工把這些變量初始化為0,這樣可以使這些變量都有個(gè)確定的初始值。

當(dāng)然了,作為全局變量,在整個(gè)程序的運(yùn)行周期內(nèi),bss數(shù)據(jù)是一直存在的。

7.6初始化過的全局變量(.bss段)

與bss相比,data段就容易理解多了,看名稱就大概能知道它里面存放著數(shù)據(jù)。當(dāng)然,如果數(shù)據(jù)全是0,為了優(yōu)化考慮,編譯器會(huì)把它當(dāng)作bss處理。通俗地講,data段被用來存放那些初始化為非0值的全局變量。那么它又有什么特點(diǎn)呢,我們還是先來看看一個(gè)小程序的表現(xiàn)。

僅僅是把初始化的值改為非0值了,文件就變?yōu)?M多。由此可見,data類型的全局變量是既占文件空間,又占用運(yùn)行時(shí)內(nèi)存空間的。

同樣,作為全局變量,在整個(gè)程序的運(yùn)行周期內(nèi),data數(shù)據(jù)也是一直存在的。

7.7 常量數(shù)據(jù)(.bss段)

rodata的意義同樣明顯,ro代表read only(只讀),rodata就是用來存放常量數(shù)據(jù)的。關(guān)于rodata類型的數(shù)據(jù),要注意以下幾點(diǎn)。

由此可見,把在運(yùn)行過程中不會(huì)改變的數(shù)據(jù)設(shè)為rodata類型是有好處的。在多個(gè)進(jìn)程間共享,可以大大提高空間利用率,甚至能不占用RAM空間。同時(shí)由于rodata在只讀的內(nèi)存頁面中是受保護(hù)的,任何試圖對(duì)它進(jìn)行修改的行為都會(huì)被及時(shí)發(fā)現(xiàn),這樣一來還可以提高程序的穩(wěn)定性。

字符串會(huì)被編譯器自動(dòng)放到rodata中,其他數(shù)據(jù)要放到rodata中,只需要為其加const關(guān)鍵字修飾即可。

7.8 代碼(.bss段)

text段存放代碼(如函數(shù))和部分整數(shù)常量,它與rodata段很相似,相同的特性我們就不重復(fù)了,主要的區(qū)別在于text段是可以執(zhí)行的。

8 棧和堆

8.1棧

棧是用來存放臨時(shí)變量和函數(shù)參數(shù)的。將棧作為一種基本數(shù)據(jù)結(jié)構(gòu),我并不感到驚訝;將其用來實(shí)現(xiàn)函數(shù)調(diào)用,也是大家司空見慣的作法。直到我試圖找到另外一種方式實(shí)現(xiàn)遞歸操作時(shí),我才感嘆于棧的巧妙。要實(shí)現(xiàn)遞歸操作,不用棧不是不可能,只是找不出比使用棧更優(yōu)雅的方式。

通常情況下,棧是向下(低地址)增長的,每向棧中PUSH一個(gè)元素,棧頂就向低地址擴(kuò)展,每從棧中POP一個(gè)元素,棧頂就向高地址回退。這里有一些比較有意思的問題:在x86平臺(tái)上,棧頂寄存器為ESP,那么ESP的值是在PUSH操作之前修改呢,還是在PUSH操作之后修改呢?PUSH ESP這條指令會(huì)向棧中存入什么數(shù)據(jù)呢?據(jù)說x86系列CPU中,除了286外,都是先修改ESP,再壓棧的。由于286沒有CPUID指令,因此有的操作系統(tǒng)會(huì)用這種方法檢查286的型號(hào)。

要注意的是,存放在棧中的數(shù)據(jù)只在當(dāng)前函數(shù)及下一層函數(shù)中有效,一旦函數(shù)返回了,這些數(shù)據(jù)也就自動(dòng)釋放了,繼續(xù)訪問這些變量會(huì)造成意想不到的錯(cuò)誤。

8.2堆

堆是最靈活的一種內(nèi)存,它的生命周期完全由使用者控制。標(biāo)準(zhǔn)C提供以下幾個(gè)函數(shù)來使用堆內(nèi)存。

9 小結(jié)

本文通過一個(gè)簡單需求的完成過程講述了程序員應(yīng)具備的態(tài)度和技能,是程序員進(jìn)階的必經(jīng)之路。


總結(jié)

以上是生活随笔為你收集整理的程序员成长之路(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。