偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

十年編程經(jīng)驗(yàn)總結(jié),三點(diǎn)技巧幫你提升代碼能力!

開(kāi)發(fā) 前端
大家好,今天和大家聊一個(gè)老生常談的的話題,作為程序員,我們?cè)趺刺嵘覀兊拇a能力?

[[352783]]

大家好,今天和大家聊一個(gè)老生常談的的話題,作為程序員,我們?cè)趺刺嵘覀兊拇a能力?

在回答這個(gè)問(wèn)題之前,我們需要先給代碼能力下一個(gè)定義,搞清楚究竟什么是代碼能力。只有找對(duì)了路才方便發(fā)力,很多同學(xué)對(duì)這個(gè)問(wèn)題其實(shí)是不夠清楚的。往往會(huì)覺(jué)得代碼能力就是算法能力,就是去刷LeetCode或者是算法題。還有些同學(xué)覺(jué)得代碼能力就是要多刷項(xiàng)目,項(xiàng)目做得多了,代碼能力自然就上來(lái)了。

其實(shí)這兩種看法我個(gè)人感覺(jué)都是有一點(diǎn)誤區(qū)的,下面簡(jiǎn)單聊聊我自己的看法,希望能夠幫助到大家。

語(yǔ)言基礎(chǔ)

很多人看到這里估計(jì)要吐槽了,這不是廢話么,程序員寫代碼語(yǔ)言沒(méi)學(xué)會(huì)還怎么寫代碼?

其實(shí)還真不是廢話,不同的語(yǔ)言有不同的特性,甚至有不同的原理,如果沒(méi)有對(duì)語(yǔ)言基礎(chǔ)有比較扎實(shí)的掌握,很容易犯一些低級(jí)錯(cuò)誤。

舉個(gè)簡(jiǎn)單的例子好了,之前認(rèn)識(shí)的一個(gè)實(shí)習(xí)生,有一次寫了這么一段Python代碼,大家不妨看看有什么問(wèn)題。

  1. def funcA(param): 
  2.     if param is not None: 
  3.      return funcB(param) 
  4.     return None 
  5.  
  6.  
  7. def funcB(param): 
  8.     pass 

不知道有多少同學(xué)能夠看出問(wèn)題在哪里,有一些同學(xué)可能會(huì)覺(jué)得是is not None的判斷不對(duì),應(yīng)該寫成not is None。其實(shí)問(wèn)題不在這里,is not None才是標(biāo)準(zhǔn)判斷的寫法,只是這個(gè)問(wèn)題當(dāng)中的障眼法。真正的問(wèn)題是在函數(shù)調(diào)用的部分,他把funcB寫在了funcA的后面。

funcB寫在后面有什么問(wèn)題?

大家試一下就會(huì)知道,這樣寫Python解釋器是會(huì)報(bào)錯(cuò)的,我們必須要把funcB寫在funcA的前面。因?yàn)镻ython不是編譯型語(yǔ)言是解釋型語(yǔ)言,它是由解釋器逐行執(zhí)行的。所以它會(huì)先執(zhí)行funcA再執(zhí)行funcB,當(dāng)它執(zhí)行funcA的時(shí)候會(huì)發(fā)現(xiàn)funcB這個(gè)函數(shù)沒(méi)有出現(xiàn)過(guò),所以會(huì)拋出錯(cuò)誤。

當(dāng)時(shí)這位同學(xué)debug了半天也沒(méi)有找到問(wèn)題所在,甚至還一度以為是Python版本的問(wèn)題。這其實(shí)不是他代碼能力不行,而是對(duì)語(yǔ)言基礎(chǔ)掌握不夠扎實(shí)。

類似的例子非常多,因?yàn)槊恳婚T語(yǔ)言往往擁有大量自己的特性,如果我們對(duì)某一門的語(yǔ)言只是淺嘗輒止,那么寫出來(lái)的代碼一定是非常不規(guī)范的。比如Java如果不知道抽象類,Python不知道可變參數(shù)、裝飾器的話,很多時(shí)候?qū)懗鰜?lái)的代碼看起來(lái)就是不舒服的,因?yàn)闆](méi)有做到最簡(jiǎn),會(huì)給人一種費(fèi)了很大勁實(shí)現(xiàn)了一個(gè)很基礎(chǔ)的功能的感覺(jué)。

