<?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: Andreas Klinger ✌️️</title>
    <description>The latest articles on DEV Community by Andreas Klinger ✌️️ (@andreasklinger).</description>
    <link>https://dev.to/andreasklinger</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%2F14207%2F2650f2cb-b046-4fe0-8723-cbfd48814eec.jpeg</url>
      <title>DEV Community: Andreas Klinger ✌️️</title>
      <link>https://dev.to/andreasklinger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreasklinger"/>
    <language>en</language>
    <item>
      <title>Product Hunt - we are hiring our first junior engineer role - and it's remote!  </title>
      <dc:creator>Andreas Klinger ✌️️</dc:creator>
      <pubDate>Thu, 26 Oct 2017 18:11:55 +0000</pubDate>
      <link>https://dev.to/andreasklinger/product-hunt---we-are-hiring-our-first-junior-engineer-role---and-its-remote-bjn</link>
      <guid>https://dev.to/andreasklinger/product-hunt---we-are-hiring-our-first-junior-engineer-role---and-its-remote-bjn</guid>
      <description>&lt;h2&gt;
  
  
  About Us
&lt;/h2&gt;

&lt;p&gt;ðŸ˜»âœŒï¸&lt;/p&gt;

&lt;p&gt;Our mission at Product Hunt is to surface great products to the world and help makers find an audience.&lt;/p&gt;

&lt;p&gt;We're a curious, motivated group of founders and makers, operating as an 18-person distributed team within AngelList.&lt;/p&gt;

&lt;p&gt;We look for self-starters; those with a founder mentality. We ship every day. We embrace bold ideas and encourage experimentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  About The Opportunity
&lt;/h2&gt;

&lt;p&gt;This will be the first junior role we have on the engineering team (professional experience can be as few as 1-2 years) _and it will be remote (US or LATAM timezone preferred). You should have a product mindset – all engineers at Product Hunt are product people too – and be eager to work on bug fixes, smaller site enhancements, and engineering support duties. You should be someone that likes to ship, has some basic experience across our entire stack (We use React, GraphQL, Rails) and be excited to learn more. You should be proud of your code but knowledgable enough to know how to manage implementation tradeoffs.&lt;/p&gt;

&lt;p&gt;Your responsibilities will include:&lt;/p&gt;

&lt;p&gt;â€¢ Working with the community/marketing team to increase efficiency &lt;br&gt;
â€¢ Fixing bugs (yes, we have those too) &lt;br&gt;
â€¢ Collaborating closely with designers to ship great products &lt;br&gt;
â€¢ Leveraging research and usage data to iterate on these products&lt;/p&gt;

&lt;h2&gt;
  
  
  Skill &amp;amp; Qualifications
&lt;/h2&gt;

&lt;p&gt;â€¢ A track record of launching great projects &lt;br&gt;
â€¢ Desire to ship and work autonomously &lt;br&gt;
â€¢ The ability to work with a distributed team &lt;br&gt;
â€¢ Strong verbal and written communication skills &lt;br&gt;
â€¢ An eagerness to work on engineering support tasks (e.g. bug fixing)&lt;/p&gt;

&lt;p&gt;The job is remote - timezones that are between westcoast USA/LATAM and eastern europe/africa are preferred  &lt;/p&gt;

&lt;h2&gt;
  
  
  How To Apply
&lt;/h2&gt;

&lt;p&gt;Please apply here &lt;a href="https://angel.co/product-hunt/jobs/292573-junior-full-stack-engineer"&gt;https://angel.co/product-hunt/jobs/292573-junior-full-stack-engineer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please feel free to leave questions in the comments section or ping me on twitter &lt;a class="mentioned-user" href="https://dev.to/andreasklinger"&gt;@andreasklinger&lt;/a&gt;
.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hiring</category>
    </item>
    <item>
      <title>Coding = thinking in several dimensions</title>
      <dc:creator>Andreas Klinger ✌️️</dc:creator>
      <pubDate>Thu, 15 Jun 2017 17:50:12 +0000</pubDate>
      <link>https://dev.to/andreasklinger/why-coding-is-thinking-in-several-dimensions</link>
      <guid>https://dev.to/andreasklinger/why-coding-is-thinking-in-several-dimensions</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"This change should be easy"&lt;/p&gt;

&lt;p&gt;"We could a clone on a hackathon"&lt;/p&gt;

&lt;p&gt;"We have no time for refactoring"&lt;/p&gt;

