導航:首頁 > 程序命令 > 第三屆程序員學習

第三屆程序員學習

發布時間:2022-08-11 22:52:29

❶ 想當程序員,大學應該學什麼專業

想當程序員可以學這兩個專業:

1、軟體工程

軟體工程專業以計算機科學與技術學科為基礎,強調軟體開發的工程性,使學生在掌握計算機科學與技術方面知識和技能的基礎上熟練掌握從事軟體需求分析、軟體設計、軟體測試、軟體維護和軟體項目管理等工作所必需的基礎知識、基本方法和基本技能,突出對學生專業知識和專業技能的培養,培養能夠從事軟體開發、測試、維護和軟體項目管理的高級專門人才。

2、計算機科學與技術

計算機科學與技術專業主要培養具有良好的科學素養,系統地、較好地掌握計算機科學與技術包括計算機硬體、軟體與應用的基本理論、基本知識和基本技能與方法,能在科研部門、教育單位、企業、事業、技術和行政管理部門等單位從事計算機教學、科學研究和應用的計算機科學與技術學科的高級科學技術人才。

選了這兩個專業,會在大學中學習到c語言,c++,java,javaweb等等一系列編程語言,要注意的是,大學里一般一個學期結束一門語言課程的學習,進度會非常快,課程安排量也不會太充足,想要學好,還得靠自己課下努力才行,至少得掌握一門自己拿手的語言。

當程序員需要具備的能力

1、編程語言能力

作為合格的計算機程序員,精通一門語言是必須的。這種精通,不是說看了一本編程寶典,抄了幾個程序就能說精通的,要靠長時間的積累。

2、編碼能力

遵守編碼規范,是一個程序員最基本的要求。另外一個就是注釋,要注意不是為了注釋而注釋。對類,以說明職責為主;對方法,以說明意圖為主;對方法體,以說明實現思路為主。對於大段大段的代碼,要分段,使用空行隔開,並使用行內注釋進行說明。

3、面向對象思維能力

多數編程語言都是面向對象的編程語言。而這些面向對象編程語言的共同精髓就是面向對象的思想。掌握這些比面向對象語言本身更重要,比如對繼承,多態,重載的理解。對面向對象基本原則的理解,比如開閉原則,介面隔離原則,單一職責原則等。在此基礎上,應該掌握常用的設計模式,比如工廠模式,策略模式,觀察者模式,模板方法模式,命令模式等等。

❷ 從哪些方面學習可以培養程序員邏輯思維

第一:明確學習目的
邏輯思維學習編程對多數IT業人員來說都是非常有用的。學編程,做一名編程人員,從個人角度講,可以解決在軟體使用中所遇到的問題,改進現有軟體,可以為自己找到一份理想的工作添加重要得砝碼,有利於在求職道路上謀得一個好的職位;從國家的角度,可以為中國的軟體產業做出應有的貢獻,一名優秀的程序員永遠是被爭奪的對象。學習編程還能鍛煉思維,使我們的邏輯思維更加嚴密;能夠不斷享受到創新的樂趣,將一直有機會走在高科技的前沿,因為程序設計本身是一種創造性的工作。知識經濟時代給我們帶來了無限的機會,要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。
第二打好基礎,學好基礎知識對我們開發也很重要學編程要具備一定的基礎,總結之有以下幾方面:
首先是數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
其次是邏輯思維能力的培養 學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。最後是選擇一種合適的入門語言 面對各種各樣的語言,應按什麼樣的順序學呢?程序設計工具不外乎如下幾類: 1)本地開發 應用軟體開發的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;資料庫開發工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台開發 開發工具如 Java 等。 3)網路開發 對客戶端開發工具如:Java Script 等;對伺服器開發工具如:php 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。 以上不同的環境下幾種開發工具中 VB 法簡單並容易理解,界面設計是可設化的,易學、易用。選 VB 作為入門的方向對出學者是較為適合的。
第三:注意理解一些重要概念
一本程序設計的書看到的無非就是變數、函數、條件語句、循環語句等概念,但要真正能進行編程應用,需要深入理解這些概念,在理解的基礎上應用,不要只簡單地學習語法、結構,而要吃透針對這些語法、結構的應用例子,做到舉一反三,觸類旁通。
第四:掌握編程思想,編程思想使用較多的就是oop編程思想
學習一門語言或開發工具,語法結構、功能調用是次要的,最主要是學習它的思想。例如學習 VC 就要學習 Windows 的內在機理、什麼是線程......;學習 COM 就要知道VTALBE 、類廠、介面、idl......,關鍵是學一種思想,有了思想,那麼我們就可以觸類旁通。
第六:多實踐、多交流,一切思維來自項目開發的積累
掌握編程思想必須在編程實際工作中去實踐和體會。編程起步階段要經常自己動手設計程序,具體設計時不要拘泥於固定的思維方式,遇到問題要多想幾種解決的方案。這就要多交流,各人的思維方式不同、角度各異,各有高招,通過交流可不斷吸收別人的長處,豐富編程實踐,幫助自己提高水平。親自動手進行程序設計是創造性思維應用的體現,也是培養邏輯思維的好方法。
第七:養成良好的編程習慣
編程入門不難,但入門後不斷學習是十分重要的,相對來說較為漫長。在此期間要注意養成一些良好的編程習慣。編程風格的好壞很大程度影響程序質量。

❸ 一個程序員應該學那些語言,具備什麼

