<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="379764" data-post-id="379764">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="SyntaxSorcerer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/SyntaxSorcerer/120/39483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  SyntaxSorcerer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>That’s a fair take, <a class="mention" href="/u/dimitarvp" rel="nofollow">@dimitarvp</a> . The last time I felt this way was more than a decade ago when I became a Rubyist. I appreciated how it was optimized for programmer happiness. I see that in the Elixir ecosystem now</p>
<p>On a personal note, my goal is to build stuff and be able to provide for my family, and I want the option to be able to do that as a solo dev or on a small team. Elixir/OTP + Phoenix (and maybe Ash) feels like a great potential fit for that.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379764" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-379764" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379764"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="379769" data-post-id="379769">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="SyntaxSorcerer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/SyntaxSorcerer/120/39483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  SyntaxSorcerer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As I’m going through PragDave’s course I’m curious about his opinions regarding project structure vis-à-vis community standards or what’s considered idiomatic Elixir.</p>
<p>For example, in the “Let’s start coding &gt; Start coding” section, there’s this bit:</p>
<hr>
<h2><a name="p-379769-project-structure-1" class="anchor" href="#p-379769-project-structure-1" aria-label="Heading link" rel="nofollow"></a>Project Structure</h2>
<p>I personally put the logic part of my code into a directory called <code>lib/impl</code>; most in the community instead use <code>lib/hangman</code> (or whatever your application is called) for all their application’s files.</p>
<p>You’ll start to see the benefits of having split directories when we look at processes.</p>
<hr>
<p>I guess I’ll just have to wait and see about the benefits of having split directories, but I’m also curious about the pros and cons versus what “most in the community instead use”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379769" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-379769" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379769"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="379791" data-post-id="379791">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>For all my 24 years of career, I never once found a good dir + file structure I was happy with. Nothing quite clicked. I think the problem is that many relationships between entities are forming a graph whereas the filesystems are trees.</p>
<p>But I did find a lot of super convinced advocates of a number of strange conventions i.e. <code>order/read.ex</code> and <code>order/delete.ex</code>… one action per file! Madness. Though I’ll admit it makes it a touch easier for fuzzy searching a filename or file contents. This approach gets a few points more in marks.</p>
<p>IMO <a href="https://www.unison-lang.org/" rel="noopener nofollow ugc">the Unison language</a> is the only one who gets this right; content-addressed code. In the meantime, before all PLs finally reailze its the 21st century, projects could become f.ex. a singular SQLite database indexed by a number of fields i.e. domain, namespace, implemened behaviours / protocols, app code vs. test code, and such. Also add arbitrary tags and propose a few hundred standard ones.</p>
<p>The whole thing of dir → file(s) → module(s) → function(s) is hugely outdated and has been for at least 20 years.</p>
<p>But again, I am not super against <code>entity/action.ex</code>. It makes fuzzy searching a little easier. Though I never had problems when doing fuzzy search for f.ex. <code>def list_</code> (assuming using normal Phoenix generators) and finding what I need in literal two seconds.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="379791" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-379791" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="379791"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="380446" data-post-id="380446">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tsimon" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tsimon/120/39630_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tsimon
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey,</p>
<p>Like you, I too am new to Elixir and am learning. I will preface by saying that I think we learn (or chose to learn) quite differently, so this recommendation may or may not be great for you. It appears to me that you are methodically creating a learning plan and working through it (which is awesome). I, on the other hand, prefer to just jump in and try stuff. One of the first things I did was to build a GenServer (barely understood what I was doing) that kept a tree data structure in memory. In my case, that was a quick sanity check, go/no-go choice on whether to adopt Elixir.</p>
<p>That disclaimer said, I found a series on YouTube of Jose doing the advent of code in 2021 to be very useful for me: <a href="https://www.youtube.com/playlist?list=PLNP8vc86_-SOV1ZEvX_q9BLYWL586zWnF" rel="noopener nofollow ugc">https://www.youtube.com/playlist?list=PLNP8vc86_-SOV1ZEvX_q9BLYWL586zWnF</a>. It felt a bit like the good bits of pair programming, wherein I got to experience writing Elixir as if I ‘knew what I was doing’.</p>
<p>For me it helped to see the language being written wholistically, rather than as a series of concepts. For example, rather than learning about <code>cond</code> as part of branching functions and then later learning about pattern matching, they might be demonstrated working together to solve a particular problem.</p>
<p>Anyway, check it out, maybe it will help =).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="380446" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-380446" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="380446"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="380448" data-post-id="380448">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="egeersoz" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/egeersoz/120/15704_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  egeersoz
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Welcome to the community. Personally, I would recommend starting with one Elixir book, then one Phoenix book, and then trying to build something immediately after that. Phoenix book in particular will most likely cover testing as well as Ecto, to a reasonable depth. From there, you can use the books to supplement your knowledge.</p>
<p>Don’t get me wrong, I love reading books. But at your level of experience, I think you’d gain a lot more from doing.</p>
<p>Ash has been growing in popularity, but it’s also both not necessary for building things, and is very different than basically everything else in the ecosystem. Good to read if you want to improve your employability. OK to skip for now otherwise.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="380448" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-380448" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="380448"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="380970" data-post-id="380970">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="SyntaxSorcerer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/SyntaxSorcerer/120/39483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  SyntaxSorcerer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thank you for sharing José’s AOC videos – I look forward to checking these out!</p>
<p>I’d hazard a guess that Prag Dave’s course is similar in the sense that it felt a lot like pair programming. It’s probably the least expensive of all the courses I’ve signed up for and I’d also recommend checking it out.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="380970" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-380970" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="380970"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="380971" data-post-id="380971">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="SyntaxSorcerer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/SyntaxSorcerer/120/39483_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  SyntaxSorcerer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for the feedback!</p>
<p>When I tackle something new I like to get a comprehensive overview first, and then dig in as necessary. It might be unconventional, but I’ve found that I tend to move faster when I have a good understanding of how all of the pieces fit together. It’s also just a lot more of a satisfying feeling for me <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>As for Ash, I have a hunch it’s going to help me build things very quickly. I probably mentioned this somewhere here before, but months before learning about Ash I read Eric Evan’s Domain-Driven Design book, so I kind of feel like stumbling into the Elixir ecosystem, and then “discovering” the Ash Framework, was kismet.</p>
<p>I also really appreciate the declarative nature of the framework; this is one of the many reasons I’ve been going all in with Nix/NixOS.</p>
<hr>
<p>As for my overall learning journey, I’ve been pretty heads down for the past few weeks. I’m currently about 1/3 of the way through the Pragmatic Studio’s Full-Stack Phoenix course, and have finished their Elixir &amp; OTP course, as well as Prag Dave’s course. I picked up some other resources during Black Friday sales, but I’ll share more about those later. <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>Before joining the Elixir ecosystem I had a very specific idea of what I wanted to build, but I wasn’t clear on how to build it. I’m still not entirely clear on how to build it, but I’m getting closer every day.</p>
<p>However, before then, I think the next logical step is to build a bunch of little things as quickly as I can. There are just a few more things I want to check off my learning list before I start…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="380971" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/my-elixir-learning-journal/73381/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-380971" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="380971"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>