2009-06-25 69 views
5

你有沒有試過在項目中學習一門語言?我有我的個人經驗,我可以說需要勇氣,努力,時間,思考,大量的咖啡因和不睡覺。有時候這種做法必須沒有選擇地完成,其他時候你選擇這樣做;例如,如果您正在製作個人項目。在項目中學習語言?

我通常在這種情況下做的事情,我相信每個人都會這樣做,是建立在我目前對語言,結構,語法和邏輯知識的基礎之上的。我覺得難以應付的是在某些情況下誠信的不同。有些語言爲將來的學習和「語言學習」提供了良好的背景,它們構成了一個很好的信息來源或參考框架,可以「堅定」地把握將要發生的事情。其他語言形成或引入了一種新的思維方式,很難習慣。

有時候你無意中想到的是某種特定的語言,當引入一種新的思維方式時,一種新的語言會引起混淆或使你在新的語言和當前的語言知識的「邊界」之間迷失。

在這種情況下什麼是一個好的解決方案?應該用什麼來拓寬新語言的知識,新的思維方式,以及在新語言的「邊界」內維護或融入當前其他語言的知識?

回答

8

我發現我需要做一個項目來正確學習一門語言,但這些可以是個人項目。當我在工作中學習Python時,我第一次預期(並發現)一段時間內我的生產力顯着下降。我閱讀了標準教程,編碼標準和我在Python列表中潛伏了一段時間,這讓我更好地理解了該語言的最佳實踐。

在學習語言時做類似編碼工作的東西和東西可以幫助你感受一些東西。最近我剛剛換了工作,回到了Java,我花了一些時間來研究玩具程序,以便重新回到事物的感覺上(我也在閱讀Effective Java,第二版,因爲我以前的主要經驗是Java 1.4 )。

+0

Python對我來說非常合適,我發現當我切換到它時,我的生產力提高了!然而,當時我只花了5%到10%的工作時間(幾乎沒有外部工作,因爲我剛剛完成了一個無關的碩士學位),所以YMMV。 – PTBNL 2009-06-25 02:13:28

3

我想提一提ALT.NET這裏

自組織,是希望結合的開發者專用社區完善自我,挑戰假設和互相幫助的實踐追求卓越軟件開發。

因此,本着ALT.NET的精神,通過觸及您的舒適區來學習新語言是具有挑戰性的,但是非常有用。一些真正幫助我的東西如下:

  1. 瞭解語言或腳本背後的歷史。瞭解進化有很大幫助。
  2. 選擇合適的書。通過研究StackOverflow和Amazon.com來尋找合適的書籍來幫助你緩解成長中的痛苦。
  3. OOP在大多數成熟語言中都很常見,因此您可以在許多書中跳過許多與OOP相關的章節。語法學習將是一個漸進的過程。我通常收藏一些快速方便的指南。
  4. 儘可能多地閱讀社區論壇,以瞭解新語言的常見缺陷。
  5. 參加一些本地聚會,與社區互動並分享您的痛苦。
  6. 通過構建小而不是複雜的應用程序,從而一舉取得一個音高,從而獲得動力。
  7. 確保您爲您需要學習的內容創建參考框架。諸如安全性,日誌記錄,多線程處理等事情。
  8. 要開放,你可以批評,但如果你討厭什麼,那麼不要學習那種語言。

最後,我認爲值得學習一種強大的語言,如C#或Java,一種功能語言和一種腳本語言,如ruby或python。

這些事情對我非常有幫助,我認爲這將幫助所有軟件工程師和架構師真正適應任何開發環境。

2

我被聘用爲Zend Framework項目的項目負責人之後學習了PHP。

這有助於我擁有20年的專業編程背景,對C,Java,Perl,JavaScript,SQL等有很好的瞭解。我在大部分職業生涯中也傾向於使用動態腳本語言。我用awk編寫了應用程序,shell中的框架,troff中的宏包,我甚至用sed編寫了一個論壇。

東西來幫助在工作中學習語言:

  • 閱讀代碼和文檔。
  • 收聽社區的郵件列表和博客。
  • 與語言專家交談,幸運的是其中有幾個人是我的直接隊友。
  • 編寫練習代碼,並要求提供代碼評論和指導(Zend_Console_Getopt是我第一個重要的PHP貢獻)。
  • 學習符合語言的工具。 PHPUnitXdebugphpDocphing

當然我沒有申請我從其他編程語言就知道了。許多計算機科學概念是語言通用的。給定語言的差異通常只是習慣用語,這是一種說明可以用另一種語言以另一種方式完成的事情的方式。對於像Perl或PHP這樣的語言來說尤其如此,它們都從早期的語言中借用了大量的習語。

