5 advanced coding projects to expose you to complex concepts

Bennett Garner
30 Nov 202210:23

Summary

TLDRThe video script discusses the most effective way to learn new technical skills through hands-on projects. It emphasizes that while tutorials and documentation can provide foundational knowledge, it is through actual project implementation that one truly internalizes and masters new skills. The speaker shares five advanced project ideas suitable for experienced coders looking to expand their expertise. These include an image manipulation project involving flood fill algorithms, a Docker project to containerize a full-stack application, building an OAuth authorization server with specific focus on PKCE and OIDC compliance, implementing a Sudoku solver with potential concurrency for efficiency, and finally, a data engineering project that involves creating an ETL pipeline to extract, transform, and visualize Twitter data. The projects are designed to challenge and enhance the viewer's understanding of complex topics beyond basic coding skills.

Takeaways

  • 📈 **Project-Based Learning**: The best way to learn a new technical skill is by doing a project, which allows you to internalize new skills through practical application.
  • 🎨 **Image Manipulation**: For advanced learners, a project could involve image manipulation, such as creating a program to perform a flood fill on an image, replacing the most prevalent color with another.
  • 🐳 **Docker and Containerization**: Building a full-stack web application using Docker can expose you to complex topics in containerization and deployment strategies.
  • 🔐 **OAuth and Security**: Constructing an authorization server using OAuth, including implementing the Pixie (PKCE) authorization flow and ensuring OIDC compliance, is a complex project that dives into security protocols.
  • 🧩 **Sudoku Solver**: Implementing a Sudoku solver can challenge your algorithmic skills and involve solving for multiple solutions or detecting unsolvable boards.
  • 🌐 **Data Engineering with APIs**: Creating a pipeline to extract, transform, and load data from an API, like Twitter, and then visualizing it, is a project that covers a range of data engineering skills.
  • 📚 **Documentation and Research**: For advanced topics, it's important to read the relevant documentation and research the technologies involved before starting a project.
  • 🛠️ **Algorithmic Complexity**: When undertaking projects, pay attention to the algorithmic complexity to ensure efficient solutions.
  • 📁 **File Manipulation**: Understanding how to manipulate files, such as working with JPEG images, is a key aspect of certain projects.
  • 🤓 **Concurrency**: Enhancing projects with concurrency can improve performance, such as processing multiple images or handling various Twitter feeds simultaneously.
  • 📈 **Bonus Challenges**: Pushing projects further by adding bonus challenges, like implementing JSON Web Tokens (JWT) for user authentication, can deepen your understanding of complex topics.

Q & A

  • What is the best way to learn a new technical skill according to the speaker?

    -The best way to learn a new technical skill, as per the speaker, is by doing a project. This involves building something with the new technology to internalize the skills being learned.

  • What is the first project idea mentioned in the script for learning advanced topics?

    -The first project idea is to create a program that performs image manipulation, specifically a flood fill. This involves selecting one color in an image and replacing it with a different color throughout the image.

  • What is the significance of using an algorithm with low algorithmic complexity in the image manipulation project?

    -Using an algorithm with low algorithmic complexity is important because it helps to perform the image manipulation task more effectively and efficiently, especially when dealing with large images or a batch of images.

  • Which image format is suggested to start with for the image manipulation project?

    -The speaker suggests starting with the JPEG image format for the image manipulation project.

  • What is the second project idea presented in the script?

    -The second project idea is about Docker and involves spinning up the entire stack of an application, specifically a web application, which includes a database, cache layer, web server, back-end API, and a JavaScript front end, all deployed together using Docker.

  • Why is Docker considered a complex and beneficial project to learn?

    -Docker is considered a complex and beneficial project because it is widely used across engineering teams, and learning about containerization and deployment can provide valuable insights into modern application development and deployment practices.

  • What is the third project idea that the speaker suggests for advanced learners?

    -The third project idea is to build an OAuth authorization server that adheres to the OAuth specification, specifically implementing various flows and learning about Pixie (Proof Key for Code Exchange) and OIDC (OpenID Connect) compliance.

  • What is the importance of implementing JWT in the OAuth 2.0 project?

    -JWT (JSON Web Tokens) is important in the OAuth 2.0 project because it is used to securely transmit information between parties as part of an authorization process. It allows for the passing of user information back to the final application in a secure manner.

  • What is the fourth project idea mentioned in the script?

    -The fourth project idea is to implement a Sudoku solver, which is a program that can fill out and solve a 9x9 Sudoku grid given a partially completed puzzle.

  • What are some additional considerations for the Sudoku solver project?

    -Additional considerations for the Sudoku solver project include using concurrency to solve the puzzle faster, detecting multiple solutions, and determining if there is no valid solution for a given Sudoku board.

  • What is the fifth and final project idea presented in the video script?

    -The fifth project idea is to pull data from the internet, specifically tweets from Twitter, and orchestrate this process as an Airflow task. This involves using the Twitter API, scheduling the data pull, and performing an extract, transform, load (ETL) pipeline to clean and visualize the data.

  • Why is Apache Airflow mentioned in the context of the fifth project idea?

    -Apache Airflow is mentioned because it is a platform used to programmatically author, schedule, and monitor workflows. It is suitable for the fifth project idea as it allows for the orchestration and scheduling of tasks related to pulling and processing tweets from Twitter.

