除了日常工作之外,我还希望始终有一个正在进行的辅助项目,以保持我的技能敏锐。 这些不一定有用,也不必直接与我当前的工作联系在一起,但会分散您的精力,使他们花费一些业余时间。
通常,这些项目具有许多共同特征:
- 它们故意很小。
- 他们专注于单个定义的任务。
- 我尝试在它们上添加至少一个新颖性元素(语言,框架,编程范例)。
- 尽管这种情况并非总是会发生,但我需要了解进行这一工作的重点 ,否则很容易产生无聊。
我记得在大学期间,我开始编写ELF文件解析器(非常类似于readelf二进制文件),后来才意识到,使用内存映射而不是使用文件描述符打开文件会更好。
另一个示例是使用Ember.js和Laravel 5的简单的e-shop webapp。之所以选择Laravel,是因为我借用朋友的主机,所以我仅限于LAMP环境,尽管有可用的shell,但仍然能够安装node.js或任何我需要的内容(无需root,也没有额外的困难),后端非常简单,可以使用PHP。
给出这些示例的目的是要说明,多年来,我的想法更好或更坏(很多完全没用),但是我非常喜欢自己投入的时间。
然后,当我用尽它们的时候,当我解雇所有等待我的“ 可能的项目”积压而找不到任何值得开始的东西的时候,就完全绝望了。 如果没有足够的用处,那么花太多时间进行投资太复杂了。 如果有趣的话,它可能没有直接的应用程序,从而引起了焦虑(例如:ReasonML非常酷,但是我应该真正学习Typescript。); 如果它在现实中是“有用的”,则可能完全无聊(例如:用python / Selenium编写更好的单元测试)。
花大量的时间思考下一个要进行的项目并不少见。 由于这是一个反复出现的问题,因此我最终决定草绘一个思维导图,以描述我在寻找新事物时要经历的过程。


