分类 观点 下的文章

 title=

实时 Linux 在过去十年中已经走了很长的路。Linutronix 的 Jan Altenberg 提供了对该主题做了概述,并在 ELC Europe 的视频中提供了新的 RTL 性能基准。

实时 Linux(RTL)是一种启用 PREEMPT\_RT 的主线 Linux,在过去十年中已经走了很长的路。大约 80% 的确定性的 PREEMPT\_RT 补丁现在可用于主线内核本身。然而,Linux 上单内核 RTL 的最强大的替代品——双内核 Xenomai——继续声称在减少延迟上有巨大的优势。在去年 10 月的 欧洲嵌入式 Linux 会议的演讲中,Jan Altenberg 反驳了这些声明,同时对实时主题做了论述。

德国嵌入式开发公司 Linutronix 的 Altenberg 并不否认 Xenomai 和 RTAI 等双核方法提供较低的延迟。然而,他揭示了新的 Linutronix 基准,旨在表明差异不如所声称的那样大,特别是在实际使用中。争议较少的是,他认为 RTL 更易于开发和维护。

在我们深入永恒的 Xenomai 与 RTL 的辩论之前,请注意,2015 年 10 月,开源自动化开发实验室(OSADL)将 RTL 项目的控制权转移给了管理 Linux.com 的 Linux 基金会。此外,Linutronix 是 RTL 项目的主要贡献者,并承担了 x86 的维护者。

RTL 的进步是过去十年中 Linux 从实时操作系统(RTOS)中获得市场占有率的几个原因之一。实时操作系统在微控制器上比应用处理器上更频繁出现,并且在缺乏高级用户级操作系统(如 Linux)的单用途设备上实现实时很简单。

Altenberg 通过清除关于实时确定性的内核方案的一些常见的误解开始他的演讲。Altenberg 告诉他的 ELCE 观众:“实时不是快速执行,这基本上是决定论和定时保证。实时为你提供保证某些内容将在给定的时间内执行。你不想要尽可能快,但是要尽快指定。”

在给定的执行时间内的迟缓的反应会导致严重后果,特别是当它可能导致人们受到伤害时,开发人员往往会使用实时的方式。这就是为什么实时性仍然在很大程度上受到工厂自动化行业的推动,并且越来越多地出现在汽车、火车和飞机上。然而,并不总是生死攸关的情况 - 金融服务公司使用 RTL 进行高频交易。

Altenberg 说:“实时需求包括确定性的定时行为、抢占、优先级继承和优先级上限。最重要的要求是高优先级任务总是需要能够抢占低优先级的任务。”

Altenberg 强烈建议不要使用术语“软实时”来描述轻量级实时解决方案。“你可以是确定性的或者不是,但两者之间什么也没有。”

双内核实时

像 Xenomai 和 RTAI 这样的双内核方案部署了一个与单独的 Linux 内核并行运行的微内核,而像 RTL 这样的单内核方案使得 Linux 本身能够实时运行。Altenberg 说:“使用双内核,当优先级实时程序不在微内核上运行时,Linux 可以获得一些运行时间。 “问题是人们需要维护微内核并在新的硬件上支持它。这需要巨大的努力,并且它的开发社区不是很大。另外,由于 Linux 不直接在硬件上运行,所以你需要一个硬件抽象层(HAL)。有两件事要维护,你通常会落后主流内核一步。”

Altenberg说:“RTL 的挑战以及花了这么久才出现的原因是,要使 Linux 实时,你基本要修改每个内核文件。” 然而,大部分工作已经完成并合并到主线,开发人员并不需要维护一个微内核或 HAL。

Altenberg 继续解释了 RTAI 和 Xenomai 之间的差异。“使用 RTAI,你将编写一个由微内核调度的内核模块。这就像内核开发 - 真的很难深入,很难调试。”

RTAI 的开发可能会更加复杂,因为工业用户通常希望包括封闭的源代码以及 GPL 内核代码。 Altenberg 说:“你必须决定哪些部分可以进入用户态,哪些部分可以通过实时的方式进入内核。”

RTAI 与 RTL 想必支持更少的硬件平台,特别是 x86 之外。双内核 Xenomai 将 RTAI 作为主要的双内核方式,比 RTAI 具有更大的操作系统支持。更重要的是,Altenberg 说:“它提供了“在用户空间中进行实时的合适解决方案。要做到这一点,他们实现了皮肤的概念 - 一个用于不同 RTOS 的 API 的仿真层,比如 POSIX。这使你可以重用一些 RTOS 中的现有代码的子集。”

然而,使用 Xenomai,你仍然需要维护一个单独的微内核和 HAL。有限的开发工具是另一个问题。Altenberg说:“与 RTAI 一样,你不能使用标准的 C 库。你需要专门的工具和库。即使对于 POSIX 来说,你也必须链接到 POSIX 层,这更复杂。” 他补充说,任何一个平台,很难将超过 8 到 16 个 CPU 的微内核扩展到金融服务中使用的大型服务器集群。

睡眠自旋锁

主要的单内核解决方案是基于 PREEMPT.RT 的 RTL,它主要由 Thomas Gleixner 和 IngoMolnár 在十多年前开发。PREEMPT.RT 重新生成内核的 “spinlock” 锁定原语,以最大化 Linux 内核中的可抢占部分。(PREEMPT.RT 最初称为睡眠自旋锁补丁)

