[Tutorials] 深度桌面环境:深度科技团队基于Qt和GO开发的全新桌面环境。
Tofloor
poster avatar
youyou2011
deepin
2021-01-07 20:02
Author

深度桌面环境:深度科技团队基于Qt和GO开发的全新桌面环境。

简介

在图形计算中,一个桌面环境(Desktop Environment)为计算机提供一个图形用户界面(GUI)。

 

对应于早期的文字命令行界面(CLI),一个典型的桌面环境提供图标,视窗,工具栏,文件夹,壁纸等软件界面,并且内置了各式各样的多媒体软件、系统程序、游戏、实用程序、网页开发工具、编程 工具等等。整体而言,桌面环境在设计和功能上的特性,赋予了它与众不同的外观和感觉。

 

开源的Linux系统拥有很多桌面环境可以更换.但流行的闭源操作系统Microsoft Windows和Mac OS X所用的桌面环境是相对不可变的。但是也有主题和第三方软件可以完全更改常见界面元素的外观(比如窗口、按钮和图标)以及界面本身。在Windows中,这一切可以通过替换默认的Explorer shell来实现。

注意

桌面环境是由很多软件包构成的,不同的桌面环境需要的软件包相差很大,就算两个不同的桌面环境需要的软件包相同,但是需要的版本也不一样,由于Linux存在软件依赖这一特殊情况,所以并不是所有桌面环境都可以共存。

深度桌面环境:深度科技团队基于Qt和GO开发的全新桌面环境。

Reply Favorite View the author
All Replies
youyou2011
deepin
2021-01-07 20:08
#1

Deepin介绍

武汉深之度科技有限公司(简称:深度科技)成立于2011年,是专注基于Linux的操作系统研发与服务的商业公司。

 

作为国内顶尖的操作系统研发团队,深度科技以提供安全稳定、美观易用的操作系统与开源解决方案为目标,拥有操作系统研发、行业定制、国际化、迁移和适配、交互设计、支持服务与培训等多方面专业人才,能够满足不同用户和应用场景对操作系统产品的广泛需求。

 

深度科技作为操作系统生态的打造者,不但与各芯片、整机、中间件、数据库等厂商结成了紧密合作关系,还与360、金山、网易、搜狗等企业联合开发了多款符合中国用户需求的应用软件。深度科技的操作系统产品,已通过了公安部安全操作系统认证、工信部国产操作系统适配认证、入围国管局中央集中采购名录,并在国内党政军、金融、运营商、教育等客户中得到了广泛应用。

 

截止到2018年,深度操作系统下载超过8000万次,提供32种不同的语言版本,以及遍布六大洲33个国家105个镜像站点的升级服务。在全球开源操作系统排行榜上,深度操作系统是率先进入国际前十名的中国操作系统产品。

 

未来,深度科技将继续秉承开源和创新精神,致力于成为具备国际影响力的主流操作系统厂商。

 

深度操作系统项目

深度操作系统是一个致力于为全球用户提供美观易用、安全可靠体验的 Linux 发行版。它不仅仅对最优秀的开源产品进行集成和配置,还基于 Qt 技术开发了深度桌面环境和深度控制中心,并且开发了一系列面向日常使用的深度特色应用如深度商店、深度截图、深度音乐、深度影院等。深度操作系统非常注重易用的体验和美观的设计,对于大多数用户来说,它易于安装和使用,能够很好的代替 Windows 系统进行工作与娱乐。

 

深度操作系统的历史可以追溯到 2004 年,其前身 Hiweed Linux 是中国第一个基于 Debian 的本地化版本。在 2008 年更名为深度操作系统,2011 年获得商业投资,已经建立起国内唯一拥有员工数十人专注于桌面 Linux 发行版的团队。深度操作系统与搜狗、WPS、傲游等合作伙伴进行了多方位合作,共同打造基于 Linux 系统的生态系统。同时,我们还在努力解决迁移 Windows 平台软件带来的各种兼容性问题,以便用户平滑的过渡到开放安全的 Linux 平台上来。

 

对个人用户来说,使用深度操作系统不但完全免除了购买费用,而且不会被流行的各种病毒和木马感染。对于政府和企业用户,由于源代码开放可控,绝无后门隐患,安全性也更有保障,大大降低了维护代价和购买防护软件的费用。

 

近年来,深度操作系统发展迅速,获得全球四十多个国家用户的支持,累计下载量数千万次,并成为在 Distrowatch 上排名最高的中国 Linux 操作系统发行版。

 

非常欢迎您尝试深度操作系统作为您工作和生活的伙伴,作为中国唯一专注于桌面操作系统的团队,我们相信它将给您带来完全不同的体验!

Deepin介绍

⚡️⚡️⚡️

深度操作系统项目

Reply View the author
youyou2011
deepin
2021-01-07 20:26
#2

Dock插件开发

简介

深度桌面环境中Dock除了高度可定制化的外观,同时对外提供了API文档,各位社区的开发者可以根据自己的喜好,对Dock开发插件进行扩展,让Dock更加丰富起来。

 

一个插件由图标、Tooltip、Popup和菜单等几部分组成。

 

通过以上几部分的组合和搭配来实现一个插件的完整功能;一个标准且兼容性良好Dock插件不仅需要提供用户期望的功能,同时也需要在体验上跟Dock提供的原生插件(电量、声音、网络等)相近。其推荐的交互为用户在图标上左键单击时会弹出Popup、在图标上右键单击时会弹出菜单、在图标上停留会有提示性的Tooltip显示等;

 

以下将说明如何开发出一个高质量的插件的过程。

准备工作

在开发插件之前,需要先安装一些必须的包和工具来帮助进行开发工作,在终端执行如下命令:

 

sudo apt-get install dde-dock-dev build-essential qt5-qmake qt5-default qtcreator

其中qt5-default包是可选的,主要用作配置qt5为默认的开发环境而不是qt4,如果不太理解,建议直接安装qt5-default包即可。

图文介绍

打开QtCreator,创建一个的“Qt Plugin”新项目,例如:名称叫“helloworld”。

创建一个类叫“HelloWorldPlugin”作为插件的入口。

创建项目后,需要对生成的项目模板进行一定的修改。

Dock插件开发

Reply View the author
youyou2011
deepin
2021-01-07 20:43
#3

Qt Creator

简介

Qt Creator是跨平台的轻量级集成开发环境,它包括项目生成向导、C++代码编辑器、浏览文件,集成了Qt Designer、Qt Assistant、QtLinguist、图形化的GDB 调试前端,集成qmake 构建工具等功能。

安装

sudo apt-get install qtcreator

 

卸载

sudo apt-get remove qtcreator

 

仓库地址

http://packages.deepin.com/deepin/pool/main/q/qtcreator/

Qt_Creator【deepin_Wiki】

⚡️⚡️⚡️

Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。

简介

Qt Creator 包括项目生成向导、高级的 C++ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。

功能和优势

QtCreator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。

使用强大的 C++ 代码编辑器可快速编写代码

语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能

使用浏览工具管理源代码

集成了领先的版本控制软件,包括 Git、Perforce 和 Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换

为 Qt跨平台开发人员的需求而量身定制

集成了特定于 Qt 的功能,如信号与槽 (Signals & Slots)图示调试器, 对 Qt 类结构可一目了然集成了 Qt Designer 可视化布局和格式构建器只需单击一下就可生成和运行 Qt 项目。

Qt Creator【百度百科】

Reply View the author
mcaoser
deepin
2021-01-07 20:47
#4

能不能方便 的让用户安装其他的桌面环境,删掉dde来使用,防止多个桌面环境不能共存的情况发生?因为深度操作系统的软件生态确实要比其他操作系统好一些。但现在的桌面环境问题较多

Reply View the author
youyou2011
deepin
2021-01-07 21:24
#5
mcaoser