&lt;p&gt;"We kind of forgot how to ship stuff fast"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Managing codebases = Thinking in and managing of several dimensions:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1qz4amj4rbcl0ibz0k84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1qz4amj4rbcl0ibz0k84.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the file / component (what a it does)&lt;/li&gt;
&lt;li&gt;the system interconnection (how stuff fits together)&lt;/li&gt;
&lt;li&gt;the product usecases (how users actually use it / domain logic)&lt;/li&gt;
&lt;li&gt;the changes over time (legacy / pivots etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Note: technically there can be more (infinite) dimensions but i usually stick to those 4 as mental framework)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  As your app grows you scale on all of those 4 axes.
&lt;/h2&gt;

&lt;p&gt;Your individual components become more complex. &lt;br&gt;
Your components interlink more (eg to DRY your code). &lt;br&gt;
Your product usecases become wider to a bigger range of diverse customers. &lt;/p&gt;

&lt;p&gt;And most important: You make changes over time. &lt;/p&gt;

&lt;p&gt;Often radical changes: Pivots. Either in domain logic or technical approach. &lt;/p&gt;

&lt;p&gt;Very quickly your codebase becomes complex and hard to manage. &lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking of your codebase as a 4d cube
&lt;/h2&gt;

&lt;p&gt;For some people it's hard to imagine 4d objects (&lt;em&gt;gee… i wonder why…&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;For the sake of this argument it might be easier to visualize a radar chart.&lt;/p&gt;

&lt;p&gt;Example used: Wine (&lt;em&gt;dont judge&lt;/em&gt;) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2f72hymtb9g8bxgu5j5w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2f72hymtb9g8bxgu5j5w.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While you add to your code you move on those axes and increase the area and thus make the overall area under management bigger. &lt;/p&gt;

&lt;p&gt;If you pay attention the shape of your 4d cube stays smooth and the volume small. &lt;br&gt;
But if you "ain't got the time" your cube will have hacks and weird surface areas which, by itself, will create new problems in future.&lt;/p&gt;

&lt;p&gt;Managing a codebase means managing how far you move on those axes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Judging codebases
&lt;/h2&gt;