PREEMPT.RT 不是在硬中断环境中运行中断处理程序,而是在内核线程中运行它们。Altenberg 说:“当一个中断到达时,你不会运行中断处理程序代码。你只是唤醒相应的内核线程,它运行处理程序。这有两个优点:内核线程可以中断,并且它会显示在进程列表中,有自己的 PID。所以你可以把低优先级的放在不重要的中断上,高优先级的放在重要的用户态任务上。”

由于大约 80% 的 PREEMPT.RT 已经在主线上,任何 Linux 开发人员都可以使用面向 PREEMPT.RT 的内核组件,如定时器、中断处理程序、跟踪基础架构和优先级继承。Altenberg说:“当他们制作实时 Linux 时,一切都变得可以抢占,所以我们发现了很多竞争条件和锁定问题。我们修复了这些,并把它们推送到主线,以提高 Linux 的稳定性。”

因为 RTL 主要在 Linux 主线上,Altenberg 说:“PREEMPT.RT 被广泛接受,拥有庞大的社区。如果你编写一个实时应用程序,你不需要知道很多关于 PREEMPT.RT 的知识。你不需要任何特殊的库或 API,只需要标准的 C 库、Linux 驱动程序和 POSIX 程序。”

你仍然需要运行一个补丁来使用 PREEMPT.RT,它每隔两个 Linux 版本更新一次。然而,在两年内,剩下的 20% 的 PREEMPT.RT 应该会进入 Linux,所以你就“不再需要补丁”了。

最后,Altenberg 透露了他的 Xenomai 对 RTL 延迟测试的结果。Altenberg说:“有很多论文声称 Xenomai 和 RTAI 的延迟比 PREEMPT.RT 更小。但是我认为大部分时候是 PREEMPT.RT 配置不好的问题。所以我们带来了一个 Xenomai 专家和一个 PREEMPT.RT 专家,让他们配置自己的平台。”

Altenberg 称,虽然 Xenomai 在大多数测试中表现更好,并且有更少的性能抖动,但是差异不如一些 Xenomai 拥护者声称的高达 300% 至 400% 的延迟优势。当用户空间任务执行测试时,Altenberg 说这是最现实的、最重要的是测试,最糟糕的情况下 Xenomai和 RTL/PREEMPT.RT 都是 90 到 95 微秒的反应时间。

当他们在双 Cortex-A9 系统中隔离单个 CPU 来处理中断时,Altenberg 表示这相当普遍,PREEMPT.RT 执行得更好,大约80微秒。(有关详细信息,请查看大约第 33 分钟的视频。)

Altenberg 承认与 OSADL 的两到三年测试相比,他的 12 小时测试是最低标准,而且它不是一个“数学证明”。无论如何,考虑到 RTL 更简单的开发流程,它都值得一试。他总结说:“在我看来,将完整功能的 Linux 系统与微内核进行比较是不公平的。”


via: https://www.linux.com/news/event/open-source-summit-na/2017/2/inside-real-time-linux

作者:ERIC BROWN 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Android TV

2014 年 11 月谷歌公布了安卓 TV,安卓继续进行它带着一块屏幕征服一切的征程。这家公司里的一个部门之前在蜂巢时代尝试过用谷歌 TV 掌控客厅,但这次完全是来自安卓团队的新点子。安卓 TV 使用安卓 5.0 棒棒糖,并给了它一个为室内最大屏幕设计的 Material Design 界面。首发硬件谷歌选择了华硕来代工“Nexus Player”,这是一个配置不足但够用的机顶盒。

安卓 TV 专注于三样东西:视频,音乐,以及游戏。你可以用一个小遥控器控制电视,它只有四向方向键以及四个按钮,后退、主页、麦克风以及播放/暂停。至于游戏,华硕克隆了一个 Xbox 360 手柄,给了玩家一堆按键和一对摇杆。

安卓 TV 的界面很简单。大幅的媒体略缩图占据了屏幕,可以横向滚动,这些媒体中有 Youtube、Google Play、Netflix、Hulu 以及其它来源。这些略缩图实际上是来自不同媒体源的“推荐”项目,它不是简单地将一个应用的内容填满屏幕。在那下面你可以直接访问应用和设置。

语音界面很赞。你可以告诉安卓 TV 播放任意你想要的内容,而不用通过图形界面去寻找。你还能在内容里获得更聪明的搜索结果,比如“显示和 Harrison Ford 有关的电影”。每个应用都可以给索引服务提供内容,而不是简单的应用集合。所有的这些应用都在 Play 商店有一个 TV 版本。开发者对安卓 TV 的特别支持还包括谷歌 cast 协议,允许用户从他们的手机和平板向电视投射视频和音乐。

Android 5.1 Lollipop

安卓 5.1 在 2015 年 3 月发布,这是安卓最小的更新。它的目的主要是修复 Nexus 6 上的加密性能问题,还添加了设备保护和一些小的界面调整。

设备保护是唯一的新增界面,采用的是在开机设置显示新警告的形式。这个特性在设备被偷了之后“保护你的设备不被再次利用”。一旦设置了锁屏,设备保护就开始介入,并且会在擦除设备的时候被触发。如果你以机主正常的方式擦除设备——解锁手机并从设置选择“重置”——什么都不会发生。但如果你通过开发者工具擦除,设备会在下次开机设置的时候要求你“验证之前同步的谷歌账户”。

这个想法是基于开发者是会知道之前登录的谷歌帐号凭证的,但小偷就不知道了,他们会卡在设置这一步。在现实中这引发了一个猫鼠游戏,人们寻找漏洞来绕过设备保护,而谷歌知道了这个 bug 并修补它。OEM 定制也引入了一些有趣的 bug 来绕过设备保护。

还有很多特别微小的界面改动,我们没法一一列在上面的图中。除了上面的图片描述之外没什么可说的了。