能不能方便 的让用户安装其他的桌面环境,删掉dde来使用,防止多个桌面环境不能共存的情况发生?因为深度操作系统的软件生态确实要比其他操作系统好一些。但现在的桌面环境问题较多

桌面环境是由很多软件包构成的,不同的桌面环境需要的软件包相差很大,就算两个不同的桌面环境需要的软件包相同,但是需要的版本也不一样,由于Linux存在软件依赖这一特殊情况,所以并不是所有桌面环境都可以共存。

⚡️⚡️⚡️

可以选择Flatpak和snap格式包

⚡️⚡️⚡️

Flatpak是一种构建、发布、安装和运行应用程序的技术。它主要的目标是Linux桌面系统,同时也可以适用于嵌入式等系统中。

 

Flatpak的设计目标是:

* 使应用程序可以安装在任何一个发行版上

* 为应用程序提供固定的环境,实施测试和减少缺陷

* 实现应用程序和操作系统的解耦和,使应用程序可以不依赖于特定的发行版本

* 使应用程序可以自带依赖,能够使用linux发行版没有提供的依赖,避免其对特定发行版本甚至特定库的依赖

* 在沙箱中独立运行应用程序,提升安全性

 

Flatpak使这些特性易于实现。如果你对flatpak还不了解,建议尝试一下hello workd的例子。

 

更多信息可查看 flatpak.org

Flatpak是一种构建、发布、安装和运行应用程序的技术。

⚡️⚡️⚡️

SNAP包管理:

apt包管理的缺点:

系统升级后,官方软件仓库基本冻结(安全补丁除外)

为了维护包和库的依赖关系无法安装最新版软件

 

SNAP特点:

SNAP包管理操作独立于软件仓库

可以分发不属于官方库的软件版本

软件安装使用不受操作系统包和库的依赖关系的影响

snap内建与linux发行版不兼容的库

snap可以同时安装多个软件

 

snap基本使用:

sudo snap find 查找软件包

sudo snap install 安装软件包

sudo snap remove 删除软件包

sudo snap refresh (package) 更新索引(更新该软件包的索引信息)

SNAP包管理操作独立于软件仓库 可以分发不属于官方库的软件版本

⚡️⚡️⚡️

snap 软件包是什么?

 

snapcraft 又是什么?

 

snap 是用于 Linux 发行版的软件包,它们在设计的时候吸取了像 Android 这样的移动平台和物联网设备上分发软件的经验教训。

 

snapcraft 这个名字涵盖了 snap 和用来构建它们的命令行工具、snapcraft.io 网站,以及在这些技术的支撑下构建的整个生态系统。

 

snap 软件包被设计成用来隔离并封装整个应用程序。这些概念使得 snapcraft 提高软件安全性、稳定性和可移植性的目标得以实现,其中可移植性允许单个 snap 软件包不仅可以在 Ubuntu 的多个版本中安装,而且也可以在 Debian、Fedora 和 Arch 等发行版中安装。snapcraft 网站对其的描述如下:为每个 Linux 桌面、服务器、云端或设备打包任何应用程序,并且直接交付更新。

 

Snap是Ubuntu母公司Canonical于2016年4月发布Ubuntu16.04时候引入的一种安全的、易于管理的、沙盒化的软件包格式,与传统的dpkg/apt有着很大的区别。

 

Snap可以让开发者将他们的软件更新包随时发布给用户,而不必等待发行版的更新周期;其次Snap应用可以同时安装多个版本的软件,比如安装Python2.7和Python3.3。

 

snap包具有如下的特性:

 

包含应用所需运行的所有dependence

你可以100%确定你的应用不会因为任何在应用之外的变化的改变而导致你的应用不能正常运行,比如卸载一个Java应用不会导致其它Java应用的运行.安装一个使用不同版本的Java JDK/OpenJDK的Java应用,不会干扰现有的任何一个运行在不同JDK/OpenJDK版本的Java应用

通常snap的包比正常应用的包要大,因为它包含了所有它需要运行的环境

snapcraft的功能是:

 

它是一个编译工具

让我们很方便地把不同资源的component集成起来,并编译它们

它是一个snap的打包工具。

snap 软件包是什么? snapcraft 又是什么?

Reply View the author
mcaoser
deepin
2021-01-07 21:53
#6
youyou2011

桌面环境是由很多软件包构成的,不同的桌面环境需要的软件包相差很大,就算两个不同的桌面环境需要的软件包相同,但是需要的版本也不一样,由于Linux存在软件依赖这一特殊情况,所以并不是所有桌面环境都可以共存。

⚡️⚡️⚡️

可以选择Flatpak和snap格式包

⚡️⚡️⚡️

Flatpak是一种构建、发布、安装和运行应用程序的技术。它主要的目标是Linux桌面系统,同时也可以适用于嵌入式等系统中。

 

Flatpak的设计目标是:

* 使应用程序可以安装在任何一个发行版上

* 为应用程序提供固定的环境,实施测试和减少缺陷

* 实现应用程序和操作系统的解耦和,使应用程序可以不依赖于特定的发行版本

* 使应用程序可以自带依赖,能够使用linux发行版没有提供的依赖,避免其对特定发行版本甚至特定库的依赖

* 在沙箱中独立运行应用程序,提升安全性

 

Flatpak使这些特性易于实现。如果你对flatpak还不了解,建议尝试一下hello workd的例子。

 

更多信息可查看 flatpak.org

Flatpak是一种构建、发布、安装和运行应用程序的技术。

⚡️⚡️⚡️

SNAP包管理:

apt包管理的缺点:

系统升级后,官方软件仓库基本冻结(安全补丁除外)

为了维护包和库的依赖关系无法安装最新版软件

 

SNAP特点:

SNAP包管理操作独立于软件仓库

可以分发不属于官方库的软件版本

软件安装使用不受操作系统包和库的依赖关系的影响

snap内建与linux发行版不兼容的库

snap可以同时安装多个软件

 

snap基本使用:

sudo snap find 查找软件包

sudo snap install 安装软件包

sudo snap remove 删除软件包

sudo snap refresh (package) 更新索引(更新该软件包的索引信息)

SNAP包管理操作独立于软件仓库 可以分发不属于官方库的软件版本

⚡️⚡️⚡️

snap 软件包是什么?

 

snapcraft 又是什么?

 

snap 是用于 Linux 发行版的软件包,它们在设计的时候吸取了像 Android 这样的移动平台和物联网设备上分发软件的经验教训。

 

snapcraft 这个名字涵盖了 snap 和用来构建它们的命令行工具、snapcraft.io 网站,以及在这些技术的支撑下构建的整个生态系统。

 

snap 软件包被设计成用来隔离并封装整个应用程序。这些概念使得 snapcraft 提高软件安全性、稳定性和可移植性的目标得以实现,其中可移植性允许单个 snap 软件包不仅可以在 Ubuntu 的多个版本中安装,而且也可以在 Debian、Fedora 和 Arch 等发行版中安装。snapcraft 网站对其的描述如下:为每个 Linux 桌面、服务器、云端或设备打包任何应用程序,并且直接交付更新。

 

Snap是Ubuntu母公司Canonical于2016年4月发布Ubuntu16.04时候引入的一种安全的、易于管理的、沙盒化的软件包格式,与传统的dpkg/apt有着很大的区别。

 

Snap可以让开发者将他们的软件更新包随时发布给用户,而不必等待发行版的更新周期;其次Snap应用可以同时安装多个版本的软件,比如安装Python2.7和Python3.3。

 

snap包具有如下的特性:

 

包含应用所需运行的所有dependence

你可以100%确定你的应用不会因为任何在应用之外的变化的改变而导致你的应用不能正常运行,比如卸载一个Java应用不会导致其它Java应用的运行.安装一个使用不同版本的Java JDK/OpenJDK的Java应用,不会干扰现有的任何一个运行在不同JDK/OpenJDK版本的Java应用

通常snap的包比正常应用的包要大,因为它包含了所有它需要运行的环境

snapcraft的功能是:

 

