致我的同学们

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

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

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

“你的头脑里有智慧。你的脚上有鞋子。你可以随心所欲地选择方向。” - Dr. Seuss

“优秀的学生在所有方面都优秀。” - Marissa Mayer

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

警告:如果您是经验丰富的开发人员,那么这可能不是您要找的帖子。不过,请继续阅读。我敢打赌,您认识一些正在迈出第一步的开发人员,也许这可以帮助他们!

嗨! 我是 Josh (@starbuxman)。我在 Pivotal 担任 Spring 开发者布道师,我和团队中的其他人一样,花大量时间与许多令人惊叹的人交流。我们与各种各样的开发人员交谈:会议参与者、客户、学生、高管和实习生。我个人在每个大洲(南极洲除外!总有一天……)都交了朋友,并在每个时区与开发人员进行过在线或有时是面对面的交流。虽然我喜欢每一次自拍、握手、讨论、论坛帖子、Twitter 对话和电子邮件往来,但真正让我印象深刻的交流是来自学生的。他们常常不仅在 Spring 中,而且在 Java 编程以及更广泛的编程领域中摸索前进。他们(愚蠢地!!)认为我什么都知道。这些对话让我压力很大。重要的是,如果可能的话,不要让他们走错方向。这篇博文就是试图总结这些讨论。

千里之行,始于足下……

有时学生会问如何开始。我甚至不知道从哪里开始。开始……什么?有时我会和一些刚开始学习编程的年轻人交流。他们中很多人是由他们的父母介绍给我的。这些年轻人知道,对于有灵感的人来说,有一份奖赏——一段充满激情和新高峰的人生——在等待着那些踏上旅程的人,但他们不知道如何迈出第一步。

我交谈过的大多数人都开始构建应用程序,只是为了看到一些东西……“跳舞”。在我这一代,我们很多人都是从 Basic 游戏开始的,后来许多开发人员从 HTML 和 JavaScript 相关的东西开始,甚至 Flash。我最初的 Java 学习也是从 Applets 开始的!如今,我看到许多年轻人正通过 Android 或 iOS,甚至更近期的 Arduino 和 Minecraft mod 来学习编程。能够让某样东西“跳舞”是令人鼓舞的。视觉反馈令人满意,它能激励人。换句话说,我认识的年轻有抱负的程序员中,没有一个不想着 CRON 作业!

年轻人可以通过许多途径开始学习编程。我最喜欢的包括 Devoxx4Kids、Code.org (Hour of Code) 和 Coder Dojo。

Devoxx4Kids 是一个非营利组织,它源自 Devoxx 会议,并在全球范围内设有分会和活动(尽管永远欢迎更多!)。Devoxx4Kids 将合格的成年志愿者、一个庞大且不断增长的趣味练习、实验室和技术集合,以及孩子们汇集在一起,在全球范围内举办旨在激励年轻人(青少年)踏出编程第一步的活动,并且有他们在现场提供帮助。

Code.org 是一个类似的运动,获得了微软创始人比尔·盖茨、Facebook 创始人马克·扎克伯格、美国总统比尔·克林顿和音乐家 Will.i.am 等现代名人的关注和支持,以鼓励年轻人参与编码。它提供了教育资源,并且每年,该社区都会在全球范围内举办一次“编程一小时”活动,以鼓励年轻人编写他们的第一行代码。2014 年,美国总统奥巴马也参与其中,并用 JavaScript 编写了他的第一行代码!与 Devoxx4Kids 一样,“编程一小时”运动在全球范围内涌现出成千上万的活动和研讨会,让年轻人可以在那里获得帮助,踏出编程的第一步。

Coder Dojo 是一个为年轻人提供的免费编程俱乐部全球网络。

可汗学院为各种科目提供大量的在线学习资源,不仅仅是计算机科学。不过,它的计算机编程部分内容非常丰富。

地平线之外是什么

有时我会和一些处于学习后期、可能在大学里的学生交流,他们开始理解编程一台计算机意味着什么,现在渴望运用他们新获得的力量。对他们而言,重点不是进行编程的观念上的飞跃,而是迈出下一步,并将其应用于某个问题领域。

我将尝试描绘我今天所看到的科技宇宙,并解释每个学科的含义。这个列表远非详尽无遗。重要的是要理解学科并非互斥的。许多开发人员跨越多个学科,并根据需要进行混合搭配。这是理想状态。编程所有东西!专业化是给昆虫的!成为世界所需的文艺复兴式程序员

