<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: arking115</title>
    <description>The latest articles on DEV Community by arking115 (@arking115).</description>
    <link>https://dev.to/arking115</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1184952%2Feb2340d7-0188-4f0e-98d8-1981125a5506.jpeg</url>
      <title>DEV Community: arking115</title>
      <link>https://dev.to/arking115</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arking115"/>
    <language>en</language>
    <item>
      <title>Swift Roadmap (includes explanations, examples, visual examples and resources) - iOS Development</title>
      <dc:creator>arking115</dc:creator>
      <pubDate>Fri, 10 Nov 2023 09:41:05 +0000</pubDate>
      <link>https://dev.to/arking115/swift-roadmap-includes-explanations-examples-visual-examples-and-resources-ios-development-feb</link>
      <guid>https://dev.to/arking115/swift-roadmap-includes-explanations-examples-visual-examples-and-resources-ios-development-feb</guid>
      <description>&lt;p&gt;Hello, dev community! The past few weeks I've been hard at work on a Swift + SwiftUI Roadmap intended for those of you who want to learn about iOS Development, and in here you'll find all the knowledge for becoming a great iOS developer! Think of this as some kind of guidebook, but that actually wants to teach you something. Honestly this is something I wish I had when first starting to learn Swift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why bother?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, one of the key aspects of learning anything in this life is sharing knowledge with others. That's how the foundation of everything started, so I thought to myself that creating something like this would be amazing to pass down to the newcomers. Although this roadmap starts from a "level 0", there are a lot of more advanced concepts further down the line, so it can provide for everyone, even Swift developers that already have a lot of experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is the visual format of the &lt;a href="https://navigolearn.com/roadmap/swift-|-ios-development-40"&gt;roadmap&lt;/a&gt;. It has the complete documentation, explanations given in full, examples, visual examples, funny jokes and even intermissions. I strongly suggest you check it out!&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  DO KEEP IN MIND THAT THIS IS ONLY A PREVIEW, THE FULL ROADMAP WITH ALL OF THE EXPLANATIONS, RESOURCES, AND PROJECTS IS AVAILABLE IN THE VISUAL FORMAT
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;If you wish to contribute&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I know this may not be ALL the mountain that is Swift, but I tried to cover most of the important stuff. If you think I may have missed something very important, please do let me know. I really want EVERYONE to provide feedback and contribute to this roadmap, because as I said before: sharing knowledge is &lt;em&gt;key&lt;/em&gt;, and I wish you would share yours to help others too!&lt;br&gt;
Please consider creating an issue on our &lt;a href="https://github.com/NavigoLearn/RoadmapsMarkdown/blob/master/programmingLanguages/swift/Swift%20Chapters.md"&gt;GitHub&lt;/a&gt; if you have any kind of problem with the roadmap or you would like to see it updated with other stuff.&lt;br&gt;
Join our &lt;a href="https://discord.gg/xWZSHSKYAn"&gt;Discord&lt;/a&gt; if you wish to provide relevant feedback for the roadmap and interact with our team.&lt;/p&gt;

&lt;h1&gt;
  
  
  PLEASE GIVE FEEDBACK TO THE FULL ROADMAP IN THE LINK, AS I SAID THIS IS JUST A PREVIEW OF CHAPTERS AND RESOURCES, NOT THE FULL ROADMAP
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;0.About Swift&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Swift is a modern and versatile programming language developed by Apple as a means for developers to write fast, responsive code for building AppleOS applications (includes iOS, tvOS, WatchOS, and even the new VisionOS)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to learn&lt;/li&gt;
&lt;li&gt;Performant&lt;/li&gt;
&lt;li&gt;Open Source&lt;/li&gt;
&lt;li&gt;Rich Library&lt;/li&gt;
&lt;li&gt;Growing Job Opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1. Swift Fundamentals&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Comments&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics/#Comments"&gt;Swift Documentation for Comments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=2DODdEhsrWA&amp;amp;ab_channel=EmmanuelOkwara"&gt;How to better Document Swift Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Types in Swift&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt; Constants and Variables

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://www.youtube.com/watch?v=jRNa6hYTJLo&amp;amp;list=PLwvDm4VfkdpiLvzZFJI6rVIBtdolrJBVB&amp;amp;index=4&amp;amp;ab_channel=SwiftfulThinking"&gt;How to use Variables and Constants&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#Declaring-Constants-and-Variables"&gt;The Basics - Constants and Variables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Basic Types (bool, integer, string)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#Integers"&gt;Integers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#Floating-Point-Numbers"&gt;Floating-Point Numbers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=NbkPGvalyUU&amp;amp;ab_channel=DarrellRoot"&gt;Strings and Chars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#Booleans"&gt;Booleans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=zsjCrtENsZA&amp;amp;ab_channel=SwiftfulThinking"&gt;Tuples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/PDWNf4pBI64?si=Jy_ViWkKgt_BlXlG"&gt;Optionals !!!!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Type Safety and Inheritance

&lt;ul&gt;
&lt;li&gt; Swift is a Type-safe language, meaning you must keep track of a variable's type&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#Type-Safety-and-Type-Inference"&gt;Type Safety and Type Inheritance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Functions - very important!! And probably the core of Swift

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/kr3SSplrJlw?si=AZ_Vq4DBUsum3-JR"&gt;How to use Functions in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Primitive Data Types in Swift&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;ObjectOrientedProgramming is based on the premise that we design code around data and objects instead of functions and logic.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/XdZUVmqIkJE?si=0_ZoGvBmRxBVY2Wm"&gt;What is Object Oriented Programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Enums in Swift

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=YPUCML__Md8&amp;amp;list=PLwvDm4VfkdpiLvzZFJI6rVIBtdolrJBVB&amp;amp;index=11"&gt;How to use Enums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Structs in Swift

