软件项目技术路线图
Continuing from my previous article, at this checkpoint, I have two things with me:
上一篇文章的后续内容 ,在这个检查点,我有两件事:
A primitive idea of what I want to build- Something related to applied AI, a framework that creates content, curates information, and interacts with social media.
我要构建的东西的原始想法-与应用AI有关的东西 ,这是一个创建内容,策划信息并与社交媒体进行交互的框架。
A reference job description that can help me convert my primitive idea into something more solid and industry-relevant.
参考职位描述可以帮助我将原始想法转变为更扎实和与行业相关的事物。
Now, let’s read through the description of the job profile I chose.
现在,让我们通读我选择的工作资料的描述。
Some highlights and thoughts-
一些亮点和想法-
- From the first image, you can see, we are almost doing what they want- We are self-directed, owning the problem end to end, and acquiring knowledge to get the job done. 从第一张图可以看到,我们几乎正在做他们想要的事情-我们是自我指导的,端到端拥有问题,并获得知识以完成工作。
So, OpenAI is building an API platform for its deep learning models. While I am aware of what an API is, even if you are not, you can easily find out via a simple google search.
因此,OpenAI正在为其深度学习模型构建API平台。 虽然我知道API是什么,但即使您不是,也可以通过简单的Google搜索轻松找到。
- From my basic understanding, I can deduce the simple architecture of my project. An application that can access the deep learning models via an API and obtain the results which can be used in our social media interactions. Whenever I build something I look at reusability, hence keeping each component separate would help in that. It is a good practice. 根据我的基本理解,我可以推断出项目的简单架构。 可以通过API访问深度学习模型并获得可在我们的社交媒体交互中使用的结果的应用程序。 每当我构建某些东西时,我都会着眼于可重用性,因此,将每个组件保持独立将对此有所帮助。 这是一个好习惯。
- I finalized that my first step would be in creating my own API service. Using this API service, I should be able to create the content I want. Once the content is created, we can have another module that will do something like posting it on social media, etc. 我最终确定,第一步将是创建自己的API服务。 使用此API服务,我应该能够创建所需的内容。 创建内容后,我们可以拥有另一个模块,该模块将执行诸如在社交媒体上发布内容等操作。
So, what tech stack do I use? I know python, but I noticed that OpenAI has a part of its codebase in Go (a programming language). I have never written even a single line of code in Go. So, I just googled, “Python vs GO, building an API”.
那么,我使用什么技术堆栈? 我知道python,但我注意到OpenAI在Go (一种编程语言)中有一部分代码库。 我从来没有在Go中编写过一行代码。 因此,我只是在Google上搜索“ Python vs GO,构建API ”。
- I got a bunch of good articles to read and understand why I should consider using Go. 我有很多不错的文章可供阅读和理解,为什么我应该考虑使用Go。
- To summarise the above articles, Go is better in terms of scale and performance. So, I have concluded that I will use Go for building the APIs. However, deep learning models may still remain in Python. I will explore how much of it I can make in Go, and how I can use Python functions directly in Go. In your context, at this stage, it is okay even if you do not know any programming language. Just understand the theoretical logic behind your choice. 总结以上文章,Go在规模和性能方面都更好。 因此,我得出的结论是,我将使用Go来构建API。 但是,深度学习模型可能仍保留在Python中。 我将探讨我可以在Go中制作多少代码,以及如何直接在Go中使用Python函数。 在您的上下文中,即使您不知道任何编程语言,也可以。 只需了解您选择背后的理论逻辑即可。
Next, it was mentioned that OpenAI’s services run on Kubernetes Clusters and are versioned in Terraform. I have never used them and have no idea about either of these. But I will explore to see if I can use the same tech to run my service.
接下来,提到了OpenAI的服务在Kubernetes集群上运行,并在Terraform中进行了版本控制。 我从来没有使用过它们,也不知道这两个。 但是,我将探索是否可以使用相同的技术来运行我的服务。
We now have a basic idea of what tech stack to use. And then I started looking into how exactly I should design my API? I decided to create a RESTful API. I just googled about it and here are some results (All of them from the first page of search results) I referred to.
现在,我们对要使用的技术堆栈有了基本的了解。 然后,我开始研究应该如何设计API? 我决定创建一个RESTful API 。 我只是用谷歌搜索,这里有一些我提到的结果(全部来自搜索结果的第一页)。
These articles are a great starting point on this journey (especially, the third one). It gave me some basic idea of what I should do next- Creating the API specifications.
这些文章是这一旅程的一个很好的起点(尤其是第三篇)。 它给了我下一步应该做什么的基本想法-创建API规范。
But, before that, I thought I will list down all the steps I should explore, and the questions I should ask myself along this journey- our road map.
但是,在那之前,我想我会列出我应该探索的所有步骤,以及在此旅程中我应该问自己的问题-我们的路线图。
- What deep learning models will I use to create/curate content- like news, art or poetry, etc? 我将使用什么深度学习模型来创建/策划新闻,艺术或诗歌等内容?
- How do I create a program that receives input required to be fed to the deep learning model, get the output I want, and send it back to me? 如何创建一个程序,以接收需要输入到深度学习模型的输入,获取所需的输出,然后将其发送回给我?
- What are all the different APIs related to deep learning that I need to make? What is the functionality of each one of them? 我需要制作与深度学习相关的所有不同的API? 它们每个的功能是什么?
- What are the APIs required for interacting with social media? For example, If I want to post the created content on Twitter, how do I do it? 与社交媒体进行交互需要哪些API? 例如,如果我想在Twitter上发布创建的内容,该怎么做?
- Once all of this is finalized, do the actual coding to build them. Notice that, still step 5, it is just me logically thinking what my product will do. If you are a non-tech person, just creating a solid product idea along with specifications and use cases in itself should give you a lot of experience in building something from scratch. You can actually pitch it to other developers and take the role of a product manager. 一旦完成所有这些操作,请进行实际编码以构建它们。 注意,仍然是第5步,这只是我从逻辑上考虑我的产品将要做什么。 如果您不是技术人员,只需创建一个可靠的产品构想以及其规格和用例本身,就可以为您提供从头开始构建产品的大量经验。 您实际上可以将其推销给其他开发人员,并担任产品经理的角色。
- How do I test my APIs after they are built? The debugging and enhancements. 构建API后如何测试? 调试和增强。
- How do I host my APIs in such a way that other people or applications can use it? 如何以其他人或应用程序可以使用它的方式托管我的API?
- The finishing touches, and packaging the project into a usable product. 最后润色,并将项目包装为可用产品。
Added to that, taking inspiration from the job description (Build tools to accelerate your own workflows), I have decided to make a User Interface for my APIs which can be used to configure different parameters and control how the APIs are used. For example, a UI where the user can generate content by simply clicking some buttons and then post it on their twitter from this application itself. This makes it easy to test the APIs as well.
此外,从工作描述(构建工具以加速自己的工作流程)中获得启发,我决定为我的API创建一个用户界面 ,该界面可用于配置不同的参数并控制API的使用方式。 例如,一个用户可以通过单击某些按钮然后将其从此应用程序本身发布到其Twitter上来生成内容的UI。 这也使测试API变得容易。
I will think about the tech stack I should use for the UI once I complete building my basic APIs. Overall, this should give some good full stack experience. You might think there is so much complexity here. I’m not going to lie, it can feel quite overwhelming. But stick to your idea. Ask all the hows and whats you can think of. It is okay even if you have a longer list of questions and no clue about the answers to any of them. The best approach for any project you do is to break it down into very small stand-alone tasks, as modular as it can get. Read through this series and you will get a grasp of what I mean.
完成基本API的构建后,我将考虑应该为UI使用的技术堆栈。 总体而言,这应该会提供一些良好的全栈体验。 您可能会认为这里有太多复杂性。 我不会说谎,它会让人感到压倒性的。 但请坚持您的想法。 询问所有的方式和想法。 没关系,即使您的问题列表较长,也没有任何答案的线索。 对于您所做的任何项目,最好的方法是将其分解为非常小的独立任务,并尽可能获得模块化。 通读本系列文章,您将了解我的意思。
For people just getting into programming and feel a lot difficult to proceed further, I would suggest you take up something on a much smaller scale. For example, if you are also thinking to make APIs, you should be good even if you create just one-two simple ones.
对于刚开始编程的人来说,很难继续进行下去,我建议您以较小的规模来学习。 例如,如果您还在考虑制作API,那么即使您只创建一两个简单的API也应该不错。
At this point, it is completely okay if you do not know about any of the programming lingoes. Search on google, one keyword at a time. Even I don’t know a lot of things. Notice that so far, we are just thinking in terms of the product we want to build, and given a particular functionality, I am asking myself, “How do I make it happen?”- And that is exactly what I am googling. I call this question based learning. It works very well for me, and I hope it does for you as well.
在这一点上,如果您不了解任何编程术语,那完全可以。 一次在Google上搜索一个关键字。 甚至我都不知道很多事情。 请注意,到目前为止,我们只是在考虑要构建的产品方面,并且考虑到特定功能,我在问自己:“ 我如何实现它? ”-这正是我在谷歌搜索的内容。 我称之为基于问题的学习。 它对我来说效果很好,我希望对您也一样。
If you are following the self-learning technology program along with me, here is a checklist for you at this stage.
如果您和我一起学习自学技术计划,那么现阶段这是一份清单。
- You now know, what exactly your project will do. What is the input? What is the output? Where and how it will be used? In my case, my input is some instruction or data. This could be a prompt to create more content or get some specific content from elsewhere. 您现在知道,您的项目将执行什么操作。 输入什么? 输出是什么? 在何处以及如何使用? 就我而言,我的输入是一些指令或数据。 这可能会提示您创建更多内容或从其他地方获取某些特定内容。
- You know your tech stack. If you don’t know how exactly to work with them, at this moment, just knowing the names of these frameworks and the logical reason of why they were chosen should be enough. (For example, my reason for choosing Go) 您知道您的技术堆栈。 如果您现在不知道如何正确地使用它们,只需知道这些框架的名称以及选择它们的逻辑原因就足够了。 (例如,我选择Go的原因)
- You have a basic list of steps to follow or the questions you have to ask yourself to make this idea into a reality. I have listed down my questions above. 您需要遵循的基本步骤清单,或者要使自己的想法变为现实而必须问自己的问题。 我已经在上面列出了我的问题。
While I do have some deep learning experience, let us assume I don’t know anything about it. So, how do I proceed further? I am not going to do any online courses. My approach here is a little different. Moving forward I will be clearly dissecting my thought process to find answers to all the questions one by one and build the project.
虽然我确实有一些深度学习经验,但让我们假设我对此一无所知。 那么,我该如何进一步? 我不会做任何在线课程。 我在这里的方法有些不同。 展望未来,我将清晰地剖析我的思维过程,以寻找所有问题的答案,并建立该项目。
Find out more in the next article where I will make a more detailed project road map from this basic understanding.
在下一篇文章中找到更多信息,在此我将基于这种基本理解来制定更详细的项目路线图。
For more details about SLTP 2020, visit-
有关SLTP 2020的详细信息,请访问-
I have also created a peer to peer learning group on WhatsApp (Can be migrated to Telegram if more people are interested) to support your self-learning journey and the exchange of ideas and experiences with the community. There is a google form in the above article, which you can fill to get the invite link.
我还在WhatsApp上创建了一个对等学习小组(如果有更多人感兴趣,可以迁移到Telegram),以支持您的自学旅程以及与社区交流思想和经验。 上面的文章中有一个Google表单,您可以填写该表单以获得邀请链接。
翻译自: https://medium.com/the-research-nest/creating-a-basic-project-roadmap-4655929d5c96
软件项目技术路线图