<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Nicholas Guantai]]></title><description><![CDATA[Software developer and Machine learning engineer]]></description><link>https://nicholasguantai.com</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 16:56:56 GMT</lastBuildDate><atom:link href="https://nicholasguantai.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Angular Dependency Injection: A Beginner’s Guide]]></title><description><![CDATA[If you’ve made your way to this article, you’ve likely heard of Angular, Google’s popular framework for building web applications. One challenging but critical topic that you’ll inevitably encounter as you delve deeper into Angular is Dependency Inje...]]></description><link>https://nicholasguantai.com/angular-dependency-injection-a-beginners-guide</link><guid isPermaLink="true">https://nicholasguantai.com/angular-dependency-injection-a-beginners-guide</guid><category><![CDATA[Angular]]></category><category><![CDATA[dependency injection]]></category><dc:creator><![CDATA[Nicholas Guantai]]></dc:creator><pubDate>Wed, 25 Oct 2023 12:51:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698237505226/f0c121b4-6bd5-4710-a23d-81a89b8ce911.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you’ve made your way to this article, you’ve likely heard of Angular, Google’s popular framework for building web applications. One challenging but critical topic that you’ll inevitably encounter as you delve deeper into Angular is Dependency Injection (DI). So, buckle up as we’re about to embark on an exciting journey to understand DI, its advantages, and how to use it in Angular.</p>
<h3 id="heading-what-is-dependency-injection"><strong>What is Dependency Injection?</strong></h3>
<p>In simple terms, DI is a design pattern that enables a class to receive dependencies from an external source rather than creating them itself.</p>
<p>Imagine a scenario where you’re constructing a house. You could either create every item (bricks, cement, windows, doors, etc.) yourself or get them delivered from various suppliers. The latter approach is similar to DI: it’s all about getting ‘dependencies’ (i.e., services or objects) ‘injected’ into a class.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> House {
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
    <span class="hljs-built_in">this</span>.brick = <span class="hljs-keyword">new</span> Brick();
    <span class="hljs-built_in">this</span>.cement = <span class="hljs-keyword">new</span> Cement();
  }
}
</code></pre>
<p>In the code snippet above, <code>House</code> creates its own dependencies. Here are some reasons why this is problematic:</p>
<ol>
<li><p><strong>Testing difficulty</strong>: In this approach, when you want to test the <code>House</code> class, you are forced to also test with <code>Brick</code> and <code>Cement</code> objects. You can't replace these dependencies with mock objects for testing, because the <code>House</code> class is directly instantiated with new <code>Brick</code> and <code>Cement</code> instances.</p>
</li>
<li><p><strong>Less flexibility</strong>: The <code>House</code> class is rigidly configured to use <code>Brick</code> and <code>Cement</code>. What if later you want to construct a <code>House</code> with <code>Stone</code> and <code>Clay</code> instead? You'd need to modify the <code>House</code> class itself, which isn't ideal, especially if the <code>House</code> class is used widely in your application.</p>
</li>
<li><p><strong>Code reusability</strong>: By creating dependencies within the class, it becomes hard to reuse them across different classes or modules. For instance, if you need to use the same <code>Brick</code> and <code>Cement</code> instances in another class, you cannot do so without creating new instances.</p>
</li>
</ol>
<p>Now, let’s see how Dependency Injection could change this.</p>
<h3 id="heading-why-dependency-injection"><strong>Why Dependency Injection?</strong></h3>
<p>In the code snippet below, <code>House</code> is no longer responsible for creating <code>Brick</code> or <code>Cement</code>. It simply declares what it needs, and it's up to the system (in Angular's case, the injector) to provide those dependencies. This makes your code much easier to manage and evolve over time.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> House {
  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">brick: Brick, cement: Cement</span>) {
    <span class="hljs-built_in">this</span>.brick = brick;
    <span class="hljs-built_in">this</span>.cement = cement;
  }
}
</code></pre>
<p>Dependency Injection helps to solve the problems identified above. Let’s discuss how DI addresses each of those problems.</p>
<ol>
<li><p><strong>Testing made easier</strong>: With DI, testing becomes easier because you can inject mock versions of your dependencies during testing. For instance, if <code>Brick</code> and <code>Cement</code> services make HTTP requests to a server, and you want to isolate <code>House</code> from these server requests during testing, you can provide mock versions of <code>Brick</code> and <code>Cement</code> that do not make actual HTTP requests.</p>
</li>
<li><p><strong>Flexibility</strong>: DI provides flexibility to your classes. If the <code>House</code> class needs to use <code>Stone</code> and <code>Clay</code> instead of <code>Brick</code> and <code>Cement</code>, you can simply change the services you inject without needing to change the <code>House</code> class itself. This way, <code>House</code> is less concerned about the specific implementation of the dependencies it uses and more focused on how it uses them. This is also known as the Dependency Inversion Principle: depend on abstractions, not on concrete classes.</p>
</li>
<li><p><strong>Code reusability</strong>: DI promotes code reusability. Once <code>Brick</code> and <code>Cement</code> services are created, they can be injected wherever required, avoiding the need to create new instances every time. This makes your code cleaner and more efficient.</p>
</li>
</ol>
<h2 id="heading-dependency-injection-in-angular"><strong>Dependency Injection in Angular</strong></h2>
<p>Now that we understand the basics of DI let’s see how it works in Angular. Angular’s DI framework provides dependencies to a class upon instantiation. These dependencies are typically services that provide functionality such as fetching data from a server or logging user interactions.</p>
<p>To start with, let’s define a simple service called <code>LogService</code> that logs messages to the console.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { Injectable } <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/core'</span>;

