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