我将潜在的创意触发因素分为六组,分别用不同的绿色阴影着色。 一旦做出选择,“ 可能的动作”将以不同的橙色阴影显示,除了“选择堆栈”选择以外的所有颜色,我将在后面解释。
每个“ 构思触发器”代表一个特定的区域,当您要找到一个项目的构想时,您要重点关注该区域,每个“ 可能的动作”就是您相应地采取的动作。 值得注意的是,并非所有组合都有意义。
您想将空闲时间投入到对您目前所从事的工作有直接影响的技能上,因此贡献可以直接得到回报。 我倾向于注意的潜在领域是:
- 确定工作中使用的堆栈和语言:作为开发人员,我们使用的技术集群可能并不十分熟悉(您可能一无所知)。
- 您的后端可能是一系列微服务 ,这些微服务运行在用Ruby , Python和Go编写的Docker容器中,每个微服务都在Nginx服务器上运行,使用RabbitMQ进行消息传递,其中一个使用Redis进行一些缓存,而前端则使用React编写。 js和Typescript 。 即使您是“ Fullstack Developer”,您也不太可能在所有这些技术上都有精通的专业知识,因此使每个黑体字成为可能的挑战。
- 确定可以自动执行的重复性或烦人的任务:在开发人员(或任何IT工作)的日常任务中,通常有足够的空间来自动化任务,这为您识别过程中的薄弱环节(例如效率低下的构建过程)提供了良好的基础鉴于我自己的经验,以下示例可能会忽略:
-
npm link在单个项目中一次npm link多个存储库,或者在单个repo中嵌套npm link。 您可以为此编写工具! - 克隆相同的Docker准系统存储库,并且必须在各处更改代码以对其进行自定义。 您可以拥有一个docker模板,并使用自定义代码对其进行扩展!
- 一遍又一遍地手动进行一些Excel列的操作。 您可以为此编写脚本!
- 而且我相信您已经开始意识到其中的很多例子。
- 找出与您的工作尚不了解的流程:您可能是一名前端开发人员,负责编写提交,推送提交并忘了进一步的步骤,直到功能交付最终产品为止。 您知道有人编写了问答自动测试,并且一个名为TravisCI的东西执行了自动测试和构建,但是从来没有花时间来理解它。 这可能是学习您从未直接参与的软件交付过程中各个步骤的好切入点。
您可能正在寻找一份可能与您当前的工作相关的新工作,或者转移一点工作,或者处理从未使用过的全新领域。 尽管与计算机科学相关的工作通常具有共同的知识主线,但专业如此之多,以至于不可能精通所有这些专业。
但是,开发人员从一个滑到另一个的情况并不少见。 让我们举几个例子:
- 您是在Web应用程序中工作的前端开发人员,您意识到代码和体系结构中存在许多安全漏洞,因此您决定修复它们。 您对攻击者可以利用Web应用程序的多种方式越来越感兴趣,因此您开始了解它的相应安全措施( XSS , SQL注入 , RFI , LFI等。vs . CSP , CORS , 字符过滤等)。 )。 经过一番愉快的游戏后,您决定在网络安全方面找到更多的乐趣和目标,并希望跳到安全顾问/建筑师的位置。
- 您是一名后端开发人员,下一个任务是找出为什么数据库查询如此缓慢。 您开始享受数据建模和数据库管理的乐趣,并开始研究替代数据库: NoSQL , GraphQL , Triplestores等。并决定要担任DBA角色。
- 您是一个无聊的开发人员,无聊地等待着CD / CI周期,并决定创建自己的脚本集并尝试调整Travis,Jenkins或您的组织正在运行的任何内容。 您意识到自己喜欢脚本和DevOps,并想跳入这个角色。
清单可以继续下去,这些只是脑海中浮现的一些例子,用以说明好奇心使我们脱离常规角色后可能会发生的飞跃。
不断涌现出新技术,语言,框架等。它们中的大多数逐渐消失,但是好主意往往会留下来,并且它们往往源于从尘土飞扬的书架中抢救出来的旧计算机科学论文(函数式编程?)。 。
在日常工作中,您可能只是执行平凡的开发任务,但黑客新闻或lobste.rs中的某些主题经常出现,并开始引起您的共鸣。 如果他们呆了那么久,可能值得一看。 (我的个人名单)等主题:
- 区块链/以太坊
- IPFS
- Web组装
- 自然语言处理
- 机器学习(适用于任何东西)
- 无服务器
我个人觉得这个“ 想法触发器 ”是最难遵循的触发器之一,因为我需要立即了解它们的实际应用,并且也喜欢一起玩。 作为示例,我真的很喜欢WebAssembly的想法,但是我还没有看到用它进行实际的项目,并且我担心WebAssembly可能带来的潜在安全隐患(就像Flash一样)。
严格与上一个热门主题部分相关,但“ 特定技术”部分没有关注媒体中经常出现的,因此具有直接找工作相关性的技术,而是包含了您感到好奇并一直落后的技术。尽管不一定必须直接应用,但您的头已经很长时间了,更像是一般的“有用”氛围。
我个人列表中的一些项目是:
- Lisp
- ReasonML
- 榆树
- 开发利用
- 反应式编程
- 恶意软件分析
- 高级Shell脚本(sed,awk等)
- 了解操作系统启动过程以及如何将程序加载到内存中
同样,尽管享受是至高无上的,但坚持这些项目却很困难,因为我常常看不到时间和精力的直接投资回报。
迄今为止最容易坚持的。 如果您幸运地遇到了一个实际问题,并且意识到可以自动化或为其构建软件解决方案,那么您将成为金矿。 您有动机去制作新事物,并具有对自己或一群人有用的额外优势。
例如,您参加了附近的文化中心,而您注意到他们在管理活动方面遇到了一些麻烦,让人们知道了要约并提供了提出新建议的方式。 因此,您会袖手旁观,并决定创建一个Web应用程序来涵盖这些用例。
要获得解决真正问题的人的启发,您可以查看Indie Hackers ,他们有很多不错的项目可以展示。
该方法不是寻找给定的技术来学习,而是采用相反的方法。 我列出了除计算机之外我感兴趣的其他领域的列表,例如:
- 隐私
- 言论自由
- 摩托车
- 学习新的口语
- 不同形式的教育
然后从该列表中寻找一个解决给定主题或多个主题的项目。
在概述图中,每种想法触发器都有一种或多种可能的方法来开始积累知识。 这些是可能采取的措施。
建立和运行主题的一种简单明了的方法是遵循在线课程。 如果您想要过滤,整理和结构化的内容,这是很好的,因为其他人已经为您处理了。 这种方法的缺点是您仍然必须过滤它是否有用和值得遵循,并且并非所有值得学习的课程都是免费的。
通常,您可以在线选择多家大学和平台提供的常规MOOC,也可以访问更特定的课程平台。 我过去使用的一些平台是:
- Coursera
- 未来学习
- 麻省理工学院开放式课件
- Udacity
- 版
- FreeCodeCamp
- 乌迪米
- 多元视线
- 蛋头
- 前端大师
Github提供了一个优秀的资源库来寻找想法,尤其是如果您不想从头开始一个项目,并且通过为已经开始的项目做贡献会更好。 通过单击“浏览”,您可以在开源社区中找到最新的趋势库,并能够通过您感兴趣的语言,框架和主题对其进行过滤。
假设我最初对安全性感兴趣,我想通过将Python应用于该主题来学习Python 。 在撰写本文时,我发现有一些有趣的项目属于此类,我很高兴为以下项目做出贡献:
- wifiphisher :一种安全工具,可用于创建恶意访问点并强制客户端进行身份验证和网络钓鱼凭据。
- AutoSploit :通过metasploit实现自动化大规模利用远程主机。
- Maltrail :恶意流量分析系统。
如图所示,Github提供了一个出色的“开源超级市场”,您可以在其中搜索各种各样的选项,并希望找到一个您能引起共鸣并愿意做出贡献的选项。
如果您清楚要跳转的主题或技术,那么找到一种实用的知识的好方法是寻找使用它们的实际初创公司或公司,或者只是专注于您感兴趣的主题在(例如:农业,隐私,电子医疗)。
这里有大量的工作门户网站,所以我仅举一个小例子:假设您确定要学习Haskell语言,并且对从事医疗保健事业非常感兴趣。 一个很好的开始方法是在StackOverflow和AngelList中查找具有haskell或功能性编程关键字的作业,然后开始微调搜索。
幸运的是,会有一些有趣的项目可供您查看,并且可能会为您提供一些想法。
参加代码挑战,代码阻塞以及诸如此类的事情,是使自己适应这种语言怪癖的好习惯,但是它们通常并不代表您在工作中可能遇到的实际问题或情况。 知道如何实现双链表或广度优先的树查找可能很酷,但是大多数此类问题早已解决,现在已成为标准库的一部分。
这并不是要低估它们的效用,事实证明它们在很多时候可以使我的技能保持精湛,这是难以置信的好,但是我宁愿做一些尝试解决实际问题的项目,即使这是一个众所周知的解决方案(例如主机端口扫描程序)。
它们很多,但是我曾经练习过的一些代码挑战网站是:
- 黑客排名
- 厨师长
- TopCoder
但是,我见过一个很小的提供这种实用的代码学习方法的方法,我真的很喜欢它: Hackattic 。
我经常这样做是出于一些小的想法,我对它们的含义有一个大致的了解,但从来没有花时间组织和理解它们,至少是基本原理。 很好的例子就是不 理解的 requestAnimationFrame , 理解PGP或javascript中的路由 。
该原理可以应用于任何您想了解的内容:如果您能够解释它,那就意味着您明白了。
还有许多其他方式可以启动附带项目,例如阅读书籍,但一开始就只是被证明对我没有用。 当我读一本关于某个主题的书时,它必须是我已经相当熟悉并且已经引起我真正兴趣的一本书。 las,我很快失去了兴趣。
我敢肯定,我在这里留下了很多很好的信息,在评论部分,欢迎任何评论和建设性批评。
玩得开心!