感覺技術提高很慢,怎麼安撫浮躁的情緒?

補充下背景,題主大學畢業一年。在一家小網路公司謀得一份穩定,但是技術含量不高的差事。因工作需要接觸學習PHP(之前大學勉強接觸了點C語言)。剛開始學習時感覺很有成就感,學習提高迅速。但是當學完面向對象,然後又發現學習PHP還要學js, jQuery, Ajax. smarty,think PHP. HTML. css. MySQL.等等等等……,最近感覺進步超級慢,信心受挫。


某高票答案太不靠譜了。

演算法,數據結構,沒人說不重要!

演算法,數據結構,沒人說不重要!

演算法,數據結構,沒人說不重要!

(某些人啊,要麼眼睛瞎要麼語文老師死的早,跑過來跟我說「你怎麼能說基礎不重要基礎最重要啦blabla」,看不見這句話么。說三遍能看見么,我估計還是不能)

演算法,數據結構,沒人說不重要。但是你非要鼓吹基礎萬能論,那肯定是誤人子弟的。基礎就是基礎,沒有是不行的,只會基礎也是不行的。你的僱主並不是為你的基礎付錢的,你僱主需要的是你的上層應用能力,而不是這些不著邊際的所謂基礎能力。

給題主一點建議。技術學習一定要在使用中學習。

技術不要干學,很容易陷入半懂不懂的狀況,而且沒有正向反饋,讓你很難有信心深入。最好明確一下,我想做個什麼東西(能夠使用你想學的技術的一個小應用,比如大家經常用來練手的 to do list)。考慮一下這個東西可能用得上哪些內容,粗略學一下然後直接上手做,遇到不會就再查。

不要擔心你做得怎麼樣,邊學邊做肯定很糟糕,但是等你做完,大概就學會是怎麼回事了,以後就可以繼續深入研究下去。


感覺技術提升慢?先定義什麼叫「慢」。

全世界層次不窮N多技術框架,你一個月才精通一個,是一種慢;你公司的工作中需要使用一種技術框架,一個月內要交工,你花了兩個星期才摸清門道,這也是一種慢。

你看前一種慢,一個月一個框架,其實很快;後一種慢,兩個星期一個框架,比第一種其實快,但是,跟不上工作要求,其實這才是真的慢

所以說啊,快和慢是相對的。

學海無涯,計算機的技術更是星辰大海,你想要全都學會,無論如何都會覺得慢的;但是,你實際工作中需要的技能知識並不會很多,只要能學到足夠的知識,學以致用,那就不會感覺太慢。

面對浮躁的情緒,先要想明白了,你想要什麼,你想要學富五車天下技術全都會嗎?如果這真是你的目標,你永遠都獲得不了心靈的安寧。其實,我們所有人的能力都是有局限的,不可能什麼都會,你看看你在行業中的偶像,他們也不是什麼都會對吧。

個人建議,在沒有獲得某方面深度之前,不要著急去擴展廣度。學精一樣,在工作中把這一樣玩得比其他人都好,你就不會浮躁了。

了解我更多學習方法請關注@程墨Morgan


樓主可以試試《代碼大全(第2版) (豆瓣)》這本書。

基本上寫程序涉及的方方面面在代碼大全中都有提到,比如變數命名、優化循環、表驅動法、防禦式編程、子程序等。這些都是可以立即見效的,也就是說可以直接拿代碼來嘗試。

把這些指導方案應用在公司現有的業務代碼上,可以很大程度上提到程序的質量。同時樓主對良好的代碼風格也會有更加深入的認識。

代碼大全看著很厚,內容很多。但實際上每個章節是可以單獨看的,不用嚴格按照目錄的順序閱讀,每天花 30 分鐘看一部分,用不了多久就可以看完。同時,應該經常閱讀,因為每次閱讀都會有新的體會。


當然,代碼大全只應該是樓主學習路線中的一部分。軟體工程方面的知識是通用的,樓主想更好地掌握 Web 開發的知識,逃不掉對下面這些知識的學習:

1. 網路編程和 HTTP 協議(https://www.google.co.jp/search?q=php+network+programmingoq=php+network+programmingaqs=chrome..69i57j0l5.9745j0j4sourceid=chromeie=UTF-8)

2. PHP 語言(當然用其他語言也可以)

3. Web 框架(讀懂源碼)

4. JavaScript(儘管 HTML 和 CSS 也很重要)

5. 資料庫(SQL 和 NoSQL)

6. Linux(至少命令行部分必須掌握)


在掌握了這些知識之後,相信即便再次出現浮躁的情緒,樓主也會知道如何繼續深入學習了。


我還以為是遇到瓶頸沒東西可學了,

結果是犯懶,被要學的東西嚇著了……

就借著這個例子給想要轉行的同學提個醒:一入猴(猿)門深似海。

三十歲的程序員在幹嘛?學習,擼代碼;

三十五歲的程序員在幹嘛?在學習,擼代碼;

那四十歲以後的程序員呢?還是在學習,擼代碼

……

別YY什麼做架構轉管理,一來這些職位始終是有限的,二是你做架構做管理,學習壓力更大!

做程序員,這就是你的命:各種新技術層出不窮,你就得不斷的學習不斷的進步,才能勉強保持不掉隊。

所以你究竟準備自學,還是培訓,還是考個研,還是……從長遠來看——也沒多長遠,兩三年三五年吧——統統都不重要。

關鍵是要有這種學習的慾望,沒這種好奇心求知慾,被人推著走,你做起來心累;當然還要有學習的能力,尤其是自學的能力,難不成你每隔個三五年就又去上了培訓班?丟不起這人吧!沒有足夠的自學能力,掉隊趕不上,那就不光是心累了……

對已經入坑的IT狗,我也不知道說點什麼好。

++++++++++++++++++

收藏於:野生程序員 - 收藏夾 - 知乎

++++++++++++++++++

另外技術提高慢可以到「一起幫」幫幫別人啊……以下小廣告,O(∩_∩)O~

註冊·一起幫(包含 邀請人:葉飛,邀請碼:1786)

我自己個人開發的一個網站,開發過程全程直播並有錄像(自由飛:在鬥魚直播寫代碼是一種怎樣的體驗?)

設立的初衷就是為了降低自學編程(也包括各種電腦軟體使用等)的難度,尤其是一些對新人來說「莫名其妙的」問題(比如配置不對、連不上資料庫之類的),問題本身沒多少技術含量,但確實新人自學過程中的攔路虎,自己瞎折騰不知道要花多少時間,但如果有人遠程桌面幫忙看看,很快就可以解決。

有興趣的同學註冊看看吧?

註冊·一起幫(包含 邀請人:葉飛,邀請碼:1786)


跳槽,找平台。

沒平台,就不知道自己不知道,沒平台就是知道也沒什麼意義,因為沒平台。

國內眾多小公司,呆一年毀品位,呆三年毀青春,呆上七八年,基本你的技術生涯就提前結束了。這些公司會讓你的更年期提前到來。

所以,趕快跳槽找平台。

安撫情緒有P用,你女人啊?安撫好情緒問題就解決?


停,你幹嘛要學那麼多
且不說SQL應該是大學課程,這你拉下了自己的鍋
CSS,HTML這種東西,難道不是用的時候對著手冊開發,用個3個月自然就會了嗎
你專門去學他作甚?學了用不上,還不是三個月就忘光?
JQuery不就是一個工具,本來就是為了方便使用的,為什麼會需要專門學
至於ajax只是一個API,這東西一下午就應該看完了吧?
至於smarty,think PHP這又是什麼鬼,你現階段用的著這些東西嗎?為什麼一定要一口吃個大胖子?
最後送你一句話,實踐出真知,任何技術,本質上最終目的是應用。你之所以覺得進步慢,說白了就是你在學一大堆你用不著的東西,無法和實踐結合,當然進步慢。呆在PHP項目里,就專心學好PHP,這才是技術精研之道,當你發現問題產生需求時,然後找到一個對你要解決問題很有幫助的新技術時,自然就不會覺得累,而且很快就能學好了


說起來,剛好翻到上面有個答主……說……
「這是在這時,我大概就遇上了自己的第一次瓶頸,我處在HTML結構混亂,命名不規範,CSS還需要不斷猜測某個地方到底是使用padding還是margin的這樣一個階段。

我開始認為我需要繼續練習,繼續仿頁面。但是結果還是繼續著混亂拼湊的代碼。」

深感學習方法還是很重要
為什麼要去猜測,仿照,而不是好好去理解下padding和margin的定義呢?

這很難懂嗎?


我把我的知識積累過程大抵分為四個階段:

第一階段:困惑期

這個階段往往是小白階段,要麼經驗積累不夠(比如剛畢業),要麼是重大技術轉型階段(顛覆性的,比如由GUI應用模式轉到Web應用模式)。

以前剛出道時,寫的基本是C++的GUI應用和Foxbase管理信息系統,之後的技術發展逐漸向Web趨勢演進,而Web應用從程序模式到部署模式都完全不同,以至於當年著實跌了不少跟頭。

記得剛涉足Web開發時,即使是拿著一本類似「21天精通」這樣的入門書,也是走得跌跌撞撞。啥IIS、Apache應用伺服器、請求/響應、Cookie/Session、Servlet......陌生到一度讓我懷疑人生。

這個階段也許一個月才能寫出一個聊天HelloWorld程序,心境往往起伏得厲害。但萬事開頭難,這個階段一定是要堅持、堅持再堅持,而且盡量沉下心學會控制情緒,千萬不要怨自己基礎不夠、腦袋不靈光。你咬牙堅持個一段時光,相信就可以進入「發展期」。優秀的人在這個階段:「不貪進度,穩紮穩打,願意打破砂鍋尋到底」


第二階段:發展期

在「打破砂鍋尋到底」的模式下,隨著之前的障礙逐個被擊破,我覺得啃一部入門書確實越來越輕鬆了,這個階段學得快也學得多,而且過程中冒出的問題越來越多,比如「要添加一個圖表咋辦?」、「想整個帶編輯、刪除功能的翻頁列表咋整?」之類的問題。這時候我往往是把這些點記錄下來,但不打斷自己(跟書或跟計劃)學習的節奏,好比「沒學會走之前不要試圖學飛」

這個階段讓我想到小時候剛學會騎自行車,心裡歡喜得不得了,有一次竟然忘乎所以,豪情萬丈般地撒開手把子想讓車子自己保持平衡,結果一下子連人帶車就扎到路邊土溝里去了。此時其實就是個「半桶水」階段,摸著了門檻但切勿得意忘形,還是扎紮實實跟著書本或計劃學基礎為妙。


第三階段:瓶頸期

基礎的內容掌握了,積累的困惑又呈現出了越來越多的趨勢。因為我已經不滿足溫飽,想做得更好了。這就是往更高層次發展過程中會遇到的障礙,一種「書我都讀完了也理解了,但就是在實踐中感到無從下手」的感覺。想要進一步提升自己,基本也就是靠「繼續學習深入的知識」「不斷嘗試/實踐去解決問題」這兩個方式並重了。如果你完成了第一個翻頁控制項,是會有不小的成就感的。隨著一方面博覽群書、另一方面不斷勇於解決問題,這個瓶頸期就會在不知不覺中慢慢地度過去。

這個瓶頸期是比較磨人的,因為周期比較長,沒個幾年功夫過不去,三五年一小成,十年八年一大成。但這個過程又是最關鍵的階段,在這裡學到的、掌握到的都是行走江湖的真功夫。而且經歷了這個過程,就基本能把程序員分出個三六九等來。


第四階段:自由期

苦盡甘來後發現自己已經到了一個相當高度了。一方面經驗積累得很豐富,另一方面能做到觸類旁通。在這個階段你再學新知識、探索新方向,其實都能進展得比較順利。此時的你厚積薄發,打通任督二脈,原力生生不息。

這個階段基本不會有什麼困惑,而且也更能主動式學習及洞察事物趨勢。一年學個兩門語言不在話下。愛學啥學啥。但如果要深度運用新知識,則仍有一個小周期:進展期-&>瓶頸期-&>自由期,只是周期縮短了不少,再也不會像第一次蛻變過程那般痛苦不堪了。

到達這個階段可不容易,可能之前你早已摔得遍體鱗傷了......


其他

階段和過程擺在那兒,但要成就一名傑出的程序員、工程師、架構師甚至管理者、創業者,都需要個人具備一些優秀特質:

  1. 能夠沉浸其中,「做一行愛一行」,也就是通俗意義上的「興趣」;
  2. 熟稔總結之道。我一般喜歡聯想,比如這個內容書上是這麼講的,但再延伸一下問題應該怎麼解決呢?或者把模糊之處,自己用文字和代碼把它展開,甚至封裝起來進一步抽象。把這些方方面面的問題點、難點逐個突破,一點一滴地抽象成自己的知識庫、工具庫,一定程度之後各種現實問題幾乎都能從中挑出答案;
  3. 不滿足現狀。程序能跑了,但能跑得更好嗎?代碼實現能更簡潔優雅些嗎?就算是生產環境你不能隨意更改,你也應該在自己的環境或測試環境中去嘗試改進代碼——得出的經驗教訓都是你自己的收穫。而且只有不滿足現狀,你才更可能去主動式思考與學習;
  4. 周邊知識的探索,演算法、架構模式、設計模式、語言/技術新版本、新概念/新架構等等,不要覺得累。一旦你覺得累你就差不多走不遠了;
  5. 充分認識到英語的重要性——這個已經不想多說了;
  6. 鍛煉身體——比如我現在學習武當太極拳;有一門其他愛好——比如我現在學習武當太極拳。

感覺自己其實也有蠻多欠缺之處,還需要繼續加油努力。但無論多麼模糊,我都始終堅信一點:「無他,但手熟爾」。要堅持這點之前,你還得時刻提醒自己:「你一個砍柴的,他是放羊的,你和他聊了一天,他的羊全吃飽了,你的柴呢?」

全文在我的知乎專欄:作為一個程序員的學習思考 - 知乎專欄


接受時間的因素。因為你畢竟才大學畢業一年。

好久前在公司做項目的時候,我對直屬部門領導特別崇拜。這個情況被公司老大知曉後,他說了一句話,他比你多吃這麼多年飯,才比你牛逼這麼一點。值得你這麼崇拜嗎?

公司老大也是做技術出身的。我在他面前滔滔不絕表達我對那個部門領導的崇拜之情的時候,他說的。

承認時間的因素,心態就會平和。承認時間的因素,就會客觀看待差距。承認時間的因素,就懂得小步快進的道理。承認時間的因素,經過時間積累的高度就不在比我年輕人面前裝逼。更不會和年輕人搶女朋友。

老大就是老大。這句話值得我一生去銘記。

真事,當時還寫了日記。

********************************************更新**********************************************

接受時間的因素,是讓自己內心平和,更好專註在具體的實際重要的事情。可不是讓你放鬆的啊。這是我的教訓,說出來都是淚。現在感覺時間有點緊迫了,拼盡全力還能趕上下一個風口。


題主的問題是
感覺技術提高很慢,怎麼安撫浮躁的情緒?

所以這個問題本質上不是一個技術問題,而是一個心理問題

從十一假期回來之後,我開始健身,每天跑完步都去量體重,但是效果很不明顯。我問朋友跑步是不是確實能減肥,他說可以,你連續跑兩周再去稱

學習也同樣是個漸進不易察覺的過程,以或者為單位很難看到改變。不妨去看一下自己一兩個月前的代碼,相信能夠看到自己的進步。

雖然都說前端繁雜,但其實前端的水並不是很深,可能用不到兩年就能把基本的知識和理論都掌握。這就是一個聞道有先後的問題,無論先學哪個,後學哪個,知識總量一定等於時間乘以單位時間效率。

而關於「新名詞焦慮」的問題,在另外的回答中也說到過。當你掌握的知識越多,能夠看到的未知就越多,這個問題是每個人都必然會面對的。當我們從「不知道自己不知道」過渡到「知道自己不知道」的狀態時,就會有這樣的焦慮,伴隨著迷茫持續學習,通過「不知道自己知道」這個階段,最終才能到達「知道自己知道」,從而不再為此焦慮。

對於新技術的態度,以需求而不是技術點來看待它們。從工作中找到不便之處,或者想做一個新的好玩的東西,以此來驅動自己。比如我最近要做一個手機上的單頁應用,就想用vue2.0來玩一下,新技術不是負擔,而是在已有知識體系上的錦上添花。

不以掌握了多少知識,而以能夠用現有知識在有限時間內做出什麼樣的項目作為對自己的認知標準,會更容易看清發展的道路。


分享下個人學習方法。
一般我學一個技術,會去試著寫一個小項目,然後把代碼放github方便自己以後複習。
1.學html,css,自己寫幾個靜態網站,比如淘寶首頁,知乎首頁都可以。
2.學js,先寫表單驗證的簡單功能,後面想接觸canvas這塊的api,寫了人機對戰五子棋,愛心魚這種html5小遊戲
3.學jQuery,自己看完api之後,寫了jQuery的幾個插件,比如表單驗證,圖片畫廊,輪播圖
4.深入學習js,看了《javascript權威指南》,《javascript高級程序設計》,《javascript 框架設計》,再做了牛客網和其他一些網站的js筆試題,一般js的問題大概都清楚了。(牛客網沒給廣告費)
5.後端,自己的社團用django,於是自己就搗鼓起來,python學習看的是廖雪峰老師的博客,之後再專門看了一些深入的東西(metaclass,type之類),項目練習寫的是博客系統,一般寫完,大概都會用了。後面自己不斷摸索和看別人github代碼,會學到一些簡潔的方法,比如會封裝指令,自定義forms驗證方法,許可權機制,中間件的封裝,不過都是有需求的時候再去學。
6.單頁應用,接觸了vue和react,vue的單頁應用寫的是學生管理系統(web作業)和帶購物車的簡單商城(一個校內比賽要求做的,靠這個無恥拿了獎),單頁應用技術棧用的是,前端:vue+vue-router+vue-resource+vuex+element-ui,後端:express+nodejs+mongodb(其實你學會一個後端框架後,第二個框架會非常快)
react的話,我大部分是fork別人代碼來看,也看得懂,不過因為沒大量寫過react代碼,所以不太敢說我很懂react。
7.我知道,肯定有一些人說,不能只練術啊,也要練道。其實這方面的學習,我很推薦自己買本書看,再然後做面試題,適合計算機網路(聽課真的會睡著),操作系統。你問這些課重要嗎,肯定重要,但是聽課很無聊,效率也低,自己買書快速看(一般會抓不住重點),然後做筆試題(為了抓住重點),對於初級程序員來說,會碰到這些問題,一般是在筆試中,所以也就夠了,以後遇到此類問題再深入學習就行。
數據結構:當然得老實刷oj,leetcode,大公司面試還是要用的。
編譯原理:自己實現個小型編譯器就行,就搞編譯器的前端,後端部分水太深,不往這條路走的不用花太多精力

總結一下以上:實踐性強的,自己寫代碼,用在自己的side project上,看文檔簡單,用的時候肯定會踩很多坑;理論性強的,看書,刷筆試題,前期暫時不花太多精力。
最後,有技術熱情的,可以不斷嘗試造輪子,不管前端,後端,中間件,什麼的,寫這些的時候,自己對面向對象和設計模式的理解會更上一層樓。


要多快?我下面的天天被我催著學,都嫌快。。。


謝邀,題主沒有添加更多問題背景信息,在這裡我只能籠統地回答:請給自己定一個具體的的,近期內可達到的,會給自己帶來滿足感的...小目標。

知道為什麼打遊戲那麼爽,過了一關還想過第二關,玩的過程中那麼專註嗎?

By the way,我最近開了一個專欄「Node快閃」 https://zhuanlan.zhihu.com/nodeflash,專門推出一些容易上手的實戰練習,每個不超過15分鐘,還提供全部源代碼,浮躁的時候可以試一個。


每日應該三省其身。


照鏡子,問自已:

1。幾套房了?

2。女朋友在哪裡?

3。還浮躁嗎?


如果不浮躁了,就去好好學習吧。

如果還是浮躁,就繼續問。


樓主提到了最開始學習PHP時,提升很快,而現在卻感覺不然的窘境。
這種情況我或多或少也遇到過,但仔細想想卻很奇怪,為什麼經驗的提升反而帶來了煩躁呢?

原來我有這麼多還不會、什麼技術學習路線比較「有前途」、學那些基本功是否有必要。。。種種類似的問題。

剛剛進入一個行業總是會有沉澱期的,怎麼能把寶貴的時間浪費在煩躁上呢?

既然有不會的東西,那就一條條的列出來有什麼不會的,一條條的努力攻破。
這個 repo 在前段時間很出名。jwasham/google-interview-university

這位仁兄給自己定下了未來做一名Googler的目標,他既沒有煩躁自己曾經的不給力,也沒有抱怨google面試的高門檻,而是列出了所有他需要準備的知識點(順便還列出了非面試必須的CS通用知識點),並在努力預備著數個月後的面試。

如果,我們覺得CSS不會,那,是選擇器不會,還是預編譯器(LESS, SASS)不會,還是transition/animation 不懂? 不懂沒關係,我們一條條的練。
如果,我們覺得Ajax不會,那,是跨域不懂,還是不知道該用哪種手段調Ajax,還是不清楚怎麼樣實現結合Ajax實現lazy-loading?不懂沒關係,我們一個個的具體解決。
如果,我們覺得某一個框架/庫不會,那,是具體API怎麼調用不會,還是不明白這個框架/庫的實現原理不懂。。。。。。。

我們很擅於高估自己一天能做些什麼,卻總是遠遠低估了長期堅持後所能看到的風景。


看題主列的這些無非:語言、框架、資料庫。

作為一個寫了14年程序的老頭子可以很負責任的告訴你:別整這些沒用的。

任何一個卓越的程序員,掌握任何一門語言、任何一個框架、任何一種資料庫系統的時間都不應該超過三天。

因為計算機科學裡面,萬變不離其宗,最核心的只有:演算法、數據結構、體系結構。

深入理解了相關的核心原理、思想以及常見系統以後,你看什麼新玩意都應該能夠瞬間抓住本質,吸收理解並且運用自如。

如果你想成為行業裡面的箇中好手或者頂尖專家,可以多關註:硬體架構、操作系統原理、編譯原理、分散式系統。

這些能讓你真正深刻理解計算機科學的核心。而其他任何東西、知識,都是從這些裡面派生出來的。而且這些,說實話,魅力無窮,比其它東西有趣多了。

除此以外,一個最卓越的程序員、或者工程師吧,並不是因為技術最好,而是因為有領導能力,以及對所在行業的深刻見地。

比如如果你在移動互聯網領域,那麼卓越的程序員是這樣的:

- 能夠充當半個產品經理,站在產品的層面思考問題、設計程序。能夠與產品、質量部門出色的完成溝通。

- 優秀的領導能力。能夠凝結團隊力量,獲得團隊的肯定與支持,確定技術方向。領導能力並不是說你一定是經理或者老闆,而是在團隊中,大家認可你的技術實力以及為人,自然而然的願意聽你的。

- 對移動互聯網行業特點、趨勢有深刻的理解。知道競爭對手的優勢劣勢,清楚自家產品的價值和業務流。

行業經驗這個事情,太重要了。計算機說到底只是工具,離不開具體的行業應用。所以熟悉具體行業又精通計算機的人,才是最或缺的複合型人才。

----------------------------

以上這些很可能題主早都已經了解了,那就當我廢話了吧。

再來聊聊感覺進步很慢這件事。

在我的職業生涯裡面,也無數次感覺進步很慢,碰到了上升的瓶頸。怎麼回事呢?

其實,學習任何東西都跟練長跑一樣,跑到某個公里數的時候,你會精疲力盡感到再也跑不下去了。這恰恰是你的身體極限快要被突破的時候。此時,堅持下去,再慢再難也堅持下去。

很快你會發現步子開始輕盈了,前進的速度也變快了。那麼恭喜你突破了現在的瓶頸,朝下一個極限出發吧。

-------------------------------

補充下回答:

看到評論裡面有些朋友還在糾結框架幾天掌握的問題,請不要太較真了。每個人對框架的應用程度不同,以我個人的應用程度和體驗來看,三天足夠了。

而且我說的三天,不同人學習效率、空閑時間、上手速度、基礎和經驗、應用需求都不一樣,真的沒辦法比較。

有的人可以全神貫注、廢寢忘食,排除一切干擾,三天學會一個新東西也不是什麼奇怪的事情。有的人擠不出時間,自己本來忙的就不可開交,注意力沒辦法集中,學習效率可想而知。

所以請明白我的重點,是不要花過多時間精力在追逐新語言、新框架上。這些都是表面的東西,況且現在的新框架層出不窮,三天兩頭就換一撥新潮流、新的技術棧,幾乎已經淪為了某些群體個人喜好、個人崇拜的玩具,我認為對於想踏踏實實掌握計算機科學精髓的人來說,並不值得花過多時間追逐。

作為卓越的程序員,首先看清楚方向,弄明白技巧、技能、思想之間的差別以及孰輕孰重,然後就是多一點點堅持,並不需要多少特別的技術上的指導,我認為已經足夠了。


謝邀 !


實名反對高票回答!


並不是否定Elvic Liang的回答內容的正確性。我也知道編程就是演算法+數據結構。可道理就好像我追求崇高的共產主義信仰一定能夠獲得平安喜樂,但眼前仍然要吃飽每一頓飯一樣。


題主提到的這些技術棧和框架庫和我大學時學的簡直一毛一樣。我也是一路從PHP/JavaScript/jQuery/Mysql/smarty/ThinkPHP等等學過來的。


TL;DR:學習一個框架/工具/庫的最短路徑

  1. 首先英語要好
  2. 去看官網的文檔
  3. 去看別人運用這個框架/工具/庫開發的程序代碼
  4. 自己嘗試運用它寫一些小demo
  5. 在實際工作中運用它
  6. 寫一些自己學習它的心得體會,甚至是教別人使用的教程
  7. 參與這個框架/工具/庫的討論,開源項目貢獻等

P.S. TL;DR的意思是如果你覺得這篇回答太長的話讀到這裡就可以不看了,而且下面的這些內容主要作用是安撫題主情緒,告訴他這個世界上也有和他有過類似經歷的人。

我原本是一文藝青年,之前只有課上學的一點點C++的知識。大二一次偶然的機會,在人人網上看到學校Web實驗室的師兄發布舉辦seminar的狀態。同寢室有一個高中就開始參加NOI的同學拉上我就一起去了。


seminar上講了Ubuntu,講了HTML/CSS/JS,怎麼登陸學院網站的後台修改內容,還有一些開源精神之類的扯淡。臨結束的時候師兄還給我們展示了一個他用JS寫的塔防小遊戲。能自己寫遊戲一直是我兒時以來的夢想,於是乎就被勾引上這條不歸路。


參加完討論會的第二周,師兄把我們叫到了實驗室,指著地上的一台電腦主機說:

這是我剛買來的伺服器。

伺服器是空的,沒有預裝的操作系統。在這之前我僅能夠熟練安裝各個版本的Windows操作系統,幫女同學修修電腦而已。


在只會拼寫ubontu的情況下,我和我同學開始了凌辱伺服器之旅。最後在一個不好意思說出名字的搜索引擎的幫助下找到了手把手的圖文教程。裝好之後看到游標一閃一閃的命令行感動得簡直要哭出來。


後來很自然的就裝上了LAMP,直接用tasksel設置一下mysql的密碼就搞定了。其實到了這一步我都不能說會編程,充其量只是會用命令行的軟體而已。


然後就開始跟著w3school的教程學php,五年前還沒有這麼多的MOOC,也沒有這麼多的培訓班。很快我就能用echo在網頁裡面打出Hello,world!了。


我竟然能在瀏覽器里看到自己寫的網頁!這讓我更加堅定不移地在這條不歸路上走下去。後來學校又開了資料庫的課,學了一點點SQL,試圖研究過怎麼JOIN,怎麼多表查詢,怎麼做視圖。後來寫小應用的時候才發現,90%的時間都可以SELECT *出來然後挑需要的用就好。


緊接著又開了一門叫做Web程序設計的課,我本以為這簡直是為我量身定做的。結果老師講課用C#開發網站,在VS裡面拖組件,數據查詢用LINQ,搞得我整個人都不好了。雖然我沒有任何黑C#的意思,可是整個學期我確實什麼都沒學。


期末考試是一個大作業,交一個自己設計開發的網站。結果我和我們組的同學在考試前一天上午才拿Wordpress和爬蟲程序搭了一個新聞網站,然後考試拿到了滿分。這也讓我深深地體會了為什麼PHP是全世界最好的語言。


這次經歷也讓我深深愛上了Wordpress,慢慢地也開始給Wordpress寫寫主題或插件什麼的。可是做出來的東西總是不接地氣,不符合學院領導和學校部門的審美,可他們卻是實際上整天找我做事的人。


然後就開始研究國內的一些建站系統,用過DedeCMS/Discuz等等。可是逐漸的接觸到的一些需求已經不能通過現成的建站系統實現了。


後來實驗室接到了一個開發檔案管理系統的項目,最早選型選到了一個用Zend Framework開發的CMS,這個CMS也是歪果仁開發的,也有很多不接地氣的地方。ZF這個框架很臃腫,用起來很痛苦,和後來無比優雅的Laravel簡直不能比。不過通過使用ZF我了解到了原來世界上還有框架這種東西,原來很多基礎的函數功能是不需要自己寫的,原來還有一種叫做MVC的設計模式。


由於ZF用起來太過痛苦,我就開始尋找別的合適的框架,很快就找到了ThinkPHP,真的是沒想到國內還有這麼優秀的框架。用起來非常簡單,看完文檔就能直接上手,而且最重要的是我終於看到有中文文檔的框架了!


TP我用了非常久,做作業用,開發個人項目用,後來去實習的公司也在用TP,雖然我的開發崗是前端,可實際上當時除了資料庫不用我管以外,後台的業務邏輯、前端的交互、UI的設計、甚至產品要添加什麼新的功能基本都是我一個人搞定。創業小公司都是這樣,即使不是全棧也得把你逼成全棧(現在全棧這個詞就好像罵人一樣)。


實習的那段時間剛剛好angular1發布了,數據雙向綁定、前端路由、交互可以做到視圖內容實時更新。才了解到原來還有一種MVVM結構的框架。在我關注ng的時候周圍的同學都是不了解的,因為當時基本沒有什麼中文的教程,更別提中文的文檔,唯一的學習資料就只有官網寫的反人類的文檔,還好Github上有一些用ng寫的開源程序可以參考。


然後我就試著用angular1寫了不需要刷新的單頁面博客程序,後來也在工作中解決具體的業務需求。


我也寫過很多博客,以前不會編程還是個文藝青年的時候在空間里寫寫詩寫寫歌,後來就寫一些簡單的教程,或者是安利某些比較好用的電腦軟體和移動應用。一般我自己學會使用某個東西之後,也會寫一篇教程來教別人怎麼使用。畢竟學習的最高層次就是教授嘛。

圖片來自於網路

然而到現在我也不敢說自己會編程。充其量只是會用一些用代碼操作的軟體而已。不過我想這也是真正學會編程的必經之路吧。


以上。


編程雖然「枯燥」辛苦,但如果你真的感興趣,便能在這過程中體會到其中的樂趣,並且獲得可觀的回報;

要寫出漂亮代碼,既要有廣度(例如題目提到的要學各種語言),又要有深度(對主語言的技術很「精通」)。


首先,興趣

如果根本沒興趣,也該好好思考編程是不是你喜歡的事業,或許更有前(錢)途的職業在等著你。

沒有興趣,就難於靜下心來,耐得住寂寞、遠離浮躁,更難於跨過工作中的種種挑戰。


其次,紮實基礎、融會貫通

任何事情都需要一個過程,編程也一樣,不要急功近利。

現在的軟體開發封裝的層次已經非常高了,只要單純學會一門編程語言就能完成項目任務了。但隨著你做的越來越深,很多基礎的問題就會浮現出來,很多底層的原理開始想不通。

大學裡學過計算機組成原理、操作系統、編譯原理、計算機網路、資料庫基礎等。要是把這些基礎知識融為一體,打通任督二脈,那恭喜,工作幾年之後你會充分體會到了這些基礎對你的幫助。

舉個例子:做網路編程,需對TCP/IP要有更深入的了解(當然你不去了解也能開發Http),搞清楚TCP連接的幾種狀態轉換對我們調試網路程序非常有幫助,解決很多問題。當遇到高並發下,網路、網卡、CPU、內存都不是瓶頸的時候,觀察下網路連接的狀態,可能就是連接數不夠了,則需要對TCP參數調優。

例如工作中當你吃到Java集合(LinkedList,LinkedHashMap,HashMap,TreeMap)的連環炮就知道《數據結構》的重要性了(有些面試時,光是這些知識可以聊到跪)。


最後,技術服人

可以看看公司的「大牛」,不是高高在上,也不是脫離代碼只說不做的人。

他們首先是一名優秀的研發人員,隨時能夠編寫項目或產品中的核心功能,遇到各種瓶頸它能快速定位,解決問題,指導大家完成它,做到技術服人。有了技術影響力,你在團隊發出的聲音才會被傾聽,被尊重。


所以要成為有影響力的程序員且有錢途的程序員,這是個過程,靜下心來,遠離浮躁,一點一滴的積累起你在別人心目中的形象,最終大家會給你貼上一個標籤:大牛。


@Elvic Liang
我想說你這個答案很扯,作為一個全棧,一門語言拿來可以寫的話不用三天,不用一天,拿著api,看看語法,就完全可以直接寫了,但是一門語言的精髓三天、一個月、一年,都是完全無法全部掌握的,你說的框架、語言、資料庫,每一樣學一輩子都學不完。
而且我就不信你從來沒走過題主類似的路,從出生開始就三天一個語言,而不是站在你現在能力的基礎上說這些話。
我覺得你只是在顯擺(zhuang bi)而已。
框架不是沒用的,語言不是沒用的,資料庫不是沒用的,它們都是一個時代的人思想的積累和技術沉澱。
反而對於一個初學者,演算法、數據結構、體系結構才是不那麼必要的,特別是一開始就沒有掌握這些知識的人,看這些更是容易誤解其內部原理,更是和實際項目聯繫不起來,造成一種似懂非懂的尷尬境地。
-------下面是對題主的建議-------
1、對於題主,你是邊工作邊學習,如果工作允許,你要做的就是不斷的往你的工作中運用你想了解的新技術,如果時間或者項目不允許,你就給公司做一套,自己用需要學的技術再做一套,這裡面想說的就是,學習要和真實需求密不可分,才能夠學的更快,理解的更深。
2、老牌程序員是不分前後端的,由於技術太冗雜,所以才分了前後端,你現在基本上是php後端這麼個狀態,而你要學的不過是前端技術罷了,細分的技術比你說的要多很多,但是他們都是共通的,都叫前端技術,你把他們分出來一個一個說就是說明你現在把他想的很複雜,沒有入門,這種情況會在你的第一個全棧項目中迎刃而解。
3、找一個力所能及的開源項目並參與開發,以你現在的姿勢水平很難找到一個可以開發的項目,實在開發不了其實還是可以去看的,你的代碼規範和國際接軌,並且參與合作式開發能讓你懂很多一個程序員該懂的事情。
最後的最後當你開始能夠(不管什麼需求都能夠通過各種彆扭的方法做出來的時候),語言將不是你的瓶頸,那些思想演算法和架構才會顯現出來,這時這些才會是你要去想的事情。


我建議題主去參加各種比較屌的公司的面試 ,然後面試的時候和應聘公司的研發總監聊著聊著你就發現你的心就靜下來了,然後你會發現,卧槽,我還有這麼多不會不熟悉的東西,然後題主就會有一條學習之路再繼續走下去 。本人親試,屢試不爽。我一覺的自己屌的時候,立馬投簡歷記住,一定要找點比較厲害的人聊,不然你會發現,卧槽,我比他還叼,那豈不是要飄起來了?


我認為你跟我在大學時一樣, 謀得一份穩定,但是技術含量不高的差事。
我在一個技術社團里當會長, 做過一些項目, 也都是認為用PHP寫寫業務就好了, 沒什麼難的問題。
但是實際上, 你可以自己深入考慮問題。 為什麼要用PHP?我用其他語言有什麼優劣點呢?
一門語言是可以影響思維的, 起碼可以讓你學到不同的範式, 設計方法。 所以我認為有C的基礎,用Python,Ruby,Golang之類的比PHP要好-_-

資料庫為什麼用MySql?NOSql適合我的場景嗎? 他們的優缺點是?
我的Sql語句寫得效率高嗎? 項目里不太順心的地方都儘力去改去優化,而不是能跑就行了嗎?
能不能試著用Docker來讓新同事們都能不再搭建開發環境?伺服器還有什麼地方可以優化?
能不能試著寫測試,搭建CI?等等。

我認識一個工作經驗有10年的朋友, 第一次見面(面試)時, 他把我的github的項目都翻了一遍,便馬上發現我對小項目不寫測試,懶得抽象函數,寫麵條代碼等問題。如YongHaoWu/NeteaseCloudMusicFlac
他說, 別以為是小項目就不上心。

現在我深以為然, 以前的一個項目用來參加畢業設計, 伺服器掛了導致資料庫要手動建(以前懶得寫Sql語句建庫),環境換了要逐個去換配置。要是用心一點寫,抽象優化,也不會落到這個地步。

共勉之:P


推薦閱讀:

TAG:前端開發 | 程序員 | JavaScript | IT行業 | PHP開發 |