关于linux端程序开发,我以前一直不知道是做些什么,只是感觉听高端的。最近接触了一些,有了一些初步的认识。

  首先,linux是一个操作系统,跟windows一样:接通电源、按下电脑开机,电脑就会自动加载运行的系统软件。操作系统是电脑不可缺少的一部分。操作系统是你的电脑实体和实用方便的软件中间的媒介。linux也是这样,而我做的,就是编写一些能在linux上面编写、编译、生成一些可以在linux上面运行的软件。

  windows这么好用,为什么我们还要用linux系统呢?这两个操作系统是有区别的。同一台电脑,你可以选择安装windows或者安装linux,那么区别在哪呢?

  首先,同一台电脑,装上windows或者linux之后。这台电脑的硬件是不会有什么改变的。1000元的电脑配置还是1000元,5000元的还是5000元。我就拿1000元的来说,既然硬件资源是有限的,它没有5000元的速度快,但我想让它更快一些,那我可以在操作系统上动一些手脚。比如说我装个linux而不用windows。说不定速度就比装windows快一些。windows比较注重图形化界面,用户交互性好,所以家用和个人电脑大多数人都选择安装它(当然也有人用linux或者苹果的操作系统)。而windows就必须把大量电脑的硬件资源用于运行它的图形化界面,对运算可能就冷落了一些,毕竟1000元的电脑,硬件资源实在有限。而linux系统刚开发出来时并没有各种窗口,没有windows直观,但是它的优点就是“我不需要图形化界面也能运行”,而windows没有图形化就根本无法工作。每一个操作系统,在有限的硬件资源上,都有自己的侧重点。而用户可以随便选择。

  linux操作系统好在它是开源的。开源就是编写它时的源代码倍放在网上,可供大家免费观看。windows的源代码微软公司是不会放在网上的,因为他们公司是卖操作系统的嘛,几百块钱一个。在中国盗版比较严重,所以我们很多人并不知道操作系统也是需要花钱购买的,也许我们在购买电脑的时候,卖家就已经帮我们装好盗版系统了。而linux是开源的,自然就不用花钱购买了(除非你享受了别人的其他服务)。

  我们为什么有这么多人学习linux呢?我认为原因有两个,第一是它开源免费,大公司如果选择用windows的话肯定需要花很多钱去微软购买安装系统(在公司起步时谁也不会想花这么多钱),它还安全稳定,源代码在我手里,哪里不安全我可以自己改,哪里不稳定我可以自己改。第二是它的重心放在了数据处理和计算上,而不是与用户的交互,公司的服务器并不需要用户用起来好用,毕竟工作人员都是电脑高手,处理速度快就行。所以现在大多数企业选择用linux,而不用其他操作系统。这样一来他们便需要大量的程序员来维护这个系统。所以学的人就多了。

  公司里怎么用这个系统呢?比如说我们用的聊天软件QQ,我发一条消息给我朋友,其实我是把消息发给了腾讯公司的某台服务器了,那台服务器再帮我把那条消息发给我的朋友,并告诉他是我发的。在这个互联网时代,服务器就是做着这么重要的工作。以前大家玩单机游戏不需要服务器,在自己电脑上运行就行,或者用蓝牙、wifi可以和周围的小伙伴一起玩。而现在的互联网时代就不同了,我们喜欢分享自己的快乐,打游戏也喜欢与其他人一起玩。服务器就是一个信号的中转站。我们现在用的各种云存储,服务器就充当了一个远程的硬盘给我们存东西。还有云计算等多种多样的服务。我们甚至可以这样来想,我们把输入信息传递给服务器,服务器帮我们处理解决以后再把输出信息发给我们,而我们需要的就只是一个输入器、输出器和良好的网络。

  可见服务器的作用是多么强大。而服务器用的是linux系统。我们就很有必要去了解它,了解怎么在上面编写一个软件来处理用户发过来的消息。

  那我们应该怎么去系统的学习呢?已经有前人帮我们总结好了。学习这个方面的知识分为这几个模块:c\c++语言;linux操作系统;计算机网络;数据结构与算法;操作系统。

  首先我们要写程序,要把自己的思想写在计算机,就要能说一口流利的计算机语言,所以必须学会计算机语言。我学习的是c\c++,其实我感觉c和c++是分不开的,你不可能学会了c++而不会c,也不可能学会了c学不会c++。c\c++可谓一把锋利的巨剑,手持巨剑,就算不会武功也有一定的震慑力。更何况没有剑怎么打得过拿剑的人呢?这是基础,打牢基础必然不会有什么坏处。

  而c\c++写出来的程序需要在操作系统上运行,并且写程序时很多时候要和操作系统交流,给它借东西用。那就必须的学习一下操作系统是怎么运行的,它的内部原理和外部接口都学一遍,也就相当于了解一下你比武的场地,占地形优势了。这块场地并不比c\c++简单,linux也是用c写的(为什么不用c++呢?当时还没有c++)。当然,学习linux的同时能接触到很多计算机的精华,能加强自己的c\c++语言能力,能了解很多别人编写这系统时用到的思想和设计思路。

  计算机网络,网络能把客户端和服务器端链接起来。我们肯定需要了解数据是怎么传输的,并要熟练的写出发送数据和接收数据的代码。哈哈,虽然网络路线为我们铺好了,但它留给我们的接口我们还是要学会使用的。

  学完以上这3个部分,你就可以工作了。嗯,我觉得就是这样的。学校总是要我们打好基础再往上学,上课总是喜欢先上数据结构和操作系统,最后再来学linux这些具体的、真正能做事的。我就不喜欢这样学习,没人告诉我数据结构、数据库有什么用,直接就开始学了,我也不知道学了有什么用,也许学到一半我就对编程失去了兴趣了,往后的内容我可能再也不想学了。所以我个人认为应该先学前面那三块实用的。

  如果学完上面3部分内容,那你已经能作一些开发了,如若觉得思维不太清晰,那就好好研究研究数据结构;如若觉得对操作系统的运行原理不太理解,那就好好研究下操作系统;如果对数据的存储与读取感到苦恼,那就多看看数据库。学习就应该这么简单,喜欢什么学什么,什么不会学什么。

  在学习上,对自己保持一定的自信也是有必要的,要懂得坚持。因为学习编程并不是一个简短的过程,毕竟那么多人呕心沥血研究出来的东西,短时间想把它学透是不可能的。热爱编程的人,都是在这条路上走走停停、走走停停,对计算机科技的理解越来越深、越来越深。

