不知道你是不是Windows上面的程序员,曾经突然对Linux感兴趣,想学习一下,可安装了一下Ubuntu,Suse等这类的Linux,在上面呆上2,3天之后,失望而归,又回到Windows继续Windows之旅

     很多新手退出Linux的学习,是因为一到Linux环境下,很多东西突然不知道该怎么使用:我该怎么上QQ?我该怎么安装软件?我该怎么写程序?哪一款IDE比较像Visual Stdio?等等的问题不能得到解决。其实,我想说的第一点,也是最重要的一点是:

(一)放弃在Windows所“学到”的思维,这些思维包括编程环境,软件使用环境等等,因为它们不适合用在Linux上面。Linux本身有自己的思维。下面就说说我的看法

 

(二)关于IDE:许多Windows程序员一进到Linux就开始寻找一款类VS的软件,最后,他们发现Linux下面的IDE大概有Codeblocks,Eclipse,Qt Creator等等(我只使用过CB而已哈)。写个HelloWorld试下它们的功能和VS有啥区别,之后,大喷,完全没有VS那么智能,像补全功能都不智能。

           其实,你第一步就错了。为什么呢?因为如果你想在Linux上面找Windows上面的代替品,那么你为什么不直接继续呆在Windows上面呢?其实Linux真正的编辑器是VI(VIM),Emacs(我只用过,但我相信一定不错)。虽然这2个编辑器的人门曲线是非常曲折,但是你学会了之后,你会发现VS你一点都不想再去用它了,它在VIM上面显得笨重,写个代码都要按几下鼠标(h,j,k,l),还在拉动滚动条(gg,G)吧。

 

(三)关于安装软件:很多Windows程序员一进到Linux就想安装个播放器(或者QQ??)。按照Windows的思路,不管三七二十一,先到百度下载一个QQ安装包来安装先。找啊找,能找到MPlayer,SMPlayer等等Linux能使用的播放,下载的时候发现是源文件,还要编译。- -!,然后就懵了,之后,大喷,一个播放器而已,还要自己安装,而且没有VS工程文件,到处都是Makefile,make的时候还出现一些乱七八糟的错误,我说这个没有安装,那个也没有,搞什么鬼。

       其实,你第二步也错了。为什么呢?因为在许多Linux的发行版本中,安装软件根本就不用这么麻烦,很多很多很多的时候,比Windows方便很多。它们就是Ubuntu的apt-get,或者CentOS的yum之类。这么有点像Windows上面的软件管理那种,已经不用你再去百度或者google下载一个安装包然后自己安装,而且它们能帮你解决依赖。比如你现在安装一个播放器,你可以:

  sudo apt-get install smplayer                                  <-安装一个smplayer播放器  

       sudo apt-get install nginx                                        <-安装传说中的Nginx

  在这里,再补充一下,在安装软件首先都是试下apt-get,apt-get没有了,再去网上找源代码或者安装包自己安装(但是这种情况绝对很少)。

 

(四)关于编译程序:很多Windows程序一进到Linux就想编译个HelloWorld玩玩,证明自己来过Linux(但是很多就只留下这么一个就再也没有了)。写程序好办,用Linux自带的gedit写一个,然后突然发现:我只有源代码?咋编译啊?好像在Windows用VS来编译的,- -!。之后,大喷,难道要写传说中的Makefile吗?那东西比写程序还难。

  其实,你第三步也错了。为什么呢?因为在Linux写程序,你用的是gedit或者传说中的VIM,他们不是IDE,它们只是编辑器。它们不能帮你编译程序。你要编译程序,必须使用传说中的gcc,或者g++。,比如你现在编译你的HelloWorld(请记住,如果提示你g++还没有安装,请用上面的apt-get instnll g++):

  g++ helloworld.cpp                                                  <-这样就编译完了,会生成一个a.out的可执行文件,使用./a.out即可运行

  在这里,再补充一下,如果每次写程序都直接g++或者gcc编译程序的话,会非常麻烦,你可以用一些自动化工具,比如Makefile,但是我这里推荐CMake,这个绝对是非常方便。

 

(五)关于调式程序:很多程序员一进到Linux写个HelloWorld就崩溃了,毕竟HelloWorld也算一个大工程,需要调试程序跟踪。又想到VS中去了,VS上面多方便啊,在源代码中下一个断电,F5一下就运行到断点去(好像是F5吧?给忘了)。但是Linux到底该咋办呢?google一下,得用传说中的gdb,命令行的???我调试一个程序而已,叫我用命令行?一下子回到原始时代?之后,大喷,完全不懂。。。

  其实,你第四步也错了,为什么呢?因为Linux上面,写一个程序的工具是分开,经典的组合是[传说中的Vim + 传说中的gcc + 传说中的gdb],它们学习起来都需要一点点难度,但是这正是Linux的思维,学会了之后,你会发现他们怎么能如此灵活,想分就分,就合就合。比如,你现在要调试你的helloworld:

  先编译程序:g++ helloworld.cpp  -g                               <-请加参数-g,这样才能生成调试符号,才能被gdb调试

       用gdb加载程序:gdb ./a.out                                         <-开始调试程序

  用传说中的命令行调试程序:start, b , c, disable, enable, finish等等

 

(六)关于命令与界面:很多程序员一进到Linux就找“我的电脑”,然后就找C盘,D盘,发现Linux好像不大一样,好像看到一个home文件夹,然后里面有自己用户名的文件夹,管它呢,反正差不多。玩玩先,复制文件,点右键,删除文件,点右键。玩了一下,好像也就那样,和Windows差不多,完全没有传说中的Linux黑客中那种自豪感啊,哥不是为了耍点帅才学Linux么?Linux程序员操作的时候不能时都啪啪的按键盘,然后背景是黑色,然后都是命令行的么。命令行?命令行?命令行?你和开玩笑吧。我复制个文件,删除个文件还要命令行,之后,大喷,太原始了,太麻烦了。。。

  其实,你第五步也错了,为什么了?因为你看上面的几点的话,你就知道,几乎所以的操作都是在传说中的命令行进行,而这一步是上面所以的基础,如果你这一步都突破不了,那么上面所有的东西你都别提了。使用行这种这么“原始”的行为,到底有什么好处:

  1.灵活:find -name "*.cpp" -o -name "*.h" | xargs wc -l         <-计算一个目录C++源代码的行数

  2.酷:请把终端背景设置成黑色,字体设置绿色

  

(七)关于开源软件:

  - -!