中國有很多精於編碼的人,但是中國軟體行業,尤其是網路應用開發方面誤區很大,很難形成有規模的軟體開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不如。這些問題不是在於中國程序員的智商和工作努力狀況,也不是在於國家和民間對開發的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤區,這些誤區,導致了軟體行業的產品化能力不足,缺乏規模化和大型復用系統研發能力,可以說,改變認識誤區,是解決軟體行業小作坊模式和個體英雄模式所帶來的局限性的重要工作。
程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬體通訊協議的建立,到數據傳輸層的處理,到操作系統的建設,到資料庫平台的建設,一直到應用層上各種數據營銷平台的搭建,程序員在裡面都扮演著舉足輕重的角色並為IT事業的發展做出了巨大的貢獻。
中國有很多小朋友,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鑽研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,這些人,一個網上的朋友說得很好,他們實際上只是一些Codingfans,壓根沒有資格稱為程序員,但是據我所知,不少小網路公司的CTO就是這樣的codingfans,拿著嚇人的工資,做著嚇人的項目,項目的結局通常也很嚇人。
程序員基本素質:
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想像的。獨行俠可以作一些賺錢的小軟體發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。
有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。
再看看整個linux的搭建,沒有規范化和標准化的代碼習慣,全球的研發協作是絕對不可想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對於這樣的程序員,你給他深藍那套系統,他也做不出太極鏈的並訪能力。性能需求指標中,穩定性,並訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功能模塊都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試,並盡早發現和解決問題,當然這需要上面提到的需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。但是學習也要找對目標,一些小codingfans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候馬上就到了。

❹ 程序員入門:如何自學編程