它是一个编译工具

让我们很方便地把不同资源的component集成起来,并编译它们

它是一个snap的打包工具。

snap 软件包是什么? snapcraft 又是什么?

不知道你说的这些是什么,太难懂了,我只知道很多其他linux发行版同时支持kde,gnome,xfce,还有很多其他的也可以支持,如fvwm,lxde,lxqt........

Reply View the author
youyou2011
deepin
2021-01-07 22:00
#7

Qt教程,Qt5编程入门教程

Qt 是一个跨平台的 C++ 框架(C++库),目前最新的版本是 Qt5。Qt5 还包含了很多小版本,其中推荐 Qt5.6 或 Qt5.9,这两个版本是 LTS 版本(即长期支持版本),Bug较少,相对稳定。

 

Qt 除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。

 

这套 Qt 教程以 Qt 5.9 为基础来介绍 Qt 开发,配有精美的图片以及完整的示例程序,几乎涉及 Qt 编程的所有模块。

Qt教程,Qt5编程入门教程

⚡️⚡️⚡️

Qt是什么?Qt简介

Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。

 

Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要,对于不了解 C++ 的读者,我建议先阅读《C语言教程》,再阅读《C++教程》。C++ 是在C语言的基础上发展起来的,学完C语言就学了 C++ 的一半了。

 

Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。

 

Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。

Qt 图标(Logo)

Qt 可以做什么?

Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。

 

Qt 是应用程序开发的一站式解决方案,有了 Qt,你就可以高枕无忧了!Qt 本身包含的模块也日益丰富, 一直有新模块和第三方模块加入进来。 

 

大部分应用程序都可以使用 Qt 实现,除了与计算机底层结合特别紧密的,例如驱动开发,它直接使用硬件提供的编程接口,而不能使用操作系统自带的函数库。

 

1997年,Qt 被用来开发 Linux 桌面环境 KDE,大获成功,使 Qt 成为 Linux 环境下开发 C++ GUI 程序的事实标准。

 

下面的程序都使用 Qt 开发:WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Opera、咪咕音乐、Google地图、Adobe Photoshop Album 等。

 

Linux 也是嵌入式的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。

 

Qt 虽然也支持手机操作系统,但是由于 Android 本身已经有 Java 和 Kotlin,iOS 本身已经有 Objective-C 和 Swift,所以 Qt 在移动端的市场份额几乎可以忽略。

 

总起来说,Qt 主要用于桌面程序开发和嵌入式开发。

Qt 和智能手机

Qt 目前支持主流的 Android、iOS、WinPhone 等智能机操作系统。MeeGo 是基于 Qt 开发的操作系统,由于被诺基亚抛弃了, 只剩一代绝版诺基亚 N9 手机。

 

诺基亚手机部门出售给微软之后,大部分诺基亚手机系统开发人员都被遣散了。

原来诺基亚的一部分人成立新的 Jolla(卓蓝)公司,发布了 MeeGo 的衍生版智能手机系统 Sailfish(旗鱼),相应的手机和平板也发布开卖了。

另一拨人投靠了 Tizen(泰泽),Tizen 是英特尔和三星力推的智能手机系统,该系统整合了 Limo 和 MeeGo,因为 MeeGo 系统被诺基亚抛弃,英特尔其实是被出卖了,所以只能联合三星重造智能手机系统 Tizen。

 

目前基于 Tizen 的首款手机三星 Z1 在印度上市了。在 Tizen 阵营,国内有中兴、百度涉及了。Qt 开源项目里也有 Qt for Tizen 版本,有兴趣的可以去搜搜。

 

Qt 公司有专门针对移动开发的商业版本,20 欧元或 25 美元一个月。不做商业可以无视这个,用开源版本也是可以开发如 Android、iOS、WinPhone 应用的。

 

本教程关注的是传统桌面操作系统开发的,移动开发可以参考 Qt 官方的文档。

Qt 的辛酸史

说到 Qt 的发展史,那真是一波三折,几经卖身。

 

Qt 最早是 1991 年由挪威的 Eirik Chambe-Eng 和 Haavard Nord 开发的, 他们随后于 1994 年 3 月 4 号正式成立奇趣科技公司(Trolltech)。Qt 原本是商业授权的跨平台开发库, 在 2000 年奇趣科技公司为开源社区发布了遵循 GPL(GNU General Public License)许可证的开源版本。

 

在 2008 年,诺基亚公司收购了奇趣科技公司,并增加了 LGPL(GNU Lesser General Public License)的授权模式。诺基亚联合英特尔利用 Qt 开发了全新的智能手机系统 MeeGo,可惜遭遇了微软木马屠城,诺基亚被迫放弃了 MeeGo, 而 Qt 商业授权业务也于 2011 年 3 月出售给了芬兰 IT 服务公司 Digia。

当然好消息是 Digia 于 2014 年 9 月宣布成立 Qt Company 全资子公司,独立运营 Qt 商业授权业务。目前 Qt 公司大力推广移动平台开发和商业应用, 总的来说 Qt 历经曲折,现在算是步入正轨了。

 

经过 20 多年的发展,Qt 已经成为最优秀的跨平台开发框架之一,在各行各业的项目开发中得到广泛应用。许多大型软件都是用 Qt 开发的,如 Autodesk Maya、Google Earth、Skype、WPS Office等。

永远不要忽视微软帝国的威胁,作为软件业的一代霸主,任何人都不要天真地试图和它做朋友,因为霸主不可能有朋友。微软的木马屠城是所有诺基亚人和芬兰人的痛,希望读者们都记牢这条。

 

Qt 和 KDE

之前提到 Qt 原本是商业授权软件,是怎么开源的呢?这就涉及 Qt 和 KDE 的纠葛了。

 

KDE 是 Linux 操作系统的桌面环境,与 GNOME 桌面是类似的,作为开源桌面它们竞争的情况更为多见,有兴趣的读者请猛击《Linux桌面环境》了解更多。

 

KDE 是采用 GPL 许可证发布的开源软件,而最初 Qt 是商业授权的,存在商业侵权风险,GNOME 则是基于开源 GTK 库的,没有什么商业风险,这一度是 GNOME 优越于 KDE 的特性。

 

由于 Qt 的商业授权,KDE 社区一度混乱纠结,与此同时 GNOME 则如火如荼发展起来了。 KDE 毕竟算是亲儿子,被另一波人欺负,奇趣科技公司当然看不下去了,最后是奇趣科技公司为了赢得开发者的支持,为 Qt 增加了 GPL 的开源授权, 对于开源社区而言,遵循 GPL 使用 Qt 就不需要付费,这为 KDE 解决了燃眉之急。

 

之后 KDE 桌面和 GNOME 都发展壮大起来,都做得越来越好了。

GPL 和 LGPL

除了商业授权,目前 Qt 的开源授权有两种,一种是 GPL 授权,另一种是 LGPL 授权(诺基亚收购后新增)。

 

对这两种开源授权,简单来说,使用 GPL 版本的软件一定还是 GPL 的开源软件,无论是使用了 Qt 的程序代码还是修改了 Qt 库代码,都必须按照 GPL 来发布,这是 GPL 的传染性。

 

GPL 是什么都要开源,这对商业软件应用是不利的,所以诺基亚增加了 LGPL 授权 (第一个 L 可以叫 Lesser 宽松版或 Library 开发库版)。使用 LGPL 授权就可以利用 Qt 官方动态链接库,而不必开放商业代码。只要不修改和定制 Qt 库,仅使用 Qt 官方发布的动态链接库就可以不开源,这是商业友好的授权模式。

 

其实只要不是做商业,就不太需要关注用什么授权,以 GPL 授权发布程序代码就可以了。

 

世界上的开源协议有很多,有兴趣的读者请猛击《开源协议是什么?有哪些?如何选择?》了解更多内容。 

 

最后请认准 Qt 官方网站(有时候访问速度很慢甚至不能访问,读者请自备梯子),可以查阅文档或者浏览资讯:https://www.qt.io/