&lt;ul&gt;
&lt;li&gt;[How to use Structs](&lt;a href="https://youtu.be/gRKlprUj-I8?si=zCqPpPLISMYeMes3"&gt;https://youtu.be/gRKlprUj-I8?si=zCqPpPLISMYeMes3&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Classes in Swift

&lt;ul&gt;
&lt;li&gt;Classes are used to define objects, and they are very alike to Structs, but Classes are used to defined much more complex Objects&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/classesandstructures"&gt;Classes in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/xJgtknc-7CA?si=o1KVXWn6lXWqzHNN"&gt;How to use Classes in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Access Control

&lt;ul&gt;
&lt;li&gt;Literally what the name suggests, it ensures a way to control which files are accessible from what part of your project.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/UbX2UtgZTJI?si=1i9o1J1w_l5VJU3a"&gt;How to use Access Control&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Arrays

&lt;ul&gt;
&lt;li&gt;This is a Collection Type&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tutorialspoint.com/swift/swift_arrays.htm"&gt;Learn all about Swift Arrays&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Sets

&lt;ul&gt;
&lt;li&gt;This is a Collection Type&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iotojg2MgGQ"&gt;Sets in 60 seconds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Dictionaries

&lt;ul&gt;
&lt;li&gt;This is a Collection Type&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/ctBEqA0wh3M?si=En_hX_LczWCAaZM3"&gt;How to use Dictionaries in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Control in Swift (Loops and Conditionals)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;If-Else Conditionals (every programming language 101)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9Snw7polcBU"&gt;Conditionals for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;For, While, Repeat - the three horseman

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9Snw7polcBU"&gt;Swift for Beginners - Loops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Guard Statements - kind of a reverse of an if statement

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=DTd7HHSAw-4"&gt;Swift for Beginners - Guard Statements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Defer statement - used for code cleanup after exit

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/power-defer-swift-ramdhas-m#:~:text=In%20Swift%2C%20the%20%22defer%22,before%20the%20scope%20is%20left."&gt;All you need to know about defer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection Types Operations (Sort, Filter, Map)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.logilax.com/swift-filter-array/"&gt;How to Filter an Array in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/sorting-an-array-in-swift/#:~:text=To%20sort%20the%20array%20we,the%20array%20in%20ascending%20order."&gt;How to use Sort in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cocoacasts.com/swift-essentials-1-how-to-use-swift-map-to-transforms-arrays-sets-and-dictionaries"&gt;How to Map in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/NkOU60vwUEY?si=67RJ-Lkc-5Zzk3lY"&gt;How to Filter, Sort, and Map in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Creating and Manipulating Views&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In SwiftUI you can add text, images, buttons, custom shapes, and pretty much any UI element you could ever think for, but what you have to understand is that any element has to be inside of a &lt;code&gt;View&lt;/code&gt; protocol &lt;a href="https://developer.apple.com/documentation/swiftui/view"&gt;What are View Protocols&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Basic UI Elements

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/RKfkG01x79w?si=tGOAAQCWPPKa2rrl"&gt;How to use Text in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.swiftbysundell.com/articles/backgrounds-and-overlays-in-swiftui/"&gt;Adding Padding to Text in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/1dWHjdWgS5M?si=qILsnnBylwcyz4mZ"&gt;How to use Shapes in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Graphics Manipulation - Colors

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/swiftui/color"&gt;Basic knowledge of Color usage in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Gradients

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-render-a-gradient"&gt;How to render a Gradient &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Manipulating Images

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.swiftyplace.com/blog/mastering-swiftui-image-view"&gt;Mastering SwiftUI Image View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Frames

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BN8IEiM_3qI?si=zSiw3EZDiOn73uJj"&gt;How to use Frames and Alignments in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Stacks - VStack, HStack, ZStack

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/pv-vbUEzimk?si=NIN-OYq0OnSRpPXX"&gt;How to use Stacks in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Backgrounds

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/_PJstGf5XcE?si=HJ9btpT2-9HBg-oz"&gt;How to use System Materials and Backgrounds in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Spacers

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/cL23Wx-zbJU?si=XzT1K1td8dSqBUQ2"&gt;How to use Spacer in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;ScrollView - container of elements using Lazy Stacks

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/swiftui/scrollview"&gt;ScrollView containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/vHvb7LH8VuE?si=f0zGz8UXmJjS9-35"&gt;Using LazyStacks in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;ScrollViewReader

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/DbvcD2pQGmE?si=SMannIKKPwSqYxK0"&gt;Implementing ScrollViewReader in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Safe Areas - defining and ignoring them

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/_0NDKxvfg40?si=pp9dP_xTbo1z1Gsv"&gt;How to use and ignore the Safe Area in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.State Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State management in Swift happens by just declaring variables instead of constants (e.g., &lt;code&gt;var welcomeText: String = "Hello, user!"&lt;/code&gt;), but, SwiftUI doesn't like this because it doesn't know that the variable will at some point change, and since we are working with UI elements, the View protocol should update according to the value of the variable. That's where the state property wrapper comes into play.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/LgJ9r_VWdSI?si=SctZzRX__Yf4TfCE"&gt;How to use the State property wrapper in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.Sharing View States&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=lxaEAHNmhY4&amp;amp;t=150s"&gt;Observable objects, environment objects, and @Published&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-yjKAb0Pj60?si=qbFq9bVqpqhQ-2z4"&gt;How to use Observable Objects in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5.Sharing State between Parent and Child - Binding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/btDMzB5x2Gs?si=tfTicZ9PoMWsPlSF"&gt;How to use @Binding in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.Extracting functions and Subviews&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/pIUBC6wZjpM?si=HZHBQE6YoWdJW06e"&gt;How to extract functions in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/h1QdmK5fSIg?si=motq4VGIm6dyMGGU"&gt;How to extract subviews in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7.Gestures and Animations; Transitions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/kQhBS2qUKXc?si=PAX_Ycr3GV6fL-Ud"&gt;How to use gestures in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/0WY-wrW2_bs?si=ShnaoNF_XeRQVWyU"&gt;Adding Animations in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/0H4G3lGnJE0?si=xr09xupz0oU6gp7W"&gt;Animation Curves and Timing in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jySfyxQGMFg"&gt;Showing and Hiding views with Transition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8.Swift Sheets&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now that we know how to add and customize animations and transition to our app, another &lt;em&gt;KEY&lt;/em&gt; element that developers use when building applications are what's known as Sheets

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-present-a-new-view-using-sheets"&gt;How to present a new view using Sheets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9.ActionSheet and Alerts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-show-an-alert"&gt;How to show an alert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-show-an-action-sheet"&gt;How to show an Action Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10. Context Menu&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-show-a-context-menu"&gt;How to show a context menu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11. NavigationStack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So, you've already learned about transition animations and adding sheets (a view on top of an existing view), but, let's say that for example you want to change the keyboard language on your iPhone. For that, you'd have to go to Settings -&amp;gt; General -&amp;gt; Keyboard -&amp;gt; Keyboards. And, as you can tell, the system isn't adding sheets on top of sheets on top of the main view, because that would be horrible, like? Well, here's where NavigationStacks come into play (previously known as NavigationView, but that's became deprecated in iOS 17) and NavigationLinks

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/oxp8Qqwr4AY?si=delrQ4toWFMtJVRQ"&gt;How to use NavigationStack in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;12. Lists&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since we've learned about creating the flow of navigation of our app using NavigationStack, now's a good time to tell you about &lt;code&gt;Lists&lt;/code&gt;. Lists and navigation go hand-in-hand because it's very easy to define links using lists.

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://youtu.be/tkOnXG-sNks?si=8b7ZVuS72yUOtC85"&gt;How to use List in SwiftUI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;13. TabView and Badges in SwiftUI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TabView

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/5E_D9D8Z5nQ?si=NQa59ssKcoHKCBZw"&gt;How to use TabView in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Badges, .badge modifier

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Nt1loGvkQkM?si=kyyf8NF3-5tdL2z-"&gt;How to use Badges in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;14. User Inputs - Text Inputs, Toggles, TextSelection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Other UI Elements that will most likely be present in your application are &lt;a href="https://developer.apple.com/documentation/swiftui/textfield"&gt;TextField&lt;/a&gt; and &lt;a href="https://developer.apple.com/documentation/swiftui/texteditor"&gt;TextEditor&lt;/a&gt;. Text fields are text inputs that you request from users of your app. These can be anything you want, but they are mostly used for requesting user data (things like passwords, emails, usernames) and stuff like that. There are also Toggles, simple control switches that "toggle" between an on and off state

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/w_U2tgKQT5Y?si=6vWbkIyShEqeWESR"&gt;Text Inputs in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/JIT8sL_VtNA?si=QfAXQKaLFC4wIr7X"&gt;How to use a Toggle in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/AiSLtya25ac?si=Kixy3LYAOFEP4Cuj"&gt;How to use textSelection in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;15.FocusState&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/9OC8e0OULBg?si=Wggss-chvwBsbdfE"&gt;How to use @FocusState in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;16. Pickers - Color, Date &amp;amp; Menus&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/2pSDE56u2F0?si=gEq_GwIPldnEvLrJ"&gt;How to use Picker and PickerStyles in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/nUlY2RYHV9U?si=s8y6iaQxUFaet9x7"&gt;How to use ColorPicker in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/EnNAQ-b1yPU?si=hZ70F9nm5UPwIhvk"&gt;How to use DatePicker in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/4ow8bRY2McE?si=_-w-RdDSip_rEHfL"&gt;How to use Menus and MenuStyles in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;17.Other User Inputs - Steppers and Sliders&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/T7inPesyOY8?si=-FNyWpTxlTeDxCcn"&gt;How to use a Stepper in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/HwqxgiKQ_E4?si=ngkjJcSsV7KyUVf-"&gt;How to use a Slider in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;18. Complex view methods&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, let's talk about Complex View methods starting with &lt;code&gt;.onAppear()&lt;/code&gt; and &lt;code&gt;.onDisappear&lt;/code&gt; functions. As their name suggests, the functions add an action to perform before the view appears, or after the view appears.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/QAP4DbfoKvk?si=q3Rupzw4Cr-yoiyy"&gt;How to use onAppear and onDisappear in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;19. Custom Models in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/bQQlnGaYN14?si=61xs6rpfgI7d7jVn"&gt;How to use custom models in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;20.AppStorage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, in iOS applications, you want to sometimes store data inside of the application cache, using the &lt;code&gt;@AppStorage&lt;/code&gt; property wrapper. &lt;a href="https://developer.apple.com/documentation/swiftui/appstorage"&gt;AppStorage&lt;/a&gt; is useful for restoring the state of the application when a user closes it, and is generally used to reflect User Defaults values, useful for storing, for example, if a user is signed in or signed out of your app. 

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/zyuSUrfelw8?si=ti6Q8tgmeIuLYMRn"&gt;How to use @AppStorage in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;21. Transitioning to Concurrency - AsyncImage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Another &lt;em&gt;KEY&lt;/em&gt; element in building Swift Applications is the &lt;a href="https://developer.apple.com/documentation/swiftui/asyncimage"&gt;AsyncImage&lt;/a&gt; view. What it basically does is it waits for the image to load before actually displaying it on the screen. You will find out more about Swift Asynchronous methods when we will talk about all aspects of Swift Concurrency, but for now, let's finish with the first part of the SwiftUI stuff. 

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Qk5s-6ldNfA?si=RtqN43uW8sB2zGyC"&gt;How to use AsyncImage in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;22.Toolbar&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/53fWEfSo0tk?si=h35tnZIAQ7dr6thO"&gt;How to use Toolbar in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;23.Adapting your code to Dark Mode&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The pinnacle of app design - &lt;a href="https://developer.apple.com/documentation/uikit/appearance_customization/supporting_dark_mode_in_your_interface"&gt;Dark Mode&lt;/a&gt;. Since we are all aspiring young developers, most of us zoomers even, we just can't stand to stare at white elements on our 1000nits HDR10+ 4K OLED monitors, because they burn right through our fragile retinae. So, what you will have to do at some point is make your App dark mode compatible. How you do that, you might ask? Well, to put it simply, you define colors that dynamically change if the user has its appearance set to Light or Dark.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/DB5uNhIea-o?si=6hdWdB4LG_Adtwuk"&gt;How to adapt for Dark Mode in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;24.Documenting your Swift Code&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Imagine that there wouldn't exist documentation at all. It's just like IKEA sending you a floating bed with drawers but without giving you any instructions at all on how to assemble it. Even with the instructions, they are hard to do and take countless hours, but think about the horror that would await you without instructions at all!

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?si=6Jy3WRhFj18nAH6q&amp;amp;v=O8_meC7hIwI&amp;amp;feature=youtu.be"&gt;How to add documentation to Swift in Xcode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;---Swift Concurrency ---&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25.What is Concurrency?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Think of Concurrency as Swift’s fancy way of naming Asynchronous operations. Concurrency is Swift’s built-in way of writing the this type of operations. But what does &lt;a href="https://www.indeed.com/career-advice/career-development/asynchronous-programming"&gt;Asynchronous&lt;/a&gt; actually means? Well, it refers to the fact that a piece of code actually runs in parallel to the main program flow. That's why it's called concurrency in Swift, because actions take place concurrently with program execution, without the app needing to wait for the results. In short, it is code that can run independently without requiring to wait for some part of it to be run. Think of videogame loading screen, and what happens when you go to a new level. The game has to load the assets required for your level, for your character, calculate the vector graphics, get your stats, your HP, etc. Well, imagine how long it would take if the game wasn't allowed to load all of this stuff in parallel, and instead it would first load the assets, then start building the environment and place each of the asset independently to where they belong, then render the graphics and so on. So what this actually does is it allows the user to go about his business in your application, while your app loads other stuff in the background that may or may not be required for future user actions.
Now, let's go back to Swift and talk about &lt;a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/#"&gt;Concurrency&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;26.Error Handling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/9fXI6o39jLQ?si=aAkI4ppLYPvves_n"&gt;How to use Do, Try, Catch and Throws in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;27.Async and Await Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/9fXI6o39jLQ?si=l5iyperCiJX2fnxS"&gt;How to use Async/Await in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/1OmJJwVF7uQ?si=xZlyv2FK3EHWktGp"&gt;How to use Async Let in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;28. Task&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basically, just like in an employee schedule, some tasks will have a higher or a lower priority than others. For example, getting coffee for your cute co-worker Sarah should be of lower priority than fixing a bug that corrupts the entire database everytime a user likes Sarah's post (well, it depends, but you get the idea).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/fTtaEYo14jI?si=1XjBCk0yG87PfOBu"&gt;How to use Task and .task in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TaskGroup

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/epBbbysk5cU?si=v1mFHexHy5mn_tcA"&gt;How to use TaskGroup in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;29.Actors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-JLenSTKEcA?si=WCtDkm-gbt6I3Tou"&gt;Swift: Struct vs Class vs Actor, Value as Reference Types, Stack vs Heap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/5LKbL-I-CYY?si=e8NBniS8r0Dgj6IE"&gt;How to use Actors in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Global Actors

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BRBhMrJj5f4?si=Jjp49-LD3JMVG1bc"&gt;How to use Global Actors in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;30.The Sendable Protocol&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/wSmTbtOwgbE?si=TkcB_VD5SwSgAVzF"&gt;How to use the Sendable protocol in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;31.MVVM Design Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://adevait.com/ios/swift-tutorial-mvvm-design-pattern#"&gt;MVVM&lt;/a&gt; stands for Model-View-ViewModel. What it does is it describes the flow of data within our app and separates application tasks(handling of the UI, the backend such that the view is not dependent on any specific model problem).

