專訪邱俊濤:高級(jí)JavaScript程序員代碼應(yīng)結(jié)構(gòu)清晰、模塊化良好
本文關(guān)鍵詞:JavaScript核心概念及實(shí)踐,由筆耕文化傳播整理發(fā)布。
在談到敏捷開發(fā)時(shí),邱俊濤認(rèn)為那些一成不變,或者認(rèn)為“只有這樣才是敏捷,那樣不是”的教條想法,都是絕不足取的
邱俊濤,2008年畢業(yè)于昆明理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),目前就職于ThoughtWorks。著有《JavaScript核心概念及實(shí)踐》一書,對(duì)動(dòng)態(tài)語(yǔ)言和函數(shù)式編程有很高的熱情和興趣。主要開發(fā)經(jīng)歷涉及J2EE,Web前端開發(fā),Linux下的網(wǎng)絡(luò)服務(wù)等方面。喜歡開源軟件,熱愛(ài)知識(shí)分享,崇尚簡(jiǎn)潔,輕量的設(shè)計(jì)和模式。
我是一個(gè)開源軟件愛(ài)好者CSDN:請(qǐng)和大家介紹下你及從事的工作。
邱俊濤:大家好,我叫邱俊濤,目前就職于ThoughtWorks,是一名軟件工程師。如果加上畢業(yè)前為期一個(gè)月的實(shí)習(xí)的話,到現(xiàn)在我已經(jīng)工作了5年了。在加入ThoughtWorks之前,我曾在另外兩家IT公司工作過(guò),涉及過(guò)的技術(shù)主要包括J2EE、Web前端和Linux下的服務(wù)開發(fā)等方面。
在ThoughtWorks,工作主要內(nèi)容仍然是開發(fā),但是幾乎每個(gè)項(xiàng)目的技術(shù)�?赡芏紩�(huì)有所不同,因此可以嘗試到各種框架,各種語(yǔ)言,以及和各種牛人一起開發(fā)和學(xué)習(xí),這些都是非常有趣的體驗(yàn)。
CSDN:你首次接觸計(jì)算機(jī)是什么時(shí)候?那個(gè)時(shí)候很多人都覺(jué)得解脫了,并開始癡迷于游戲,你為何會(huì)選擇去鉆研電腦技術(shù)?
邱俊濤:我首次接觸計(jì)算機(jī)程序開發(fā)是在2004年的夏天(接觸計(jì)算機(jī)是在2001年,但是真正做出一個(gè)可以運(yùn)行的程序,則是在2004年),當(dāng)時(shí)高中畢業(yè),在等待錄取通知書的期間,我去了石家莊找我的兄長(zhǎng)邱俊鋒。
邱俊峰當(dāng)時(shí)也是在做軟件開發(fā),而且一度癡迷UNIX,他在他們公司的一臺(tái)廢棄已久且沒(méi)有顯示器的機(jī)器上安裝了FreeBSD,然后把我安排在他同事一臺(tái)閑置的機(jī)器上,這樣我可以通過(guò)SSH登陸到那臺(tái)FreeBSD服務(wù)器上。在他的指導(dǎo)下,我用FreeBSD下的開發(fā)工具cc/ld/make等編寫出了第一個(gè)可以運(yùn)行的程序——比打印“Hello,world”稍微“高級(jí)”一點(diǎn)——它可以計(jì)算兩個(gè)數(shù)字的和。正是這次經(jīng)歷,使我對(duì)于基于命令行的、簡(jiǎn)潔的開發(fā)方式產(chǎn)生了濃厚的興趣。
我覺(jué)得這種對(duì)于計(jì)算機(jī)軟件的興趣,或者說(shuō)癡迷,和其他同學(xué)對(duì)于旅游、運(yùn)動(dòng)和打游戲等的癡迷并無(wú)二致,當(dāng)然也無(wú)高下之分。只不過(guò)我正好找到了一個(gè)自己既感興趣,又正好看起來(lái)不是那么“不務(wù)正業(yè)”的方向而已。
CSDN:能聊下你為什么喜愛(ài)在Linux以及Linux命令行環(huán)境做開發(fā),它哪里吸引了你?
邱俊濤:首先,作為一個(gè)開源軟件的愛(ài)好者,Linux本身就是一個(gè)最大的開源軟件,而且運(yùn)行于其上的絕大多數(shù)軟件都是以開源的形式出現(xiàn),這些事實(shí)無(wú)疑對(duì)我有很大的吸引力。相對(duì)于圖形界面,命令行展現(xiàn)出的強(qiáng)大的可定制性和靈活性,可以極大的提高開發(fā)效率,命令行對(duì)于開發(fā)者有一種天然的吸引力:本質(zhì)上來(lái)講,它可以把命令理解為函數(shù),命令的選項(xiàng)理解為參數(shù),管道為函數(shù)調(diào)用鏈,這樣的話,在命令行工作本身就變成了編程!
Linux下有許多很順手的小工具可以幫助程序員完成日常的開發(fā)工作,以及一些服務(wù)運(yùn)行狀況的監(jiān)控等。另外,當(dāng)發(fā)現(xiàn)一些重復(fù)的工作時(shí),可以編寫一個(gè)腳本將命令組合在一起,然后再交給crontab來(lái)自動(dòng)運(yùn)行,可以節(jié)省程序員很多時(shí)間。
CSDN:畢業(yè)后你從事的第一份工作是什么?據(jù)說(shuō)這份工作主要和Java相關(guān),后來(lái)為什么會(huì)去學(xué)習(xí)JavaScript?當(dāng)初做選擇主要是基于什么考慮的?
邱俊濤:2008年,我大學(xué)畢業(yè),在一家做報(bào)表產(chǎn)品的外企工作(Jinfonet),公司中大部分團(tuán)隊(duì)都使用Java開發(fā),而我們組主要工作為基于Web報(bào)表的展現(xiàn)。也就是在這時(shí)候,我開始認(rèn)真學(xué)習(xí)JavaScript,并真正把它當(dāng)做一門編程語(yǔ)言來(lái)看待。幾個(gè)月后,當(dāng)我理清了JavaScript中眾多容易被混淆的概念之時(shí),我覺(jué)得應(yīng)該把我的理解分享出來(lái),于是就有了《JavaScript核心概念及實(shí)踐》的前身,這個(gè)系列做出后發(fā)表在ITeye(當(dāng)時(shí)還叫JavaEye),并且收到了很多鼓勵(lì)和幫助。
堅(jiān)持,讓我在JavaScript路上越走越遠(yuǎn)CSDN:工作后很多程序員有這樣一種情況:對(duì)現(xiàn)狀不滿足,卻又萎靡不振懶得改變,像你有沒(méi)有這種情況?會(huì)去找一些項(xiàng)目來(lái)滿足自己的興趣和挑戰(zhàn)欲望嗎?平時(shí)都會(huì)干嘛?
邱俊濤:非常好的問(wèn)題,我覺(jué)得是這樣的:當(dāng)你每天早上起床要去公司的時(shí)候,如果你內(nèi)心沉重,打不起精神去工作;而到下班的時(shí)候,你恨不得立刻離開公司;在工作之余,你永遠(yuǎn)不希望同事或者其他人問(wèn)你關(guān)于工作的任何事情;那你應(yīng)該意識(shí)到:是時(shí)候做出改變了。事實(shí)上,改變不一定總是好的,但是如果工作無(wú)法讓你感到快樂(lè),而你又無(wú)力與這種現(xiàn)狀斗爭(zhēng),那就需要改變了,套用一句老話:失去的只是枷鎖,而得到的是整個(gè)世界。
我自己也經(jīng)歷過(guò)這樣一段時(shí)期:在第一家公司出來(lái)之后,我去了一個(gè)很大的公司,但是每天的工作內(nèi)容非常無(wú)聊,毫無(wú)挑戰(zhàn),連續(xù)一周我每天這樣問(wèn)自己:“現(xiàn)在這種方式是我想要的嗎?”,在得到了七次否定的回答之后,我就離職去另外一家公司�,F(xiàn)在回想,那是我當(dāng)年或者是我此生做的最明智的決策之一。這個(gè)經(jīng)歷可能是一個(gè)極端,可能大部分公司不會(huì)讓人感覺(jué)到那么糟糕,可能一直處于“還好”或者“還行”的尷尬境地,這事實(shí)上也是一種非常危險(xiǎn)的處境。
比如我曾經(jīng)呆過(guò)的一家公司,這是一家“還好”的公司,薪水不算豐厚,但是也不至于讓員工“凍餒其妻子”,偶爾會(huì)出差幾周,偶爾會(huì)加班,但一張一弛,不會(huì)讓人覺(jué)得無(wú)法忍受。對(duì)于這種情況,我在工作之余通過(guò)不斷的學(xué)習(xí)來(lái)充實(shí)自己,比如參加一些開源的項(xiàng)目,研究學(xué)習(xí)其他的技術(shù),比如動(dòng)態(tài)語(yǔ)言,并嘗試在工作中使用,通過(guò)博客看一看別的程序員的工作方式、工作內(nèi)容等。
如果你對(duì)現(xiàn)狀不滿,而又看不到立刻改變的方向,那么就應(yīng)該去不斷的學(xué)習(xí)。在學(xué)習(xí)到了新技術(shù)或者新理念之后,可以嘗試在現(xiàn)有的環(huán)境中使用并推廣。如果足夠幸運(yùn),那么在得到很多認(rèn)同感之后,可能會(huì)改善這種“萎靡不振”的狀態(tài);而如果你發(fā)現(xiàn)與環(huán)境格格不入且無(wú)法改變,那就可以嘗試換一個(gè)環(huán)境,無(wú)論如何你可能覺(jué)得環(huán)境會(huì)很不舒適,但是不要自己放棄自己。
CSDN:首先恭喜你新書《JavaScript核心概念及實(shí)踐》這個(gè)月出版,據(jù)說(shuō)這本書和你在ITeye寫博有關(guān),能不能和大家回顧下這段經(jīng)歷?另外把博文整理成書有沒(méi)有遇到什么困難?這段經(jīng)歷給你帶來(lái)哪些收獲和好習(xí)慣?此外新書為什么用杜虎符作為封面?
邱俊濤:謝謝!這本書最早發(fā)表在ITeye上,事實(shí)上是先有一些草稿后才逐篇發(fā)表的,但是每一章在發(fā)表之前都很粗糙,在發(fā)表之前都會(huì)進(jìn)行很多的改動(dòng)(以免有明顯的錯(cuò)誤誤導(dǎo)初學(xué)者等),這樣事實(shí)上也是一種潛在的促進(jìn)。而幾乎每一篇都有大量的留言,也有很多關(guān)注,沒(méi)有這些讀者的支持,這本書可能根本無(wú)法堅(jiān)持到最后,在這里也鄭重的感謝一下ITeye這個(gè)平臺(tái)以及這個(gè)平臺(tái)上的那么多熱心讀者。
說(shuō)到困難,我覺(jué)得堅(jiān)持本身是最大的困難,如果留意一下這個(gè)系列發(fā)表時(shí)間表的話你可能會(huì)發(fā)現(xiàn),某些章節(jié)之間的跨度較大,而后來(lái)甚至有半年都沒(méi)有更新。一方面是由于部分內(nèi)容本身正在修改中,另一方面也是在糾結(jié)于繼續(xù)寫下去還是到此為止,很幸運(yùn)最后終于堅(jiān)持了下來(lái),這樣給自己的信心有很大的正面作用。也就是說(shuō),如果我寫第二本書的話,最終能夠?qū)懲甑母怕蕰?huì)增大一些。
另一個(gè)比較大的感受是:盡量將自己學(xué)習(xí)到的東西分享出去,一方面可以鍛煉總結(jié)能力和表達(dá)能力,另一方面,當(dāng)你可以很輕松的將一個(gè)復(fù)雜的技術(shù)描述清楚,并使得讀者/聽(tīng)眾也能明白的時(shí)候,那才是你真正掌握了該知識(shí)。在做到這點(diǎn)之前,需要查閱很多資料,也需要自己動(dòng)手去驗(yàn)證一些想法,但整個(gè)過(guò)程的收益會(huì)非常大。
虎符是古代用于調(diào)兵遣將的憑證,寓意JavaScript小巧但是功能強(qiáng)大。
本文為CSDN原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
在談到敏捷開發(fā)時(shí),邱俊濤認(rèn)為那些一成不變,或者認(rèn)為“只有這樣才是敏捷,那樣不是”的教條想法,都是絕不足取的
邱俊濤,2008年畢業(yè)于昆明理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),目前就職于ThoughtWorks。著有《JavaScript核心概念及實(shí)踐》一書,對(duì)動(dòng)態(tài)語(yǔ)言和函數(shù)式編程有很高的熱情和興趣。主要開發(fā)經(jīng)歷涉及J2EE,Web前端開發(fā),Linux下的網(wǎng)絡(luò)服務(wù)等方面。喜歡開源軟件,熱愛(ài)知識(shí)分享,崇尚簡(jiǎn)潔,輕量的設(shè)計(jì)和模式。
我是一個(gè)開源軟件愛(ài)好者CSDN:請(qǐng)和大家介紹下你及從事的工作。
邱俊濤:大家好,我叫邱俊濤,目前就職于ThoughtWorks,是一名軟件工程師。如果加上畢業(yè)前為期一個(gè)月的實(shí)習(xí)的話,到現(xiàn)在我已經(jīng)工作了5年了。在加入ThoughtWorks之前,我曾在另外兩家IT公司工作過(guò),涉及過(guò)的技術(shù)主要包括J2EE、Web前端和Linux下的服務(wù)開發(fā)等方面。
在ThoughtWorks,工作主要內(nèi)容仍然是開發(fā),但是幾乎每個(gè)項(xiàng)目的技術(shù)�?赡芏紩�(huì)有所不同,因此可以嘗試到各種框架,各種語(yǔ)言,以及和各種牛人一起開發(fā)和學(xué)習(xí),這些都是非常有趣的體驗(yàn)。
CSDN:你首次接觸計(jì)算機(jī)是什么時(shí)候?那個(gè)時(shí)候很多人都覺(jué)得解脫了,并開始癡迷于游戲,你為何會(huì)選擇去鉆研電腦技術(shù)?
邱俊濤:我首次接觸計(jì)算機(jī)程序開發(fā)是在2004年的夏天(接觸計(jì)算機(jī)是在2001年,但是真正做出一個(gè)可以運(yùn)行的程序,則是在2004年),當(dāng)時(shí)高中畢業(yè),在等待錄取通知書的期間,我去了石家莊找我的兄長(zhǎng)邱俊鋒。
邱俊峰當(dāng)時(shí)也是在做軟件開發(fā),而且一度癡迷UNIX,他在他們公司的一臺(tái)廢棄已久且沒(méi)有顯示器的機(jī)器上安裝了FreeBSD,然后把我安排在他同事一臺(tái)閑置的機(jī)器上,這樣我可以通過(guò)SSH登陸到那臺(tái)FreeBSD服務(wù)器上。在他的指導(dǎo)下,我用FreeBSD下的開發(fā)工具cc/ld/make等編寫出了第一個(gè)可以運(yùn)行的程序——比打印“Hello,world”稍微“高級(jí)”一點(diǎn)——它可以計(jì)算兩個(gè)數(shù)字的和。正是這次經(jīng)歷,使我對(duì)于基于命令行的、簡(jiǎn)潔的開發(fā)方式產(chǎn)生了濃厚的興趣。
我覺(jué)得這種對(duì)于計(jì)算機(jī)軟件的興趣,或者說(shuō)癡迷,和其他同學(xué)對(duì)于旅游、運(yùn)動(dòng)和打游戲等的癡迷并無(wú)二致,當(dāng)然也無(wú)高下之分。只不過(guò)我正好找到了一個(gè)自己既感興趣,又正好看起來(lái)不是那么“不務(wù)正業(yè)”的方向而已。
CSDN:能聊下你為什么喜愛(ài)在Linux以及Linux命令行環(huán)境做開發(fā),它哪里吸引了你?
邱俊濤:首先,作為一個(gè)開源軟件的愛(ài)好者,Linux本身就是一個(gè)最大的開源軟件,而且運(yùn)行于其上的絕大多數(shù)軟件都是以開源的形式出現(xiàn),這些事實(shí)無(wú)疑對(duì)我有很大的吸引力。相對(duì)于圖形界面,命令行展現(xiàn)出的強(qiáng)大的可定制性和靈活性,可以極大的提高開發(fā)效率,命令行對(duì)于開發(fā)者有一種天然的吸引力:本質(zhì)上來(lái)講,它可以把命令理解為函數(shù),命令的選項(xiàng)理解為參數(shù),管道為函數(shù)調(diào)用鏈,這樣的話,在命令行工作本身就變成了編程!
Linux下有許多很順手的小工具可以幫助程序員完成日常的開發(fā)工作,以及一些服務(wù)運(yùn)行狀況的監(jiān)控等。另外,當(dāng)發(fā)現(xiàn)一些重復(fù)的工作時(shí),可以編寫一個(gè)腳本將命令組合在一起,然后再交給crontab來(lái)自動(dòng)運(yùn)行,可以節(jié)省程序員很多時(shí)間。
CSDN:畢業(yè)后你從事的第一份工作是什么?據(jù)說(shuō)這份工作主要和Java相關(guān),后來(lái)為什么會(huì)去學(xué)習(xí)JavaScript?當(dāng)初做選擇主要是基于什么考慮的?
邱俊濤:2008年,我大學(xué)畢業(yè),在一家做報(bào)表產(chǎn)品的外企工作(Jinfonet),公司中大部分團(tuán)隊(duì)都使用Java開發(fā),而我們組主要工作為基于Web報(bào)表的展現(xiàn)。也就是在這時(shí)候,我開始認(rèn)真學(xué)習(xí)JavaScript,并真正把它當(dāng)做一門編程語(yǔ)言來(lái)看待。幾個(gè)月后,當(dāng)我理清了JavaScript中眾多容易被混淆的概念之時(shí),我覺(jué)得應(yīng)該把我的理解分享出來(lái),于是就有了《JavaScript核心概念及實(shí)踐》的前身,這個(gè)系列做出后發(fā)表在ITeye(當(dāng)時(shí)還叫JavaEye),并且收到了很多鼓勵(lì)和幫助。
堅(jiān)持,讓我在JavaScript路上越走越遠(yuǎn)CSDN:工作后很多程序員有這樣一種情況:對(duì)現(xiàn)狀不滿足,卻又萎靡不振懶得改變,像你有沒(méi)有這種情況?會(huì)去找一些項(xiàng)目來(lái)滿足自己的興趣和挑戰(zhàn)欲望嗎?平時(shí)都會(huì)干嘛?
邱俊濤:非常好的問(wèn)題,我覺(jué)得是這樣的:當(dāng)你每天早上起床要去公司的時(shí)候,如果你內(nèi)心沉重,打不起精神去工作;而到下班的時(shí)候,你恨不得立刻離開公司;在工作之余,你永遠(yuǎn)不希望同事或者其他人問(wèn)你關(guān)于工作的任何事情;那你應(yīng)該意識(shí)到:是時(shí)候做出改變了。事實(shí)上,改變不一定總是好的,但是如果工作無(wú)法讓你感到快樂(lè),而你又無(wú)力與這種現(xiàn)狀斗爭(zhēng),那就需要改變了,套用一句老話:失去的只是枷鎖,而得到的是整個(gè)世界。
我自己也經(jīng)歷過(guò)這樣一段時(shí)期:在第一家公司出來(lái)之后,我去了一個(gè)很大的公司,但是每天的工作內(nèi)容非常無(wú)聊,毫無(wú)挑戰(zhàn),連續(xù)一周我每天這樣問(wèn)自己:“現(xiàn)在這種方式是我想要的嗎?”,在得到了七次否定的回答之后,我就離職去另外一家公司。現(xiàn)在回想,那是我當(dāng)年或者是我此生做的最明智的決策之一。這個(gè)經(jīng)歷可能是一個(gè)極端,可能大部分公司不會(huì)讓人感覺(jué)到那么糟糕,可能一直處于“還好”或者“還行”的尷尬境地,這事實(shí)上也是一種非常危險(xiǎn)的處境。
比如我曾經(jīng)呆過(guò)的一家公司,這是一家“還好”的公司,薪水不算豐厚,但是也不至于讓員工“凍餒其妻子”,偶爾會(huì)出差幾周,偶爾會(huì)加班,但一張一弛,不會(huì)讓人覺(jué)得無(wú)法忍受。對(duì)于這種情況,我在工作之余通過(guò)不斷的學(xué)習(xí)來(lái)充實(shí)自己,比如參加一些開源的項(xiàng)目,研究學(xué)習(xí)其他的技術(shù),比如動(dòng)態(tài)語(yǔ)言,并嘗試在工作中使用,通過(guò)博客看一看別的程序員的工作方式、工作內(nèi)容等。
如果你對(duì)現(xiàn)狀不滿,而又看不到立刻改變的方向,那么就應(yīng)該去不斷的學(xué)習(xí)。在學(xué)習(xí)到了新技術(shù)或者新理念之后,可以嘗試在現(xiàn)有的環(huán)境中使用并推廣。如果足夠幸運(yùn),那么在得到很多認(rèn)同感之后,可能會(huì)改善這種“萎靡不振”的狀態(tài);而如果你發(fā)現(xiàn)與環(huán)境格格不入且無(wú)法改變,那就可以嘗試換一個(gè)環(huán)境,無(wú)論如何你可能覺(jué)得環(huán)境會(huì)很不舒適,但是不要自己放棄自己。
CSDN:首先恭喜你新書《JavaScript核心概念及實(shí)踐》這個(gè)月出版,據(jù)說(shuō)這本書和你在ITeye寫博有關(guān),能不能和大家回顧下這段經(jīng)歷?另外把博文整理成書有沒(méi)有遇到什么困難?這段經(jīng)歷給你帶來(lái)哪些收獲和好習(xí)慣?此外新書為什么用杜虎符作為封面?
邱俊濤:謝謝!這本書最早發(fā)表在ITeye上,事實(shí)上是先有一些草稿后才逐篇發(fā)表的,但是每一章在發(fā)表之前都很粗糙,在發(fā)表之前都會(huì)進(jìn)行很多的改動(dòng)(以免有明顯的錯(cuò)誤誤導(dǎo)初學(xué)者等),這樣事實(shí)上也是一種潛在的促進(jìn)。而幾乎每一篇都有大量的留言,也有很多關(guān)注,沒(méi)有這些讀者的支持,這本書可能根本無(wú)法堅(jiān)持到最后,在這里也鄭重的感謝一下ITeye這個(gè)平臺(tái)以及這個(gè)平臺(tái)上的那么多熱心讀者。
說(shuō)到困難,我覺(jué)得堅(jiān)持本身是最大的困難,如果留意一下這個(gè)系列發(fā)表時(shí)間表的話你可能會(huì)發(fā)現(xiàn),某些章節(jié)之間的跨度較大,而后來(lái)甚至有半年都沒(méi)有更新。一方面是由于部分內(nèi)容本身正在修改中,另一方面也是在糾結(jié)于繼續(xù)寫下去還是到此為止,很幸運(yùn)最后終于堅(jiān)持了下來(lái),這樣給自己的信心有很大的正面作用。也就是說(shuō),如果我寫第二本書的話,最終能夠?qū)懲甑母怕蕰?huì)增大一些。
另一個(gè)比較大的感受是:盡量將自己學(xué)習(xí)到的東西分享出去,一方面可以鍛煉總結(jié)能力和表達(dá)能力,另一方面,當(dāng)你可以很輕松的將一個(gè)復(fù)雜的技術(shù)描述清楚,并使得讀者/聽(tīng)眾也能明白的時(shí)候,那才是你真正掌握了該知識(shí)。在做到這點(diǎn)之前,需要查閱很多資料,也需要自己動(dòng)手去驗(yàn)證一些想法,但整個(gè)過(guò)程的收益會(huì)非常大。
虎符是古代用于調(diào)兵遣將的憑證,寓意JavaScript小巧但是功能強(qiáng)大。
本文為CSDN原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
CSDN:聽(tīng)說(shuō)你下個(gè)計(jì)劃是打算寫輕量級(jí)的Web應(yīng)用開發(fā)的一些編程實(shí)踐,為什么選擇寫這個(gè)方面的書?在這方面,能不能和大家提前分享一些特別有價(jià)值的內(nèi)容?
邱俊濤:在ThoughtWorks,我們?nèi)粘?梢越佑|到大量這方面的工作,比如后端的Sinatra、Haml模板引擎、DataMapper映射器和前端的JavaScript框架backbone.js等,這些小巧而輕量級(jí)的庫(kù)或者框架組合起來(lái)可以很好地完成Web應(yīng)用程序的搭建,而由于這個(gè)應(yīng)用程序的每個(gè)層都采用輕量級(jí)的庫(kù)或者框架,它們都更有優(yōu)化的余地,而如果有更好的框架,也可以更快速且容易地替換。
輕量級(jí)的另一個(gè)含義是開發(fā)過(guò)程的輕量化,比如很少的人,用很少的時(shí)間去完成一個(gè)Web應(yīng)用的開發(fā)。這個(gè)在之前是很難做到的,但是通過(guò)搭建持續(xù)集成環(huán)境,將測(cè)試自動(dòng)化等敏捷開發(fā)實(shí)踐,可以很容易地將開發(fā)過(guò)程輕量化。
工作后的成長(zhǎng):貴人幫助和良好的開發(fā)氛圍 讓我深刻理解軟件開發(fā)CSDN:在介紹中你特別提到Jinfoent的胡東先生給了你極大的幫助,為什么會(huì)著重提到他?這段經(jīng)歷中最讓你記憶深刻的事情是什么?
邱俊濤:胡東先生是一個(gè)有豐富軟硬件開發(fā)經(jīng)驗(yàn)的大師級(jí)程序員,同時(shí)他又非常的低調(diào)。他是一個(gè)UNIX的忠實(shí)擁躉,命令行控,這些相似點(diǎn)可能使得我更容易理解他的設(shè)計(jì)思路。
印象最深的是有一次,他讓我在業(yè)余時(shí)間做一個(gè)類似于網(wǎng)絡(luò)爬蟲的程序:給定一個(gè)URL指定的資源,然后建立網(wǎng)絡(luò)連接去下載這個(gè)資源,分析下載到的內(nèi)容中有沒(méi)有其他的URL,如果有的話,則派生出一些新的工作者線程,并發(fā)地去執(zhí)行上述的操作。我寫出了第一個(gè)版本,然后拿給他看。這個(gè)版本當(dāng)然很粗糙,而且大部分面向?qū)ο蟮母拍钸€都沒(méi)有建立,他就幫我一步步重構(gòu),我自己又重寫了一遍,然后又請(qǐng)他指導(dǎo),這樣重復(fù)了好幾次。經(jīng)過(guò)幾次的重構(gòu)之后,這個(gè)程序的結(jié)構(gòu)變得非常清晰,而且也很容易做進(jìn)一步的擴(kuò)展(事實(shí)上,后來(lái)我們又嘗試將它擴(kuò)展成一個(gè)基于RMI,可以分布在局域網(wǎng)絡(luò)內(nèi)的爬蟲程序)。這段經(jīng)歷對(duì)我的幫助很大,之前如口頭禪般的“繼承、封裝和多態(tài)”都變成了活生生的例子,甚至通過(guò)這個(gè)例子,也糾正了我之前對(duì)Java語(yǔ)言的一些誤解。我非常感激能在剛出校門就遇到這樣的一位編程大師,而且在傳授知識(shí)和經(jīng)驗(yàn)時(shí)他也非常地耐心和細(xì)心。
CSDN:你還表示在胡東先生的幫助下,你對(duì)面向?qū)ο缶幊�、設(shè)計(jì)模式、重構(gòu)和UNIX設(shè)計(jì)哲學(xué)等有了新的認(rèn)識(shí),能不能分享下相關(guān)心得?
邱俊濤:胡東先生是中國(guó)早期程序員中的一員,他在上學(xué)時(shí)甚至用過(guò)傳說(shuō)中的PDP-11(Unix的第一版就是運(yùn)行于其上)�?赡苁情L(zhǎng)期基于硬件編程的原因,他對(duì)面向?qū)ο缶幊痰睦斫飧钊胍恍寒吘�,拿在手里的硬件就是一個(gè)個(gè)的對(duì)象啊!
上邊提到的那個(gè)關(guān)于網(wǎng)絡(luò)爬蟲的例子中,我們?cè)谡{(diào)試的時(shí)候發(fā)現(xiàn)多個(gè)線程的打印往往會(huì)混在一起,因此需要一個(gè)同步的打印線程:所有的線程要打印的時(shí)候,都向一個(gè)加過(guò)鎖的隊(duì)列里放入需要打印的內(nèi)容,然后立即返回。當(dāng)我們最后寫出代碼來(lái)后,他才告訴我,這個(gè)是單例模式。另外比如網(wǎng)絡(luò)爬蟲需要向負(fù)責(zé)報(bào)告的線程發(fā)消息,而負(fù)責(zé)報(bào)告的線程要負(fù)責(zé)所有爬蟲線程的狀態(tài)收集,這樣需要一個(gè)注冊(cè)-監(jiān)聽(tīng)的機(jī)制,而當(dāng)代碼實(shí)現(xiàn)之后,他才教給我這個(gè)是觀察者模式。
如果事先知道模式,然后再去想方設(shè)法的把程序跟模式關(guān)聯(lián),這種生搬硬套的方式效率極低;而他則反其道而行之,通過(guò)一個(gè)活生生且可以運(yùn)行的例子告訴我應(yīng)用了什么模式,并促進(jìn)我舉一反三地掌握。
另外一個(gè)例子是,當(dāng)時(shí)我們?cè)谠O(shè)計(jì)產(chǎn)品中一個(gè)功能時(shí)發(fā)現(xiàn),當(dāng)頁(yè)面上相互關(guān)聯(lián)的組件非常多的時(shí)候,純粹用jQuery來(lái)關(guān)聯(lián)這些組件間的時(shí)間將會(huì)非常的繁復(fù),而且一旦需求改變(事實(shí)上需求一直在變),就需要重寫很多代碼。在午飯的時(shí)候,他向我描述了sub-pub這種模型,并向我演示了他之前用Java實(shí)現(xiàn)過(guò)的一個(gè)例子。然后我就花了兩三天時(shí)間將我們已有的代碼做了重構(gòu),使得這部分代碼基本符合MVC的模型:頁(yè)面上的組件完全由JavaScript繪制,而組件間的關(guān)系存放在一個(gè)對(duì)象上(model),然后頁(yè)面的基本布局來(lái)源于另一次請(qǐng)求得到的模板上(view),然后將自定義的事件響應(yīng)函數(shù)放在一個(gè)全局表中,組件之間要發(fā)生通信時(shí),只需要發(fā)起一個(gè)事件,并帶上足夠的信息即可。然后事件分發(fā)器會(huì)在全局表中查看注冊(cè)了響應(yīng)該事件的處理函數(shù),并依次執(zhí)行。
這個(gè)模型非常有用,特別是在處理UI事件相關(guān)的場(chǎng)景下。它也使我對(duì)這些抽象于語(yǔ)言之上的如設(shè)計(jì)模式和面向?qū)ο蟮乃枷氲犬a(chǎn)生了新的認(rèn)識(shí)。
CSDN:后來(lái)你進(jìn)入了ThoughtWorks公司,這是一家全家IT軟件公司,它幫助企業(yè)改善IT組織改進(jìn)軟件開發(fā)方法并對(duì)IT行業(yè)進(jìn)行革新,你作為其中一員,可以分享下你們的軟件開發(fā)方法以及日常實(shí)踐都是如何操作的?
邱俊濤:請(qǐng)容我鄭重介紹一下自己所在的這家公司:ThoughtWorks是一個(gè)追求公平、組織機(jī)構(gòu)很扁平的公司,其實(shí)她更像是一個(gè)大的開發(fā)者社區(qū)。這里匯集了非常多的對(duì)軟件卓越本身充滿激情的年輕人,我的同事們都非常熱情,非常有活力。我們很樂(lè)于為整個(gè)軟件社區(qū)做一些事情,通過(guò)卓越的軟件來(lái)把世界變得更美好一些,比如我們經(jīng)常組織的技術(shù)講座,讓更多的人參加到軟件行業(yè)中來(lái),來(lái)改善整個(gè)社區(qū)的現(xiàn)狀;比如我們參加的社會(huì)公益項(xiàng)目,改善貧困學(xué)生的學(xué)習(xí)條件等等,雖然每一步都可能微不足道,但是我們一直在努力嘗試。
關(guān)于一些常用的開發(fā)方式,和很多IT公司都有很大的差異。比如測(cè)試自動(dòng)化,結(jié)對(duì)編程,代碼評(píng)審等,這些實(shí)踐可以很好地提高軟件的質(zhì)量,也使得我們和客戶都對(duì)軟件更有信心。
CSDN:能不能談?wù)勀銓?duì)敏捷開發(fā)的一些認(rèn)識(shí)?你認(rèn)為在實(shí)際工作中如何做好敏捷開發(fā)?
邱俊濤:敏捷開發(fā)在本質(zhì)上來(lái)講是為了消除軟件開發(fā)過(guò)程中的種種浪費(fèi),而為了做到這一點(diǎn),敏捷開發(fā)包含許多行之有效的實(shí)踐,比如提倡高效的交流、短周期的迭代、定期做回顧會(huì)議、結(jié)對(duì)編程、代碼評(píng)審、測(cè)試驅(qū)動(dòng)開發(fā)、自動(dòng)化測(cè)試和持續(xù)集成等等。而這一系列的實(shí)踐內(nèi)容并非一成不變,我們?cè)诨仡檿?huì)議上會(huì)對(duì)近期所做的所有事情分析,并通過(guò)投票決定哪些應(yīng)該被保留,哪些應(yīng)該停止做下去,不斷地調(diào)整以求最大的消除浪費(fèi)。
比如我們發(fā)現(xiàn),短周期的迭代非常好:一方面它可以盡快的讓客戶看到產(chǎn)品的樣子,另一方面如果實(shí)現(xiàn)和需求有所偏差,我們可以及時(shí)做出調(diào)整,以避免更大的浪費(fèi)。又比如通過(guò)代碼評(píng)審,我們可以很容易的從團(tuán)隊(duì)中其他成員的反饋中看出,代碼的設(shè)計(jì)有沒(méi)有可以改進(jìn)的余地,或者設(shè)計(jì)對(duì)測(cè)試友好不友好等。這樣則可以提高代碼質(zhì)量,減少測(cè)試人員的工作量。
軟件開發(fā)界有一句很有名的話:“唯一不變的就是變化本身”,所以在實(shí)際工作中,可以嘗試一些敏捷開發(fā)的具體實(shí)踐,并根據(jù)實(shí)際情況迅速地做出調(diào)整,最后保留下來(lái)的就是那些既對(duì)團(tuán)隊(duì)自身有價(jià)值,并且也對(duì)客戶有價(jià)值的實(shí)踐。我認(rèn)為那些一成不變,或者認(rèn)為“只有這樣才是敏捷,那樣不是”的教條想法,都是絕不足取的。
本文為CSDN原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
JavaScript,初學(xué)者應(yīng)從Python、Ruby等高級(jí)語(yǔ)言開始
CSDN:有人稱JavaScript是一門比較簡(jiǎn)單的語(yǔ)言,但也有人稱JavaScript簡(jiǎn)單卻難以精通,對(duì)此你是怎么看的?
邱俊濤:就我自己經(jīng)驗(yàn)來(lái)看,JavaScript并沒(méi)有比其他語(yǔ)言更為簡(jiǎn)單,也沒(méi)有比其他語(yǔ)言更為艱深。但是JavaScript作為一門編程語(yǔ)言,的確有很多有趣的特性。比如它初看起來(lái)像是Java,但是細(xì)細(xì)深究,又可以感覺(jué)到它和函數(shù)式編程語(yǔ)言頗有淵源。而其動(dòng)態(tài)性和弱類型等特點(diǎn)相較于靜態(tài)語(yǔ)言又具有很高的靈活性,開發(fā)者可以用很精簡(jiǎn)的代碼來(lái)表示復(fù)雜的邏輯,特別是基于其函數(shù)式編程的特性,使得開發(fā)者可以使用一套構(gòu)建在原有語(yǔ)法其上的“新”語(yǔ)法來(lái)編寫程序。比如非常流行的JavaScript庫(kù)jQuery,從一定程度上jQuery是一個(gè)基于JavaScript的DSL(領(lǐng)域特定語(yǔ)言),在Web開發(fā)中,使用jQuery寫出的代碼非常具有表達(dá)力,而且看起來(lái)好像是為操作DOM元素而生的原生語(yǔ)言一樣。
CSDN:從入門、基礎(chǔ)學(xué)習(xí)、進(jìn)階學(xué)習(xí)到精通后拓展性學(xué)習(xí),你覺(jué)得該如何系統(tǒng)學(xué)習(xí)JavaScript?另外你還建議初學(xué)者應(yīng)從一些“高級(jí)”語(yǔ)言(Python、Ruby)開始學(xué)習(xí),這是為什么?
邱俊濤:編程是一門實(shí)踐的藝術(shù),需要不斷地練習(xí)。開始時(shí)可以找一些講解JavaScript的書籍或者視頻來(lái)學(xué)習(xí),然后不斷地練習(xí)這些知識(shí),并盡可能地在所有可能使用的場(chǎng)景下去使用,我覺(jué)得學(xué)習(xí)任何一門編程語(yǔ)言都可以采取這種模式。
對(duì)于初學(xué)者,我更建議他們從“高級(jí)”一些的語(yǔ)言如Python、Ruby等開始。這些語(yǔ)言的語(yǔ)法都比較簡(jiǎn)單,語(yǔ)言級(jí)別上會(huì)包含大量的庫(kù)(比如正則表達(dá)式,XML解析等),而且在很多地方將開發(fā)者和一些底層實(shí)現(xiàn)細(xì)節(jié)隔離了開來(lái)。這樣可以讓初學(xué)編程的人更加專注于問(wèn)題本身,從而更容易對(duì)編程本身產(chǎn)生興趣。而如果從一個(gè)靜態(tài),強(qiáng)類型語(yǔ)言入手,則需要學(xué)習(xí)很多于問(wèn)題本身無(wú)關(guān)的細(xì)節(jié),比如對(duì)內(nèi)存的管理,數(shù)據(jù)類型間的轉(zhuǎn)換,甚至基本數(shù)據(jù)類型的實(shí)現(xiàn)(比如鏈表,哈希表等)等等。
一旦興趣培養(yǎng)起來(lái)了,那么學(xué)習(xí)任何技術(shù)都會(huì)非�?欤視�(huì)使工作或者學(xué)習(xí)變得非常有意思。
CSDN:你日常是如何學(xué)習(xí)其他的新技術(shù)的?經(jīng)�?吹侥阍诓┛蜕戏窒碜约杭夹g(shù)文章以及學(xué)習(xí)經(jīng)驗(yàn),可不可以跟大家分享一下這方面的體會(huì),對(duì)于初學(xué)者又有什么建議?
邱俊濤:學(xué)習(xí)新技術(shù)的方法有很多,比如比較系統(tǒng)地去讀相關(guān)的書籍,文檔等;或者純粹的從實(shí)踐中學(xué)習(xí),通過(guò)一些具體的例子來(lái)學(xué)習(xí);或者將兩者結(jié)合起來(lái),讀一讀書,做一做練習(xí),如此交替。我自己通常是這樣的:對(duì)于偏重于實(shí)踐的,或者說(shuō)工作上比較緊急需要掌握的,我會(huì)通過(guò)不斷練習(xí)的方式盡快掌握:比如GIT的基本用法,如何用rspec寫測(cè)試等。而對(duì)于那些我自己感興趣,而我也認(rèn)為值得花很多時(shí)間去鉆研的,比如大數(shù)據(jù)的相關(guān)理論,人工智能中的一些有意思的算法等,我會(huì)找一些書籍來(lái)讀,并同時(shí)做一做練習(xí)。
在日常工作之余,我會(huì)閱讀很多博客及技術(shù)文檔,當(dāng)我對(duì)某些概念/技術(shù)有了了解之后,我會(huì)盡量用示例和簡(jiǎn)單的文字將這些問(wèn)題描述清楚,并分享出來(lái)。在準(zhǔn)備分享和分享的過(guò)程中,自己經(jīng)�?梢詫W(xué)到更多的相關(guān)知識(shí)。因?yàn)橐騽e人描述清楚一個(gè)概念,而又不想輸出一些低級(jí)錯(cuò)誤,那么自然會(huì)驅(qū)使你花費(fèi)更多的精力去研究,這樣可以使得自己對(duì)該概念掌握的更好。
高級(jí)JavaScript程序員,應(yīng)能編寫出有規(guī)模、模塊化良好和結(jié)構(gòu)清晰的代碼CSDN:閉包(Closure)可以說(shuō)是JavaScript的一個(gè)難點(diǎn),能夠熟練使用閉包也是邁向高級(jí)JavaScript程序員的必經(jīng)之路,你能不能和大家分享下閉包學(xué)習(xí)和平時(shí)應(yīng)用閉包的一些經(jīng)驗(yàn)和心得?
邱俊濤:對(duì)于JavaScript程序員來(lái)說(shuō),閉包是一個(gè)應(yīng)該掌握的知識(shí)點(diǎn)。的確,閉包的概念對(duì)于只有命令式編程背景的程序員來(lái)說(shuō),理解起來(lái)也需要花費(fèi)一些時(shí)間。但是對(duì)于有函數(shù)式編程經(jīng)歷的程序員來(lái)說(shuō),又顯得天經(jīng)地義。而且另外一個(gè)有意思的事實(shí)是:如果是在DOM中使用JavaScript的話,很可能大部分程序員都已經(jīng)在使用閉包而不自知。
我覺(jué)得閉包未必難學(xué),熟知JavaScript中的閉包概念也未必就成了高級(jí)JavaScript程序員。我今年年初讀了由李晶(拔赤)翻譯的《基于MVC的JavaScript Web富應(yīng)用開發(fā)》,覺(jué)得能做到書中所討論的那種編程方式,才可以算是高級(jí)的JavaScript程序員,也就是說(shuō),把JavaScript當(dāng)成其他的“主流”的編程語(yǔ)言,使用它來(lái)編寫有足夠規(guī)模、模塊化良好和結(jié)構(gòu)清晰的代碼,這才是最重要的,也才是界定一個(gè)JavaScript程序員是否“高級(jí)”的標(biāo)準(zhǔn)。
關(guān)于對(duì)閉包的學(xué)習(xí),由于我和很多人一樣,都是來(lái)自于命令式編程的世界,所以也學(xué)習(xí)了挺長(zhǎng)時(shí)間才理解,我建議大家可以嘗試一些函數(shù)式編程語(yǔ)言,比如Scheme,建立起一些對(duì)應(yīng)的概念之后再去看JavaScript中難以索解(比如詞法作用域和閉包)的概念,就會(huì)有豁然開朗的感覺(jué)。
CSDN:能和大家分析下常用的JavaScript框架?其中哪些是你經(jīng)常使用的?為什么?
邱俊濤:現(xiàn)在流行的前端框架非常多,如純粹用于搭建SPA(Single Page Application,單頁(yè)應(yīng)用)的框架就有很多種:AngularJS、Backbone.js、Ember.js和KnockoutJS等等,而用于測(cè)試的如QUnit.js(jQuery團(tuán)隊(duì)的測(cè)試框架)和jasmine.js(最流行的BDD測(cè)試框架)。還有很多的JavaScript的工具庫(kù),如jQuery、underscore.js等,這些都是前端開發(fā)應(yīng)該大致了解的工具。我經(jīng)常使用的有jQuery、backbone.js和jasmine.js�;镜倪x擇原則還是看一個(gè)框架/庫(kù)本身是否簡(jiǎn)潔,使用這些框架能否使代碼的結(jié)構(gòu)更為清晰,比如backbone.js強(qiáng)調(diào)的MVC,在一定程度上在強(qiáng)迫開發(fā)人員考慮將代碼分層(純前端的MVC)。這種略帶強(qiáng)迫的方式可以使得開發(fā)者寫出來(lái)的代碼更容易和其他人的代碼集成。
輕量級(jí)開發(fā),能讓開發(fā)者更清爽CSDN:很多框架如今早已顯得太過(guò)臃腫,內(nèi)置了太多復(fù)雜組件,你能不能分享一些更為輕量級(jí)的Web應(yīng)用程序開發(fā)方式?這種方式能給開發(fā)人員帶來(lái)哪些好處?
邱俊濤:如果在7,8年前,用Java開發(fā)一個(gè)Web應(yīng)用程序可能是一個(gè)好的選擇,特別是當(dāng)SSH(Spring + Struts 2 + Hibernate)黃金組合風(fēng)行天下的時(shí)候,緊接著的Ruby On Rails則可以快速而方便的生成一個(gè)可以工作的Web應(yīng)用程序。但是現(xiàn)在來(lái)看,這些框架都已經(jīng)顯得太過(guò)于臃腫,內(nèi)置了太多復(fù)雜的組件。
這種情況當(dāng)然是每個(gè)框架都無(wú)法逃脫的宿命,幾乎每個(gè)框架在誕生之初都是為了替換掉另一個(gè)老舊且臃腫的框架,在最初的幾個(gè)版本中,新出現(xiàn)的框架往往可以保持精簡(jiǎn)而清晰,而發(fā)展到最后,這些框架又都變得大而全,無(wú)所不包,然后又被其他更為輕量級(jí)的東西替代。我更想分享一些更為輕量級(jí)的開發(fā)方式,比如后端純粹提供RESTFul的API層,而使用前端框架如Backbone.js來(lái)搭建應(yīng)用程序,或者使用諸如sinatra之類的輕量級(jí)后端庫(kù),以及一些可以自由搭配的ORM框架(比如ActiveRecord或者DataMapper)和模板引擎。這些輕量級(jí)的開發(fā)方式使得開發(fā)人員更能把注意力集中在業(yè)務(wù)邏輯上,而且可以使得代碼更清晰、更容易維護(hù),也更容易測(cè)試。
CSDN:能不能和大家分享下你常用的開發(fā)工具列表(比如測(cè)試、調(diào)試、壓縮和HTTP監(jiān)控……)?另外能分析下開發(fā)工具:基于命令行的工具集和IDE孰優(yōu)孰劣?
邱俊濤:在ThoughtWorks,開發(fā)環(huán)境基本都是Mac OS操作系統(tǒng),這個(gè)系統(tǒng)對(duì)于開發(fā)者本身就非常友好(Mac OS本身就是基于UNIX的操作系統(tǒng)),Mac系統(tǒng)經(jīng)常為人詬病的是其中大部分軟件都是要收費(fèi)的,而且通常都比較昂貴,但是大部分用來(lái)開發(fā)的工具都是可以免費(fèi)獲得的。
我常用的用于提高開發(fā)效率的工具有這些:
對(duì)于開發(fā)工具的選擇上,我個(gè)人更傾向于基于命令行的工具集。相對(duì)于IDE,命令行工具更靈活,更快速。通常來(lái)講,IDE會(huì)將命令行的工作做一層包裝,提供圖形界面的設(shè)置,很大程度上提高了軟件的易用性。對(duì)于普通的計(jì)算機(jī)用戶來(lái)說(shuō),圖形界面提供了易用性,從而就“提高”了他們使用計(jì)算機(jī)的效率;但是對(duì)于開發(fā)人員,從某種程度上來(lái)說(shuō),易用性和使用效率是兩個(gè)不同的方面。另外,IDE封裝了背后的一些工作,理解點(diǎn)擊“運(yùn)行”按鈕之后發(fā)生了什么,對(duì)成為一個(gè)好的開發(fā)人員非常有用。
在剛開始使用命令行,學(xué)習(xí)曲線無(wú)疑會(huì)稍微陡峭一些,但是如果堅(jiān)持一段時(shí)間,并投入時(shí)間去練習(xí),必然可以得到數(shù)十倍的效率回報(bào)。
CSDN:調(diào)試代碼是程序員最常做也最耗時(shí)的工作,根據(jù)工作經(jīng)驗(yàn),你覺(jué)得有沒(méi)有什么調(diào)試技巧可言?另外在開發(fā)效率上是不是也有什么心得和大家分享?
邱俊濤:應(yīng)該說(shuō),在傳統(tǒng)的開發(fā)方式中,調(diào)試代碼是程序員常做也最耗時(shí)的工作。我在之前的公司也遇到了這種問(wèn)題,而對(duì)于調(diào)試本身,它應(yīng)該是程序員必須熟練掌握的一種技能,我并不認(rèn)為有一種方法可以使得調(diào)試更快速或者更有效率,這些只能來(lái)源于經(jīng)驗(yàn)和對(duì)代碼庫(kù)本身的熟悉程度(可能還依賴于編程語(yǔ)言和調(diào)試器本身)。但是我覺(jué)得可以通過(guò)其他的編程方式來(lái)減少調(diào)試本身。比如測(cè)試驅(qū)動(dòng)開發(fā)就是一種可能的方式,而后續(xù)的自動(dòng)化測(cè)試和持續(xù)集成(在軟件被做成一個(gè)可以發(fā)布的包之前,需要經(jīng)過(guò)所有已有測(cè)試的驗(yàn)證)可以將這種減少進(jìn)一步保持。有了測(cè)試的保證,程序員可以很有信心的對(duì)代碼進(jìn)行重構(gòu),使得原來(lái)復(fù)雜的邏輯變簡(jiǎn)單,而程序?qū)ν獠康男袨橛植粫?huì)受到影響。這樣一來(lái),軟件的質(zhì)量會(huì)得到很大的提升,調(diào)試的機(jī)會(huì)自然會(huì)降低。
當(dāng)然,不論什么樣的編程實(shí)踐,都無(wú)法絕對(duì)避免調(diào)試。除了一些常用的通用方法外,我覺(jué)得沒(méi)有什么捷徑可以遵循,對(duì)于不同的語(yǔ)言特性、不同的平臺(tái)特性、不同的應(yīng)用場(chǎng)景等,都需要很長(zhǎng)時(shí)間的積累,也就是說(shuō),,這項(xiàng)技能非常依賴于經(jīng)驗(yàn)。
CSDN:你是什么時(shí)候接觸ITeye和CSDN的?如今你還會(huì)經(jīng)常訪問(wèn)ITeye和CSDN嗎?在上面都會(huì)做些什么呢?
邱俊濤:我接觸CSDN大概在2006年左右,那時(shí)候經(jīng)常去看別人的博客,而在畢業(yè)后,自己工作的主要內(nèi)容是Java后,才知道了ITeye,那已經(jīng)是2008年(當(dāng)時(shí)還叫JavaEye)。后來(lái)由于有了自己的博客,我訪問(wèn)ITeye和CSDN的機(jī)會(huì)就不那么多了,但是偶爾也會(huì)去看看,比如看一些IT新聞,語(yǔ)言的,或者關(guān)于某個(gè)框架的討論等。
ITeye和CSDNCSDN:你離開ITeye博客已有一段時(shí)間了,能不能談下當(dāng)初為什么將自己博客遷走?因此,你對(duì)ITeye和CSDN有什么建議嗎?
邱俊濤:首先要說(shuō)的是,ITeye是一個(gè)非常好的技術(shù)平臺(tái),甚至有一些看似“嚴(yán)厲”的防止“灌水”的規(guī)定,還有很好的投票/投訴系統(tǒng),這些可能會(huì)降低一些便利性,但是從長(zhǎng)遠(yuǎn)來(lái)看,可以很好地保證博客或者論壇帖子的質(zhì)量。我當(dāng)時(shí)要遷移一方面是由于ITeye的博客還不支持模板(或許有,但是我沒(méi)有找到),我無(wú)法定制自己的頁(yè)面,另一個(gè)原因是我想要一個(gè)更有意思的域名。
CSDN是最大的中文開發(fā)者社區(qū),也有非常多的技術(shù)牛人都將博客搭建在其上,我印象中的CSDN的頁(yè)面的風(fēng)格有些老舊,但是對(duì)于最近的改版讓我覺(jué)得非常震撼,現(xiàn)在頁(yè)面總體已經(jīng)做得非常漂亮,設(shè)計(jì)也顯得非常的“現(xiàn)代”,另外聽(tīng)說(shuō)最近博客部分也在逐步完善,希望可以做得更好,更容易定制化。(文/張勇 責(zé)編/魏兵)
若想獲悉邱俊濤更多動(dòng)態(tài),請(qǐng)關(guān)注:個(gè)人博客:請(qǐng)點(diǎn)此進(jìn)入 個(gè)人微博:請(qǐng)點(diǎn)此進(jìn)入
社區(qū)之星訪談系列文章專訪許雪松:深入理解嵌入式開發(fā)
專訪雷果國(guó):從1.5K到18K 一個(gè)程序員的5年成長(zhǎng)之路
更多精彩內(nèi)容,請(qǐng)點(diǎn)擊社區(qū)之星查看。
本文為CSDN原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
本文關(guān)鍵詞:JavaScript核心概念及實(shí)踐,由筆耕文化傳播整理發(fā)布。
本文編號(hào):181582
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/181582.html