<?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: Arvind M</title>
    <description>The latest articles on DEV Community by Arvind M (@judis07).</description>
    <link>https://dev.to/judis07</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%2F831004%2Fedc9fb12-3450-4289-947e-a2fce9c366eb.png</url>
      <title>DEV Community: Arvind M</title>
      <link>https://dev.to/judis07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/judis07"/>
    <language>en</language>
    <item>
      <title>What is Headless WordPress(CMS)?</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Tue, 24 May 2022 13:48:08 +0000</pubDate>
      <link>https://dev.to/judis07/what-is-headless-wordpresscms-2hfc</link>
      <guid>https://dev.to/judis07/what-is-headless-wordpresscms-2hfc</guid>
      <description>&lt;h2&gt;
  
  
  What is a headless CMS?
&lt;/h2&gt;

&lt;p&gt;To understand what a headless CMS is, it helps to understand what traditional content management systems (CMSs) and what are they used for. The CMS manages everything, including the creation, reading, updating and deleting the content, as well as how it is displayed. The CMS approach of putting everything in one place like content, images, HTMl, CSS made it impossible to reuse the content because it was mixed with code.&lt;/p&gt;

&lt;p&gt;Over the years it has become very difficult to organize content in web pages, making it impossible for the same content to adapt to other platforms.&lt;/p&gt;

&lt;p&gt;One way to solve the limitation of traditional CMS is by making use of a headless CMS. A headless CMS is slightly different. It lets you manage content but does not care how the content is displayed. You can choose any front end of your choice that you want the content to be displayed from. Content that is housed in a headless CMS is delivered via APIs for seamless integration across different platforms.&lt;/p&gt;

&lt;p&gt;Some traditional CMS can also be turned into a headless CMS that allows you to send content to a separate presentation layer(front end).&lt;/p&gt;

&lt;p&gt;While headless CMS enables you to choose an appropriate front end of your choice, not all CMS solve an underlying problem: structuring the content so that it can be reused across different platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Headless Wordpress
&lt;/h2&gt;

&lt;p&gt;A headless wordpress works differently; it removes the front end tools, leaving only the backend content management tools. It still allows you to upload, create, edit and delete content. But instead of pushing content directly to the front end, headless wordpress makes its resources available to a separate front end solution through &lt;a href="https://developer.wordpress.org/rest-api/"&gt;REST API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By eliminating themes and instead sharing content via wordpress &lt;a href="https://developer.wordpress.org/rest-api/"&gt;REST API&lt;/a&gt;, any wordpress installation can be made headless.In a headless wordpress configuration, the content management tools are still available, but front end features like themes and block editor are not. Another front end tool handles how the user’s website looks.A headless wordpress is not always the best solution. However, there are times when it is an ideal solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of headless Wordpress
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Front End Flexibility&lt;/strong&gt;: You can keep the “content management”  part of the Wordpress CMS and outsource the front end to virtually any other software of your choice as long as the front end tool can make API requests to the Wordpress API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved Performance&lt;/strong&gt;: In traditional Wordpress the page speed isn’t always faster and slow page load can hurt the end user experience. But with headless Wordpress, one potentially speeds up their page performance. For example,  you can fetch content from Wordpress and assemble it into static HTML pages, then ship the static pages to clients upon request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved Security&lt;/strong&gt;: If the front end is separated from the content, it will be much more difficult to locate and access the content directly through the website, as long as the backend server is sufficiently hidden.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Limitation of headless Wordpress
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complex Maintenance&lt;/strong&gt;: When opting for headless Wordpress, you have two systems to maintain, especially in terms of security and updates. In the long run, maintaining two different systems may lead to technical issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expense&lt;/strong&gt;: Maintaining complex environments may turn out to be expensive. It typically takes more development time to make changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less Wordpress Functionality&lt;/strong&gt;: Designing in the back end becomes difficult  because  live preview is no longer supported. A majority of wordpress plugins do not work.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;After weighing the pros and cons of headless Wordpress and if you decide it is worth pursuing, there are several ways to go about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wordpress Plugins&lt;/strong&gt;: this approach still requires the developer to be well versed in relevant programming languages and API. The main plugin that you can use is WPGraphQL, which lets you turn your WordPress installation into a GraphQL API. What this means is that you can create your own data schemas that any front-end client may use to retrieve data from your headless CMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding it on our own&lt;/strong&gt;: While using a plugin makes it easier but doing it manually will give you more flexibility. Ever since REST API was introduced in Wordpress it has become a great tool to turn Wordpress into a headless CMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Wordpress hosting&lt;/strong&gt;: while this approach is not free it has its own advantages. Some of the best static Wordpress hosts are &lt;a href="https://www.getshifter.io/"&gt;Shifter&lt;/a&gt;, &lt;a href="https://www.hardypress.com/"&gt;HardyPress&lt;/a&gt;, &lt;a href="https://pagely.com/"&gt;NorthStack&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In conclusion, I would definitely recommend using Wordpress as a headless CMS to develop smaller sites like blogs. Hope you find this article useful. :)&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>writing</category>
    </item>
    <item>
      <title>5 essential free resources to learn Javascript</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Fri, 20 May 2022 08:36:26 +0000</pubDate>
      <link>https://dev.to/judis07/5-essential-free-resources-to-learn-javascript-1eld</link>
      <guid>https://dev.to/judis07/5-essential-free-resources-to-learn-javascript-1eld</guid>
      <description>&lt;h2&gt;
  
  
  What is Javascript?