Android Auto

同样是在 2015 年 3 月,谷歌发布了“安卓 Auto”,一个基于安卓界面的全新车载娱乐信息系统。安卓 Auto 是谷歌面对苹果的 CarPlay 交出的答卷,它们很多地方都很相似。安卓 Auto 不完全是个操作系统——它是一个运行在你手机上的“投射”界面,使用车载显示屏作为一块外置显示器。运行安卓 Auto 意味着拥有一款兼容的汽车,在手机上(安卓 5.0 及以上版本)安装了安卓 Auto 应用,并用 USB 线将手机连接到汽车。

安卓 Auto 给你已有的车载系统带来了谷歌的 Material Design 界面,给这个[通常挣扎于]设计好软件的平台带来了顶级的软件设计。安卓 Auto 是个对安卓界面的完全重新设计,以遵循世界各地对车载系统无数的规定。它没有通常充满应用图标的“主屏”,安卓的导航栏也变为了一个常驻的应用启动器(几乎像是个标签页式的界面)。

算下来特性实际上只有四部分,导航栏从左到右是:谷歌地图,一个拨号/联系人界面,“主屏”部分混合了 Google Now 和一个通知面板,还有一个音乐页面。最后一个按钮是一个“OEM”页面,让你可以退出安卓 Auto,返回到自带的车载系统(这也是为了放置汽车制造商的定制特性)。安卓 Auto 还带有谷歌的语音命令系统,以一个麦克风按钮的形式显示在屏幕右上角。

安卓 Auto 的应用没有多少。它只允许两个类别的应用:音乐和信息应用。车载信息娱乐系统的规定意味着自定义界面不是个好选择。信息应用没有界面,并且可以接入语音系统,音乐应用也不会太多地改变界面,仅仅只是调整一下谷歌默认的“音乐应用”模板的颜色和图标。但实际上重要的是音乐和消息的送达,在不让驾驶员太多分心的情况下,一般的应用就没法使用了。

安卓 Auto 在它的最初发布之后就没看到多少更新了,但已经逐渐有很多汽车制造商支持了。到了 2017 年,将会有超过 100 款支持的汽车型号。


Ron Amadeo / Ron 是 Ars Technica 的评论编缉,专注于安卓系统和谷歌产品。他总是在追寻新鲜事物,还喜欢拆解事物看看它们到底是怎么运作的。@RonAmadeo


via: http://arstechnica.com/gadgets/2016/10/building-android-a-40000-word-history-of-googles-mobile-os/30/

作者:RON AMADEO 译者:alim0x 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

毫不夸张地说,谷歌搜索在棒棒糖中无处不在。“持续开启语音识别”这项特性让用户可以在任何界面随时说出“OK Google”,即时是在息屏状态也没有问题。谷歌应用依然是谷歌的首要主屏,这项特性是自奇巧时引入的。现在搜索栏也会显示在新的最近应用界面。

Google Now 依然是最左侧的主屏,但现在 Material Design 对它进行了大翻新,给了它一个色彩大胆的头部以及重新设计的排版。

Play 商店遵从了和其它棒棒糖应用相似的轨迹。它在视觉上焕然疑一新,大胆的色彩,新排版,还有一个全新的布局。通常这里不会有什么新增功能,就只是给一切换件新马甲。

Play 商店的导航面板现在真的可以用于导航了,每个分类有各自的入口。棒棒糖也不再在操作栏放“更多”按钮了,取而代之的是一个独立的操作按钮(通常是搜索),并且去掉了导航栏中多余的选项。这给了用户一个单独的地方来查找项目,而不用在两个菜单中寻找搜索的地方。

棒棒糖还给了应用让状态栏透明的能力。这让操作栏的颜色可以渗透到状态栏,让它只比周围的界面暗一点点。一些界面甚至在顶部使用了全幅英雄图片,同时显示到了状态栏上。

谷歌日历完全重写了,获得了很多新设计,也失去了很多特性。你不再能够双指缩放来调整时间视图,月份视图也从手机上消失了,周视图从七天退化成了五天的视图。在用户抱怨之后,谷歌将会花费接下来几个版本的时间来重新添加回这里面的一些特性。“谷歌日历”还加强了“谷歌”部分,去除了直接在应用内添加第三方账户的能力。非谷歌账户现在需要从 Gamil 来添加。

尽管如此,它看起来还是很棒。在一些视图上,月份开头带有头图,就像是真实的纸质日历。带有地点的事件会附带显示来自那个地点的照片。举个例子,我的“去往旧金山”会显示金门大桥。谷歌日历还会从 Gamil 获取事件并在你的日历中显示。

其它应用都可以套用基本相同的描述:功能上没有太多新鲜的,但新设计换掉了奇巧中的灰色以大胆,明亮的色彩。环聊获得了收取 Google Voice 信息的能力,时钟应用的背景颜色会随着每天时间的变化而改变。

任务调度器鞭策应用生态成型

谷歌决定在棒棒糖中实施“伏特计划(Project Volta)”,关注电量使用问题。谷歌从“电池史学家(Battery Historian)”开始,为自己和开发者创建了更多的电池追踪工具。这个 python 脚本获取所有的安卓电量日志数据,并转换成可读,交互式的图表。在这个新诊断工具的帮助下,谷歌将后台任务标记为主要的耗电大户。

在 2014 年的 I/O 大会上,这家公司注意到启用飞行模式并关闭屏幕可以让安卓手机待机将近一个月。但是,如果用户全部启用并使用设备,它们没法坚持一整天。结论就是如果你能让一切都停止活动,你的电池表现就能好得多。