这个列表不可能详尽无遗,我很乐意在评论中添加任何内容。

我还会尝试链接到相关的入门材料和该领域流行的技术。我的观点当然是我自己的。毫无疑问,还有其他资源,但我会坚持我所知道的有效的方法。

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 的设备、Apple iOS 设备、视频游戏机、电视、汽车、桌面和移动浏览器等。当我们谈论前端开发时,通常至少指的是构建基于浏览器的 JavaScript 和 HTML5 应用程序,以及移动应用程序(通常是AndroidiOS)。

SQL 数据处理:虽然比例在减少,但仍有相当一部分应用程序数据存储在关系数据库(RDBMSes)中,如 MySQL 和 PostgreSQL。这些数据库使用一种名为 SQL 的查询语言。您会发现有很多技术可以与这些数据库进行交互。在 JVM 空间中,通常使用 JDBCJPA

NoSQL 数据处理:RDBMSes 可能是根深蒂固的技术,但绝不是存储数据的唯一方式。应用程序数据常常有特殊的存储要求。也许数据更好地描述不是在一组松散连接的表中,而是作为节点图,或者作为一系列不太严格的文档,或者可能用例要求能够对数据进行全文搜索。在任何情况下,您最终都会使用所谓的Not-only-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!)在圣诞节等大型节日期间需要许多许多更多的计算机,因为购买东西的人数大大增加。历史上,增加计算机容量意味着有人必须购买新机器,去数据中心安装新机器和操作系统,将它们连接到网络,等等。今天,开发人员使用硬件之上的软件层来将硬件视为一个巨大的资源池。为了让开发人员和运营商能够像业务需求一样快速地移动,他们需要弹性地部署、管理和扩展应用程序的能力。平台即服务(PaaS)可以让您做到这一点。当人们今天谈论云计算时,他们可能谈论的是像 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 是一个查找各种新闻的绝佳场所,不仅仅是技术新闻。我收藏了几个不同的子版块编程Java 等技术版块。我还收藏了几个用于明显技术内容的版块!:D

Hacker News 是另一个(经过审核的)链接聚合器。它通常会提供一些非常深入的内容。我喜欢它作为一种观察技术前沿的方式。

DZone 在您不介意筛选噪音以找到有趣帖子的情况下会很有用。它是一个链接聚合器,就像 Reddit 一样。

Virtual JUG 是一个在线的虚拟 Java 用户组,通过 YouTube 进行直播,并定期邀请 Java 社区的专家。讲座录音之后可以在 YouTube 上找到。

GitHub 是一个供开发人员协作编写代码的在线社区。它构建在 git 源代码控制和修订系统之上,但集成了问题跟踪、协作工具、文档等等。它是迄今为止最大的开发者社区,而且——我最喜欢的部分——上面有大量优秀的(也有一些不太好的!)开源代码示例供您搜索和浏览。想在编程方面有所建树?修复一些 bug 并加入团队。我们称之为挠自己的痒。它将提高您的技能,为您提供与通常非常熟练的开发人员合作的宝贵经验,并且——如果您对有用户的项目做出任何贡献——您可能会让别人的日子更好过。双赢!

StackOverflow.com 是一个问答论坛。对编程有疑问?很有可能别人也遇到过同样的问题。搜索一下就会发现。或者,如果找不到正确的结果,就提问吧。当您开始有了答案时,通过回答别人的问题来回馈社区。

Spring Blog 如果您允许我再打一次广告,我们确实发布了大量关于各种各样主题的博客,所以我希望您也能看看这个博客 ;-)

您提到了很多 Java……

我从事 Java 语言的工作,它运行在 Java 虚拟机之上。我认为 Java 是一种枯燥的语言,这反而更好。它适合初学者学习构建东西,而不必苦苦纠结于语法。它也对有经验的开发人员有帮助,因为它相对容易阅读。我个人很喜欢 Java。它足够富有表现力,同时又足够容易上手和阅读。然而,无论您是否喜欢 Java 语言本身,每个人都同意 JVM(作为一个平台)是无与伦比的。几乎所有大型网络巨头(Twitter、Netflix、Google、eBay、Amazon.com、Yahoo! 等)都主要使用 JVM。JVM 经过实战检验,并且非常成熟。T

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

下一步

这整篇博文都是关于下一步。祝贺您迈出了第一步!如果您下定决心,您将结交许多朋友,解决许多有趣的问题,并获得很多乐趣。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有