&lt;/h2&gt;

&lt;p&gt;Javascript is a beginner friendly programming language that lets you add interactivity to your website. It is the most fun and useful programming language to learn. It can be used to do many different things like building websites, apps, servers and much more.&lt;/p&gt;

&lt;p&gt;Due to its immense popularity it’s one of the most sought after skills in the tech industry today. If you want to become a Javascript Developer and build exciting things for the web then you are in the right place because  I have pulled together a list of free resources for you to learn Javascript.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Scrimba: 7 Hour interactive course on Javascript - &lt;a href="https://scrimba.com/learn/learnjavascript"&gt;Link&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This beginner’s tutorial taught by the founder of Scrimba offers 140+ coding challenges and 3 unique projects to help you solidify your Javascript knowledge. Once you are done, you will feel confident enough to pick up any front end framework of your choice. The only prerequisite before taking this course, you should have a basic understanding of HTML and CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) FreeCodeCamp: Javascript Algorithm and Data Structures - &lt;a href="https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/"&gt;Link&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;One of the originals and still one of the best, FCC continues to expand its most excellent range of free courses and this Javascript course is one of them. With the help of this course you will learn the fundamentals of Javascript including variables, arrays, objects, loops and functions. Along the way you will also learn how to create algorithms to become a better problem solver.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) WES BOS: Javascript30  - &lt;a href="https://javascript30.com/"&gt;Link&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A super helpful resource to take you from a beginner to intermediate Javascript Developer. This course does exactly what it says; helps you learn Javascript by building 30 projects in 30 days while talking about the hows, the whys and  the whats that you will use to solve problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Ania Kubów: Learn Javascript by building 7 Games  - &lt;a href="https://www.youtube.com/watch?v=ec8vSKJuZTk&amp;amp;t=7516s"&gt;Link&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;It is hard to believe this video course is available for free on youtube. When you learn by building projects, you learn better and when you learn by building games you learn 10 times better. By the end of this course you will have enough skills and Javascript knowledge to build projects on your own.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Traversy Media: Javascript Playlist - &lt;a href="https://www.youtube.com/watch?v=hdI2bqOjy3c&amp;amp;list=PLillGF-RfqbbnEGy3ROiLWk7JMCuSyQtX"&gt;Link&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I think Traversy Media is worth a mention, not just for its vast selection of free Javascript courses but also for its quality content. This youtube channel’s Javascript playlist offers almost everything you will need to become a Javascript Pro. It is one of the best Javascript resources for you to learn and become a Javascript Developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Once you have got a good understanding of plain Javascript, the next step is to pick up a front end framework. React, Vue and Angular are some popular Javascript frameworks to learn to become a better Javascript Developer.&lt;/p&gt;

&lt;p&gt;I will keep updating this essential list as and when I can. Add this article to your bookmarks, so you can alway have it ready. :)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>career</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>7 Best Image Hosting Platforms to use In 2022 for your next project</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Tue, 17 May 2022 10:45:02 +0000</pubDate>
      <link>https://dev.to/judis07/7-best-image-hosting-platforms-to-use-in-2022-for-your-next-project-43o0</link>
      <guid>https://dev.to/judis07/7-best-image-hosting-platforms-to-use-in-2022-for-your-next-project-43o0</guid>
      <description>&lt;p&gt;Image hosting services  helps users to upload and host images on the internet easily. Following are some of the image hosting platforms that offer common features like &lt;strong&gt;free storage space, backups, quick uploading, editing and ease of sharing on social media&lt;/strong&gt;:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://cloudinary.com/pricing"&gt;Cloudinary&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;It is a platform that provides a better way to upload, manage and deliver ten of thousands to millions of images and videos. It makes it easier for brands to deliver fast and flawless visual experiences at scale using AI, automation and advanced patent pending image and video processing capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automated image and  video optimization&lt;/li&gt;