因此,谷歌创建了一个新 API,称作“JobScheduler(任务调度器)”,这是个新的针对安卓后台任务的警察。在任务调度器出现之前,每个单独的应用为它自己的后台进程负责,这意味着每个应用会独立唤醒处理器和调制解调器,检查连通性、组织数据库、下载更新以及上传日志。所有东西都有它自己独立的定时器,所以你的手机会一直被唤醒。有了任务调度器,后台任务从无组织的混乱,转变为统一的批处理,有有序的后台进程处理窗口。

任务调度器可以让应用指定它们的任务所需的条件(连通性、Wi-Fi、接入电源等等),它会在那些条件满足的时候发送一条通知。这就像是推送邮件和每五分钟检查一次邮件的区别……但是带上任务需求的。谷歌还开始给后台任务推进一个“懒”实现。如果一些事情可以推迟到设备处于 Wi-Fi,接入电源以及待机状态,那它就应该等到那时候执行。你现在可以看到这一策略的成果,在 Wi-Fi 下,你可以将安卓手机接入电源,并且只有在这种条件下它才会开始下载应用更新。你通常不需要立即下载应用更新,最好的时候是等到用户有无限的电源和网络的时候进行。

开机设置获得面向未来的新设计

开机设置经过了大翻新,它不止是为了跟上 Material Design 指南,还是“面向未来”的,这样不管未来谷歌采用什么新的登录和验证方案,它都能够适应。记住,写“安卓编年史”的部分原因就是一些旧版安卓已经不再能工作了。这些年来,谷歌已经为用户升级了更佳加密的验证方案以及二次验证,但添加这些新的登录要求破坏了旧客户端的兼容性。很多安卓特性要求访问谷歌云设施,所以你没法登录的话,像安卓 1.0 的 Gmail 这样的就没法工作了。

在棒棒糖中,开机设置工作的前几个界面和之前的很像。你可以看到“欢迎使用安卓界面”以及一些设置数据和 Wi-Fi 连接的选项。但在这个界面之后就有了变化。一旦棒棒糖连接到了互联网,它会连接到谷歌的服务器来“检查更新”。这并不是检查系统或应用的更新,是在检查即将执行的设置工作的更新。安卓下载了最新版本的设置,然后它会要求你登录你的谷歌账户。

在今天登录进棒棒糖和奇巧的时候这个好处很明显。有可以可升级的设置流程,“2014”的棒棒糖系统可以适应 2016 的改进,像是谷歌新的“触碰登录”双重认证。奇巧在这就卡住了,但幸运的是它有个“浏览器登录”可以解决双重认证的问题。

棒棒糖的开机设置对将你的谷歌账户和密码放在单独的页面持极端立场。谷歌讨厌密码并提供了一些实验性的方式来不用单独页面登录到谷歌。如果你的账户设置为不使用密码,棒棒糖可以跳过密码页面。如果你设置了双重认证,设置页面就会进入到“输入双因素码”的设置流程。每个登录部分都是在单独的一个页面,所以设置流程是模块化的。页面可以随要求添加或移除。

开机设置还给了用户对应用还原的控制。安卓在这之前也提供了一些数据还原,但那是无法理解的,因为它仅仅只是在没有任何用户输入的情况下选择你的一台设备并开始恢复。开机设置流程中的一个新界面让用户可以看到在云端的设备配置集合,并选择合适的那个。你还可以选择要从那个备份还原的应用。备份有应用,你的主屏布局,以及一些小设置如 Wi-Fi 热点。它不是完全的应用数据备份。

设置

设置从暗色主题切换到了亮色。除了新外观,它还有方便的搜索功能。每个界面用户都能访问放大镜,让他们可以更容易地找到难找的选项。

这里有一些和伏特计划有关的额设置。“网络限制”允许用户将一个 Wi-Fi 连接标记为计费的,让任务调度器处理后台处理时避免使用它。同时作为伏特计划的一部分,添加了一个“节电模式”。它会限制后台任务并限制 CPU 性能,给你更长的续航但更慢的设备。

多用户支持已经出现在安卓平板中有一段时间了,但棒棒糖终于将它带到了安卓手机上。设置界面添加了一个新的“用户”页面,让你添加额外的账户或设置一个“访客”账户。访客账户是临时的——它们可以一次点击轻松删除。它不会像正常账户那样尝试下载关联到你账户的每个应用,因为它注定要在不久后被删除。


Ron Amadeo / Ron 是 Ars Technica 的评论编缉,专注于安卓系统和谷歌产品。他总是在追寻新鲜事物,还喜欢拆解事物看看它们到底是怎么运作的。@RonAmadeo


via: http://arstechnica.com/gadgets/2016/10/building-android-a-40000-word-history-of-googles-mobile-os/29/

作者:RON AMADEO 译者:alim0x 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

编程初学者可能都思考过这个问题,“我该怎么学编程?”这里我们提供些相关的参考指导来帮助你找到最适合自己学习情况和学习需要的方法。

最近有很多关于学习编程的争论。不仅仅是因为与软件开发公司公开的待应聘的职位数量相比较符合招聘要求的人远远无法满足缺口,编程也是工资最高工作满足感最强的众多职业之一。也难怪越来越多的人都想进入这个行业。

但是你要怎么做才能正确地入行呢?“我应该怎么学习编程?”是初学者常见的一个问题。尽管我没有这些问题的全部答案,但是我希望这篇文章能够给你提供相关指导来帮助你找到最适合你的需求和自身情况发展的解决办法。

你的学习方式是什么?