Qt是什么?Qt简介

Reply View the author
youyou2011
deepin
2021-01-07 22:18
#8

Qt和其它GUI库的对比

世界上的 GUI 库多如牛毛,有的跨平台,有的专属于某个操作系统;有的只有 UI 功能,有的还融合了网络通信、多媒体处理、数据库访问等底层功能。

Windows 下的 GUI 库

Windows 下的 GUI 解决方案比较多:

基于 C++ 的有 Qt、MFC、WTL、wxWidgets、DirectUI、Htmlayout;

基于 C# 的有 WinForm、WPF;

基于 Java 的有 AWT、Swing;

基于 Pascal 的 有Delphi;

基于Go语言的有 walk 和 electron;

还有国内初露头角的 aardio;

Visual Basic 曾经很流行,现在逐渐失去了色彩;

如果你有 Web 开发经验,也可以基于 Webkit 或 Chromium 将网页转换为桌面程序。

 

没有哪一种方案能够独霸 Windows,使用比较多的编程语言是 C++、C#、Java。

 

用 Qt 来开发 Windows 桌面程序有以下优点:

简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Windows API。

资料丰富:资料丰富能够成倍降低学习成本,否则你只能去看源码,关于 DirectUI、Htmlayout、aardio 的资料就很少。

漂亮的界面:Qt 很容易做出漂亮的界面和炫酷的动画,而 MFC、WTL、wxWidgets 比较麻烦。

独立安装:Qt 程序最终会编译为本地代码,不需要其他库的支撑,而 Java 要安装虚拟机,C# 要安装 .NET Framework。

跨平台:如果你的程序需要运行在多个平台下,同时又希望降低开发成本,Qt 几乎是必备的。

Qt 和 MFC

读者经常将 MFC 和 Qt 进行对比,MFC 只能应用在 Windows 平台,而 Qt 是跨平台的,一次编写,到处运行。

 

另外,Qt 已经封装了底层细节,学习 Qt 将会非常简单;而 MFC 只是给 Windows API 加了一层包装,不了解 Windows API 也学不好 MFC,大家普遍反映 MFC 难学。

 

我们不能简单地说 Qt 好还是 MFC 好,两者都有用武之地;但是初学者学习 Qt 会比较简单,不用应付那些烦人的 Windows API,很快就能开发出带有漂亮界面的应用程序。

Linux 下的 GUI 库

Linux 下常用的 GUI 库有基于 C++ 的 Qt、GTK+、wxWidgets,以及基于 Java 的 AWT 和 Swing。其中最著名的就是 Qt 和 GTK+:KDE 桌面系统已经将 Qt 作为默认的 GUI 库,Gnome 桌面系统也将 GTK+ 作为默认的 GUI 库。

有兴趣的读者请猛击《Linux桌面系统》了解更多关于 KDE 和 Gnome 的内容。

相比 GTK+,Qt 的功能更加强大,更新也很快,比较受人们追捧。

图1:Linux 下各种 GUI 库对比图

Qt和其它GUI库的对比

Reply View the author
youyou2011
deepin
2021-01-07 22:20
#9

学习QML还是C++?

Qt4 时代的主流就是传统部件(或叫控件)编程,所用的语言一般是 C++。 Qt5 诞生之时,正是手机移动设备蓬勃发展的时候,而传统的 C++ 部件编写的界面对手机应用程序非常方便,比如手机屏幕显示随意翻转, 这在传统桌面程序里基本遇不到,谁会将 22 寸显示器翻过来转过去呢。

 

为了适应手机移动应用开发, Qt5 将 QML 脚本编程提到与传统 C++ 部件编程相同的高度,力推 QML 界面编程,当然 QML 主要用于手机移动应用程序。 QML 包含大量使用手机移动设备的功能模块,比如基本部件(QtQuick 模块)、GPS 定位、渲染特效、蓝牙、NFC、WebkKit 等等。

 

QML 类似于网页设计的 HTML,是一种标记语言,我们可以借助 CSS 对它进行美化,也可以借* 进行交互。有 Web 开发经验的读者学习 QML 将非常轻松。

 

使用 QML 开发界面主要有以下几个优点:

QML 非常灵活,可以做出非常炫酷的效果,例如 QQ、360、迅雷等都不在话下。

QML 是标记语言,见名知意,非常容易编写和阅读,大大提高了开发和维护效率。

QML 界面简洁大气,有很多动画,适合移动端。

不同平台下的 QML 使用相同的渲染机制,界面效果一致,不会随操作系统的不同而变化。

 

既然 QML 有这么多优点,我们是不是可以不学 C++,直接学习 QML 呢?

 

非也!QML 只能用来进行界面设计和人机交互,也就是只能胜任 UI 部分,在底层仍然需要调用 C++ 编写的组件来完善功能,比如访问数据库、网络通信、多线程多进程、文件读写、图像处理、音频视频处理等都离不开 C++。

 

另外,现阶段新生的 QML 还不如传统的 C++ 部件编程那样拥有丰富的开发组件,尤其缺乏复杂的企业级应用程序所必须的树等控件。这就决定了至少现阶段,真正大型的桌面程序仍然只能选择以 C++ 为主、QML 为辅的开发模式。

 

相信大部分读者都没有 Web 开发经验,学习 QML 成本还是比较高的,不但要习惯 QML 这种标记性语言,还要学习 CSS *。

 

总的来说,C++ 对于 Qt 是不可或缺的,而 QML 只是一个加分项。

本教程只讲解 C++ 部件编程

C++依旧是 Qt 的主要编程语言,Qt 5 也并没有忽略它,Qt 5 添加了很多新的 C++ API,而且会持续更新。引入 QML 只是 Qt 5 提供的另外一种选择,并不是让它成为唯一的选择。

 

C++ 是 Qt 的基础,无论如何都要掌握,本教程也只讲解传统的 C++ 部件编程,不讲解 QML。

学习QML还是C++?

Reply View the author
youyou2011
deepin
2021-01-07 22:40
#10

C++入门教程,C++基础教程

C++ 由C语言发展而来,几乎完全兼容C语言;换句话说,你编写的C语言代码几乎可以不加修改地用于 C++。

 

C语言是面向过程的语言,C++ 在此基础上增加了面向对象以及泛型编程机制,因此 C++ 更适合大中型程序的开发。然而,C++ 并没有牺牲效率,如果不使用高级特性,它的效率和C语言几乎没有差异。

 

这套C++入门教程是在C语言的基础上编写的,如果你不了解C语言,请猛击《C语言入门教程》进行学习。C++ 标准库包含了很多类,每个类又包含了很多成员,你可以转到 http://www.cplusplus.com/ 了解它们的用法。

C++入门教程,C++基础教程

⚡️⚡️⚡️

学习C++之前要先学习C语言吗?

C++ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone 7、Win10 和 Win7 的关系。

 

从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译,这给很多初学者带来了不小的困惑,学习 C++ 之前到底要不要先学习C语言呢?

 

我对这个问题保持中立,但是初学者直接学习 C++ 会非常吃力,Hold 不住,尤其是对计算机内存不太理解的情况下,C++ 是学不懂的。C++ 是一门灵活多变、特性丰富的语言,同时也意味着比较复杂,不易掌握。

 

不过可以明确地说:学了C语言就相当于学了 C++ 的一半,从C语言转向 C++ 时,不需要再从头开始,接着C语言往下学就可以,所以我强烈建议先学C语言再学 C++。

C++和C语言的血缘关系

现在看来,C++ 和C语言虽然是两门独立的语言,但是它们却有着扯也扯不清的关系。

 

早期并没有“C++”这个名字,而是叫做“带类的C”。“带类的C”是作为C语言的一个扩展和补充出现的,它增加了很多新的语法,目的是提高开发效率,如果你有 Java Web 开发经验,那么你可以将它们的关系与 Servlet 和 JSP 的关系类比。

 