首要之首:不要急於選擇一種語言 新手們有一個常見的錯誤就是猶豫於判斷哪種編程語言是做好的、最該先學的。 我們有很多的選擇,但你不能說那種語言「最好」。 我們應該理解:說到底,什麼語言並不重要。 重要的是理解數據結構、控制邏輯和設計模式。 任何一種語言—甚至一種簡單的腳本語言—都會具有所有編程語言都共有的各種特徵,也就是說各種語言是貫通的。 我正在攻讀我的計算機學學位,我編程使用Pascal,匯編,和C語言,事實上我從來沒有把它當成職業以求獲得回報。 我一直在自學編程,工作上用不到它,我使用現有的知識,參考各種文檔和書本,學習它們的用法。 因此,不要急於選擇何種編程語言。 找出你想要開發的東西,使用一種能夠完成這項任務的語言,這就可以了。 根據各種開發平台的不同,有很多不同的軟體開發形式可供你選擇:從網站應用到桌面軟體到智能手機軟體到命令行腳本工具。 這篇文章里,我將重點介紹一些很受歡迎的入門教程和資源,它們能幫助你學會如何在各種主流的平台上編程開發。 我先假設你是一個悟性很強的讀者,但對於新手,當我談論程序代碼時還是要按照入門級的水平。 因為即使是你自己看一篇編程入門手冊,如果發現都能理解時,心情自然會很高興,這樣利於你進一步學習。 桌面腳本 想要動手在Windows里或蘋果系統里編程,最簡單的方法是從一種腳本語言或宏語言開始,例如AutoHotkey(Windows) 或Automator(蘋果系統)。 如今一些硬體程序員沖著他們的屏幕大喊大叫,說AHK和AppleScript並不是「真正」的編程語言。 也許他們說的是對的—技術上,這些種類的語言只能做一些上層的編程。 但是對於那些只是想來脫盲、想在他們的電腦里實現一些能自動運行的程序的新手來說,這些語言會是一個絕妙的入門入口—而且你會吃驚於它們豐富的功能。 例如,大家都喜愛的Texter就是Adam使用AutoHotkey開發的能獨立運行的Windows應用程序,所以說這種腳本語言遠不是只能開發小規模腳本軟體。 如果你想從AutoHotkey入手,可以參考Adam的指導:how to turn any action into a keyboard shortcut using AutoHotkey(然後,你可以下載Texter源代碼看看這個功能齊全的使用AHK開發的Windows應用程序的內部結構)。 Web開發 HTML 和 CSS:開發網站,你第一件要知道的事情就是HTML(網頁就是由它組成的)和CSS(一種讓外觀更好看的樣式標記)。 HTML 和 CSS 並不是編程語言—它們只是頁面的結構和樣式信息。 然而,在開始開發web應用程序之前你必須要學會如何手工的編寫簡單的HTML和CSS,web頁面是任何webapp的前端顯示部分。 這個HTML 指導是你入手的好地方。 JavaScript:當你可以通過HTML和CSS構建一個靜態頁面後,事情就開始變得有趣了—因為到了該學JavaScript的時候了。 JavaScript是一種web瀏覽器上的編程語言,它的魔力就是能在頁面里製造一些動態效果。 JavaScript可以做bookmarklets,Greasemonkey腳本, 和Ajax, 所以它是web上各種好東西的關於因素。學習JavaScript從這里開。 伺服器端腳本:一旦你學會了網頁里的知識,你就要開始對它添加一些動態伺服器操作—為了實現這些,你需要把目光轉移到伺服器端腳本語言,例如PHP, python, Perl, 或 Ruby。 舉個例子,如果想要製作一個網頁形式的聯系方式表單,根據用戶的輸入發送郵件,你就需要使用伺服器端腳本來實現。 像PHP這樣的腳本語言可以讓你跟web伺服器上的資料庫進行溝通,所以如果你想搭建一個用戶可以登錄注冊的網站,這樣的語言正是你需要的。Webmonkey是一個優秀的web開發資源網站,裡面有大量的各種web編程語言的指導手冊。 閱讀一下他們的PHP 初學者指南。 當你感覺差不多了的時候,看看WebMonkey』s PHP and MySQL tutorial學習如何使用PHP跟資料庫交互。 網上最好的要數PHP語言官方的在線文檔和函數參考了。 每個知識點上 (例如strlen function這個)都在後面列出來用戶的評論注釋,這些對於文檔的本身是非常有價值的。 (我很喜歡PHP,但還有很多其他種伺服器端的腳本語言你們都可以選擇。) Web框架:過去數年裡,web開發人員在開發動態網站的過程中不得不一遍又一遍的針對重復遇到的問題寫出重復的代碼。 為了避免這種每次開發一些新網站都會重復勞動一次的問題,一些程序員動手搭建了一些框架,讓框架替我們完成重復性的工作。 非常流行的Ruby on Rails框架,作為一個例子,它利用Ruby編程語言,為我們提供了一個專門面向web的架構,普通的web應用程序都能使用它來完成。 事實上,Adam使用Rails開發了他的第一個正式的(而且是嘆為觀止的!)web應用程序,MixTape.me。這就是他的如何在沒有任何經驗的情況下搭建一個網站。還有一些其他的web開發框架包括CakePHP(針對 PHP 編程者),Django(針對 Python 編程中), 以及jQuery(針對 JavaScript). Web APIs:API (應用層序編程介面)是指不同的軟體之間相互交換的程序途徑。 例如,如果你想在你的網站上放一個動態的地圖,你可以使用Google Map,而不需要開發自己的地圖。The Google Maps API可以輕松的讓你通過JavaScript在程序中引入一個地圖到你的頁面上。 幾乎所有的現代的你所知道的和喜愛的web服務都提供了API,通過這些API你可以獲取到他們的數據和小工具,在你的應用程序里就可以使用這些交互過來的東西了,例如Twitter, Facebook, Google Docs, Google Maps, 這個列表遠不止這些。 通過API把其他web應用集成到你的web應用里是現在富web開發的前沿地帶。 每個優秀的主流的web服務API都附帶有完整的文檔和一些快速入手的指導(例如,這個就是Twitter的)。 瘋狂吧。 命令行腳本 如果你想開發一個程序,讓它讀取文字或文件、輸入輸出一些有用的東西,那麼,命令行腳本語言將是個不錯的選擇。 然而它並不像web應用程序和桌面應用程序那樣有吸引力和好看的外觀,但是作為快速開發的腳本語言,你卻不能忽視它們。 很多的在linux平台上運行的web腳本同樣能以命令行模式運行,例如Perl,Python和PHP,所以如果你學會了使用它們,你將能在兩種環境中使用它們。 我的學習道路一直沒離開Perl太遠,我自學Python使用的是這本優秀的在線免費書Dive into Python。 如果成為一個Unix高手也是你學習的目標,那麼你絕對要精通bash這個腳本語言。 Bash是Unix和Linux環境下的一種命令行腳本語言,它能夠為你做所以的事情:從自動備份資料庫腳本到功能齊全的用戶交互程序。 起初我沒有任何使用bash腳本的經驗,但最終我用bash開發了一個全功能的個人代辦任務管理器:Todo.txt CLI。 插件(Add-ons) 如今的web應用程序和瀏覽器都可以通過一些擴展軟體來豐富自己的功能。 由於一些現有的軟體,例如Firefox、WordPress越來越受到開發人員的關注,插件的開發也日益流行,人們都在說「But if only it could do THIS…」 只要你掌握了HTML,JavaScript和CSS,你就可以在任何的瀏覽器里開發你想要的很多東西。 Bookmarklets,Greasemonkeyuser scripts, 和Stylishuser styles這些軟體都是用的更普通頁面一樣的語言寫成的, 這幾個東西都值得你去研究一些。 更高級的瀏覽器擴展程序,例如Firefox的擴展,它們可以幫助你很多。 開發Firefox的擴展,舉個例子,需要你精通JavaScript和XML(一種標記語言,類似HTML,但具有更嚴格的格式)。 早在2007年我就寫下來how to build a Firefox extension, 這是我在笨手笨腳的研究網上的一些學習資料後獲得的成果。 很多免費的、受歡迎的web應用程序都提供了擴展框架,例如WordPress 和 MediaWiki。 這些應用程序都是用PHP寫成的,所以只有對PHP熟悉你才能做這些事情。 這個就是如何編寫WordPress插件。 而想駕馭Google Wave前沿技術的開發人員可以從使用HTML, JavaScript, Java, 和 Python 寫小組件和小工具開始。 我寫的第一個Wave bot是跟著這個一個下午時間的快速入門指導開始的。 開發桌面上的Web應用程序 學習編程最好的結果是你在一個環境下學的東西可以應用到另外的環境中。 先學習開發web應用程序的好處就是我們有一些方法可以讓web應用程序直接在桌面上運行。 例如,Adobe AIR是一個跨平台的即時運行平台,它能讓你編寫的程序運行在任何裝有AIR的操作系統的桌面上。 AIR應用程序都是由HTML, Flash, 或 Flex 寫成的,所以它能讓你的web程序在桌面環境中運行。 AIR是開發部署桌面應用程序的一個優秀的選擇,就像我們提到過的10個讓你值得去安裝AIR的應用程序。 移動應用開發 能在iPhone或者Android智能手機上運行的手機應用程序的開發如今正呈現井噴之勢,所以你也可以夢想一下如何在iTunes應用商店裡通過你的天才程序大賺一筆。 但是,作為一個編碼新手,直接奔向移動開發所經歷的學習曲線可能會很陡,因為它需要你熟悉高級的編程語言,例如Java和Objective C。 然而,你當然應該看看iPhone 和 Android 編程究竟是什麼樣子的。 閱讀這個簡單的iPhone應用開發例子可以初步認識一下iPhone程序的開發過程。 Android 程序都是由Java寫成的,這有一個簡單的視頻教程教你如何開發第一個」Hello Android「程序(註:可能需要代理才能看這個視頻)。 耐心,刻苦,嘗試,失敗 好的程序員都有一個不達目的誓不罷休的品質,他們會驚喜於通過長期推敲和失敗換來的一點成績。 學會編程會有很好的回報的,但是學習的過程可能會是飽受挫折和孤獨的。 如果有可能,最好找個伴一起陪你做這件事。 想精通編程,這和其他事情一樣,需要堅持,反復嘗試,獲得更多的經驗。