Outlines

00:00

🚀 Advanced Coding Projects for Skill Enhancement

The paragraph introduces the concept that engaging in projects is the most effective way to learn new technical skills. It emphasizes the importance of hands-on experience rather than just tutorials or documentation. The speaker proposes five advanced projects suitable for those who already have coding experience and are looking to delve into more complex topics. The projects are aimed at internalizing new skills and understanding advanced concepts through practical application.

05:01

🖼️ Image Manipulation and File Handling

The first project idea involves using a coding language to manipulate images by performing a flood fill operation. This involves selecting the most prevalent color in an image and replacing it with another color. The project also touches on file manipulation and the intricacies of image formats like JPEG. An advanced challenge is to modify the program to work concurrently on a batch of images, performing multiple flood fills for different colors.

10:04

🐳 Dockerizing a Full Stack Application

The second project focuses on using Docker to containerize a full stack web application, which includes a database, caching layer, web server, back-end API, and a JavaScript front end. The goal is to deploy all components together using Docker and to understand the concepts and terms associated with Dockerization. This project aims to provide a deep understanding of containerization and deployment, which are widely used in engineering teams.

🔐 Building an OAuth 2.0 Authorization Server

The third project is about creating an OAuth 2.0 authorization server from scratch or using a library to facilitate user authorization in an application. The speaker highlights the importance of implementing various OAuth flows, specifically Pixie (Proof Key for Code Exchange - PKCE), and ensuring OIDC (OpenID Connect) compliance for modern web applications. The project also introduces JSON Web Tokens (JWT) for securely transmitting user information, offering a comprehensive learning experience in security protocols.

🧩 Implementing a Sudoku Solver with Algorithmic Complexity

Project four challenges the developer to implement a Sudoku solver that can fill out and solve a 9x9 grid given a partial solution. The project aims to test the developer's ability to handle algorithmic complexity and edge cases, such as detecting multiple solutions or identifying an unsolvable board. Bonus points are given for using concurrency to solve the puzzle faster, making this a fun and intellectually stimulating project.

📊 Extracting and Visualizing Data from Twitter

The final project involves pulling data from the internet, specifically tweets from Twitter, and processing them through an extract, transform, load (ETL) pipeline, possibly orchestrated with Apache Airflow. The developer is tasked with authorizing access to the Twitter API, pulling tweets based on schedules or commands, and storing the raw data in a chosen data store. The project extends to cleaning and transforming the data into a digestible format for analysis and visualization, offering insights into data engineering and API interaction.

Mindmap

Keywords

💡Projects

Projects are the central theme of the video, emphasizing that they are the best way to learn a new technical skill. The video suggests that engaging in hands-on projects allows for the internalization of new skills, as opposed to merely reading documentation or watching tutorials. Projects provide practical application and a deeper understanding of the technology being learned.

💡Image Manipulation

Image manipulation refers to the process of altering images using coding languages. In the context of the video, the first project idea involves opening an image and performing a flood fill, which is a technique to replace a selected color with another throughout the image. This concept is used to illustrate how coding can interact with files and is a practical application of learning a new coding language.

💡Docker

Docker is a platform for developing, shipping, and running applications in containers. In the video, it is mentioned as a key technology for a project that involves spinning up an entire stack of a web application. Docker is significant for its role in modern software development, enabling developers to containerize applications for easier deployment and scalability.

💡OAuth

