2017年2月

在新闻组和邮件列表里、在计算机科学实验室里、在各大陆之间,流传着一个神秘的故事,那是关于 Perl 与动态网站之间的不得不说的往事。

早期互联网历史中,有一些脍炙人口的开创性事件:如 蒂姆·伯纳斯·李 Tim Berners-Lee 在邮件组上宣布 WWW-project 的那天,该文档随同 CERN 发布的项目代码进入到了公共域,以及 1993 年 1 月的第一版 NCSA Mosaic 浏览器。虽然这些独立的事件是相当重要的,但是当时的技术的开发已经更为丰富,不再是由一组的孤立事件组成,而更像是一系列有内在联系的故事。

这其中的一个故事描述的是网站是如何变成动态的,通俗说来就是我们如何使服务器除了提供静态 HTML 文档之外做更多的事。这是个流传在新闻组和邮件列表间、计算机科学实验室里、各个大陆之间的故事,重点不是一个人,而是一种编程语言:Perl。

CGI 脚本和信息软件

在上世纪 90 年代中后期,Perl 几乎和动态网站是同义词。Perl 是一种相对来说容易学习的解释型语言,并且有强大的文本处理特性,使得它能够很容易的编写脚本来把一个网站关联到数据库、处理由用户发送的表单数据,当然,还要创造那些上世纪 90 年代的网站的经典形象——计数器和留言簿。

类似的网站特性渐渐的变成了 CGI 脚本的形式,其全称为 通用网关接口 Common Gateway Interface 首个实现由 Rob McCool 于 1993 年 11 月在 NCSA HTTPD 上完成。CGI 是目的是直面功能,并且在短短几年间,任何人都可以很容易的找到一些由 Perl 写的预制的脚本存档。有一个声名狼籍的案例就是 Matt's Scripts Archive,这是一种流行却包含各种安全缺陷的源代码库,它甚至使得 Perl 社区成员创建了一种被称为 Not Matt‘s Scripts 的更为专业的替换选择。

在当时,无论是业余爱好者,还是职业程序员都采用 Perl 来制作动态网站和应用,Tim O’Reilly 创造了词汇 “信息软件” infoware 来描述网站和 Perl 怎样成为变化中的计算机工业的一部分。考虑到 Yahoo!和 Amazon 带来的创新,O‘Reilly 写道:“传统软件在大量的软件中仅仅包含了少量的信息;而信息软件则在少量的软件中包含了大量的信息。” Perl 是一种像瑞士军刀一样的完美的小而强大的工具,它支撑了信息媒体从巨大的网站目录向早期的用户生成内容(UGC)平台的转变。

题外话

尽管使用 Perl 来制作 CGI 简直是上佳之选,但是编程语言和不断提升中的动态网站之间的关系变得更加的密切与深入。从第一个网站(在 1990 年的圣诞节前)出现到 1993 年 McCool 实现 CGI 的短暂时期内,Web 上的各种东西,比如表单、图片以及表格,就这么逐渐出现在上世纪 90 年代乃至后来。尽管伯纳斯·李也对这些早期的岁月产生了影响,但是不同的人看到的是 Web 不同的潜在作用,并将它推向各自不同的方向。一方面,这样的结果来自一些著名的辩论,例如 HTML 应该和 SGML 保持多近的关系是否应该实现一个图像标签等等。在另一方面,在没有直接因素影响的情况下改变是极其缓慢的。后者已经很好的描述了动态网站是如何发展的。

从某种意义上说,第一个“网关”的诞生可以追溯到 1991 至 1992 年之间(LCTT 译注:此处所谓“网关”的意义请参照 CGI 的定义),当时伯纳斯·李和一些计算机科学家与超文本爱好者编写服务程序使得一些特定的资源能够连接到一起,例如 CERN 的内部应用程序、通用的应用程序如 Oracle 数据库、广域信息查询系统(WAIS) 等等。(WAIS 是 Web 的前身,上世纪 80 年代后期开发,其中,开发者之一 Brewster Kahle,是一个数字化图书管理员和 Internet Archive 的创始人。)可以这样理解,“网关”就是一个被设计用来连接其它 Web、数据库或者应用程序的定制的 Web 服务器。任何的动态功能就意味着在不同的端口上运行另外一个守护进程(参考阅读,例如伯纳斯·李对于在网站上如何添加一个搜索功能 的描述)。伯纳斯·李期望 Web 可以成为不同信息系统之间的通用接口,并且鼓励建立单一用途服务。他也提到 Perl 是一种强大的(甚至是不可思议)、可以将各种东西组合起来的语言。

