(轉(zhuǎn))自學(xué)的程序員如何找到好工作?
【伯樂(lè)在線導(dǎo)讀】:2016 年有位年輕的程序員在 Quora 上提問(wèn)求助:
我今年 17 歲,從 14 歲開(kāi)始編程。我主要關(guān)注 Java 語(yǔ)言,并在 AP 計(jì)算機(jī)科學(xué)這門(mén)課上拿了 5 分。我相當(dāng)精通 Java(比如語(yǔ)法、主要類、GUI/JFrame 等),HTML5 和 CSS3 也不錯(cuò)。我感覺(jué)自己缺乏很多有用的技能,來(lái)幫助我在人才市場(chǎng)上推銷(xiāo)自己(比如數(shù)據(jù)庫(kù)的工作原理,以及我應(yīng)該使用哪些工具),我很好奇其他人是如何學(xué)習(xí)這些東西的。我打算去大學(xué)拿一個(gè)軟件開(kāi)發(fā)的學(xué)位,但我開(kāi)始感到有點(diǎn)沮喪,覺(jué)得讀大學(xué)的目的就是為了工作?,F(xiàn)在有哪些我應(yīng)該上的課程,或者應(yīng)該做的事情嗎?
下面是 Brain Knapp 的回答分享︰
我認(rèn)為你的看法錯(cuò)了。你覺(jué)得你需要上課,讓別人來(lái)教你,告訴你答案。從根本上講,自學(xué)的程序員能夠做不一樣的事情。
自學(xué)的程序員和自學(xué)的吉他手有很多共同點(diǎn)。我不知道你是否玩過(guò)吉他,所以我將向你解釋如何自學(xué)吉他。
首先,這一切的開(kāi)始是由于某人與某個(gè)吉他手產(chǎn)生了共鳴。大多數(shù)突然想要自學(xué)吉他的人,是想要成為另一個(gè)吉他手。之后,他們下定決心——“我也可以成為一個(gè)吉他手 ”,于是去了當(dāng)?shù)氐臉?lè)器店,買(mǎi)了一把二手吉他(因?yàn)槎旨阋?,但也很酷)?br>
接下來(lái)可能會(huì)有兩種情況,要不買(mǎi)一本“吉他入門(mén)”或類似的書(shū)籍開(kāi)始自學(xué),要不打開(kāi) YouTube,開(kāi)始學(xué)習(xí)如何彈奏自己喜愛(ài)的歌。那些嘗試學(xué)習(xí)彈奏喜歡的歌的自學(xué)者,往往學(xué)得更好。
當(dāng)年輕的吉他手主動(dòng)地學(xué)習(xí)某首歌時(shí),他們往往需要觀看視頻、打印曲譜、練習(xí)和弦等等。然后,根據(jù)拿到的視頻和曲譜,他們會(huì)坐下來(lái)嘗試重新演繹歌曲。
經(jīng)過(guò)數(shù)小時(shí)的練習(xí),不斷重復(fù)和弦、獨(dú)奏、節(jié)拍等,他們將能夠以自己的形式表演那首歌。它不再是原來(lái)那首歌,但也夠酷。
然后,他們會(huì)拿起另一首歌,重復(fù)這個(gè)過(guò)程。一路走來(lái),他們不斷學(xué)習(xí)節(jié)拍、技術(shù)以及其他的東西,甚至都沒(méi)有意識(shí)到學(xué)習(xí)的內(nèi)容。在知道專業(yè)名詞和理論前,他們已經(jīng)懂得如何操作。
最終,彈吉他變成了一種“直覺(jué)”,學(xué)習(xí)一首新歌也變得習(xí)以為常且不再痛苦。吉他的“語(yǔ)言”變得像你我說(shuō)話那樣容易。
這一切的發(fā)生,背后是數(shù)千小時(shí)的艱苦練習(xí)。即使每天只練習(xí)一小時(shí),也需要耗費(fèi)數(shù)年。
那么,這和自學(xué)的程序員有什么關(guān)系呢?
事實(shí)上,真正成就自學(xué)的程序員的,就是他們會(huì)自己創(chuàng)建東西,很多東西。要成為一個(gè)具有卓越技能的出色程序員,你必須創(chuàng)建東西,寫(xiě)代碼。
上課學(xué)習(xí)理論知識(shí)固然是好的,但很多教授不能跳出條條框框的束縛,以自己的方式編程。就算他們努力嘗試,也做不出別人愿意用的應(yīng)用程序。
這并不是說(shuō)他們不了解教授的知識(shí),而是說(shuō),作為一名教授,他們掌握的技能是研究和理論性理解,而不是寫(xiě)代碼和為客戶提供價(jià)值。
你看到區(qū)別了嗎?
我合作過(guò)的最好的程序員,他們的工作方式就是做東西,做很多東西,并且?guī)缀跻恢边@樣。
例如,現(xiàn)在幾乎每個(gè)人都使用 WordPress。在 WordPress 出現(xiàn)很久之前,我就用 PHP 和 MySQL 創(chuàng)建了 3 到 5 個(gè)不同的內(nèi)容管理系統(tǒng)。我寫(xiě)過(guò)游戲、移動(dòng)應(yīng)用程序、框架,還有 SAAS 應(yīng)用程序。
沒(méi)人付錢(qián)讓我做這些事情。我做這些事純粹是出于好玩、學(xué)習(xí)或好奇的目的。
我已經(jīng)好幾年都沒(méi)有上過(guò)課了,即使上了,我也不覺(jué)得這會(huì)對(duì)我的事業(yè)有任何幫助。然而,如果我決定坐下來(lái),從頭開(kāi)始創(chuàng)建我自己的計(jì)算機(jī)語(yǔ)言或操作系統(tǒng),我打賭我一定能在過(guò)程中學(xué)到很多有趣的東西。
是的,我可以帶著那些想法上課,但在創(chuàng)建東西,犯下錯(cuò)誤,以及真正“體會(huì)到”這一切的經(jīng)歷中,相比讀一本書(shū)或聽(tīng)一次講座,我能收獲更多。
因此,我給你的建議(如果你做到了,相比沒(méi)有做的那些人而言,會(huì)帶給你巨大的優(yōu)勢(shì)),就是:
解決一個(gè)你想解決的問(wèn)題。創(chuàng)建一個(gè)用于某件事的軟件,解決一些你本人或他人想要通過(guò)軟件解決的問(wèn)題。每天為這個(gè)軟件寫(xiě)代碼,晚上寫(xiě),周末也寫(xiě),每天都寫(xiě)。即使你每天只花了 15 分鐘寫(xiě)代碼,也沒(méi)關(guān)系。
最終,你將得到一個(gè)能用的軟件,這很不錯(cuò)。
然后,你再重復(fù)這一過(guò)程。做一個(gè)其他的東西。不斷地做?;ㄙM(fèi)大量的時(shí)間,通過(guò)創(chuàng)建更多的東西來(lái)提升你的技能。
做東西的同時(shí),注意在你的網(wǎng)站上保存工作,并將其放在一個(gè)作品集中。每次你結(jié)束了一個(gè)項(xiàng)目,就將它上傳到 Hacker News、Reddit 或其他什么網(wǎng)站,并發(fā)條關(guān)于它的博文。
你現(xiàn)在僅僅 17 歲,當(dāng)你 20 歲的時(shí)候,你已經(jīng)輕松地將兩千多小時(shí)用于鍛煉技能,你的個(gè)人作品集中也有了大概十到二十多個(gè)軟件,你學(xué)習(xí)到的經(jīng)驗(yàn)是那些僅僅上課的人無(wú)法比擬的。
更重要的是,你已經(jīng)清楚地告訴別人,你能夠獨(dú)立地寫(xiě)代碼,解決問(wèn)題并給世界帶來(lái)一些新東西。這是最難能可貴的一點(diǎn),也是公司在不斷追求的一點(diǎn)。
一旦你找到了工作,請(qǐng)繼續(xù)在業(yè)余時(shí)間創(chuàng)建東西,并提升你的工作技能。你的提升速度將比你的同事更快,因?yàn)樗麄冊(cè)谙掳嗷丶液罂措娨暎皇菍W(xué)習(xí)、成長(zhǎng)或創(chuàng)建東西。他們拿到了薪水就回家享受去了。
你做的越多,你學(xué)的也越多;你學(xué)的越多,你的價(jià)值就越高;你的價(jià)值越高,你就越容易找到工作,你的工資也就更高,這是一個(gè)良性循環(huán)。
所以,去做些東西出來(lái)?,F(xiàn)在就開(kāi)始寫(xiě)代碼吧!
轉(zhuǎn)自:自學(xué)的程序員如何找到好工作? - 文章 - 伯樂(lè)在線
伯樂(lè)在線 > 首頁(yè) > 所有文章 > 開(kāi)發(fā) > 自學(xué)的程序員如何找到好工作?
原文:
How do self-taught developers actually get jobs?
Original question from Quora:
How do self-taught developers actually get jobs?
I’m 17 years old and I’ve been coding since I was 14. My main focus is Java and I managed to score a 5 on my AP Computer Science course. I’m pretty well-versed in Java (e.g. Syntax, major classes,, GUI/JFrame, etc.) and I’m decent with HTML5 and CSS3. I feel like I lack a lot of the skills I need to actually be able to market myself (e.g. How databases work and which ones I should use) and I’m curious as to how others learn these things. I do plan to go to college for a degree in Software Development but it’s beginning to get frustrating feeling like I have to go to college in order to be employable. Are there courses I’m not taking that I should be or things I’m not doing?
My Answer:
I believe you are looking at it wrong. You believe you need to take courses for someone else to tell and teach you the answer. Fundamentally, self-taught programmers do something different.
A self taught programmer has a lot in common with a self taught guitar player. I don’t know if you’ve ever played guitar, so I’ll explain how a self-taught guitar player might learn guitar.
First, it starts with someone who sees someone who they identify with playing the guitar. Most people who play guitar at some point want to be like someone else who plays guitar. After that, they decide “I can be a guitar player too!” and they go to their local music shop and buy a used guitar (because they are cheaper, but still cool).
Next, one of two things will happen, either the person will pick up a “teach yourself guitar” book in some form, OR, they will go to YouTube and start learning how to play their favorite songs. The ones who try and learn their favorite songs tend to do better.
Now, when a young guitar player is motivated to learn a particular song, they will watch videos, print out tab sheets, the chords, and so on and they will sit and try and recreate the song themselves based on the videos and tabs available to them.
After hours of practice, going over the chords, solos, picking patters, and so on, they’ll be able to play their own version of that song. It won’t be quite the same, but it will be close enough for rock n roll.
Then, they’ll pick up another song they like and another song they like. Along the way, they will learn patterns, techniques, and so on without even realizing what they are. They will just figure out how to do them without learning the names and theories.
Eventually, playing guitar will just “feel right” and picking up a new song will be common and painless. The “l(fā)anguage” of guitar will be something they speak like you and I speak words.
This all happens after thousands of hours of accumulated practice. Even at hours of practice a day, it takes years.
So, what does this have to do with self taught programmers?
Well, the thing that really makes a self taught programmer is that they build things. Lots of things. To become a great programmer with very marketable skills, you have to build things and write code.
Taking classes and learning the theory is great, but a lot of professors couldn’t code their way out of a cardboard box. They couldn’t build you a useful application that anyone would want to use if they tried.
It’s not that they don’t know their stuff, but rather that the skill of being a professor is research and theoretical understanding, not building code and delivering value to a client.
Do you see the difference?
The way that the best programmers I’ve ever worked with got good is they built things. Lots of things. Pretty much all the time.
For example, nowadays everybody and their brother uses WordPress. Long before WordPress, I built for myself something like 3 or 5 different content management systems in PHP and MySQL. I’ve built games. I’ve built mobile apps. I’ve built frameworks. I’ve built SAAS apps.
Nobody paid me to do any of those things. I did them for fun or learning or curiosity.
I haven’t taken a class in years and I don’t think they would really move the needle on my career much if I did. Yet, if I sat down and decided to build my own computer language or operating system from scratch, I bet I’d learn a lot of interesting things along the way.
Yes, I could take a class on those ideas, but I’d learn more from building something, making mistakes, and really “feeling” the experience of it all, than I would from reading a book or listening to a lecture.
So, this advice I will give you that will give you a huge advantage over everyone else who mostly doesn’t do this…
Solve a problem that you want to solve. Build some software that does a cool thing you want software to do or someone else wants software to do. Write code for that every single day. Nights, weekends, every day. Even if you only spend 15 minutes, fine.
Eventually, you’ll have something that works and is pretty decent.
Then, you do that again. Build something else. Keep building and building and building and building. Invest the thousands of hours into your skill by challenging yourself to build more things.
As you are building, save your work and put together a little portfolio on your website. Each time you finish a project submit to Hacker News or Reddit or whatever. Blog about it.
You are 17… By the time you are 20 you could easily put 2,000+ hours into developing your skill, have like 10-20 things in your portfolio, and you’ll have learned many lessons that those who just take classes will never learn.
More importantly, you’ll be able to clearly demonstrate that you can write code, solve problems, and ship something to the world. That is valuable. That is the kind of thing companies are looking for.
Once you land a job, keep building in your spare time and promoting your work. You’ll rise faster than your peers because they go home and watch TV and aren’t learning or growing or building ANYTHING. They get the paycheck and go home.
The more you build, the more you learn. The more you learn the more valuable you are. The more valuable you are, the easier it is to get a job, the more you get paid, and so on.
So, go out there and build something. Write the code!
-Brian
P.S. I unpack more ideas in Creative Genius.
Jul 7, 2016
in Quora