这个时期的 C++ 非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将 C++ 代码”翻译“为C语言代码,再通过C语言编译器合成最终的程序。

 

随着 C++ 的流行,它的语法也越来越强大,已经能够很完善的支持面向过程编程、面向对象编程(OOP)和泛型编程,几乎成了一门独立的语言,拥有了自己的编译方式。

 

我们很难说 C++ 拥有独立的编译器,例如 Windows 下的微软编译器(cl.exe)、Linux 下的 GCC 编译器、Mac 下的 Clang 编译器(已经是 Xcode 默认编译器,雄心勃勃,立志超越 GCC),它们都同时支持C语言和 C++,统称为 C/C++ 编译器。对于C语言代码,它们按照C语言的方式来编译;对于 C++ 代码,就按照 C++ 的方式编译。

 

从表面上看,C、C++ 代码使用同一个编译器来编译,所以上面我们说“后期的 C++ 拥有了自己的编译方式”,而没有说“C++ 拥有了独立的编译器”。

再说C++教程

如果针对没有任何编程经验的读者写一本 C++ 的书,那将是一项不小的任务,写出来的书也会非常厚。即使这样,也仅仅是在讲语法。

 

更重要的是,这些知识你很难全部吸收,会严重打击你的信心,失去学习的兴趣。

我的建议

没有任何编程基础的读者,我建议先从C语言学起,不要贪多嚼不烂。有编程基础的读者,相信你自己能做出正确的判断。

 

学习编程是一个循序渐进的过程,不要期望一口吃个胖子。学习C语言,一来是学习它的语法,为 C++ 打基础,同时培养编程兴趣,二来是学习内存、编译和链接,弄清编程语言的内在机理。

 

每个初学者都经历过这样的窘境:已经学习了语法,明白了编程语言都有什么,也按照教程敲了不少代码,但是遇到实际问题就挂了,没有思路,不知道从何下手。说白了就是只会学不会用。

 

究其原因,就是实践少,没有培养起编程思维!学习知识容易,运用知识难!

 

等你熟悉了C语言,能编写出上百行的代码,就对编程有些概念了。这个时候再去了解 C++ 究竟在C语言基础上增加了什么,你就站在了一定的高度。

 

从“学院派”的角度来说,C++ 支持面向过程编程、面向对象编程和泛型编程,而C语言仅支持面向过程编程。就面向过程编程而言,C++ 和C几乎是一样的,所以学习了C语言,也就学习了 C++ 的一半,不需要从头再来。

 

C语言中文网的教程也是这样安排的:

先讲解C语言,具体请阅读《C语言入门教程》。

再讲解 C++,主要包括 C++ 和C的一些差别,以及面向对象编程和泛型编程。

学习C++之前要先学习C语言吗?

Reply View the author
youyou2011
deepin
2021-01-07 22:56
#11

C语言入门教程,C语言学习教程

C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言。C语言是计算机产业的核心语言,操作系统、硬件驱动、关键组件、数据库等都离不开C语言;不学习C语言,就不能了解计算机底层。

 

这套「C语言入门教程」由站长亲自执笔,将多年的编程经验灌输其中,典型的实践派。这部教程已经发布了 5 年,经历了 5 次大改版,既适合初学者入门(学习语法),也适合程序员进阶(学习底层)。

 

学习C语言,除了要学习语法,还要学习内存、字符编码、调试技巧以及编程思维,这些知识点本教程都做了详细讲解。

 

本教程已提供 PDF 版本(高清带目录),请猛击这里下载。阅读完本教程以后,你也可以转到《数据结构》或者《C++教程》继续学习。

C语言入门教程,C语言学习教程

Reply View the author
youyou2011
deepin
2021-01-07 22:59
#12

通俗地理解什么是编程语言

学习编程语言之前,首先要搞清楚「编程语言」这个概念。

 

很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们竟然在不知不觉中学会了说话,同时也能听懂其他小朋友说话的意思了,我们开始向父母要零花钱买零食和玩具、被欺负了向父母倾诉……

 

我们说的是汉语,是“中国语言”,只要把我们的需求告诉父母,父母就会满足,我们用“中国语言”来控制父母,让父母做我们喜欢的事情。

 

“中国语言”有固定的格式,每个汉字代表的意思不同,我们必须正确的表达,父母才能理解我们的意思。例如让父母给我们10元零花钱,我们会说“妈妈给我10块钱吧,我要买小汽车”。如果我们说“10元给我汽车小零花钱妈妈”,或者“妈妈给我10亿人民币,我要买F-22”,妈妈就会觉得奇怪,听不懂我们的意思,或者理解错误,责备我们。

 

我们通过有固定格式和固定词汇的“语言”来控制他人,让他人为我们做事情。语言有很多种,包括汉语、英语、法语、韩语等,虽然他们的词汇和格式都不一样,但是可以达到同样的目的,我们可以选择任意一种语言去控制他人。

 

同样,我们也可以通过”语言“来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming Language)。

 

编程语言也有固定的格式和词汇,我们必须经过学习才会使用,才能控制计算机。

 

编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JS、Go语言、Objective-C、Swift、汇编语言等,每种语言都有自己擅长的方面,例如:

编程语言 主要用途

C/C++ C++ 是在C语言的基础上发展起来的,C++ 包含了C语言的所有内容,C语言是C++的一个部分,它们往往混合在一起使用,所以统称为 C/C++。C/C++主要用于PC软件开发、Linux开发、游戏开发、单片机和嵌入式系统。

Java Java 是一门通用型的语言,可以用于网站后台开发、Android 开发、PC软件开发,近年来又涉足了大数据领域(归功于 Hadoop 框架的流行)。

C# C# 是微软开发的用来对抗 Java 的一门语言,实现机制和 Java 类似,不过 C# 显然失败了,目前主要用于 Windows 平台的软件开发,以及少量的网站后台开发。

Python Python 也是一门通用型的语言,主要用于系统运维、网站后台开发、数据分析、人工智能、云计算等领域,近年来势头强劲,增长非常快。

PHP PHP 是一门专用型的语言,主要用来开发网站后台程序。

js最初只能用于网站前端开发,而且是前端开发的唯一语言,没有可替代性。近年来由于 Node.js 的流行,js在网站后台开发中也占有了一席之地,并且在迅速增长。

Go语言 Go语言是 2009 年由 Google 发布的一款编程语言,成长非常迅速,在国内外已经有大量的应用。Go 语言主要用于服务器端的编程,对 C/C++、Java 都形成了不小的挑战。

Objective-C

Swift Objective-C 和 Swift 都只能用于苹果产品的开发,包括 Mac、MacBook、iPhone、iPad、iWatch 等。

汇编语言 汇编语言是计算机发展初期的一门语言,它的执行效率非常高,但是开发效率非常低,所以在常见的应用程序开发中不会使用汇编语言,只有在对效率和实时性要求极高的关键模块才会考虑汇编语言,例如操作系统内核、驱动、仪器仪表、工业控制等。

可以将不同的编程语言比喻成各国语言,为了表达同一个意思,可能使用不同的语句。例如,表达“世界你好”的意思:

汉语:世界你好;

英语:Hello World

法语:Bonjour tout le monde

 

在编程语言中,同样的操作也可能使用不同的语句。例如,在屏幕上显示“C语言中文网”:

C语言:puts("C语言中文网");

PHP:echo "C语言中文网";

Java:System.out.println("C语言中文网");

 

编程语言类似于人类语言,由直观的词汇组成,我们很容易就能理解它的意思,例如在C语言中,我们使用 puts 这个词让计算机在屏幕上显示出文字;puts 是 output string(输出字符串)的缩写。

 

使用 puts 在屏幕上显示“C语言中文网”:

puts("C语言中文网");

我们把要显示的内容放在("和")之间,并且在最后要有;。你必须要这样写,这是固定的格式。

 

总结:编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。

 