然而,另一种对“网关”的理解指出它不一定是一个定制设备,可能只是一个脚本,一个并不需要额外服务器的低吞吐量的附加脚本。这种形式的首次出现是有争议性的 Jim Davis 的 Gateway to the U Mich Geography server,于 1992 年的 11 月发布在了 WWW-talk 邮件列表中。Davis 的脚本是使用 Perl 编写的,是一种 Web API 的原型,基于格式化的用户查询从另外的服务器拉取数据。我们来说明一下这两种对于网关的理解的不同之处,伯纳斯·李回复了 Davis 的邮件,期望他和 Michigan 服务器的作者“能够达成某种共识”,“从网络的角度来看的话”仅使用一台服务器来提供这样的信息可能会更有意义。伯纳斯·李,可能是期待着 Web 的发明者可以提出一种有秩序的信息资源访问方式。这样从不同服务器上拉取数据的网关和脚本意味着一种潜在的 Web 的质的变化,虽然不断增多,但也可能有点偏离了伯纳斯·李的原始观点。

回到 Perl HTTPD

在 Davis 的地理服务器上的网关向标准化的、低吞吐量的、通过 CGI 方式实现的脚本化网关迈进的一步中,Perl HTTPD 的出现是很重要的事件,它是 1993 年初由印地安纳大学的研究生 Marc Van Heyningen 在 布卢明顿 Bloomington 完全使用 Perl 语言实现的一个 Web 服务器程序。从 Van Heyningen 给出的设计原则来看,基于使用 Perl 就不需要任何的编译过程这样一种事实,使得它能够成为一种极易扩展的服务器程序,这个服务器包含了“一个向代码中增加新特性时只要简单的重启一下就可以,而不会有任何的宕机时间的特性”,使得这个服务器程序可以频繁的加入新功能。

Perl HTTPD 代表了那种服务器程序应该是单一、特定目的的观点。相应的,这种模式似乎暗示了在 Web 开发中像这样渐进式的、持续测试的软件产品可能会最终变成一种共识。Van Heyningen 在后来提到过他从头编写这样一个服务器程序的初衷是当时没有一种简便的方式使用 CERN 服务器程序来生成“虚拟文档”(例如,动态生成的页面),他打趣说使用 Perl 这样的“神之语言”来写可能是最简单的方式了。在他初期编写的众多脚本中有一个 Sun 操作系统的用户手册的 Web 界面,以及 Finger 网关(这是一种早期用来共享计算机系统信息或者是用户信息的协议)。

虽然 Van Heyningen 将印地安纳大学的服务器主要用来连接现存的信息资源,他和研究生们同时也看见了作为个人发布形式的潜在可能。其中一件广为人知事件是在 1993-1994 年之间围绕着一个著名的加拿大案件而公布的一系列的文件、照片和新闻故事,与此形成鲜明对比的是,所有的全国性媒体都保持了沉默。

Perl HTTPD 没有坚持到现在的需要。今天,Van Heyningen 回忆起这个程序的时候认为这个程序只是当时的一个原型产品。它的原始目的只是向那些已经选择了 Gopher 作为大学的网络界面的资深教员们展示了网络的另一种利用方式。Van Heyningen 以一种基于 Web 的、可搜索的出版物索引的方式,用代码回应了他的导师们的虚荣。就是说,在服务器程序技术方面关键创新是为了赢得争论的胜利而诞生的,在这个角度上来看代码做到了所有要求它所做的事。

