程序员从这里开始
轉(zhuǎn)眼間,自己已經(jīng)從事軟件開發(fā)工作7年有余,現(xiàn)在想想,仿佛還在昨天。2008年初,懷著一顆忐忑不安的心來到了首都北京,由于公司項(xiàng)目需要以及結(jié)合自身的特長(zhǎng)和興趣光榮地成為了一名菜鳥級(jí)C/C++軟件開發(fā)工程師(其實(shí)直到現(xiàn)在我依然將自己定位為一名 菜鳥級(jí)C/C++軟件開發(fā)工程師,因?yàn)檐浖_發(fā)是一條不歸路, C/C++領(lǐng)域更是永無止盡)。
在這7年中,我加入過國(guó)企、美企、韓企;自學(xué)過C/C++、Python、Nodejs、Swift、JS/Html/CSS、PHP開發(fā)語言;嘗試過Unix、Linux、VxWorks、Android、IOS、Tizen操作系統(tǒng);開發(fā)過服務(wù)器端程序、PC端桌面應(yīng)用程序、移動(dòng)設(shè)備端應(yīng)用程序;涉獵過遙感、嵌入式、導(dǎo)航、智能電視領(lǐng)域;經(jīng)歷了從傳統(tǒng)互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng)的改革,目前正處在物聯(lián)網(wǎng)的洪流中,懷著一切皆可連的信念,致力于用互聯(lián)網(wǎng)思維改造傳統(tǒng)行業(yè)的事業(yè)。
大家可能會(huì)感覺能涉及這么多知識(shí)應(yīng)該是一件很幸運(yùn)的事情,會(huì)讓人感覺很充實(shí),很滿足,很自信。沒錯(cuò),當(dāng)時(shí)這對(duì)于我來說確實(shí)感覺很幸運(yùn),能有此經(jīng)歷,讓我開了眼界、長(zhǎng)了見識(shí),每天的生活過的很充實(shí),很滿足,但是我并不自信,就像剛才說的,我感覺自己依然是一名菜鳥。瞬息萬變的科技環(huán)境,層出不窮的新技術(shù),讓我不敢停止,不敢回頭,仿佛永遠(yuǎn)跟不上時(shí)代的發(fā)展,科技的進(jìn)步,逐漸地迷失了方向,不敢停止前進(jìn)的腳步,心身俱疲的我有種牛入泥潭的無助感。
現(xiàn)在回頭看看,過去的我其實(shí)完全沒有必要將自己放逐在飛速發(fā)展的技術(shù)洪流中,由于害怕自己跟不上知識(shí)的更新與發(fā)展,盲目地追求當(dāng)下最前沿科技,反而讓自己失去了方向,失去了焦點(diǎn)。每個(gè)人的精力和時(shí)間都是有限的,所以我們要將自己的優(yōu)勢(shì)和自己感興趣的領(lǐng)域結(jié)合在一起,并專注的在這一領(lǐng)域中做到極致。現(xiàn)在回想起來,造成自我迷茫和混亂的原因主要是因?yàn)楫?dāng)時(shí)剛剛大學(xué)畢業(yè)的我,對(duì)整個(gè)軟件開發(fā)領(lǐng)域沒有整體、系統(tǒng)的認(rèn)識(shí),不了解軟件開發(fā)的實(shí)質(zhì)和真諦,沒有從本質(zhì)上把握該領(lǐng)域的發(fā)展,所以當(dāng)時(shí)的自己只能用永不停止的步伐保持與該領(lǐng)域的同步,從中獲取一絲安慰和僅存的那一點(diǎn)點(diǎn)安全感。但是,這種沒有目標(biāo)的前進(jìn)和追趕在一定程度上并不能讓自己的價(jià)值最大化。
我有時(shí)在想,如果當(dāng)時(shí)我的身邊能有一位好的前輩,好的導(dǎo)師及時(shí)地給予我一些指導(dǎo)和幫助,我就能少走很多彎路。所以,我想把自己積累的知識(shí)、吃過的教訓(xùn)、犯過的錯(cuò)誤以及對(duì)行業(yè)的理解分享給對(duì)軟件開發(fā)感興趣的大學(xué)生。授人以魚不如授人以漁,在這里,我的最終目標(biāo)是不僅幫助大家學(xué)習(xí)一門開發(fā)語言或者某項(xiàng)技術(shù),更重要的是幫助大家盡早地從整體上把握該領(lǐng)域的本質(zhì),對(duì)軟件開發(fā)的整個(gè)產(chǎn)業(yè)鏈有一定的了解,從而讓大家能以最快的速度定位自己的角色,發(fā)現(xiàn)最適合自己的工作職位,用正確的思維去思考自己的職業(yè)生涯,從而知道自己想要什么,只有自己明確知道自己想要什么,你的努力才是有價(jià)值的,才不會(huì)在浮躁的城市中迷失自己。
為了幫助大家從整體上對(duì)軟件開發(fā)有一定程度的了解,下面簡(jiǎn)單介紹下移動(dòng)互聯(lián)網(wǎng)產(chǎn)品開發(fā)流程,如下圖所示:
概念化階段:該階段主要用于評(píng)估產(chǎn)品機(jī)會(huì)。比如,定義產(chǎn)品價(jià)值即產(chǎn)品解決用戶的哪個(gè)痛點(diǎn);定義目標(biāo)群體即產(chǎn)品針對(duì)哪類人群;判斷市場(chǎng)時(shí)機(jī)即此刻推出此產(chǎn)品是否迎合了當(dāng)下市場(chǎng)環(huán)境。微軟2001年推出了平板電腦,諾基亞2005年也推出了平板電腦,兩個(gè)巨頭都率先進(jìn)入了平板電腦領(lǐng)域,但均以失敗告終。蘋果公司2010年才推出ipad,但最終成功了。為什么后來者反而率先打開了平板電腦市場(chǎng),我想除了ipad本身的優(yōu)勢(shì)以外,市場(chǎng)時(shí)機(jī)也是重要因素之一,當(dāng)蘋果推出ipad時(shí),所需的軟硬件技術(shù)已經(jīng)成熟并且無線網(wǎng)絡(luò)已經(jīng)逐漸普及,這些都為ipad的成功打下了良好的基礎(chǔ)。
產(chǎn)品化階段:該階段主要用于定義待開發(fā)的產(chǎn)品。比如,收集、管理用戶需求、制定需求優(yōu)先級(jí),從而定義功能列表,并開發(fā)高保真度原型,邀請(qǐng)用戶參與原型測(cè)試,驗(yàn)證產(chǎn)品創(chuàng)意、可行性以及商業(yè)模式。
技術(shù)化階段:該階段主要進(jìn)行產(chǎn)品的研發(fā),可以狹義地理解為編碼階段。
商品化階段:該階段主要工作包括,運(yùn)營(yíng)部門確定推廣策略、銷售部門確定促銷策略。
市場(chǎng)化階段:該階段主要收集用戶反饋,并利用收集來的用戶數(shù)據(jù)分析產(chǎn)品狀態(tài),根據(jù)產(chǎn)品的實(shí)際應(yīng)用情況,不斷地提升產(chǎn)品的各項(xiàng)指標(biāo),逐步完善產(chǎn)品。
看到這里大家或多或少會(huì)有種不知所措的感覺,面對(duì)如此復(fù)雜的流程和諸多不同的領(lǐng)域,作為即將步入職場(chǎng)的大學(xué)生,我們應(yīng)該如何選擇一個(gè)切入點(diǎn)?技術(shù)化階段是我選擇的切入點(diǎn)。此階段的主角是軟件開發(fā)工程師,俗稱“程序猿”,我們可能需要3年左右的時(shí)候通過參與大量的項(xiàng)目或者開發(fā)自己的產(chǎn)品的方式學(xué)習(xí)一門主流開發(fā)語言,如果想對(duì)一門開發(fā)語言達(dá)到精通的程度,可能需要的時(shí)間更長(zhǎng)。以我自身來說,我目前依然在繼續(xù)C++語言的學(xué)習(xí),越是深入學(xué)習(xí),越是感覺自己無知。如果大家哪天感覺自己已經(jīng)完全精通了C++語言,說明自己可能在技術(shù)方面遇到了瓶頸,這時(shí)候,我們應(yīng)該、更深入的書籍或者選擇一個(gè)更有挑戰(zhàn)性的項(xiàng)目提高自己,只有不斷地提高自己,才能讓自己不斷地增值。現(xiàn)在世面上有很多主流開發(fā)語言,我們到底應(yīng)該如何選擇一門開發(fā)語言進(jìn)行學(xué)習(xí)?在這里,我給大家的意見是,選擇C/C++作為自己主要的開發(fā)語言,等自己已經(jīng)入門之后,可以再選擇Java、javascript、python、Go等其他高級(jí)語言作為輔助開發(fā)語言。技術(shù)在不斷的發(fā)展更新,所以,我們要不斷地充實(shí)自己,提高自己,集多種開發(fā)語言優(yōu)勢(shì)與一身,只有了解多種語言的優(yōu)勢(shì)和局限性,才能在日常開發(fā)工作中做到游刃有余,更好的駕馭整個(gè)項(xiàng)目。在初期積累知識(shí)和經(jīng)驗(yàn)階段,大家不用操之過急,擔(dān)心自己落伍,我們只要在正確的方向上循序漸進(jìn)地前進(jìn)就可以了,按照自己的節(jié)奏,一步步走,貴在堅(jiān)持!大家可能有點(diǎn)疑問,為什么我建議大家選擇C/C++作為自己主要的開發(fā)語言。首先,目前開發(fā)語言多如牛毛,但是我們每個(gè)人的精力和時(shí)間都是有限的,我們不可能精通所有的開發(fā)語言。所以,我們應(yīng)該選擇一門經(jīng)典開發(fā)語言縱向深耕下去,C/C++是一個(gè)比較好的選擇,與其他高級(jí)語言不同,C/C++為開發(fā)者提供了一些優(yōu)化程序的機(jī)會(huì),比如,我們可以通過指針直接操作內(nèi)存,開發(fā)者要對(duì)內(nèi)存管理負(fù)責(zé),通過這些操作我們不僅可以深入掌握C/C++內(nèi)部機(jī)制,而且還可以對(duì)操作系統(tǒng)、計(jì)算機(jī)原理等知識(shí)有進(jìn)一步了解。幫助開發(fā)者全面掌控應(yīng)用層開發(fā)和系統(tǒng)底層開發(fā)。但對(duì)于Java而言,開發(fā)者不需要對(duì)內(nèi)存管理負(fù)責(zé),Java自身的垃圾收集機(jī)制會(huì)自動(dòng)管理內(nèi)存,這樣一來,雖然給開發(fā)者提供了便利,提高了工作效率,但是同時(shí)也阻斷了開發(fā)者接觸系統(tǒng)底層的機(jī)會(huì),不利于開發(fā)者今后的發(fā)展,總體來說,弊大于利。我將C/C++比喻成“九陽真經(jīng)”,只要學(xué)會(huì)了它,在學(xué)習(xí)其他武功秘籍的時(shí)候就能事半功倍,有種酣暢淋漓、一氣呵成的感覺。
當(dāng)大家在技術(shù)化階段摸爬滾打幾個(gè)年頭后,就會(huì)慢慢發(fā)現(xiàn)一個(gè)成功的產(chǎn)品除了要靠技術(shù),還需要前期的產(chǎn)品定位、交互設(shè)計(jì)、視覺設(shè)計(jì),以及后期的測(cè)試、運(yùn)營(yíng)、銷售。只有每個(gè)環(huán)節(jié)都做到最好,才有可能創(chuàng)造一個(gè)成功的產(chǎn)品。
很高興您能耐心地閱讀完這篇文章。以上只是本人的一點(diǎn)自我感觸。后續(xù)我會(huì)持續(xù)分享自己的一些技術(shù)積累,詳細(xì)安排如下:
以下是每周分享計(jì)劃:
1.每周推送兩篇C++開源經(jīng)典庫(kù)Boost用法介紹;
2.每周推送一篇C++ STL源碼剖析;
3.每?jī)芍芡扑鸵黄猄wift開發(fā)指南(基于iOS app以及AppleWatch app開發(fā))
研究經(jīng)典開源庫(kù)是精通一門開發(fā)語言最好的方式。Boost和STL開源庫(kù)是C++最經(jīng)典的開源庫(kù),在這里包含了所有C++高級(jí)用法,想成為高手從這里開始。修煉一門武功主要包括兩部分:招式和內(nèi)功。所以,在這里我們通過學(xué)習(xí)Boost用法的方式達(dá)到修煉招式的目的;通過剖析STL源代碼的方式達(dá)到修煉內(nèi)功的目的。我想通過這種內(nèi)外兼修的方式,一定能讓大家一窺C++的本質(zhì)。
最后,我還為大家提供了移動(dòng)端iOS app以及可穿戴設(shè)備AppleWatch app開發(fā)的教程。C++由于其良好的性能主要用于服務(wù)器開發(fā)。所以,待大家掌握了互聯(lián)網(wǎng)前后端技術(shù)后,我會(huì)為大家提供一個(gè)系統(tǒng)的視頻教程,跟大家一起實(shí)現(xiàn)一個(gè)完整的互聯(lián)網(wǎng)產(chǎn)品。
在這里,我跟大家一起開始程序員之路…
歡迎大家關(guān)注我的微信訂閱號(hào)-程序員從這里開始
總結(jié)
- 上一篇: 为什么NFT的头像卖这么贵?这与IPFS
- 下一篇: 【POJ 3311】Hie with t