❺ 程序員需要具備哪些知識

1、程序員需要學會主動學習,要懂得懂得不斷精進自己的專業技能。
2、程序員需要具有個人品牌意識,要學會自我營銷,在業界打造自己的個人品牌。
3、程序員重視單元測試,專業的程序員需要知道單元測試的重要性,會把測試代碼和產品代碼看的一樣重要。
4、程序員要善於管理時間。尊重對方的時間。只召集那些必要的同事參加會議,並且會在會議前整理好會議的主題和議程。
5、程序員要善於管理精力。專業的程序員能夠讓自己精力充沛地投入到工作中。
6、程序員要善於管理壓力。專業的程序員會盡量避免壓力,他們謹慎承諾,不答應做不到的事情;懂得保持代碼的整潔,方便問題定位和重構代碼。
7、要懂得去掌握一些編程之外的技術。專業的程序員除了們具備計算機原理、TCP/IP協議這些計算機學科的基礎知識,他們也會對常用的Shell命令牢記於心,他們還善於使用各種工具的快捷鍵來提升他們的工作效率。

❻ 程序員為什麼要學深度學習

費良宏:程序員為什麼要學深度學習?

深度學習本身是一個非常龐大的知識體系。本文更多想從程序員的視角出發,讓大家觀察一下深度學習對程序員意味著什麼,以及我們如何利用這樣一個高速發展的學科,來幫助程序員提升軟體開發的能力。
本文根據費良宏在2016QCon全球軟體開發大會(上海)上的演講整理而成。
前言
1973年,美國上映了一部熱門的科幻電影《WestWorld》,三年之後又有一個續集叫做《FutureWorld》。這部電影在80年代初被引進到中國叫《未來世界》。那部電影對我來講簡直可以說得上是震撼。影片中出現了很多機器人,表情豐富的面部下面都是集成電路板。這讓那時候的我覺得未來世界都是那麼遙遠、那麼神秘。
時間到了2016年,很多朋友可能都在追看HBO斥巨資拍攝的同一題材的系列劇《WestWorld》。如果前兩部電影還是局限在機器人、人工智慧這樣的話題,2016年的新劇則在劇情和人工智慧的思考方面有了很大的突破。不再渲染機器人是否會威脅到人類,而是在探討「Dreamsaremainlymemories」這一類更具哲理的問題。
「記憶究竟如何影響了智能」這個話題非常值得我們去思考,也給我們一個很好的啟示——今天,人工智慧領域究竟有了怎樣的發展和進步。
今天我們探討的話題不僅僅是簡單的人工智慧。如果大家對深度學習感興趣,我相信各位一定會在搜索引擎上搜索過類似相關的關鍵字。我在Google上以deeplearning作為關鍵字得到了2,630萬個搜索的結果。這個數字比一周之前足足多出了300多萬的結果。這個數字足以看得出來深度學習相關的內容發展的速度,人們對深度學習的關注也越來越高。

從另外的一個角度,我想讓大家看看深度學習在市場上究竟有多麼熱門。從2011年到現在一共有140多家專注人工智慧、深度學習相關的創業公司被收購。僅僅在2016年這種並購就發生了40多起。
其中最瘋狂的是就是Google,已經收購了 11 家人工智慧創業公司,其中最有名的就是擊敗了李世石九段的 DeepMind。排名之後的就要數 Apple、Intel以及Twitter。以Intel 公司為例,僅在今年就已經收購了 3 家創業公司,Itseez、Nervana 和 Movidius。這一系列大手筆的並購為了布局人工智慧以及深度學習的領域。
當我們去搜索深度學習話題的時候,經常會看到這樣的一些晦澀難懂的術語:Gradient descent(梯度下降演算法)、Backpropagation(反向傳播演算法)、Convolutional Neural Network(卷積神經網路)、受限玻耳茲曼機(Restricted Boltzmann Machine)等。
如打開任何一篇技術文章,你看到的通篇都是各種數學公式。大家看到如下左邊的圖,其實並不是一篇高水準的學術論文,而僅僅是維基網路關於玻耳茲曼機的介紹。維基網路是科普層面的內容,內容復雜程度就超過了大多數數學知識的能力。

在這樣的背景之下,我今天的的話題可以歸納成三點:第一,我們為什麼要學習深度學習;第二,深度學習最核心的關鍵概念就是神經網路,那麼究竟什麼是神經網路;第三,作為程序員,當我們想要成為深度學習開發者的時候,我們需要具備怎樣的工具箱,以及從哪裡著手進行開發。
為什麼要學習深度學習
首先,我們談談為什麼要學習深度學習。在這個市場當中,最不缺乏的就是各種概念以及各種時髦新技術的詞彙。深度學習有什麼不一樣的地方?我非常喜歡AndrewNg(吳恩達)曾經用過的一個比喻。
他把深度學習比喻成一個火箭。這個火箭有一個最重要的部分,就是它的引擎,目前來看在這個領域裡面,引擎的核心就是神經網路。大家都知道,火箭除了引擎之外還需要有燃料,那麼大數據其實就構成了整個火箭另外的重要組成部分——燃料。以往我們談到大數據的時候,更多是強調存儲和管理數據的能力,但是這些方法和工具更多是對於以往歷史數據的統計、匯總。
而對於今後未知的東西,這些傳統的方法並不能夠幫助我們可以從大數據中得出預測的結論。如果考慮到神經網路和大數據結合,我們才可能看清楚大數據真正的價值和意義。AndrewNg就曾經說過「我們相信(神經網路代表的深度學習)是讓我們獲得最接近於人工智慧的捷徑」。這就是我們要學習深度學習的一個最重要的原因。