&lt;li&gt;Smart Image cropping&lt;/li&gt;
&lt;li&gt;High performance delivery through a CDN&lt;/li&gt;
&lt;li&gt;Media performance analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;The free plan provides &lt;strong&gt;25 monthly credits&lt;/strong&gt; which gives us the opportunity to have&lt;br&gt;
&lt;strong&gt;25 GB of manage storage&lt;/strong&gt; or &lt;strong&gt;25 GB of net  viewing bandwidth&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://filebase.com/"&gt;Filebase&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;It is the first S3 compatible object storage platform that allows its users to store&lt;br&gt;
data in a secure, redundant and performant manner across decentralised storage networks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Instantly upload files in a single click&lt;/li&gt;
&lt;li&gt;Fast global CDN that distributes content globally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;Filebase offers a &lt;strong&gt;5GB&lt;/strong&gt; free tier to all users, with no expiration or trials.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://imgbb.com/"&gt;ImgBB&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A quick and free image hosting service that is primarily used to upload and share images through links or embedded HTML codes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No account required to upload files&lt;/li&gt;
&lt;li&gt;Files have a maximum limit of 32MB per file&lt;/li&gt;
&lt;li&gt;Convenient feature allows quick image resizing&lt;/li&gt;
&lt;li&gt;Supports JPG, PNG, BMP, GIF, TIFF, WEBP, HEIC, and PDF files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;Its free plan has unlimited storage space. Contains AD.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://uploadcare.com/pricing/"&gt;Uploadcare&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;It provides companies with simple, powerful, developer friendly building blocks to handle file uploading, processing and delivery. A complete out of the box solution created for the engineers by engineers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited image transformations&lt;/li&gt;
&lt;li&gt;Best in class file uploader&lt;/li&gt;
&lt;li&gt;Worldwide CDN coverage&lt;/li&gt;
&lt;li&gt;Automated image optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;Its free plan only offers &lt;strong&gt;3000 uploads&lt;/strong&gt; with a storage space of &lt;strong&gt;3 GB&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://imagekit.io/plans"&gt;Imagekit&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;It uses a global network of servers for real time image optimization, resizing, image upload and a fast image CDN. It provides a faster and lighter experience for its users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Displays images in milliseconds&lt;/li&gt;
&lt;li&gt;Delivers compressed and responsive images in right format&lt;/li&gt;
&lt;li&gt;Lets user use their own domain for better SEO and control&lt;/li&gt;
&lt;li&gt;Uses built in AWS cloudfront or user can choose their own&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;Its free plan offers &lt;strong&gt;20 GB&lt;/strong&gt; bandwidth and media storage per month.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://aws.amazon.com/s3/"&gt;AWS S3&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;It is an object storage service offering industry leading scalability, security and performance.Users can optimise costs, organise data and configure fine tuned access controls to meet specific business needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Storage management and monitoring&lt;/li&gt;
&lt;li&gt;Storage analytics and insights&lt;/li&gt;
&lt;li&gt;Fast Data processing and Performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;It provides &lt;strong&gt;5 GB&lt;/strong&gt; of standard storage for the &lt;strong&gt;first 12 months&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://firebase.google.com/pricing"&gt;Firebase (Cloud Storage)&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Cloud storage for Firebase is built for developers to store and serve user generated content, such as photos and videos. It is a powerful, simple and cost effective object storage solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Strong security &lt;/li&gt;
&lt;li&gt;High scalability&lt;/li&gt;
&lt;li&gt;Robust operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free Plan
&lt;/h3&gt;

&lt;p&gt;Its free plan gives a cloud storage space upto &lt;strong&gt;5GB&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Take a good look at the image hosting services summarised in this article and choose according to your needs. If you find this article helpful please do like, comment and share it with others. Thank you :). &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My journey as a self taught developer</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Sun, 15 May 2022 10:22:50 +0000</pubDate>
      <link>https://dev.to/judis07/my-journey-as-a-self-taught-developer-5eni</link>
      <guid>https://dev.to/judis07/my-journey-as-a-self-taught-developer-5eni</guid>
      <description>&lt;p&gt;In this article, I will share my journey as a self taught developer and what it takes to have a career in tech without a degree and how I overcome common developer problems like imposter syndrome &amp;amp; tutorial hell.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Story
&lt;/h2&gt;

&lt;p&gt;When I was in school I used to be a very shy introvert kid and was neither good nor bad at studies. Basically was just an average performing kid at school for a very long time.&lt;/p&gt;

&lt;p&gt;I was into sports especially cricket because it is a sport that probably every other kid had played during his or her childhood in India. &lt;/p&gt;

&lt;p&gt;I loved playing cricket so much that all my family members knew that if I was not around and they needed to find me, they would only find me in one of the cricket playgrounds near my house. Basically the cricket grounds used to be my second home.&lt;/p&gt;

&lt;p&gt;Even though I was so crazy for cricket, I never had a proper interest in pursuing a career in cricket. Other than cricket, technology was something that used to fascinate me. &lt;/p&gt;

&lt;p&gt;I was always curious to know how websites are built, at that time I thought it took something closer to knowing rocket science to build websites. Since I was an introvert I used to hesitate a lot asking about websites and technology to my computer science teachers. &lt;/p&gt;