<span class="hljs-meta">@Injectable</span>({
  providedIn: <span class="hljs-string">'root'</span>,
})
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> LogService {
  log(message: <span class="hljs-built_in">string</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`LogService: <span class="hljs-subst">${message}</span>`</span>);
  }
}
</code></pre>
<p>Next, let’s inject this service into a component called <code>AppComponent</code>.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { Component } <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/core'</span>;
<span class="hljs-keyword">import</span> { LogService } <span class="hljs-keyword">from</span> <span class="hljs-string">'./log.service'</span>;

<span class="hljs-meta">@Component</span>({
  selector: <span class="hljs-string">'app-root'</span>,
  templateUrl: <span class="hljs-string">'./app.component.html'</span>,
  styleUrls: [<span class="hljs-string">'./app.component.css'</span>],
})
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> AppComponent {
  title = <span class="hljs-string">'Hello Angular!'</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> logService: LogService</span>) {
    <span class="hljs-built_in">this</span>.logService.log(<span class="hljs-built_in">this</span>.title);
  }
}
</code></pre>
<p>In the code above, the Angular DI system injects an instance of <code>LogService</code> into <code>AppComponent</code> via its constructor. We can then use this service to log a message to the console.</p>
<h3 id="heading-the-injectable-decorator"><strong>The @Injectable Decorator</strong></h3>
<p>You might have noticed the <code>@Injectable</code> decorator on <code>LogService</code>. This decorator tells Angular that this service might itself have dependencies. Even though our <code>LogService</code> doesn't have any dependencies at the moment, it's good practice to add <code>@Injectable</code> in preparation for future needs.</p>
<h3 id="heading-providers-and-injector"><strong>Providers and Injector</strong></h3>
<p>Two key concepts in Angular DI are providers and injectors. These two concepts are integral to Angular’s Dependency Injection (DI) system, but they can sometimes be a bit tricky to understand. To make it easier, think of the injector as a bakery and the provider as the recipe for creating a service.</p>
<h3 id="heading-providers-your-services-recipe"><strong>Providers: Your Service’s Recipe</strong></h3>
<p>A provider is like a recipe for creating an instance of a service. It tells the injector how to create or obtain that service. It’s typically the service class itself. Let’s consider an example where we have a service called <code>UserService</code>. This service might look like this:</p>
<pre><code class="lang-typescript"><span class="hljs-meta">@Injectable</span>({
  providedIn: <span class="hljs-string">'root'</span>,
})
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> UserService {
  getUsers() {
    <span class="hljs-keyword">return</span> [<span class="hljs-string">'John'</span>, <span class="hljs-string">'Jane'</span>, <span class="hljs-string">'Bob'</span>];
  }
}
</code></pre>
<p>Here, <code>UserService</code> is a provider because it's the recipe for creating an instance of the <code>UserService</code>. The <code>@Injectable</code> decorator tells Angular that this class can be used as a provider.</p>
<h3 id="heading-where-do-we-define-providers"><strong>Where Do We Define Providers?</strong></h3>
<p>We usually define providers in Angular modules or components using the <code>providers</code> property. When you define providers, Angular creates an injector with all those providers. When a class needs a service, the injector checks its container of instances to see if it already has one to reuse. If not, the injector makes a new one using the provider.</p>
<pre><code class="lang-typescript"><span class="hljs-meta">@Component</span>({
  selector: <span class="hljs-string">'app-root'</span>,
  templateUrl: <span class="hljs-string">'./app.component.html'</span>,
  styleUrls: [<span class="hljs-string">'./app.component.css'</span>],
  providers: [UserService] <span class="hljs-comment">// UserService is the provider</span>
})
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> AppComponent { ... }
</code></pre>
<p>In our <code>UserService</code> example above, we actually used a shortcut with <code>providedIn: 'root'</code>. This automatically provides the <code>UserService</code> in the root injector, which is like the main bakery for the whole app. This means that <code>UserService</code> will be available anywhere in our app.</p>
<h3 id="heading-injectors-the-bakery"><strong>Injectors: The Bakery</strong></h3>
<p>An injector is a mechanism that is responsible for creating instances of services and injecting them into classes like components, other services, etc. Think of the injector as a bakery. If you ask it for a cake (<code>UserService</code> in our example), it will look to see if it has a cake already made. If it does, it gives you that cake. If it doesn't, it uses the recipe (provider) to make a new cake and then gives you the cake.</p>
<p>Here’s an example of how an injector might be asked for a service:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { Component } <span class="hljs-keyword">from</span> <span class="hljs-string">'@angular/core'</span>;
<span class="hljs-keyword">import</span> { UserService } <span class="hljs-keyword">from</span> <span class="hljs-string">'./user.service'</span>;

