從編程小白到自由職業(yè)者,如何在一個(gè)月之內(nèi)做到?
本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)
2011年的時(shí)候,我本科剛剛畢業(yè),對未來充滿迷?!,F(xiàn)在看來,我18歲所選擇的專業(yè)似乎并非明智之選。在我們這里,即便拿到的是工學(xué)學(xué)位,或許還是要在為數(shù)不多的幾家電子通信公司中選擇一家做辦公室工作。這與我高中畢業(yè)時(shí)所憧憬的未來大相徑庭。
不過,現(xiàn)在我很幸運(yùn),接觸了編程這項(xiàng)工作,我決定利用突然擁有的大把閑余時(shí)間來創(chuàng)建網(wǎng)站。從建網(wǎng)站到找到我自由職業(yè)道路上的第一個(gè)客戶歷時(shí)一個(gè)月,對很多人來說,這個(gè)速度似乎快到不可思議。在本文中,我將講述我的故事。
學(xué)習(xí)內(nèi)容
這是一個(gè)在知名科技公司中飽受爭議的問題,有的公司重視特定框架模式的學(xué)習(xí),有的則注重專業(yè)書籍的閱讀,大多數(shù)公司會要求你購買他們的產(chǎn)品,包括無論是網(wǎng)課、在線輔導(dǎo)還是電子書,并且給出的建議種類多到離譜。
簡單來說,要把自己看作一名新手全棧工程師,你需要掌握的基礎(chǔ)如下:
- HTML
- CSS
- Javascript
- 后端語言
- 數(shù)據(jù)庫
就是這樣,按照這個(gè)順序。每個(gè)領(lǐng)域都可以學(xué)習(xí)很多年,卻依然難以達(dá)到真正精通的水平。那么到底如何能夠通過一個(gè)月的初步學(xué)習(xí)找到工作呢?答案便是,你需要恰到好處地學(xué)習(xí)每一種技能。
學(xué)到什么程度?
接下來我要講講,在找到工作之前,每個(gè)技能具體需要花多長時(shí)間,以及每個(gè)領(lǐng)域需要側(cè)重的內(nèi)容有哪些。請牢記兩件事:
- 當(dāng)時(shí)我沒有工作,每天至少可以拿出5到6個(gè)小時(shí)學(xué)習(xí)。
- 找到工作后不但依然要堅(jiān)持學(xué)習(xí),還要加大學(xué)習(xí)強(qiáng)度。
HTML
研究HTML,我只花了一整天,原因有兩點(diǎn):
- HTML簡單易學(xué)。
- 我發(fā)現(xiàn)在后期的學(xué)習(xí)中無論如何都會用到HTML。
CSS
我花了3天時(shí)間試用了CSS,體會其如何應(yīng)用于不同的HTML元素。其中關(guān)鍵環(huán)節(jié)是理解不同的定位和對齊方式。像色彩和字體等純審美問題很好理解,如果需要,還可以學(xué)習(xí)更復(fù)雜的內(nèi)容。
Javascript
我花了差不多一周時(shí)間學(xué)習(xí)和練習(xí)Javascript的基礎(chǔ)知識,關(guān)鍵在于理解其循環(huán)、條件、功能、基本語法、瀏覽器控制臺使用方法、客戶機(jī)和服務(wù)器的分工,以及把請求發(fā)至服務(wù)器(AJAX)的方法等。
后端語言
我學(xué)的第一門后端語言是PHP,后端語言的選擇因人而異,但我的建議是從一門主流語言入手,因?yàn)楹芏喙ぷ鞫伎梢杂玫?,網(wǎng)上資料也有很多。PHP、Python和Ruby都是比較熱門的選擇,Node.js后來也有很多用戶,但是我不建議用作后端語言的入門之選,原因有兩點(diǎn):
- Node.js使用Javascript語法,所以無法體會到學(xué)習(xí)第二門語言的好處。
- Node.js使用異步比較多,對于初學(xué)者來說非常不友好。
在學(xué)習(xí)新語言的時(shí)候,又要從基礎(chǔ)的語法、循環(huán)、最佳實(shí)踐開始?,F(xiàn)在,你可以花幾天的時(shí)間讀一讀通用軟件開發(fā)最佳實(shí)踐和面向?qū)ο蟮某绦蛟O(shè)計(jì),然后嘗試用你選擇的后端語言實(shí)踐你所學(xué)到的概念。
之后,通過開發(fā)應(yīng)用來建立前端與后端的聯(lián)系,在該應(yīng)用中,由Javascript把要求發(fā)給后端,后端給予回應(yīng)后,Javascript通過操作網(wǎng)頁和展示發(fā)回的數(shù)據(jù)等處理回應(yīng)。
我大概用了兩周的時(shí)間學(xué)習(xí)這部分內(nèi)容。
數(shù)據(jù)庫
數(shù)據(jù)儲存和數(shù)據(jù)恢復(fù)都需要數(shù)據(jù)庫,我選擇的是現(xiàn)在最常用的數(shù)據(jù)庫MySQL,數(shù)據(jù)庫的選擇也因人而異,但我建議選擇關(guān)系型數(shù)據(jù)庫。
你需要了解一些基礎(chǔ)知識:可以存在數(shù)據(jù)庫里的數(shù)據(jù)類型有哪些,如何進(jìn)行數(shù)據(jù)讀寫、更新和刪除等。接下來,需要了解如何使用數(shù)據(jù)表索引以及數(shù)據(jù)表之間的關(guān)系,一定要理解聯(lián)合查詢的概念,但目前還不需要過分糾結(jié)。這些基礎(chǔ)知識在任何新手教程中都可以找到。
理解了數(shù)據(jù)庫基礎(chǔ)知識之后,要將其融會貫通:用數(shù)據(jù)庫建立一個(gè)小網(wǎng)站,用戶可以注冊,與服務(wù)器溝通,把數(shù)據(jù)存在數(shù)據(jù)庫里,之后將其恢復(fù)。這個(gè)軟件功能是什么不重要,重要的是把目前積累的所有知識點(diǎn)都應(yīng)用起來。
最后這個(gè)階段我花了大約一周時(shí)間。
前車之鑒,后車之師
在開始講我是如何找到工作之前,我想要花點(diǎn)時(shí)間告訴大家,如果重新來過,我會做出哪些改變。對初學(xué)者而言,抓住重點(diǎn)并非易事,下面就列舉一些當(dāng)時(shí)我誤認(rèn)為沒有那么重要的事情。
好用的代碼編輯器乃得力助手
我第一次寫代碼用的是Notepad,當(dāng)時(shí)我覺得,使用一個(gè)看起來高大上的編輯器除了美觀以外并沒有太大用處,這個(gè)想法大錯(cuò)特錯(cuò)。
好用的編輯器可以實(shí)現(xiàn)適當(dāng)?shù)淖詣涌s進(jìn)格式,在學(xué)習(xí)循環(huán)、條件和語法時(shí)很有幫助。此外,還可以給不同語言下的代碼設(shè)置不同顏色,并發(fā)出語法錯(cuò)誤的警告。對于難免會犯一些簡單錯(cuò)誤的初學(xué)者來說,這兩個(gè)特點(diǎn)非常關(guān)鍵。這會幫助你找到錯(cuò)誤,了解不同的數(shù)據(jù)類型和變量范圍等。
一個(gè)好用的編輯器還有許多其他優(yōu)點(diǎn),但是上述優(yōu)點(diǎn)足夠讓初學(xué)者動心了。目前有很多免費(fèi)編輯器,Sublime就是不錯(cuò)之選。
設(shè)置一個(gè)域名
在大多數(shù)機(jī)器上建立基礎(chǔ)的開發(fā)環(huán)境并非難事,但是,你也應(yīng)該立即建立可以上傳個(gè)人作品的公共域名。其重要性不容忽視,原因有三點(diǎn):
- 可以學(xué)到關(guān)于托管公司和域名注冊工作的基本知識。
- 可以學(xué)到如何使用FTP和SSH與遠(yuǎn)程服務(wù)器通信。
- 有了客戶之后,你需要以某種方式向他們展示作品,如果你有公共域名,就可以給項(xiàng)目創(chuàng)建一個(gè)測試環(huán)境,并將其連接到客戶。
理解git系統(tǒng)
在初學(xué)階段,我完全跳過了對于git的學(xué)習(xí)。在之后的一個(gè)項(xiàng)目中,git的出現(xiàn)讓我猝不及防,我不得不花上幾個(gè)晚上弄懂它。
這里有些基本步驟避免大家重蹈覆轍:給測試項(xiàng)目創(chuàng)建一個(gè)git repo,學(xué)習(xí)各個(gè)分支的工作原理,了解拉取請求、合并和獲取的相關(guān)知識。一開始,弄清楚這些應(yīng)該就足夠了。
不要忽視移動性能
在我還是計(jì)算機(jī)小白的時(shí)候,移動瀏覽器雖然還不像現(xiàn)在一樣普及,但是其發(fā)展已成定勢,如果當(dāng)時(shí)更重視CSS響應(yīng)式,將會是明智的選擇。在今天看來,移動性能無疑至關(guān)重要?,F(xiàn)在,大部分網(wǎng)站流量都是移動流量,無論創(chuàng)建什么都需考慮到屏幕大小。
找到工作
開始找工作時(shí),我在一些自由職業(yè)平臺上注冊了賬戶,在這個(gè)階段我嘗試了不同的方法。過了大概一年,我發(fā)現(xiàn)了Upwork網(wǎng)站,很長一段時(shí)間都在使用這個(gè)網(wǎng)站。
我申請了一些只需要工作幾個(gè)小時(shí)的零工,主要負(fù)責(zé)在現(xiàn)有網(wǎng)站上做一些小改動以及解決一些小問題。我完全理解有些知識需要深入學(xué)習(xí),同時(shí)也讓客戶對這一點(diǎn)充分知情——在申請每一份工作的時(shí)候,我都會寫我會需要幾天來熟悉功課。
幾天過去,在給客戶發(fā)了十多條信息之后,我終于接到了第一個(gè)有酬項(xiàng)目。我花了三天時(shí)間完成這一項(xiàng)目,其間也收獲良多。
不過,我最大的教訓(xùn)是在項(xiàng)目結(jié)束之后:一切運(yùn)行良好,然而客戶放棄了該項(xiàng)目,隨后在我的主頁上標(biāo)注了項(xiàng)目未完成。為什么會這樣?因?yàn)槲耶?dāng)時(shí)沒有辦法展示我的作品。所以,我必須重申這一點(diǎn):提前創(chuàng)建公共域名。
往前看
首次失敗并沒有讓我喪失信心,我繼續(xù)前進(jìn),很快就又找到了幾個(gè)小項(xiàng)目。在工作約20天后,我找到了第一個(gè)大一些的項(xiàng)目:如果沒記錯(cuò)的話,當(dāng)時(shí)我要利用每個(gè)區(qū)域的房地產(chǎn)中介可搜索到的數(shù)據(jù)庫建一個(gè)網(wǎng)站。
在接下來的九年里,我創(chuàng)建了很多東西,在每次更新中不斷優(yōu)化。我構(gòu)建了自己編程語言的知識體系,開始將其中框架和庫運(yùn)用到我的工作中。我沒有一次后悔我最初的選擇——學(xué)習(xí)全棧開發(fā)的各個(gè)領(lǐng)域的基礎(chǔ)知識。
有太多網(wǎng)站開發(fā)員還沒學(xué)會站穩(wěn)就想跑,不要學(xué)他們,鼓起勇氣,勇往直前吧。你可以驚艷眾生,包括你自己。