&lt;p&gt;However, when I gathered  enough courage to let them know about my curiosity for websites they did not care to explain it to me properly which created self doubts about my liking for technology and made me feel not good enough about myself. &lt;/p&gt;

&lt;p&gt;It was one of the first instances when imposter syndrome struck me. At that time I had no idea what imposter syndrome is and how it is natural for us humans to struggle with it.&lt;/p&gt;

&lt;p&gt;That was the day when I gave up on my liking for website development. After that day my only goal was to study properly in school and get good grades to have a better future because that is what most of the schools and teachers make you believe in some parts of our country.&lt;/p&gt;

&lt;p&gt;Of course, we have progressed with time but there is still room for improvement, marks still continue to play an important aspect in deciding the future of children in our country. Like any student, marks made me underperform in exams and subject to constant comparison with other top graders in school.&lt;/p&gt;

&lt;p&gt;While I got average grades in most of my schooling life, I decided to change that a little from my 10th standard in order to get into a top tier college. I was successful in getting my grades up by the time I passed out of school and in fact was to get into one of the best colleges in India.&lt;/p&gt;

&lt;p&gt;However, I had to drop out of college due to some family issues. It was a very difficult decision for me because at that time I was under the impression that to succeed in a race of life,a person needs to have a degree. While having a degree has its own importance, it is not the degree but the skill that achieves you success.&lt;/p&gt;

&lt;p&gt;I learnt that it is a skill which attracts the employers and helps you move towards your goal and succeed in life. I learnt various different skills ranging from basic computers to business communication skills.&lt;/p&gt;

&lt;p&gt;Even though I had acquired the necessary skills to get a job, I could not get a job. Because in most parts of the world, especially in India; in order to get a job one needs to have experience and in order to have experience one needs to have a job - it is a paradox that a lot of people get stuck in.&lt;/p&gt;

&lt;p&gt;So, to break out of this paradox I decided to do an internship(paid), which paid me well and at the same time gave me an opportunity to get experienced and learn a new skill set. &lt;/p&gt;

&lt;p&gt;I applied to various different companies for an internship and eventually got selected to do an operations internship at a well established organization. I was fortunate enough to be part of a very passionate and helpful bunch of people. While I learned a lot of different useful things during my internship, one thing that I learned changed my life entirely. &lt;/p&gt;

&lt;p&gt;I learned - “In life you need to find something that you love to do and do it for the rest of your life”. This line had a major impact on me and I started exploring things that I have keen interest in and things that I enjoy doing in which I could have a fruitful career. &lt;/p&gt;

&lt;p&gt;As I had mentioned earlier, when I was a kid I had a great interest in website development but had to give up on it due to not having enough knowledge about it. During my internship I had a computer system available to me. I decided to explore more about website development during my free time.&lt;/p&gt;

&lt;p&gt;That is when I came across Codeacademy’s free web development courses which I got started with immediately and as I explored more I got to know more about  free resources to learn to code.However, even after finishing some courses I was not confident enough to put my newly learned skills to practice.&lt;/p&gt;

&lt;p&gt;Then, I decided to do more courses, watched more youtube videos etc to get better at web development. Even that was not useful and never actually realized that this whole period is referred to as Tutorial Hell. &lt;/p&gt;

&lt;p&gt;Tutorial hell is  referred to as the time in every new developer’s journey where the developer constantly keeps jumping from tutorial to tutorial, coding along with the tutorial without any trouble but not being able to use any of the knowledge in their personal or professional projects.&lt;/p&gt;

&lt;p&gt;Like imposter syndrome, tutorial hell is also very common among a self taught developer’s journey.So, in order to come out of tutorial hell I stopped watching any more tutorial and decided to use all the knowledge that I had learned from previous tutorial to build a project on my own.&lt;/p&gt;

&lt;p&gt;Since I only knew basic HTML and CSS, I started out cloning minimalist looking websites like BBC news, Facebook homepage etc. This is my version of the Facebook &lt;a href="https://rawgit.com/Judis07/facebook_clone/master/index.html"&gt;clone&lt;/a&gt; that I build using basic HTML and CSS. Once I got more comfortable with my skills I created more such websites which eventually helped me get another internship, but this time it was a Wordpress developer  intern role at an early stage startup.&lt;/p&gt;

&lt;p&gt;It was a four months internship with an opportunity  to turn from intern to full time role. When I started my internship I got to know that the company didn’t have a tech team and I was the first person in their tech team along with an experienced Product Manager, it was both a good experience and a bad one. I looked on the positive side and got to work.&lt;/p&gt;

&lt;p&gt;During the internship I had to get myself familiar with Wordpress and had to brush up on HTML and CSS even more. I was fortunate enough to get an opportunity like this where I could learn and improve my skills instantly and put it to work. Thanks to which I was able to add Javascript under my tool belt.So, when you learn by doing you learn better.&lt;/p&gt;