C语言(C Language)是编程语言的一种,学习C语言,主要是学习它的格式和词汇。下面是一个C语言的完整例子,它会让计算机在屏幕上显示”C语言中文网“。

这个例子主要演示C语言的一些固有格式和词汇,看不懂的读者不必深究,也不必问为什么是这样,后续我们会逐步给大家讲解。

 

#include

int main(){

    puts("C语言中文网");

    return 0;

}

这些具有特定含义的词汇、语句,按照特定的格式组织在一起,就构成了源代码(Source Code),也称源码或代码(Code)。

 

那么,C语言肯定规定了源代码中每个词汇、语句的含义,也规定了它们该如何组织在一起,这就是语法(Syntax)。它与我们学习英语时所说的“语法”类似,都规定了如何将特定的词汇和句子组织成能听懂的语言。

 

编写源代码的过程就叫做编程(Program)。从事编程工作的人叫程序员(Programmer)。程序员也很幽默,喜欢自嘲,经常说自己的工作辛苦,地位低,像农民一样,所以称自己是”码农“,就是写代码的农民。也有人自嘲称是”程序猿“。

通俗地理解什么是编程语言

Reply View the author
youyou2011
deepin
2021-01-07 23:03
#13

C语言究竟是一门怎样的语言?

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。

 

C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”,这些底层知识决定了你的发展高度,也决定了你的职业生涯。

 

如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。也只有学习C语言,才能更好地了解它们。有了足够的基础,以后学习其他语言,会触类旁通,很快上手,7 天了解一门新语言不是神话。

 

C语言概念少,词汇少,包含了基本的编程元素,后来的很多语言(C++、Java等)都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。

 

正是由于C语言的简单,对初学者来说,学习成本小,时间短,结合本教程,能够快速掌握编程技术。

 

在世界编程语言排行榜中,C语言、Java 和 C++ 霸占了前三名,拥有绝对优势。

 

2017年,由于小型软件设备的蓬勃发展以及汽车行业底层软件的增加,C语言还拿下了「年度编程语言」的桂冠,成为 2017 年全球增长最快的编程语言。

 

C语言诞生于20世纪70年代,年龄比我们都要大,我们将在《C语言的三套标准:C89、C99和C11》一节中讲解更多关于C语言的历史。

 

当然,C语言也不是没有缺点,毕竟是70后老人,有点落后时代,开发效率较低,后来人们又在C语言的基础上增加了面向对象的机制,形成了一门新的语言,称为C++,我们将在《C语言和C++到底有什么关系》中讲解。

C语言难吗?

和 Java、C++、Python、C#、JS等高级编程语言相比,C语言涉及到的编程概念少,附带的标准库小,所以整体比较简洁,容易学习,非常适合初学者入门。

 

编程语言的发展大概经历了以下几个阶段:

汇编语言 --> 面向过程编程 --> 面向对象编程

 

汇编语言是编程语言的拓荒年代,它非常底层,直接和计算机硬件打交道,开发效率低,学习成本高;

C语言是面向过程的编程语言,已经脱离了计算机硬件,可以设计中等规模的程序了;

Java、C++、Python、C#、PHP 等是面向对象的编程语言,它们在面向过程的基础上又增加了很多概念。

 

C语言出现的时候,已经度过了编程语言的拓荒年代,具备了现代编程语言的特性,但是这个时候还没有出现“软件危机”,人们没有动力去开发更加高级的语言,所以也没有太复杂的编程思想。

 

也就是说,C语言虽然是现代编程语言,但是它涉及到的概念少,词汇少,思想也简单。C语言学习成本小,初学者能够在短时间内掌握编程技能,非常适合入门。

C语言是计算机产业的核心语言

也许是机缘巧合,C语言出现后不久,计算机产业开始爆发,计算机硬件越来越小型化,越来越便宜,逐渐进入政府机构,进入普通家庭,C语言成了编程的主力军,获得了前所未有的成功,操作系统、常用软件、硬件驱动、底层组件、核心算法、数据库、小游戏等都使用C语言开发。

 

雷军说过,站在风口上,猪都能飞起来;C语言就是那头猪,不管它好不好,反正它飞起来了。

 

C语言在计算机产业大爆发阶段被万人膜拜,无疑会成为整个软件产业的基础,拥有核心地位。

 

软件行业的很多细分学科都是基于C语言的,学习数据结构、算法、操作系统、编译原理等都离不开C语言,所以大学将C语言作为一门公共课程,计算机相关专业的同学都要学习。

 

C语言被誉为“上帝语言”,它不但奠定了软件产业的基础,还创造了很多其它语言,例如:

PHP、Python 等都是用C语言开发出来的,虽然平时做项目的时候看不到C语言的影子,但是如果想深入学习 PHP 和 Python,那就要有C语言基础了。

C++ 和 Objective-C 干脆在C语言的基础上直接进行扩展,增加一些新功能后变成了新的语言,所以学习 C++ 和 Objective-C 之前也要先学习C语言。

 

C语言是有史以来最为重要的编程语言:要进入编程行业高手级别必学C语言,要挣大钱必学C语言,要做黑客、红客必学C语言,要面试名企、外企、高薪职位必学C语言。

C语言究竟是一门怎样的语言?

Reply View the author
youyou2011
deepin
2021-01-07 23:16
#14

C语言是菜鸟和大神的分水岭

 

作为一门古老的编程语言,C语言已经坚挺了好几十年了,初学者从C语言入门,大学将C语言视为基础课程。不管别人如何抨击,如何唱衰,C语言就是屹立不倒;Java、C#、Python、PHP、Perl 等都有替代方案,它们都可以倒下,唯独C语言不行。

 

程序是在内存中运行的(我们将在《载入内存,让程序运行起来》一节中详细说明),一名合格的程序员必须了解内存,学习C语言是了解内存布局的最简单、最直接、最有效的途径,C语言简直是为内存而生的,它比任何一门编程语言都贴近内存。

 

所谓内存,就是我们常说的内存条。

 

所有的程序都在拼尽全力节省内存,都在不遗余力提高内存使用效率,计算机的整个发展过程都在围绕内存打转,不断地优化内存布局,以保证可以同时运行多个程序。

 

不了解内存,就学不会进程和线程,就没有资格玩中大型项目,没有资格开发底层组件,没有资格架构一个系统,命中注定你就是一个菜鸟,成不了什么气候。

 

以上这点我有深刻的体会!工作期间我曾专注于网站开发,虽然能够设计出界面漂亮、体验良好的网页,但是对内存泄漏、多线程、共享内存等底层概念一窍不通,感觉和周围同事的差距很大,这让我非常郁闷,不知道如何突破。我曾多次尝试学习内存和线程,也找了很多资料,但是无论如何都啃不懂,到头来还是一头雾水。

 

离职后我全职运营C语言中文网,于是决定再次系统、深入、全面地学习C语言,并结合C语言去了解一些内存知识,这个时候我才发现,原来C语言就是为内存而生的,C语言的设计和内存的布局是严密贴合的,我因为学习C语言而吃透了内存,了解了计算机内存是如何分布和组织的。

C语言无时无刻不在谈内存,内存简直就是如影随形,你不得不去研究它。

至关重要的一点是,我能够把内存和具体的编程知识以及程序的运行过程结合起来,真正做到了学以致用,让概念落地,而不是空谈,这才是最难得的。

 

另外一个惊喜是,攻克内存后我竟然也能够理解进程和线程了,原来进程和线程也是围绕内存打转的,从一定程度上讲,它们的存在也是为了更加高效地利用内存。

 

从C语言到内存,从内存到进程和线程,环环相扣:不学C语言就吃不透内存,不学内存就吃不透进程和线程。

 

我感觉自己瞬间升华了,达到了一个新的高度,之前的很多谜团都解开了,和大神交流也没有障碍了。

 

