您好,登錄后才能下訂單哦!
首先,世界上沒有最好的程序語言,只有最適合個人程序語言。程序語言本來就只是工具、只是手段,從來都不是重點,重點是:你的目的是什么?你要解決的問題是什么?
假設你今天想要寫一個網頁留言板(這邊只討論后端,不包含前端),那你就不應該用C來寫,因為比起C,php會更適合,很多phper要說了“php是世界上最好的語言”
你可能會問:那nodejs,rails,asp.net…就不適合嗎?
如果你只是單純想寫個網頁留言板,其實上面這些都很適合,挑一個你最喜歡的語言就好
但如果你要解決的問題不一樣,就應該重新思考。例如說,我想要很短的時間的寫個網頁留言板,你就應該用rails,因為rails開發真的超級快,隨便打幾個command,你的網頁就神奇的出現了!
“我想要很潮的網頁留言板!”那你可以考慮Go,Swift,Nodejs等等
再舉個例子,加入你今天想要研究電腦較底層的運作,那么你應該要學C,或是學匯編語言因為比起其他高階語言,這兩種絕對會讓你更了解底層到底在做什么,其實以上這些只是想提醒你:不要為了學語言而學語言。
程序語言只是一個好的解決方案,重點在于最終的目的!重點在于你想要通過程序,達成什么樣的目標,當然如果你真的只是純粹喜歡寫程序,就當我沒說。
為什么要當程序員?
我的理由很簡單:為中華之崛起而寫代碼!我覺得做程序開發讓我很有成就感,只要幾天就可以寫出一個網頁程序員,可以隨時幫自己寫博客系統、幫朋友開發投票網站系統之類或者去程序員客棧www.proginn.com接私活賺些外快等等。盡管早期寫出來的東西可能不怎么樣,但那種從無到有真的是一件非常有成就感的事情。
我永遠忘不了我用VB拉幾個按鈕出來,點下去就可以跑出文字的那瞬間,我有多感動,那是我第一次寫代碼,雖然當時還比較菜,但是“興趣的培養”是每個程序員一生必備的職業興奮劑,下面給單純有興趣或者想轉行程序員的同學一些建議,希望能夠幫到大家。
1.學英文
這個其實上學的時候大家都有在學,只不過個人差異,每個人的水平也都參差不齊。
Q:我該學什么程序語言
A:英文
為什么?因為英文真的很重要!聽說讀寫,至少讀要讀的懂,你才看的懂那些外國的API文件,發生問題的時候,才能去stackoverflow上面發問,說到這里就必須要和大家說一些基本的提問技巧,很多問題為什么很少人愿意回答?例如:我寫了一個網絡通信的程序,想要讓A手機跟B手機可以傳信息,可是按了卻沒反應,怎么辦?我的代碼不夠優雅怎么辦?
一個好的問題,應該言簡意賅,直擊重點,個人覺得應該要包含四點:
1.目的(你的程序要達成什么目的?)
2.手段(你怎么達成你的目的?)
3.錯誤(在什么場景下發生的什么錯誤?)
4.代碼(有排版過的代碼,拜托)
所以將問題改成:
我想要讓A手機跟B手機傳遞信息,我用的是java的socket,可是按下發送時,出現:java.net.SocketException: Connection refused: connect,想請問一下有可能是錯在哪里?
部分代碼:https://gist.github.com/xxxxxx
上面的問題還可以再修正、補充更多細節,但至少比剛開始那個好回答的多,會讓人比較想回答,代碼一定要找適合的地方保存。再回到英文的這個話題上來,英文不好的話,其實國內的資源也很多,但很多新的技術或者人氣旺的地方還是用英文,所以英文好的話不會吃虧,可以運用到更多的資源。
2,google很重要
相信我,google真的要比其他搜索都好用,我經常認為會google就先贏了一半,現在網上資源那么多,有時候出現你不懂的ERROR,完全沒有頭緒怎么辦?最簡單粗暴的方法就是直接google,一堆解決方法就出現了,這個時候不是簡單的復制粘貼,而要去試著理解為什么這么做,一個不會理解代碼的人,只會是一個復制粘貼的機器人,這樣對自己的成長沒有好處,至少要弄清楚兩點:為什么會有這樣的問題、這個解法是如何解決的?關鍵詞的使用非常的重要,比如一些常用的指令一定要學會,例如:inurl:、intitle、filetype等等。
3.學scratch
我聽過這個很多次,但實際接觸才知道真的很好用,這個就是讓你用很簡單、很可視化的方式來寫程序,你只要拖拉幾個拼圖、組合在一起,就可以寫出一只可以動的程序,甚至是一個小游戲!
如何開始學scratch?
如果是我的話,就會google搜尋:scratch教學,或是scratch入門
為什么要學scratch呢?
前面有說到,每種程序語言都有不同的適合的場景,還有一點是,每種程序語言,都有很大部分是相同的,例如說:變數、函式、循環、條件判斷、數組…
當你學C有這些、Javascript有這些、Swift有這些,不管學哪種程序,都會碰到這些最基本的東西,無論是再復雜的程序,都是這些基本的東西組裝而成。
從scratch來學這些基礎有兩個好處
1.不被語法限制
2.可視化
scratch里面你幾乎不用打字,甚至可以看做是拼圖游戲,你就把你想要的東西拼一拼,程序就寫完了,所以你學的是真正的概念,而不是語法。
舉例來說,如果你學C,你就要學:
如果你學python,就會是:
其實我不會python,如果寫錯的話,各位Python大神原諒,但這兩者本質上是一樣的東西,都是循環,只是語法不同而已!
從scratch開始,可以讓你跳脫這些語法,只學那些精髓,你學完之后,看到C的這段就會知道:哦,原來這就是循環呀
第二點,可視化也是很重要的一項,盡管我代碼寫了很多年,我永遠忘不掉,我在循環這個坑卡了多久,尤其時雙重循環,根本就是惡夢!
我知道這邊是1到10的意思,但是第二層為什么會這樣?
為什么這樣就可以印出九九表?
那時候我面對的是冷冰冰的代碼,大概就是:
盡管我可以很輕松從排版跟大括號一眼看出「block」的概念,但十年前的我完全不行,至少覺得這就是天書,可是scratch就不一樣了!它直接用可視化的拼圖的概念,讓你在循環里面可以塞另外一塊拼圖,就可以明白為什么雙重循環會是這樣了!
4.有些指令一定要會(command line操作)
這是什么?對,你沒有看錯,這就是電影里面看起來很帥的,底是全黑的畫面,屏幕上面滿滿的文字,一張圖都沒有,在windows就是cmd,命令提示字元。
在mac就是terminal,終端機,假如你已經對上面介紹的scratch滿熟悉了,那你應該了解程序幾個基本概念,其中一個重要的概念是:寫程序其實就是在對電腦下指令,其實呢,你平常在做的事情,也是在對電腦下指令,但操作系統幫你包裝好了,所以你只要動動手指就可以,例如說你在網頁上按了重新整理。
「我要重新整理」換成程序大概就是:page.refresh();或是:「點了前往google.com的連接」window.open('google.com');(這邊代碼都隨便寫的,但意思有到就好),我們所謂的command line,就如同字面上這樣是個「用文字對電腦下指令」的地方,像是ls,就是list的意思,會把你「現在在的地方」的檔案都顯示出來。
「現在在的地方是哪里?」打pwd,Print Working Directory就會顯示出你現在在「電腦的哪個文件夾底下」
幫大家準備好幾個連接了:
(關鍵字:終端機教學)
OS X Lion 10.7系統基礎教學系列-終端機基礎操作教學
介紹命令行(command-line)界面
Mac OS X Terminal 101:終端使用初級教程
Mac OS X Terminal終端機常用語法教學
為什么要學這個呢?因為工作上很大機會用的到,而且日常生活也很好用,有些功能你用java寫的要死要活,最后才發現原來電腦就有內置指令,我也是最近一年才開始熟悉這些指令的操作,才發現原來內置指令這么好用,給程序開發初學者一些建議,你需要知道這些,并且了解:cd,ls,pwd,touch,mkdir,rm,cat,grep這些指令,還有> >> < |這些符號在干嘛,這樣就很足夠了,想更精進的可以去學怎么寫shell script。
5.學怎么用browser dev tool
chrome,firefox,safari,edge都有一樣的東西,叫做開發者工具,為什么要學會這個呢?因為你可以了解很多東西!日常生活中,你其實一直在接觸網絡的概念,只是你沒發覺而已你平常看到的網頁,其實也只是一堆文字而已,那為什么文字會變成畫面?因為瀏覽器幫你解析,按照一定的規則畫出來,你可以右鍵->檢查,就可以看到你鼠標指的地方本來的文字是什么
dev tool可以講到一堆跟web有關的概念get/post,ajax,status,css,js,html等等,現成的好工具,不用嗎?
6.選你想走的領域精進
假設你上面都有確實做到,你現在應該對程序、對網絡都不會太陌生了,這時候再來學專門的東西,我認為是事半功倍。
為什么?因為原本那些程序基礎你都可以跳過,你要學的只是語法,學程序最重要的應該是「心法、內功」,而不是表面的限制,這樣就算換了一個你從沒看過的程序語言,你也會猜的到它在干嘛。如果你看了這篇文章也想成為一名程序員,這里要提醒大家的是心態一定要正確,所謂咸魚翻身,學會程序開發年薪幾百萬之類的新聞,千萬不要相信,很多這種個例是因為之前已經有某項技能專場,再把專場和程序開發結合起來最終沉淀出來的結果,而大部分沒有任何能力基礎和背景的人比起這些特殊案例,這些新聞你可以選擇忽略,做人最重要的還是腳踏實地。
7.開通個人博客寫經驗
可以開個blog寫寫自己的學習歷程、碰到的困難以及解法等等為什么要寫這個?
第一是加深印象,你解決一個問題下次再碰到時,你還記得怎么解嗎?很多時候踩過的坑會反復踩,代碼有時候過兩三個月會忘掉,但這時候就因為我有寫blog記錄起來,可以查的到以前自己怎么解的。
第二是增加功力,我要怎么知道我真的了解一個東西?
我覺得寫下來,會清楚的認識到自己的能力水平,例如說我今天要寫:git入門教學,寫一寫發現自己不知道rebase在干嘛,我就必須去查,查完之后寫在文章里面,你寫的出來,你就一定懂這項技術而且博客是公開的,若有路人看到你寫錯,說不定還會來糾正你,你就又學到一課了!
第三是累積個人聲望,好的程序員個人博客對于求職絕對有加分效果,假設你今天是面試官
A的履歷寫:精通Javascript
B的履歷寫:精通Javascript,可參照我寫過的:深入Javascript原理系列文章
結果你跑去B的博客看,真的寫了一系列深入的文章在研究,不用面試,你就知道B是個有真材實料的人(前提是面試官會去看你blog里面的文章)
8.學數據結構跟算法
就是俗稱的Data Structures and Algorithm,DSA,假如你真的對這行很有興趣,想要一直待在這邊而且薪水越來越高的話,你就勢必要開始補足一些額外的技能「自學的人通常不會有的本科系知識」,因為自學者通常都直接從html,css,javascript,php,rails等等的開始,甚至連數據結構跟算法都沒聽過!有接觸而且實作過的更是少數。
那為什么要學這兩樣東西呢?
第一,增加自信
其實能力強,自信就會強,增加自信是因為,自學者通常也是非本科系的學生,可能會覺得自己跟本科系的實例有一段落差,這時候若是學了本科系在學的DSA,就可以彌補這一段落差。以我個人來舉例,因為我很早就接觸到DSA,到現在出社會找工作,就是因為我有這段經歷,所以我有自信我絕對不會差本科系太多,甚至會比一些很混的畢業生強,事實上也是如此,去面試的時候有間公司考我排序的問題,就是一些很基本的,說你知道哪些排序法,跟時間復雜度之類的。
“自信在某些時候很重要,能夠為你帶來打不倒的勇氣”
面試沒通過,沒自信的人會覺得:一定是我太爛
有自信的人會覺得:是公司沒眼光(前提是你的自信不是來自于自我感覺良好)
第二,增進對電腦底層的理解度
剛開始你可能只是個拿5k的薪水,但工作久了,可能變成10k,20k,甚至50k,當你薪水變得越高,要解決的問題也相對的更重要,DSA是大公司的必備技能之一,為什么那些大公司面試要考這些?如果不會二叉樹反轉,就算是知名工程師也沒用?
(之前Google的面試爭議:雖然我們公司90%的工程師都用你開發的工具,但我們還是不聘用你)
就如同我開頭所說的,重點在目的、在于要解決的問題
你在一家普通的臺灣電商網站工作,需要會什么?
你可能要會寫php,因為要改進購物車,要改進物品上架系統,所以你根本不必懂DSA,因為沒什么太大的幫助。
Google要解決的問題是什么?
可能是「排序10億個數字」、「阿發狗的下棋算法」等等,從要解決的問題看來,你就知道為什么Google面試時要考那些了。
如果你要在技術上日漸精進,你遲早要碰到那些較底層的東西,這跟問題規模有很大的關系,假設你公司今天是做旅游訂票,同時100個人搶,一般工程師都可以自己應付,如果同時10000個人搶,這就不一樣了,在服務器上你可以能要多開幾臺機器,要調整一些構架,而程序當然也要跟著調整。
或是你會發現許多大公司,常常都會自己有一些項目,為什么?因為市面上沒有符合他們需求的東西,所以要自己寫一個。
如果你沒修過DSA,你怎么可能實作出virtual DOM diff的算法?
當然我也比較菜,沒去面試過諸多大公司,如果有程序前輩看到這里麻煩留言:“你的推測錯了!”
最后,引用一段很有哲理的話:如果以蓋大樓來形容這個概念,把砌磚作為一種技能,把蓋大樓作為一種知識,我想可以這么講:如果你早就知道你喜歡砌磚,很會砌磚,就直接去砌磚吧。如果你的夢想是蓋大樓,你要學的東西還很多,那讀大學是你最好的途徑。不是每個人都要蓋大樓,靠砌磚就可以賺錢了,砌的好還可以賺很多錢,大家搶著要。如果你很會寫購物車,那其實你也可以接到很多電商客戶,錢包也是賺滿滿,但如果你是想進Google,Facebook那種大公司,或是想要思考規模更大的問題該如何解決,那就學DSA吧!
9.樂于分享
這一點我一直非常認同,分享從來不是單向的,當你分享知識給別人的時候,也會得到許多回饋,尤其在教別人的時候,你會更清楚自己哪里不太懂,個人認為分享是一件非常重要的事情,取之于社會,用之于社會,如果大家都樂意分享,這樣此時一個正向循環,希望大家共勉。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。