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