在你开始学习编程之前,你需要考虑的不仅仅是你的方向选择,还要更多的考虑下你自己。古罗马人有句谚语, γνῶθι σεαυτόν gnothi seauton ,意思是“认识你自己”。投入到一个大型的编程学习过程中难度不小。足够的自我认识是非常有必要的,这能够确保你做出的选择通向成功的机会非常大。你需要思考并诚实地回答接下来的这些问题:

  • 你最喜欢什么样的学习方式?怎么做你才能学到最好?是通过阅读的方式吗?还是听讲座?还是主要通过动手实践?你需要选择对你最有效的方法。不要仅仅因为这种学习方法流行或者有其他人说过这种方法对他们很有用就选择了这种方法。
  • 你的需要和要求是什么?你为什么想学习如何编程?是因为你只是想换一份工作吗?如果是这样的话,你需要多次时间才能完成呢?你要牢记,这些是需要的 ,不是想要的 。你可能想要下周就换份新工作,但是需要在接下来的一年里供养你正在成长的家庭。当你在人生的道路上面临方向的抉择时,时间的安排特别重要。
  • 你能获取的参考资料有哪些?当然,重返大学并获得一份计算机科学专业的学位证书可能也不错,但是你必须对你自己实事求是面对现实。你的生活必须和你学习相适应。你能承受花费几个月的时间和不菲的费用去参加集训吗?你是否生活在一个可以提供学习机会的地方,比如提供技术性的聚会或者大学课程?你能获取到的参考资料会对你的学习过程产生巨大的影响。在打算学编程换工作前先调查好这些。

选择一门编程语言

当你打算开始你的编程学习之路和考虑你的选择的时候,请记住不管其他人说什么,选择哪门编程语言来开始你的编程学习关系不大。是的,是有些编程语言比其他的更流行。比如,根据一份调查研究,目前 JavaScript,Java,PHP, 和 Python 处于 最受欢迎最流行的编程 中的前排。但是现在正流行的编程语言有可能过几年就过时了,所以不用太纠结编程语言的选择。像那些方法,类,函数,条件,控制流程和其他的编程的概念思想等等,不管你选的哪门编程语言,它们的底层原理基本是一致的。只有语法和社区的最佳实践会变。因此你能够用 Perl 学习编程,也可以用 Swift 或者 Rust。作为一个程序员,你会在你的职业生涯里用很多不同的编程语言来工作。不要认为你被困在了编程语言的选择上。

试水

除非你已经涉足过这个行业或者确信你愿意花费你生命的剩余时光来编程,我建议你最好还是下水之前先用脚趾头来试试水温之类的来判断这水适不适合。这种工作不是每个人都能做的。在把全部希望都压在学习编程之前,你可以先尝试花费少量时间金钱来学习一小部分知识点来了解自己是否会享受这种每周起码花费 40 个小时来编码工作的生活。如果你不喜欢这种工作,你不太可能完成编程项目的学习。即便你完成结束了编程的学习阶段,你也会在你以后的编程工作中感到无比痛苦。人生苦短就不要花费你人生三分之一的时间来做你不喜欢的事了。 

谢天谢地,软件开发不仅仅需要编程。熟悉编程概念和理解软件是怎么和他们结合在一起的是非常有用的,但是你不需要成为一个程序员也能在软件开发行业中找到一份报酬不菲的工作。在软件开发过程中,另外的重要角色有技术文档撰写人、项目经理、产品经理、测试人员、设计人员、用户体验设计者、运维/系统管理员和数据科学家等。软件成功的启动需要很多角色之间相互配合。不要觉得学习了编程就要求你成为一个程序员。你需要探索你的选择并确定哪个选择才是最适合你的。

参考的学习资料

你对学习参考资料的选择是什么?可能正如你已经发现的那样,可供选择的参考资料非常多,尽管在你的那片区域不是所有的资料都能够获得。

  • 训练营:最近这几年像 App AcademyBloc 这样的训练营越来越流行。训练营通常收费 $10K 或者更多,他们宣称在几周内就能够把一个学生培训成一个称职的程序员。在参加编程集训营前,你需要研究下你将要学习的项目能确保正如它所承诺的那样,在学生学完毕业后能够找到一个高薪的长期供职的职位。一方面花费了数目不小的钱财,而且时间也花费了不少——通常这些都是典型的全日制课程并且要求学生在接下来的连续几周里把其它的事先放在一边专心课程学习。然而时间金钱这两项不菲的消耗通常会使很多未来的程序员无法参加训练营。
  • 社区学院/职业培训中心:社区学院常常被那些调研自己学习编程的方式的人所忽视,不得不说这些人该为自己对社区学院的忽视感到羞愧。你在社区学院或者职业培训中心能够接受到的教育是和你选择其他方式学习编程的学习效果一样有效,而且费用也不高。
  • 国家/地方的培训项目:许多地区都认识到在他们的地区增加技术投资的经济效益,并且已经制定了培训计划来培养受过良好教育和准备好的劳动力。培训项目的案例包括了 Code OregonMinneapolis TechHire。检查下你的州、省或自治区是否提供这样的项目。
  • 在线训练:许多公司和组织都提供在线技术培训项目。比如,Linux 基金会致力于通过开源技术使人们获得成功。其他的像 O'Reilly MediaLynda.comCoursera 在软件开发涉及的许多方面提供培训。Codecademy 提供对编程概念的在线介绍。每个项目的成本会有所不同,但大多数项目会允许你在你的日程安排中学习。
  • MOOC:在过去的几年里,大规模开放在线课程的发展势头已经很好了。像 哈佛斯坦福MIT 和其他的一些世界一流大学他们一直在记录他们的课程,并免费提供在线课程。课程的自我指导性质可能并不适合所有人,但可利用的材料使这成为一个有价值的学习选择。
  • 专业书籍:许多人喜欢用书自学。这是相当经济的,在初步学习阶段后提供了现成的参考资料。尽管你可以通过像 SafariAmazon 这样的在线服务订购和访问图书,但是也不要忘了检查你本地的公共图书馆。

