我从10年的个人项目中学到了什么

2021-03-17 02:29:05

大约10年前,我有很棒的工作。但随着我的技能增加,我意识到整个世界的可能性存在于日常职责范围之外。

所以我开始在业余时间的第一个项目上努力,从纯粹的好奇心。然后一个想法导致了另一个,我开始在第二个项目上工作。快进到2021年,我一直这样做超过10年!

要告诉你真相,这是我编程技巧中最大的差异化因素。从实施规范到建立Web应用程序和口译员,我以每种可能的方式成为一个更好的程序员。

所以让我很快介绍我的每个个人项目。我' ll跟进我在该过程中学到的内容。

每一个,然后,我' ll发布了一个更长的帖子,描述了每个项目的更大细节。但现在,这里的TDLR类似的摘要。

一架飞机票和汽车租赁价格预测器(2010-2011):思考Google航班的前身' s或skyscanner' s价格预测算法。我救了很多钱!

时间跟踪应用程序(2011):我将我的时间的记录自动化到我的雇主'项目管理系统中。

通用连接器框架(2011-2012):我创建了一个无法透明地查询XML和JSON Web服务的无代码工具。 我的Toastmasters Club' S网站(2013-2014):我完全重新设计了我的Toastmasters Club'■网站,没有多大的经验,与HTML,CSS或JavaScript有多经验。 更好的客户支持工具(2014-2015):我致力于一个完全更好的客户支持工具。 预算跟踪器(2014-2016):我创建了自己的预算跟踪工具,类似于薄荷,但对抱负的企业家量身定制。 在线工具包(2016):我在一个基于Web的命令行界面的想法汇总了许多常用工具(Base64转换,测试正则表达式等) 我的技术博客(2016年至今):我开始博客,你' re现在正在阅读成为一个更好的作家。 分布式Web爬网程序(2016-2017):作为一个巨大的数据分析项目开始的是开发我自己的分布式Web爬虫的原因。

以开发者为导向的搜索引擎(2017年):我享受了开发自己的开发人员的搜索引擎的想法。

一个新的Python解释器(2018-2019):我开发了一个CPython兼容的翻译,支持内置和用户定义的类型,类,元乘积,函数,装饰器,全面,发电机,例外,封闭,导入等。

新的Python类型检查器/ deferrer(2020-insive):i' m开发一个能够推断出类型的类型检查器,而无需类型注释。

致力于上述项目允许我以比其他可能的步伐更大的步伐。

我最好的项目想法有机 - 我没有积极地想出那些想法,而是遵循我的兴趣并试图解决自己的问题。我的在线工具绑定项目是一个教科书示例的构成想法(不是有机的)。

一般来说,我需要划伤自己的痒,以保持动力并继续前进。技术挑战将在路上众多,所以我不希望任何单一问题完全瘫痪或消除我。或者,如果我的唯一目标是学习新的东西,那么这可能足以让我保持动力。

如果我' m问道"你能用自己的工具吗?"我的答案是"没有"那么为什么其他人想要使用它?但是,我发现有时候我偏见了,我可以只是回复"是"这里的诀窍是问自己:如果其他人开发了同样的工具,我会用它吗?一个很好的例子是我的预算跟踪工具。我确实需要那个工具,但我当然没有想使用因隐私和安全问题而制定的任何这样的工具。

在回顾性中,我意识到我必须经历愚蠢的想法来发展一种可行的感觉,以及什么' t。一个这样的想法的一个很好的例子是我的在线工具包 - 它非常不切实际,没有成功的机会。此外,我一直提醒自己,没有人免于不切实际的想法 - 即使是Paypal'早期Palmpilot项目和Marc Andreessen'在任天堂平台上的计划是!

个人项目是完美的,可以在真正好奇的事情上工作,但是,常规工作'允许我坚持(因为它会被判断不相关或太冒险)。

我发现焦点非常重要。它'很容易在技术细节中丢失,或者从一个想法偏离,因为我以某种方式认为我有一个更好的想法™。我承认我与我更好的客户支持工具项目和我巨大的数据分析项目犯了罪。这里的主要问题是,认为甚至更好的想法™真的更好是纯粹的猜测。解决方案是:一个混合:a。首先工作,最重要的是我拥有自己,以便我理解问题 - 空间b。仅在深深感兴趣的问题上工作。通过早期与潜在用户或客户来说,更有效地测试我的假设。

我学会了在初创公司上没有关注太多。它不对我的一个项目是否成为或不一致;重要的是,我不在于在它关闭之前挣扎的坏主意来启动一个艰难的想法。对我来说,这很难做到,因为大约2012年,我读了几本有关的初创公司(包括精益启动),我被迷上了 - 我真的梦想着这个!

在验证我的想法1时,我意识到直接与人们说话是有助于获得宝贵的反馈,但我需要小心我与之交谈的那种人。如果我向那些&#39的人介绍我的想法。我谈论的人和#39;我在谈论什么(即人们不在我的目标细分市场,像朋友,家庭甚至陌生人一样),那么我收到的任何反馈都是如此最好的和最危险的危险。