這也有助於我參加了大學編譯器設計課程。在構建語言方面有一個良好的基礎,可以更容易地挑選新的語言。在某種程度上,它們都是抽象運行時棧和對象引用的方法。

4

我認爲,在某些方面,無論學習語言的動力是什麼,你都必須從模仿新語言的好模式入手。無論這是否意味着通過出色的代碼示例,良好的在線教程或者跟隨更有經驗的開發人員的領導來找到一本好書,您必須首先了解用特定語言編寫優質代碼的含義。一旦你達到了一定程度的舒適度,你就可以開始分支並試驗你所學習模式的替代方案,尋找方法來應用你從其他語言學到的東西,但是要遵守「規則」語言。最終,你會發現你之前學會了「違反規則」,因爲你有足夠的經驗知道他們何時/不適用。

我個人的偏好,即使在被迫要學習一門新的語言,首先需要拋棄一些代碼,即使從優秀的教程開始,你也會毫無疑問地編寫代碼,以後你會回頭看看,並且不理解你有多愚蠢,我更喜歡,如果可能的話,把我的第一次寫入到一個語言代碼中,這個代碼將會被拋棄,不會再回來困擾我,另一種方法是在你學習越來越多的時候花費大量的時間重構,最終你會最終做到這一點

1

如果您是團隊的初級成員並且不知道該語言,那麼這是n不一定是一個問題。只要有一些代碼審查和監督,你可以是一個富有成效的。

語言語法是一個問題,但體系結構差異是一個更重要的問題。許多語言也是開發平臺,如果您對平臺沒有經驗,則不知道如何創建可行的解決方案架構。因此,如果您是項目負責人或獨自工作,那麼在進行設計工作之前,您最好在平臺上獲得一些經驗。例如,我會說一個沒有VB經驗的經驗豐富的C#編碼器可能會在VB.NET項目中生存下來。事實上,對於只有C#/ ASP.NET經驗的開發人員來說,完成C#WPF項目比VB ASP.NET項目更困難。有經驗的PHP開發人員可能會對ColdFusion項目猶豫不決,但他們可能不會犯任何嚴重的錯誤,因爲他們熟悉基於腳本的Web開發體系結構。

許多概念,如對象建模和數據庫查詢策略,在語言之間轉換得很好。但是對於一個新的平臺總是有一個學習曲線,有時它可能是相當討厭的。最糟糕的情況是該項目必須被拋出,因爲這個項目太不妥重構了。

0

在我看來,你應該儘量避免這種情況。我知道,在任何情況下,大多數時候你都不能嘗試將新的語言與舊的語言混合在一起,並且決不會增加舊習慣,習慣和模式的混合。

總是試圖找到能夠幫助您通過語言工作的方式獲得新語言的資源,而不是其他語言的方式;那永遠不會有一個美滿的結局,如果這樣做,將很難將其修改爲正確的方式。

乾杯。

1

我喜歡在項目中學習一門新的語言,因爲真正的項目通常會迫使我學習我可能跳過的語言的各個方面。我喜歡的第一件事是閱讀該語言的代碼,並跳入其中。我發現資源(例如書籍和各種互聯網站點)在我一起前往時會提供幫助。

然後,在我研究了一段時間後,我喜歡閱讀(或重新閱讀)書籍或其他語言資源。到此時爲止,我有一些知識,所以這將有助於鞏固一些事物,並且指出在我的理解中我是錯誤的領域。例如,我可以看到,我對語言之間的相似性做出了不正確的假設。

這也適用於工具 - 在使用一段時間的工具並學習基礎知識之後,閱讀(或瀏覽)文檔可以教會我很多。

0

是的,我有。

我的意思是,有沒有另一種方式?我學到的唯一一門不在項目上的語言是ABC基礎,這是您在第一臺計算機上使用的語言。

0

我會建議如果你從某種語言開始,堅持下去。我只是說因爲過去很多次我嘗試了越來越多的不同的東西,而我最開始使用的是最好的:D

0

每當我有/想要學習一門新語言時,我強迫自己找到代碼的東西。

但是爲了確保我做得很好,我總是希望能夠檢查我的代碼以及它的輸出結果。

要做到這一點,我只是嘗試用我知道的語言來做同樣的事情,並比較輸出。爲此,我創建了一個小型項目(託管在Github),並附有練習題,並對我學過的每種語言進行了更正。在我看來,這是一個很好的學習方式,因爲它給你一個真正的小項目。