其次,隨著我們進行數據處理以及運算能力的不斷提升,深度學習所代表的人工智慧技術和傳統意義上人工智慧技術比較起來,在性能上有了突飛猛進的發展。這主要得益於在過去幾十間計算機和相關產業不斷發展帶來的成果。在人工智慧的領域,性能是我們選擇深度學習另一個重要的原因。

這是一段Nvidia在今年公布的關於深度學習在無人駕駛領域應用的視頻。我們可以看到,將深度學習應用在自動駕駛方面,僅僅經歷了3千英里的訓練,就可以達到什麼樣的程度。在今年年初進行的實驗上,這個系統還不具備真正智能能力,經常會出現各種各樣的讓人提心吊膽的狀況,甚至在某些情況下還需要人工干預。
但經過了3千英里的訓練之後,我們看到在山路、公路、泥地等各種復雜的路況下面,無人駕駛已經有了一個非常驚人的表現。請大家注意,這個深度學習的模型只經過了短短幾個月、3千英里的訓練。
如果我們不斷完善這種模型的話,這種處理能力將會變得何等的強大。這個場景裡面最重要的技術無疑就是深度學習。我們可以得出一個結論:深度學習可以為我們提供強大的能力,如果程序員擁有了這個技術的話,無異於會讓每個程序員如虎添翼。
神經網路快速入門
如果我們對於學習深度學習沒有任何疑慮的話,接下來就一定會關心我需要掌握什麼樣的知識才能讓我進入到這個領域。這裡面最重要的關鍵技術就是「神經網路」。說起「神經網路」,容易混淆是這樣兩個完全不同的概念。
一個是生物學神經網路,第二個才是我們今天要談起的人工智慧神經網路。可能在座的各位有朋友在從事人工智慧方面的工作。當你向他請教神經網路的時候,他會拋出許多陌生的概念和術語讓你聽起來雲里霧里,而你只能望而卻步了。
對於人工智慧神經網路這個概念,大多數的程序員都會覺得距離自己有很大的距離。因為很難有人願意花時間跟你分享神經網路的本質究竟是什麼。而你從書本上讀的到的理論和概念,也很讓你找到一個清晰、簡單的結論。
今天就我們來看一看,從程序員角度出發神經網路究竟是什麼。我第一次知道神經網路這個概念是通過一部電影——1991年上映的《終結者2》。男主角施瓦辛格有一句台詞:
「MyCPUisaneural-netprocessor;alearningcomputer.」(我的處理器是一個神經處理單元,它是一台可以學習的計算機)。從歷史來看人類對自身智力的探索,遠遠早於對於神經網路的研究。
1852年,義大利學者因為一個偶然的失誤,將人類的頭顱掉到硝酸鹽溶液中,從而獲得第一次通過肉眼關注神經網路的機會。這個意外加速了對人類智力奧秘的探索,開啟了人工智慧、神經元這樣概念的發展。
生物神經網路這個概念的發展,和今天我們談的神經網路有什麼關系嗎?我們今天談到的神經網路,除了在部分名詞上借鑒了生物學神經網路之外,跟生物學神經網路已經沒有任何關系,它已經完全是數學和計算機領域的概念,這也是人工智慧發展成熟的標志。這點大家要區分開,不要把生物神經網路跟我們今天談到的人工智慧有任何的混淆。

90年代中期,由Vapnik等人提出了支持向量機演算法(Support Vector Machines,支持向量機)。很快這個演算法就在很多方面體現出了對比神經網路的巨大優勢,例如:無需調參、高效率、全局最優解等。基於這些理由,SVM演算法迅速打敗了神經網路演算法成為那個時期的主流。而神經網路的研究則再次陷入了冰河期。
在被人摒棄的十年裡面,有幾個學者仍然在堅持研究。其中很重要的一個人就是加拿大多倫多大學的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發表了論文,首次提出了「深度信念網路」的概念。
與傳統的訓練方式不同,「深度信念網路」有一個「預訓練」(pre-training)的過程,這可以方便的讓神經網路中的權值找到一個接近最優解的值,之後再使用「微調」(fine-tuning)技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網路的時間。在他的論文裡面,他給多層神經網路相關的學習方法賦予了一個新名詞— 「深度學習」。
很快,深度學習在語音識別領域嶄露頭角。接著在2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千個類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。
這個結果充分證明了多層神經網路識別效果的優越性。從那時起,深度學習就開啟了新的一段黃金時期。我們看到今天深度學習和神經網路的火熱發展,就是從那個時候開始引爆的。

利用神經網路構建分類器,這個神經網路的結構是怎樣的?

其實這個結構非常簡單,我們看到這個圖就是簡單神經網路的示意圖。神經網路本質上就是一種「有向圖」。圖上的每個節點借用了生物學的術語就有了一個新的名詞 – 「神經元」。連接神經元的具有指向性的連線(有向弧)則被看作是「神經」。這這個圖上神經元並不是最重要的,最重要的是連接神經元的神經。每個神經部分有指向性,每一個神經元會指向下一層的節點。
節點是分層的,每個節點指向上一層節點。同層節點沒有連接,並且不能越過上一層節點。每個弧上有一個值,我們通常稱之為」權重「。通過權重就可以有一個公式計算出它們所指的節點的值。這個權重值是多少?我們是通過訓練得出結果。它們的初始賦值往往通過隨機數開始,然後訓練得到的最逼近真實值的結果作為模型,並可以被反復使用。這個結果就是我們說的訓練過的分類器。
節點分成輸入節點和輸出節點,中間稱為隱層。簡單來說,我們有數據輸入項,中間不同的多個層次的神經網路層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結果也被稱作輸出節點,輸出節點是有限的數量,輸入節點也是有限數量,隱層是我們可以設計的模型部分,這就是最簡單的神經網路概念。
如果簡單做一個簡單的類比,我想用四層神經網路做一個解釋。左邊是輸入節點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數據項。中間隱層就是我們設計出來的神經網路,這個網路現在有不同的層次,層次之間權重是我們不斷訓練獲得一個結果。
最後輸出的結果,保存在輸出節點裡面,每一次像一個流向一樣,神經是有一個指向的,通過不同層進行不同的計算。在隱層當中,每一個節點輸入的結果計算之後作為下一層的輸入項,最終結果會保存在輸出節點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經網路的簡單概述。

