「 代碼 」對(duì)于我來(lái)說(shuō),如同「 設(shè)計(jì) 」一樣,都是為了「 創(chuàng)造 」 出某種產(chǎn)品的一種手段。
作為設(shè)計(jì)師,與開發(fā)打交道,難免會(huì)有種 ” 巧婦難為無(wú)米之炊 “ 的感覺(jué);
而程序員,當(dāng)自己開發(fā)了某個(gè)工具之后,為了追求更好的體驗(yàn),苦于不懂「 設(shè)計(jì) 」,也很難更上一層樓。
寫代碼重要嗎?
“代碼只服雷軍”,雷軍在小米之前,做了10年程序員。
據(jù)網(wǎng)友爆料,京東劉強(qiáng)東在一次講座上,稱自己大三(1995年)的時(shí)候,他給別人寫代碼,一個(gè)晚上就能賺5萬(wàn)。
設(shè)計(jì)師應(yīng)該會(huì)寫代碼嗎?
設(shè)計(jì)工具的演進(jìn),從Sketch 、 Pixate, 再到 Framer,設(shè)計(jì)師的工具,越來(lái)越簡(jiǎn)單有效地通過(guò)原型表現(xiàn)創(chuàng)意。
設(shè)計(jì)工具引入代碼
Framer是一款結(jié)合代碼與可視化實(shí)現(xiàn)的交互設(shè)計(jì)工具,因?yàn)橥ㄟ^(guò)代碼,可以完全控制交互效果,設(shè)計(jì)師不僅停留在畫圖的層面,更多的可以關(guān)注到實(shí)現(xiàn)的真實(shí)效果。
寫代碼難嗎?
一位朋友,在咨詢了我一陣子后,開始學(xué)習(xí) Python ,但是在堅(jiān)持了2個(gè)月的時(shí)候,他逐漸減少學(xué)習(xí)時(shí)間,并最終放棄了。因?yàn)?,他覺(jué)得代碼要學(xué)習(xí)的知識(shí)太龐大了,不知如何入手,一旦有新問(wèn)題解決不了學(xué)習(xí)進(jìn)度就卡在那里,從而越學(xué)越覺(jué)得難。
知識(shí)量龐大,問(wèn)題不斷
其實(shí)寫代碼,入門并不難
因?yàn)檫€有積木式編程語(yǔ)言:Scratch
不管是成年人,還是青少年,通過(guò)Scratch可以快速得掌握編程的核心思想。但核心思想是什么?往往被許多人所忽略。?
學(xué)習(xí)編程,應(yīng)該掌握其運(yùn)行的邏輯,試試回答以下幾個(gè)問(wèn)題:
1 我們是如何通過(guò)一個(gè)個(gè)的指令給計(jì)算機(jī)安排任務(wù)的?
2 計(jì)算機(jī)如何按照我們設(shè)定的條件,執(zhí)行任務(wù)?
3 計(jì)算機(jī)是如何執(zhí)行重復(fù)執(zhí)行任務(wù)的?
4 計(jì)算機(jī)完成任務(wù)的時(shí)候,是如何反饋給我們的?
代碼最難的是邏輯
引一位Oracle程序員在Hacker News上吐槽自己的工作的討論。這個(gè)工程師的核心痛點(diǎn)是,Oracle經(jīng)歷長(zhǎng)期的產(chǎn)品線迭代,代碼異常龐大、邏輯復(fù)雜。每新增一個(gè)特性或者修復(fù)BUG,該工程師都需要大量的調(diào)試,小心謹(jǐn)慎的進(jìn)行著日常的工作。而Oracle每次的版本發(fā)布都經(jīng)歷數(shù)百萬(wàn)次的測(cè)試,工作量可想而知。
學(xué)習(xí)代碼也是有方法
一般的初學(xué)者是這2類:
零基礎(chǔ),指的是對(duì)代碼一點(diǎn)了解,或者曾經(jīng)看過(guò)一點(diǎn)點(diǎn),沒(méi)有系統(tǒng)了解過(guò)編程語(yǔ)言的。
入門級(jí),會(huì)一門編程語(yǔ)言,會(huì)寫一點(diǎn)點(diǎn)代碼,但是無(wú)法自己完成一個(gè)項(xiàng)目從0到1構(gòu)建的。
以下是給初學(xué)者如何學(xué)習(xí)代碼的指南。
01
最小項(xiàng)目實(shí)踐+系統(tǒng)地刻意練習(xí)
如果是零基礎(chǔ),建議先學(xué)一門語(yǔ)言,一步步來(lái),按章節(jié)進(jìn)行,同時(shí),適當(dāng)增加實(shí)踐項(xiàng)目的練習(xí),比如DIY一個(gè)以圖搜圖引擎等類似的項(xiàng)目。
當(dāng)你學(xué)完這一階段的入門,不再是0基礎(chǔ)之后,就可以嘗試了解各種語(yǔ)言的環(huán)境安裝、最小可運(yùn)行代碼集,以及各種開發(fā)工具,嘗試各種好玩、復(fù)雜的項(xiàng)目了~
02
最小可運(yùn)行的代碼集
主要通過(guò)看示例,包括作者提供的示例代碼,網(wǎng)上文章提供的示例代碼等;舉一個(gè)turicreate的以圖搜圖代碼示例:
03
理解功能
get到思想就好,理解代碼里的每一句的含義,真實(shí)的行為,就跟讀書一樣,知道作者的核心思想是什么;
比如下面這3句,第1句是初始化一個(gè)類,該類可以提取圖片的特征向量,第2句是通過(guò)文件路徑打開圖片,第3句是從圖片提取特征向量。
04
關(guān)注輸入、輸出的數(shù)據(jù)結(jié)構(gòu)
輸入的是字符串,還是一個(gè)列表,還是一個(gè)字典?輸出的是什么也非常重要,比如輸出的時(shí)候,有None的可能,那下一段代碼對(duì)此輸出結(jié)果引用的時(shí)候,就要注意啦。
如果輸入_idea為"",輸出為None,這個(gè)時(shí)候?qū)懘a的時(shí)候就要留意輸入跟輸出的各種可能。
05
即搜即用
當(dāng)你掌握以上技巧的時(shí)候,就會(huì)發(fā)現(xiàn)沒(méi)必要從頭到尾全部一口氣把代碼全部學(xué)完,需要的時(shí)候再快速翻閱文檔,通過(guò)示例、輸入輸出、理解功能這三個(gè)點(diǎn),就可以現(xiàn)學(xué)現(xiàn)用啦。
06
優(yōu)雅的代碼
對(duì)于初學(xué)者來(lái)說(shuō),需要關(guān)注如何書寫優(yōu)雅的代碼,主要表現(xiàn)在:
代碼所在位置恰當(dāng);
有適當(dāng)?shù)淖⑨專?/span>
適當(dāng)?shù)目s進(jìn)和空行;
以及沒(méi)有重復(fù)代碼……
這里面的內(nèi)功修養(yǎng),離不開設(shè)計(jì)模式和代碼重構(gòu),還要有非常多的實(shí)踐與刻意練習(xí)。這幾本書都可以抽空讀一讀:
《Head First設(shè)計(jì)模式》
《重構(gòu)》
《Clean Code》
以上為全文。
寫代碼是基本功,鍛煉的是邏輯思維能力,跟解決問(wèn)題的能力。
在不久的未來(lái),寫代碼也是可以機(jī)器完成的,不知大家關(guān)注過(guò)這項(xiàng)研究嗎?
pix2code 等論文提出了一個(gè)強(qiáng)大的前端代碼生成模型,解釋了如何利用 LSTM 與 CNN 將設(shè)計(jì)原型轉(zhuǎn)化為 HTML 和 CSS 網(wǎng)站。
人工智能寫代碼,未來(lái)可期;
學(xué)習(xí)代碼,我們應(yīng)該更多地關(guān)注背后的邏輯思維能力。
歡迎在MixLab討論相關(guān)內(nèi)容、技術(shù)實(shí)現(xiàn),
聯(lián)系客服