OAuth is an open standard for authorization that is used to grant applications limited access to user accounts on an HTTP service. The video suggests building an authorization server using OAuth, specifically implementing the Pixie (PKCE) authorization flow and ensuring OIDC compliance. This keyword is important as it relates to the security and authentication aspects of modern web applications.

💡Sudoku Solver

A Sudoku solver is a program that can solve a Sudoku puzzle, which is a 9x9 grid with a set of numbers already filled in. The video challenges viewers to implement a Sudoku solver that can fill out the grid completely, with additional complexity in handling concurrency and determining if there are multiple or no valid solutions. This project is a fun and engaging way to explore algorithmic complexity.

💡Data Pipeline

A data pipeline is a series of processes through which data is acquired, transformed, and then made available for consumption. In the context of the video, the final project involves creating an ETL (Extract, Transform, Load) pipeline to pull data from Twitter using the Twitter API, clean and transform it, and then visualize it. This keyword is central to the theme of data engineering and the practical application of data processing techniques.

💡Algorithmic Complexity

Algorithmic complexity refers to the efficiency of an algorithm, often expressed in terms of time and space complexity. The video touches on this concept in the context of image manipulation and Sudoku solving, where efficient algorithms are crucial for processing data quickly and effectively. Understanding algorithmic complexity is key to optimizing the performance of software projects.

💡File Manipulation

File manipulation involves the ability to create, modify, and handle files using a programming language. The video discusses this in the context of image manipulation, where understanding how to manipulate files is necessary to replace colors in an image format like JPEG. This concept is fundamental to learning how to work with various types of data in coding projects.

💡Concurrent Processing

Concurrent processing refers to the ability of a computer program to handle multiple tasks simultaneously. The video suggests using concurrent processing to improve the performance of the image flood fill and potentially the Sudoku solver. This concept is significant as it relates to the efficiency and speed of processing large data sets or complex tasks.

💡API

An API, or Application Programming Interface, is a set of protocols and tools for building software applications. The video mentions using APIs, specifically the Twitter API, to pull data from Twitter. Understanding how to work with APIs is essential for accessing and utilizing external services and data sources in software development.

💡JWT (JSON Web Tokens)

JWT is a compact, URL-safe means of representing claims to be transferred between two parties. In the video, it is mentioned as a technology to be used for passing user information back to the application in the context of OAuth 2. JWTs are important for secure communication and are widely used in modern web applications for stateless authentication.

Highlights

Projects are the best way to learn any new technical skill.

Beginners can find numerous project ideas, but it's challenging for senior developers to find complex projects.

The first project involves image manipulation through a flood fill algorithm.

Focus on algorithmic complexity and file manipulation, especially with JPEG format.

Bonus challenge: Modify the flood fill program to work concurrently on a batch of images.

The second project is about using Docker to containerize and deploy a full stack web application.

Learn about Docker, containerization, and deployment through building a web application stack.

Project three involves building an OAuth authorization server with different flows, including PKCE.

Ensure the OAuth 2 implementation is OIDC compliant and use JWT for passing user information.

The fourth project is implementing a Sudoku solver with potential use of concurrency for efficiency.

The Sudoku solver should be able to detect multiple solutions or the lack of a valid solution.

The fifth and final project is an ETL pipeline to pull data from the internet, such as tweets from Twitter.

Use Apache Airflow to orchestrate the task and consider using the Twitter API for data extraction.

Store the raw tweet data in a chosen data store and perform data cleaning for better analysis.

The projects are designed to push understanding beyond beginner levels and expose learners to complex topics.

Each project comes with its unique set of challenges and opportunities for learning advanced concepts.

The presenter encourages learners to enjoy the process and look forward to the next video.

Transcripts

play00:00

hey everybody welcome back to the

play00:02

channel today I want to talk a little

play00:04

bit about the best way that I know to

play00:07

learn a new technical skill

play00:11

projects are the best way to learn any

play00:14

new technical skill you can learn a

play00:17

little bit about from tutorials or from

play00:19

reading the docs or something like that

play00:21

but really the way you're going to

play00:22

internalize the new skills that you're

play00:24

learning is by doing a project actually

play00:27

building something with the new

play00:29

technology that you're trying to learn

play00:32

fortunately for beginners there's a ton

play00:34

of project ideas and prompts out there

play00:37

for new coders people who are new to the

play00:39

industry but how do you learn those much

play00:42

more advanced topics

play00:45

it's more difficult to find

play00:50