除了從左到右的形式表達的結構圖,還有一種常見的表達形式是從下到上來表示一個神經網路。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以AndrewNg和LeCun的文獻使用較多。而在Caffe框架里則使用的則是從下到上的表達。
簡單來說,神經網路並不神秘,它就是有像圖,利用圖的處理能力幫助我們對特徵的提取和學習的過程。2006年Hinton的那篇著名的論文中,將深度學習總結成三個最重要的要素:計算、數據、模型。有了這三點,就可以實現一個深度學習的系統。
程序員需要的工具箱
對於程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們看看,對於程序員來說,著手深度學習的實踐需要准備什麼樣的工具。
硬體
從硬體來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構以外,還出現了附加有乘法器的CPU,用以提升計算能力。此外在不同領域會有DSP的應用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學習應用比較熱門的領域。最後一類就是FPGA(可編程邏輯門陣列)。
這四種方法各有其優缺點,每種產品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調度,比如讀取數據,管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。
這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的演算法。GPU的管理能力更弱一些,但是運算能力更強。但由於計算單元數量多,更適合整塊數據進行流處理的演算法。
FPGA在管理與運算處理方面都很強,但是開發周期長,復雜演算法開發難度較大。就實時性來說,FPGA是最高的。單從目前的發展來看,對於普通程序員來說,現實中普遍採用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領域。

這是我前天為這次分享而准備的一個AWS 上p2的實例。僅僅通過幾條命令就完成了實例的更新、驅動的安裝和環境的設置,總共的資源創建、設置時間大概在10分鍾以內。而之前,我安裝調試前面提到的那台計算機,足足花了我兩天時間。

另外,從成本上還可以做一個對比。p2.8xLarge 實例每小時的費用是7.2美元。而我自己那台計算機總共的花費了是¥16,904元。這個成本足夠讓我使用350多個小時的p2.8xLarge。在一年裡使用AWS深度學習站就可以抵消掉我所有的付出。隨著技術的不斷的升級換代,我可以不斷的升級我的實例,從而可以用有限的成本獲得更大、更多的處理資源。這其實也是雲計算的價值所在。
雲計算和深度學習究竟有什麼關系?今年的8月8號,在IDG網站上發表了一篇文章談到了這個話題。文章中做了這樣一個預言:如果深度學習的並行能力不斷提高,雲計算所提供的處理能力也不斷發展,兩者結合可能會產生新一代的深度學習,將帶來更大影響和沖擊。這是需要大家考慮和重視的一個方向!
軟體
深度學習除了硬體的基礎環境之外。程序員會更關心與開發相關的軟體資源。這里我羅列了一些曾經使用過的軟體框架和工具。

Scikit-learn是最為流行的一個Python機器學習庫。它具有如下吸引人的特點:簡單、高效且異常豐富的數據挖掘/數據分析演算法實現; 基於NumPy、SciPy以及matplotlib,從數據探索性分析,數據可視化到演算法實現,整個過程一體化實現;開源,有非常豐富的學習文檔。
Caffe專注在卷及神經網路以及圖像處理。不過Caffe已經很久沒有更新過了。這個框架的一個主要的開發者賈揚清也在今年跳槽去了Google。也許曾經的霸主地位要讓位給他人了。
Theano 是一個非常靈活的Python 機器學習的庫。在研究領域非常流行,使用上非常方便易於定義復雜的模型。Tensorflow 的API 非常類似於Theano。我在今年北京的QCon 大會上也分享過關於Theano 的話題。
Jupyter notebook 是一個很強大的基於ipython的python代碼編輯器,部署在網頁上,可以非常方便的進行互動式的處理,很適合進行演算法研究合數據處理。
Torch 是一個非常出色的機器學習的庫。它是由一個比較小眾的lua語言實現的。但是因為LuaJIT 的使用,程序的效率非常出色。Facebook在人工智慧領域主打Torch,甚至現在推出了自己的升級版框架Torchnet。
深度學習的框架非常之多,是不是有一種亂花漸欲迷人眼的感覺?我今天向各位程序員重點介紹的是將是TensorFlow。這是2015年穀歌推出的開源的面向機器學習的開發框架,這也是Google第二代的深度學習的框架。很多公司都使用了TensorFlow開發了很多有意思的應用,效果很好。
用TensorFlow可以做什麼?答案是它可以應用於回歸模型、神經網路以深度學習這幾個領域。在深度學習方面它集成了分布式表示、卷積神經網路(CNN)、遞歸神經網路(RNN) 以及長短期記憶人工神經網路(Long-Short Term Memory, LSTM)。
關於Tensorflow 首先要理解的概念就是Tensor。在辭典中對於這個詞的定義是張量,是一個可用來表示在一些向量、標量和其他張量之間的線性關系的多線性函數。實際上這個表述很難理解,用我自己的語言解釋Tensor 就是「N維數組」而已。