&lt;p&gt;You can usually walk through a codebase with the same mental model&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how well are components structured?&lt;/li&gt;
&lt;li&gt;how well are systems isolated and boundries defined?&lt;/li&gt;
&lt;li&gt;how well are the product usecases defined and isolated/expressed in code?&lt;/li&gt;
&lt;li&gt;how well are changes over time managed? (acknowledged tech debt, isolation, comments, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  "This change should have been easy…"
&lt;/h2&gt;

&lt;p&gt;If you are working on a fresh codebase you have no pre-existing surface area to manage. No needless moves on directions you currently don't care about. You can pretty much go straight to the point you want to get to.&lt;/p&gt;

&lt;p&gt;Already established codebases are different.&lt;/p&gt;

&lt;p&gt;A change in a component might not be easy if you have to move on the "time" axis by fixing other parts of the system. Aka "refactor this legacy first". &lt;/p&gt;

&lt;p&gt;A change in a product usecase won't be easy if your system has a lot of interconnections with badly defined boundries.&lt;/p&gt;

&lt;p&gt;A fix in legacy systems might not be easy if systems are highly interconnected / tightly coupled.&lt;/p&gt;

&lt;h2&gt;
  
  
  "…but it wasn't easy"
&lt;/h2&gt;

&lt;p&gt;The next time you feel bad about how long a change needed think about how much space you moved on each of those axes to get anything done.   &lt;/p&gt;

&lt;p&gt;Also appreciate how much complexity on all of those axes you improved when you touched those parts of your codebase. And be sure that also the next person will appreciate it.&lt;/p&gt;

</description>
      <category>code</category>
      <category>softwaredevelopment</category>
      <category>softwaremanagement</category>
    </item>
    <item>
      <title>Good comments explain WHY, not WHAT, and 3 more rules on writing good comments</title>
      <dc:creator>Andreas Klinger ✌️️</dc:creator>
      <pubDate>Thu, 30 Mar 2017 11:10:39 +0000</pubDate>
      <link>https://dev.to/andreasklinger/comments-explain-why-not-what-and-2-more-rules-on-writing-good-comments</link>
      <guid>https://dev.to/andreasklinger/comments-explain-why-not-what-and-2-more-rules-on-writing-good-comments</guid>
      <description>&lt;p&gt;Comments… I know right… What a 🔥 topic to discuss. I hope the servers can handle our excitement…&lt;/p&gt;

&lt;p&gt;But jokes aside. If you work daily with code good comments are essential to your productivity in any mid to large sized codebase. Ugh. What a buzzkill…&lt;/p&gt;

&lt;p&gt;So let's get to business: Comments aren't additional to a good codebase. They are the codebase. &lt;/p&gt;

&lt;p&gt;Here a few tips to enable you to write better comments…&lt;/p&gt;

&lt;h1&gt;
  
  
  #1 Your comments should explain WHY not WHAT
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;"Comments shouldnt be needed. Good code should explain itself what it does."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you assume this you misunderstood what comments should do.&lt;/p&gt;

&lt;p&gt;Comments should never explain what the code does. The code itself should. &lt;br&gt;
Comments should explain why it exists, and why it exists in this way &lt;/p&gt;
&lt;h4&gt;
  
  
  WHY vs WHAT:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Code should explain &lt;em&gt;WHAT&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Comments should explain &lt;em&gt;WHY&lt;/em&gt; this code exists &lt;strong&gt;&lt;em&gt;or&lt;/em&gt;&lt;/strong&gt; WHY it has to do something in a non-obvious way. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Newsletter&lt;/span&gt;
  &lt;span class="c1"&gt;# removes stuff from newsletter&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stuff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="err"&gt;…&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Newsletter&lt;/span&gt;
  &lt;span class="c1"&gt;# Note(andreasklinger): In case we run into XYZ we need to remove the user to avoid&lt;/span&gt;
  &lt;span class="c1"&gt;#   problems w/ ABC and DEFG's API. Read more here: https://.....&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stuff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="err"&gt;…&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  #2 Leave your name
&lt;/h1&gt;

&lt;p&gt;At &lt;a href="https://www.producthunt.com"&gt;Product Hunt&lt;/a&gt; we have the habit of always leaving a name next to a comment.&lt;/p&gt;

&lt;p&gt;eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Note(andreasklinger): This is a comment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;But you can use git blame for that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;People will move code around, People will edit your lines (remove trailing spaces anyone?).&lt;br&gt;
Nobody will bother to find the author once code got moved around or edited often enough.&lt;/p&gt;

&lt;p&gt;Especially in smaller teams just the name alone helps you to understand why something exists or if you should bother trying to fix/improve it.&lt;/p&gt;

&lt;h1&gt;
  
  
  #3 Be thorough
&lt;/h1&gt;

&lt;p&gt;The "next developer taking over" is almost a myth. &lt;/p&gt;

&lt;p&gt;Usually the "next developer" is just "quickly passing by" has her own thing she wants to get done and your code got in the way.&lt;/p&gt;

&lt;p&gt;Imagine the next person landing in your code to have no context whatsoever and VERY limited time to change it.&lt;/p&gt;

&lt;p&gt;While you wrote the code it was obvious to you - it will never be that obvious again - to no-one, including you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explain without the assumption that people already know how your system works&lt;/li&gt;
&lt;li&gt;Explain the quirks of external systems that you have to consider&lt;/li&gt;
&lt;li&gt;Explain the quirks of internal systems that you have to consider&lt;/li&gt;
&lt;li&gt;Explain which parts of the system are Legacy&lt;/li&gt;
&lt;li&gt;Explain when (eg legacy) code can be removed (leave a "after X is done" or a date whenever possible)&lt;/li&gt;
&lt;li&gt;Explain the hacks you needed to do and why they work&lt;/li&gt;
&lt;li&gt;Explain the internal interdependencies that arent explicit (eg other systems relying on structure or api)&lt;/li&gt;
&lt;li&gt;Be ok w/ writing a longer paragraph whenever needed&lt;/li&gt;
&lt;li&gt;Never use external documentation if you can avoid. If it's not in the same file people won't update&lt;/li&gt;
&lt;li&gt;Ask to "Leave a BFN" (leave a big f*** note) - expect also your coworkers to leave notes to any code whenever needed &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  #4 Avoid clutter
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;Explicit &amp;gt; Implicit&lt;/code&gt; BUT you want to avoid explicit when explicit becomes redundant.&lt;/p&gt;

&lt;p&gt;Write your comments. &lt;br&gt;
When you wrote your comment read it again and see what you can remove or simplify. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you can't explain it simply, you don't understand it well enough. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Albert Einstein &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Hope that helps!
&lt;/h4&gt;

&lt;p&gt;Comments aren't additional to a good codebase. They are the codebase. &lt;br&gt;
While code makes a complex systems manageable for machines comments make them manageable for humans.&lt;/p&gt;

&lt;p&gt;hth,&lt;br&gt;
feel free to hit me up on twitter! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitter.com/andreasklinger"&gt;@andreasklinger&lt;/a&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>comments</category>
      <category>code</category>
    </item>
  </channel>
</rss>