网络支持

无论你选择哪一种学习资源,有网络支持都将获得更大的成功。与他人分享你的经历和挑战可以帮助你保持动力,同时为你提供一个放心的地方去问那些你可能还没有足够自信到其他地方去问的问题。许多城镇都有当地的用户群聚在一起讨论和学习软件技术。通常你可以在 Meetup.com 这里找到。专门的兴趣小组,比如 Women Who CodeCode2040,在大多数城市地区经常举行会议和黑客马拉松活动,这是在你学习的时候结识并建立一个支持网络的很好的方式。一些软件会议举办“黑客日”,在那里你可以遇到有经验的软件开发人员,他们能够帮助你解决你所困扰的一些问题。例如,每年的 PyCon 会议都会提供几天的时间来让人们聚集在一起工作、研讨。一些项目,比如 BeeWare,使用这些短暂的时间来帮助新程序员学习和对这些项目做贡献。

你的网络支持不需要来自正式的聚会。一个小的学习小组可以有效地保持你的学习积极性,并且可以像在你最喜欢的社交网络上发布邀请一样容易形成。如果你生活在一个没有大量软件开发人员社区所支持的聚会和用户组的地区,那么这一点特别有用。

开始学习编程的几个步骤

简单的来说,既然你决定学习编程,可以参考这几个方法给自己一个尽可能成功的机会:

  1. 将你的需要/需求和参考学习资料列出清单并进行收集
  2. 搜寻在你的当地那里能够可用的选择
  3. 放弃不能符合你的需求和参考学习资料的选择
  4. 选择最符合你需求的和最适合你的学习参考资源
  5. 找到一个能够得到支持的网络

务必牢记:你的学习过程永远不会结束。高速发展的软件产业,会导致新技术和新进展几乎每天都会出现。一旦你学会了编程,你就必须花时间去学习适应这些新的进步。你不能依靠你的工作来为你提供这种培训。只有你自己负责自己的职业发展,所以如果你想保持最新的技术和工作能力,你必须紧跟行业最新的技术。

祝你好运!


作者简介:

VM (Vicky) Brasseur - VM (aka Vicky) 是一个技术人员,也是项目、工作进程、产品和企业的经理。在她的长达 18 年的科技行业里,她曾是一名分析师、程序员、产品经理、软件工程经理和软件工程总监。目前,她是惠普企业上游开源开发团队的高级工程经理。她的博客是 anonymoushash.vmbrasseur.com,推特是 @vmbrasseur。 


via: https://opensource.com/article/17/4/how-get-started-learning-program

作者:VM (Vicky) Brasseur 译者:WangYueScream 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在忙碌的生活中抽出时间回馈给你关心的项目。

 title=

人们不给开源做贡献(或不能做更多贡献)的最常见的原因之一是缺乏时间。人艰不拆,有这么多的优先的事情争夺你有限的注意力。那么,如何才能在忙碌的生活中为你关心的开源项目抽出时间呢?

为了充分披露,我需要提醒你,我延误了把这篇文章给编辑的时间,因为我抽不出时间写它,所以是否接受我的建议,请自行承担风险。

找出你所关心的

贡献的第一步是弄清楚你正在做些什么。你有一个你自己的为之努力的项目吗?有没有一个你想要帮助的具体项目?或者你只是想做某个事情?弄清楚你正在做的事情将帮助你决定你的生活中的优先事项。

找出其他的方法贡献

编写新功能可能需要数小时的设计、编码和测试。这对于那种只有几分钟时间就得离开,然后再从原来的地方重新开始的情况下并不容易。如果你没有办法进行长于 30 分钟的无中断工作,当你试着完成一个大的任务时,你或许会感到沮丧。

但还有或许可以满足你的需求的其它贡献方式,可以让你利用起来空闲的时间。其中一些可以通过智能手机快速完成,这意味着人们可以避免在通勤上浪费时间,并将其用于开源贡献。以下是可以在小块时间中完成的一些事情列表:

  • Bug 分类: 所有的 bug 报告都有必要的信息来诊断和解决它们么?它们是否妥善提交(给出正确的范围,正确的严重程度等)了么?
  • 邮件列表支持: 用户或其他贡献者在邮件列表中提出了问题?也许你可以帮忙。
  • 文档修补: 文档经常(但不总是)可以比代码用更小块的时间来处理。也许有几个地方你可以补充一下,或者也许是时候浏览一下文档并确保它们仍然准确了。
  • 营销: 在社交媒体上谈论你的项目或者社区。写一篇快速入门博文。在新闻聚合里投票和评论。

与你的老板交谈

你可能会认为在上班时间里你不能在开源项目上工作,但是你有问过么? 特别是如果这个项目以某种方式与你的日常工作相关,那你或许可以和你的老板谈谈,让你可在工作时做出贡献。请注意,这可能存在一些知识产权问题(例如,谁拥有你在工作时间内提供的代码的权利),因此首先做一下研究并以书面形式获得授权。

设置最后期限

我所学到的最佳时间管理建议可以归纳为两个规则:

  1. 如果要完成,它必须有一个截止日期
  2. 可以更改最后期限