作为程序员,我不是自然的商业导向。因此,当我需要很长时间基本上偏离编码时,我觉得有些东西缺失。例如,当我每天与几个潜在客户滚动时,它需要仔细准备,审查笔记和后续行动。我从商业角度迅速发展,但在我的程序员'我的思想,我没有创造任何价值。我发现的解决方案是将这些业务相关的任务混合在侧面的一些编码(适用于可能或不相关的项目)。

建立MVP(最低可行的产品)是一种快速排除愚蠢想法的伟大工具。有时候,我甚至需要一个mvp - 我只需要向' s足够知识的人解释我的想法(关于我的目标细分)。

我意识到识别何时枢转是非常重要的。有时,目前的想法形式是不可行的或现实的,但调整它只是一点点可能会进一步带来它。虽然,但是,知道何时完全放弃一个想法或项目更为重要。这正是我的通用连接器框架,我的在线工具框架和我巨大的数据分析项目2发生了什么。

我了解到,启动加速器/孵化器是有价值的,了解初创公司和创业的基础知识,但它们可以是一个巨大的回声室,他们可以让您处于不良方向。所有破坏和寻求投资 - 所有成本谈话都非常损害,老实说,因为你开始专注于错误的事情。

阅读书籍允许我了解这么多关于商业和初创公司的事情,这是关于客户的发展,心理学,营销或商业法。在那里,没有办法,我可以自己想出那些见解。

经历一连串的失败(即Don' T工作的想法)有时会真正令人沮丧。我发现,规避这种感觉的最佳方式是专门用于我个人拥有的问题,我真的很好奇和热情。因此,这种动机将追随,我赢得了'如果它基于未写的启动成功规则,它会感到失败。因为,好吧,我很开心,对吗?

我发现我越挖掘复杂,模糊和低级别的主题,难以实现困难的主题。例如,在广泛探索CPython' S CodeBase之后,我在探索平等或更大复杂性的码条时感觉更容易。

要富有成效,我通常坚持我最喜欢的编程语言,我使用我已经知道的内容。如果我没有知道我允许我做我想做的事,那么我只是学习我需要的东西,我用它。例如,我最初只知道C ++和C#。当我使用后者的前几个项目时,我意识到基于网络的项目需要比ASP.NET更好。因此,我学习了HTML,CSS,JavaScript,Python,烧瓶和反应。

当我希望深入了解引擎盖下的事情时,从头开始建立东西很有用。但是,在常规项目(或在工作的上下文中),除非他们'重新划分项目的内在部分,否则很少有意义地构建事物'核心功能的内在部分。一个很好的例子是我的通用连接器框架。

我发现设计良好的用户界面很难,很难。它可能是有趣和挑战,但它往往不值得努力,因为它不是我的专长。因此,虽然我能够为我的Toastmasters俱乐部开发一个漂亮的网站,但我决定坚持我的预算跟踪工具的React Bootstrap。

AS主要是Windows Developer,它'很容易与Linux生锈。所以我发现最好的解决方案是a)将我的项目部署到Linux VM和B)定期使用侧面的WSL。最终结果是我建立跨平台项目而没有太多的努力。

写作需要完全不同的技能而不是编程。它'为什么我开始这个技术博客以及为什么我维护个人编程期刊。我发现写作的习惯是澄清我的思想和跟踪我的研究结果和设计决策的好方法。同时,它'是分享我与其他人一起努力的好方法。

我了解到,使用低级工具(例如windbg或gdb)并没有比使用IDE更难或更可怕。随着时间的推移,使用它们成为第二种性质。

我在评估项目和范围内的情况下更好地变得更好,感谢在这么多个人项目上工作(例如,决定是否是必须的或善良的人)。

我发现在分析问题(或新技术)上花费更多的时间几乎总是值得的。我对所述物品的理解大幅增加,因此我急剧减少技术(或业务)风险。

单独工作时,头脑风暴可能是非常具有挑战性的,但我发现了一个非常有效的解决方案。首先,我以最清晰的方式在手头上写下问题。其次,我将每一个潜在的想法或解决方案写下,以及每个潜在的想法或解决方案以及每个人的利弊。最后,我挑选了最好的想法或解决方案,通常是最少的缺点。这种方法让我真的通过这个问题思考。

如果你在10年前告诉我,我将来会致力于努力,我可能会相信你,认为很多人都是不可接受的。

这是个人项目的魔力 - 你永远不会知道他们会领导你。如果你坚持不懈,事情可能会对你更好地锻炼,而不是如果你开始了。

如果我有一个建议给我20岁的20岁' ish self,它将是:"现在开始个人项目!"当然,我远未完成。毕竟,个人项目适合我一种推动我的界限并学习新事物。

那么未来对我来说是什么?我可以肯定地告诉你,但我当然爱我现在正在努力的我' m。

免责声明:此帖子包含一个亚马逊联盟链接,可以帮助我支付此博客的托管费用。

这些项目显然是浪费时间,因为他们允许我学习很多新事物(例如,在Linux上分布式系统和调试)。 ↩

这项工作是根据Creative Commons归因于Sharealike 4.0国际许可证的许可。除非另有说明,否则本工作中包含的所有源代码都在Apache许可证2.0下许可。