「内存 + 进程 + 线程」这几个最基本的计算机概念是菜鸟和大神的分水岭,也只有学习C语言才能透彻地理解它们。Java、C#、PHP、Python、JS 程序员工作几年后会遇到瓶颈,有很多人会回来学习C语言,重拾底层概念,让自己再次突破。

http://c.biancheng.net/view/1714.html

Reply View the author
youyou2011
deepin
2021-01-07 23:18
#15

学编程难吗?多久能入门?

 

这篇文章主要是解答初学者的疑惑,没有信心的读者看了会吃一颗定心丸,浮躁的读者看了会被泼一盆冷水。

学编程难吗?

编程是一门技术,我也不知道它难不难,我只知道,只要你想学,肯定能学会。每个人的逻辑思维能力不同,兴趣点不同,总有一部分人觉得容易,一部分人觉得吃力。

 

在我看来,技术就是一层窗户纸,是有道理可以遵循的,最起码要比搞抽象的艺术容易很多。

 

但是,隔行如隔山,学好编程也不是一朝一夕的事,想“吃快餐”的读者可以退出编程界了,浮躁的人搞不了技术。

 

在技术领域,编程的入门门槛很低,互联网的资料很多,只要你有一台计算机,一根网线,具备初中学历,就可以学习,投资在 5000RMB 左右。

 

不管是技术还是非技术,要想有所造诣,都必须潜心钻研,没有几年功夫不会鹤立鸡群。所以请先问问你自己,你想学编程吗,你喜欢吗,如果你觉得自己对编程很感兴趣,想了解软件或网站是怎么做的,那么就不要再问这个问题了,尽管去学就好了。

多久能学会编程?

这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。如果你每天都拿出大把的时间来学习,那么两三个月就可以学会C/C++,不到半年时间就可以编写出一些软件。

 

但是有一点可以肯定,几个月从小白成长为大神是绝对不可能的。要想出类拔萃,没有几年功夫是不行的。学习编程不是看几本书就能搞定的,需要你不断的练习,编写代码,积累零散的知识点,代码量跟你的编程水平直接相关,没有几万行代码,没有拿得出手的作品,怎能称得上“大神”。

 

每个人程序员都是这样过来的,开始都是一头雾水,连输出九九乘法表都很吃力,只有通过不断练习才能熟悉,这是一个强化思维方式的过程。

 

知识点可以在短时间内了解,但是思维方式和编程经验需要不断实践才能强化,这就是为什么很多初学者已经了解了C语言的基本概念,但是仍然不会编写代码的原因。

 

程序员被戏称为”码农“,意思是写代码的农民,要想成为一个合格的农民,必须要脚踏实地辛苦耕耘。

 

也不要压力太大,一切编程语言都是纸老虎,一层窗户纸,只要开窍了,就容易了。

“浸泡”理论

这是我自己独创的一个理论,意思是说:一个人要想在某一方面有所成就,就必须有半年以上的时间,每天花 10 个小时“浸泡”在这件事情上,最终一定会有所收获。

 

很多领域都是「一年打基础,两年见成效,三年有突破」,但是很多人在不到一年的时间里就放弃了,总觉得这个行业太难,不太适合自己。

 

轻言放弃是很可怕的,你要知道,第一次放弃只是浪费了时间,第二次放弃会打击你的信心,第三次放弃会摧毁你的意志,你就再也没有尝试的勇气了,“蹉跎人生”就是这么来的。

 

你也不要羡慕那些富二代官二代,你以为人生就是一次百米短跑,你赢了就是赢了,其实人生是一场接力赛,你的父辈祖辈都得赢,那些富二代官二代从好几十年以前就开始积累了。

 

所以,沉下一颗心来,从现在开始积累吧,有执念的人最可怕。

 

http://c.biancheng.net/view/1714.html

Reply View the author
youyou2011
deepin
2021-01-07 23:20
#16

英语和数学不好,能学编程吗?

 

很多初学者认为,编程语言是由英文组成的,而且会涉及很多算法,自己的英语和数学功底不好,到底能不能学会编程呢?

英语基础不好可以学会编程吗?

首先,学习编程需要你有英语基础;但是,要求并不高,初中水平完全可以胜任。

 

编程语言起源于美国,是由英文构成的,其中包括几十个英文的关键字以及几百个英文的函数,除非需要对文本进行处理,否则一般不会出现中文。但是,它们都是孤立的单词,不构成任何语句,不涉及任何语法。

 

几十个关键字不多,用得多了自然会记住,相信大家也不会担心。下面是C语言中的 32 个关键字:

 

int float double char short long signed unsigned

if else switch case default for while do

break continue return void const sizeof struct typedef

static extern auto register enum goto union volatile

几百个函数就没人能记住了(包括我),也不用记住,查询文档即可,每种编程语言都会提供配套的文档。常用到的函数也就几十个,记住它们就足够应付日常开发了,生僻的函数查询文档即可。

 

此外,我推荐大家安装有道词典,它的划词取词功能非常棒,选中一个单词或者句子能够及时翻译,这对大家记忆和理解代码非常有帮助。

对于英文资料

如果你希望达到很高的造诣,希望被人称为“大神”,那么肯定要阅读英文的技术资料(不是所有资料都被翻译成了中文),初中水平就有点吃力了。

 

不过,长期阅读英文会提高你的英文水平,只要你坚持一段时间,即使只有初中水平,我相信借助有道词典也会提高很快。

数学基础不好可以学编程吗?

谈到数学,那真是多虑了,它根本不构成障碍,会加减乘除就能学编程。

 

编程语言确实涉及到很多算法,有一些还需要高等数学知识,但是,这些算法都已经被封装好了,你直接拿来用就可以,根本不用你重复造轮子。

 

另外,这些算法都是在很深的底层为我们默默的工作,初级程序员根本不会涉及到算法,即使是别人已经封装好的算法,一般也没有机会使用,所以,你就别瞎操心了。我学编程八年了,至今都没有设计过什么算法,也没有使用过别人的算法。

 

http://c.biancheng.net/view/1714.html

Reply View the author
youyou2011
deepin
2021-01-07 23:21
#17

初中毕业能学会编程吗?

http://c.biancheng.net/view/1714.html

首先,初中毕业能学会编程,但是,一般达不到太高的造诣。

 

编程是知识密集型的行业,需要很强的学习能力。初中就毕业了,肯定学习不好。大家的智商都差不多,成绩不好一般都是学习能力差。什么是学习能力呢?这包括专注能力、理解能力、自律能力等。

专注能力

有很多人不能专注于一件事情,容易走神,人虽然在,心已经飞了,根本钻研不进去。

理解能力

也可以说是逻辑思维能力。

 

同一道题目,有些人一看就知道思路,就知道如何切入;也有些人绞尽脑汁都想不到方案,不知道从哪里下手。

 

同一个现象,有些人觉得就应该这样,这是理所当然的,就像公理一样,不需要理由;也有些人觉得很费解,为什么是这样呢,理由是什么呢?

自律能力

学习是一件枯燥的事情,有些人能坚持下来,有些人就熬不住。

 

我也不知道为什么人的学习能力有差异,难道是与生俱来的?有没有心理学家给科普一下,让我涨涨姿势。

 

拥有良好的学习能力是一件幸事,你将终生受益,这个社会越来越奖励知识分子。

 

Reply View the author
youyou2011
deepin
2021-01-07 23:28
#18

关于C语言中文网

 

C语言中文网,一个在线学习编程的网站。它始于C语言,但不终于C语言,除了C语言,您还可以学习 C++、Java、Python、Golang、PHP、Linux 等其它技能,请「猛击这里」查看所有教程。

 

C语言中文网成立于 2012 年初,由站长「严长生」在大三寒假期间创办,致力于分享优质编程教程,帮助对编程感兴趣的读者。

 

您可以把我们的教程当做电子书,或者在线文档,它们都划分好了章节,并配有完整目录,您可以按照顺序从头到尾学习。

千锤百炼,只为大作;精益求精,处处斟酌;这种教程,看一眼就倾心。

 

