<?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: Federico Diaz Aguirre</title>
    <description>The latest articles on DEV Community by Federico Diaz Aguirre (@fdiazaguirre).</description>
    <link>https://dev.to/fdiazaguirre</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%2F474672%2F3eb15645-e8ee-47c0-a80c-a58b6d719d60.jpeg</url>
      <title>DEV Community: Federico Diaz Aguirre</title>
      <link>https://dev.to/fdiazaguirre</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fdiazaguirre"/>
    <language>en</language>
    <item>
      <title>Dynamic Programming</title>
      <dc:creator>Federico Diaz Aguirre</dc:creator>
      <pubDate>Fri, 14 Feb 2025 10:44:12 +0000</pubDate>
      <link>https://dev.to/fdiazaguirre/dynamic-programming-2hai</link>
      <guid>https://dev.to/fdiazaguirre/dynamic-programming-2hai</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;When facing recursive problems we quickly identify the memorization enhancement to avoid wasting cycles for past computations. But what about the underlying implementations top-down vs bottom-up?&lt;/p&gt;

&lt;p&gt;In the video below I am comparing these two. And the drawbacks of using BFS in this particular case:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Higher memory usage due to maintaining a queue and a &lt;em&gt;visited&lt;/em&gt; set.&lt;/li&gt;
&lt;li&gt;Worse than DP for large &lt;em&gt;amount&lt;/em&gt; values (since BFS explores level by level, it can be slow for high values).&lt;/li&gt;
&lt;/ol&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/a07804e9220d40b89b7a1f961f3c6582"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


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

&lt;h3&gt;
  
  
  Visual representation
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fxbk1plcru5a04u0dy3rp.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.amazonaws.com%2Fuploads%2Farticles%2Fxbk1plcru5a04u0dy3rp.png" alt="Image description" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparisson
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Time Complexity&lt;/th&gt;
&lt;th&gt;Space Complexity&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recursive DP (Top-Down w/ Memoization)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O(amount × len(coins))&lt;/td&gt;
&lt;td&gt;O(amount)&lt;/td&gt;
&lt;td&gt;Efficient, but recursion uses stack memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Iterative DP (Bottom-Up)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O(amount × len(coins))&lt;/td&gt;
&lt;td&gt;O(amount)&lt;/td&gt;
&lt;td&gt;Best for dense subproblem coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BFS (Graph Traversal)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;O(amount × len(coins)) (Worst case)&lt;/td&gt;
&lt;td&gt;O(amount)&lt;/td&gt;
&lt;td&gt;Can be more efficient for small values&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>livecoding</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>How to prepare for a technical interview?</title>
      <dc:creator>Federico Diaz Aguirre</dc:creator>
      <pubDate>Fri, 25 Sep 2020 06:25:08 +0000</pubDate>
      <link>https://dev.to/fdiazaguirre/how-to-prepare-for-a-technical-interview-5cie</link>
      <guid>https://dev.to/fdiazaguirre/how-to-prepare-for-a-technical-interview-5cie</guid>
      <description>&lt;h1&gt;
  
  
  TL;DR
&lt;/h1&gt;

&lt;p&gt;In the previous article, I wrote about the interview itself from the interviewer’s point of view. Now I am offering some resources and tips to the candidate to make it through.&lt;/p&gt;

&lt;p&gt;Situation: Technical interview is approaching&lt;br&gt;
Task: Study and practice&lt;br&gt;
Action: Focus on what matters&lt;br&gt;
Result: Ace the interview&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
First, you need a map to get to the destination. This is what I think could give you a good chance to land a job as a NodeJs developer. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What?&lt;/strong&gt;&lt;br&gt;
Let’s make a knowledge list&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core fundamentals

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures"&gt;Closures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Hoisting"&gt;Hoisting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/"&gt;Event loop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Asynchronous programming

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Callback_function"&gt;Callbacks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html"&gt;Promises&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await"&gt;Async / Await&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Object-oriented programming

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model"&gt;Prototype vs. Class&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crockford.com/javascript/prototypal.html"&gt;Prototype in JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crockford.com/javascript/inheritance.html"&gt;Class in JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rb.gy/axle89"&gt;Inheritance vs Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rb.gy/jvflpr"&gt;SOLID&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Testing

