補充下背景,題主大學畢業一年。在小型網路公司謀得一份穩定,但是技術含量不高的差事。因工作需要接觸學習PHP(之前大學勉強接觸了點C語言)。剛開始學習時感覺很有成就感,學習進步迅速。但是當學完面向對象,然後又發現學習PHP還要學js, jQuery, Ajax. smarty,think PHP. HTML. css. MySQL.等等等等……,最近感覺進步超級慢,信心受挫。
回覆內容:
謝邀 !
實名反對高票回答!
並不是否定Elvic Liang的回答內容的正確性。我也知道程式設計就是演算法+資料結構。可道理就好像我追求崇高的共產主義信仰一定能夠獲得平安喜樂,但眼前仍然要吃飽每一餐一樣。
題主提到的這些技術堆疊和框架庫和我大學時學的簡直一毛一樣。我也是一路從PHP/JavaScript/jQuery/Mysql/smarty/ThinkPHP等等學過來的。
TL;DR:學習一個框架/工具/庫的最短路徑
- 首先英語要好
- 去看官網的文檔
- 去看別人運用這個框架/紙/別人開發的程式碼工具/庫
自己嘗試運用它寫一些小demo- 在實際工作中運用它
- 寫一些自己學習它的心得體會,甚至是教別人使用的教程
- 參與這個框架/工具/庫的討論,開源專案貢獻等等
-
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寫了不需要刷新的單頁面博客程序,後來也在工作中解決具體的業務需求。
我也寫過很多博客,以前不會編程還是個文藝青年的時候在空間裡寫寫詩寫寫歌,後來就寫一些簡單的教程,或者是安利某些比較好用的電腦軟體和行動應用。一般我自己學會使用某個東西之後,也會寫一篇教學來教別人怎麼使用。畢竟學習的最高層次就是教授嘛。
圖片來自於網路
然而到現在我也不敢說自己會程式設計。充其量只是會用一些用程式碼操作的軟體而已。不過我想這也是真正學會程式設計的必經之路吧。
以上。
@Elvic Liang
我想說你這個答案很扯,作為一個全棧,一門語言拿來可以寫的話不用三天,不用一天,拿著api,看看語法,就完全可以直接寫了,但是一門語言的精髓三天、一個月、一年,都是完全無法全部掌握的,你說的框架、語言、資料庫,每一樣學一輩子都學不完。
而且我就不信你從來沒走過題主類似的路,從出生開始就三天一個語言,而不是站在你現在能力的基礎上說這些話。
我覺得你只是在顯擺(zhuang bi)而已。
框架不是沒用的,語言不是沒用的,資料庫不是沒用的,它們都是一個時代的人思想的累積和技術沉澱。 反而對於一個初學者,演算法、資料結構、體系結構才是不那麼必要的,特別是一開始就沒有掌握這些知識的人,看這些更是容易誤解其內部原理,更是和實際項目聯繫不起來,造成一種似懂非懂的尷尬境地。
-------下面是對題主的建議-------
1、對於題主,你是邊工作邊學習,如果工作允許,你要做的就是不斷的往你的工作中運用你想了解的新技術,如果時間或專案不允許,你就為公司做一套,自己用需要學的技術再做一套,這裡面想說的就是,
學習要和真實需求密不可分,才能夠學的更快,理解的更深。 2、老牌程式設計師是不分前後端的,由於技術太冗餘,所以才分了前後端,你現在基本上是php後端這麼狀態,而你要學的不過是前端技術罷了,細分的技術比你說的多很多,但是他們都是共通的,都叫前端技術,你把他們分出來一個一個說就是說明你現在把他想的很複雜,沒有入門,這種情況會在你的第一個全端項目中迎刃而解。
3、
找一個力所能及的開源專案並參與開發,以你現在的姿勢水平很難找到一個可以開發的項目,實在開發不了其實還是可以去看的,你的代碼規範和國際接軌,並且參與合作式開發能讓你懂很多程式設計師該懂的事情。
最後的最後當你開始能夠(不管什麼需求都能夠透過各種彆扭的方法做出來的時候),語言將不是你的瓶頸,那些思想演算法和架構才會顯現出來,這時這些才會是你要去想的事情。
玩了一年的unity,進步的也很慢,而且覺得之前寫的東西都是渣渣
雖然有10幾年的c++經驗,圖形引擎經驗和n個小遊戲經驗,大概熟悉七八種語言,但真的做一個中型獨立遊戲,才發現坑有多大
很多人一提到技術就喜歡誇誇其談,恨不得把技術說成是黃石公傳他的秘術
其實技術是什麼?不過是在前人的肩膀上去攀登一個你想去的高峰的梯子,永遠不要為了技術而技術,而要問自己想去哪裡,想做什麼,再去學習相應的知識,邊做邊學永遠是最有意義的
我的興趣是做遊戲,我們就拿遊戲舉例,中國開發遊戲的大牛,一抓都快一大把了,為啥做出來的遊戲大多數還是《範偉打天下》?為啥沒有幾個遊戲讓你眼前一亮?連fc上的冒險島1都不如? (講超級瑪莉屬於欺負人了)
難道是他們基礎知識儲備不足?
因為所謂「技術」只是他們裝逼的本錢
而不是他們創造一個真的有趣的東西的工具
一切技術最後都會過時,一切大牛最後都會死去,所以不用問自己進步的快不快,因為快慢沒有什麼意義
沒有什麼榮華富貴在前面等你,你焦躁什麼呢?
技術的本質是:解決問題的一種方法
沒有足夠的時間,試錯機會和自己的思考,你不過是背下來了一些前人的經驗罷了,遇到了新的問題,你連找答案的方法都不知道
做自己喜歡的東西,並且把他做好,時間足夠長的時候,總是有所成的
以你現在的情況為例,不要問自己學了多少種知識,現在就搭建一個你心目中的網站,途中你自然會知道自己缺少什麼了
題主的問題是
感覺技術提高很慢,怎麼安撫浮躁的情緒? 所以這個問題本質上不是一個
技術問題,而是一個
心理問題。
從十一假期回來之後,我開始健身,每天跑完步都去量體重,但是效果很不明顯。我問朋友跑步是不是確實能減肥,他說可以,你
連續跑兩週再去稱。
學習也同樣是個
漸進而
不易察覺的過程,以
天或
週為單位很難看到改變。不妨去看一下自己
一兩個月前的程式碼,相信能夠看到自己的進步。
雖然都說前端繁雜,但其實前端的水並不是很深,可能用不到兩年就能把基本的知識和理論都掌握。這就是一個
聞道有先後的問題,無論先學哪個,後學哪個,知識總量一定等於時間乘以單位時間效率。
而關於「
新名詞焦慮」的問題,在另外的回答中也說到過。當你掌握的
知識越多,能夠看到的
未知就越多,這個問題是每個人都
必然會面對的。當我們從「
不知道自己不知道」過渡到「
知道自己不知道」的狀態時,就會有這樣的焦慮,伴隨著迷茫持續學習,透過「
不知道自己知道」這個階段,最終才能到達“
知道自己知道”,從而不再為此焦慮。
對於新技術的態度,以
需求而不是
技術點來看待它們。從工作中找到不便之處,或想做一個新的好玩的東西,以此來驅動自己。例如我最近要做一個手機上的單頁應用,就想用vue2.0來玩一下,新技術不是負擔,而是在已有知識體系上的錦上添花。
不以掌握了多少知識,而以能夠用
現有知識在有限時間內做出什麼樣的項目作為對自己的認知標準,會更容易看清發展的道路。
謝邀,題主沒有添加更多問題背景信息,在這裡我只能籠統地回答:請給自己定一個具體的,近期內可達到的,會給自己帶來滿足感的...小目標。
知道為什麼打遊戲那麼爽,過了一關還想過第二關,玩的過程中那麼專注嗎?
By the way,我最近開了一個專欄「Node快閃」
https://zhuanlan.zhihu.com/nodeflash,專門推出一些容易上手的實戰,每個不上手的實戰超過15分鐘,還提供全部原始碼,浮躁的時候可以試一個。
停,你幹嘛要學那麼多
且不說SQL應該是大學課程,這你拉下了自己的鍋
CSS,HTML這種東西,難道不是用的時候對著手冊開發,用個3個月自然就會了嗎
你專門去學他作甚?學了用不上,還不是三個月就忘光?
JQuery不就是一個工具,本來就是為了方便使用的,為什麼會需要專門學
至於ajax只是一個API,這東西一下午就該看完了吧?
至於smarty,think PHP這又是什麼鬼,你現階段用的著這些東西嗎?為什麼一定要一口吃個大胖子?
最後送你一句話,實踐出真知,任何技術,本質上最終目的是應用。你之所以覺得進步慢,說穿了就是你在學一大堆你用不著的東西,無法和實踐結合,當然進步慢。待在PHP專案裡,就專心學好PHP,這才是技術精研之道,當你發現問題產生需求時,然後找到一個對你要解決問題很有幫助的新技術時,自然就不會覺得累,而且很快就能學好了
說起來,剛好翻到上面有個答主……說……
「這是在這時,我大概就遇上了自己的第一次瓶頸,我處在HTML結構混亂,命名不規範,CSS還需要不斷猜測某個地方到底是使用padding還是margin的這樣一個階段。程式碼。
這很難懂嗎?
這很難懂嗎?
看題主列的這些無非:語言、框架、資料庫。
任何一個卓越的程式設計師,掌握任何一門語言、任何一個框架、任何一種資料庫系統的時間都不應該超過三天。
因為電腦科學裡面,萬變不離其宗,最核心的只有:演算法、資料結構、體系結構。
深入理解了相關的核心原理、思想以及常見系統以後,你看什麼新玩意都應該能夠瞬間抓住本質,吸收理解並且運用自如。
如果你想成為業界的個中好手或頂尖專家,可以多關注:硬體架構、作業系統原理、編譯原理、分散式系統。
這些能讓你真正深刻理解電腦科學的核心。而其他任何東西、知識,都是從這些裡面衍生出來的。而且這些,說實話,魅力無窮,比其它東西有趣多了。
除此以外,一個最卓越的程式設計師、或者工程師吧,並不是因為技術最好,而是因為有領導能力,以及對所在產業的深刻見地。
例如如果你在行動互聯網領域,那麼卓越的程式設計師是這樣的:
- 能夠充當半個產品經理,站在產品的層面思考問題、設計程式。能夠與產品、品質部門優異的完成溝通。
- 優秀的領導能力。能夠凝結團隊力量,獲得團隊的肯定與支持,確定技術方向。領導能力並不是說你一定是經理或老闆,而是在團隊中,大家認可你的技術實力以及為人,自然而然的願意聽你的。
- 對行動互聯網產業特徵、趨勢有深刻的理解。知道競爭對手的優勢劣勢,清楚自家產品的價值和業務流。
產業經驗這個事情,太重要了。計算機說到底只是工具,離不開具體的產業應用。所以熟悉具體行業又精通電腦的人,才是最或缺乏的複合型人才。
----------------------------
以上這些很可能題主早都已經了解了,那就當我廢話了吧。
再來聊聊感覺進步很慢這件事。
在我的職業生涯裡面,也無數次感覺進步很慢,碰到了上升的瓶頸。怎麼回事呢?
其實,學習任何東西都跟練長跑一樣,跑到某個公里數的時候,你會精疲力盡感到再也跑不下去了。這正是你的身體極限快要被突破的時候。此時,堅持下去,再慢再難也撐下去。
很快你會發現步伐開始輕盈了,前進的速度也變快了。那麼恭喜你突破了現在的瓶頸,就朝下一個極限出發吧。
-------------------------------
補充下回答:
看到評論裡面有些朋友還在糾結框架幾天掌握的問題,請不要太較真了。每個人對框架的應用程度不同,以我個人的應用程度和體驗來看,三天就夠了。
而且我說的三天,不同人學習效率、空閒時間、上手速度、基礎和經驗、應用需求都不一樣,真的沒辦法比較。
有的人可以全神貫注、廢寢忘食,排除一切幹擾,三天學會一個新事物也不是什麼奇怪的事情。有的人擠不出時間,自己本來忙的就不可開交,注意力沒辦法集中,學習效率可想而知。
所以請明白我的重點,是不要花太多時間精力在追逐新語言、新框架上。這些都是表面的東西,況且現在的新框架層出不窮,三天兩頭就換一撥新潮流、新的技術棧,幾乎已經淪為了某些群體個人喜好、個人崇拜的玩具,我認為對於想踏實實掌握電腦科學精髓的人來說,並不值得花太多時間追逐。
作為卓越的程式設計師,首先看清楚方向,弄清楚技巧、技能、思想之間的差別以及孰輕孰重,然後就是多一點點堅持,並不需要多少特別的技術上的指導,我認為已經足夠了。
某高票答案太不靠譜了。
演算法,資料結構,沒人說不重要。但是你非要鼓吹基礎萬能論,那肯定是誤人子弟的。基礎就是基礎,沒有是不行的,只會基礎也是不行的。你的雇主並不是為你的基礎付錢的,你雇主需要的是你的上層應用能力,而不是這些不著邊際的所謂基礎能力。
給題主一點建議。技術學習一定要在使用中學習。
技術不要幹學,很容易陷入半懂不懂的狀況,而且沒有正向回饋,讓你很難有信心深入。最好明確一下,我想做個什麼東西(能夠使用你想學的技術的一個小應用,比如大家經常用來練手的 to do list)。想想這個東西可能用得上哪些內容,粗略學一下然後直接上手做,遇到不會就再查。
不要擔心你做得怎麼樣,邊學邊做肯定很糟糕,但是等你做完,大概就學會是怎麼回事了,以後就可以繼續深入研究下去。
樓主提到了最開始學習PHP時,提升很快,但現在卻感覺不然的窘境。
這種情況我或多或少也遇過,但仔細想想卻很奇怪,為什麼經驗的提升反而帶來了煩躁呢?
原來我有這麼多還不會、什麼技術學習路線比較「有前途」、學那些基本功是否有必要。 。 。種種類似的問題。
剛進入一個行業總是會有沉澱期的,怎麼能把寶貴的時間浪費在煩躁上呢?
既然有不會的東西,那就一條條的列出來有什麼不會的,一條條的努力攻破。
這個 repo 在前段時間很有名。jwasham/google-interview-university
這位仁兄給自己定下了未來做一名Googler的目標,他既沒有煩躁自己曾經的不給力,也沒有抱怨谷歌的高門檻,而是列出了所有他需要準備的知識點(順便還列出了非面試必須的CS通用知識點),並在努力預備著數月後的面試。
如果,我們覺得CSS不會,那,是選擇器不會,還是預編譯器(LESS, SASS)不會,還是transition/animation 不懂? 不懂沒關係,我們一條條的練。
如果,我們覺得Ajax不會,那,是跨域不懂,還是不知道該用哪種手段調Ajax,還是不清楚怎麼樣實現結合Ajax實現lazy-loading?不懂沒關係,我們一個個的具體解決。
如果,我們覺得某一個框架/函式庫不會,那,是具體API怎麼呼叫不會,還是不懂這個框架/函式庫的實作原理不懂。 。 。 。 。 。 。
我們很擅於高估自己一天能做些什麼,卻總是遠遠低估了長期堅持後所能看到的風景。
你學習需要訂定一個明確合理的目標。
不要每種技術都面面俱到,不要去看太厚的書,那浪費時間。
只要能滿足你的需要就行了。
生活不是把自己裝進電腦裡,而是實現自己的想法。