致我的同学们

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

“你永远都是学生,而不是大师。你必须不断前进。” - 康拉德·霍尔

“未来的帝国是思想的帝国。” - 温斯顿·丘吉尔

“你的脑袋里有智慧,你的鞋里有双脚。你可以自己选择任何方向。” - 苏斯博士

“好学生样样都好。” - 玛丽莎·梅耶尔

“从未犯过错误的人,也从未尝试过任何新事物。” - 阿尔伯特·爱因斯坦

警告:如果你是一位经验丰富的开发者,那么这可能不是你正在寻找的文章。不过,请继续阅读。我敢打赌,你认识一些正在起步的开发者,也许,这篇文章可以帮助他们!

嗨!我是 Josh (@starbuxman)。我在 Pivotal 担任Spring 开发推广者,我和团队的其他成员一样,花了很多时间与很多非常棒的人交流。我们与各种各样的开发者交谈:会议参与者、客户、学生、高管和实习生等等。我个人在每个大陆(除了南极洲!总有一天…)都交了朋友,并且与各个时区的开发者进行过互动——在线或有时亲自见面。虽然我享受每一次自拍、握手、讨论、论坛帖子、Twitter 谈话和电子邮件交流,但真正让我印象深刻的是来自学生的交流。他们通常不仅在学习 Spring,还在学习 Java 和更广泛的编程。他们(愚蠢地!)认为我无所不知。这些对话让我深思。如果可能,务必不要误导他们。这篇文章试图记录下许多这样的讨论。

千里之行,始于足下…

有时学生会问如何开始。我甚至不知道从哪里开始。从哪里开始呢?什么?有时我和一些尝试开始编程的年轻人交谈。通常情况下,这些年轻人都是由他们的父母介绍给我的。这些年轻人知道有一个奖品——对于有灵感的人来说,是一生充满激情和新的高峰需要攀登——等待着那些踏上旅程的人,但他们不知道如何迈出第一步。

我交谈过的大多数人都开始构建应用程序,以便看到某些东西……跳舞。在我的那一代人中,许多人是从 Basic 游戏开始的,后来许多开发者从与 HTML 和 JavaScript 相关的东西开始,甚至 Flash。毕竟,我在 Java 中的第一步就是 Applet!如今,我看到很多年轻人从 Android 或 iOS 开始他们的第一步,或者更近一点,从 Arduino 和 Minecraft 模组开始。能够让某些东西跳舞令人鼓舞。视觉反馈令人满意,它令人鼓舞。换句话说,我不认识任何年轻的有抱负的程序员,他们总是想着 CRON 作业!

年轻人有很多途径可以开始学习编程。我最喜欢的一些是 Devoxx4Kids、Code.org(编程一小时)和 Coder Dojo。

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

Code.org 是一场类似的运动,它吸引了微软创始人比尔·盖茨、Facebook 创始人马克·扎克伯格、美国总统比尔·克林顿和音乐人威廉等现代名人的关注和支持,鼓励年轻人参与代码编写。这里有教育资源,并且——每年——社区都会在全球范围内举办一个编程一小时活动,鼓励年轻人编写他们的第一行代码。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 数据处理:越来越少,但仍然不小的应用程序数据存储在关系数据库 (RDBMS) 中,例如 MySQL 和 PostgreSQL。这些数据库使用名为 SQL 的查询语言。你会发现有无数的技术可以与这些数据库进行交互。在 JVM 领域,人们通常使用JDBCJPA

NoSQL 数据处理:RDBMS 可能是根深蒂固的技术,但它绝不是存储数据的唯一方式。通常,应用程序数据具有专门的存储需求。也许数据用一组松散连接的表来描述更好,而不是节点图,或者是一系列不太严格的文档,或者也许用例需要能够对数据进行全文搜索。无论如何,对于这些类型的需求,你最终会使用所谓的不仅仅是 SQL 或 NoSQL 解决方案。

大数据处理:虽然 RDBMS 可能无处不在,NoSQL 可能对某些类型的数据更有效或更自然,但某些数据集需要专门的处理技术,仅仅因为数据量非常庞大。此类处理称为大数据。NoSQL 和大数据之间经常存在重叠。当我们谈论大数据处理时,大多数人想到的是Apache HadoopYARNApache KafkaSpring XD 等流处理解决方案。

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

