1. 程式人生 > >程式設計師 跨平臺 and 跨語言 學習攻略

程式設計師 跨平臺 and 跨語言 學習攻略

歡迎轉載
轉載請註明原文出處:

寫篇文章記錄下,從windows平臺程式設計到Linux平臺程式設計的轉變,以及從C++語言到java語言的學習轉變,心態的調整。語言組織的很一般,請大家多多指教

1.開發環境的轉變,從vs轉vi+makefile

搞windows下都是使用visual studio視覺化平臺,vs這個整合開發環境爽的很,敲程式碼時有程式碼補全,除錯時具有視覺化環境,能夠實時看到程式碼執行到什麼行,變數的值,打斷點也方便很多。關鍵是vs把編譯和連線都做好了,不用我們自己寫makefile檔案了

在linux平臺下,寫程式碼可以使用vi,編譯和連結過程中要自己編寫makefile檔案指定編譯的原始檔,要連結的庫檔案,搜尋庫檔案的庫目錄以及編譯選項等等一些東西,將程式碼檔案分成include,src,lib目錄下,在編寫makefile時新增多目錄支援.

在學習linux下開發時,被vim和makefile這兩隻攔路虎嚇跑了一些程式設計初學者,學習新事物時,先掌握到”能簡單使用”的程度就ok,至於高階知識點在以後的實踐中碰到,再查詢就可以.
vi常用操作 :
vi的三種模式,
複製一行或多行 yy+n(n代表幾行)
貼上 p
刪除一行或多行 dd +n(n代表幾行)
查詢
替換操作

可以在Linux環境下將vi打造成類似vs的IDE開發環境
https://github.com/lubaogui/vim-plugins
原理是github上託管了很多vim外掛,通過網路下載下來
只需以下三步,媽媽再也不用擔心我寫程式碼難題了
git clone

https://github.com/lubaogui/vim-plugins
cd vim-plugins
sh install-vim.sh

makefile檔案編寫:
強力推薦makefile教程:http://blog.csdn.net/haoel/article/details/2886
我就是照著這個學的,然後自己寫了一個通用的makefile工程檔案

本人目前linux下開發採用source insight + 通用makefile,將windows下的資料夾共享後mount到linux作業系統中,然後切換到linux目錄下就能進行編譯工作,共享出來的資料夾是同步更改的。

或者在Linux下搭建Samba伺服器,將linux伺服器上的指定目錄下的檔案共享,然後chmod 777 -R修改許可權後,使用source insight編寫程式碼,然後在linux下編譯和執行

2.跨平臺

windows VS linux 之基礎操作篇
windows系統是帶UI介面的,對使用者操作很友好,想訪問哪裡滑鼠點哪裡!(步步高點讀機,哈哈)
windows下的
移動、移動、刪除、重新命名檔案/資料夾等操作我就不說了,大家都懂。

而linux系統想操作它至少需要知道一些簡單的命令,比如:
ls:檢視目錄下的檔案
cd:切換目錄
mkdir:建立資料夾
mv:移動檔案/資料夾
cp:拷貝檔案/資料夾
rm:刪除檔案/資料夾

find 查詢檔案/資料夾
grep 在檔案中查詢指定內容
將linux的基礎命令熟悉以後,就可以開始編寫最簡單的程式碼了.
這時,才類似學會了Windows的點滑鼠和鍵盤操作

windows VS linux 之bug定位篇
寫程式碼,寫測試用例,在環境跑程式,出現點問題和bug是再正常不過的事了,這時候我們就需要了解程式以及系統的資訊來定位bug
在windows系統上中:
這裡寫圖片描述
一個工作管理員,能把CPU使用率,記憶體佔有率,當前系統的程序等看的一清二楚
這裡寫圖片描述

網路活動
這裡寫圖片描述

檢視IO狀態
這裡寫圖片描述

而在linux中想要檢視各個系統的狀態,就得用對應的命令了
IO狀態:iostat命令
網路狀態:netstat命令
cpu使用率:mpstat或top
記憶體使用率:free命令
檢視程序的狀態:pidstat

各個命令的用法還有很多中,視情況不同採用不同的方法.
不得不說,如果你不熟悉上述命令,在linux作業系統上定位bug基本上就是懵逼的.

3.搞C++工作的程式設計師有沒有必要學習java語言?

當時在大學(2008年-2012年)選擇程式語言時,C++語言偏向於底層驅動,框架開發,安全領域,伺服器領域等,而java則主要是web開發居多,一批批的大學生走進培訓機構,培訓三個月,然後上崗用java開始寫程式碼,當時想的是,找個門檻高的語言或行業,門檻越高,會的人越少,進而就越值錢.