不管该服务器程序的生命是否短暂,伴随者 Perl HTTPD 一起出现的理念已经传播到了各个角落。Van Heyningen 开始收到了获取该代码的请求,而后将它分享到了网上,并提示说,需要了解一些 Perl 就可以将它移植到其它操作系统(或者找到一个这样的人也行)。不久之后,居住在 奥斯汀 Austin 的程序员 Tony Sanders 开发了一个被称为 Plexus 的轻便版本。Sander 的服务器程序是一款全功能的产品,并且同样包含了 Perl HTTPD 所建议的易扩展性,而且添加一些新的特性如图片解码等。Plexus 直接影响了 Rob McCool 给 NCSA HTTPD 服务器上的脚本开发的“htbin”,并且同样影响到了不久之后诞生的通用网关接口(CGI)。

在这些历史遗产之外,感谢妙不可言的 互联网时光机 Internet Archive 使得 Perl HTTPD 在今天依然保留在一种我们依然可以获取的形式,你可以从这里下载 tarball

历史展望

对于技术世界的颠覆来说,技术的改变总是在一个相互对立的过程中。现有的技术是思考新技术的基础与起点。过时的编程形式启迪了今天人们做事的新方式。网络世界的创新可能看起来更像是对于旧技术的扩展,不仅仅是 Perl。

在萌芽事件的简单的时间轴之外,Web 历史学者也许可以从 Perl 获取更多的线索。其中一部份的挑战在于材料的获取。更多需要做的事情包括从可获取的大量杂乱的数据中梳理出它的结构,将分散在邮件列表、归档网站,书本和杂志中的信息内容组合在一起。还有一部分的挑战是需要认识到 Web 的历史不仅仅是新技术发布的日子,它同时包括了个人记忆、人类情感与社会进程等,并且这不仅仅是单一的历史线而是有许许多多条相似的历史线组合而成的。就如 Perl 的信条一样“ 殊途同归。 There's More Than One Way To Do It.