complex projects things that would

play00:53

really apply to a senior developer

play00:55

somebody who already knows how to code

play00:56

but is trying to learn a new interesting

play01:00

technology so today I want to share with

play01:03

you five Advanced topics Advanced

play01:07

projects that can expose you to some

play01:10

much more complex topics these are not

play01:12

beginner projects these are projects for

play01:15

people who already know how to code and

play01:16

want to learn more so let's get into it

play01:20

um the first project that I want to

play01:23

bring up is a program that does a little

play01:27

bit of image manipulation so you might

play01:30

be surprised but basically any

play01:33

um

play01:33

coding language that you choose has some

play01:36

type of way that they can interact with

play01:38

files and that means that you can edit

play01:41

images in your coding language of choice

play01:44

so this first project idea is to open an

play01:49

image and perform what's called a flood

play01:51

fill basically select one color in the

play01:54

image and replace it for a different

play01:57

color in that same image so find the

play02:00

most prevalent color that's in that

play02:02

image what what color appears the most

play02:04

and then replace that color everywhere

play02:07

in the image with another color now

play02:09

there are algorithms that will help you

play02:10

do this more effectively than others so

play02:14

it's worth paying attention to the

play02:16

algorithmic complexity when you're doing

play02:18

this project that's one piece of this

play02:20

project the other piece is file

play02:22

manipulation it'll get you a little bit

play02:24

more into the complex topics of file

play02:26

manipulation how jpeg actually works to

play02:29

replace colors

play02:31

um I would say jpeg is probably the best

play02:34

image format to start with here for this

play02:36

thing and then bonus points like if you

play02:39

want to take this project even further

play02:41

make that same program that performs the

play02:44

flood fill work concurrently on a whole

play02:46

batch of images so if you have many

play02:48

images perform multiple flood fills for

play02:51

a different color

play02:53

so there's your first project

play02:56

number two

play02:58

is about

play03:00

um

play03:01

Docker and spinning up the entire stack

play03:05

of an application specifically what I

play03:08

have in mind is a web application but

play03:10

you can do it for any type of

play03:12

application as long as you're learning

play03:14

about containerization Docker and how

play03:17

you might deploy those as well so for my

play03:21

project that first comes to mind is a

play03:24

web application it should have a

play03:26

database

play03:28

cash layer something like redis an nginx

play03:32

or Apache web server that's actually

play03:34

serving the things

play03:36

a a back-end API web server and a

play03:41

JavaScript front end that should all get

play03:45

deployed together in a Docker file and a

play03:49

Docker compose dot yaml so if you've

play03:52

never played around with Docker some of

play03:55

those terms may be new and you may not

play03:56

heard of any of them but go read the

play03:58

docker docs and then try to build

play04:00

something a full stack application

play04:02

within Docker containerize an entire

play04:05

application so there's a complex project

play04:07

and Docker is so huge it's so widely

play04:10

used across all engineering teams right

play04:12

now that you'll learn a lot from that

play04:14

project so that's your second project

play04:16

project number three number three is use

play04:21

a library or or you can build it from

play04:23

scratch but a library is going to make

play04:25

this a lot easier to build an oauth to

play04:28

to authorization Services an

play04:31

authorization server a way that somebody

play04:34

can authorize to your application using

play04:36

the oauth specification

play04:39

specifically you should Implement all

play04:41

the various flows and start learning

play04:43

about how oauth Works to exchange

play04:45

authentication and you know different

play04:48

tokens

play04:49

but specifically I think the most

play04:52

important one to learn about for modern

play04:54

web applications is Pixie authorization

play04:57

which stands for proof key for code

play05:00

exchange so pkce and people end up

play05:05

pronouncing that as pixie but pkce

play05:07

authorization should be like one of your

play05:10

goals for this application this

play05:12

authorization server you're building and

play05:15

make sure that it is oidc compliance so

play05:19

there's another term that you may not

play05:21

have heard yet but go read the oauth 2

play05:25

docs specifically read about Pixi pkce

play05:28

and and oidc to learn a lot more about

play05:32

the security that happens when you

play05:34

authorize with a server with a with a

play05:37

resource and and

play05:40

for kind of bonus points or or actually

play05:43

just

play05:44

a full implementation of oauth 2 with

play05:48

the Pixy flow oidc compliant use Json

play05:52

web tokens to pass the ID token back the

play05:56

the user information back to the final

