<?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: Sarang Menon</title>
    <description>The latest articles on DEV Community by Sarang Menon (@sarangmenon).</description>
    <link>https://dev.to/sarangmenon</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4127274%2F3b1bb570-970a-491d-ab1b-ff8b4fb9b3a6.png</url>
      <title>DEV Community: Sarang Menon</title>
      <link>https://dev.to/sarangmenon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sarangmenon"/>
    <language>en</language>
    <item>
      <title>I Built CodeJal: A Free Android App for Daily Coding Practice, from Beginner to Advanced</title>
      <dc:creator>Sarang Menon</dc:creator>
      <pubDate>Wed, 16 Sep 2026 07:37:29 +0000</pubDate>
      <link>https://dev.to/sarangmenon/i-built-codejal-a-free-android-app-for-daily-coding-practice-from-beginner-to-advanced-3d83</link>
      <guid>https://dev.to/sarangmenon/i-built-codejal-a-free-android-app-for-daily-coding-practice-from-beginner-to-advanced-3d83</guid>
      <description>&lt;h2&gt;
  
  
  When I was learning to code, I noticed something that bothered me.
&lt;/h2&gt;

&lt;p&gt;A lot of programming resources seemed to assume that you already knew what you were doing. Forums could be difficult to navigate as a beginner, while many coding platforms were heavily focused on interview preparation and competitive programming.&lt;/p&gt;

&lt;p&gt;I wanted to build something simpler.&lt;/p&gt;

&lt;p&gt;Something where you could open an app, practice for a few minutes every day, and gradually become more comfortable with programming.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;CodeJal&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CodeJal?
&lt;/h2&gt;

&lt;p&gt;CodeJal is an Android app for learning and practicing programming through short, daily challenges.&lt;/p&gt;

&lt;p&gt;It currently supports &lt;strong&gt;Python, C, C++, and Java&lt;/strong&gt;, with more languages planned.&lt;/p&gt;

&lt;p&gt;The idea is simple: instead of trying to learn everything at once, build a consistent habit of solving a few problems every day.&lt;/p&gt;

&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice questions based on their level&lt;/li&gt;
&lt;li&gt;Solve coding problems&lt;/li&gt;
&lt;li&gt;Build a daily streak&lt;/li&gt;
&lt;li&gt;Take a placement test to help determine where to start&lt;/li&gt;
&lt;li&gt;Experiment with code in a built-in code playground&lt;/li&gt;
&lt;li&gt;Refer back to programming notes and useful code snippets&lt;/li&gt;
&lt;li&gt;Progress through different difficulty levels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted it to work for different kinds of learners — someone writing their first program as well as someone who already knows a language and wants to keep practicing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built CodeJal using &lt;strong&gt;Flutter&lt;/strong&gt;, which allowed me to develop the Android app from a single codebase.&lt;/p&gt;

&lt;p&gt;For authentication and syncing user progress across devices, I used &lt;strong&gt;Firebase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The learning content — including questions and lessons — is structured as &lt;strong&gt;JSON&lt;/strong&gt;, which makes it easier to organize and expand the content across different programming languages and difficulty levels.&lt;/p&gt;

&lt;p&gt;One of the more challenging parts was &lt;strong&gt;code execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Getting code written by users to run correctly across four different programming languages, while also handling errors and returning useful feedback, involved quite a bit of testing and trial and error.&lt;/p&gt;

&lt;p&gt;Another challenge was designing the &lt;strong&gt;content structure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It sounds straightforward to have questions, lessons, levels, and languages, but once you start adding more content, things can become difficult to maintain. I had to rethink the structure several times so that CodeJal could grow without turning into a mess.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Building CodeJal taught me a lot beyond the programming itself.&lt;/p&gt;

&lt;p&gt;One of the biggest lessons was that &lt;strong&gt;content architecture matters just as much as application architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I initially focused heavily on the features. But as the number of questions and lessons grew, I realized that a poorly planned content structure could make future development much harder.&lt;/p&gt;

&lt;p&gt;I also learned a lot from &lt;strong&gt;debugging code execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Supporting multiple programming languages meant dealing with many small bugs, unexpected inputs, edge cases, and differences between languages. Some problems that looked simple at first took considerably more testing than I expected.&lt;/p&gt;

&lt;p&gt;And then there was &lt;strong&gt;publishing the app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Getting something onto the Google Play Store made me realize that building the main features is only part of the process. Testing, fixing small issues, improving reliability, and thinking about what happens when a completely new user opens the app for the first time are just as important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;I'm still learning myself, so CodeJal is also a reflection of how I think about learning programming.&lt;/p&gt;

&lt;p&gt;I don't think everyone needs to start with complicated projects or spend hours solving problems every day.&lt;/p&gt;

&lt;p&gt;Sometimes, a few problems every day is enough to keep moving forward.&lt;/p&gt;

&lt;p&gt;That's the idea I wanted CodeJal to encourage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try CodeJal
&lt;/h2&gt;

&lt;p&gt;If you're learning programming, I'd love for you to try it and tell me what you think.&lt;/p&gt;

&lt;p&gt;I'm especially interested in feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The difficulty progression&lt;/li&gt;
&lt;li&gt;The daily practice experience&lt;/li&gt;
&lt;li&gt;The placement test&lt;/li&gt;
&lt;li&gt;The code playground&lt;/li&gt;
&lt;li&gt;The overall learning flow&lt;/li&gt;
&lt;li&gt;What languages or features I should add next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is still evolving, so feedback from actual learners and developers would be really useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeJal on Google Play:&lt;/strong&gt; &lt;a href="https://play.google.com/store/apps/details?id=com.sarangmenon.codejal" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.sarangmenon.codejal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, I'd really appreciate hearing what worked, what didn't, and what you would change.&lt;/p&gt;

&lt;p&gt;Building and actually shipping CodeJal has been one of the most useful parts of my programming journey so far. I'm looking forward to improving it further.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfb8zc2dkxkk9ad4s9ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfb8zc2dkxkk9ad4s9ql.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw5em2cyqf7b5dndq1ymr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw5em2cyqf7b5dndq1ymr.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprbnpl25x49dpwc50po1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprbnpl25x49dpwc50po1.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpoq7zu9jxtyqenawvm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpoq7zu9jxtyqenawvm1.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbnxqagvblcnjg5za20s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbnxqagvblcnjg5za20s.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8epr1is0su7qtsmsfu2t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8epr1is0su7qtsmsfu2t.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh5fmt4f0s3s4boferl6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh5fmt4f0s3s4boferl6w.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>webdev</category>
      <category>programming</category>
      <category>android</category>
    </item>
  </channel>
</rss>
