致我的同学们

工程 | Josh Long | 2015年5月11日 | ...

“你永远是学生,从不是大师。你必须不断前进。” -Conrad Hall

“未来的帝国是思想的帝国。” -Winston Churchill

“你的头脑中有智慧。你的鞋中有双脚。你可以选择任何你想要的方向。” -Dr. Seuss

“好学生擅长所有事情。” -Marissa Mayer

“从不犯错的人从未尝试过任何新事物。” -Albert Einstein

警告:如果您是一位经验丰富的开发者,那么这可能不是您要找的文章。无论如何,请继续阅读。我敢打赌您认识一些刚开始学习的开发者,也许这篇文章能帮到他们!

嗨!我是 Josh (@starbuxman)。我在 Pivotal 担任 Spring 开发者布道师,和团队其他人一样,我花了很多时间与大量非常优秀的人交流。我们与各种各样的开发者交流:会议参与者、客户、学生、C 级高管以及实习生。我个人在除了南极洲以外的每个大陆(总有一天会去的!)都交到了朋友,并且在每个时区都与开发者进行过线上或线下的互动。虽然我享受每一次自拍、握手、讨论、论坛帖子、Twitter 对话和电子邮件交流,但真正让我难忘的是来自学生的交流。他们不仅在 Spring 方面摸索,还在 Java 甚至更广泛的编程领域寻找方向。他们(傻乎乎地!)以为我什么都知道。这些对话对我影响深远。如果可能的话,不把他们引入歧途是非常重要的。这篇文章试图记录下许多这类讨论。

千里之行始于足下..

有时学生会问如何入门。我甚至不知道从何说起。从什么开始呢.. 什么?有时我也会和刚开始尝试编程的年轻人交谈。通常这些都是他们的父母介绍给我的。这些年轻人知道旅程的终点有奖赏——对于受到启发的人来说,那是一段充满热情和不断攀登新高峰的生活——等待着那些踏上旅程的人,但他们不知道如何迈出第一步。

我交谈过的大多数人开始构建应用程序是为了看到某种东西在..跳舞。在我们这一代,很多人从 Basic 游戏开始,后来很多开发者从与 HTML 和 JavaScript 相关的东西,甚至 Flash 开始。毕竟,我在 Java 上的第一步是从 Applets 开始的!如今,我看到很多年轻人从 Android 或 iOS,甚至更近期的 Arduino 和 Minecraft mods 开始迈出第一步。能够让某物“跳舞”令人鼓舞。视觉反馈令人满意,也令人振奋。换句话说,我不知道有哪个年轻的有志程序员会不停地想着 CRON 作业!

有很多途径可以帮助年轻人开始编程。我比较喜欢的一些包括 Devoxx4Kids、Code.org(编程一小时)和 Coder Dojo。

Devoxx4Kids 是一个非营利组织,源于 Devoxx 会议,在全球各地设有分会和活动(尽管总是欢迎更多加入!)。Devoxx4Kids 将合格的成年志愿者、大量不断增长的有趣练习、实验和技术与孩子们联系起来,在全球范围内举办活动,旨在启发年轻人(青少年)迈出第一步,并有专人帮助他们。

Code.org 是一个类似的运动,获得了现代名人如微软创始人比尔·盖茨、Facebook 创始人马克·扎克伯格、美国总统比尔·克林顿和音乐人 Will.i.am 的关注和支持,以鼓励年轻人参与编程。该组织提供教育资源,并且社区每年在全球范围内举办“编程一小时”活动,鼓励年轻人写下他们的第一行代码。2014年,美国总统奥巴马参与其中,并用 JavaScript 写下了他的第一行代码!像 Devoxx4Kids 一样,“编程一小时”运动在全球各地涌现出数千场活动和工作坊,年轻人可以在那里获得编程入门的帮助。

Coder Dojo 是一个面向年轻人的全球性免费编程俱乐部网络。

可汗学院 (Khan Academy) 拥有大量的在线学习资源,涵盖各种学科,不仅仅是计算机科学。不过,其计算机编程板块内容非常丰富。

远方有什么

有时我也会与学业更进一步的学生交流,可能是在大学里,他们开始理解编程计算机的意义,现在渴望运用他们新获得的能力。对他们来说,问题不在于是否能概念性地进入编程领域,而在于迈出下一步,并将其应用于某个问题领域。

我将尝试根据我对当今技术的理解来概述技术领域,并解释每个学科是什么。这份清单远非详尽。重要的是要理解学科并非相互排斥。许多开发者跨越多个学科,并根据需要进行组合。这是理想状态。编程所有东西!专业化是给昆虫的!成为世界需要的文艺复兴式程序员

这份清单不可能详尽无遗,我很乐意在评论中看到任何补充。