初识linux端c++程序开发的更多相关文章

  1. Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...

  2. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

  3. 搭建Linux下Android程序开发环境

    从AndroidStudio中文社区下载SDK压缩包,http://dl.google.com/android/android-sdk_r24.2-linux.tgz. 解压到某个目录,比如我的~/p ...

  4. Linux/Windows 应用程序开发

    一.基础知识 虽然写的都是代码,但是代码运行在哪个级别什么位置,还是需要做好定位,这样才心中有数. 1.1 Linux [转载]讲述了中断.系统调用.Linux APIs和Shell的基本知识. 1 ...

  5. 【Socket】linux网络扫描程序开发

      1.mystery引入    1)系统入侵步骤:系统发现->漏洞探测->漏洞利用->痕迹清除    2)扫描器分类:主机与网络扫描器:端口服务扫描器:服务漏洞扫描器    3)T ...

  6. linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)

    一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...

  7. Linux网络编程:基于TCP的程序开发回顾篇《转》

    面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你 ...

  8. Linux入门-程序开发

    Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...

  9. Linux下使用Eclipse开发Hadoop应用程序

    在前面一篇文章中介绍了如果在完全分布式的环境下搭建Hadoop0.20.2,现在就再利用这个环境完成开发. 首先用hadoop这个用户登录linux系统(hadoop用户在前面一篇文章中创建的),然后 ...

随机推荐

  1. JQuery基础总结上

    最近在慕课网学习JQuery基础课程,发现只是跟随网站的课程学习而不去自己总结扩展的话,很难达到真正学会理解的地步. 于是先在网站上草草过了一遍课程,然后借着今天的这个时间边记录边重新整理学习一下. ...

  2. .Net中使用com组件后发生System.ArithmeticException异常的解决办法(Message=算术运算中发生溢出或下溢。)

    最近在开发一个.Net程序,其中涉及到对com组件的调用,或者第三方DLL调用, 在调用完以后如果使用一些小的测试程序继续运行,一切正常,但是在使用带有GUI的form程序,或者WPF程序中,继续执行 ...

  3. Java反射机制专题

    ·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...

  4. maven的使用体验

    由于之前是从C++代码阵营中转到java阵营的(这里可能还会转到scala阵营中).在写工程代码的时候,如果是只是简单的创建java project的话,当然也是可以的.但是,随着项目慢慢扩大,组件越 ...

  5. Spark的Straggler深入学习(2):思考Block和Partition的划分问题——以论文为参考

    一.partition的划分问题 如何划分partition对block数据的收集有很大影响.如果需要根据block来加速task的执行,partition应该满足什么条件? 参考思路1:range ...

  6. android SDK 更新问题解决

    Android在win7更新SDK时出现问题: Download interrupted: hostname in certificate didn't  match: <dl-ssl.goog ...

  7. Java 验证码工具类

    package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...

  8. 数据库Mysql学习笔记(一)

    Mysql 数据库是数据库初学者最佳的选择的,其语法简单,采用的非底层的SQL语言定义(DDL).操作(DML).控制(DCL)数据库. 入门知识:服务器.库.表. (1)安装Mysql服务器.配置文 ...

  9. CUDA ---共享存储器

    原文地址:http://www.cnblogs.com/1024incn/p/4605502.html shared memory在之前的博文有些介绍,这部分会专门讲解其内容.在global Memo ...

  10. IE6,IE7文档模式下 按钮type=submit在页面打开时会有一条黑线边框的处理方法。(转)

    一:按钮border:none:同时使用背景图片来实现border效果. 二:在按钮外面嵌套一层label标签,里面的按钮input[type="submit"]的border:n ...