4 lessons

Real World Engineering - How to Solve Problems

In this course we will cover how to think like an engineer so that you can solve hard problems that engineers face everyday.

Lesson 3

Choose the Right Tools

In this lesson we will cover how to chose the right tools for the job. Becuase without the right tools it will be impossible to solve the problem.

The right tools will depend on the problem you are looking to solve. Now that you have your problem clearly defined it is time to look for existing solutions. Often times the problem you are looking to solve is already solved, in some way at least. As you search the web for solutions keep your problem in mind. Each technology will have its trade-offs, but because you can refer to your user stories, it will be easy to see which of these tradeoffs you can accept.

Trade-Offs

The best technologies make tradeoffs in areas that are irrelevant to your use case. For example, by using a modern operating system you make the trade-off that you cannot specify exactly where in memory you are going to store your data easily. Of course, this is irrelevant to you because all you want to do is watch videos on the internet and chat with your friends. Choosing a tech stack that you will use to solve your user's problem is the same. With each technology examine tradeoffs between

  1. Performance + Scalability (how fast does the tool run)

  2. Developer Experience (how simple, fast, and safe is the tool to use)

  3. Security (how secure is the tool)

  4. Cost (how expensive is the tool to use)

  5. Interoperability (does this tool make it easy to connect to other technologies)

Below are some common tools for some common needs:

User Interface

User interfaces are used to capture actions from users, like clicks and keystrokes, and show users' relevant information. Over the years there have been countless languages and frameworks to help engineers build user interfaces. The most commonly used language in the world for building user interfaces is now Javascript.

  1. React + NextJS (NextJS lets you statically generate and SSR React)

  2. Angular (starting to be eclipsed by React and NextJS)

  3. Typescript (Javascript only with types)

Developer Environment

When building software, the engineer needs somewhere to put everything together. They need a workbench. Usually, the engineer will have a computer or a laptop that is called their Local Environment. Eventually, the system they are building will run on far more powerful computers called the Production Environment. But for now, they will build the system locally. There are several tools that are helpful for local development.

  1. VS Code (allows you to edit code, and input commands via an integrated terminal)

  2. Docker (allows you to run a variety of images for things like databases, and slim operating systems in portable containers, in other words, it doesn't matter if you're on a Mac, PC, Linux machine)

  3. Node (allows you to run javascript on your computer outside a browser, this is where you will interact with databases, and other applications)

Persistence

Since our brains hold a finite amount of data, we rely on computers to store information on our behalf. You can find copies of these technologies that you can run on your own computer or on a cloud provider like AWS.

  1. Postgres (an open source SQL database that most startups use -- to run a local Postgres environment check out https://hub.docker.com/_/postgres for the official Postgres image)

  2. MySql (an open source SQL database)

  3. Redis (in-memory database good for messages)

  4. AWS DynamoDB

Storage

  1. AWS S3 (a cost-effective way to store any file type of any size)

Data processing

Locally, you can run your backend using node directly on your computer but most use cases require more performance to handle many users. In this case, you will deploy (upload) your code to a cloud provider (a company that rents you computers). Below is a list of a few providers that we use:

  1. AWS Lambda functions (allows you to run code at near unlimited scale)

  2. AWS EC2 (rent a powerful computer from Amazon)

  3. Vercel Edge functions (run a limited set of Javascript on the Edge)

Machine Learning

Just as with databases, researchers have spent a huge amount of time, energy, and money that we can leverage to the advantage of our users. Instead of writing a NN from scratch, you can leverage the following libraries written in Python.

  1. Tensor Flow

  2. Pytorch (used by the academic community and starting to eclipse tensor flow)

Looking forward to meeting you.

Email us now at
info@raidoninc.com

433 Broadway Suite 404, New York, NY 10012

© 2022 Raidon Inc. LLC. - Build The Future, All Rights Reserved.