这篇文章有一个最后期限。它没有特别的时间敏感性,但最后期限意味着我定义了什么时候想完成它,并给编辑一个什么时候可以提交的感觉。是的,如上所述,我错过了最后期限。但你知道发生了什么事么?我设定了一个新的期限(二手才最棒!)。

如果有些事时间敏感的,在你需要返工一两次时,设置最后期限也可以给你一些空间。

将它放到你的日程上

如果你使用日历安排你的生活,那用它安排一些时间来开展你的开源项目,可能是完成此项工作的唯一方法。你计划多少时间取决于你自己,但即使你每周只用一小时作为开源时间,这仍会给你每周一小时的开源时间。

这有一个秘密:有时候,如果你需要时间去做别的事情,或者什么都不想做,那么可以自己取消它。

开拓未使用的时间

你在通勤中感到无聊吗?你晚上睡觉困难么?也许你可以利用这个时间来贡献。现在我认为“每周完全投入工作 169 个小时”的生活方式是一件非常可怕的事情。也就是说,有些夜晚你不能入睡。也许你已经意识到了可以做贡献,而不是躺在床上看看你的 Twitter 上的朋友在世界的另一边做了什么(如我做的)。但是不要养成放弃睡眠的习惯。

停止

有时,贡献最好的方式是一点不贡献。你是一个忙碌的人,不管你是多么的棒,你不能避开你的生理和心理的需要,它们会找上你。花点时间来休息,这也许可以提高你的生产力,使你的工作更快,突然间你就有时间去做那些你一直想做的开源贡献了。

说“不”

我不擅长这个,所以我做的并不好。但是没有人能做到任何想做的事情。有时候,你可以做的最好的事情是停止贡献,就像以前一样,或者没有贡献(参见上文)。

几年前,我领导了 Fedora 文档团队。团队的传统是,在每次发布结束时, 领导会主动提出下台。我已经做了一两次,没有人想要替代我,所以我继续保持着这个角色。但是在我的第二或第三次发布之后,我明确表示,我不会继续担任团队领导了。我还是很喜欢这份工作,但我有一份全职的工作,而且在研究生读到一半时,我的妻子怀了我们的第一个孩子。我没有办法做到始终如一的努力,所以我退出领导了。我继续做出贡献,但是在要求较低的能力的位置中。

如果你正在努力抽出时间来满足你的义务(自我强加的或者不是),那么也许现在是重新考虑你的角色了。这对于你自己创建的或者已经大量投资的项目来说很困难,但有时你不得不这么做——为了你自己好以及项目本身。

其他还有什么?

你如何找到时间作出贡献? 让我们在评论中知道。

(题图: opensource.com)


作者简介:

Ben Cotton - Ben Cotton 是一个培训过的气象学家和一个职业的高效计算机工程师。 Ben 在 Cycle Computing 做技术传教士。他是 Fedora 用户和贡献者,合作创办当地的一个开源集会,是一名开源倡议者和软件自由机构的支持者。他的推特 (@FunnelFiasco)


via: https://opensource.com/article/17/6/find-time-contribute

作者:Ben Cotton 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

在即将到来的嵌入式 Linux 会议 + OpenIoT 峰会中,Paul Sokolovsky 将会讨论在嵌入式开发中使用脚本语言的一些挑战。

脚本语言(又称作 超高级语言 Very High-Level Languages 或 VHLLs ),例如 Python、 PHP 以及 JavaScript 常用在桌面、服务器和网页开发中。它们强大的内置功能能够让你花费少量的时间和精力来开发小型却有用的应用,Paul Sokolovsky,Linaro 公司物联网工程师如是说。然而,目前在物联网中使用超高级语言深度开发嵌入式应用相对来说有些别扭。

在即将到来的嵌入式 Linux 会议 + OpenIoT 峰会中,Sokolovsky 会讨论在嵌入式开发中使用 VHLLs 的挑战并且基于 MicroPython 的例子与 JerryScript + Zephyr.js 项目比较不同的对策。 我们与Sokolovsky 进行了一番交谈来获得更多信息。

Linux.com:您可以给我们的读者一些 VHLLs 的背景知识吗?

Paul Sokolovsky: 超高级语言成为计算机科学和信息技术风景中的一部分已经几十年了。也许第一个流行的脚本语言是 Unix shell(sh),尽管由于较小的特征集,它很少被认为是一种超高级语言,而是一种特定领域语言。所以第一个真正破纪录的 VHLLs 是 Perl(1987)和 Tcl(1988),很快紧跟着出现了 Python(1991),Ruby(1995),PHP(1995),JavaScript(1995)以及许多其它语言。

不同 VHLLs 之间的区别特性包括:它们的解析本能(从使用者的角度来看,也许是因为其中复杂的编译器作祟),内置可用的强大的数据类型如任意大小的列表和映射,可观的标准库,以及允许用户访问甚至更大的第三方库的外部模块系统。所有的这些特性都与相对容易使用的感觉(更少的输入,不需要构建等)和简单的学习曲线相耦合。

Linux.com: 使用这些语言做开发有哪些优势?

Sokolovsky: 优势的根源来自于以上描述的这些特性。一个新手可以非常轻松的开始使用脚本语言并且快速的学习它。很多 VHLLs 提供了一个强大的交互模式,所以你不需要去读那些厚厚的使用手册来开始使用脚本语言,而是直接去探索和体验它们。强大的内置功能允许你去开发小而有用的应用(脚本),而仅仅使用很少的时间和精力(这就是“脚本语言”名字的来源)。如果要转向开发大型应用,广泛的第三方库和可以轻而易举使用的模块系统使得开发变得流畅和高产。