&lt;p&gt;Once my internship got over, the company offered me a full time role to work as a Front end Developer. I was on cloud nine and  could not believe that I had finally got a full time job and could now make a living out of the thing that I love to do the most i.e, website development. Along with me the company hired a new backend developer who had only six months of experience and a CTO who was more into the backend. &lt;/p&gt;

&lt;p&gt;So, basically it was a suicide squad and on top of that the product manger who had the most experience on the the company’s product from a technical viewpoint decided to quit the company. We were an inexperienced team with almost zero knowledge of the company’s product from a technical viewpoint.&lt;/p&gt;

&lt;p&gt;When you have less experience and no experience at all, the only thing you could do to move forward in life is to be ambitious. We all were ambitious in some way or the other and that helped all of us in believing in each other and getting the job done.&lt;/p&gt;

&lt;p&gt;One of the major tasks that we worked on was to create a hybrid mobile and web app for the company. We decided to build a web app and a mobile app using React.JS. For mobile, along with React.JS, we choose to go with Cordova to act as a wrapper to the mobile app.&lt;/p&gt;

&lt;p&gt;So as the front end developer I had to learn React.JS from scratch. Before learning React.JS, I had to get myself familiar with at least intermediate level Javascript because the better you are with Javascript, the more successful you will be with React.JS. Instead of using a free course I decided to buy &lt;a href="https://www.udemy.com/course/modern-javascript-from-novice-to-ninja/"&gt;this&lt;/a&gt; Udemy course to help me learn Javascript. Along with this course I supplemented other youtube tutorials on Javascript from Traversy Media and Net Ninja to solidify my learning.&lt;/p&gt;

&lt;p&gt;Learning the intermediate level of Javascript was one of the most valuable decisions I made to accelerate my ability to work on React projects and become a skilled React Developer. Once I had a good understanding of Javascript, I learnt the basics of React.JS using &lt;a href="https://scrimba.com/learn/learnreact"&gt;this&lt;/a&gt; popular interactive course from Scrimba by solving various coding challenges and building mini projects.&lt;/p&gt;

&lt;p&gt;The main goal was to take my React skills to the next level by building more applications and that is exactly what I did. I started implementing all the React.JS knowledge into practice on the company’s project. As a result, we successfully delivered the project on time meeting all the design and business expectations. &lt;/p&gt;

&lt;p&gt;Me and my team continued to work on numerous different projects and as the number of projects increased, the company decided to increase the size of the tech team as well. A couple of new interns were added to the front end and a few to the backend team.&lt;/p&gt;

&lt;p&gt;As I was the most experienced front end guy, I was given an added responsibility to take care of the front end interns. Due to this pressure, the imposter syndrome kicked in, leaving me feeling inadequate like I don’t belong there and not good enough as a developer.&lt;/p&gt;

&lt;p&gt;The reason being, I was afraid to fail and that too in front of some junior developers. Because my goal was always to learn to code websites and pursue a career doing it, I never thought I would have to mentor and help other developers on my journey. I was never ready for such responsibility.&lt;/p&gt;

&lt;p&gt;Fear of failure means that, subconsciously, you undermine your own efforts to avoid the possibility of larger failure. It made me do nothing and resisted me from moving forward. Eventually when I explored fear of failure I came to understand that it is part and parcel of life. If you look around, all the successful people have experienced some kind of failure in life.&lt;/p&gt;

&lt;p&gt;Most of us will fall &amp;amp; stumble in life, we might make bad decisions. But very often most valuable insights come only after failure. Accepting and learning from those insights is key to succeeding in life. By accepting my knowledge gaps in website development I was able to figure out why I was feeling inadequate and not confident enough to lead a team of developers.&lt;/p&gt;

&lt;p&gt;After realization, I quickly managed to fill out my knowledge gaps by solidifying my skills which helped me overcome my imposter syndrome and lead a team of junior developers in a better way.&lt;/p&gt;

&lt;p&gt;Over the years, a lot of people left the organization, I remained constant and due to my consistency &amp;amp; hard work I was promoted to a senior front end role. After spending three years at a startup, I left the company and now I am working as a Senior Full Stack Web Engineer at Adsparc.&lt;/p&gt;

&lt;p&gt;Thank you for reading. Hopefully sharing my experience will help you keep moving forward and not getting discouraged when things are not going your way :).&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Tutorial: Learn how to reverse a string in Javascript</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Fri, 13 May 2022 14:36:06 +0000</pubDate>
      <link>https://dev.to/judis07/tutorial-learn-how-to-reverse-a-string-in-javascript-58fn</link>
      <guid>https://dev.to/judis07/tutorial-learn-how-to-reverse-a-string-in-javascript-58fn</guid>
      <description>&lt;p&gt;The goal of this Tutorial is to help you understand how to reverse a string in Javascript. You’ll learn different ways to solve this problem. This is one of the best ways to learn how to solve a problem.&lt;/p&gt;

