我作為程式設計師辣麼窮的黑歷史

2017-01-05    分類:程式設計師人生、首頁精華0人評論發表於2017-01-05

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

我在十三、四歲的時候第一次真正進入程式設計這個領域。從十一歲開始我就一直對計算機非常感興趣,但在十三歲之前並沒有太多地涉足程式設計。那大約是五年前。

我記得在中學玩過一個遊戲:Runescape。很多時候遊戲都會崩潰,並且會看到一個奇怪的包含外國文字的文字檔案。最後,我有了大約十幾個檔案,於是決定去調查究竟是怎麼回事。在稍微谷歌了一會之後,我閱讀連結到關於Java和執行緒的內容。它讓我覺得摸不著頭腦,但同時所有這一切又那麼令人著迷。一段時間之後,我就將它棄之腦後了,我不知道下一步該怎麼做。這樣的情況一直持續到上7年級。

在7年級的時候,我們班上的每個人都需要做一個科學展覽會的專案。老師帶我們進入計算機實驗室,並給了我們一個包含專案點子的網站URL。第一個抓住我眼球的專案標題是:“使用JavaScript構建計算器”。閱讀了之後,我覺得這個相當酷,並決定進入程式設計。

幾個星期後,我和我的一個朋友談論起了我的新努力。他的父親做IT方面的工作,他提到了一個被稱為Batch的語言。他告訴我如何用這種語言做一個測驗,我發現它很簡單,並且樂趣十足。我花了幾個月的時間主要用於吃透基本的JavaScript,Batch和VBScript。這很有趣,但我並沒有做任何酷的東西。老實說,我真的很想製作遊戲,正如許多年輕“程式設計師”會有的想法。

幾個月後,我開始在C++上胡搞一通。我記得介紹Batch給我的那個朋友告訴過我,你不去學校就不能學到C ++。我想證明他錯了。好吧,在“coding bootcamps”之前這的確是個問題。我主要從谷歌“C ++教程”或“如何用C + +(此處插入任務)”學習語言。我很容易地就掌握了基礎內容。結構,語法,所有一切都很容易。我用了一段時間去(有點)理解OOP和指標,然後,我開始對一切都感到無聊。我想製作遊戲。所有我找到的C ++遊戲框架,都需要大量的樣板程式碼並且/或相對比較複雜,既然我真的無法涉足其他任何地方,於是我決定繼續前進。

在大概7年級結束和8年級開始的時候,我開始尋尋覓覓新的語言。我看過Python,Ruby,PHP,但都不感興趣,抓住我眼球的下一個語言是C#。和C ++一樣,我學習了基本的語法,但從來沒有真正學到任何深入的東西。事實證明,遊戲開發不僅僅是程式設計,所以我又繼續往前。現在我想開發桌面軟體。沒過多久,我漸漸離C#越來越遠,在高中的第一年我恍然發現自己使用的是Java。

此時,我學到的Java比任何其他語言都多。回想起來,這可能是我唯一一次可以說我真的瞭解了一種程式語言的時候。這一年我又碰到了新鮮玩意。到了9年級,我第一次遇到對程式設計同樣感興趣的其他人。

他和幾年前的我一樣,打算進軍遊戲開發。在他試圖學習C ++的時候,我正沉浸在Java中。然後一年後,他進入了Web前端開發。我們之前都寫過一些HTML / CSS程式碼,但我們都從來沒有真正做出過成果。我們終於有機會一起工作了,因為我們決定做一個網站去參加其中一個班級的決賽。當時,他高三,而我高二。因為我仍然想使用Java,於是決定我來為我們的網站做後端。在接下來的幾個星期時間裡,我們設計出了一個可怕又丟臉的玩意。好吧,為了證明我的言符其實,讓你見證它的糟糕程度,下面摘錄一些我寫的JSP:

<% 
 try {
 File userFile = new File(request.getParameter(“usr”) + “.csv”);
 FileInputStream fstream = new FileInputStream(userFile);
 DataInputStream reader = new DataInputStream(fstream);
String login = reader.readUTF();

 StringTokenizer splitter = new StringTokenizer(login, “,”);
 String user = splitter.nextToken();
 String pass = splitter.nextToken();

 if(request.getParameter(“passwd”).equals(pass)) {
 out.println(“Authorization Success”);
 UserSession current = new UserSession(user);
 session.setAttribute(“User”, user);
 } else {
 out.println(“Bad Password”);
 }

 reader.close();

 } catch(FileNotFoundException fnf) {
 out.println(“Bad Username and/or Password”);
 }
 %>

是啊,我太懶了,居然沒有設定資料庫,所以我將使用者儲存在個人CSV檔案中。

雖然程式碼是如此黑暗,但從中我們學到了很多有趣的東西,並且第二年(我高三的時候),在我們學校的幫助下,我們開始做自由web開發。小小的我們從沒有經歷任何真正的成功,我不喜歡做靜態網站或Wordpress管理(而這正是我們大多數SMB客戶所想要的)。我依然是搞後端。我們還找了一些知道HTML、CSS和JS的新手來幫助我們,附帶一句,管理團隊蠻有趣的。但是,問題是,我總是似乎做了所有的工作。