我还会尽量链接到相关的入门材料和这个领域中的流行技术。我的观点当然是我个人的。毫无疑问还有其他资源,但我只会推荐我所知道有效的。

Web 编程:我认为这是当今开发者最自然的起点,因为一切都连接到 Web。Web 编程既指创建基于 HTTP 的 Web 应用(如 Amazon.com),包括页面、表单等,也指创建 API。人与 Web 应用交互(通常通过浏览器),机器与 API 交互。如今,创建 API 最流行的方式是使用 REST。Web 编程消费其他 Web 服务的工作,例如您可能会作为 Facebook API 的客户端。当人们谈论 Web 开发时,他们通常谈论的是 REST Web 服务Web 安全OAuthWeb 测试、JavaScript、CSS 和 API 等。

前端 & (富客户端或移动端)客户端开发:对于每一个 Web 应用,都有越来越多的屏幕可以消费它:基于 Android 的设备、苹果 iOS 设备、视频游戏机、电视、汽车、桌面和移动浏览器等等。当我们谈论前端开发时,通常至少指构建基于浏览器的 JavaScript 和 HTML5 应用,以及移动应用(通常是 AndroidiOS)。

SQL 数据处理:应用程序数据中有一部分存储在关系型数据库(RDBMS)中,例如 MySQL 和 PostgreSQL,尽管这部分数据量正在减少,但仍不可忽视。这些数据库使用一种称为 SQL 的查询语言。您会发现有无数的技术可以与这些数据库交互。在 JVM 领域,通常使用 JDBCJPA

NoSQL 数据处理:RDBMSes 可能是根深蒂固的技术,但这绝不是存储数据的唯一方式。通常,应用数据有特定的存储需求。数据可能更适合描述为节点图,而不是一组松散连接的表,或者是一系列不太严格的文档,或者某些用例需要对数据进行全文搜索。无论如何,对于这类需求,您最终都会使用所谓的 不仅仅是 SQL 或 No-SQL 解决方案。

大数据处理:虽然 RDBMSes 可能无处不在,NoSQL 对于某些类型的数据可能更高效或自然,但有些数据集需要专门的处理技术,仅仅因为数据量实在太大了。这类处理称为大数据。NoSQL 和大数据之间通常存在重叠。当我们谈论大数据处理时,大多数人会想到诸如 Apache HadoopYARNApache Kafka 以及 Spring XD 等流处理解决方案。

嵌入式开发:这个领域非常庞大,而且——我承认——我对此知之甚少。在2015年的今天,Java 和 C 是非常非常流行的编程语言。虽然 C 已经有40多年的历史了!它之所以持续流行,是因为它可以在非常小的计算环境中运行,比如手表、闹钟、冰箱、汽车等。当人们谈论嵌入式开发时,他们可能指的是使用 Linux、C 和定制微处理器来为低内存设备构建解决方案。我的理论是,随着我们生活中即使是更小的物品(汽车、手机)现在也拥有足够的算力来运行更现代的编程语言,比如 Java、JavaScript、Groovy 等,这个领域会随着时间的推移而逐渐式微。

云计算:2007年,Amazon.com(没错,就是那个卖书的)宣布,他们将提供按小时、按需租用计算机的服务。无需人工干预,只需通过 API。这样一来,就可以构建能够处理海量用户请求的软件,并且——如果需求增长——可以动态地增加更多的计算机并安装新的软件!从那时起,世界发生了巨大变化,如今当我们谈论云计算时,我们指的是如何构建弹性的应用——它们可以通过动态增加容量来收缩和扩展。例如,想象一个网站(就像 Amazon.com!)在圣诞节等重大假期期间需要多得多的计算机,因为购买商品的人急剧增加。历史上,增加计算机容量意味着有人必须购买新机器,前往数据中心安装新机器和操作系统,将它们连接到网络等等。如今,开发者在裸机硬件之上使用软件层,将硬件视为一个巨大的资源池。为了使开发者和运维人员能够尽快响应业务需求,他们需要弹性部署、管理和扩展应用的能力。平台即服务(Platform-as-a-Service)允许您做到这一点。当人们如今谈论云计算时,他们可能指的是更底层的基础设施技术,如 Amazon Web Services 和 Docker,以及更高级的平台即服务,如 Heroku 和 Pivotal 的开源项目 Cloud Foundry。Cloud Foundry 是基础设施之上的整个层。新版本的 Cloud Foundry 支持运行容器化工作负载。一个流行的容器就是前面提到的 Docker。如果您想体验一下如何在本地桌面机器上构建、管理和扩展容器化工作负载,可以试试 Lattice

应用集成:随着时间的推移,越来越多的应用程序和服务被开发出来,而彼此之间互不了解。使两个原本独立的应用程序共享数据和服务的工作称为应用集成。有不同的方式来处理这项任务,但这项工作通常涉及在系统之间读取、适配和写入数据。为此,可能会使用企业应用集成和消息驱动架构,或批处理。当我们谈论应用集成时,通常是指诸如 Rendez-Vous、JMS、MQ Series、RabbitMQSpring Integration 等技术。