Linux.com: 在嵌入式平台上使用脚本开发和在其他平台开发有什么区别?

Sokolovsky: 鉴于之前我们讨论过的 VHLLs 振奋人心的能力,有一个创意——为什么我们不能享受使用 VHLLs 为嵌入式设备做开发而具有所有(或者至少一部分)优势呢?这里我提到的“嵌入式设备”不仅仅是拥有 8-32 MB RAM 的小型 Linux 系统,还有运行在微控制器(MCU)上有几千字节内存的深度嵌入式系统。少量(有些时候几乎没有)的相关资源肯定使这个创意的实现变得更加复杂。 另一个问题是设备访问和交互。嵌入式设备通常没有显示屏和键盘,但是幸运的是解决这个问题的答案已经存在几十年了,这里要感谢 Unix,它提供了使用串口(UART)来搭建一个终端连接的方法。当然,在主机端,有些用户喜欢使用图形集成开发环境(IDE)来隐藏串口通信细节。

所以,由于嵌入式设备所有的这些不同特性,这个创意就是提供一个尽可能熟悉的工作环境。但熟悉只是其中一方面,另一方面,为了适应甚至最小的设备,工作环境需要尽可能的缩小。要想解决这些矛盾需要嵌入式 VHLLs 的操作可以高度配置,来适应不同的项目和硬件的需求。

Linux.com:只有在物联网中使用这些语言才会遇到的挑战有哪些?比如说你如何处理内存限制?

Sokolovsky: 当然,解释程序本身几乎不怎么消耗硬件资源。但是在当今世界,最珍贵的资源是人类的时间。不管你是一个研发工程师、一个仅仅有几个小时的周末创客、一个被 bug 和安全问题淹没的支持工程师,或者一个计划开发新产品的产品经理——你手头上大概都没有什么多余时间。因此需要将 VHLLs 的生产力提供到嵌入式工程师手上。

当前的工艺水平使得这些需求变得可行。公正的来讲,甚至于微处理器单元(MCU)平均 都有 16-32 KB RAM , 128-256 KB ROM。这仅仅足够搭载一个核心解释程序,一个标准库类型的规范子集,一些硬件驱动,以及一个很小但是依旧有用的应用程序。假如你的硬件配置稍微越过了中间线,其能力得到了快速的增长——这实际上是由于一个从 1970 年代就闻名的技巧:使用自定义的字节码和精码(pcode)相比原始机器代码能够让你获得更大的代码/特性密度。

在这条道路上有很多挑战,RAM 不够用是主要的一个。我是在一个 16 GB RAM 的笔记本上写下的这些话(但不断切换的话依然会很卡),而刚才提到的 16KB 比它小一百万倍!不过,通过小心的选择算法和编程技巧,在这样小的 RAM 下仍有可能通过脚本语言来执行简单程序,而相当复杂的程序可能需要 128-256K。

有很多的技术挑战需要解决(它们已经被成功的解决了),这里没有足够的篇幅来涵盖它们。不过,我在 OpenIoT 峰会上的演讲会涵盖使用两种嵌入式脚本语言的经验和成就:MicroPython(Python3 的子集)和 Zephyr.js(JavaScript/Node.js 的子集),都运行在 Linux 基金会的 Zephyr 实时操作系统上,它被寄希望于在 IoT 工业界取得和 Linux 在移动互联网和服务器方面一样的成就。(相关 PPT 会为无法参加 OpenIoT 会议的朋友在会议后放出。)

Linux.com: 你能给我们一些 VHLLs 最适用的应用的例子吗?以及一些它们不适用的例子?

Sokolovsky:以上是很多关于 VHLLs 的光明前景,公正的来说:在嵌入式开发中,这里有很多一厢情愿的幻想(或者说希望其是能够自我实现的预言)。在嵌入式开发中 VHLLs 现在可以提供的是:快速成型,以及教育/创客市场上所必须的易学性和易用性。有一些先行者在其它领域使用 VHLLs,但是就目前来看,它需要在基础构造和工具开发上投入更多。重要的是,这样的投入应遵循开源原则并分享,否则会逐渐损害到 VHLLs 能够节省使用者时间和精力的优势。

谨记这些,嵌入式 VHLLs 是发育完全(“逐渐变的完整”)的语言,能够适应各种类型的应用,但是要受制于硬件。例如,假如一个微处理器的规格低于之前提到的阈值,如一个老旧的 8-bit 微处理器,那么只有同样古老而优秀的 C 语言能够为你所用。另外一个限制是当你真的想要充分利用硬件时—— C 语言或者汇编程序才是正确的选择。但是,这里有一个惊喜——嵌入式 VHLLs 的开发者也想到了这一点,例如 MicroPython 允许你将 Python 和汇编程序在同一个应用中结合起来。

嵌入式 VHLLs 的优势是其可配置性和可(重复)编程性,外加灵活的连接性支持。这恰恰是 IoT 和智能设备最需要的,很多 IoT 应用使用起来也不需要太复杂。考虑一下,例如,一个可以贴在任何地方用来完成各种任务的智能按钮。但是,如果你需要调整双击的时间时怎么办?使用脚本语言,你可以做到。也许你完全不会考虑三连击,但是现在在某些情况下四连击都可能是有用的。使用脚本语言,你可以轻易修改它。

(题图:来自 Pixabay,基于 CC0 协议)


via: https://www.linux.com/news/event/elcna/2017/2/using-scripting-languages-iot-challenges-and-approaches

作者:AMBER ANKERHOLZ 译者:xiaow6 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出