&lt;ul&gt;
&lt;li&gt;Model - responsible for representing the data from our backend logic&lt;/li&gt;
&lt;li&gt;View - responsible for handling all the layouts and displaying the data&lt;/li&gt;
&lt;li&gt;ViewModel - responsible for transforming data recieved in a View, recieving actions from the View, dealing with logic&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/qzXJckVxE4w?si=w2_sskYXJW5PN8s0"&gt;MVVM Swift: Model View ViewModel Design Pattern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;32.Search Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All you need to do to add a search interface to your app is applying one of the searchable view modifiers inside of your NavigationStack or a view inside of it, by using &lt;code&gt;.searchable()&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/f2nxenwKCVM?si=uh8ehgg8CoTO0VAw"&gt;How to use Searchable, Search Suggestions, Search Scopes in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;33.PhotosPicker&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Picker that we haven't talked about yet is the new PhotosPicker introduced in the PhotoUI framework in Swift.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/IZEYVX4vTOA?si=5w5TF_H_bANc0ZpW"&gt;How to use PhotosPicker in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Alright, let's finish business: SwiftUI Part 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;34.Timer and .onReceive&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/foundation/timer"&gt;Timers&lt;/a&gt; and just as the name says, a class object that, we say, "fires" after a certain time interval. To actually use the data sent by Timers, we use the &lt;code&gt;.onReceive()&lt;/code&gt; modifier, which can be read about &lt;a href="https://developer.apple.com/documentation/swiftui/view/onreceive(_:perform:)"&gt;here&lt;/a&gt;.

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://youtu.be/ymXRX6ZB-J0?si=EtvNW_kMsv9mNKyf"&gt;How to use Timer and .onReceive in SwiftUI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;35.FileManager in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is another &lt;em&gt;KEY&lt;/em&gt; element that you have to learn for mastering Swift

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Yiq-hdhLzVM?si=B8CTqzpQYZLylf_z"&gt;How to save data and images to FileManager Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;36.Haptics and Sound Effects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New in iOS 17, Apple introduced the &lt;a href="https://developer.apple.com/documentation/swiftui/sensoryfeedback"&gt;SensoryFeedback&lt;/a&gt; view modifier, marked by &lt;code&gt;.sensoryFeedback()&lt;/code&gt; which can now represent simple haptics useful for example to let the user know that a task has succeeded or if an error is present.&lt;/li&gt;
&lt;li&gt;Simple sound effects can also be easily added inside of our application using the &lt;a href="https://developer.apple.com/documentation/avfoundation/"&gt;AVFoundation&lt;/a&gt; framework built by Apple. You can simply import it into your app and use something like &lt;code&gt;AudioServicesPlaySystemSound(1026)&lt;/code&gt;, where 1026 is the SystemSound id, for simple alerts and or notification sounds within your app. If you want to add custom sounds, you should instead use &lt;a href="https://developer.apple.com/documentation/avkit"&gt;AVKit&lt;/a&gt; Framework. 

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-haptic-effects-using-sensory-feedback"&gt;How to add haptic effects using sensory feedback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/iBLZ1C4L5Mw?si=lxa67subPxbDW3LE"&gt;How to add sound effects in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;37.Push Notifications&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/mG9BVAs8AIo?si=HiM9YMutuqxzUSgE"&gt;How to use local Push Notifications in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;38.Core Data - CRUD Operations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is another way to cache application data, just like UserDefault, BUT, this is used to add a LOT of data inside of it, unlike UserDefault which should be used only for very small pieces. We will also talk about CRUD operations (Create, Read, Update, Delete)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/nalfX8yP0wc?si=5v06hAKd7AdVeTox"&gt;How to use Core Data with @FetchRequest in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/BPQkpxtgalY?si=yI-e81-JELFJPDPE"&gt;How to use Core Data with MVVM in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;One thing that you need to know is that every App that uses Core Data has a &lt;a href="https://developer.apple.com/documentation/coredata/core_data_stack"&gt;Core Data stack&lt;/a&gt;.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KA3mR5JI4H4"&gt;What is the Core Data Stack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;39.Multi-threading in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/jEpg2SYvVV8?si=hTg5Qwwr1JWsSycr"&gt;Multi-threading with background threads and queues in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;40.Closures&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/7gg8iBH2fg4?si=jWS37B8IeJKQEra9"&gt;How to use Escaping Closures in Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/xiS5gJOIQxI?si=kXNf5cS5Demqt113"&gt;@escaping explained in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;41.Codeable, Encodable, Decodable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/H9mt8WjpZgM?si=gqgJ4_o-tN62tgJb"&gt;Codable, Decodable and Encodable in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;42.Using the API in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this roadmap, we'll talk about two ways which you can download data in Swift