所以語(yǔ)言基礎(chǔ)也是代碼能力的基礎(chǔ),大家不要看不起這個(gè),覺(jué)得只要會(huì)基本的語(yǔ)法會(huì)寫就可以了。其實(shí)這是大錯(cuò)特錯(cuò)的,一些特性和語(yǔ)法糖可能用得少,但是關(guān)鍵時(shí)候用起來(lái)是可以大大簡(jiǎn)化代碼量以及增加代碼可讀性的。

代碼規(guī)范

不知道大家有沒(méi)有讀過(guò)那些特別不規(guī)范的代碼,我讀過(guò)一些,真的是感覺(jué)眼睛被針扎了一樣。

代碼規(guī)范其實(shí)更多的不是能力,而是工程師自己的素養(yǎng)。素養(yǎng)高的工程師會(huì)自己主動(dòng)了解當(dāng)前這門語(yǔ)言的編碼規(guī)范,絕不會(huì)怎么舒服怎么來(lái)。大家可以百度一下代碼規(guī)范,每一門語(yǔ)言基本上都有自己的代碼規(guī)范,而且這個(gè)規(guī)范是非常細(xì)致的,具體到變量名、類名、方法名、文件名、常量名怎么命名都有對(duì)應(yīng)的規(guī)范。

不僅如此,還對(duì)一些特殊情況也做了限制,下面是我從Google的Java編碼規(guī)范當(dāng)中截取的一段,大家可以看下:

我們寫出來(lái)的代碼和這份規(guī)范越貼合,那么可讀性也就越強(qiáng),也就體現(xiàn)我們編碼的素養(yǎng)越高。

代碼規(guī)范其實(shí)并不僅僅包含編碼的方面,同樣還包含其他很多領(lǐng)域。比如數(shù)據(jù)庫(kù)的連接池的使用,比如kafka的設(shè)置和使用,以及多線程的使用等等,都會(huì)有自己的規(guī)范。這些內(nèi)容不僅是起到一個(gè)規(guī)范作用,當(dāng)中的每一個(gè)點(diǎn)里面都是有對(duì)應(yīng)的原理的,值得我們?nèi)ド钔趯W(xué)習(xí)。

比如很多人都知道數(shù)據(jù)庫(kù)需要用數(shù)據(jù)庫(kù)連接池,那么請(qǐng)問(wèn)為什么要用連接池呢?連接池的連接數(shù)又是怎么設(shè)置呢?其中的原理是什么呢?

看起來(lái)好像是面試題,但其中包含的就是我們對(duì)數(shù)據(jù)庫(kù)連接底層的理解。我們弄懂了可能不僅在編碼的時(shí)候用得到,也許在以后學(xué)習(xí)其他內(nèi)容的時(shí)候也能串聯(lián)起來(lái)。知識(shí)不是由許多點(diǎn)組成的,知識(shí)是一張網(wǎng),需要把很多點(diǎn)串聯(lián)起來(lái)。在我們串聯(lián)之前,我們首先需要足夠多的積累。

系統(tǒng)能力

系統(tǒng)能力是代碼能力當(dāng)中最高的要求,也是最貼合一個(gè)架構(gòu)師能力的部分。

同樣,我們來(lái)舉個(gè)例子。比如你承接了團(tuán)隊(duì)當(dāng)中的一個(gè)任務(wù),開(kāi)發(fā)一個(gè)新的系統(tǒng)。這個(gè)系統(tǒng)需要承接每秒100K請(qǐng)求的訪問(wèn)。這些請(qǐng)求的數(shù)據(jù)我們不是全部都要,需要做一定的抽樣,并且還需要查詢一些存儲(chǔ)系統(tǒng)進(jìn)行特征填充。最后把完整的數(shù)據(jù)存儲(chǔ)下來(lái)。

現(xiàn)在這個(gè)任務(wù)交給了你,請(qǐng)問(wèn),這當(dāng)中的性能瓶頸是什么?你該怎么設(shè)計(jì)這個(gè)系統(tǒng)當(dāng)中的細(xì)節(jié)?

