Don't you just hate that feeling as a programmer
when you're supposed to know something? But don't. in today's video, I'm going to go through
35 different programing technologies you an explanation on what they are
and why you need them. I have an awesome idea for a startup A to do list application. it can help with productivity. And I found a ton of Python
tutorials online. So where do we get started? Less mapped out. First the exciting part. What are the users going to see? HTML is a markup. Language used to structure content
and text in your browser. It uses tags to help you structure
and organize different elements on your screen. for example, you can have a table tag to create a table
or a P tag to create a paragraph. You can even hold a div tag
that can hold elements together. Ishmael is very basic,
and if you just create each HTML file and put it open on your web
browser, it's going to look super ugly. the document object model, also known as the DOM is created when the HTML page
is loaded into the web browser. web browser, like Chrome, Firefox and etc. passes through this table and creates
this dom it's a tree like structure and memory used for each element,
attribute, of text, etc. You'll understand why the browser
will need this in a moment. so since your HTML sites are really ugly. Sorry again,
you need access to style. It. You can control the fonts, layouts, colors and basically any visual
aspect that you want within any HTML file. and since its name is cascading, it
prioritizes hierarchy
and inheritance within each other element And you can either put this inline
or through a whole separate CSV file. JavaScript is a high level interpretive programing language that's used on the web
in context of front end. JavaScript helps
you manipulate the DOM dynamically. See, I told you I'd come back to it. So if you wanted a button to change color,
then you can do that specifically with JavaScript. JavaScript heavily relies on events. So a lot of the code you would write in
these scenarios are functions
responding to user interaction. great. So we have a to do list application. I'm almost a millionaire. Well, people pay something that they can
only use while open in their browser. we would need something to execute code
consistently as well as remember who our users are. This brings us to back end technologies. So the difference between a server
and a client is huge. A client's computer could be more powerful
but is often unreliable. up 24 seven well usually and is able
to hold code that can be considered unsafe on the client's computer, like processing
credit cards or using API keys. are just computers optimized
for heavy workloads and being effort 24 seven Usually you access this
with the command line, which speaking of An operating system
is needed to be run on these computers, just like how you use
Windows Mac or Linux. You use Linux
and watching coding with Lewis servers need operating systems
in order to run the different programs that is required
to have an application like this. But good news Most of the world is run
on the open source Linux like 95% of them. you'll often find servers running ubuntu, debian,
red hot and more Linux distributions. I probably said some of those wrong. There are a ton of back end
programing languages that you can use. It's a bit of a nightmare
some popular options would be C, sharp, PHP, Ruby Python, etc. you know what programing languages do
and each have their pros and cons. role of these programing languages and more to come soon is okay,
so don't be commenting. is to provide the logic around
what your application is supposed to do. you have to process a credit card, run
some intense process or save something to a database,
you would do it with this language. Wait, databases missed that there
are a ton of databases to choose from. All basically do the same thing
on a really high level, If your users want to store their to do
list, you would need a database
to be able to store that on desk so that when they log in,
they can view that to do check off a task or delete something
depending on what database you choose. There's a lot of ways
you can structure this. Do things pros and cons of each,
but we'll get to that soon. great. I create a front end for the application
and a server side application. Wait, how do they interact
or talk with each other? now that you have your user interface
and your backend code, that works, right? Hopefully, how do we get them to connect with each other
and actually do something? Hypertext
transfer protocol is an application layer. Protocol to transfer text and other data
between a client and a server. a client will call you URL
or an IP address with a request method, which can be get post patch, put delete. the server receives this request
and then sends back and response back to the client, which can include
a status code and the data you requested. So think of it as the client
can always reach out to the server. The server can only reply
when it gets an FTP request to it. the worst that could well, lots web server softwares
like Apache or engine next are use as a proxy or load balancer
in your application. rather than it being your users connecting to an IP address with the port
to get directly to your app engine acts as a proxy to navigate
the request in the right direction so that there is privacy,
security and performance benefits. Don't just be raw, log in and FTP
So I have this script here called Tasker Pi that I want to run
when an ATP request comes in. There's got to be a better way
to deal with this, though. some of the most popular software
for programmers is back end frameworks expressed for no jazz Django or fast
API for Python Ruby on rails for Ruby are all softwares that do a lot of things, but are used primarily as a way to handle
ATP requests on a server. user sends a get request further list of notes on the server,
you can get those notes from your database and create HTML document that you can
then send back to the user. wow. So my website is getting really popular
by feeling really outdated. It just feels slow. And I hate how my web page reloads
every time. frontend frameworks are some of the most
popular things available right now as Twitter about JavaScript frameworks
like React View or Stealth lets you build single page applications that are powered
by JavaScript in your browser. Once you access the page, JavaScript
then builds everything out. These applications allow users to
take actions without reloading your page. A much sleeker user experience
with better performance. Each framework essentially does the same
thing both with different pros and cons. the ecosystem for these are just massive
and you really can't go wrong with either. So just get started on Okay,
this makes my app feel so much better, but this is a social media
to do application. I found another tutorial for that. How can I get proper SEO traffic? social meet. A lot of these frameworks
often have a server side rendered version of these frameworks. necessary. Asphalt Astro or Linux
are all popular ways to use a JavaScript framework while getting the advantages of
maybe a server side rendered application getting hate mail
because we don't have a mobile app. Android and iOS
both have different ecosystems when it comes to developing
on each platform, SWIFT on iOS, which you need to use Xcode for
and Android studio with Kotlin. These languages are very similar
to C-sharp or Java, so brushing up on some skills might be needed
in order to get started with these. most of the SDK are similar in nature,
like you're going to be writing similar code
to listen for a button press here. However you have small little intricacies
with both. And do you really want to learn
on another programing like hum? Well, if you want to go one step higher,
there's options for that. uses a dart programing language
to let you create mobile apps that will then compile into both iOS
and Android alternatives. This means that you only need to learn one programing language
in order to compatible platforms. But you can go even higher level. you can use something like JavaScript with React Native or some other tool
to compile your apps into iOS and Android. I want to ship our application,
but it's too heavy and there's a ton of small steps
I need to run beforehand. For JavaScript, we use build tools that can remove our news import
statements, compress images, HDMI files, tree shake and compile
all of our JavaScript in one file as minified for faster loading and adding
all of these steps in before you deploy is often considered a build step,
which is like a poor man's compiler. I I just raised my series funding. I just hired three software engineers. But my code is a mess
and I can never deploy. I need to speed up. version Control. version Control. Options like Git allow developers to version their software in ways
that aren't destructive to the main code a visual standpoint, it works like a tree
where your main code base can be branched off. creates a clone of your software that can
be messed with in whatever way you like. you want to change branches,
everything is saved here. This then allows for merging of branches
We are using Microsoft Word to code now that you're
managing a ton of different softwares. You need an environment
in order to do all this. boilerplate
you have, the bigger the issues you have. Programing somewhere that helps you focus on creating new features
or fixing bugs rather than setting up environments
as needed. a lot of programmers get caught up on
how they should set up their environment. But just don't use word
been using JetBrains Ides since I start coding
all the way back in 2013, and I'm very excited
that they are sponsoring today's video. As you can tell, there are a ton of things
in software development that you have to keep up to date with
and manage on your own machine. I mean, we're barely through the list
that I'm doing right now on this channel. I'm always working on different projects
and need to have a proof of concept. Really quick. So with all these tools from JetBrains
Ides, I'm able to quickly prototype and validate my ideas fast with all of
their built in features provided. And this goes
for most programing languages. It tailors towards
a look and feel that you want. So if you're like me
and want all the bells and whistles available, like my version Control
Database Explorer and built in terminal, you can ball out if you want to,
or if you want something super minimal and distraction free,
you can easily toggle between that too. I've been using their
AI assistant recently to help me with my projects, which is
built into many parts of their software. We're already aware of things
like code completion in your IDE and context aware chat,
but even small things like suggesting a refactor or auto generating a commit
messages are surprisingly helpful tools. Now you've seen my other videos
where I use JetBrains to build these types of projects. So if you want to build
better software faster, then make sure you click
the link in the description to check out some of JetBrains Ides
that will work for you. Thank you
JetBrains Ides for sponsoring this video. I downloaded get. note you downloaded GitHub repositories hosted on places like GitHub is like a Google drive,
but users get instead. between get and GitHub is simple get is the software
you use to manage your code base. GitHub is like Google Drive,
but users get instead of a file structure And these repositories are often the most
sacred part of your entire project. ton of access to the app,
even through smart toasters, Okay. but we keep having to copy and paste code
at different areas. Rest APIs Are simple interfaces used for
a client to get information from a server. your application is structured
around your database, so rather than returning HTML or text,
you can create a structured output to return a standard data type
like XML or JSON, this way. Structuring things
means you can use a unified way to talk to all of your different clients
like desktop apps, mobile apps, web, rather than having to make something
brand new every single time. application is getting a ton of users
and a lot of the employees are starting to get really slow. Maybe switching programing languages
will help. I mean, there's a ton of options
you can go with. goes. Concurrency model lets you multitask
really easily. Russ Large type system
and memory management makes things go really fast
and a great developer experience. Community is often great
for these as well, but adding a new language adds
another level of complexity. So just remember that need
to spend two weeks deciding Who told you that? Really? It's working on my machine. Why isn't it working on the production
machine? containers lets you build on top of the Docker engine that will consistently create
the same environment every single time. If you have go go dependencies
and some other Linux dependencies creating a docker image
that will run on a Docker container makes it so that no matter what
it will always run the same everywhere. So I have a confession to make. My database was just an Excel spreadsheet
this entire time. What are my options? relational database plus everything
in tables, where the shines is at. These tables often have ways to relate
to each other, removing duplication so it can have one entry in the user's
table called Lewis and all of my tasks can be in
another table called tasks where only the relevant information
needs to be stored, creating a relationship between them
Relational database relies on structure. sequel, doesn't rely on structure
and often are document based. benefits here is that you often can accept
a large volume of data like analytics, setting sync and social media posts. rather than choosing between
which one I should use, you might use a combination of both,
which is more than okay. if your app is handling
real time calls, chat, whatever it is, and even a little bit of
latency is going to ruin the experience. Ready stores key value pairs in memory
rather than on death. So you can get access to values
much, much faster. So for scenarios
like real time applications, this is necessary as even though
going over one second will slow you down, But it's not like your To-Do
app has a real time chat app. Of course it does. I can use HTP right. case as an alternative protocol. It used to talk to a server. This starts between a handshake
on the client and the server. This handshake is a constant connection
that allows for messages to be sent between the server and client. Non stop. So instead of HTTP, once that handshake
is making, they can send as much messages as they want to each So how do I connect
to a machine that isn't yours? Like we know about VirtualBox
or remote desktop. But how do I connect to the command line? SSA, also known as secure Shell, lets
you securely connect to your servers command line. This is done through safe keys
and into passwords in order to make sure that the connection
is secure. Advanced Messaging. Queuing protocol is a application
layer protocol focused on queuing, publishing
and subscribing reliability and more. As you can tell,
we have a ton of different applications on different machines and different
computers, AMCU is a protocol used for these technologies
to reliably communicate with each other so that when a specific task is triggered,
it can be delegated to write So how many users should I have
for upgrading my servers? Well, how many users do you have? Like a million and a half. why are you hosted? there. But cloud seems like a mystery. Something you need to understand
thoroughly. But a lot of the services are just hosted versions of these items
that we've already described. Let's take a look object storage
is kind of exactly what it sounds like users are uploading images, files
and other things on their to do list. You need an actual place
to store those things. And with a regular hard drive,
you have to worry about scaling your storage access to that storage, just a complete mess
a cloud and just upload it, ignore Okay. How do I get these files to my users
all over the world? delivery networks are proxy servers
distributed globally so that no matter what, you can serve a file stream
or whatever your users want better and So you said I can scale my out
by putting up more machines, right? Yeah, that's Well,
I have 25 machines running, but only one machine is taking in all the traffic. boy. When you're using many different machines,
the scale, the amount of traffic your to do list out can take while you need
something to know where to put it. load balancers are machines and software dedicated to finding out
where to distribute the traffic. common way determines
This is health checks where a cs of the server's up
or If it's down, then it redirects it to another place. And this is one of the most key aspects
to any deployment. Making sure is up. a create 1
million task feature in our application. Now all of our servers are hung up, meaning
people can even use the application. why would anyone need queues and task workers are used to handle big task, but
not in a way that is immediately urgent. sometimes a user
will want to perform a request, but will know that it's not urgent
or needs to happen right away. will put these tasks into a first
and first out list for a task Worker performs a task in order. For example, a notification
doesn't need to be sent out instantly. It could wait a bit, you know. mistake. This software is a disaster to deploy. now deploying
your software is a whole different game. integration is the practice of building
and testing your software during development. I got that one from Wikipedia folks. This is often
used in a collaborative effort for when you want to find efficient ways
to build, optimize and test your code before it even hits
areas in your production environment. there's a lot of frameworks that exist
that make this much easier anyway. But I hate to say it,
you're going to have to test your code continuous delivery is another way
that this is achieved. Often used with continuous integration. This makes sure that the code you are
releasing is in a state where it can be released anywhere in an environment
like production, staging, whatever it is. How many times have you left
debug on somewhere? While this system is often used as a way to ensure that the entire process
of local development all the way to launching on a
server is seamless and easy. cloud, we don't want to
be clicking on user interfaces and stuff. We're programmers
here. That's not what we're built for. Infrastructure is code less. Developers write either code or markup languages to help them structure
how their infrastructures look. So, for example, you would want to deploy
a specific version of Redis in your branch. You would put that in the code base so that you can all the environments
aligned and predictable. And we're just scratching the surface. We have a ton. What happened to your to do app? I gave up. Why? have AI on our tech stack. Seriously?