&lt;p&gt;Before you start solving this problem, you will need to familiarise yourself with basic Javascript.&lt;/p&gt;

&lt;p&gt;By the end of the Tutorial, you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Know how to convert a string into an array and convert an array into a string&lt;/li&gt;
&lt;li&gt;Know how to use Javascript build in methods such as: &lt;strong&gt;reverse()&lt;/strong&gt; and &lt;strong&gt;join()&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Know how to loop through a string in reverse order using a &lt;strong&gt;for loop&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Know how to concatenate a string.&lt;/li&gt;
&lt;li&gt;Know how  to use &lt;strong&gt;reduce()&lt;/strong&gt; (higher order array function)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Problem Solving
&lt;/h2&gt;

&lt;p&gt;In order to become a good programmer one needs to be a good problem solver because at the end of the day that is what a developer’s real job is to solve problems. It is one of the main skills that employers seek in job applicants.&lt;/p&gt;

&lt;p&gt;Following are some ways we can solve a problem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The first step to solve a problem is to properly understand the problem. Understanding the problem will help you craft a better solution.&lt;/li&gt;
&lt;li&gt;Once you have understood the problem, implement a plan to solve the problem. 
Do not just jump into coding the solution yet. Take appropriate time to craft the solution.&lt;/li&gt;
&lt;li&gt;Once you have a plan. Execute the plan. Plan execution involves the actual coding.&lt;/li&gt;
&lt;li&gt;Review your solution. Once a problem has been solved, always look to see if the solution can get better.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Solution #1
&lt;/h2&gt;

&lt;p&gt;Javascript already has a built in method &lt;strong&gt;reverse()&lt;/strong&gt; that reverses the order of the elements in an array. However, we need to reverse a string and the &lt;strong&gt;reverse()&lt;/strong&gt; method can not be used on a string. &lt;/p&gt;

&lt;p&gt;In order to use the &lt;strong&gt;reverse()&lt;/strong&gt; method, we need to make sure we are working with an array. So the first step of this solution is to convert the string into an array which can be achieved by using a Javascript string method &lt;strong&gt;split()&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;split()&lt;/strong&gt; method converts a string into an array of characters and returns a new array.A variable named &lt;strong&gt;strArr&lt;/strong&gt; will store the array of characters. Now that we have an array, we can use the &lt;strong&gt;reverse()&lt;/strong&gt; method on this array which will give us the array in reverse order and store the result in a variable named &lt;strong&gt;reversedArr&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   // convert the string into an array of characters
   const strArr = str.split("")

   // reverse the array using reverse method
   const reverseArr = strArr.reverse()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final step is to convert the &lt;strong&gt;reversedArr&lt;/strong&gt; array into a string which can be achieved using &lt;strong&gt;join()&lt;/strong&gt; method and &lt;strong&gt;return&lt;/strong&gt; the final result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;join()&lt;/strong&gt; method returns an array as a string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const result = reverseArr.join("")
    return result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Final Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverse(str) {
    // convert the string into an array of characters
    const strArr = str.split("")

    // reverse the array using reverse method
    const reverseArr = strArr.reverse()

    // convert  the array back to a string using built join method
    const result = reverseArr.join("")
    return result

}

reverse("hello")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are familiar with &lt;strong&gt;modern&lt;/strong&gt; Javascript syntax. We can have a one line solution to this problem using an &lt;strong&gt;Arrow Function&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const reverse = (str) =&amp;gt;  str.split("").reverse().join(“”);    
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solution #2
&lt;/h2&gt;

&lt;p&gt;Since strings in Javascript are both iterable and have number indexes and length just like an array, we are able to loop through them using for loop.&lt;/p&gt;