估計(jì)很多同學(xué)會(huì)把眼光放在100K這個(gè)數(shù)字上,覺(jué)得這個(gè)請(qǐng)求量非常大,可能系統(tǒng)能不能抗住是最大的風(fēng)險(xiǎn)點(diǎn)。但其實(shí)100K并不是重點(diǎn),因?yàn)檫@些請(qǐng)求不需要返回,只是單純的接收,100K并不是非常大。但是當(dāng)中有許多隱藏的問(wèn)題,比如說(shuō)我們抽樣怎么抽,是在線抽,還是先把所有請(qǐng)求存儲(chǔ)起來(lái)一段時(shí)間之后再進(jìn)行抽樣?如果是存儲(chǔ)起來(lái)再抽樣,會(huì)不會(huì)內(nèi)存扛不住?再比如我們會(huì)對(duì)存儲(chǔ)系統(tǒng)發(fā)起的查詢請(qǐng)求是什么量級(jí)?會(huì)不會(huì)影響存儲(chǔ)系統(tǒng)?

實(shí)際上后來(lái)實(shí)踐的過(guò)程果然發(fā)生了存儲(chǔ)系統(tǒng)扛不住,導(dǎo)致抖動(dòng)很厲害的情況。那這個(gè)問(wèn)題發(fā)生了之后,我們又該怎么解決?

對(duì)這些問(wèn)題的敏感、理解以及解決,需要的就是系統(tǒng)能力。也就是我們理解系統(tǒng)的能力,這當(dāng)中涉及很多,需要我們有一定的操作系統(tǒng)的知識(shí)、分布式的知識(shí),還需要對(duì)上下游的系統(tǒng)都有一定的了解。比如知道存儲(chǔ)系統(tǒng)的性能不是很好,大批量的請(qǐng)求可能扛不住。這當(dāng)中有一些是經(jīng)驗(yàn),更多的還是我們的基礎(chǔ)能力。

提升之道

其實(shí)這三點(diǎn)看完,相信大家對(duì)于怎么提升應(yīng)該都或多或少地有了一些自己的想法。

說(shuō)穿了也沒(méi)有什么大不了的,無(wú)非是三點(diǎn),我們來(lái)做個(gè)簡(jiǎn)單的總結(jié)。

  1. 需要夯實(shí)語(yǔ)言基礎(chǔ),對(duì)于學(xué)習(xí)的語(yǔ)言不能淺嘗輒止,需要有比較深刻的理解。當(dāng)然這一點(diǎn)也不是說(shuō)說(shuō)而已,肯定需要針對(duì)性的做很多練習(xí),也需要閱讀其他大牛的代碼進(jìn)行學(xué)習(xí)。
  2. 需要遵守代碼規(guī)范,不僅僅是變量的命名、一些特殊case的處理,還需要理解一些場(chǎng)景下的系統(tǒng)使用規(guī)范
  3. 需要充分理解系統(tǒng),對(duì)每一個(gè)環(huán)節(jié)仔細(xì)推敲,需要積累一些操作系統(tǒng)、分布式的知識(shí)點(diǎn)和技能點(diǎn)。

從這三點(diǎn)總結(jié)來(lái)看,好像沒(méi)什么大不了的,每個(gè)人都能很輕易做到的樣子。但實(shí)際情況告訴我們,往往越是簡(jiǎn)單的道理,越是難以做到,希望大家不要輕視了它們。

本文轉(zhuǎn)載自微信公眾號(hào)「TechFlow」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系TechFlow公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: TechFlow
相關(guān)推薦

2018-11-14 10:32:24

互聯(lián)網(wǎng)

2013-07-11 14:41:16

編程經(jīng)驗(yàn)

2016-11-17 14:54:49

云計(jì)算安全性可用性

2009-11-17 11:24:00

PHP應(yīng)用技巧

2015-06-23 15:07:53

2009-12-31 10:21:53

Silverlight

2019-09-05 10:23:34

運(yùn)維監(jiān)控技術(shù)

2019-10-17 10:15:04

運(yùn)維監(jiān)控報(bào)警

2009-10-28 17:04:20

linux快速啟動(dòng)

2010-06-17 13:12:38

UML用例建模技巧

2010-07-09 13:38:07

UML用例建模

2009-10-15 09:27:00

2015-03-10 14:28:46

程序員編程知識(shí)經(jīng)驗(yàn)總結(jié)

2010-01-25 13:37:07

Android傳感器

2010-04-21 12:49:57

Oracle性能

2019-01-14 08:52:25

開(kāi)發(fā)經(jīng)驗(yàn)瀏覽器

2009-11-16 10:57:51

PHP上傳文件代碼

2018-06-07 09:29:34

數(shù)據(jù)庫(kù)MySQL慢SQL

2016-02-29 09:27:49

用戶體驗(yàn)阿里技巧

2009-09-16 17:13:54

學(xué)習(xí)Linq
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)