(题图来自:pinterest.com


via: https://opensource.com/life/16/11/perl-and-birth-dynamic-web

作者:Michael Stevenson 译者:wcnnbdk1 校对:wxy

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

作为系统管理员,你可能有一个特定目录,你希望为 Linux 服务器上的每个用户授予读/写访问权限。在本指南中,我们将回顾如何在 Linux 中对特定目录(共享目录)上的所有用户启用写访问。

这要求设置适当的访问权限,而最有效、可靠的方法是为所有要共享或对特定目录的写访问权的用户分配一个公共组。

如果你系统中还没有这个目录和公众组,用下面的命令创建:

$ sudo mkdir -p /var/www/reports/
$ sudo groupadd project 

接着将对目录 /var/www/reports/ 有写权限的用户添加到 project 组中。

$ sudo usermod -a -G project tecmint 

Create Common Directory Group

创建公共目录组

上面命令使用到的标志和参数是:

  1. -a – 将用户添加到增补组中。
  2. -G – 指定组名。
  3. project – 组名。
  4. tecmint – 已有的用户名。

在这之后,给目录配置适当的权限,-R 会让操作递归进入子目录中:

$ sudo chgrp -R project /var/www/reports/
$ sudo chmod -R 2775 /var/www/reports/

解释下上面 chmod 命令中的 2775

  1. 2 - 打开 setGID 位,意味着新创建的子文件继承与目录相同的组,新创建的子目录继承父目录的 setGID 位。
  2. 7 - 为所有者提供 rwx 权限。
  3. 7 - 给组 rwx 权限。
  4. 5 - 为其他人提供 rx 权限。

你可以使用下面的命令创建更多的系统用户并将它们添加到目录组中:

$ sudo useradd -m -c "Aaron Kili" -s/bin/bash -G project aaronkilik
$ sudo useradd -m -c "John Doo" -s/bin/bash -G project john
$ sudo useradd -m -c "Ravi Saive" -s/bin/bash -G project ravi

接着创建每个用户存储他们项目报告的子目录:

$ sudo mkdir -p /var/www/reports/aaronkilik_reports
$ sudo mkdir -p /var/www/reports/johndoo_reports
$ sudo mkdir -p /var/www/reports/ravi_reports

现在你可以创建文件/文件,并分享给该组的其他用户了。

就是这样了!在本篇中,我们回顾了如何启用所有用户对特定目录的写权限。要了解更多关于 Linux 中的用户/组,阅读如何管理用户/组和属性

记得在评论栏中留下你对这篇文章的想法。


译者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin 和 web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/create-a-shared-directory-in-linux/

作者:Aaron Kili 译者:geekpi 校对:wxy

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

端口是与 Linux 操作系统上的应用或进程的通讯端点的逻辑实体。在使用之前,了解目标机器上哪些端口是打开并正在运行服务是非常有用的。

我们可以使用 netstat 或其他几个 Linux 命令如 NMAP 在本地机器上轻松地列出 Linux 中的打开端口

在本指南中,我们将向你展示如何使用简单的 netcat(简称 nc)命令来确定远程主机上的端口是否可访问/打开。

netcat(或简称 nc)是一个功能强大且易于使用的程序,可用于 Linux 中与 TCP、UDP 或 UNIX 域套接字相关的任何事情。

# yum install nc                  [在 CentOS/RHEL 中]
# dnf install nc                  [在 Fedora 22+ 中]
$ sudo apt-get install netcat     [在 Debian/Ubuntu 中]

我们可以使用它:打开 TCP 连接、侦听任意 TCP 和 UDP 端口、发送 UDP 数据包、在 IPv4 和 IPv6 进行端口扫描。

使用 netcat,你可以检查单个或多个或一段打开的端口范围,如下所示。下面的命令将帮助我们查看端口 22 是否在主机 192.168.56.10 上打开:

$ nc -zv 192.168.1.15 22

上面的命令中,这些标志是:

  1. -z – 设置 nc 只是扫描侦听守护进程,实际上不向它们发送任何数据。
  2. -v – 启用详细模式

下面的命令会检查远程主机 192.168.5.10 上是否打开了端口 80、22 和 21(我们也可以使用主机名):

nc -zv 192.168.56.10 80 22 21

也可以指定端口扫描的范围:

$ nc -zv 192.168.56.10 20-80

更多关于 netcat 命令的例子和使用,阅读我们下面的文章。

  1. 使用 netcat 命令在 Linux 服务器间传输文件
  2. Linux 网络配置及排障调试命令

就是这样。在本文中,我们解释了如何使用 netcat 命令检测远程主机端口是否可达/打开。请在评论栏中留下你的想法。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin 和 web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/check-remote-port-in-linux/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

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

了解如何解决 Linux 桌面用户遇到的最常见的问题

尽管绝大多数用户如预期地成功安装和操作了 Linux, 但不可避免地仍会有一些用户遇到问题。作为今年任务队列里的最后一篇文章,我认为在即将进入 2016 年时,总结一下人们所遇到的最常见的技术性的 Linux 问题会很有趣。我把这个问题发布到了 LinuxQuestions.org(LQ) 和社交媒体,我分析了 LQ 的帖子情况之后,得到如下成果。

1、 Wifi 驱动程序(特别是 Broadcom 芯片)

一般来说,Wifi 驱动程序,特别是 Broadcom 无线网卡,仍然是 Linux 面临的最大的问题技术问题之一。在 LQ 上,2016 年有数以百计的帖子在讨论这个话题,而且还有其他无数的地方也是。市场上有数十种 Broadcom 无线网卡可供使用,但为每一个发行版描述具体的排错细节来已经超出了一篇文章的范畴,但是基本的故障排除步骤是相同的:

  • 通过使用 lspci 命令确定具体使用的 Broadcom 卡,以找出 PCI ID,
  • 确定使用发行版是否支持该卡,
  • 如果支持,找到正确的方法来使网卡工作。

例如,如果有一个 14e4:4315 PCI ID 的卡,并且系统为 Ubuntu,则应该知道 BCM4312 卡可以通过安装 firmware-b43-installer 包来驱动。另一个选择是在购买之前,研究好可用的 WiFi 卡,以确保您的发行版完全支持它。

2、 打印机驱动程序(特别是佳能和 Lexmark)

打印机也是常有问题的,佳能和 Lexmark 被反复提及遇到这种问题。如果您要购买一台新打印机,请在购买之前研究兼容性。但是,如果您从其他操作系统迁移,这可能没得选择。如果你正在做调研,OpenPrinting 数据库和您的发行版的官方支持渠道是两个最好的起点。请注意,您应确保设备的所有功能完全兼容,特别是如果它是个多功能产品。对佳能打印机的一个常见的抱怨是,驱动程序通常只能在非英语,甚至是很难找的网站上才有。

如果您购买的是新打印机,请在购买之前研究兼容性。

3、 显卡

显卡是一个微妙的话题,因为在 Linux 上显卡可以非常好的简单直观的开箱即用。出现的问题是:显卡加速器/3D 加速;最新的显卡和最新显示技术,如 NVIDIA Optimus 和 ATI 动态 GPU 切换;专有驱动程序的安装和稳定性;能效管理;以及可靠的挂起和恢复。如果你不是一个游戏玩家,也没有别的需要高端图形功能的需求,并且不是使用笔记本电脑,那么你可能不必担心这个。如果您正在寻找一台新的笔记本电脑,一定要在购买前研究好兼容性。如果你是一个游戏玩家或需要最高端的图形功能,你需要明确知道你的需求是什么,然后开始你的研究。幸运的是,这种情况正在改善,Wayland 开始解决问题,2017 年情况应该会变得好一些。

4、 声卡

再次,对于简单配置,声卡非常容易设置并可以很可靠地在 Linux 上运行。一旦你买的是专业级产品,例如回声消除、音频路由,统一混合和其他复杂的配置,它可能就很快地每况愈下。我的建议是,如果你需要高端的实时音频,请使用专用的音频相关的发行版。

5、 安装

有了这个包罗万象的分类,本文几乎保证是高质量的。也就是说,公平的说,我不知道 Linux 有普遍的安装问题。绝大多数的安装都按预期进行。Linux 支持多种硬件,安装 Linux 机器上可能有近乎无限的硬件组合,不可避免会导致了某种情况下的例外情况。最终用户其实也很少安装类似 Mac OS 或 Windows 这样的其它系统,因为它们都是随同新设备预安装的。

绝大多数的安装都按预期进行。

前景光明

其他提到的问题经常包括蓝牙、挂起/恢复,HiDPI 和触摸屏。您可能会看到这里形成一个模式,本文中提到的大多数问题集中在桌面用户。如果你已经意识到了这点,这其实是有意义的。Linux 桌面使用率相对较低,导致结果是,用于发现和解决相关问题的测试和资源很少。随着桌面使用量的增加,可以预期这些部分会改善。

在这方面,我认为最好提及的一个例子,曾经常常作为 Linux 的问题提出,但是反而最近很罕见:字体。几年前,获得高品质的抗锯齿字体常常是个问题。但是,随着现代发行版本的更新,它已成为常规。

你认为 2016 年最常见的 Linux 技术问题是什么? 请在评论中留言告诉我。


作者简介:

Jeremy Garcia 是 LinuxQuestions.org 的创始人,热心而践行开源理念。在 Twitter 上关注 Jeremy:@linuxquestions


via: https://opensource.com/article/17/1/yearbook-linux-troubleshooting-tips

作者:Jeremy Garcia 译者:Vic020 校对:wxy

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

隐私保护、安全和加密是不可分开的,用户可以通过加密来提高安全和保护操作系统的隐私信息。本文将会介绍在 Ubuntu Linux 中对硬盘全盘加密的优缺点。此外,我们也介绍如何在系统级别上进行加密设置,并对一些目录进行加密。加密是非常有用的,而且也没有你想象中那么复杂。综上所述,让我开始进行加密吧。

加密的优缺点

尽管进行全盘加密听起来非常棒,但是否要这么做还是有些争议的。我们先来看看这个做法有哪些优缺点。

加密的优点

  • 提高私密程度
  • 只有拥有密钥的人才能访问操作系统及其中文件
  • 确保政府或者黑客无法侦测你的系统和侵犯你的隐私

加密的缺点

  • 在其他的 Linux 操作系统上访问和挂载文件系统将变得困难
  • 无法从那些加密分区中恢复数据
  • 如果用户丢失了加密密钥,那就彻底悲剧了

安装前的准备

在 Ubuntu 中加密最好就是在安装进程开始之前在系统层面进行。在 Ubuntu 安装进程开始之后是无法加密的,所以先备份你的重要数据到 DropboxGoogle Drive (或者其它硬盘上),然后后准备重新安装 Ubuntu。

此处 开始下载最新版本的 Ubuntu,并制作好可启动的 U 盘 (需要至少 2 GB 可用空间)。

制作启动 U 盘需要一个烧录程序,可以到 etcher.io 去下载。下载好之后解压 zip 文件,右击 (或者使用鼠标选定之后按下回车) 解压出来的文件以运行。

注意:烧录程序会询问是否创建图标,选择“yes”。

在烧录程序中点击“ 选择镜像 Select Image ”按钮,选择之前下载好的 Ubuntu ISO 镜像。然后插入你的 U 盘。烧录程序会自动检测并为你选择。最后,点击“ 开始烧录 Flash ”按钮来开始创建进程。

完成之后,重启电脑至 BIOS,设置为 U 盘启动。

注意:如果你的电脑不支持从 U 盘启动,下载 32 位的 Ubuntu,并使用你电脑中的烧录软件将其烧录到 DVD 中。

对你的硬盘进行全盘加密

加载好 Live Ubuntu 之后,安装进程就可以开始了。当 Ubuntu 安装进程开始之后,会出现下面这样一个界面。注意每个人安装进程都可能不同的,或许你会看到的不太一样。

选择“ 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”,并选择“ 加密新装的 Ubuntu 以提高安全程度 Encrypt the new Ubuntu installation for Security ”来开始加密的安装进程。这样会自动选择 LVM。两个选框都必须选中。选好加密选项之后,点击“ 现在安装 Install Now ”。

注意:如果是双系统启动的话,你需要安装到空余磁盘空间,而非擦除磁盘。选择好之后,像上边一样选择加密选项。

选择加密选项并开始安装之后,会出现一个加密配置页面。这个页面用户需要为安装进程设置自己的加密密钥。

输入安全密钥。该安全密钥设置窗口会自动为你输入的密钥进行密码强度评级,使用这个功能时看着后边的显示,直到显示为“ 高强度密码 strong password ”为止。输入完成后,在下方在此输入来确认密码,最后用一张纸把密码写下下来妥善保管。

此外,选定“ 覆些磁盘空余空间 Overwrite empty disk space ”,当然这是一个可选步骤。一切准备就绪之后点击现在安装即可。

在设置完加密密钥之后,就是传统的 Ubuntu 安装配置了。选择时区、创建用户以及对应的安全密码。

与创建和加密 Ubuntu 磁盘对应,在创建用户的时记得候选择“ 登录系统需要密码 require my password to log in ”和“ 加密我的家目录 encrypt my home folder ”。这样可以为你的数据再增加一层保护。

等到用户名、加密设置以及其他所有事情都完成之后,Ubuntu 安装进程就可以开始了。随后,安装进程会告知你安装已完成,移除安装介质后重启即可享受 Ubuntu 之旅。

结论

进行磁盘加密之后,如果没有加密密钥则无法开启 Ubuntu。尽管无趣,但这种级别的加密使用最容易的,并且还充分利用了操作系统提供的特性。用户不需要过多的知识,或者使用其他第三方程序就可以很快完成加密要求。

加密之后的 Ubuntu,使用起来和没有加密的并没有什么区别。不需要其他的步骤,也不需要学习什么复杂的解密方法。对于那些非常在意隐私但又不想太过麻烦的人来说,这个提高安全等级的方法是必须学会的(当然,这很容易不是吗)。

你是否会使用 Ubuntu 对硬盘进行加密呢?在下方评论告诉我们。


译者简介:

GHLandy —— 欲得之,则为之奋斗。 If you want it, work for it.


via: https://www.maketecheasier.com/encrypt-hard-disk-in-ubuntu/

作者:Derrik Diener 译者:GHLandy 校对:wxy

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

在当今的快节奏生态中,我们都倾向于花时间尝试最新的发明,然后在网络上进行激烈的辩论。

这里,我并不是说我们不能这样做。但我们的确应该把脚步放慢一些,并认真了解那些不会有很大变化的事情。这样不仅会提升我们的工作质量和我们所创造的价值 —— 还将切实地帮助我们更快理解这些新的工具。

本文融合了我的个人经历以及对新一年的希冀。正如我想热切表达自己想法一样,我也期待能在下方的评论表单中看到你的建议。

学习如何写出可读性高的代码

我们多数的工作并不是编写新代码,而是维护已有代码。这意味着你最终阅读代码的时间要比编写它所花费的时间要长,所以你需要为之后需要阅读你代码的程序员优化代码,而不是为了解释器。

这里我建议你按以下顺序 — 由浅入深 — 阅读下面三本书:

深入学习 JavaScript

现如今,每周都会出现一个新的 JavaScript 框架,并标榜自己比其他的任何旧框架都要好用。这样的情况下,我们很多人更倾向于花费时间来学习框架,而且这样也要比学习 JavaScript 本身要容易的多。如果说你正在使用框架,但并不了解该框架的工作方式,立刻停止使用它,并去学习 JavaScript,直到你能够理解这些工具的工作方式为止

学习函数式编程

多年以来,我们一直期待着 JavaScript 引入类,但真正引入类之后,我们却不想在 JavaScript 中使用类了,我们只想使用函数。我们甚至使用函数编写 HTML (JSX)。

学习设计基础知识

作为一个前端开发者,我们比这个生态中的任何人 —— 甚至可能是设计人员 —— 都要更加接近用户。如果设计者必须去确认你还原在屏幕上的每一个像素,你或许做错了某些事。

学习如何与人协作

有些人很喜欢通过编程来与电脑进行交互,而非与人进行交互。不幸的是,这样的结果并不是很好。

基本上我们不可能完全脱离群体来工作:我们总是需要和其他开发者、设计师以及项目经理 —— 有时候甚至要和用户 —— 交换意见。这是比较难的任务,但如果你想要真正理解你在做什么以及为什么要这么做的话,这一步是非常重要的,因为这正是我们工作的价值所在。

学习如何为用户编写代码

与同事或其他人的交流大部分是以文本的形式进行的:目标描述和评论、代码注释、Git 提交、即时聊天消息、电子邮件、推文、博客等。

想象一下,人们要花费多少时间来阅读和理解所有以上提到的这一切。如果你可以通过写得更清楚、简洁来减少这个时间,世界将变成一个更好的工作场所。

学习以前的计算机科学智慧

前端开发已经不仅仅简单的下拉菜单了,它前所未有的更复杂了。随着我们所需解决问题的复杂度越来越高,声名狼藉的“JavaScript 疲乏症”也随之出现了。

这意味着现在需要学习非前端开发人员过去几十年所积累形成的知识精华。而这也是我最想听到你向我推荐的内容了。

以下是我个人给大家的推荐:


读完本文,你有些什么建议呢?在这新的 2017 年里你又想学习些什么呢?


作者简介:

Web 开发者,充满激情的摄影者,crazy dogs 的主人。

译者简介:

GHLandy —— 欲得之,则为之奋斗 (If you want it, work for it.)。


via: https://medium.freecodecamp.com/what-to-learn-in-2017-if-youre-a-frontend-developer-b6cfef46effd#.ss9xbwrew

作者:Artem Sapegin 译者:GHLandy 校对:bestony

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