物联网:这与嵌入式开发相关。其理念是,当今大多数设备可以或已经拥有 IP 地址,它们是联网的。例子包括闹钟、咖啡机、家庭安全系统和冰箱。通常它们会生成大量数据(正如您所料,24/7 运行的消费设备就是如此),因此使用像 MQTT 这样的轻量级协议来管理流量变得非常重要。

重要的是要理解这些领域是相互融合的。如果您关心利用云计算扩展应用可用性,您可能也会关心 API,而且可能还会关心大数据和 NoSQL。如果您关心 API,您可能也会关心如何将这些 API 连接到 Android 等客户端技术。我做出这些区分是为了让您可以从...某个地方开始!暂时选择一个垂直领域,但要敢于探索更远。您的好奇心会得到回报。

永远学习!

最优秀的工程师一天开始时就假定回家之前会学到新东西。如果您的工作项目单调乏味,那就去争取新项目。

如果可能,请随时了解最新最重要的消息。阅读最新的软件版本发布信息、观看有趣的最新技术讲座的资源无穷无尽。

以下是我每天工作前通常在喝咖啡和吃午饭时查看的一些资源:

InfoQ 是一个在线技术门户网站,提供各种主题和技术垂直领域的新闻。

Reddit 是一个很棒的地方,可以找到各种新闻,不仅仅是技术方面的。我收藏了一些不同的子版块(sub-Reddits)编程Java(技术相关)。我还收藏了一些绝对技术性的内容! :D

Hacker News 是另一个(经过版主审核的)链接聚合器。它通常提供一些相当有深度的内容。我喜欢用它来关注技术的前沿

DZone 也不错,如果您不介意过滤掉杂音来找到有趣的帖子。它是一个链接聚合器,类似于 Reddit。

Virtual JUG 是一个在线的虚拟 Java 用户组,通过 YouTube 进行直播,定期邀请来自 Java 社区的专家。讲座录像之后可在 YouTube 上观看。

GitHub 是一个供开发者协作编写代码的在线社区。它基于 git 版本控制系统构建,并集成了问题跟踪、协作工具、文档等众多功能。它绝对是最大的开发者社区——我最喜欢的部分是——上面有大量优秀的(当然也有一些不那么优秀的!)开源代码示例供您搜索和浏览。想提高编程水平?修复一些 bug 并在一个团队中工作。我们称之为“解决自己的痛点”。这会提高您的技能,为您提供与通常非常优秀的开发者合作的宝贵经验,而且——如果您对一个拥有用户的项目做出任何贡献——您可能会让别人的日子变得更好。双赢!

StackOverflow.com 是一个问答论坛。在编程方面有问题?很可能有人已经遇到了同样的问题。搜索看看。或者,如果您找不到合适的答案,尽管提问。当您开始掌握答案时,通过回答别人的问题来回馈社区。

Spring 博客 如果允许我再宣传一下,我们确实发表了大量关于各种疯狂多样主题的博客,所以我希望您也能来看看这个博客 ;-)

你经常提到 Java..

我使用 Java 语言,它运行在 Java 虚拟机(JVM)之上。我认为 Java 是一种有点无聊的语言,但这是好事。它适合想要开始构建东西而不必纠结于语法的初学者。它对有经验的人也有帮助,因为它很容易阅读,保持相当一致。我个人非常喜欢 Java。它足够有表现力,同时又很容易上手和阅读。然而,无论你喜不喜欢 Java 语言本身,所有人都同意 JVM(作为一个平台)是首屈一指的。几乎所有大型 Web 巨头(Twitter, Netflix, Google, eBay, Amazon.com, Yahoo! 等等)都主要使用 JVM。JVM 久经考验,基础稳固。

当然总有替代方案,但毫不奇怪的是,在大数据、NoSQL、云计算、移动开发、Web API 等领域入门,都需要对 JVM 有一定的熟练度。如果你不喜欢 Java 语言(不过,你应该试试 Java 8!你可能会喜欢它..),还有很多成熟的替代语言,比如 Groovy、Scala、Clojure(JVM 上的 Lisp)、JRuby(JVM 上的 Ruby)、Jython(JVM 上的 Python)、Kotlin 和 Ceylon,它们都运行在 JVM 上。没错——你可以在你选择的语言风格下,获得世界上最强大的语言运行时环境。

下一步

这篇博客一直在讲下一步。祝贺您迈出了第一步!如果您下定决心,您会结交很多朋友,解决很多有趣的问题,并从中获得很多乐趣。

获取 Spring 资讯

通过 Spring 资讯保持联系

订阅

抢先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看全部