使用 TensorFlow, 作為程序員必須明白 TensorFlow這樣幾個基礎概念:它使用圖 (Graph) 來表示計算任務;在被稱之為 會話 (Session) 的上下文 (context) 中執行圖;使用 Tensor 表示數據;通過 變數 (Variable) 維護狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據。
一句話總結就是,TensorFlow 就是有狀態圖的數據流圖計算環境,每個節點就是在做數據操作,然後提供依賴性和指向性,提供完整數據流。
TensorFlow安裝非常簡單,但官網提供下載的安裝包所支持的CUDA 的版本是7.5。考慮到CUDA 8 的讓人心動的新特以及不久就要正式發布的現狀。或許你想會考慮立即體驗CUDA 8,那麼就只能通過編譯Tensorflow源代碼而獲得。目前TensorFlow已經支持了Python2.7、3.3+。
此外,對於使用Python 語言的程序員還需要安裝所需要的一些庫,例如:numpy、protobuf等等。對於卷積處理而言,cuDNN是公認的性能最好的開發庫,請一定要安裝上。常規的Tensorsorflow的安裝很簡單,一條命令足矣:
$ pip3 install —upgrade https://storage.233.wiki/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl
如果想評估一下或者簡單學習一下,還可以通過Docker進行安裝,安裝的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多優點。首先,目前為止,深度學習的開發框架裡面TensorFlow的文檔做的最好,對程序員學習而言是非常好的一點。第二,TensorFlow有豐富的參考實例,作為參考學習起來非常容易。
第三,開發者社區活躍,在任何一個深度學習的社區里,都有大量關於TensorFlow的討論。第四,谷歌的支持力度非常大,從2015年到現在升級速度非常快,這是其他開源框架遠遠達不到的結果。
參考TensorFlow的白皮書,我們會看到未來TensorFlow還將會有巨大的發展潛力。讓我特別感興趣是這兩個方向。第一,支持跨多台機器的 parallelisation。盡管在0.8版本中推出了並行化的能力,但是目前還不完善。隨著未來不斷發展,依託雲計算的處理能力的提升這個特性將是非常讓人振奮的。
第二,支持更多的開發語言,對於開發者來說這是一個絕大的利好,通過使用自己擅長的語言使用TensorFlow應用。這些開發語言將會擴展到Java、Lua以及R 等。
在這里我想給大家展示一個應用Tensorflow 的例子。這個例子的代碼託管在這個網址上 https://github.com/anishathalye/neural-style。白俄羅斯的現代印象派藝術家Leonid Afremov善於用濃墨重彩來表現都市和風景題材,尤其是其雨景系列作品。他習慣用大色塊的鋪陳來營造光影效果,對反光物體和環境色的把握非常精準。
於是我就找到了一張上海東方明珠電視塔的一張攝影作品,我希望通過Tensorflow 去學習一下Leonid Afremov 的繪畫風格,並將這張東方明珠的照片處理成那種光影色彩豐富的作品風格。利用Tensorflow 以及上面提到的那個項目的代碼,在一個AWS 的p2類型的實例上進行了一個一千次的迭代,於是就得到了下圖這樣的處理結果。

這個處理的代碼只有350行里,模型使用了一個成名於2014年ImageNet比賽中的明星 VGG。這個模型非常好,特點就是「go depper」。
TensorFlow 做出這樣的作品,並不僅僅作為娛樂供大家一笑,還可以做更多有意思的事情。將剛才的處理能力推廣到視頻當中,就可以看到下圖這樣的效果,用梵高著名的作品」星月夜「的風格就加工成了這樣新的視頻風格。

可以想像一下,如果這種處理能力在更多領域得以應用,它會產生什麼樣的神奇結果?前景是美好的,讓我們有無限遐想。事實上我們目前所從事的很多領域的應用開發都可以通過使用神經網路和深度學習來加以改變。對於深度學習而言,掌握它並不是難事。每一個程序員都可以很容易的掌握這種技術,利用所具備的資源,讓我們很快成為深度學習的程序開發人員。
結束語
未來究竟是什麼樣,我們沒有辦法預言。有位作家Ray Kurzweil在2005年寫了《奇點臨近》一書。在這本書裡面他明確告訴我們,那個時代很快到來。作為那個時代曙光前的人群,我們是不是有能力加速這個過程,利用我們學習的能力實現這個夢想呢?

