我業(yè)余時(shí)間如何學(xué)習(xí)多門技術(shù)以及開發(fā)業(yè)余項(xiàng)目的一些心得
本文主要與大家分享作者業(yè)余時(shí)間如何學(xué)習(xí)多門技術(shù)以及開發(fā)業(yè)余項(xiàng)目的一些心得,分為 初衷、硬技能、軟技能、***生產(chǎn)力、環(huán)境、時(shí)間幾個(gè)部分,閱讀大概需要 10 分鐘。
關(guān)于我之前做的一些業(yè)余項(xiàng)目,我在知乎上的一個(gè)回答大概可以總結(jié):
我的學(xué)習(xí)方法
在開始介紹我開發(fā)業(yè)余項(xiàng)目的經(jīng)驗(yàn)前,先和大家分享一下我的學(xué)習(xí)方法吧,不過我認(rèn)為學(xué)習(xí)這件事情因人而異,每個(gè)人都有適合自己的學(xué)習(xí)方式,所以這是作為一個(gè)參考,希望大家也都能先找到適合自己的學(xué)習(xí)方法。
我在學(xué)習(xí)一門技術(shù)的時(shí)候,通常都是直接切入實(shí)踐,曾經(jīng)我也嘗試先看各種基礎(chǔ)的語法或者稍微深入的一些設(shè)計(jì)模式之類的書籍,但是發(fā)現(xiàn)這種方式對(duì)我來說很低效。
例如 Objective-c 的學(xué)習(xí),當(dāng)初我買了幾本書,啃了半年還是一知半解,當(dāng)然另外還有一個(gè)關(guān)鍵點(diǎn)就是要時(shí)間連續(xù),如果每天看幾頁的話,也是低效的一個(gè)重要原因,因?yàn)槌绦虻恼Z法是偏生澀的,死記硬背很難記住所有知識(shí)點(diǎn)。
所以后來,在有一次辭職之后,我直接接了一個(gè) iOS 的外包,那時(shí)候我甚至還從來沒有在 xcode 上寫過 iOS 代碼,我逼自己花一個(gè)月時(shí)間,掌握并且做出一個(gè) app 來。
在這一個(gè)月時(shí)間里,我將大量的時(shí)間投入了 iOS 開發(fā)的學(xué)習(xí),并且盡量采取高效的學(xué)習(xí)路徑,我來不及看明白所有的基礎(chǔ) OC 語法,就直接去看講述 iOS 編程的文章(蘋果官方有很多實(shí)踐入門的文檔)。
然后直接實(shí)踐,在 xcode 上敲代碼做布局,然后運(yùn)行看效果,對(duì)于不懂如何實(shí)現(xiàn)的功能,就直接去 google 搜索文章,快速查看別人的方法,然后實(shí)踐。
當(dāng)然,這是一種比較走捷徑但是問題多多的學(xué)習(xí)方式,在這個(gè)月里,我通宵了好幾次,就為了解決某個(gè)細(xì)節(jié)的問題,不斷查文章不斷實(shí)驗(yàn),然后不行,就再查,如此反復(fù),效率其實(shí)也不見得高。
但是與實(shí)踐結(jié)合的學(xué)習(xí)方式,***的益處是對(duì)知識(shí)點(diǎn)的掌握更扎實(shí)更具象,不過這一個(gè)月之后,其實(shí)我對(duì) iOS 開發(fā)仍然是一知半解,后續(xù)通過另外一些不是很緊急的項(xiàng)目持續(xù)的磨練,才算是正式入門。
到了后來你會(huì)發(fā)現(xiàn),語法真的是一門開發(fā)技能最最基礎(chǔ)的東西,對(duì)語法掌握熟悉只是踏入開發(fā)的***步,后面還有很多知識(shí)需要不斷在實(shí)踐中總結(jié)。
包括我當(dāng)初學(xué)習(xí) node 開發(fā),也是直接從實(shí)踐切入,因?yàn)檎Z法其實(shí)已經(jīng)沒有什么問題了,當(dāng)時(shí)我就想,我需要做一個(gè)網(wǎng)站出來,通過網(wǎng)站的不同功能模塊,實(shí)踐 node 開發(fā)中的一些基礎(chǔ)或者是數(shù)據(jù)庫設(shè)計(jì),部署,服務(wù)器運(yùn)維等知識(shí)。
當(dāng)時(shí)***個(gè)想法就是把自己搭建的 wordpress 博客自己用 node 實(shí)現(xiàn)一個(gè),于是就說干就干,后來發(fā)現(xiàn)博客還是過于簡單,于是就想把自己的博客搞成一個(gè)社區(qū)。
大家可以來這里發(fā)表博客,或者是問答,還有論壇發(fā)帖等功能,整個(gè)網(wǎng)站的結(jié)構(gòu)變得復(fù)雜了,對(duì)程序的結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)庫設(shè)計(jì)的要求也就凸顯了,通過這個(gè)網(wǎng)站的不斷迭代,我對(duì) nodejs 的了解也越來越深入。
我的主要技能仍然是前端開發(fā),這個(gè)是我的工作。然后其他開發(fā)技能基本都是在業(yè)余時(shí)間學(xué)習(xí)與實(shí)踐的,包括其他一些軟技能,例如設(shè)計(jì),產(chǎn)品,運(yùn)營之類。
方法無非就是我上面講的,所以接下來講的業(yè)余開發(fā)項(xiàng)目的感受,這些項(xiàng)目,其實(shí)最終的初衷除了創(chuàng)造之外,還有很重要的一個(gè)點(diǎn),就是我用來學(xué)習(xí)技術(shù)的實(shí)踐,不管你的產(chǎn)品做成功還是失敗了,至少我的技術(shù)長進(jìn)了。
所以,不要在業(yè)余時(shí)間做一些沒有技術(shù)含量的事情,例如接一些切圖的外包或者你已經(jīng)很熟悉的事情,多給自己一些挑戰(zhàn)自己的事情。
業(yè)余開發(fā)項(xiàng)目的初衷
總體來說,在我的感覺里,國內(nèi)的環(huán)境對(duì)于業(yè)余開發(fā)者來說其實(shí)是非常不友好的,不過作為一個(gè)開發(fā)者,一味抱怨并不會(huì)有大的改觀,能做的就是不忘初心,多做嘗試多做積累。
包括我之前也和一些朋友深入聊過類似的話題,例如“在行”上約我聊相關(guān)話題的同學(xué),我其實(shí)是鼓勵(lì)大家勇敢的去做自由職業(yè)者或者業(yè)余開發(fā)者,雖然環(huán)境的確不是很友好。
但是年輕時(shí)多嘗試總是沒錯(cuò)的,畢竟我們還有資本去尋找更多可能性,而且我相信每個(gè)開發(fā)者其實(shí)內(nèi)心都是向往利用自己的力量改變?nèi)藗兊纳罘绞降摹?/p>
而我們通常做的事情卻總是一個(gè)大工程中的螺絲釘,時(shí)間長了失卻了創(chuàng)新的初衷意味,這時(shí)候離一個(gè)創(chuàng)造者越來越遠(yuǎn),自會(huì)覺得內(nèi)心恐慌,我最初的熱愛去哪了?
雖然這些大工程的確在不斷改變我們的生活,但是我的初衷卻是能夠主導(dǎo)一場改變,即使它可能改變的只是一小群人的某個(gè)小小的生活方式。
我一直覺得程序員是一個(gè)很神奇的職業(yè),不是說這個(gè)職業(yè)本身神奇,而是代碼賦予我們的能力神奇,我們可以憑空創(chuàng)建起一個(gè)虛擬的世界,可以制定這個(gè)虛擬世界的規(guī)則,可以讓這個(gè)世界按照我們的想法運(yùn)作。
但是這個(gè)世界也會(huì)反過來要求你改變你,因?yàn)橐粋€(gè)正常運(yùn)作的虛擬世界需要嚴(yán)謹(jǐn)?shù)囊?guī)則,這就需要你有設(shè)計(jì)產(chǎn)品,設(shè)計(jì)合理規(guī)則,設(shè)計(jì)運(yùn)作閉環(huán)的能力。
這也是我們重點(diǎn)要強(qiáng)調(diào)的業(yè)余開發(fā)者的能力模型,你不能只是擁有 coding 的能力,不能只是 create,而是要合理的創(chuàng)造,探索人群的新的需求,創(chuàng)造真正有用的產(chǎn)品。
其實(shí)這是今天要探討的重要話題之一:業(yè)余開發(fā)者如何做出一個(gè)真正的產(chǎn)品?
硬技能
這件事絕非看起來這樣簡單,首先在技術(shù)上,你要掌握足夠的技術(shù)來完成這個(gè)產(chǎn)品的各個(gè)方面,現(xiàn)在假設(shè)以我的上一個(gè)app睡前故事為例,完成這個(gè)產(chǎn)品需要有哪些方面的技術(shù)積累呢?
客戶端開發(fā),iOS,Android,當(dāng)然如果你選擇只支持某個(gè)平臺(tái),可以只掌握其中一種,當(dāng)然也可以使用一些跨平臺(tái)的技術(shù),但是除了語言和編程模式,編程框架之外,還遠(yuǎn)遠(yuǎn)不夠,平臺(tái)差異,平臺(tái)特性,版本兼容,自適應(yīng),還有最麻煩的一環(huán),你的 app 開發(fā)成功之后如何發(fā)布到對(duì)應(yīng)的平臺(tái)?如何設(shè)置內(nèi)購等?特別是 iOS,發(fā)布一個(gè) app 的成本遠(yuǎn)比想象的高。另外與端相關(guān)的,還有基礎(chǔ)的數(shù)據(jù)統(tǒng)計(jì),消息推送,分享集成等,在初版的時(shí)候***就能將這些工作做好,而這就需要你了解這些功能的集成開發(fā)。
前端開發(fā),故事上傳有一個(gè)后臺(tái),當(dāng)然這個(gè)很簡單,然后故事從 app 里分享出去之后有一個(gè) H5頁面,這個(gè)頁面里可以直接播放音頻,然后有一些下載 app 的引導(dǎo)。所以前端開發(fā)的技能也是必備的。還有就是一些平常要用的宣傳頁之類的。
服務(wù)端,所有故事都是在后臺(tái)存儲(chǔ)的,需要數(shù)據(jù)庫,還有服務(wù)端應(yīng)用提供數(shù)據(jù)分發(fā),以及一些數(shù)據(jù)統(tǒng)計(jì)之類。
數(shù)據(jù)記錄與分析,我需要在用戶的使用過程中,記錄用戶的動(dòng)作和其他有用信息到服務(wù)端,然后以這些數(shù)據(jù)分析用戶行為,以便決定后續(xù)哪些故事是***的,以及受誰的歡迎,我可以做定向的推送或者收費(fèi)服務(wù)。
設(shè)計(jì)能力,說起來這也是非常核心的需要,如果沒有基礎(chǔ)的設(shè)計(jì)能力,很難做出一個(gè)讓大家眼前一亮至少看著舒服的 app,特別是現(xiàn)在市面上的主流 app 都擁有比較高的體驗(yàn)門檻,粗制濫造的 app 很難吸引用戶。在這點(diǎn)上,也需要做一些刻意的培養(yǎng),雖然我們可能沒有受過專業(yè)的訓(xùn)練,但是可以多看多想,從別人的設(shè)計(jì)風(fēng)格中借鑒,慢慢培養(yǎng)審美,當(dāng)然還有最重要的就是 設(shè)計(jì)工具當(dāng)然需要熟練掌握。
除了技術(shù)之外,還需要其他一些技術(shù)之外的能力,這些能力可能是區(qū)分你與其他程序員的重要分水嶺,它決定了你可以創(chuàng)造產(chǎn)品,而不是掌握了哪些具體的技術(shù)。
軟技能
我們簡單談?wù)劊?/strong>
需求分析,產(chǎn)品規(guī)劃。要做一個(gè)什么產(chǎn)品,不是因?yàn)槲艺莆樟耸裁醇夹g(shù),能夠?qū)懗鍪裁礃拥拇a來,技術(shù)只是一個(gè)工具,要發(fā)揮其價(jià)值,必然是需要有原始的需求和基礎(chǔ)產(chǎn)品形態(tài)。所以要開始獨(dú)立開發(fā)一個(gè)應(yīng)用,首先要做的可能并不是去掌握很多種技術(shù),而是想清楚,你要做一個(gè)什么產(chǎn)品。例如,我要做睡前故事的 app 的時(shí)候,我的確已經(jīng)掌握了上述的技術(shù),但這些都不是決定性的,如果我沒掌握,我可以去學(xué)習(xí),但是為什么要做這個(gè) app?是因?yàn)槲矣匈Y源(我老婆,講故事講得好,她是老師,身邊有一群潛在的種子用戶),有受眾(強(qiáng)需求,高粘性),于是我開始思考如何利用這些資源,我想一個(gè)聽故事的 app 成本應(yīng)該是不高,而且容易推廣,粘性足夠高的。雖然市面上已經(jīng)有很多類似的 app,但是我可以做我的特色,例如:我只有一個(gè)講故事的老師,而且講的質(zhì)量很高(市面上大多數(shù)故事 app 都講的很敷衍),有很強(qiáng)的品牌和標(biāo)簽屬性,另外我的設(shè)計(jì)能力和開發(fā)能力突出,我可以將我的 app 做的比任何一個(gè) app 都精致好用。
推廣和運(yùn)營。大多數(shù)業(yè)余開發(fā)者應(yīng)該都為此非常發(fā)愁,我好不容易做出的應(yīng)用,如何曝光給受眾?如何讓更多的人安裝我的應(yīng)用?如何維持應(yīng)用的活躍度留存率?這方面的能力,我推薦大家首先多去嘗試挖掘,另外就是在平常公司的工作中多多留意大家的慣用手段,多向相應(yīng)職位的同事學(xué)習(xí),另外在職場中遇到類似問題的時(shí)候也多從自身思考,如果讓你來推廣一個(gè) app,你有什么辦法?具體如何推廣 app,這里也可以分享一下。首先,你要保證你的 app 是優(yōu)秀的,否則你把 app 推給用戶,他不愿意下載,那無論如何推廣都是無效的。然后推廣渠道,可以找一些免費(fèi)渠道,一些 app 推薦的網(wǎng)站、app、公眾號(hào),想辦法聯(lián)系到他們的編輯。然后請(qǐng)他們推薦你的應(yīng)用,如果你的應(yīng)用足夠優(yōu)秀,他們會(huì)很樂意幫忙,這種渠道還是挺多的,例如最美應(yīng)用、少數(shù)派、appso之類。另外一個(gè)渠道就是一些垂直的論壇和社交網(wǎng)站,甚至是知乎之類。然后所謂的運(yùn)營,最基礎(chǔ)的,在 app 內(nèi)要有一些與用戶的互動(dòng),能夠維持用戶的使用激情,甚至幫你擴(kuò)散 app 到朋友圈,具體可以是一些活動(dòng)的形式(運(yùn)營管用手段)。***再說一點(diǎn),適當(dāng)?shù)臅r(shí)候,要舍得花錢,但是要花在點(diǎn)子上,可以搞一些送禮物的活動(dòng),也可以做一些付費(fèi)的推廣配合沖一下榜。
創(chuàng)新是***生產(chǎn)力
當(dāng)我們知道構(gòu)建一個(gè)產(chǎn)品需要些什么基礎(chǔ)技能之后,那我們?nèi)缦抡嬲南率肿鲆粋€(gè)產(chǎn)品出來呢?我應(yīng)該做什么類型的產(chǎn)品?我能想到的產(chǎn)品別人都做過了怎么辦?我人手不足無法開展大型工程如何與別人競爭?我的推廣和運(yùn)營能力有限沒人用怎么辦?
有時(shí)候我也會(huì)困惑,特別是我做了一個(gè) app 出來,然后千辛萬苦推廣的時(shí)候,要么發(fā)現(xiàn)對(duì)個(gè)人來說推廣一個(gè) app 是極其困難的,要么就是發(fā)現(xiàn)當(dāng)我把 app 推到用戶面前的時(shí)候,用戶并不會(huì)很興奮的接受你的產(chǎn)品,這時(shí)候我就會(huì)開始思考,如何突破?是尋求更多曝光渠道?
還是做一些很花哨很吸引人的運(yùn)營活動(dòng)?感覺這些事情對(duì)我來說都沒有那么簡單,成本也都很高,越想越頭疼,越想越會(huì)覺得自己做個(gè)事情出來真的不容易。
不過,可能我想著突破的點(diǎn)的方向就是錯(cuò)的。業(yè)余開發(fā)者的核心競爭力是什么?不是你的資源,不是你花里胡哨嘩眾取寵的玩法,而是你個(gè)人意志主導(dǎo)的創(chuàng)新能力!
用戶對(duì)于創(chuàng)新功能(當(dāng)然首先要是合理的)的敏感度是很高的,如果你的 app 提供了一種前所未見但是又能夠解決問題的使用方式,這才是你的產(chǎn)品的核心競爭力,在***情況下,可能不需要任何主動(dòng)地推廣、運(yùn)營,用戶會(huì)自發(fā)幫你傳播,并且保持很高的活躍度。
當(dāng)然,這種創(chuàng)新,不是特指一項(xiàng)具體的技術(shù)實(shí)現(xiàn),也不是指一個(gè)花里胡哨的設(shè)計(jì),需要自己去做理解和平衡。
環(huán)境
知道了如何獨(dú)立開發(fā)一個(gè)產(chǎn)品之后,我們?cè)僬勑﹦e的,例如:為什么我說國內(nèi)的環(huán)境對(duì)業(yè)余開發(fā)者是很不友好的?為什么很少有專職的業(yè)余開發(fā)者?
從經(jīng)濟(jì)上來說,其實(shí)一個(gè)業(yè)余開發(fā)者要養(yǎng)活自己還是沒有問題的,但是現(xiàn)在國內(nèi)的環(huán)境是,能養(yǎng)活自己遠(yuǎn)遠(yuǎn)不夠,首先你要能養(yǎng)活一個(gè)家庭,然后你要養(yǎng)房子車子,你要還貸款養(yǎng)銀行,你要交稅養(yǎng)國家,種種因素要求你,要么有穩(wěn)定的收入,要么就有足夠硬的經(jīng)濟(jì)條件。
如果你沒有很好地經(jīng)濟(jì)基礎(chǔ),而又沒有穩(wěn)定的收入,對(duì)于家庭來說是一件很難接受的事情。
當(dāng)然,這是大環(huán)境,你完全可以跳脫這些束縛,但是大環(huán)境對(duì)人的影響還是非常大的,你很難擺脫正常人的生活方式與狀態(tài),這些都在暗示你,從事不穩(wěn)定收入的自由職業(yè)獨(dú)立開發(fā)不是一個(gè)好的選擇。
還有其他一些問題,例如社保,五險(xiǎn)一金,戶口,簽證等問題,如果你沒有正式的工作,這些事情都會(huì)變得很麻煩。
其實(shí)我非常向往自由職業(yè),所以曾經(jīng)有一年我沒有工作,在家里嘗試了一年時(shí)間,除了自己的自制力問題之外,我也深知,我沒法維持“自由”這個(gè)狀態(tài)太久(除非我一夜成功,但是那時(shí)候的我,也并非“自由”了)。
因?yàn)樽鳛橐粋€(gè)正常人,我需要承擔(dān)很多這個(gè)社會(huì)需要我承擔(dān)但是我自己可能并不特別樂意的責(zé)任。
當(dāng)然還有一點(diǎn),我需要回到職場觀察學(xué)習(xí),如何成為一個(gè)“正常人”,如何創(chuàng)造“大型產(chǎn)品”,雖然可能這并非我的初衷,但是我們并非天才,做任何事情都需要這個(gè)世界的輔助,所以我們需要很好地和這個(gè)世界溝通。
在這種大環(huán)境下,除了鼓勵(lì)更多的人參與到自由職業(yè)和獨(dú)立開發(fā)的隊(duì)伍中來之外,***的選擇就是做部分妥協(xié)。
但是勿忘初心,利用工作之余,拾起你對(duì)技術(shù)和產(chǎn)品的熱愛,慢慢打磨一個(gè)業(yè)余的產(chǎn)品,通過這個(gè)打磨的過程,積累經(jīng)驗(yàn)(硬技能、軟技能),同時(shí)保持創(chuàng)造的活躍度。
時(shí)間
接下來探討的這個(gè)話題可以涵蓋好幾個(gè)問題,例如如何一個(gè)人在短時(shí)間內(nèi)掌握多項(xiàng)相關(guān)的技能?如何維持自己業(yè)余開發(fā)的熱情?覺得技術(shù)一直沒有長進(jìn)怎么辦?
除了 0.1% 的悟性、1%的方法之外,你能做到別人做不到的事情的***秘訣就是:時(shí)間。
如果你真的對(duì)一個(gè)事情感興趣,那就投入 100% 的熱情和精力,例如每天下班后 7 點(diǎn)到晚上 2 點(diǎn)(當(dāng)然不鼓勵(lì)熬夜)的時(shí)間,就是 7 個(gè)小時(shí),你一天投入到工作學(xué)習(xí)的時(shí)間比別人多了 7 個(gè)小時(shí),一個(gè)月就是 200 個(gè)小時(shí),加上周末的時(shí)間,遠(yuǎn)比你正式工作的時(shí)間還要長,這些時(shí)間才是人和人之間拉開差距的重點(diǎn)。
例如學(xué)習(xí) iOS 開發(fā),一天學(xué)一個(gè)知識(shí)點(diǎn)(加上實(shí)踐),我覺得最多一個(gè)月就可以覆蓋大部分知識(shí)點(diǎn),當(dāng)然這需要極大地?zé)崆椋吘共皇撬腥硕忌岬脤⒋蟀训臉I(yè)余時(shí)間投入到學(xué)習(xí)或者做項(xiàng)目中去。
我在做之前的個(gè)人論壇和 app 的過程中,其實(shí)狀態(tài)都是比較累的,每天大概需要付出大部分業(yè)余時(shí)間加熬夜的時(shí)間,因?yàn)橛脩舴答佋絹碓蕉啵倚枰粩嗟貎?yōu)化自己的產(chǎn)品,完善自己的想法,并且將他們實(shí)現(xiàn)出來。
雖然很累,但是成就感還是很強(qiáng)的,這些成就感會(huì)激勵(lì)我持續(xù)的投入更多的時(shí)間,形成一個(gè)自身成長的正循環(huán)。
不過做事情總有遇到瓶頸的時(shí)候,在遇到瓶頸的時(shí)候,我會(huì)刻意將節(jié)奏放緩,看看別的類型的書,研究下別的類型的技術(shù),或者純粹的放松。
Just Do it!
講了這么多,不知道對(duì)大家會(huì)不會(huì)有幫助,不論如何,最重要的還是開始執(zhí)行,腦海里總會(huì)冒出一些想法吧,不知道是不是合理?
那就先嘗試做,慢慢的就會(huì)發(fā)現(xiàn)什么是合理的,什么是不合理的,每個(gè)人都有這樣的一個(gè)過程。
然后多去觀察生活中出現(xiàn)的大大小小的問題,總有我力所能及可以用技術(shù)去解決的問題,而這可能就是一個(gè)很好的 idea。另外希望真正熱愛技術(shù)和創(chuàng)造的朋友可以一直保有自己的那份初心。