云计算:2007 年,亚马逊公司(没错,就是那个卖书的)宣布将提供按小时、按需租用计算机的服务。无需人工干预,只需使用 API 即可。因此,构建能够满足大量用户请求的软件成为可能,并且随着需求的增长,可以动态地添加更多计算机并安装新的软件!从那时起,世界发生了翻天覆地的变化,如今我们谈论云计算时,指的是如何构建具有弹性的应用程序——它们可以通过动态添加容量来缩小和扩展。例如,想象一个网站(比如亚马逊!),在圣诞节等大型节假日期间,由于购物人数大幅增加,需要大量的计算机。过去,增加计算容量意味着需要有人购买新机器,前往数据中心安装新机器和操作系统,将它们连接到网络等等。如今,开发人员在裸机硬件之上使用多层软件,将硬件视为一个巨大的资源池。为了使开发人员和运营人员能够尽可能快地响应业务需求,他们需要能够弹性地部署、管理和扩展应用程序。平台即服务 (PaaS) 可以帮助实现这一点。当人们今天谈论云计算时,他们可能指的是较低级别的基础设施技术,如 Amazon Web Services 和 Docker,以及较高级别的平台即服务,如 Heroku 和 Pivotal 的开源 Cloud Foundry。Cloud Foundry 是位于基础设施之上的一整层。较新的 Cloud Foundry 版本支持运行容器化工作负载。Docker 就是一个流行的容器。如果您想体验在本地桌面机器上构建、管理和扩展容器化工作负载,可以查看 Lattice

应用程序集成:随着时间的推移,越来越多的应用程序和服务在开发过程中彼此之间没有相互了解。使两个原本不知情的应用程序共享数据和服务的工作称为应用程序集成。处理此类任务的方法有很多,但通常涉及在系统之间读取、适配和写入数据。为此,可以使用企业应用程序集成和消息驱动架构,或批处理。当我们谈论应用程序集成时,通常指的是像 Rendez-Vous、JMS、MQ Series、RabbitMQSpring Integration 这样的技术。

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

重要的是要理解这些事物是相互融合的。如果您关心使用云计算扩展应用程序可用性,那么您可能也关心 API,并且您可能也关心大数据和 NoSQL。如果您关心 API,那么您可能也关心如何将这些 API 连接到 Android 等客户端技术。我之所以做出这些区分,是为了让您能够从某个地方开始!现在选择一个垂直领域,但始终要敢于超越。您的好奇心会得到回报。

不断学习!

优秀的工程师在开始工作的那天就会假设他们在下班前会学到一些新东西。如果您的工作项目单调乏味,那就去寻找新的项目。

如果可以,请随时了解最新动态。阅读最新的软件版本发布信息和观看有趣的技术演讲视频,这些资源是取之不尽的。

以下是一些我每天在开始工作前都会查看的资源,通常是在喝咖啡和午餐的时候。

InfoQ 是一个在线技术门户网站,涵盖各种主题和技术领域。

Reddit 是一个绝佳的平台,可以找到各种新闻,不仅仅是科技新闻。我收藏了一些不同的子版块编程Java(技术相关)。我还收藏了一些其他完全技术内容的子版块!:D

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

DZone 也不错,如果您不介意筛选大量信息以找到有趣的帖子。它是一个链接聚合器,类似于 Reddit。

Virtual JUG 是一个在线的虚拟 Java 用户组,通过 YouTube 直播,定期邀请来自 Java 社区的专家进行演讲。演讲的录音之后会在 YouTube 上提供。

GitHub 是一个在线社区,开发人员可以在其中协作编写代码。它基于git源代码控制和修订系统,但集成了问题跟踪、协作工具、文档等等。它是迄今为止最大的开发者社区——我最喜欢的一点是,上面有大量优秀的(也有一些不太优秀的!)开源代码示例,您可以搜索并浏览它们。想提高编程水平?修复一些错误,加入团队一起工作。我们称之为解决自己的问题。这将提高您的技能,让您获得与通常非常熟练的开发人员合作的宝贵经验,并且——如果您对某个有用户的项目做出了任何贡献——您可能会让其他人的生活变得更好。双赢!

StackOverflow.com 是一个问答论坛。有编程问题?很有可能其他人也遇到过同样的问题。搜索一下,看看吧。或者,如果您找不到合适的答案,可以提问。当您开始掌握答案时,可以通过回答其他人的问题回馈社区。

Spring 博客 容我再推广一下,我们确实在各种各样的主题上发布了很多博客文章,所以希望您也能查看一下这个博客 ;-)

您经常提到 Java…

我使用 Java 语言,它运行在 Java 虚拟机之上。我认为 Java 是一种乏味的语言,但这是件好事。它适合想要开始构建东西的初学者,而不用纠结于语法。它也有助于经验丰富的开发者,因为它的可读性相当一致。我个人非常喜欢 Java。它足够表达力,同时也很容易学习和阅读。但是,无论您是否喜欢 Java 语言,每个人都同意 JVM(作为一个平台)是首屈一指的。几乎所有大型网络巨头(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 社区中所有即将举行的活动。

查看全部