我的第一个业余项目如何让我成为今天的开发人员
2010 年(撰写本文时已经是 11 年前了😱),我开始了我的第一个软件开发副业项目。当时我 16 岁,还在读技术高中,已经对编程有了一定的了解,并且渴望更多。
几天前,菲利克斯发起了一个关于人们第一个项目的帖子,我也回答了我的问题。回忆闪回我的脑海,在更多地思考的同时,我认为分享这个项目如何使我成为今天的开发人员可能会很有趣。让我带你一起踏上这段旅程。🗺
我想做一个游戏,但它应该是在线的!
从我还是个小男孩的时候起,我就对游戏有一个误解。它从 Gameboy Color 和古老的口袋妖怪系列开始,然后继续玩《魔兽世界》等多人游戏(这实际上让我在学校留级了一年,但那是另一个故事了😅)。因此,如果你将对游戏的浓厚兴趣与学习更多编程知识的奉献精神结合在一起,那么很明显我想构建一款游戏,更准确地说是一款多人游戏。
2009 年,我玩了RPG Maker XP。我喜欢通过在编辑器中点击来创建我的小角色扮演游戏,并且总是向其他使用 Ruby 创建自定义脚本的酷创作者致敬。我还想用这些脚本创建更复杂的解决方案,但无法解决它。
但随着我在学校学到更多,我对这些脚本也有了更好的理解。我开始搜索如何将我的单人 RPG Maker 游戏扩展到带有服务器的多人游戏。经过相当多的搜索后,我发现 RPG Maker 不是适合多人游戏的平台。这在某种程度上是可能的,但人们建议使用构建在“真实”客户端-服务器结构之上的其他解决方案。就在那时,我偶然发现了Eclipse,它不是 IDE,而是一个用 VB6 编写的 2D 多人游戏引擎(当时已经很老了,哈哈)。
通过尝试现有的解决方案,我学到了最多的东西
是的,你没看错,VB6。如果您研究Visual Basic 6,您会发现它于 1998 年首次发布。所以当时它已经很老了,事实上,老到微软在几年后的 Windows 8 中终止了对它的支持。那么我为什么要开始使用 Visual Basic 6呢?有了这个?如果可以有更多最先进的东西,我为什么还要花时间在这上面呢?因为它是完全开源的,可以根据我的需要进行研究和修改。
我选择这个作为我的第一个解决方案可能听起来有点固执,但我爱上了它提供的可能性,更喜欢我可以根据自己的需要调整它的事实。当我更改现有代码库中的某些内容并看到我的更改达到了我想要的效果时,这种感觉真是令人难以置信。从那时起,我内心开始燃起对软件开发的真正热情。当我写这篇文章时,我再次感受到了当时的感觉,这也让我意识到为什么我仍然有如此大的热情:输入一些代码,然后看到它实际上做了我想要的事情——神奇。
在探索这个游戏引擎时,我有很多啊哈!时刻。这是我第一次使用客户端-服务器架构之类的东西,也是第一次听到“Socket”这个词。通过探索源代码、与社区互动以及在谷歌上搜索不同的解决方案来进行我想做的调整,我学到了很多东西。我开始明白 Google 是我学习新事物和找到问题解决方案所需的工具。我了解到,如果您进行彻底搜索,并且更重要的是使用正确的关键字进行搜索,您几乎可以解决所有问题。
找出我想要构建什么类型的游戏
我确实花了 6-12 个月的时间使用这个 VB6 引擎。一段时间后,我有了一个想法:我想要制作什么:一款农场游戏。我很喜欢《牧场物语》,但我不知道有什么在线游戏与《牧场物语》有相同的游戏原理。我想得越多,我就越喜欢构建一款玩家可以互相互动的农场游戏的想法。
所以我在不同的论坛上解释了我的想法并得到了很多反馈!最吸引人的社区是一个名为“Harvest Moon Heaven”的论坛,在那里人们喜欢拥有一款具有在线功能的类似于 Harvest Moon 的游戏的想法。我得到了很多积极的反馈,这进一步增加了继续玩游戏的动力。也是在这里,我就如何命名游戏进行了民意调查,《Rising Farms Online》就在那时诞生了。☺️
建立我自己的论坛/网站
Rising Farms 周围的社区进一步发展。我们在摘月天堂有一个自己的分论坛,已经有相当多的人参与了,是时候为游戏创建一个自己的地方了。我购买了该域名并在那里安装了Woltlab Burning Board。Rising Farms 社区诞生了。🥳
我还创建了一个登陆页面。那时我经常使用 Photoshop。我在 PS 中设计了整个网站,并将各个部分切成图像,然后将其导入到我的网站中。好的。老的。次。尽管网站的资产规模和源代码很糟糕😅。
遗憾的是,我在 Wayback Machine 上找到的最早版本是 2013 年的,但它给你留下了很好的印象 😄
2011 年,我们围绕 Rising Farms 建立了一个小团队
社区进一步发展,2011 年我们甚至建立了一个约 6 人的小团队,负责处理不同的任务。所有这些人都是志愿者,他们认为 Rising Farms 会是一款很棒的游戏,并免费提供他们的时间和技能。他们中的一些人是讲故事的人,并构建了游戏的背景故事及其角色。其他人是创作游戏像素艺术的图形艺术家。
与其他人一起完成我自己的项目的感觉真是太棒了,我们甚至每周举行一次会议,讨论即将到来的任务。这段时间我学到了很多东西,甚至还学到了一些项目管理和团队协调的知识。
下一站:C# 与 XNA
随着游戏的进一步发展,我越来越清楚,VB6 并不是 Rising Farms 的可持续发展基础。2010 年底,我已经有了一个可用的原型,并且有人对其进行了测试,但由于必须安装不同的依赖项,每次让游戏在不同的计算机上运行都是一个巨大的痛苦。当微软宣布他们将放弃对下一个 Windows 版本的支持时,我很清楚我必须找到另一种方式来开发 Rising Farms。
在学校里,我们玩过 XNA,这是一个 C# 游戏框架,所以我认为它可能是开发 Rising Farms 的一个不错的框架。我花了很多时间用 C# 重写 XNA 中的现有逻辑。此外,服务器是用 C# 重写的,2011 年底我再次启动并运行了一个新版本。您可以通过Youtube 上的预告片大致了解当时游戏的情况。
在 2012 年初,我什至在 Rising Farms 的地图编辑器中使用了基于 Web 的 UI,您可以在此视频中看到。也许您还记得那些 jQuery UI Accordion 元素。😅
然后是长时间的休息。我忙着完成学业并与朋友们一起玩耍。
Rising Farms 可以在浏览器中运行吗?
这段漫长的休息时间一直持续到 2013 年中期。虽然我休息了一会儿,但我从未停止过对 Rising Farms 的思念。我仍然想进一步推动它,当我在 2013 年 6 月完成学业时,我有足够的时间再次拾起它。
在学校我学习了 HTML5。它是新来的,甚至可以在画布上绘图,甚至使用 WebGL 来渲染具有相当好的性能的图形。我不希望 Rising Farms 成为一款典型的浏览器游戏,您可以通过用户界面来玩弄数据。它应该是一款玩家可以与世界以及周围其他玩家互动的游戏。但我想:如果这在浏览器中是可能的,为什么不呢?
此外,当时我仍然遇到 C# 客户端的问题:为用户带来更新。当然,也有解决方案,但我尝试编写自己的更新程序应用程序,正如您在《魔兽世界》或《英雄联盟》中所知道的那样。它也有点用,但我对这个解决方案从来没有 100% 满意。如果游戏在浏览器中运行,我只需要提供最新的资源即可:用户在最新版本上运行,不再有过时的客户端。
让我们押注于 JavaScript
所以我着迷于在浏览器中运行游戏的想法。因此,我需要更多地了解 JavaScript、它的可能性以及我可以用它做什么。有很多新东西需要学习:WebGL、WebSockets、播放声音、捕获键盘和鼠标事件、研究 DOM。一个全新的世界打开了:网络开发的世界,我和今天一样喜欢它。
我在做这一切的过程中获得了很多乐趣,我什至无法用语言来表达。当时我使用Google Closure来构建客户端。像 React 或 Angular 这样的框架当时还不存在,但 Closure 已经提供了很多机会。它带有依赖注入和编写 UI 组件的可能性,我对此非常满意,尤其是因为我不知道其他任何东西。
为了渲染游戏本身,我使用了pixi.js,这是一个 2D 渲染引擎,如果浏览器支持它,它就会使用 WebGL,甚至还有“正常”画布渲染的后备。这是一个很棒的框架,让我的生活变得更加轻松,我什至今天会推荐它,因为它仍然在维护中!
让我们完全押注于 JavaScript
好吧,我很清楚:我想用 JavaScript 编写客户端,并且它应该可以在浏览器中执行。我不想编写一个典型的浏览器游戏,但 HTML5 带来的变化让我有可能创建一个可以在现代浏览器中体验的精彩游戏,没有任何缺点。
现在问题来了:服务器呢?VB6 和 C# 解决方案的优点是我只需编写一次 DTO,然后它们就可以在客户端和服务器上使用。最初,我的计划是重用现有的 C# 服务器,JavaScript 客户端上的 WebSocket 可以连接到该服务器。然后我要么需要找到一种方法从我的 C# DTO 中创建 JavaScript DTO,要么只编写两次。
但后来我听说了 Node.js,并且 JavaScript 可以在服务器上执行😱。我想:这可能正是我所需要的。我对它进行了更多的挖掘,并且很快就爱上了它。我可以再次在客户端和服务器上重用相同的 DTO,并重用一些逻辑。
我好开心
接下来是一段美好的时光。从 2013 年 6 月到 2014 年 2 月,我在 Rising Farms 度过了很多时间。学业完成并服兵役(2013 年 9 月开始)时,我很幸运也有很多空闲时间可以用来开发我的梦想游戏。它不仅仅是游戏的客户端和服务器,我什至构建了一个单独的编辑器应用程序,可以在其中管理所有游戏数据,包括功能齐全的地图编辑器。
抱歉,我不想在这里炫耀。我只是在写这篇博文时再次经历了这一切,并想强调当你致力于真正为之奋斗的事情时,你内心会迸发出强烈的热情。
此外,社区也真诚地支持我。如果有人鼓励你并等待下一次更新,这绝对是一个巨大的动力提升。我记得发布那天有 20 个人在游戏中走动并一起玩。美好时光!
2014 年,当我开始第一份全职工作时,一切就结束了
你看,我可以无休止地写我的第一个业余项目。这是我梦想的项目,我仍然时不时地想起它。但到了某个时刻,我不得不停止对其进行开发。那是我开始全职担任软件开发人员的时候。
此外,我和我的妻子(当时我们还没有结婚)搬进了我们的第一套公寓,许多新的责任突然出现,为什么我不得不停止瑞星农场的开发。其实真正的“停止”是在一两年之后,因为在此之前我永远无法真正彻底地完成它。我进行了重构,例如从 JavaScript 到 CoffeScript - 从未完成。然后从 JavaScript 到 TypeScript,从 Google Closure 转向使用 React 作为用户界面 - 从未完成。在特定的时间我不得不结束它。但说实话,直到今天我才完全完成它,因为域和服务器,包括网站、论坛和游戏本身仍在运行。我想我仍然无法完全关闭它,因为也许……有一天……我又有时间了——我不知道。😅
但即使我从来没有找到时间,或者继续进行另一个类似的项目,该网站仍然在线并且我可以参考它,这很酷。
概括
哦,这是一次穿越过去的美好旅程,感谢您阅读到最后,因为这个故事对我来说意义重大。在撰写这篇博文时,我再次意识到我在那段时间学到了多少东西,以及它如何真正使我成为今天的开发人员。我非常感激那段时光,也让我找到了对这个项目的热情。最终,它引导我从事网络开发,直到今天我仍然喜欢这样做。
所以我怎么强调都不为过:如果你对某件事充满热情,就开始做它,你会变得越来越好。每个人都是不同的。有些人通过音频学得更好,有些人通过视觉学得更好。对我来说,通过实践我能学到最多的东西。通过尝试现有的事物,从不同的角度观察它们并尝试了解它们是如何工作的。如果你还可以创造一些与你相关的东西,美丽的事物就会出现。
现在我又经历了这样的蓬勃发展。我正在追求我的梦想,即创造一种为其用户带来巨大价值并在经济上有利可图的产品,以便我和我的家人可以靠它生活。我和我的朋友 Anki 一起做这件事,我们在 Twitter 的创客社区中很活跃,这非常有帮助和鼓舞人心 - 请随时加入我们!🙌
转发来源:https://dev.to/dominiksumer/how-my-first-side-project-made-me-the-developer-i-am-today-23gm