中國人工智慧的發展
人工智慧的時代無疑已經到來,這個時代需要的當然就是掌握了人工智慧並將其解決具體問題的工程師。坦率的說,市場上這一類的工程師還屬於鳳毛麟角。職場上的薪酬待遇可以看得出來這樣的工程師的搶手的程度。人工智慧這門學科發展到今天,就學術自身而言已經具備了大規模產業化的能力。
所以說,對於工程師而言當務之急就是盡快的掌握應用人工智慧的應用技術。當下在互聯網上關於人工智慧的學習資料可以說已經是「汗牛充棟」,那些具備了快速學習能力的工程師一定會在人工智慧的大潮當中脫穎而出。
中國發展人工智慧產業的環境已經具備。無論從創業環境、人員的素質乃至市場的機遇而言完全具備了產生產業變革的一切條件。與美國相比較,在人工智慧的許多領域中國團隊的表現也可以說是不逞多讓。就人工智慧的技術層面而言,中國的工程師與全球最好的技術團隊正處於同一個起跑線上。
時不我待,中國的工程師是有機會在這個領域大展身手的。不過值得注意的是,要切忌兩點:一是好高騖遠,盲目與國外攀比。畢竟積累有長短,術業有專攻,我們要立足於已有的積累,尋求逐步的突破。二是一擁而上,盲目追求市場的風口。人工智慧的工程化需要大量的基礎性的積累,並非一蹴而就簡單復制就可以成功。
中國的科研技術人員在人工智慧領域的成就有目共睹。在王詠剛的一篇文章裡面,他統計了從2013年到2015年SCI收錄的「深度學習」論文,中國在2014年和2015年超已經超過了美國居於領跑者的位置。
另外一讓我感到驚訝的事情,Google的JeffDean在2016年發表過一篇名為《TensorFlow:Asystemforlarge-scalemachinelearning》的論文。文章的22個作者裡面,明顯是中國名字的作者占已經到了1/5。如果要列舉中國人/華人在人工智慧領域里的大牛,吳恩達、孫劍、楊強、黃廣斌、馬毅、張大鵬……很容易就可以說出一大串。
對於中國來說目前的當務之急是人工智慧技術的產業化,唯有如此我們才可以講科研/智力領域的優勢轉化為整體的、全面的優勢。在這一點上,中國是全球最大的消費市場以及製造業強國,我們完全有機會藉助市場的優勢成為這個領域的領先者。
矽谷創新企業
矽谷雖然去過許多回,但一直無緣在那裡長期工作。在人工智慧領域的市場我們聽到的更多是圍繞Google、Apple、Intel、Amazon這樣的一些大型科技公司的一舉一動。但是在美國市場上還有一大批小型的創業企業在人工智慧這個領域有驚艷的表現。僅以矽谷區域的公司為例:
Captricity,提供了手寫數據的信息提取;
VIVLab,針對語音識別開發了虛擬助手服務;
TERADEEP,利用FPGA提供了高效的卷積神經網路的方案;
還有提供無人駕駛解決方案的NetraDyne。
這個名單還可以很長,還有許許多多正在利用人工智慧技術試圖去創造歷史的團隊正在打造他們的夢想。這些團隊以及他們正在專注的領域是值得我們去學習和體會的。

❼ 程序員未來前景如何大齡程序員出路在哪裡

年齡大的普通程序員,將來的出路無非就是以下三個:
1、穩定地待在一家公司,有一定產出效率,成為一顆螺絲釘,不出彩也不出醜,就像之前棉紡廠的工人那樣,直到這家公司不行了,找另一家,繼續做個普通一兵。其實這事兒和幾十年前的工人一樣,只是時代不一樣,職業的名字變了。
2、尋找相對優勢,到稀缺你技術、能力、經驗的地方,找到存在感。比如一線城市回退到二線、三線;比如互聯網頂級公司的普通程序員進入小公司;比如互聯網行業的普通程序員進入傳統行業有軟體部門的公司。
3、轉行,想干什麼干什麼去,很多人認為,一個 35 歲以上的程序員相比較一個 20來歲的畢業生,精神狀況、身體狀況必定是不如剛剛大學畢業的年輕人,所以要盡早轉行。那麼問題來了,程序員是吃青春飯的嗎?程序員的職業發展到底如何呢?
首先,我覺得時至今日,相比其他職業,程序員仍然是一個投入產出比比較高的職業。程序員不是一個「吃青春飯」的職業,而是一個常青的職業。程序員其實也並沒有我們想像中那麼累,很多互聯網公司的工作環境、工作氛圍、員工福利都是非常不錯的:彈性工作,定期團建,免費健身;一日三餐、零食飲料應有盡有。對於頭腦靈活、思維敏捷,但還沒有明確職業目標的理工科畢業生而言,把程序員作為職業生涯的起點,應該會是一個不錯的選擇。以北京為例,應屆畢業起薪在 8000-10000 元,比其他職業高出不少。程序員現在小蜜蜂雲工作了解很多遠程可辦公的,全職兼職都是有的,可供的選擇還是比較多的。
程序員在職業生涯第一個階段,通常是 3-5 年。這個階段要以職業探索為主,腳踏實地寫好每一行代碼。只有快速學習和成長,掌握過硬的專業技能,這樣才能在職場立足,走好未來的路。現在程序員的職業領域已經細分到了令人發指的地步,比如:大數據工程師、雲計算工程師、某某語言工程師、系統架構師、web 前端工程師、嵌入式軟體工程師、資料庫開發工程師等等。

❽ 請問下程序員要學些什麼 程序員又有哪些分類

這個就多了去了,你可以先從招聘網站之類的地方看看公司的職位要求,就知道勝任工作所需的技術,也可以看看有哪些不同的方面。這樣就有目標了。
至於學習資料網上很多。
如果你著急找工作,學點網頁前端的技術,這玩意兒入門門檻低,學習周期短。其他的要求的不是一點兩點的技術,而是很多。

閱讀全文

與第三屆程序員學習相關的資料

熱點內容
公益捐款類app叫什麼名字 瀏覽:681
我的世界迷你玩家為什麼要炸掉伺服器 瀏覽:161
androidget中文亂碼問題 瀏覽:329
張明楷刑法學pdf 瀏覽:564
曙光集pdf 瀏覽:845
雲播影視app在哪裡下載 瀏覽:724
安卓手機電池不耐用怎麼辦呢 瀏覽:149
何老師講單片機 瀏覽:296
農民和程序員哪個好做 瀏覽:478
槍林彈雨伺服器怎麼樣 瀏覽:589
我的世界伺服器怎麼掛機器人 瀏覽:815
雲聽app怎麼使用不了 瀏覽:763
delllinux驅動 瀏覽:899
latex無法編譯數學符號 瀏覽:568
在哪個app上買筆芯 瀏覽:276
嵌入式是程序員嗎 瀏覽:122
怎麼提取伺服器資料庫 瀏覽:224
mysql觸發器調用PHP 瀏覽:152
小米手環5nfc門禁加密怎麼辦 瀏覽:112
linux下javaweb 瀏覽:260