回覆列表
  • 1 # min鍋說

    很多人想要成為程式設計師,在學習程式設計的過程中,面對各種 bug 和源源不斷的問題,有時會對自己是否適合程式設計這一問題產生困擾。

    作為一名教授全棧 Web 開發的教育工作者,我已經帶領很多新手成為了程式設計師。好訊息是,我發現沒有任何人是不能學習程式設計的。我把它看作是一種基本的人類技能,就像閱讀、寫作和算術一樣,任何人都可以做到。它是我們人類能力的一部分,只是需要學習。

    在過去的幾年的教學中,我目睹了不同的學生在學習過程中的鬥爭,以及在他們的掙扎中出現的一些共同問題。

    下面的列表將幫助你瞭解你是否喜歡程式設計

    1、缺乏好奇心

    如果你對計算機是如何工作的缺乏好奇心,那麼,作為一個程式設計師,你將永遠不會成功。

    學習的一個基本要求是對你所學的東西有積極的興趣。如果你沒有一個對技術好奇的頭腦,你就沒有精力去堅持學習要成為一個成功的程式設計師所需要的廣博而深入的知識。相比之下,技術的世界就像一個巨大的海洋,裡面充滿了各種有趣的領域、相互聯絡的思想和各種可能,它們可以激發人們的想象力。想要潛入這片海洋並發現你所能發現的一切,需要內在的動力。

    找到你的好奇心:問問你自己,程式設計是否真的讓你感興趣?如果沒有興趣,去找你感興趣的東西,以節省時間和精力。但是如果你的答案是感興趣,那麼就強迫自己去發現一些你以前沒有注意到的新事物,認識到浩瀚的技術海洋,再往下潛一點。

    2、缺乏自主性

    如果你不培養自己解決問題的能力,你就永遠不會成為一個成功的程式設計師。

    毫無疑問,要成為一個成功的開發人員,你必須對自己的學習能力充滿信心。這實際上是一項基本的生活技能,如果你年滿 18 歲,沒有人有義務教你任何東西。這就是現實。當你想學習技術所需的技能時,首先要學會的是,在谷歌中輸入你想要的任何東西並獲取你需要的資訊。除此之外,所有程式語言都有文件和規範,這些文件和規範對語言的工作方式解釋的非常清楚,它們就像字典一樣。作為一個程式設計師,最快速、最可靠的學習方法就是簡單地閱讀這些文件。

    當你有問題的時候,在問別人答案和查閱官方文件之前,強迫自己先搜尋一下,節省別人的時間。

    3、面對問題缺乏毅力

    如果你在遇到問題時輕易放棄,作為一個程式設計師,你將永遠不會成功。

    程式設計的本質是解決問題,這也是計算機產生的全部原因!每當你開始編寫一個程式時,你總是會遇到一大堆問題。一旦你解決了一個問題,那麼幾乎總是有另一個問題在後面等著你。你在進步,但總是會有新的問題要面對。

    這堆問題會讓人望而生畏,令人感到沮喪。如果你覺得程式應該「能用就好」,那麼你就沒有精力堅持下去,因為問題還在繼續出現,它們會一點一點地擊潰你的情緒和決心。從字面上來說,你的工作就是找出程式為什麼不能跑起來。

    從我在授課上的經驗來看,通常每個班都有一兩個學生,和其他學生相比,他們似乎更容易遇到更多的問題——通常是非常隨機和模糊的問題。我提醒學生,他們面對的問題越多,學習越深入、越徹底的可能性就越大。如果他們能透過這些問題獲得深刻的理解,他們會很快發現他們變得更加自信了,因為他們面對和解決的問題比普通學生多。

    你需要認識到,問題不僅僅只是問題,它實際上也是挑戰。你所面臨和克服的每一個挑戰都能讓你更深入地理解技術,更好地面對新的挑戰,並迅速解決舊的挑戰。

    4、解決問題之後沒有成就感

    如果你在解決一個問題後沒有興奮感和成就感,作為一個程式設計師,你將永遠不會成功。

    與上一個問題相關的是,你成功地解決了一個問題,卻缺乏「良好的感覺」。當修復 bug 和問題變成了一個永遠不會結束的事情時,你會失去與克服問題的動力。

    當你解決一個問題時,你需要的是多巴胺的釋放。這類似於在電子遊戲中完成了一個關卡,或者解決了一個像縱橫字謎或數獨這樣的挑戰。我們都知道,堅持透過一項挑戰,然後最終贏得比賽,一般都會有成就感和興奮感。但是如果你失去了感受這些快樂的能力,或者從一開始就沒有真正有過這些感受,你將無法體驗到程式設計帶來的快樂。如果你把程式設計看作是一種磨礪,你只想儘可能容易地得到結果,那麼你永遠不會真正成為一個成功的程式設計師。

    無論何時,當你解決了一個一直在努力解決的問題時,無論這個問題多麼微小,你總是為你的成就感到驕傲。你需要休息一下,祝賀你自己完成了一項出色的工作,讓成功的感覺滲透進你的心裡,為你即將面臨的下一個問題注入活力。

    5、無法獨立思考

    如果你期望別人為你著想,並且主動看到你自己所在的處境的細節,你將永遠不會成為一個真正成功的程式設計師。

    當你在學習新的東西時,很容易感到缺乏知識和經驗,並沒有自己的觀點。主動做事或者說錯話似乎是有風險的。對於錯誤,我們的內心都有一種恐懼感。當對錯誤的恐懼抑制了你的探索和好奇心時,你會扼殺開發真正知識、從經驗中獲得的知識和「失敗」的能力。當你需要依靠「權威」的觀點、一個受歡迎的部落格、一個最佳實踐或「教科書」的答案時,那麼你就沒有真正地整合程式設計的知識。你需要對什麼有效,什麼無效形成自己的觀點。你需要理解為什麼你認為你的解決方案有效,以及使用這個方案有什麼好處。你需要建立一個微妙的視角,超越那些顯而易見的東西。你需要能夠「證實」你的立場。

    為自己著想。透過你的經驗和批判性思維技巧,發展出你自己的思想體系。做出合理的猜測,堅定立場,並願意隨著新資訊的出現而改變立場。

    6、僵化、狹隘、混亂的思維

    如果你的思維僵化,並且難以保持程式碼的條理化,那麼你將永遠無法成為一名真正成功的程式設計師。

    我有時在學生中看到兩個極端。第一種是僵化和狹隘的思維方式。擁有這種態度的人拒絕幫助,儘管會有反饋,但不會有改變。他們看事情只從一個角度看,別人給的建議被忽略。

    我看到的第二個極端是思維混亂。學生們似乎使事情變得更加複雜,他們的程式碼雜亂無章,難以理解。他們過度思考問題,寫 100 行程式碼,而其中只有 10 行 是有用的。

    當這兩種心態結合在一起時,結果就是一種用蠻力的方法去設計程式。我們需要的是回顧解決方案,重新評估它,放棄最初的方法,並重新組織方法。

    無法看到其他可能性或無法反思反饋會抑制成長的能力。思維雜亂無章會減慢你的成長速度,阻止你看到那些原本顯而易見的模式。你的工作質量也會下降。

    自我反省。你需要退後一步,看看你是接觸的事物的大局是什麼樣子的。你要怎樣才能做得更好?你能做些什麼讓你的生活更輕鬆嗎?你需要什麼來幫助你?

    7、需要「正確」的答案,而不是識別一系列「好」和「壞」的答案的方法

    如果你認為程式設計的最終目標是找到正確的解決方案,而不是一系列解決方案,那麼作為一個程式設計師,你將永遠不會真正成功。

    當開始學習技能或程式設計時,學生往往想知道他們所做的是否「正確」,而答案總是「視情況而定」。

    計算機科學是一門評估權衡的科學。在不同的環境下,哪條路更好,這完全取決於所處的環境和目標。當你把程式設計看作是一個有正確答案或錯誤答案的測試時,你就失去了對全域性的認識,放棄了你的創造力。任何答案都可以是「正確的」,前提是你能根據具體情況證明這一點。現實情況是,程式設計更像是寫詩或寫短篇小說(如果程式很大,則可能是小說)。在你的程式碼中可以看到一種美學和美麗,這些東西有時只有你和其他程式設計師能夠識別出來。你決定解決方案的原因,以及你對答案的設想,比「正確的方式」或「錯誤的方式」更重要。擁有一個藝術家的頭腦可以讓你編的程式具有選擇和可能性,而不是認為只有一種處理方式。這就是程式設計的美——有很多方法可以解決問題,考慮不同的可能性,然後決定哪種方法最適合當前的情況。

    創造性很重要。你要認識到,解決問題的方法有很多種,透過經驗和積累,你會對哪些解決方案比其他解決方案感覺更好產生細微的理解。縱觀全域性,想象不同的可能性,相信你的直覺,你會得到更滿意、更好的解決方案

    如果你對學習程式設計感興趣,我鼓勵你開始這段旅程。記住提到的七條,並開始學習、探索線上資源,這些資源可以讓你快速學習。你不會後悔的!

  • 2 # 小鵬職場分享

    合格程式設計師,對於一種計算機程式設計語言,我們將其分為語法、語義、語用三個層面。僅僅掌握語法是不夠的,不算學好。但是很多人,在履歷上寫自己掌握(甚至精通)了某種語言,其實就是解了語法,會寫簡單的程式而已。這就是為什麼我們行業特別不喜歡“精通”這個詞的原因。

    現代軟體開發,規模都比較大,不是寫個Hello World那麼簡單,也不可能每個專案每件事都從頭開始造輪子,我們都是站在前輩、同行們的肩膀上工作的。也就是說,語言之外,還有“庫”這個東西需要掌握,不然就寸步難行。庫有語言級別支援的Build In的庫,比如JAVA裡面的util、concurrent,CPP的IOSTREAM、 STL等等;更多的更豐富的還有第三方提供的庫,比如JDBC、Servlet、EJB的implementations等等。這些東西掌握了,幹活兒才可能得心應手,不然寸步難行。

    比Libaray更高層一些的,是Framework。框架的作用在於,將某一方面開發的Best Practices搞到一起,給你提供一個更易用的、不關注底層的腳手架。比如做企業應用的,Spring Framework是標配了;訪問資料,Hibernate或者MyBatis也離不開,很少直接用JDBC去幹活的了;做WEB的,各種MVC Framework起碼得掌握一兩個(spring mvc or struts 2 ?);做網路的,Netty, MINA怎麼也得掌握一個......總而言之,框架是繞不過去的一個門檻。

    然後呢,就是環境、輔助工具。應用伺服器,怎麼也得會除錯配置那麼兩個吧。TOMCAT是入門標配,JBOSS,WEBLOGIC之類,起碼要弄得跑得起來;針對不同應用場景,還要會選擇。開發/管理工具,ECLIPSE是標配、GIT和SVN起碼要搞熟一款;其它比如單元測試工具、Build工具、測試覆蓋率、Code Review這些外掛...也得知道怎麼用。

    最後,通用的,計算機科學的基礎,不說多紮實,至少不能一竅不通。說起來就那幾大件,作業系統、資料結構&演算法、編譯原理、體系結構。要懂一點點,你才知道你編的程式是怎麼run起來的,哪兒可能存在效率問題效能瓶頸,除了問題知道怎麼debug。如果僅僅把計算機當作一個黑盒子,那也不算學好了。

    最最後,還有一樣,就是你要訓練一下,快速理解領域知識的能力。你參與做一個專案,你懂的只是上面這些專業知識,但並不懂客戶的行業知識。如何儘快地理解業務,並用你手頭的工具實現業務邏輯,這點對程式設計師而言是非常重要的,否則你做的東西客戶總不滿意,GET不到重點,很麻煩。

    我覺得這是一個合格的程式設計師的基本要求。你看,我並沒要求你懂需求工程、懂專案管理、懂架構設計、懂很多演算法、模式,甚至更深的專業知識。

  • 中秋節和大豐收的關聯?
  • “職場中,要遠離辦公室政治,不要站隊”,你認同這句話嗎?為什麼?