&lt;ul&gt;
&lt;li&gt;The first one is by using &lt;a href="https://developer.apple.com/documentation/foundation/urlsession"&gt;URLSession&lt;/a&gt;, which is a class object that coordinates a group of related, network data transfer tasks. &lt;/li&gt;
&lt;li&gt;The second one is by using the &lt;a href="https://developer.apple.com/documentation/combine"&gt;Combine&lt;/a&gt; Framework. This framework provides a Swift API that processes values over time, which can represent many kinds of asynchronous events, by using what's known as &lt;a href="https://developer.apple.com/documentation/combine/publisher"&gt;Publishers&lt;/a&gt; and &lt;a href="https://developer.apple.com/documentation/combine/subscriber"&gt;Subscribers&lt;/a&gt;. Publishers provide data which can then be accesed by Subscribers&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;43.NSCache&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Another type of caching class object in Swift is &lt;a href="https://developer.apple.com/documentation/foundation/nscache"&gt;NSCache&lt;/a&gt;.  But, the key thing with this type ofcaching is that it is not permanent, will not persist between sessions, and it's used to store key-value pairs that may be deleted in case of low resources on the user's phone.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/yXSC6jTkLP4?si=_bTVuMKex7Q3_JZ-"&gt;How to save and cache images in a SwiftUI app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;44.Custom features in SwiftUI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/MQl4DlDf_5k?si=CjmTUXJqR7hmr-R7"&gt;Custom ViewModifiers in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/uK1wKIY49z0?si=pQ0Wrd4bUH1otPbp"&gt;Custom ButtonStyle in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/lF6g07FDsM0?si=Pq5kxAZ9HUKUf6HW"&gt;Custom Transitions in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Jyh65AMRqzQ?si=8m4dqkdUxq_dOCuA"&gt;How to use MatchedGeometryEffect in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/EHhgjOt_KFA?si=th-8NZnLh6y1dyn6"&gt;Custom Shapes in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/UvQcNSjgydY?si=UshkHEEiVJfBoig5"&gt;Custom shape susing Arcs and Quad Curves in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/FxW9Dxt896U?si=mrWvqXGYbwJq_yPM"&gt;Custom Tab Bar in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/aIDT4uuMLHc?si=uE4h7Sg6yWm_8A8G"&gt;Custom Navigation Bar in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/K91rKH_O8BY?si=afjFwsT_M7Jkh_5F"&gt;Custom Bindings in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/lncOFL3Qsns?si=e-vfX0kvepD5qvEn"&gt;Custom Errors and Alerts in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/2wzq6SQkSJE?si=AkDDDw7m5JMTMNHo"&gt;Custom Property Wrappers - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/TERHgCD_tGA?si=x3_6SpaQrdnzuAgq"&gt;Custom Property Wrappers - part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;45.Custom Protocols in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I've talked before about what Protocols are and I've actually referenced them a lot throughout this roadmap, but now we'll do a deeper dive inside this concept. First of all, a Protocol defines a blueprint of methods or properties thatcan then be adapted by classes (or other types). One of the biggest benefits of using &lt;code&gt;Protocols&lt;/code&gt; is actually the fact that multiple classes can abide by a single protocol. Let's suppose we have two objects &lt;code&gt;struct Dog { var breed: Labrador}&lt;/code&gt; and &lt;code&gt;struct Cat { var breed: British Shorthair}&lt;/code&gt;. Now, let's print their names. You'd have to do something like &lt;code&gt;func printOut(dog: Dog){ dog.breed }&lt;/code&gt; and &lt;code&gt;func printOut(cat: Cat){ cat.breed }&lt;/code&gt;. But, if you'd use a protocol, for example &lt;code&gt;Protocol Printing { var name: String { get } }&lt;/code&gt;, and then you define the structs as protocolsof &lt;code&gt;Printing&lt;/code&gt;: &lt;code&gt;struct Dog: Printing { var name: String }&lt;/code&gt; and &lt;code&gt;struct Cat: Printing { var name: String }&lt;/code&gt;, you could then use a single function to print both of their names, like so: `func printOut(object: Printing) { print(object.name) }.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/0gM1wmW1Xvc?si=bGHXVvmuGFLk40vc"&gt;How to use Protocols in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;46.Unit and UI Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/eqdvIUKsM2A?si=JKEjJknnHHZfPt_V"&gt;Unit Testing in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/RoDUYFuNeJU?si=Q_JnOuiRgktqn_ag"&gt;UI Testing in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;47.CloudKit&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/cloudkit/"&gt;CloudKit&lt;/a&gt; is Apple's Framework for moving data between your app and iCloud. With this, you make sure that data stored by your app in iCloud can be accessed from multiple devices (e.g., the Notes app on iPhone and Mac use CloudKit for keeping notes synced between them). This framework provides services from transfering data to and from iCloud servers, and network connection MUST be present for it to work (that's why it's a cloud, duh)

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/tww2vbJjXpA?si=elAwKCYChyKz0vxO"&gt;Setup CloudKit in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/A-1U_iXiCyI?si=wSFBxaQBuaxGICWC"&gt;CloudKit CRUD Functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/AtFMqG-zziA?si=o92wq_CKnpiCIrj8"&gt;Upload Images and CKAssets to CloudKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/vr5CBfaK14A?si=jCCywuByIXpfLicO"&gt;Sending Push Notifications using CloudKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(ADVANCED!)&lt;a href="https://youtu.be/OD_FDJOv-Ek?si=xbVnEQ3LjV6MWnJJ"&gt;Creating a reusable utility class for CloudKit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;48.TimelineView&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/swiftui/timelineview"&gt;TimelineView&lt;/a&gt; is a view that updates according to a provided schedule, acting as a container where it redraws the content it contains at scheduled point of time. This is useful, for example, when we don't want the body of our SwiftUI views to update whenever a data change occurs, but at a given point in time.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/ZmXp6Pd5Elg?si=38Ttv5731egnBoMg"&gt;How to use TimelineView in SwiftUI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;49.KeyPaths in Swift&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://youtu.be/FmjG6mG-GIA?si=60ui3rKCgk7PpiUa"&gt;How to use KeyPaths in Swift&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;50.Accessibility - VoiceOver&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/bERGMFHe9uc?si=rBmpxYPFWW0yJZ0-"&gt;How to use VoiceOver in Swift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;51.The End&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Damn, you've finally did it. You reached the end. Congratulations! Took way longer than you first hoped for, huh? Well, as you could already see, Swift is a very vast and complex programming language, but, the easy-to-find documentation and video tutorials provide you with a bunch of tools useful for learning, but, one thing to keep in mind is that with every new OS version, Apple adds a bunch of improvements to Swift and sometimes also removes or provides replacement for functions and methods in all of their Frameworks. Altough I've covered most of the stuff available currently in Swift, there's no telling when some things will get deprecated or better alternatives will be available. &lt;/li&gt;
&lt;li&gt;What I'd do in your place is explore my horizon. There's no better alternative to learning than to practice and write Swift code yourself, and by building an app from the ground-up all by yourself. Me, personally, I tried to create a SoundCloud alternative with better UI and animations. It was a fun project that I enjoy, and I plan on releasing the repo for it on GitHub in the future after I finish it, because right now it's in a rougher shape :D&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please let me know what you think about it and make sure to join our Discord&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>swift</category>
      <category>ios</category>
    </item>
    <item>
      <title>React roadmap ( with explanations and resources, all in one place)</title>
      <dc:creator>arking115</dc:creator>
      <pubDate>Fri, 27 Oct 2023 05:01:36 +0000</pubDate>
      <link>https://dev.to/arking115/react-roadmap-with-explanations-and-resources-all-in-one-place-34d9</link>
      <guid>https://dev.to/arking115/react-roadmap-with-explanations-and-resources-all-in-one-place-34d9</guid>
      <description>&lt;p&gt;Hello everyone! I made a &lt;em&gt;roadmap&lt;/em&gt; with concepts I wish I knew earlier when I started to learn React, the resources I found were either too simple or too complicated, both leading to problems further down the line, I tried to make it so this resource is valuable for everyone. Throughout my time as a React developer, I've delved into its fascinating aspects as well as its challenges. I hope this post provides value to you!&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those who are just starting out or looking to &lt;em&gt;enhance&lt;/em&gt; their React skills, I hope you find this resource helpful. &lt;em&gt;For a long time, I've wanted to create something that brings together all the missing pieces of knowledge I needed.&lt;/em&gt; Here is the visual version of the React &lt;a href="https://navigolearn.com/roadmap/react-32"&gt;roadmap&lt;/a&gt;, it has the complete documentation and is nicer to navigate.&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;​ &lt;strong&gt;If you want to help&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For those who are already well-versed in React, this resource goes beyond simple React some of these concepts may prove to be useful even to you. I'd greatly appreciate your feedback on what I should add or remove. &lt;em&gt;I want all of us to contribute to this roadmap in order to make the best resource possible for others to learn.&lt;/em&gt; The resource I pinned above includes a discord where we can talk or you can directly create pull requests on &lt;a href="https://github.com/NavigoLearn/RoadmapsMarkdown/tree/master/web/frontend/React/Chapters"&gt;GitHub&lt;/a&gt; on the resource.&lt;/p&gt;

&lt;p&gt;This is the knowledge I built over the years, without further ado &lt;strong&gt;let's dive in&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;Why react?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mature simple-to-grasp dev workflow&lt;/li&gt;
&lt;li&gt;Ultimate flexibility and compatibility&lt;/li&gt;
&lt;li&gt;Component based architecture&lt;/li&gt;
&lt;li&gt;JSX - easier DOM manipulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.&lt;strong&gt;Set up&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qgRUr-YUk1Q"&gt;ES modules explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5IG4UmULyoA"&gt;Module bundlers explained - Fireship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Create React App&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HWpjpq2ux04"&gt;Create react app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Vite&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KCrXgy8qtjM&amp;amp;t=18s"&gt;Vite in 100 seconds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=agpZsCUllqc"&gt;Vite + React Setup - Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vitejs.dev/guide/"&gt;Vite + React Setup - Article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9OmnmouE6tw"&gt;Use Vite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Parcel&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=U7CQE1TFMkg"&gt;Parcel Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Razzle&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=u1J9De4bHmU"&gt;Razzle Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Snowpack&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.snowpack.dev/tutorials/quick-start"&gt;Snowpack Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Manual Setup (Webpack and Babel)&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=h3LpsM42s5o"&gt;Create app manually (much to learn)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.&lt;strong&gt;ReactDOM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KShnPYN-voI"&gt;What is the DOM?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Virtual DOM&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=RquK3TImY9U"&gt;Simple Virtual DOM explanation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/difference-between-virtual-dom-and-real-dom/"&gt;Why is it import and better&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4.&lt;strong&gt;JSX (Important)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9GtB5G2xGTY&amp;amp;t=257s"&gt;What is JSX?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;JSX, syntax extension for JavaScript&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/JSX_(JavaScript)"&gt;Examples of usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Rr5AqASIyxw"&gt;Conditional rendering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codecademy.com/learn/bwa-intro-to-react/modules/react-101-jsx-u/cheatsheet"&gt;Cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;JSX, Syntactic Sugar for JS&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sophiali.dev/syntactic-sugar-examples-javascript"&gt;JS Syntactic Sugar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fettblog.eu/jsx-syntactic-sugar/"&gt;JSX is Syntactic Sugar for JS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;JSX attributes (brief explanation)&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BvBf8GjsYdw"&gt;Brief explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.&lt;strong&gt;Style (choose one after checking each one)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Tailwind&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1WdL1TLfkYo"&gt;Installer Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs/installation"&gt;Installer text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bxmDnn7lrnk&amp;amp;list=PL4cUxeGkcC9gpXORlEHjc5bgnIi5HEGhw"&gt;Full tailwind course youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Bootstrap&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xdXd8BJwJ-U"&gt;Installation and a little show off video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getbootstrap.com/docs/3.4/getting-started/"&gt;Use installation with npm document&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=-qfEOE4vtxE"&gt;Bootstrap course youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Material UI&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LD4-UTFXtwA"&gt;Installation and use example video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mui.com/material-ui/getting-started/installation/"&gt;Installer text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BHEPVdfBAqE&amp;amp;list=PLC3y8-rFHvwh-K9mDlrrcDywl7CeVL2rO&amp;amp;index=1"&gt;Material UI course youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Ant design&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=m96DTtTpGpA"&gt;Installer Video and examples video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ant.design/docs/react/introduce"&gt;Installer text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=03rzGKtEZmw&amp;amp;list=PL-JTnqZPF5z2qTGwNkYln3m0pA0qfgHFR&amp;amp;index=1"&gt;Ant design course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6.&lt;strong&gt;React Components (Important)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Component classes vs Functional components&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=g8-Xrpl_Uhk"&gt;Brief state understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=yc6elaGOoGQ"&gt;Class Components vs Functional Components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Components explained&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=JtB_tippTUQ&amp;amp;t=488s"&gt;Components explained video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Events&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0XSDAup85SA"&gt;Events&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Components lifecycle&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qnN_FuFNq2g"&gt;Lifecycles explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Components props&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kHJSNFU7H4U"&gt;Props simple explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Ib-80HIjuZ4&amp;amp;t=639s"&gt;Clean an reusable components with props&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;7.&lt;strong&gt;Hooks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=TNhaISOUy6Q"&gt;Preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;useState&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=O6P86uwfdR0"&gt;useState explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/guide-usestate-react/"&gt;More in depth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;useEffect&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0ZJgIjIuY7U"&gt;useEffect explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/useeffect-hook-complete-guide/"&gt;More in depth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Other hooks&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=t2ypzz6gJm0"&gt;useRef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HYKDUF8X3qI"&gt;useContext (simple form)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=vpE9I_eqHdM"&gt;useMemo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MxIPQZ64x0I"&gt;useCallback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Write custom hooks&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Jl4q2cccwf0"&gt;Simple explanation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logrocket.com/create-your-own-custom-react-hooks/"&gt;In depth logical example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8.&lt;strong&gt;Router&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=OMQ2QARHPo0&amp;amp;list=PL4cUxeGkcC9iVKmtNuCeIswnQ97in2GGf&amp;amp;index=1"&gt;React router course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Are there more?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;While there are several libraries for routing in React, React Router serves as the foundational library for many of them. When working with different frameworks, routing mechanisms may vary, with some offering server-side routing, client-side routing, or a combination of both. Examples of such frameworks include Next.js, Astro, Remix, and others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;9.&lt;strong&gt;Advanced Props and State management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Prop drilling&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QLO64jkGkRg"&gt;Prop Drilling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Context API (advanced)&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=t9WmZFnE6Hg"&gt;Context Api&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=I7dwJxGuGYQ"&gt;Context Hack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Redux&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=zrs7u6bdbUw"&gt;Redux course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Zustand&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=DK-S4ZcmDcE"&gt;Zustand vs Redux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=fZPgBnL2x-Q"&gt;Zustand course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://refine.dev/blog/zustand-react-state/#build-a-to-do-app-using-zustand"&gt;Usage example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Nanostores&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nanostores/nanostores"&gt;Nanostores explanation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=gVTAZOryDAo"&gt;Video explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;10.&lt;strong&gt;Pure functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=fYbhD_KMCOg"&gt;Learn pure functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/understanding-the-difference-between-pure-and-impure-functions-in-javascript/"&gt;Pure functions article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;11.&lt;strong&gt;React programming patterns&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=eyh04fR9z2g&amp;amp;list=PLgeETUaEEds5HE2uGWezJxYeZwpBonHr-&amp;amp;index=6"&gt;React programming patterns course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;12.&lt;strong&gt;Api usage (choose one)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Fetch API&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=cuEtnrL9-H0"&gt;Fetch API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/how-to-use-the-javascript-fetch-api-to-get-data/"&gt;Fetch API article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Axios&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qM4G1Ai2ZpE"&gt;Axios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/react-axios-react"&gt;Axios &amp;amp; React examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Extras&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ"&gt;Asynchronous javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@darshana_18428/understanding-stateful-and-stateless-components-in-reactjs-8f7cee2bf43e"&gt;Stateful vs Stateless components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;13.&lt;strong&gt;React frameworks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;While I can't delve into the details of each framework, as they each deserve a roadmap of their own, it's worth noting that frameworks represent the 'new' way of building React applications. They offer additional utilities and many out-of-the-box features that were not readily available before. I'll briefly highlight when you should consider using each framework and their notable features. When building your next React app, you can evaluate which one best suits your project and make an informed choice.&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Astro&lt;/li&gt;
&lt;li&gt;Query&lt;/li&gt;
&lt;li&gt;Remix&lt;/li&gt;
&lt;li&gt;Gatsby&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;14.&lt;strong&gt;React libraries (not mentioned yet)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Storybook&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BySFuXgG-ow&amp;amp;list=PLC3y8-rFHvwhC-j3x3t9la8-GQJGViDQk"&gt;Storybook why and how&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Chakra UI&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=iXsM6NkEmFc&amp;amp;list=PL4cUxeGkcC9hcnIeryurNMMcGBHp7AYlP"&gt;Chakra UI Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chakra-ui.com/getting-started/comparison"&gt;Chakra UI compared to other libraries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Specific picks and experimental&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Formik&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.openreplay.com/doing-forms--react-hook-form-vs-formik/"&gt;Why should you use Formik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=a94FOvaBomQ&amp;amp;list=PLC3y8-rFHvwiPmFbtzEWjESkqBVDbdgGu"&gt;Formik course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Yup&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@olivier.trinh/how-to-create-form-validation-with-yup-library-in-reactjs-4846f045957a"&gt;Yup create validation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;React helmet&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.scaler.com/topics/react/react-helmet/"&gt;React Helmet usage explained and examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;15.&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Use production builds&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BbncM2nzCso"&gt;Production build explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/webpack-production-build-vs-development-prasenjit-sutradhar/"&gt;Production build vs development build&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Lazy loading vs eager loading&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.imperva.com/learn/performance/lazy-loading/"&gt;Lazy loading vs eager loading&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MJn4W7pR6RU"&gt;React router lazy loading&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=hJ7Rg1821Q0"&gt;Lazy load for images &amp;amp; explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Code splitting&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=JU6sl_yyZqs"&gt;Code splitting explained &amp;amp; usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://edvins.io/react-code-splitting-techniques"&gt;Advanced code splitting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;React profiler&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Qwb-Za6cBws"&gt;React profiler tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://legacy.reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html"&gt;Full concept&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Tree shaking&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kwUfeWe7DCw"&gt;Bundle size problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.telerik.com/blogs/tree-shaking-basics-for-react-applications"&gt;Tree shaking on webpack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Virtualisation for long lists&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://web.dev/articles/virtualize-long-lists-react-window"&gt;Virtualisation explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=UrgfPjX97Yg"&gt;Virtualisation usage video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;16.&lt;strong&gt;Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MSq_DCRxOxw"&gt;How to write clean code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.guru99.com/application-testing.html"&gt;What is testing?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Testing tools

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Jest&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=FgnxcUQ5vho"&gt;Presentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7r4xVDI2vho"&gt;Full course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cypress&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BQqzfHQkREo"&gt;Cypress in 100 seconds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=u8vMu7viCm8"&gt;Cypress course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Mocha

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=CoQNtq5z7Bo&amp;amp;list=PLgbtO1Bcz4C-vU0JLfDBsZGbSUdNX4mQ8&amp;amp;index=6"&gt;Mocha simple course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;17.&lt;strong&gt;Advanced React patterns&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;HOC&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/higher-order-components-in-react/"&gt;HOC explained text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=J5P0q7EROfw"&gt;Simple example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=eyh04fR9z2g"&gt;More complex example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Render props&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=axL59Dc5rZA"&gt;Render Props and HOC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ix4z_jUrQpQ"&gt;Render props example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Container pattern&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@vitorbritto/react-design-patterns-the-container-presentational-pattern-775b91aa0c49"&gt;What is container pattern?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.openreplay.com/understanding-the-container-component-pattern-with-react-hooks/"&gt;Container pattern usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;State Initializer Pattern&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dhiwise.com/post/for-better-performance-state-initializer-pattern-in-react"&gt;Explanation &amp;amp; usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;React reconciliation&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.educative.io/answers/what-is-the-concept-of-reconciliation-in-react"&gt;React reconciliation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Debouncing and Throttling&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=cjIswDCKgu0"&gt;Debouncing and Throttling in 16 mins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Final words,&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With this, I conclude my React roadmap, along with the knowledge I've built over the years about this amazing framework. Feel free to come back to it whenever you want to level up your React game. With React, HTML, CSS, JavaScript, and knowing a bunch of the libraries mentioned in this roadmap, you can build anything; there is no limit."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's next?

&lt;ul&gt;
&lt;li&gt;Get a job

&lt;ul&gt;
&lt;li&gt;We both know a good step forward would be working alongside talented people and learning from them day in and day out. You can build a portfolio of some personal projects, create a resume, and try to apply to jobs, all while continuing to expand your knowledge of React.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Expend knowledge

&lt;ul&gt;
&lt;li&gt;React here, React there, all I do is talk about React, but the truth is, whether you like it or not, you will have to expand your knowledge towards new technologies. That's what programming is all about. The more you know, the better you are. Maybe try these roadmaps next.And remember"Experience is the name everyone gives to their mistakes." – Oscar Wilde&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>Frontend development roadmap (visual support + resources)</title>
      <dc:creator>arking115</dc:creator>
      <pubDate>Sat, 14 Oct 2023 12:08:29 +0000</pubDate>
      <link>https://dev.to/arking115/frontend-development-roadmap-visual-support-resources-271d</link>
      <guid>https://dev.to/arking115/frontend-development-roadmap-visual-support-resources-271d</guid>
      <description>&lt;p&gt;Hi all. I've tried below to compile a list of all the videos/resource I used when learning frontend development ( I learned mostly through videos ), and give them a structure. I really struggled to find high-quality resources and making sense of all this mess so I hope this post will come to your aid if you fell like I did.&lt;/p&gt;

&lt;p&gt;I've also used this list to create a roadmap with a tool I've been working on with a few friends to help structure everything in a visually appealing way. This is the &lt;a href="https://navigolearn.com/roadmap/frontend-development-29"&gt;Frontend roadmap&lt;/a&gt; fully completed. It has additional explanations and it looks more nice than plain text. The chapters are down in the post.&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;p&gt;Let me know If I can improve it in any way !&lt;/p&gt;

&lt;p&gt;Enjoy !!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Essential Prequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8mAITcNt710"&gt;Basics of computer science&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommended prequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git and GitHub

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HkdAHXoRtos"&gt;Git by Fireship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=RGOj5yH7evk&amp;amp;t=0s"&gt;Git by FreeCodeCamp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Problem Solving

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=UFc-RPbq8kg"&gt;Problem Solving by Fireship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=r4TgqWbKRtA"&gt;Problem Solving by Tech with Tim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;0. How to learn web development and not lose your mind&lt;/strong&gt; Web development is notoriously complicated to get started with, having a very complicated ecosystem. You should master the core that being JavaScript, HTML, CSS, and a web framework, and if you continue to be curious, the rest will come along, for now, you should only know about most of the stuff that "they exist". I highly recommend going through all of the videos/resources and code along or at least be focused and understand everything and WHY it is done the way it is.&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Internet and Web
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. How does the internet work?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7_LPdttKXPc"&gt;Internet Explained in 5 Minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=wW2A5SZ3GkI&amp;amp;list=PL0yztVlNIsg6o9LnrSwJdJetwWV2ZpCLj&amp;amp;index=2"&gt;How the Internet Works #1 (HTTP)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0QI6I6APomE&amp;amp;list=PL0yztVlNIsg6o9LnrSwJdJetwWV2ZpCLj&amp;amp;index=3"&gt;How Does the Internet Work #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QYXAxXjaKws&amp;amp;list=PL0yztVlNIsg6o9LnrSwJdJetwWV2ZpCLj&amp;amp;index=4"&gt;How Does the Internet Work #3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;B. What if the internet never existed - &lt;a href="https://www.youtube.com/watch?v=tszFFafk8pA"&gt;What if the Internet Never Existed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. Networking - &lt;a href="https://www.youtube.com/watch?v=IPvYjXCsTg8"&gt;Computer Networking Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  2. HTML
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. HTML Basics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HD13eq_Pmp8"&gt;HTML Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ok-plXXHlWw"&gt;HTML in 100 Seconds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. A Taste of SEO&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=JSm4aQl4w_U"&gt;SEO Basics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. HTML Semantic Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bOUhq46fd5g"&gt;HTML Semantic Elements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  3. CSS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. Basics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=wRNinF7YQqQ"&gt;Bro Code CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. Master Your Layouts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=vHuSz4fRM88"&gt;Secret to CSS Layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=705XCEruZFs"&gt;The Joy of CSS Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=K24lUqcT0Ms"&gt;CSS Flexbox in 100 Seconds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=FTlczfR82mQ&amp;amp;list=PLDyQo7g0_nsU2O7gEdh7cAgamyh0xZumZ&amp;amp;index=7"&gt;Learn CSS Flexbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Responsive Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=yU7jJ3NbPdA&amp;amp;t=0s"&gt;Media Queries in 7 Minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ZYV6dYtz4HA"&gt;How to Make Responsive Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=K24lUqcT0Ms"&gt;Master Media Queries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D. CSS Animations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=SgmNxE9lWcY"&gt;Learn CSS Animations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Javascript
&lt;/h2&gt;

&lt;p&gt;A. &lt;strong&gt;Basics&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=aXOChLn5ZdQ"&gt;Javascript for Haters&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=8dWL3wF_OMw"&gt;Javascript - Bro Code&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=SBmSRK3feww"&gt;Javascript - SuperSimpleDev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. &lt;strong&gt;DOM manipulation with Javascript&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=y17RuWkWdn8"&gt;DOM Manipulation&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=XF1_MlZ5l6M"&gt;Event Listeners&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. &lt;strong&gt;What the hell is Node.js?&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=ENrzD9HAZK4"&gt;What the Hell is Node.js?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;D. &lt;strong&gt;Javascript Is Weird&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=sRWE5tnaxlI"&gt;Javascript Is Weird&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E. &lt;strong&gt;100 Javascript Concepts&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=lkIFF4maKMU&amp;amp;t=0s"&gt;100 Javascript Concepts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;F. &lt;strong&gt;What is ECMAScript?&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=nAdxWX7s3PY"&gt;Javascript and ECMAScript&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=cRHQNNcYf6s"&gt;ES6 Modules&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  5. How to do graphics in JavaScript
&lt;/h2&gt;

&lt;p&gt;A. &lt;strong&gt;Canvas&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=gm1QtePAYTM"&gt;Learn Canvas API&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=vAJEHf92tV0"&gt;Canvas Particle Animations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. &lt;strong&gt;SVG&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=emFMHH2Bfvo"&gt;SVG in 100 Seconds&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=UTHgr6NLeEw"&gt;Awesome SVG Animation&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=lPJVi797Uy0"&gt;Beautiful SVG Curves&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. &lt;strong&gt;JavaScript + CSS&lt;/strong&gt;- &lt;a href="https://www.youtube.com/watch?v=GUEB9FogoP8"&gt;Animating Text with JavaScript&lt;/a&gt;- &lt;a href="https://www.youtube.com/watch?v=C_JKlr4WKKs"&gt;Professional Scrolling Effect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  6. JavaScript Runtimes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=XQT6XiJt4DE"&gt;Node.js Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=F0G9lZ7gecE"&gt;Deno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=dWqNgzZwVJQ"&gt;Bun (It's Buntime)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Package Managers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=P3aKRdUyr0s"&gt;What is npm?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=d1E31WPR70g"&gt;Why I Switched to pnpm?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Bundling and Transpilation Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5IG4UmULyoA"&gt;Module Bundlers Explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://babeljs.io/docs"&gt;What is Babel?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=KCrXgy8qtjM"&gt;Vite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=IZGNcSuwBZs"&gt;Frontend Development Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Ideas:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The Div Race&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a website with two racing divs: one controlled by an evil wizard (accelerates by 10 pixels per sec) and the other by you (move by 50 pixels per sec).&lt;/li&gt;
&lt;li&gt;Use buttons to control your div and reset the wizard's div.&lt;/li&gt;
&lt;li&gt;Goal: Win the race.&lt;/li&gt;
&lt;li&gt;Tip: Use recursive &lt;code&gt;setTimeout&lt;/code&gt; for the wizard's functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Playlist Saving App&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a web app for managing playlists with titles and links.&lt;/li&gt;
&lt;li&gt;Add, remove, edit entries and view them.&lt;/li&gt;
&lt;li&gt;Entries are clickable links.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Sorting Algorithm Visualizer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement a sorting algorithm visualizer.&lt;/li&gt;
&lt;li&gt;Choose one from a list of algorithms or implement your own.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=n4t_-NjY_Sg?si=rRpS_2_GXwKShVYO&amp;amp;t=178"&gt;More Details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Advanced CSS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. Tailwind CSS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=mr15Xzb1Ook"&gt;Video Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. UI Libraries&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bootstrap&lt;/strong&gt;: &lt;a href="https://getbootstrap.com/"&gt;Official Site&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadcn UI&lt;/strong&gt;: &lt;a href="https://ui.shadcn.com/"&gt;Official Site&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulma&lt;/strong&gt;: &lt;a href="https://bulma.io/"&gt;Official Site&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Sass&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=akDIJa0AP5c"&gt;Explainer Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Advanced JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. Asynchronous JavaScript&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1Z7FjG--F20"&gt;Primary Explanation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=vn3tm0quoqE"&gt;Alternative Explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. Event Loop and Concurrency&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ"&gt;Watch Here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Closures&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=vKJpN5FAeF4"&gt;Learn Here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D. Fetch API&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=drK6mdA9d_M"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=zUcc4vW-jsI"&gt;Using Real API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Testing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Test-Driven Development&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Jv2uxzhPFl4"&gt;TDD explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  13. JavaScript Frameworks of Never-Ending Pain
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"Anything that can be written in JavaScript will eventually be written in JavaScript."&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=cuHDQhDhvPE"&gt;Comparison in 10 Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5EsLj3JOdE0"&gt;History of JS Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A. Established Frameworks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. React&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Tn6-PIqc4UM"&gt;Quick Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=OFHAIpw2oZI&amp;amp;list=PLDyQo7g0_nsVHmyZZpVJyFn5ojlboVEhE&amp;amp;index=1"&gt;Beginner Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=j942wKiXFu8&amp;amp;list=PL4cUxeGkcC9gZD-Tvwfod2gaISzfRiP9d"&gt;Complete Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=TNhaISOUy6Q"&gt;Hooks Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Angular&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3dHNOWTI7H8"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Vue&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qZXt1Aom3Cs"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. Hot and New
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Svelte&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=rv3Yq-B8qp4"&gt;Quick Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=zojEMeQGGHs&amp;amp;list=PL4cUxeGkcC9hlbrVO_2QFVVhPhlZmz7tO"&gt;Complete Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MnpuK0MK4yo"&gt;React vs. Svelte&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Solid.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=uPXn9S31o7Q&amp;amp;list=PL4cUxeGkcC9gU_GvFygZFu0aBysPilkbB"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Alpine.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=r5iWCtfltso"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Choosing the "Right" Framework
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=S7X6fLbdwlc"&gt;Watch Video&lt;/a&gt;
​&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  15. Typecheckers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. TypeScript&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=pj8SoTZbCTE"&gt;TypeScript vs JSDoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=2pZmKW9-I_k&amp;amp;list=PL4cUxeGkcC9gUgr39Q_yD6v-bSyMwKPUI&amp;amp;index=1"&gt;TypeScript Course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kq6IhAZVNh8"&gt;TypeScript and React&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. JSDoc&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=YK-GurROGIg"&gt;JSDoc Course&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  16. State Management
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. What is State&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=g8-Xrpl_Uhk&amp;amp;t"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. What are Side Effects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=4IIWib5MZKg"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. State in React&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=CVpUuw9XSjY"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D. State in Svelte&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=TIFuMRJT89A"&gt;Watch Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Advanced Testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=4-_0aTlkqK0"&gt;Testing Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=isI1c0eGSZ0"&gt;When to Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A. Unit and Integration Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7f-71kYhK00&amp;amp;t=0s"&gt;Vitest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=FgnxcUQ5vho"&gt;Jest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. End-to-End Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://playwright.dev/docs/intro"&gt;Playwright&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BQqzfHQkREo"&gt;Cypress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Ideas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Easy: Personal Blog&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a personal blog website with navigable multiple blogs.&lt;/li&gt;
&lt;li&gt;Features: Add new blogs, edit existing ones, add/remove blocks of text and images.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hard: Path Visualizer Algorithm&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visualize pathing algorithms based on Clement's video.&lt;/li&gt;
&lt;li&gt;Features: Put walls, implement one algorithm, and create animations.

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://youtu.be/n4t_-NjY_Sg?si=rRpS_2_GXwKShVYO&amp;amp;t=178"&gt;Clement's Video&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Basics of APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=-mN3VyJuCjM"&gt;How APIs Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=lsMQRaeKNDk"&gt;What is a REST API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=eIQh02xuVw4"&gt;GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=UBUNrFtufWo"&gt;Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=W2Z7fbCLSTw"&gt;Databases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Performance
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0fONene3OIAo"&gt;General Performance Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A. Measuring Performance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lighthouse&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/harlan-zw/unlighthouse"&gt;Unlighthouse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=VyaHwvPWuZU"&gt;Lighthouse Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Profiling&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=TcTSqhpm80Y"&gt;Browser Dev Tools Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/gTVpBbFWry8?si=wSPHKr5TqH1Xy93f"&gt;Chrome Dev Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LBgfSwX4GDI"&gt;Network Tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6m31FmsqXAo"&gt;Optimizing Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=LGT4Qe7v0So"&gt;Performance Tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=fvfqnFYXF_8"&gt;Memory Tab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  B. Improving Performance
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimize Assets&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kwUfeWe7DCw"&gt;JavaScript Bundle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/shorts/3lFNSLDsjdQ?si=LF6XPL8T4wduwjwr"&gt;Images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://purgecss.com"&gt;PurgeCss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lazy Loading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=hJ7Rg1821Q0"&gt;Images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/lazy-loading"&gt;Next.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Web Workers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Gcp7triXFjg"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Caching&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=dGAgxozNWFE"&gt;Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use a CDN&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=RI9np1LWzqw"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Research Frameworks and Tools&lt;/strong&gt; - Make sure to do your research on your current javascript framework and find out if it has a superset (eg React -&amp;gt;Nextjs, Svelte -&amp;gt; Sveltekit, Vue-&amp;gt;Nuxtjs). They often come with many improvments and optimizations out of the box. There are also tools like &lt;a href="https://partytown.builder.io/"&gt;Partytown&lt;/a&gt; which can vastly improve performance in some specific cases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ultimate Tip&lt;/strong&gt;: Understand and adapt generic optimizations for specific issues in your app. There will be no silver bullet, you will most likely have to apply a combination of all optimizations listed above, so don't take them as the end of possibilities, just use them as building blocks&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  21. Ways to Render a Webpage
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Dkx5ydvtpCA"&gt;10 Ways to render a webpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kUs-fH1k-aM"&gt;Comparison&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A. Static Websites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=_wFJj94kSTU"&gt;Static vs Dynamic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. Single Page Applications (SPA)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=me5lS00Nj1k"&gt;Single vs Multi Page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Server Side Rendering (SSR)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ObrSuDYMl1s"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D. Server Side Generation (SSG) - explained in videos above&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E. Hydration - explained in videos above&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  22. SEO
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=-B58GgsehKQ"&gt;SEO Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  23. Picking a Meta Framework
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Meta frameworks can offer extra power and features over base frameworks like Svelte, React, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  24. Deployment and Hosting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Most platforms offer easy deployment via GitHub repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A. Vercel
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. Netlify
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  C. GitHub Pages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  28. Interesting Libraries
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A. D3js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://d3js.org/"&gt;D3js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  B. Threejs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://threejs.org/"&gt;Threejs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  C. Animejs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://animejs.com/"&gt;Animejs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  D. Chart.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.chartjs.org/"&gt;Chart.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  29. What's Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build a project, prepare for job interviews, or learn new complementary skills.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  Topics to Be Added
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A. Application Storage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=GihQAC1I39Q"&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;B. Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Third_Party_Javascript_Management_Cheat_Sheet.html"&gt;OWASP Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Progressive Web Apps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. ESLint and Prettier&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E. CI/CD&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F. Ruby on Rails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;G. Meteorjs&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>learning</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