&lt;ul&gt;
&lt;li&gt;Unit testing &amp;amp; TDD&lt;/li&gt;
&lt;li&gt;Integration&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data structures and their time complexity

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rb.gy/imdshy"&gt;Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rb.gy/xoz9yg"&gt;Set&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rb.gy/xz5lud"&gt;Array&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;REST API

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://restfulapi.net/hateoas/"&gt;HATEOAS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://swagger.io/specification/"&gt;OpenAPI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rb.gy/8p3chl"&gt;Versioning strategies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;After study the theory I’d suggest building a REST API project to implement what you study this will also serve as a portfolio. Ask peers and more seniors devs to review your code. &lt;/p&gt;

&lt;p&gt;Get out of your comfort zone. If you know restify try fastify. If you are comfy with mocha &amp;amp; chai try jest.&lt;/p&gt;

&lt;p&gt;Go to code challenge platforms and tackle as many problems as you can. It’s worth to mention each of them has different flavors. Solve quizzes.&lt;/p&gt;

&lt;p&gt;Listen to podcasts. Personally, I follow &lt;a href="https://rb.gy/lex430"&gt;Javascript Jabber&lt;/a&gt; and &lt;a href="https://rb.gy/isxjcr"&gt;Software Engineer Radio&lt;/a&gt;, for Spanish speakers you have &lt;a href="https://rb.gy/dxpu15"&gt;No es un bug es un podcast&lt;/a&gt;. Since you have limited time, just search for specific episodes to make the most of it.&lt;/p&gt;

&lt;p&gt;Practice the interview! Ask yourself: how do I want to be perceived? Then write down a paragraph to introduce yourself.&lt;br&gt;
Talk to the mirror or even better record yourself answering pre-canned questions. Ask a more senior dev to run a mock interview. &lt;/p&gt;

&lt;p&gt;Then schedule a bunch of interviews as close as you could. In this fashion, you will be familiar and more relaxed.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>study</category>
      <category>backend</category>
    </item>
    <item>
      <title>Technical Interviews</title>
      <dc:creator>Federico Diaz Aguirre</dc:creator>
      <pubDate>Fri, 25 Sep 2020 05:46:41 +0000</pubDate>
      <link>https://dev.to/fdiazaguirre/technical-interviews-4k8n</link>
      <guid>https://dev.to/fdiazaguirre/technical-interviews-4k8n</guid>
      <description>&lt;p&gt;TL;DR&lt;/p&gt;

&lt;p&gt;As a candidate over my entire career I’ve great, terrible, and everything in between technical interviews. Therefore as an interviewer, I want to make it a pleasant experience for the candidate without lowering the bar or make it impossible to pass. Being realistic about the position requirements. But bear in mind the entire company and team, in particular, is going to suffer if you allow either an incompetent or a douche.&lt;/p&gt;

&lt;p&gt;Situation: Tech interviews.&lt;br&gt;
Task: Evaluate the candidate’s knowledge and reasoning process.&lt;br&gt;
Action: Make the candidate comfy and start a talk giving her/him the ability to showcase their knowledge. &lt;br&gt;
Result: Get a good grasp of the candidate’s current skills and potential.&lt;/p&gt;

&lt;p&gt;Why?&lt;br&gt;
To increase the rate of success of the candidate as a new member of the team. To increment the capacity of the team with quality members.&lt;/p&gt;

&lt;p&gt;What?&lt;br&gt;
This is a bit controversial and depends on the country, company, and on interviewer. In my case, I want to know a good balance between the familiarity of the candidate with the technology (Javascript / Node), design (OO, REST APIs), best practices (TDD, pair programming, code reviews, etc.), and algorithms. Depending on the answers we could go deeper on each topic.&lt;/p&gt;

&lt;p&gt;How?&lt;br&gt;
IMO a code challenge is way better than a weekend project. As a candidate, I’d rather study something that I can use in multiple interviews than deal with a specific context that I will not see again.&lt;/p&gt;

&lt;p&gt;After the candidate passes the code challenge, talk with code live session with a little pair programming presenting new scenarios related to the position and asking questions.&lt;/p&gt;

&lt;p&gt;It’s okay to don’t know. Do not pretend, charlatans are easily spotted. And it’s expected also to reason about the unknown.&lt;/p&gt;

&lt;p&gt;Finally, I want to mention some of the best interviewers I’ve encountered in my professional life: Michael Kuehne-Schlinkert Leandro Silva Marco Talento Nicolas Rusconi&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>screening</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
