欢迎转载
转载请注明原文出处:
写篇文章记录下,从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方面的教程比较多
网易云课堂 我最喜欢了,课程质量我觉得是不错的
腾讯课堂 还可以 里面混的培训机构有一些,大家仔细辨下
脚踏实地的做事做人,务实,慢慢积累自己实力。