<span class="hljs-meta">@Component</span>({
  selector: <span class="hljs-string">'app-root'</span>,
  templateUrl: <span class="hljs-string">'./app.component.html'</span>,
  styleUrls: [<span class="hljs-string">'./app.component.css'</span>],
})
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> AppComponent {
  users: <span class="hljs-built_in">string</span>[];

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> userService: UserService</span>) {
    <span class="hljs-built_in">this</span>.users = userService.getUsers();
    <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">this</span>.users);
  }
}
</code></pre>
<p>In this example, <code>AppComponent</code> asks the injector for <code>UserService</code>. The injector then checks if it has an instance of <code>UserService</code> to give. If it does, it will provide that instance. If it doesn't, it will use the <code>UserService</code> provider (recipe) to create a new instance and then give that to <code>AppComponent</code>.</p>
<p>The injector in Angular is not explicitly defined by developers in the code. Rather, it’s implicitly created and managed by the Angular framework itself. Angular creates a root injector for the application when it bootstraps the application, using the providers defined in the root module (<code>AppModule</code> by convention).</p>
<p>In Angular, an injector is created for every Angular module and component. So when you define a module or a component, Angular implicitly creates an injector for it.</p>
<p>If you provide a service at the component level, Angular will create a new instance of the injector for that component and its child components. This instance will be different from the one associated with the root or any other module. This allows Angular to have a hierarchical injector system, which means you can override service instances and control the scope of services.</p>
<p>To recap, providers and injectors work together to make Angular’s Dependency Injection system work. Providers are like recipes that tell the injector how to create or find an instance of a service. The injector is like a bakery that takes in these recipes and uses them to create and provide these instances. This whole process allows us to write modular, reusable, and testable code in our Angular applications.</p>
<p><strong>Further Reading</strong></p>
<p><a target="_blank" href="https://angular.io/guide/dependency-injection">https://angular.io/guide/dependency-injection</a></p>
]]></content:encoded></item><item><title><![CDATA[Kotlin collections for beginners]]></title><description><![CDATA[Most of a programmer's everyday work involves dealing with data. This includes collecting data from the user, manipulating the data, and displaying data to the user. 
As a programmer, you will work with different types of data, and most of the time, ...]]></description><link>https://nicholasguantai.com/kotlin-collections-for-beginners</link><guid isPermaLink="true">https://nicholasguantai.com/kotlin-collections-for-beginners</guid><category><![CDATA[Kotlin]]></category><category><![CDATA[Android]]></category><category><![CDATA[kotlin beginner]]></category><dc:creator><![CDATA[Nicholas Guantai]]></dc:creator><pubDate>Wed, 02 Jun 2021 08:55:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622624040477/wNyg-OvrZ.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most of a programmer's everyday work involves dealing with data. This includes collecting data from the user, manipulating the data, and displaying data to the user. </p>
<p>As a programmer, you will work with different types of data, and most of the time, you will need to work with collections of data. </p>
<h3 id="so-what-are-collections">So what are collections?</h3>
<p>If you're familiar with programming then you understand the concept of data types such as boolean, int, string, etc. </p>
<p>Now suppose you are working on a library application that displays and manages books. In this case, you have to use a group of objects (books) of the same type. In common terms, this is a collection because you can collect those objects and add or remove them when needed.</p>
<p>Collections, therefore, contain many objects of the same type.</p>
<h3 id="collection-types-in-kotlin">Collection types in kotlin</h3>
<p>Kotlin supports the use of the following types:</p>
<ol>
<li><strong>List</strong></li>
<li><strong>Sets</strong></li>
<li><strong>Map or Dictionary</strong></li>
</ol>
<p>You might ask why do you need different types of collections if I will be storing objects of the same type?</p>
<p>So let's explore each of these and understand how different they are from each other.</p>
<h2 id="lists-in-kotlin">Lists in kotlin</h2>
<p>Lists have the following properties:</p>
<ul>
<li><p>They are ordered - This means that the order of items in the list matters.</p>
</li>
<li><p>They are dynamic- This refers to memory, meaning that the size is not fixed. You can add as many items as you need.</p>
</li>
<li><p>They can be immutable or mutable - Mutable lists allow you to add, remove, and insert elements while immutable lists do not allow you to add or remove elements.</p>
</li>
<li><p>They can be duplicates- Which means you can have duplicate values or items in the list. For example, you can have two books with the same name in a list of books.</p>
</li>
</ul>
<h3 id="creating-a-list">Creating a list</h3>
<pre><code><span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
  <span class="hljs-keyword">val</span> list = listOf(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>)
  println(list)
}
</code></pre><p>The above list contains an immutable list of integer numbers. You cannot insert or remove an element from the above list.</p>
<p>To do that, you need to create a mutable list ie.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
  <span class="hljs-keyword">val</span> list = mutablelistOf(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>)
  println(list)
}
</code></pre><p>Now you can perform operations such as:</p>
<pre><code>  <span class="hljs-string">list[2]</span> <span class="hljs-string">=</span> <span class="hljs-number">100</span>  <span class="hljs-string">//</span> <span class="hljs-string">change</span> <span class="hljs-string">the</span> <span class="hljs-string">element</span> <span class="hljs-string">at</span> <span class="hljs-string">index</span> <span class="hljs-number">2</span> <span class="hljs-string">to</span> <span class="hljs-number">100</span>
  <span class="hljs-string">println(list[2])</span> <span class="hljs-string">//</span> <span class="hljs-number">100</span>
  <span class="hljs-string">list.add(index</span> <span class="hljs-string">=</span> <span class="hljs-number">3</span><span class="hljs-string">,</span> <span class="hljs-string">element</span> <span class="hljs-string">=</span> <span class="hljs-number">500</span><span class="hljs-string">)</span> <span class="hljs-string">//</span> <span class="hljs-string">add</span> <span class="hljs-string">an</span> <span class="hljs-string">element</span> <span class="hljs-string">at</span> <span class="hljs-string">index</span> <span class="hljs-number">3</span>
  <span class="hljs-string">println(list[3])</span> <span class="hljs-string">//</span> <span class="hljs-number">500</span>
  <span class="hljs-string">list.remove(7)</span> <span class="hljs-string">//</span> <span class="hljs-string">remove</span> <span class="hljs-string">element</span> <span class="hljs-number">7</span>
  <span class="hljs-string">println(list)</span> <span class="hljs-string">//</span> [<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">100</span>, <span class="hljs-number">500</span>, <span class="hljs-number">6</span>]
  <span class="hljs-string">list.removeAt(0)</span> <span class="hljs-string">//</span> <span class="hljs-string">remove</span> <span class="hljs-string">the</span> <span class="hljs-string">element</span> <span class="hljs-string">at</span> <span class="hljs-string">index</span> <span class="hljs-number">0</span> <span class="hljs-string">ie</span> <span class="hljs-string">element</span> <span class="hljs-number">2</span>
  <span class="hljs-string">println(list)</span> <span class="hljs-string">//</span> [<span class="hljs-number">3</span>, <span class="hljs-number">100</span>, <span class="hljs-number">500</span>, <span class="hljs-number">6</span>]