從此踏上了折磨C++語言和被折磨的一條不歸路,哈哈.
我之前主要用搞伺服器開發和網路安全領域的C++開發工作,經過五年沉澱和積累後,我感覺自己遇到了瓶頸期,自己持續在努力,但是收效甚微.

在一次和大神聊天的過程中,我發覺自己知識面太狹窄了,於是我考慮開始學java,在我看來C++程式設計師學點java程式設計起碼有如下好處:
1.新專案進行框架選型時,多會一門java語言,就能否考慮問題更周到,不會固化到C++開源框架選擇上,為合理選擇適合應用場景的元件提供了基礎.

2.現在大資料這麼火,我對新技術好奇的像個孩子,必然想研究一番,但是大資料領域,要麼是java,要麼是python,我果斷的選擇了java語言,只有不斷的學習新知識,不斷思考,才能更好的進步.

3.技術的深度和廣度同樣重要,開源世界上,好的開源專案還是java居多,為了更好的閱讀開源專案,我選擇了學習java語言,開闊下自己的視野,也想看看針對同樣的問題,C++和Java分別是如何解決的

4.LinuxC++程式設計學習路線圖

初次接觸新技術或者新平臺,往往不知道學什麼,心裡想學但是不知道怎麼使勁,至於學什麼實用,可以參考下當下火熱的《網際網路線上教育》的學習目錄,如下所示:
http://study.163.com/course/introduction/490007.htm#/courseDetail

如何辨證的觀看程式設計學習視訊教程?
如果之前沒有學過程式語言,可以考慮跟著視訊+多練習好好把基礎打好,我具有C++程式設計基礎,個人看法,視訊是學習程式設計過程中的柺杖,有好處但是也容易產生依賴心理,看視訊主要看程式碼實現思路,然後自己敲程式碼實現,敲程式碼期間遇到技術問題或者有bug是正常的,出錯就代表這塊方面的內容自己掌握的不是很好,出錯的地方恰恰是需要自己彌補和提高的地方,剛剛接觸一個領域或者平臺,本身就是犯錯的過程,在不斷犯錯不斷學習改錯的過程,才是真正學習到知識的過程。

知道學什麼知識點以後,主要就是消化知識點,以及多多動手時間去把學到的東西使用出來,多動手是很重要關鍵的,很多初學者看書多動手實踐少,BB多執行緒同步啥的頭頭是道道,讓他自己敲程式碼實現下,就傻逼了嘴炮了,做技術嘛最終還是要看程式碼寫的質量如何,這是根本

**整理的不錯的linux應用層程式設計視訊教程 下載地址
《Linux C程式設計》
http://blog.csdn.net/column/details/linuxc.html

《Linux 高階程式設計》
http://study.163.com/course/introduction/490007.htm#/courseDetail

《軒轅IT培訓 Linux C++ 遠端全科班 Boost_ACE(高清無密)》
http://pan.baidu.com/s/1gfbLXM7

《達內Linux C++程式設計學習》
http://pan.baidu.com/s/1jI4giqy**

3.程式設計練手小專案

看完視訊教程以後基本上對Linux程式設計或者其他領域的基礎知識學習是差不多結實了,此時心裡想做點專案鍛鍊下自己練練手是心裡想法,很正常,但是Linux平臺下都有什麼可以做的小專案呢,我來說道說道

剛學習的同學要踏踏實實從小專案做起,不要想著第一次就把程式寫的多麼完善多麼牛逼,咱就實現一點點的小功能,腳踏實地

喜歡網路程式設計的同學不在少數,可以練習下如下的小專案
埠掃描器
HTTP伺服器(並逐步完善能使效能向apache或nginx靠近點)
ftp客戶端和伺服器
基於libpcap的抓包分析
模擬arp欺騙
檔案傳輸(是否支援斷點續傳,是否支援分片處理)
仿qq做個區域網版的聊天工具,客戶端使用windows平臺,伺服器部署在linux平臺,可以傳送語音,視訊,文字,富文字,表情等等
。。。
等等
能做的專案很多,關鍵是看你自己是否去做,國內的技術氛圍比較浮躁,大家都一心朝著錢看,沒有多少人能夠踏踏實實的搞技術提升,所以心裡有志向的小夥伴們還是要堅守住自己的理想和目標。

4.列舉下當下比較不錯的IT視訊類教育平臺
慕課網 IT方面的教程比較多
網易雲課堂 我最喜歡了,課程質量我覺得是不錯的
騰訊課堂 還可以 裡面混的培訓機構有一些,大家仔細辨下

腳踏實地的做事做人,務實,慢慢積累自己實力。