很多同学接触Linux很少,对Linux平台的开发一无所知。现在的趋势越来越表明,作为一名优秀的软件开发人员或者在计算机IT行业工作的人,掌握Linux是一种非常重要的资源和谋生手段。
接下来我会结合我几年的个人开发经验、Linux、类UNIX系统以及开源软件文化来谈谈Linux的学习方法以及学习时应该注意的一些事情。
刚才提到,很多同学以前可能甚至不知道Linux是什么,对UNIX更是一无所知。那么让我们从最基本的开始。我们不会过多介绍Linux和UNIX的历史,直接进入入门学习。
Linux 入门非常简单。问题是你是否有耐心,是否喜欢乱搞,是否不反对重装等大修。可以说,不费劲就学不好Linux。鸟哥说,你需要真正了解Linux的分区机制,并且相当熟练地使用LVM。如果没有超过 20 个 Linux 安装,你就无法积累经验,所以不要害怕挣扎。
由于大家都用过Windows,所以我尽量照顾这些“新手”。如果您是 Linux 新手,我的建议是首先在虚拟机中尝试。我推荐 Virtual Box 作为虚拟机。我不提倡使用VM,因为VM是闭源的,而且是收费的,我也不想宣扬盗版。当然,如果你有足够的钱,你可以尝试VM,但我想说的是,即使是VM也不一定好。
付费软件不一定好。
首先,Virtual Box 非常小。 Windows平台下的安装包约为80MB,而VM往往为600MB。虽然功能强大,但是消耗的资源也不少,更何况Virtual Box完全可以满足你的需求。所以,这是你的选择。
如何使用虚拟机是您的事。我不会教你这个,因为它很简单。如果您不知道如何操作,可以使用谷歌或百度。如果你英文不错,可以直接阅读官方文档。现在介绍一下Linux发行版的知识。
如您所见,Linux 发行版并不是 Linux。 Linux仅指操作系统的内核。作为专业人士,不要让我解释。我没有时间。
我推荐的发行版如下:
您必须选择一个适合您的系统,然后将其安装在虚拟机上并开始使用。如果你想快速学习 Linux,我的一个建议是忘记图形界面。不要考虑图形界面是否可以为您的问题提供答案。相反,搜索世界各地并询问如何使用命令行来解决您的问题。
在这个过程中,你最好熟练掌握Linux命令,至少知道常用的命令,同时建立自己的知识库,里面有你积累的各种知识。
下一阶段需要学习Linux平台上的C/C++开发,以及Bash脚本编程。如果你对Java很感兴趣,还有Java。同样,建议您放弃图形界面IDE并开始使用VIM。为什么选择 VIM 而不是 Emacs?我无意掀起编辑器战争,但我认为 VIM 适合初学者和手笨手笨脑的开发者。 。 Emacs的按键太多,太复杂,让我感到害怕。然后是 GCC、Make、Eclipse(Java、C++ 或)。
虽然Eclipse中列出了C++,但我不建议使用IDE来开发C++,因为这不是Linux的文化,而且很容易让你忽略一些应该注意的问题。 IDE让你变得懒惰,像猪一样懒。如果你对程序调试和测试感兴趣,你也必须学好GDB。如果你没有GDB,这也是必修课。这是发展的第一步。请注意,我没有提到任何有关 Linux 系统 API 的内容,所以现阶段不必担心。你所要做的就是积累Linux平台的经验和开发经验。
我推荐的书有:C语言编程。 C语言,有白皮书当然更好。 C++ 推荐 C++ Primer Plus。我不喜欢Java,所以我不会推荐它。这里列出了别人的书籍:Java入门书籍。工具方面,推荐VIM的官方手册、GCC中文文档、GDB中文文档、GNU开源软件开发指南(电子书)、汇编语言编程(让你初步了解库、链接、内联汇编、和编译器优化选项。无需深入)。
如果你过不了这个阶段,就没有必要继续。这是底线,最基本的基础。否则,就离开,不要开发Linux。不专业的 Linux 开发人员创建的程序与 Linux 文化或 UNIX 文化背道而驰。这些程序不会走得太远,不能像 Bash 和 VIM 那样。所以,如果你做不好,那就离开吧。
《UNIX环境高级编程》是一部杰作,经典中的经典。
接下来进入Linux系统编程。最好的选择是APUE,UNIX环境下的高级编程。一遍又一遍地阅读。即使读10遍也太少了。如果你在大学能把这本书读透,就可以练习里面的所有内容。但如果你有作品,口语表达能力足够强,面试时就能说服所有考官。
(可能有点夸张,但APUE绝对是一本圣经般的读物,连Windows程序员都从中汲取营养,Google创始人的案头书,Zalberk的床头读物。)
读完本书,你将对Linux系统编程有一个很好的了解。 Linux和Windows平台开发有什么区别?它们的优点和缺点是什么?我的总结如下: Windows平台开发非常辛苦。微软的系统API一直在扩展。如果你想使用最新、最高效的功能,就必须时刻学习最适合当前流行系统的功能。 Linux则不然。 Linux系统中只有大约100个核心API。如果你记忆力好,你就能记住它们。并且长期保持不变。为什么它保持不变?因为它必须兼容UNIX并符合POSIX标准。因此,Linux平台的大部分开发都集中在底层或服务器编程上。
这就是它的优点。当然,图形是Linux的弱点,但从开发者的角度来看,我不在乎,因为我也可以适应命令行。如果有更好的图形界面,我将视之为礼物。另外,Windows是闭源的,你不知道系统是做什么的,你永远都会被微软牵着鼻子走。想想看,如果微软说Win8不支持QQ,那腾讯就要哭死了。 Linux 是完全开源的。如果你不喜欢它,你可以自己改变它,只要你有足够的技巧。
另外,虽然Windows使用的人很多,但它的使用仅限于桌面。 Linux在各方面都有发展,特别是在云计算、服务器软件、嵌入式领域,在企业级应用方面具有广阔的前景,并且具有一流的兼容性。由于它支持POSIX,因此可以无缝运行在UNIX系统上,无论是Apple的Mac还是IBM的AS400系列都完全支持。另外,Linux的开发环境支持绝对是一流的,无论是C/C++、Java、Bash、Python、PHP还是Javascript。 。 。 。 。 。甚至支持 C#。除了Visual Stdio套件之外,微软不太友好,是吗?
如果你读完APUE有很多感想,想要验证自己的一些想法或者经验,我推荐《UNIX编程的艺术》。世界顶级黑客将与您分享他的观点。
嵌入式方向:嵌入式方向没有提到,Linux很重要。
要掌握多种架构,你不仅要了解X86、ARM和微控制器。如果你不懂硬件,我预见你会死在半路上。我也想往嵌入式方向走,但是我觉得用学校里教的嵌入式方法,我连电子学的学生都比不过。建议大家在做之前先了解一下硬件。如果你去嵌入式应用开发,我只能祝你好运,不要碰到诺基亚、惠普这样的公司,不然你就惨了。
驱动程序设计:软件开发周期很长,硬件不同,速度很快。每个月都有如此多的新硬件发布,您的工作就是让它们在 Linux 上运行。由于Linux的兼容性很好,如果驱动程序不是太底层的话,基本的C语言就可以使用。系统架构的影响并不大。由于有系统支持,您可能会进行一些更改以在ARM上使用PC硬件。因此,硬件驱动开发不像嵌入式开发,需要很高的硬件知识。
可以做的方向有很多,比如家电,尤其是索尼、日立、希捷、富士康这样的厂家,非常稀缺。