</code></pre><h2 id="sets-in-kotlin">Sets in kotlin</h2>
<p>A set is a collection of elements where each of the elements is unique and there are no duplicates. 
Properties:</p>
<ul>
<li>They are unordered- order does not matter</li>
<li>They are unique - No duplicates</li>
<li>They can be either mutable or immutable</li>
</ul>
<h3 id="creating-sets">Creating sets</h3>
<p>To create immutable sets: </p>
<pre><code>fun main() {
  val numbers = <span class="hljs-keyword">setOf</span>(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>)
  println(numbers) 
}
</code></pre><p>To create mutable sets:</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
  <span class="hljs-keyword">val</span> numbers = mutableSetOf(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>)
  println(numbers)
}
</code></pre><p>Sets use an object’s hashCode() internally to filter out duplicates. If the set is mutable and you try to add another element to it, the new object will replace the old one. You can override hashCode() and manually determine how to differentiate the elements.</p>
<p>Sets are a bit different than lists when it comes to accessing data. You wouldn’t look up items in a set using indices since the index of an item is actually its hash code. If you know the hash code, then you should already have the value.</p>
<h2 id="maps-in-kotlin">Maps in kotlin</h2>
<p>A Map stores key-value pairs (or entries ); keys are unique, but different keys can be paired with equal values. And like other collections, maps can be both mutable and immutable.</p>
<h3 id="creating-a-map">Creating a map</h3>
<p>We initialize all the collections the same way. So, just like the other collections, you can create mutable or immutable maps:</p>
<p><strong>Immutable map</strong></p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
  <span class="hljs-keyword">val</span> peopleAges = mapOf(
      <span class="hljs-string">"Fred"</span> to <span class="hljs-string">"23"</span>,
      <span class="hljs-string">"Ann"</span> to <span class="hljs-string">"9"</span>,
      <span class="hljs-string">"Grace"</span> to <span class="hljs-string">"40"</span>)
}
</code></pre><p><strong>Mutable map</strong></p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">fun</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
  <span class="hljs-keyword">val</span> peopleAges = mutableMapOf(
      <span class="hljs-string">"Fred"</span> to <span class="hljs-string">"23"</span>,
      <span class="hljs-string">"Ann"</span> to <span class="hljs-string">"9"</span>,
      <span class="hljs-string">"Grace"</span> to <span class="hljs-string">"40"</span>)
}
</code></pre><p>With mutable maps, you can add or remove items using the keys and the method put().</p>
<p><strong>Add items</strong></p>
<pre><code><span class="hljs-selector-tag">peopleAges</span><span class="hljs-selector-class">.put</span>(<span class="hljs-string">"Nick"</span>, <span class="hljs-number">22</span>) <span class="hljs-comment">//This adds another key-value element</span>
</code></pre><p><strong>Change items</strong></p>
<pre><code><span class="hljs-attribute">peopleAges</span>[<span class="hljs-string">"Fred"</span>]=<span class="hljs-number">24</span>  //This changes the value of Fred's age from <span class="hljs-number">23</span> to <span class="hljs-number">24</span>
</code></pre><p>Iterating through maps is a bit different from the rest of the Kotlin collections. Since maps have two objects for each element, you have to iterate over pairs, instead of single values. You can do this in the following way:</p>
<pre><code>peopleAges.<span class="hljs-keyword">forEach</span> { key, value -&gt; println(<span class="hljs-string">"Value for key <span class="hljs-subst">$key</span> is <span class="hljs-subst">$value</span>"</span>) }
</code></pre><p>You iterate through the pairs. In each iteration, you receive both the key and the value for that key, since it’s often necessary to know and consume both the key and the value.</p>
<h3 id="conclusion">Conclusion</h3>
<p>Collections are very crucial in programming. This tutorial has introduced you to the most common collections in kotlin. To read more about kotlin collections and the various methods associated with each collection type, check out the  <a target="_blank" href="https://kotlinlang.org/docs/collections-overview.html">Kotlin documentation</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Kotlin Android development courses and tutorials for a beginner]]></title><description><![CDATA[Are you a beginner in android development looking for resources to learn android mobile development using Kotlin?
This post lists a few tutorials and courses that I have found to be valuable for anyone starting out with kotlin android development.
1....]]></description><link>https://nicholasguantai.com/kotlin-android-development-courses-and-tutorials-for-a-beginner</link><guid isPermaLink="true">https://nicholasguantai.com/kotlin-android-development-courses-and-tutorials-for-a-beginner</guid><category><![CDATA[Kotlin]]></category><category><![CDATA[Android]]></category><category><![CDATA[kotlin beginner]]></category><category><![CDATA[android app development]]></category><dc:creator><![CDATA[Nicholas Guantai]]></dc:creator><pubDate>Tue, 25 May 2021 08:40:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1621931750377/HWLxcwxnK.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you a beginner in android development looking for resources to learn android mobile development using Kotlin?</p>
<p>This post lists a few tutorials and courses that I have found to be valuable for anyone starting out with kotlin android development.</p>
<h2 id="1-android-basics-in-kotlin-google">1. Android basics in Kotlin- Google</h2>
<p>This is the best course for a complete beginner in android and kotlin. The course assumes no prior knowledge in either android and kotlin. </p>
<p> <a target="_blank" href="https://developer.android.com/courses/android-basics-kotlin/course">Google Android Basics in Kotlin</a></p>
<h2 id="2-developing-android-apps-with-kotlin-udacity">2. Developing Android Apps with Kotlin - Udacity</h2>
<p>The course is well organized to teach you the basics of android development using kotlin.</p>
<p> <a target="_blank" href="https://classroom.udacity.com/courses/ud9012">Developing Android Apps with Kotlin</a> </p>
<h2 id="3-build-a-simple-android-app-with-kotlin-youtube-tutorial">3. Build A Simple Android App With Kotlin - Youtube tutorial</h2>
<p>This is a youtube tutorial by Philip Lackner on the Traversy Media youtube channel. In this tutorial, you will learn the basics of kotlin android development by building a todo list app.</p>
<p> <a target="_blank" href="https://www.youtube.com/watch?v=BBWyXo-3JGQ">Build A Simple Android App With Kotlin</a> </p>
<h2 id="4-kotlin-course-tutorial-for-beginners-by-freecodecamp">4. Kotlin Course - Tutorial for Beginners by freeCodeCamp</h2>
<p>This is a kotlin crash course for anyone looking to learn the Kotlin programing language which is the official language for android development.</p>
<p> <a target="_blank" href="https://www.youtube.com/watch?v=F9UC9DY-vIU&amp;t=468s">Kotlin Course - Tutorial for Beginners</a></p>
<h2 id="5-android-development-course-build-native-apps-with-kotlin-tutorial">5. Android Development Course - Build Native Apps with Kotlin Tutorial</h2>
<p>Learn to build native Android apps with Kotlin. You will also learn how to use Android Jetpack, Firebase, Room, MVVM, Navigation, LiveData, and Kotlin Coroutines. This full course explains how to build an entire Android app using best practices.</p>
<p> <a target="_blank" href="https://www.youtube.com/watch?v=Iz08OTTjR04&amp;t=2966s">Android Development Course - Build Native Apps with Kotlin Tutorial</a> </p>
]]></content:encoded></item></channel></rss>