我終於還是拋棄了Java,因為我無法決定是學習Spring還是Play Framework,我陷入了Node.js和fullstack JavaScript的誘惑。我現在最大的遺憾是決定成為一個Javascript開發人員。雖然,我從來沒有真正地製作過任何酷的web app,但我在一些客戶端網站上涉足了很多Express和jQuery方面的東西。

然後我到了高中四年級(美國中學為四年制)。與我一起搞自由職業的朋友已經畢業了,去了大學,而其他團隊成員總是一副忙忙碌碌的樣子。我需要團隊中的人能夠真正實際上做事情來幫助我(在一些客戶端工作上我已經落後了)。幸運的是,我發現了一個三年級的正在學習Node的PHP開發人員。他很棒,幫助我讓一些客戶端工作回到了軌道。在一起完成了一些成功的工作後,我們決定離開web開發一段時間,去試著做一個移動app以參加一個競賽。因為他有一個mac,而我沒有,於是我說服他學習Swift,而我試著在Android上重新溫習Java。最後,在決定使用我們兩個都不熟悉的技術維護兩個程式碼庫之後,他決定將app切換到Ionic應用。

讓我印象深刻的是,有幾天時間我完全無法提供力量(這是另一個故事了),當我回來的時候,他已經為我們的app完成了一個可工作的MVP。我們兩個都沒有任何Angular經驗,所以程式碼可能幾乎和我從前的那個JSP一樣糟糕,但app看起來很漂亮(有部分要感謝我們的“設計師”,我的另一個了不起的朋友)。

無論如何,之後我畢業了,那麼這篇文章究竟說明了什麼呢。

為什麼我是一個壞程式設計師

我從來沒有真正學到任何東西。我犯了不斷從這個技術和語言跳到那個技術和語言的愚蠢錯誤。因此,雖然我瞭解許多語言和框架的基礎,但在沒有更深入的研究之前,我並不能真正應用它們到任何地方。

我從來沒有學習演算法,並且沒有上大學的意願。上過大學的你,或許會說所有那些東西都不是很重要,但在現實中真的並非如此。當我開發一個產品的時候,我可能不需要任何知識。但等等,面試該怎麼辦呢。在大多數情況下,你需要通過面試來獲得作為開發人員的工作,而從我打聽到的來看,面試通常包括要求你解決一個傳統的“演算法問題”。

我記得我以前閱讀過有人在面試中被問及如何反轉連結串列的問題。坦率地說,如果我在面試中被問到的話,我的回答會是:

java.util.Collection.reverse(someLinkedList);

有一個API方法我可以用來做到這一點。如果這不是一個可以接受的答案,那麼我唯一的選擇是與面試官爭辯。我不確定在沒有準備的時候我能否做到這一點,但如果碰到被提問的情況,我會查閱文件和/或谷歌來搞清楚。

不管怎樣,我不覺得學習演算法或上大學會更好。

我從來沒有應用過我擁有的知識。人們說最好的學習方法是付諸於實踐。我的問題是我不知道該做什麼。我不喜歡克隆流行的app,因為它們不切實際。我喜歡採納其他人的點子,為他們來構建那些在某段時間內我沒有機會去做的東西。我的Github充滿了許許多多廢棄的專案。

為SMB做網站。這是我唯一的經驗,其他沒什麼可展示的。我們開發的大多數網站由於某種原因不再活躍。事實證明,大多數SMB不需要網站,因為網站相對於Facebook頁面+谷歌業務(點選這裡檢視更多資訊)可為他們提供的很少。

JavaScript。我討厭這門語言及其社群。原因有很多,甚至可以寫成一篇新的文章。然而,不幸的是,它最終迎來了它的輝煌,如果你開發一個Web應用程式而沒有使用像React這樣的支援框架(即如果我使用像ASP.Net MVC + Razor這樣的東西來編寫應用程式的話),那麼你就會被一個軍隊的“衛道士”釘死在十字架上:不斷地告訴你你是如何的愚蠢居然不臣服於救世主React。

結論

我最近才注意到我是真的很窮。 畢業後,我不曾工作於任何東西,因此我的技能已經退化甚至更糟。我最後一次工作於這個領域已經大約是在7個月以前的事情了。我知道我應該回到這個領域,雖然我不知道我想做什麼。 我想也許應該是:

Android(Java,Kotlin,等)

或者

C#和ASP.Net(Core很酷,但MVC更實用)

不管是什麼,這一次我已經打定了主意。學習語言以及相關的框架,不再跳來跳去。 我決心這次一定要實際擅長於某件事情。

也許有人在讀這篇文章的時候發現可以從我的錯誤中學習。好的,希望如此。如果這篇文章你覺得我寫得有點亂,那麼我向各位致歉,因為這是我在Medium上釋出的第一篇文章。最後,與君共勉。

譯文連結:http://www.codeceo.com/article/my-poor-programmer-history.html
英文原文:A history of why I’m a poor programmer
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章