剛進入大學計算機專業,該如何選擇學習的程序語言和方向?
- 學web,有實驗室的支持,但實驗室畢竟是課外的。
- 學c++有課堂,和網路資源,也有老師的支持
- 自己的興趣更傾向於c++方向,但是也因為外界的聲音,看見很多人都學web,而且web找工作似乎更容易些,自己也有一點web的基礎,比別人提前一步。
- 將來想進百度,騰訊之類的,看見他們招的web的比較多,所以現在很猶豫不知道學什麼
- 也想過同時進行,但是發現這樣每個都學不好。
ps:x現在大一
@狼大人 ,求不黑,我是個菜 ……
關於 Web 前端,引用 @玉伯 前輩提到的這張圖。
正如 @狼大人 所說,Web 前端 的工作是靠工具驅動,從承載體「瀏覽器(WebView)」,到各種框架類庫,再到輔助設計工具「Adobe 系」等。
也因此,很多時候做前端的時候會有這麼個狀態 ——「什麼都不懂,但什麼能做,至少看起來像個樣子」,於是,很多人在這個階段便停止了前進,自甘為 Ctrl - C/V 的螺絲,不管是在大公司還是小作坊。
所以,前端的入門門檻可謂相對低,了解一些規則,會編輯文本,就可以開始幹活了。
自然的,看上去,這行業的人相當多。特別是在大公司里,在細緻分工下,員工往往成為了單一工具。不想這樣?那就別停下來。
前端可以玩的東西也很多,一直靠工具生成,自然不會有什麼進步。
比如,HTML是個 樹形結構 吧,CSS(Cascading Style Sheet)和之結合,其實也算是一個關係資料庫。
所以請用數據處理的思維和方法來看這一塊。看看 JavaScript/jQuery 所提供 DOM 操作的介面特點,
給的方法無非是 SCRUD (SearchCreateReadUpdateDelete),這其實也是編程的一種吧 —— 數據處理(呃,編程的本質貌似就是數據處理來著)再進一步,看看一些 MVC 的前端框架。AngularJS — Superheroic JavaScript MVW FrameworkBackbone.js等等
會驚呼,「原來還能這麼玩」。厭倦了 手寫 CSS 的重複勞動,還有 LESS,還有 SCSS/SASS。
又或是討厭等待設計稿、或者反覆修改而頻繁使用 PS/AI
試試 Canvas 、SVG 、CSS3,讓一切設計可調。Paper.js — Paper.jsKineticJS HTML5 Canvas FrameworkRapha?l—JavaScript Library或者還想玩玩 3D 有 three.js - JavaScript 3D library
或者想讓交互效果更絢麗 有 GSAP JS – Professional-Grade JavaScript Animation ? GreenSock項目玩大了怎麼辦,和其他項目管理一樣,該模塊化的模塊化,
RequireJS
Sea.js - A Module Loader for the Web當然還有前面提到的 MVC 框架里有一樣的。至於前端(HTML+CSS+JS)適用性
node.jsApache Cordova (即 PhoneGap,雖然 bug 不少)可用面還是很廣的了。面向其他行業,除了最底層的硬體設備上,開發行業應用足夠了。更多 JSDB.io - The Database of JavaScript Libraries
畢竟歸根到底,都是數據,都是模型,都是邏輯,都是數學。
而設計方面,多看、多模仿、多做、多想(想遮蔽層次,想色彩搭配),
找感覺,沒別的了。最後,樓主要走什麼樣的路,只能建議聽聽自己的興趣怎麼說。
現階段也只是「前端廚子」初級(使用各種工具,實現需求),也就是說這麼多了,見笑。推薦一篇文章:
程序員練級寶典月光博客6月12日發表了《寫給新手程序員的一封信》,翻譯自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告訴我,他希望在酷殼上看到一篇更具操作性的文章。因為他也是喜歡編程和技術的傢伙,於是,我讓他把他的一些學習Python和Web編程的一些點滴總結一下。於是他給我發來了一些他的心得和經歷,我在把他的心得做了不多的增改,並根據我的經歷增加了「進階」一節。這是一篇由新手和我這個老傢伙根據我們的經歷完成的文章。我的這個朋友把這篇文章取名叫Build Your Programming Technical Skills,我實在不知道用中文怎麼翻譯,但我在寫的過程中,我覺得這很像一個打網遊做任務升級的一個過程,所以取名叫「技術練級攻略」,題目有點大,呵呵,這個標題純粹是為了好玩。這裡僅僅是在分享Mailper和我個人的學習經歷。(註:省去了我作為一個初學者曾經學習過的一些技術(今天明顯過時了),如:Delphi/Power builder,也省去了我學過的一些我覺得沒意思的技術Lotus Notes/ActiveX/COM/ADO/ATL/.NET ……)前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)建議:不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什麼樣。一定要動手,例子不管多麼簡單,建議至少自己手敲一遍看看是否理解了裡頭的細枝末節。一定要學會思考,思考為什麼要這樣,而不是那樣。還要舉一反三地思考。註:你也許會很奇怪為什麼下面的東西很偏Unix/Linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以後的趨勢是前端是Web+移動,後端是Linux+開源。開發這邊基本上沒Windows什麼事。啟蒙入門
1、 學習一門腳本語言,例如Python/Ruby可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)遍曆本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果跟資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量學會用各種print之類簡單粗暴的方式進行調試學會用Google (phrase, domain, use reader to follow tech blogs)為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。Source Insight (或 ctag)使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧一定要少用少用圖形界面。學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …學會使用一些文本操作命令 sed/awk/grep/tail/less/more …學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息了解正則表達式,使用正則表達式來查找文件。對於程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。學習HTML基本語法學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。學習使用Javascript操縱HTML元件。理解DOM和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O"Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)在一台機器上配置Apache 或 Nginx學習PHP,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)跟完一個名校的網路編程課程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業餘時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)買個域名,租個空間,做個自己的網站。進階加深1、 C語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。學習(麻省理工免費課程)計算機科學和編程導論學習(麻省理工免費課程)C語言內存管理學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)IPC和Socket的東西可以放到高級中來實踐。學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)寫一個窗口,了解WinMain/WinProcedure,以及Windows的消息機制。寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)學習JDK,學會查閱Java API Doc Java Platform SE 6了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。3、Web的安全與架構
學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這裡就不羅列了。學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)學習Web的靜態頁面緩存技術。學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。實踐任務:使用HTML5的canvas 製作一些Web動畫。嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站4、學習關係型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……學習資料庫的存過,觸發器,視圖,建索引,游標等。學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)學習如何優化資料庫查詢(參看《MySQL的優化》)實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。5、一些開發工具
學會使用SVN或Git來管理程序版本。學會使用JUnit來對Java進行單元測試。學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。推薦閱讀《代碼大全》《重構》《代碼整潔之道》高級深入1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」學習(麻省理工免費課程)C++面向對象編程讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。實踐任務:用C++實現一個BigInt,支持128位的整形的加減乘除的操作。用C++封裝一個數據結構的容量,比如hash table。用C++封裝並實現一個智能指針(一定要使用模板)。《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)實踐任務:使用工廠模式實現一個內存池。使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。使用命令模式實現一個命令行計算器,並支持undo和redo。使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼。實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能做一個貪吃蛇或是俄羅斯方塊的遊戲。支持不同的級別和難度。做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。推薦閱讀《Effective Java》 and 《Java解惑》學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。學習使用Java做Web Service (官方教程在這裡)實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:深究C++(我深究C/C++了十來年了)學習Java的各種設計模式。2、加強系統了解
重要閱讀下面的幾本書:《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。實踐任務:理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。寫一個簡易的HTTP伺服器。《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。實踐任務:主要實踐各種IPC進程序通信的方法。嘗試寫一個管道程序,父子進程通過管道交換數據。嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)實踐任務:通過以上的所有知識,嘗試寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)多層分散式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。CDN系統 – 就近訪問,內容邊緣化。P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。學習Thrift,二進位的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。學習Hadoop。Hadoop框架中最核心的設計就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapReduce就是「任務的分解與結果的匯總」。HDFS是Hadoop分散式文件系統(Hadoop Distributed File System)的縮寫,為分散式計算存儲提供了底層支持。了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關係型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。寫了那麼多,回顧一下,覺得自己相當的有成就感。希望大家不要嚇著,我自己這十來年也在不斷地學習,今天我也在學習中,人生本來就是一個不斷學習和練級的過程。不過,一定有漏的,也有不對的,還希望大家補充和更正。(我會根據大家的反饋隨時更新此文)歡迎大家通過我的微博(@左耳朵耗子)和twitter(@haoel)和我交流。—– 更新 2011/07/19 —–
1)有朋友奇怪為什麼我在這篇文章開頭說了web+移動,卻沒有在後面提到iOS/Android的前端開發。因為我心裡有一種感覺,移動設備上的UI最終也會被Javascript取代。大家可以用iPhone或Android看看google+,你就會明白了。
2)有朋友說我這裡的東西太多了,不能為了學習而學習,我非常同意。我在文章的前面也說了要思考。另外,千萬不要以為我說的這些東西是一些新的技術,這份攻略里95%以上的全是基礎。而且都是久經考驗的基礎技術。即是可以讓你一通百通的技術,也是可以讓你找到一份不錯工作的技術。
3)有朋友說學這些東西學完都40了,還不如想想怎麼去掙錢。我想告訴大家,一是我今年還沒有40歲,二是學無止境啊,三是我不覺得掙錢有多難,難的是怎麼讓你值那麼多錢?
無論是打工還是創業,是什麼東西讓你自己的價值,讓你公司的價值更值錢?別的地方我不敢說,對於互聯網或IT公司來說,技術實力絕對是其中之一。4)有朋友說技術都是工具,不應該如此痴迷這句話沒有錯,有時候我們需要更多的是抬起頭來看看技術以外的事情,或者是說我們在作技術的時候不去思考為什麼會有這個技術,為什麼不是別的,問題不在於技術,問題在於我們死讀書,讀死書,成了技術的書獃子。
5) 對於NoSQL,最近比較火,但我對其有點保守,所以,我只是說了解就可以。對於Hadoop,我覺得其在分散式系統上有巨大的潛力,所以需要學習。 對於關係型資料庫,的確是很重要的東西,這點是我的疏忽,在原文里補充。
轉自:程序員練級寶典這篇文章涉及的內容比較廣,內容的層次也是由淺入深,也不是僅僅限於大學期間的學習,我覺得是對於整個程序猿的職業成長過程都是可以參考借鑒的,對於大學生來說,你可以根據自己的興趣愛好,選擇自己的想學的內容,像截取片段一樣來學習某些知識,也可以站在高處嘗試俯視整個信息技術(包括計算機科學技術和通信技術),然後一步一步來鑄造自己的技術長城。對於樓主來說,如果僅僅是為了大學畢業找份體面的工作,這篇文章的內容完全可以給你指明方向。跟著 @狼大人 摸過來的。
逐條推導吧:
1. C++和Web兩個方向哪個賺錢?都賺錢,而且都能賺大錢;2. 那麼投資周期如何?C++屬於長期投資、長期回報,一次投資多次回報,投資回報期可能長達10年、20年,這是因為C++多用於系統級編程,而系統本身的生命周期和技術進化周期是非常長的。而Web屬於短期投資、短期回報,投資回報期可能也就3、5年,這是因為Web技術還在飛速發展,只有一點初期的技術固化現象;3. 投資回報率如何?C++的潛在投資回報率更高一點,因為它本身設計用於通用編程領域,能與更多的業務領域產生關聯,切換成本小。而Web能關聯的編程領域較少,主要集中在信息交互上;4. 哪個更有趣?很明顯Web更有趣,因為涉及到人機交互,想不有趣都難。而C++編程是出了名的無聊;5. 入門速度和提高速度如何?學C++如同學英語,哭著進去,笑著出來。學Web如同學日語,笑著進去,哭著出來。下面是一些非技術的影響因素:1. 高薪是什麼原因造成的?是人才供應太少?是能力提高難度太大?是工作任務過於繁導致經常加班?還是知識、經驗更新周期太短?2. 要多按時薪去計算投入產出比;3. 看興趣,是不是喜歡經常性的挑戰?是否耐得下性子跟變化做鬥爭?4. 看健康度,少勞身、勞心。噢!大一嗎,還早著,路還很長。
一個語言,無論c++,還是web語言,都只是一個鎚子,都不重要。重要的是,你要找到一個你要裝修的門。怎麼找這扇門呢,最好的方法,就是多聽多看多探索。我計算機研究生要畢業了, 最近正準備去實習, 前段時間也涉及到了找實習投簡歷這麼一個坑爹的過程。 總算是找到了一家,比較欣慰, 說一些經驗出來, 希望能幫到你。 由於我是雙專業的,所以可能不完全適合你, 請自我取捨。
首先, 大學和Pro(工作) 完全是兩回事, 我希望學弟學妹們不要捨本逐末, 在大學多學一點理論的東西沒有壞處, 在以後的工作和Avanced工作的時候, 越來越能發現大學底子的重要性。 這個也正是我們跟那些各種培訓機構培訓出來的學生的不同之處, 很多時候要知其所以然。 這裡推薦的學習重點是:
- 計算機原理(研究並行運算的時候, 你就知道這部分有多重要)
- 彙編語言 (在做優化, 或者了解底層原理的時候非常有用)
- 離散數學 數學分析 (基礎學科 在加解密技術等各種領域非!常!有!用!)
- 概率統計 (想要玩兒大數據 機器學期, 這個是基礎)
- 數據結構 (不用說了, 超重要, 以後資料庫基礎)
- 操作系統 (這玩意其實很萌的, 學會了各種Linux在你眼前都差不多 就是文件放的地方不一樣而已)
- 演算法 (坑貨, 不過這東西有時候真能解決問題, 至少要知道, 以後工作的時候方便你拿出來抄)
- 英語 (不要打我, 這個很重要啊, 不懂看期刊不懂看論文,都還是小事兒。 比如說人家出了了一個新語言, doc還沒有翻譯過來, 你咋辦?碰到了問題, 百度搜索出來的都是莆田系醫院, 你怎麼辦?)
太多太多基礎了, 應該還有別的, 我總覺得我沒有說全。
至於語言, 我建議學精而不是學多
- 一門OOP語言: C++或者Java 至於C有沒有必要學, 我覺得了解一下就好。
- 一門流程語言: Ruby 或者 Python 推薦Python
- 一門bash編程: 不要問我有啥bash,有一堆
- 一個linux操作系統: 比如說Ubuntu啊, 文檔全好學習
- 一個SQL: 我當時學了Oracle, 現在全忘啦!!!
- 一個數據處理語言: R, python, MathLab(這是個坑, 不僅能做數據處理)
- 一個公文軟體: Word不用說了, 你還得掌握Markdown和Latex。
- 一些團隊軟體: Git啊Docker啊 亂七八糟很多啊。
- 一些前端語言: Html CSS不死, 還有新的Html5和css3
- 一些webservice的語言: J2EE得看看吧, js不用說了特別煩, 等你畢業了說不定js能統治世界。 php?哼哼。。。今天天氣不錯
- 一些API框架: Play呀Express啊。。。有空就看看。
至於你說的做網頁? 前端網頁一般要掌握的美工技能可能比技術更多, 然後庫一直在變, 等你畢業的時候說不定jQuery和bootstrap已經不見了呢~
學計算機能走到最後的都不是急功近利的哦親。。。
哇我打了好多字!四捨五入1一個億了吧!直接回答:C++,除非你其實不想做程序員而是設計師。
不知道樓主的專業到底是哪個。以下回答假設你的專業是「計算機科學」。
數據結構、演算法,各種體系原理(網路、操作系統、編譯原理等等)才是你學習的重點,理論更為重要。語言是「術」,而理論是「道」。學習這些理論,你在實際工作中能更好地解決問題,而解決問題是程序員的價值之一。編程(Web 語言除外)語言的差異,主要是風格、效率和實現的差別,和系統學習計算機科學無關。當然你需要先掌握一門編程語言,不然理論學起來很枯燥而且無法運用。但關於入門語言,究竟選擇 C、C++、Java、Python,或者 Lisp、Schema 這些中的哪一個,並不重要。重要的是你學會用編程語言高效表達你解決問題的方案。然後無非是熟悉語法罷了。這裡忽略了函數式語言和過程語言的差異,但問題不大。你的第一選擇不應是 Web 語言。Web 語言根本不是為編程而生的。JavaScript 那個奇怪的生物也不適合作為第一選擇。招聘信息裡面列出的是公司對人員的需求。你要做的,不是在大一使你自己滿足這些需求,那是職業學院的工作。你要做的是,使你自己在大四畢業的時候,有能力使自己快速滿足各類常見需求、靈活解決問題。面試官更注重你有這種能力,而不是你能貢獻多少代碼。
在校生的淺見,還請各位參加工作的程序員指正。多研究演算法和數據結構吧,沒有比在學校有這麼多時間和靜的下心來研究這些了,而語言方面的學習什麼時候都來得及。
僅針對題主的各點簡要回答下(本人大四,以下僅針對一般大學情況而言):
- 如果題主是本科生,實驗室就別想了,本科生進去基本上就是打打雜,不會給你多少核心任務的(當然,你也可能非常優秀)。要是老師跟的不好,今天讓你學這,明天讓你學那。。。,基本上就是把你當勞動力看,我兩個同學進實驗室後幾周就出來了,說是想自己學點東西。想體驗開發流程,不如直接去實習。
- 學C++有課堂??有老師? 別逗了弟弟,一本好書 + 動手寫 完全足夠。 另外,在工程上 ,我對普通大學老師的實踐指導普遍持懷疑態度。
- 個人還是覺得興趣更重要些。編程這東西,興趣就像搖頭丸一樣,磕了就停不下來;沒有興趣,不長久。當然,任何結果都是取捨之後的,你要是覺得web好就業,也行。畢竟c++不太好找工作。
- BAT不好進,名牌大學文憑在手還好說,否則一句話,你得很NB。
- 不可一心多用,線程進程開太多,要崩的。
打開你想去的公司的招聘網站,找到你想去的崗位,下面有崗位要求,那個會告訴你要學什麼
學c++吧、首先,你喜歡。其次,現在很熱門。把c++學會了,web學起來也容易得多吧。
如果你是計算機專業而非軟體工程:
C和彙編必學,因為科班出身沒有理由不懂點組成原理和操作系統,不懂C和彙編,你說你懂這些恐怕沒什麼人信。形式語言/圖靈機應該有點了解(這確實是語言),主要是理解演算法和數據結構的意義。不能畢業了連非P和NP都分不清,BNF也不明白,會讓人笑話的。有興趣學學數理邏輯也不錯。至少要認識到不是只有程序語言才是計算機科學技術中的語言。各種協議,模式其實也是語言,即使不想深入鑽研,了解一下他們是如何抽象的也好,建立起合適抽象模式的能力是很寶貴的。至於開發用的語言,其他答案已經說了很多很好了,請參考那些答案。給出一個抽象模式的良好實現同樣困難,而且相比之下十分的繁瑣而細節化,找一個方面做出深度比各方面都略知一二有意義。有些內容可能看起來不是對找到一份工作不是那麼必要,但它們是科班和非科班的分水嶺(雖然大量的科班學生做的都不太好就是了(特別是理論水平),這不完全是學生的錯),當然還有很多重要的內容,只不過這個答案是談語言的。———————————————————————————————————————————有位老師和我講過」你們上大學,就是應該學一些大學外面學不到的東西「其實興趣真的很重要,你自己對C++感興趣,那你就去學C++,不是說興趣是最好的老師么,baidu,騰訊都有C++方面的工作。只要你技術夠牛,進哪都不是問題,你說呢?
如果我大一就接觸了編程,第一選擇肯定是學演算法啊!
昨天高考成績出來了 ,分數線也出來了。 所以我上的學校是好一點的專科。我也在程序設計和web開發這兩個點難住了。不知道學哪個好一點。
推薦閱讀:
※你們覺得讀大學是為什麼?就是因為什麼讀這個大學?我現在感覺好迷?
※我的弟弟是國防生今年7月剛剛到部隊 很不適應 想要讓他退出部隊 希望各位有經驗的人士能給點意見拜託了?
※作為一個家境普通的北漂程序員,將來的出路是什麼?
※人應該怎樣過這一生?
※如何知道自己當下真正需要做什麼?(找到目標)並且為實現它如何制定可行的計劃。