&lt;p&gt;First step to this solution is to create a variable named &lt;strong&gt;result&lt;/strong&gt; and initially it will be set to an empty string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const reversed = ""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the for loop, iterate through the given &lt;strong&gt;str&lt;/strong&gt; value and take out one character of the string at a time and stick it at the start of the variable named &lt;strong&gt;result&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (let i = 0; i &amp;lt; str.length; i++) {
       reversed = str[i]  + reversed
 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally return the  &lt;strong&gt;result&lt;/strong&gt; variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function reverse(str) {
   const reversed = ""

   for (let i = 0; i &amp;lt; str.length; i++) {
       reversed = str[i]  + reversed
   }

   return result

}

reverse("hello")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solution #3
&lt;/h2&gt;

&lt;p&gt;Similar to what we did on our first solution, the first step will be to convert the string into an array because reduce can only be used on an array. With the edition of &lt;strong&gt;ES6&lt;/strong&gt; there are multiple ways to achieve this task. One such instance is using the &lt;strong&gt;spread operator&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const strArr = [...str]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next step is to make use of the** reduce()** method. It takes two sets of arguments, one being an &lt;strong&gt;arrow function&lt;/strong&gt; and the other being the initial value for our function. In our case the initial value will be an &lt;strong&gt;empty string “”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The arrow function will have two arguments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;previousValue&lt;/strong&gt; - it accumulates the arrow function’s return values&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;currentValue&lt;/strong&gt; - The current element from the array.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const result = strArr.reduce((reversed, char) =&amp;gt; {
      return  char  + reversed
}, "")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since we are passing in the initial value the first time the function runs, the initial value will be used in place of previousValue. Similar to our second solution, stick the character to the start of the previousValue in every iteration and &lt;strong&gt;return the result&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Hope you find this article helpful. Please feel free to comment your suggestion, feedback or your version of solution to this problem.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>computerscience</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Understanding Recursion in JavaScript with a binary search example</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Wed, 16 Mar 2022 14:24:45 +0000</pubDate>
      <link>https://dev.to/judis07/understanding-recursion-in-javascript-with-a-binary-search-example-1b28</link>
      <guid>https://dev.to/judis07/understanding-recursion-in-javascript-with-a-binary-search-example-1b28</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In simple terms a recursion is technique of creating a function that calls itself until it does not.&lt;/p&gt;

&lt;p&gt;All recursive function will have two cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;base case *&lt;/em&gt;- which will not call itself&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;recursive case *&lt;/em&gt;- which calls its self
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best way to understand this is to do an example.&lt;/p&gt;

&lt;p&gt;Let's say you have a &lt;strong&gt;sorted array of integers&lt;/strong&gt; and want to check if a &lt;strong&gt;target number&lt;/strong&gt; exists in that &lt;strong&gt;array or not&lt;/strong&gt;. Since there are multiple ways to solve this problem. The most common one is to &lt;strong&gt;loop&lt;/strong&gt; through the entire array to check if it is equal to the target number or not.&lt;/p&gt;

&lt;p&gt;But in this article we will solve this using &lt;strong&gt;recursion&lt;/strong&gt; which is more efficient in nature.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function isPresent(nums, target) {
  let middleIndex =  Math.floor(nums.length / 2);
  let middleElement = nums[middleIndex];

  // base case
  if (middleElement === target) return true;
  // recursive case
  else if (middleElement &amp;lt; target &amp;amp;&amp;amp; nums.length &amp;gt; 1) {
    return isPresent(nums.slice(middleIndex, nums.length), target);
  }
  else if (middleElement &amp;gt; target &amp;amp;&amp;amp; nums.length &amp;gt; 1) {
    return isPresent(nums.slice(0, middleIndex), target);
  }
 // in case if the value does not exists
  else return false;
}

isPresent([5, 7, 9, 11, 13, 19, 36, 39, 72], 19); // returns true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;strong&gt;isPresent()&lt;/strong&gt; function is a recursive function which accepts two parameters nums - sorted array of integers and target - number that we wish to find.&lt;/p&gt;

&lt;p&gt;Inside the function before the &lt;strong&gt;base case&lt;/strong&gt; we will get the middle index of the array to find the middle element of the array.&lt;/p&gt;

&lt;p&gt;Our &lt;strong&gt;base case&lt;/strong&gt; will check if the middle element is equal to the target, then we will simply return true.&lt;/p&gt;

&lt;p&gt;Now onto the &lt;strong&gt;recursive&lt;/strong&gt; part the function. Here we will check for the  two cases &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if the target is &lt;strong&gt;greater than&lt;/strong&gt; the middle element - we will call the function again but with the new array which consists of all the &lt;strong&gt;numbers after&lt;/strong&gt; the middle element.&lt;/li&gt;
&lt;li&gt;if the target is &lt;strong&gt;less than&lt;/strong&gt; the middle element - we will call the function again but with the new array which consists of all the &lt;strong&gt;numbers before&lt;/strong&gt; the middle element.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Understanding the recursive case:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;isPresent([5, 7, 9, 11, 13, 19, 36, 39, 72], 19)

// the given array's middle element
let middleIndex = Math.floor(nums.length / 2);
let middleElement = nums[middleIndex];
console.log(middleElement); // 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since the current &lt;strong&gt;middle element&lt;/strong&gt; 13 is **not equal **to the target number 19, our function will move to the recursive part.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return isPresent(nums.slice(middleElement, nums.length), target)
// this action will rerun the function and this time
console.log(middleElement) // will be 36
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now since the &lt;strong&gt;middle element&lt;/strong&gt; 36 is not only not equal to the target number 19 but also &lt;strong&gt;less than&lt;/strong&gt; the target&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return isPresent(nums.slice(0, middleIndex), target);
// this action will also reurn the function and this time
console.log(middleElement) // will be 19

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally our  &lt;strong&gt;middle element&lt;/strong&gt; is 19 which is &lt;strong&gt;equal&lt;/strong&gt; to the target and fulfils the &lt;strong&gt;base case&lt;/strong&gt;, the function will return &lt;strong&gt;true&lt;/strong&gt; and the recursion will end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In this article you learned what a recursion is and how to make use of recursion in JavaScript to check if a number exists in a given sorted array. If you enjoyed reading the article and it helped you learn something please do like and share it with others. :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Beginner's guide to Linked List in JavaScript</title>
      <dc:creator>Arvind M</dc:creator>
      <pubDate>Tue, 15 Mar 2022 12:00:44 +0000</pubDate>
      <link>https://dev.to/judis07/beginners-guide-to-linked-list-in-javascript-31cf</link>
      <guid>https://dev.to/judis07/beginners-guide-to-linked-list-in-javascript-31cf</guid>
      <description>&lt;p&gt;There are a few different types of linked lists. But the most popular ones are: singly, doubly and circular. In this article we will learn to implement a doubly Linked List Data structure in JavaScript. Some of the operations that we are going to implement in this article are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a node to the head&lt;/li&gt;
&lt;li&gt;Add a node to the tail&lt;/li&gt;
&lt;li&gt;Reverse a linked list&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will start by creating a linked list function constructor and it will contain two piece of information  &lt;strong&gt;(a) the head&lt;/strong&gt; and &lt;strong&gt;(b) the tail.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All a linked list class needs are two pointers the head pointer which points to the first&lt;br&gt;
node in the list and the tail pointer which points to the last node in the list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function LinkedList() {
  this.head = null;
  this.tail = null;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initially the head and the tail will be set to &lt;strong&gt;null&lt;/strong&gt; because they will have no nodes to point at the start.&lt;/p&gt;

&lt;p&gt;Next, for our node list we will create a node constructor function. Each node will have three properties on the them &lt;strong&gt;(a) the value&lt;/strong&gt;, &lt;strong&gt;(b) the pointer to the next node&lt;/strong&gt; and &lt;strong&gt;(c) the pointer to the previous node&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Node(value, next, prev) {
    this.value = value;
    this.next = next;
    this.prev = prev
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we will instantiate a new linked list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const LL = new LinkedList()

// if you try to access the linked list, it will look like this
console.log(LL) // { head: null, tail: null }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next up,  the new instantiation will have few helper method to add and remove data.&lt;/p&gt;

&lt;h2&gt;
  
  
  1.  addToHead
&lt;/h2&gt;

&lt;p&gt;This method adds new value to head of the linked list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedList.prototype.addToHead = function (value) {
  // instantiate  a new node
  const newNode = new Node(value, this.head, null);

  // if there is already a head present set its prev value to the newNode

  if (this.head) {
    this.head.prev = newNode;
  } else {
    this.tail = newNode;
  }

  // set the current head to newNode
  this.head = newNode;
};


LL.addToHead(80)
LL.addToHead(90)
LL.addToHead(100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;This method adds new value to tail of the linked list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedList.prototype.addToTail = function (value) {
  const newNode = new Node(value, null, this.tail);

  if (this.tail) {
    this.tail.next = newNode;
  } else {
    this.head = newNode;
  }

  this.tail = newNode;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;This method deletes the current head and returns its value&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedList.prototype.removeHead = function () {
  // if there is no head, simply return null
  if (!this.head) return null;
  // else

  // store the current head value in a variable to return it later
  let currentVal = this.head.value;

  // now  reassign the current head
  this.head = this.head.next;

  // if there is a next value, change its prev value to null
  if (this.head) {
    this.head.prev = null;
  } else {
    this.tail = null;
  }

  return currentVal;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;This method deletes the current tail and returns its value&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedList.prototype.removeTail = function () {
  if (!this.tail) return null;

  let currentVal = this.tail.value;

  this.tail = this.tail.prev;

  if (this.tail) {
    this.tail.next = null;
  } else {
    this.tail = null;
  }

  return currentVal;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. reverse
&lt;/h2&gt;

&lt;p&gt;This method reverses the linked list&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LinkedList.prototype.reverse = function () {
  // head is the first node in the list

  let currentNode = this.head;

  //  start with the head

  // as long as currentNode has a value run the loop

  while (currentNode) {
    //  store the current node prev value in a varialbe
    let temp = currentNode.prev;
    //  swap the previous and next node with each other
    currentNode.prev = currentNode.next;
    currentNode.next = temp;

    //  assing the previous node value to the current node which will eventually be null
    currentNode = currentNode.prev;
  }

  // store the currentTail's value in a variable

  let currentTail = this.tail;

  // reassign the tail's value to current head and head's value to previous tail
  this.tail = this.head;
  this.head = currentTail;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article we implemented a doubly linked list in JavaScript. Hope you enjoyed reading it.:)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