play05:59

application so JWT usually pronounced

play06:02

jot is another important technology to

play06:05

know about and that's another Advanced

play06:07

topic that you're going to get exposed

play06:09

to by doing this project so there's a

play06:11

ton there Pixi oidc JWT

play06:15

and oauth 2 generally you're going to

play06:18

learn a ton from doing that project okay

play06:20

so that's project number three project

play06:22

number four here's another idea is to

play06:26

this one's kind of a fun one Implement a

play06:29

Sudoku solver so if I give you a Sudoku

play06:33

puzzle which is a 9x9 grid with a couple

play06:35

numbers in it you'll be able to fill out

play06:37

and solve the Sudoku puzzle if you don't

play06:41

know what a Sudoku is you'll have to go

play06:45

do a little bit of Googling to figure

play06:46

that out but a Sudoku solver should be

play06:49

able to fill the Grid in entirely

play06:52

um bonus points if you can use some type

play06:56

of concurrency or somehow break the

play07:00

problem down a little bit

play07:02

to be able to solve it faster so there's

play07:04

some algorithmic complexity here there

play07:07

also is

play07:10

um

play07:11

like a complexity around whether or not

play07:14

the board can actually be solved so

play07:16

there are cases in Sudoku where you

play07:19

might have a board with a few numbers

play07:21

and there is more than one solution

play07:24

um so your application should be able to

play07:26

detect that should be able to tell what

play07:28

the multiple Solutions are your

play07:31

application should also be able to tell

play07:33

if there is no valid solution for a

play07:36

given Sudoku board

play07:38

so go check all of those things out see

play07:41

if you can create a Sudoku solver

play07:44

that solves the problem as quickly as

play07:47

possible to complete the Matrix but then

play07:50

also check does the board have more than

play07:52

one solution and does the board have no

play07:55

valid solution so check those edge cases

play07:57

as well so that's project number four

play08:00

Sudoku solver I mean you could do that

play08:02

on the command line or anywhere you want

play08:04

project number five this is the final

play08:07

project I'll cover in this video

play08:09

is

play08:11

um pulling

play08:12

some type of data from some Source on

play08:15

the internet my idea is to pull tweets

play08:18

from Twitter

play08:19

so let's think about this though in

play08:22

terms of an extract transform load data

play08:27

pipeline so let's write it and

play08:31

orchestrate it as an airflow task if you

play08:33

don't know about Apache airflow you're

play08:36

gonna have to go Google that and figure

play08:37

out the the details there read the docs

play08:39

for airflow how can you authorize to the

play08:44

Twitter API and pull tweets

play08:47

either using a schedule like once an

play08:50

hour or once a day or maybe you just run

play08:53

it as a command on the command line and

play08:56

then try to pull those tweets

play08:57

concurrently for various Twitter handles

play09:00

like maybe you're gonna track certain or

play09:02

handles or hashtags or whatever you'd

play09:04

like so you could follow certain people

play09:06

or you could follow certain topics you

play09:08

could pull all the tweets that have

play09:10

happened in the past hour that have come

play09:12

from a given

play09:13

handle or a given hashtag and then save

play09:17

those raw tweet data to some type of

play09:21

data store so you'll have to pick which

play09:23

type of data store is going to work best

play09:25

for your application

play09:26

and then bonus points if you can somehow

play09:30

map reduce that data into a more

play09:34

digestible format

play09:36

clean up the data when you store it in

play09:39

your data store so do an extract

play09:42

transform load a whole Pipeline and then

play09:47

visualize it with some sort of analysis

play09:49

at the end of the at the end of the

play09:51

pipeline so this is a data engineering

play09:53

task but you're going to learn a lot

play09:55

about not just the Twitter API but also

play09:58

about

play10:00

how to extract data and then visual

play10:03

clean it up and visualize it

play10:05

so those are my five project ideas and

play10:08

they should give you plenty of complex

play10:12

topics that go beyond just beginner

play10:16

project ideas they're going to really

play10:18

push your understanding so hope you

play10:20

enjoy see you in the next one

Rate This

5.0 / 5 (0 votes)

الوسوم ذات الصلة
Advanced CodingTechnical SkillsProject-Based LearningImage ManipulationDocker ContainerizationOAuth AuthorizationData EngineeringApache AirflowWeb DevelopmentAPI Integration
هل تحتاج إلى تلخيص باللغة الإنجليزية؟