我们一直都在坚持的是:认认真真、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心,以及默默投入的时间,由衷地心动和点赞。这样的教程是一件作品,而不是呆板的文字!

 

坚持做好一件事情,做到极致,让自己感动,让读者心动,这就是足以传世的作品!

为什么创办C语言中文网

教学相长,施人不倦;为他人分享知识,给自己提升技能。

 

我从大一开始学习编程,梦想着成为一名程序员,开发出各种炫酷的产品;但是隔行如隔山,入门非常困难,国内的书籍也良莠不齐,这些阻碍不但消磨了我的时间,还打击了我的兴趣。

 

还好我喜欢折腾,经过两年的学习,大三我算是入门了,能开发出一些靠谱的产品了。这个时候我成为了小白眼中的“大神”,有很多人问我编程知识,我也举办了几场讲座,收了几个徒弟,担任了我校互联网协会(一个社团)的副主席。

 

还有什么比传播知识更让人快乐的呢,大三上学期的我乐此不疲,从来不吝啬给人讲解编程。

 

但是转念一想,这种通过“私聊”的方式传播知识太慢了,为什么不编写一些文章,发布到网站上让大家阅读呢?这样能帮助到更多的人,让每个网友都受益。我自认为有一些文学功底,对文字有感觉,所以编写文章应该不难。

我曾经的梦想是成为文学家,所以我特别喜欢写文章,并且有一些小成就:

高中时作文得过满分,在报纸上刊登过文章;

大学时参加过校内征文比赛,一首诗歌获得二等奖;

大二担任我校文学社副主席。

经过一段时间的酝酿,大三寒假我创办了C语言中文网,以此为平台来发布自己的文章。

 

慢慢地,文章多了我就将它们组织起来,分布到各个章节,这就形成了教程,《C语言入门教程》就是处女作。

【解惑】为什么叫C语言中文网

很多初学者从C语言开始入门,各个大学也是这么安排课程的,不管这种选择对不对,这都是一个不争的事实。我创办网站的初衷也是帮助初学者,所以网站起名为“C语言中文网”。

大事记/成长史

有过欢喜却不浮躁,经历风霜却不跌倒;冬雪虽寒,但有梅开。

 

2012-01-26(正月初四)提前返校,在老师的帮助下找到住处,分配了实验室,着手开发C语言中文网。

 

2012 年 3 月初,网站上线。学生时代经济拮据,借用了老师提供的服务器。

 

2013 年 6 月底,从西安电子科技大学毕业,网站流量增长到 5000IP,没有任何收入。

 

2013 年 7 月 ~2014 年 5 月,就职于去哪儿网(现已和携程合并),从事网站开发工作,期间C语言中文网基本停滞。

 

2014 年 6 月,从去哪儿网离职,开始全职运营C语言中文网,每天不停地编写教程。为了吃一口热饭,租一个住处,C语言中文网添加了联盟广告,每月收入不到 2000 RMB,在生死边缘苦苦挣扎。

 

2015 年 7 月,决定增加「VIP会员」功能,将部分高级教程和项目实践收费。

 

2016 年初,上线了辅导班,使用 QQ 一对一教学,并且是永久学习,没有时间限制。

 

2017 年 7 月,由于更换域名导致网站流量暴跌,一夜回到解放前,所有积累都化为灰烬,只能从头再来,从零开始培养流量。

 

2018 年 9 月,网站大改版,以蓝色为背景,主打简约风格,阅读教程更加顺畅。

 

2019 年 ~ 2020 年,继续战斗,期间没有太多变动。

 

运营C语言中文网的这些年,我经历了各种坎坷,有快乐也有绝望,但这些都不会阻挡我的步伐,我会将网站一直运营下去,因为它已经融入了我的青春,已经沉淀了我的创作。

 

个人站长的时代已经过去,但我不愿随波逐流,我愿做大浪淘沙过后的一粒石头,继续编写优质教程,帮助各位程序员,这颗初心十年未变。

读者评价和反馈

台上一分钟,台下十年功;一个点赞,几个日夜。

 

C语言中文网教程的累计阅读量已经突破 1000W,几乎每天都有读者添加 QQ 好友给我们好评,夸赞教程通俗易懂,一针见血,颠覆了以前的认知,是初学者的“启蒙读物”。

 

除了给教程点赞,还有读者给我们发红包,请我们吃鸡腿。

 

也有读者给我们写了长长的感谢信,我都一一回复,不敢怠慢。

 

刚刚离职的时候还有一位盲人读者,愿意赞助 3000 元支持我们更新教程,感动到扑街。

 

当然,也有个别读者不尊重知识版权,恶意损害我们,我也和他们爆发过口水战,甚至破口大骂,像一个十来岁的孩子一样幼稚。

网站未来

身未动,心已远;驰以恒,必有果。

 

编写优质教程需要投入大量时间和心智,需要找一个安静的地方苦心孤诣,需要咬文嚼字处处斟酌,长期坚持创作最终带来了一些不好的影响:

我的身体已经失去了健康,患上了神经性失眠、颈椎病、慢性胃炎;

我的心理也发生了改变,生活中变成了强迫症,变成了细节控。

 

但这些都不能击倒我,我创作的决心从未动摇,未来我会继续编写教程,把自己掌握的知识都分享给读者,希望用我十年的经验和积累,让读者少走一些弯路。

 

天下没有难学的知识,只有看不懂的教材,希望C语言中文网的教程能降低读者的学习成本。

⚡️⚡️⚡️

精美而实用的网站,分享优质编程教程,帮助有志青年。千锤百炼,只为大作;精益求精,处处斟酌;这种教程,看一眼就倾心。

 

http://c.biancheng.net/view/8066.html

Reply View the author
youyou2011
deepin
2021-01-07 23:31
#19

关于站长

 

嗨,大家好,我是C语言中文网的站长,名字叫「严长生」,毕业于西安电子科技大学,曾就职于去哪儿网,从事网站开发工作。

 

写作是我持之以恒的爱好,十年的程序员生涯,我参与编写了很多教程,包括C语言教程、C++教程、Python教程、Socket编程、Shell脚本编程等,它们都发布在C语言中文网,你可以☞猛击这里☜查看所有教程。

大学四年

吊儿郎当读书,认认真真编程。

 

就读于西安电子科技大学期间,我主修电子信息工程,细分方向是天线和微波,也就是研究通信技术。

 

 

大一加入我校文学社,获得诗歌征文比赛二等奖,后来担任文学社副主席。

 

 

大二开始逃课,潜心研究编程,所以成绩一直不好,经常挂科。

 

 

也正是大二,我创办了「陕西专升本网」,获得人生第一桶金,毕业后转让他人,现已关站。

 

 

大三担任我校网络协会副主席,并举办技术讲座,逐渐变得忙碌起来。

 

 

大三这年还创办了「C语言中文网」,致力于做精品教程,帮助对编程感兴趣的读者。

 

 

大四上半年拿到去哪儿网 Offer,算是大学期间所有努力的最好见证。

 

大四这年还获得风险投资做在线教育,但「Too young, too simple」,没折腾起来。

 

工作和离职

一个人要想有所造诣,必须得有执念。

 

毕业后加入去哪儿网,从事网站开发工作。由于工作压力较大,业余时间少,C语言中文网基本处于停滞状态。

 

最终我决定辞去工作,全职编写教程。离职后感觉整个人都变得轻松和自由了,没有了任何束缚。

 

离职后的日子也相当清苦,当时的教程都是免费的,网站只有零星的广告收入,不足我一个人的饭费,靠着积蓄苦撑了一年。

 

现在我依然坚守在第一线,除了编写教程,还对VIP会员进行一对一答疑。

⚡️⚡️⚡️

精美而实用的网站,分享优质编程教程,帮助有志青年。千锤百炼,只为大作;精益求精,处处斟酌;这种教程,看一眼就倾心。

 

http://m.biancheng.net/view/8066.html

Reply View the author