<?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: Arto Baltayan</title>
    <description>The latest articles on DEV Community by Arto Baltayan (@arto-b).</description>
    <link>https://dev.to/arto-b</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%2F3635067%2F80eaf98c-d0db-4bac-a0ad-f437ac6ac82a.jpg</url>
      <title>DEV Community: Arto Baltayan</title>
      <link>https://dev.to/arto-b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arto-b"/>
    <language>en</language>
    <item>
      <title>Docs-as-Code: Why Documentation Should Live With Your Code</title>
      <dc:creator>Arto Baltayan</dc:creator>
      <pubDate>Sun, 22 Mar 2026 17:35:51 +0000</pubDate>
      <link>https://dev.to/arto-b/docs-as-code-why-documentation-should-live-with-your-code-598j</link>
      <guid>https://dev.to/arto-b/docs-as-code-why-documentation-should-live-with-your-code-598j</guid>
      <description>&lt;p&gt;If not well maintained, a major problem with documentation is that it&lt;br&gt;
falls behind the software it describes. Changes are made, a feature gets&lt;br&gt;
updated, parameters are renamed, but the documentation still reflects&lt;br&gt;
the previous version. Developers trying to understand a system through&lt;br&gt;
the existing documentation are left confused.&lt;/p&gt;

&lt;p&gt;Docs-as-Code aims to solve this problem by treating documentation the&lt;br&gt;
same way developers treat code, rather than something completely&lt;br&gt;
separate. In this approach, documentation is written, versioned,&lt;br&gt;
reviewed, and published using the same tools and workflows used to build&lt;br&gt;
the software.&lt;/p&gt;

&lt;p&gt;Tools such as Git and platforms like GitHub make this possible. Let's&lt;br&gt;
take a closer look.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Docs-as-Code Means
&lt;/h2&gt;

&lt;p&gt;Docs-as-Code is a simple concept in theory. In practice, the learning&lt;br&gt;
curve can be a bit steeper, especially for technical writers unfamiliar&lt;br&gt;
with the tools commonly used by software engineers.&lt;/p&gt;

&lt;p&gt;At its core, Docs-as-Code means that documentation should live alongside&lt;br&gt;
the code it describes. Instead of writing documentation in a separate&lt;br&gt;
system like a wiki, it should be stored directly where the code exists.&lt;br&gt;
In other words, documentation files (often written in Markdown) should&lt;br&gt;
be located in the same repository as the application or API they&lt;br&gt;
describe.&lt;/p&gt;

&lt;p&gt;Because the documentation lives in the same repository, it becomes part&lt;br&gt;
of the same workflow, evolving at the same time and in the same way as&lt;br&gt;
the application. When a new feature is added, the updated documentation&lt;br&gt;
can be included in the same commit or pull request.&lt;/p&gt;

&lt;p&gt;A Docs-as-Code workflow might not look much different from what an&lt;br&gt;
engineering team is already used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A developer adds or changes a feature.&lt;/li&gt;
&lt;li&gt;Documentation for that feature is updated in the same repository.&lt;/li&gt;
&lt;li&gt;Both code and documentation changes are reviewed through a pull
request.&lt;/li&gt;
&lt;li&gt;Once approved, the changes are merged together.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this way, the documentation reflects the changing code. It is not&lt;br&gt;
lagging behind—it evolves alongside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Teams Should Use Docs-as-Code
&lt;/h2&gt;

&lt;p&gt;More organizations are adopting Docs-as-Code as part of their&lt;br&gt;
engineering workflow. Following are two of the most compelling reasons.&lt;/p&gt;

&lt;h3&gt;
  
  
  Version Control
&lt;/h3&gt;

&lt;p&gt;When documentation lives in the same repository as the code and is&lt;br&gt;
tracked by Git, team members can see exactly what changed, when it&lt;br&gt;
changed, and who made the change. If something is incorrect or unclear,&lt;br&gt;
it is easy to revert to a previous version.&lt;/p&gt;

&lt;p&gt;This level of visibility is rarely available in traditional&lt;br&gt;
documentation systems. It comes from treating documentation files the&lt;br&gt;
same way as source code, rather than storing them separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collaboration
&lt;/h3&gt;

&lt;p&gt;With this approach, documentation engineers and developers work in the&lt;br&gt;
same space, alongside each other. This makes collaboration more natural&lt;br&gt;
and efficient. A pull request that introduces a new feature can include&lt;br&gt;
the corresponding documentation updates, allowing reviewers to comment&lt;br&gt;
on both at the same time.&lt;/p&gt;

&lt;p&gt;This shifts the mindset of documentation being treated as a separate&lt;br&gt;
task. Instead, it becomes part of the normal engineering workflow. The&lt;br&gt;
result is straightforward: documentation stays current because it&lt;br&gt;
evolves with the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenges of Docs-as-Code
&lt;/h2&gt;

&lt;p&gt;Docs-as-Code has clear advantages, but it also comes with challenges.&lt;br&gt;
The most significant barrier is the learning curve.&lt;/p&gt;

&lt;p&gt;Technical writers and documentation specialists need to become familiar&lt;br&gt;
with tools commonly used in software development. This includes&lt;br&gt;
command-line tools, markup formats like Markdown, and version control&lt;br&gt;
systems such as Git.&lt;/p&gt;

&lt;p&gt;Without a basic understanding of these tools, it can be difficult to&lt;br&gt;
keep up with the workflow. A certain level of technical knowledge is&lt;br&gt;
required, and for some teams, that adjustment can take time.&lt;/p&gt;

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

&lt;p&gt;Docs-as-Code represents a shift in how engineering teams approach&lt;br&gt;
documentation. Rather than being an afterthought, documentation becomes&lt;br&gt;
an integrated part of the software development lifecycle.&lt;/p&gt;

&lt;p&gt;When documentation lives alongside the code, it becomes part of the&lt;br&gt;
normal workflow. This helps ensure that it evolves with the application,&lt;br&gt;
making it easier to maintain, more up to date, and more accurate.&lt;/p&gt;

&lt;p&gt;That is the ultimate goal: documentation that actually serves its users&lt;br&gt;
well over time.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>softwareengineering</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Understanding C++ Pointers: The Power Behind the Address</title>
      <dc:creator>Arto Baltayan</dc:creator>
      <pubDate>Sun, 22 Mar 2026 17:07:11 +0000</pubDate>
      <link>https://dev.to/arto-b/understanding-c-pointers-the-power-behind-the-address-1lnl</link>
      <guid>https://dev.to/arto-b/understanding-c-pointers-the-power-behind-the-address-1lnl</guid>
      <description>&lt;p&gt;Why Raw Pointers Still Matter&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you truly want to understand what's going on under the hood, you&lt;br&gt;
need to understand raw pointers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are a C++ developer, you've probably been encouraged to use smart&lt;br&gt;
pointers like &lt;code&gt;std::unique_ptr&lt;/code&gt; or &lt;code&gt;std::shared_ptr&lt;/code&gt;. These are powerful&lt;br&gt;
abstractions and, quite frankly, much safer to use in most cases.&lt;br&gt;
However, they are still built on top of raw pointers.&lt;/p&gt;

&lt;p&gt;If you truly want to understand what's going on under the hood, you need&lt;br&gt;
to understand raw pointers. You may never need to use them directly, but&lt;br&gt;
learning them gives you a solid foundation and a clearer understanding&lt;br&gt;
of what's really happening.&lt;/p&gt;

&lt;p&gt;Back when I was learning to code, raw pointers were the only option&lt;br&gt;
available to us. To use them effectively, you had to become disciplined&lt;br&gt;
about memory management. You had to think carefully about how and when&lt;br&gt;
memory was allocated and destroyed on the heap. If you didn't get this&lt;br&gt;
right, that's when you ended up with memory leaks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Knowing how to use pointers---and how memory is manipulated---isn't&lt;br&gt;
just about syntax. It's about understanding the machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So that brings us to the question: what is a pointer?&lt;/p&gt;

&lt;p&gt;Simply put, a pointer is just another variable, like an &lt;code&gt;int&lt;/code&gt; or a&lt;br&gt;
&lt;code&gt;float&lt;/code&gt;. However, this kind of variable is special because of what it&lt;br&gt;
stores. Instead of holding a direct value, it stores the address of&lt;br&gt;
another variable in memory. When a pointer holds the address of a&lt;br&gt;
specific location, it is said to be "pointing" to that location. Using&lt;br&gt;
special symbols, we can access the data stored there.&lt;/p&gt;

&lt;p&gt;Let's take a closer look at this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Here's what's happening:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;x&lt;/code&gt; is an integer variable that holds the value &lt;code&gt;10&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;x&lt;/code&gt; means "the address of x"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ptr&lt;/code&gt; is a pointer variable used to store the address of &lt;code&gt;x&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;int*&lt;/code&gt; placed in front of &lt;code&gt;ptr&lt;/code&gt; declares it as a pointer to an
integer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the context, the &lt;code&gt;*&lt;/code&gt; symbol can mean two different things.&lt;br&gt;
In a declaration, like above, it indicates that a variable is a pointer.&lt;br&gt;
In other contexts, it is used to dereference the pointer---that is, to&lt;br&gt;
access the value stored at the memory address it points to.&lt;/p&gt;

&lt;p&gt;In other words, it allows us to access &lt;code&gt;x&lt;/code&gt;, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The line above prints the value &lt;code&gt;10&lt;/code&gt;. As you can see, by using the&lt;br&gt;
pointer, we accessed and displayed the value stored in &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Are Pointers Used For
&lt;/h2&gt;

&lt;p&gt;Pointers are used when you need direct control over memory or when&lt;br&gt;
working with structures that rely on relationships between objects.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Dynamic Memory Allocation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This allocates memory similar to the earlier example, but with one&lt;br&gt;
important difference. The keyword &lt;code&gt;new&lt;/code&gt; allocates memory on the heap&lt;br&gt;
(&lt;code&gt;delete&lt;/code&gt; deallocates it). In this case, it allocates enough space to&lt;br&gt;
hold an integer, places the value &lt;code&gt;5&lt;/code&gt; into that memory, and assigns the&lt;br&gt;
address to the pointer &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After this statement executes, you have an integer stored on the heap&lt;br&gt;
with the value &lt;code&gt;5&lt;/code&gt;, and &lt;code&gt;p&lt;/code&gt; points to it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note that &lt;code&gt;p&lt;/code&gt; is a pointer to an integer. This is necessary because it&lt;br&gt;
must store the address of a memory location that holds an integer.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Working with Data Structures
&lt;/h3&gt;

&lt;p&gt;Complex structures like lists, trees, and graphs all rely on pointers to&lt;br&gt;
connect their nodes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This segment of code defines what's known as a self-referential&lt;br&gt;
structure. The pointer inside it---called &lt;code&gt;next&lt;/code&gt;---can hold the memory&lt;br&gt;
address of another &lt;code&gt;Node&lt;/code&gt;. In other words, each node can point to&lt;br&gt;
another node of the same type.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Without pointers like this, data structures such as linked lists and&lt;br&gt;
binary search trees could not exist.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  3. Interfacing with Low-Level Systems
&lt;/h3&gt;

&lt;p&gt;Operating systems, embedded systems, and performance-critical&lt;br&gt;
applications often require direct memory access and control. Pointers&lt;br&gt;
provide that level of control.&lt;/p&gt;

&lt;p&gt;A good example is game development, where performance and memory&lt;br&gt;
efficiency are critical.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Pointers Work (The Basics)
&lt;/h2&gt;

&lt;p&gt;When you declare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system stores the integer value &lt;code&gt;10&lt;/code&gt; at some location in memory. For&lt;br&gt;
the sake of illustration, let's say the address where this value is&lt;br&gt;
stored is &lt;code&gt;0x1000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, when you write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement is saying: take the memory address of &lt;code&gt;x&lt;/code&gt; and store it in&lt;br&gt;
&lt;code&gt;ptr&lt;/code&gt;. In other words, make &lt;code&gt;ptr&lt;/code&gt; point to &lt;code&gt;x&lt;/code&gt;. At this point, &lt;code&gt;ptr&lt;/code&gt;&lt;br&gt;
contains the value &lt;code&gt;0x1000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you dereference &lt;code&gt;ptr&lt;/code&gt; using the &lt;code&gt;*&lt;/code&gt; operator, you are accessing the&lt;br&gt;
value stored at the memory address that &lt;code&gt;ptr&lt;/code&gt; holds---in this case, the&lt;br&gt;
value inside &lt;code&gt;x&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement does not change the pointer itself. It changes the value&lt;br&gt;
at the memory location the pointer is referring to. In this example, it&lt;br&gt;
replaces the &lt;code&gt;10&lt;/code&gt; stored in &lt;code&gt;x&lt;/code&gt; with &lt;code&gt;20&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key distinction:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ptr&lt;/code&gt; by itself represents the address (for example, &lt;code&gt;0x1000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*ptr&lt;/code&gt; represents the value stored at that address (the same value
stored in &lt;code&gt;x&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;That distinction---between the address and the value at the&lt;br&gt;
address---is the key to understanding how pointers work.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Final Thought
&lt;/h2&gt;

&lt;p&gt;Even though it may sometimes seem that way, there's nothing magical&lt;br&gt;
about pointers. They are simply variables that can do very powerful&lt;br&gt;
things. Keeping that in mind is half the battle.&lt;/p&gt;

&lt;p&gt;That said, there are important things you need to pay close attention&lt;br&gt;
to. You must be disciplined when working with raw pointers. Mistakes,&lt;br&gt;
carelessness, or poor memory management can lead to undefined behavior.&lt;br&gt;
There's a real sense of responsibility that comes with using these&lt;br&gt;
variables---but that responsibility is also what makes them so powerful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Understanding raw pointers means understanding how C++ really works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And once you understand that, everything else in the language starts to&lt;br&gt;
make more sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  See Pointers in Practice
&lt;/h2&gt;

&lt;p&gt;If you'd like to see pointers used in a real project, I use them&lt;br&gt;
throughout my Binary Search Tree implementation. The repository includes&lt;br&gt;
the full C++ source code, along with supporting documentation and an API&lt;br&gt;
reference that walks through the design and behavior of the structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/arto-b/BST_Demo" rel="noopener noreferrer"&gt;https://github.com/arto-b/BST_Demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>memorymanagement</category>
      <category>datastructures</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Understanding C++ Pointers: The Power Behind the Address</title>
      <dc:creator>Arto Baltayan</dc:creator>
      <pubDate>Mon, 23 Feb 2026 22:40:10 +0000</pubDate>
      <link>https://dev.to/arto-b/understanding-c-pointers-the-power-behind-the-address-55nm</link>
      <guid>https://dev.to/arto-b/understanding-c-pointers-the-power-behind-the-address-55nm</guid>
      <description>&lt;p&gt;Why Raw Pointers Still Matter&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you truly want to understand what's going on under the hood, you&lt;br&gt;
need to understand raw pointers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are a C++ developer, you've probably been encouraged to use smart&lt;br&gt;
pointers like &lt;code&gt;std::unique_ptr&lt;/code&gt; or &lt;code&gt;std::shared_ptr&lt;/code&gt;. These are powerful&lt;br&gt;
abstractions and, quite frankly, much safer to use in most cases.&lt;br&gt;
However, they are still built on top of raw pointers.&lt;/p&gt;

&lt;p&gt;If you truly want to understand what's going on under the hood, you need&lt;br&gt;
to understand raw pointers. You may never need to use them directly, but&lt;br&gt;
learning them gives you a solid foundation and a clearer understanding&lt;br&gt;
of what's really happening.&lt;/p&gt;

&lt;p&gt;Back when I was learning to code, raw pointers were the only option&lt;br&gt;
available to us. To use them effectively, you had to become disciplined&lt;br&gt;
about memory management. You had to think carefully about how and when&lt;br&gt;
memory was allocated and destroyed on the heap. If you didn't get this&lt;br&gt;
right, that's when you ended up with memory leaks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Knowing how to use pointers—and how memory is manipulated—isn't&lt;br&gt;
just about syntax. It's about understanding the machine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So that brings us to the question: what is a pointer?&lt;/p&gt;

&lt;p&gt;Simply put, a pointer is just another variable, like an &lt;code&gt;int&lt;/code&gt; or a&lt;br&gt;
&lt;code&gt;float&lt;/code&gt;. However, this kind of variable is special because of what it&lt;br&gt;
stores. Instead of holding a direct value, it stores the address of&lt;br&gt;
another variable in memory. When a pointer holds the address of a&lt;br&gt;
specific location, it is said to be "pointing" to that location. Using&lt;br&gt;
special symbols, we can access the data stored there.&lt;/p&gt;

&lt;p&gt;Let's take a closer look at this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Here's what's happening:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;x&lt;/code&gt; is an integer variable that holds the value &lt;code&gt;10&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;x&lt;/code&gt; means "the address of x"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ptr&lt;/code&gt; is a pointer variable used to store the address of &lt;code&gt;x&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;int*&lt;/code&gt; placed in front of &lt;code&gt;ptr&lt;/code&gt; declares it as a pointer to an
integer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the context, the &lt;code&gt;*&lt;/code&gt; symbol can mean two different things.&lt;br&gt;
In a declaration, like above, it indicates that a variable is a pointer.&lt;br&gt;
In other contexts, it is used to dereference the pointer—that is, to&lt;br&gt;
access the value stored at the memory address it points to.&lt;/p&gt;

&lt;p&gt;In other words, it allows us to access &lt;code&gt;x&lt;/code&gt;, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The line above prints the value &lt;code&gt;10&lt;/code&gt;. As you can see, by using the&lt;br&gt;
pointer, we accessed and displayed the value stored in &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Are Pointers Used For
&lt;/h2&gt;

&lt;p&gt;Pointers are used when you need direct control over memory or when&lt;br&gt;
working with structures that rely on relationships between objects.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Dynamic Memory Allocation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This allocates memory similar to the earlier example, but with one&lt;br&gt;
important difference. The keyword &lt;code&gt;new&lt;/code&gt; allocates memory on the heap&lt;br&gt;
(&lt;code&gt;delete&lt;/code&gt; deallocates it). In this case, it allocates enough space to&lt;br&gt;
hold an integer, places the value &lt;code&gt;5&lt;/code&gt; into that memory, and assigns the&lt;br&gt;
address to the pointer &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After this statement executes, you have an integer stored on the heap&lt;br&gt;
with the value &lt;code&gt;5&lt;/code&gt;, and &lt;code&gt;p&lt;/code&gt; points to it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note that &lt;code&gt;p&lt;/code&gt; is a pointer to an integer. This is necessary because it&lt;br&gt;
must store the address of a memory location that holds an integer.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Working with Data Structures
&lt;/h3&gt;

&lt;p&gt;Complex structures like lists, trees, and graphs all rely on pointers to&lt;br&gt;
connect their nodes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This segment of code defines what's known as a self-referential&lt;br&gt;
structure. The pointer inside it—called &lt;code&gt;next&lt;/code&gt;—can hold the memory&lt;br&gt;
address of another &lt;code&gt;Node&lt;/code&gt;. In other words, each node can point to&lt;br&gt;
another node of the same type.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Without pointers like this, data structures such as linked lists and&lt;br&gt;
binary search trees could not exist.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  3. Interfacing with Low-Level Systems
&lt;/h3&gt;

&lt;p&gt;Operating systems, embedded systems, and performance-critical&lt;br&gt;
applications often require direct memory access and control. Pointers&lt;br&gt;
provide that level of control.&lt;/p&gt;

&lt;p&gt;A good example is game development, where performance and memory&lt;br&gt;
efficiency are critical.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Pointers Work (The Basics)
&lt;/h2&gt;

&lt;p&gt;When you declare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system stores the integer value &lt;code&gt;10&lt;/code&gt; at some location in memory. For&lt;br&gt;
the sake of illustration, let's say the address where this value is&lt;br&gt;
stored is &lt;code&gt;0x1000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, when you write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement is saying: take the memory address of &lt;code&gt;x&lt;/code&gt; and store it in&lt;br&gt;
&lt;code&gt;ptr&lt;/code&gt;. In other words, make &lt;code&gt;ptr&lt;/code&gt; point to &lt;code&gt;x&lt;/code&gt;. At this point, &lt;code&gt;ptr&lt;/code&gt;&lt;br&gt;
contains the value &lt;code&gt;0x1000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you dereference &lt;code&gt;ptr&lt;/code&gt; using the &lt;code&gt;*&lt;/code&gt; operator, you are accessing the&lt;br&gt;
value stored at the memory address that &lt;code&gt;ptr&lt;/code&gt; holds—in this case, the&lt;br&gt;
value inside &lt;code&gt;x&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This statement does not change the pointer itself. It changes the value&lt;br&gt;
at the memory location the pointer is referring to. In this example, it&lt;br&gt;
replaces the &lt;code&gt;10&lt;/code&gt; stored in &lt;code&gt;x&lt;/code&gt; with &lt;code&gt;20&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key distinction:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ptr&lt;/code&gt; by itself represents the address (for example, &lt;code&gt;0x1000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*ptr&lt;/code&gt; represents the value stored at that address (the same value
stored in &lt;code&gt;x&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;That distinction—between the address and the value at the&lt;br&gt;
address—is the key to understanding how pointers work.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Final Thought
&lt;/h2&gt;

&lt;p&gt;Even though it may sometimes seem that way, there's nothing magical&lt;br&gt;
about pointers. They are simply variables that can do very powerful&lt;br&gt;
things. Keeping that in mind is half the battle.&lt;/p&gt;

&lt;p&gt;That said, there are important things you need to pay close attention&lt;br&gt;
to. You must be disciplined when working with raw pointers. Mistakes,&lt;br&gt;
carelessness, or poor memory management can lead to undefined behavior.&lt;br&gt;
There's a real sense of responsibility that comes with using these&lt;br&gt;
variables—but that responsibility is also what makes them so powerful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Understanding raw pointers means understanding how C++ really works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And once you understand that, everything else in the language starts to&lt;br&gt;
make more sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  See Pointers in Practice
&lt;/h2&gt;

&lt;p&gt;If you'd like to see pointers used in a real project, I use them&lt;br&gt;
throughout my Binary Search Tree implementation. The repository includes&lt;br&gt;
the full C++ source code, along with supporting documentation and an API&lt;br&gt;
reference that walks through the design and behavior of the structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/arto-b/BST_Demo" rel="noopener noreferrer"&gt;https://github.com/arto-b/BST_Demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>memorymanagement</category>
      <category>datastructures</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why Documentation Fails in Engineering Teams</title>
      <dc:creator>Arto Baltayan</dc:creator>
      <pubDate>Sat, 21 Feb 2026 23:51:03 +0000</pubDate>
      <link>https://dev.to/arto-b/why-documentation-fails-in-engineering-teams-3l7e</link>
      <guid>https://dev.to/arto-b/why-documentation-fails-in-engineering-teams-3l7e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Documentation doesn't fail because engineers don't like to write.&lt;br&gt;
It fails because teams don't design for it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Any engineer, manager, or CTO will agree: documentation is important. It&lt;br&gt;
reduces bugs, speeds up development, lowers costs, protects&lt;br&gt;
institutional knowledge, and clarifies code for new engineers—and for&lt;br&gt;
those returning after a long hiatus.&lt;/p&gt;

&lt;p&gt;Yet in team after team, documentation is outdated, incomplete,&lt;br&gt;
inconsistent, or simply ignored. Despite good intentions and general&lt;br&gt;
agreement about its value, it still breaks down. So what's actually&lt;br&gt;
going wrong?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not a writing problem. It's a systems problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When documentation fails, it's rarely because someone couldn't write. It&lt;br&gt;
fails because the environment around it wasn't designed to support it.&lt;/p&gt;

&lt;p&gt;Let's explore what's really happening, why it keeps happening, and how&lt;br&gt;
to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation Without Ownership
&lt;/h2&gt;

&lt;p&gt;The hill documentation dies on is easy to identify, but unfortunately&lt;br&gt;
it's usually discovered too late in the project. The moment&lt;br&gt;
documentation becomes everyone's responsibility is the moment it starts&lt;br&gt;
to go wrong—and this happens, more often than not, at the very&lt;br&gt;
beginning of the process.&lt;/p&gt;

&lt;p&gt;When documentation is assigned to "the team," what this really means is&lt;br&gt;
it belongs to no one. Everyone assumes somebody else is handling it.&lt;br&gt;
They have their own responsibilities, and documentation becomes&lt;br&gt;
secondary. That's the problem. A system where documentation is treated&lt;br&gt;
like an afterthought is a system missing one of its key elements.&lt;/p&gt;

&lt;p&gt;Without explicit ownership, documentation turns into a mishmash of&lt;br&gt;
comments, guides, and API references—loosely assembled and rarely&lt;br&gt;
effective. Eventually, most teams recognize something needs to change.&lt;br&gt;
That's usually when a documentation engineer like myself is brought in.&lt;br&gt;
By then, however, the damage has already been done.&lt;/p&gt;

&lt;p&gt;Ownership doesn't just mean someone who writes comments. It means&lt;br&gt;
someone accountable for structure, accuracy, and completeness. It means&lt;br&gt;
someone responsible for asking difficult questions—and following&lt;br&gt;
through once the answers surface.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Without that role, clear and reliable documentation is unlikely.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Documentation Is Part of the Infrastructure
&lt;/h2&gt;

&lt;p&gt;Most engineering teams treat documentation as something you produce once&lt;br&gt;
the project is complete. That kind of thinking almost guarantees it will&lt;br&gt;
be rushed and incomplete. The real problem isn't effort—it's mindset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation is not output; it's infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What does that mean? To answer that, we have to clearly define what&lt;br&gt;
documentation actually is. It's not just sprinkling comments between&lt;br&gt;
blocks of code. Documentation shapes how a system is understood and&lt;br&gt;
used. It helps engineers support, build, and improve the architecture.&lt;br&gt;
It guides customers toward adopting system features quickly and&lt;br&gt;
efficiently.&lt;/p&gt;

&lt;p&gt;For this to happen, documentation must be developed alongside the system&lt;br&gt;
itself. Decisions aren't left to be hastily assembled at the end of the&lt;br&gt;
project. Testing is where edge cases reveal themselves, and they should&lt;br&gt;
be documented immediately while the context is still clear.&lt;/p&gt;

&lt;p&gt;Infrastructure is continuously maintained. Documentation should be no&lt;br&gt;
different.&lt;/p&gt;




&lt;h2&gt;
  
  
  Documentation Requires a System
&lt;/h2&gt;

&lt;p&gt;Engineers optimize for what is visible. If something lives in their&lt;br&gt;
workflow, they run with it. But as anyone who has worked in software&lt;br&gt;
engineering knows, if it isn't made a priority, documentation rarely&lt;br&gt;
stays in plain sight.&lt;/p&gt;

&lt;p&gt;Documentation is not optional. It has to be integrated into the&lt;br&gt;
workflow. This ensures it evolves alongside the software itself. When it&lt;br&gt;
isn't, documentation drifts out of alignment with the code, and&lt;br&gt;
inconsistencies begin to multiply.&lt;/p&gt;

&lt;p&gt;Guilting engineers into writing more isn't the answer. The only way to&lt;br&gt;
make documentation sustainable—and keep friction low—is to integrate&lt;br&gt;
it into the same workflows and mechanisms used to produce code. It needs&lt;br&gt;
to be reviewable, trackable, and measurable, just like the codebase&lt;br&gt;
itself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Engineers respond to systems. Documentation should function as a&lt;br&gt;
subsystem within the larger engineering whole.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  It's Not Writing—It's Design
&lt;/h2&gt;

&lt;p&gt;Documentation is often treated as writing, not thinking. What does that&lt;br&gt;
mean? Engineering teams tend to view documentation as a translation of&lt;br&gt;
the code itself. Once the system is built, that's when the work of&lt;br&gt;
describing it begins. Not so.&lt;/p&gt;

&lt;p&gt;Good documentation isn't a transcription of code. It's a living,&lt;br&gt;
evolving part of the system—and to reach its full potential, it must&lt;br&gt;
include elements of design.&lt;/p&gt;

&lt;p&gt;Here's what's interesting: when you set out to clearly explain a system,&lt;br&gt;
inconsistencies start to surface. Writing an API reference can reveal&lt;br&gt;
confusing abstractions. The act of documenting often exposes issues the&lt;br&gt;
engineering team may never have confronted directly.&lt;/p&gt;

&lt;p&gt;If documentation is delayed until after the project is complete, these&lt;br&gt;
issues surface too late—or not at all. The architecture solidifies&lt;br&gt;
before its flaws are revealed through explanation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Documenting a system helps expose its vulnerabilities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It may come as a surprise to some engineering teams that documenting a&lt;br&gt;
system as it evolves leads to a stronger, more resilient codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rethinking Documentation
&lt;/h2&gt;

&lt;p&gt;Here's a simple idea: we need to rethink how documentation is created in&lt;br&gt;
most software engineering teams today. The problems are clear. Some&lt;br&gt;
solutions exist. But what's really required is a shift in mindset.&lt;/p&gt;

&lt;p&gt;We need to stop thinking about documentation as writing and start&lt;br&gt;
thinking about it as code.&lt;/p&gt;

&lt;p&gt;If documentation were treated the same way we treat code, it would be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Designed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Written&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reviewed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maintained&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versioned&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Handled this way, documentation would improve over time and evolve&lt;br&gt;
alongside the software.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And more importantly, it would actually be used—because it would be&lt;br&gt;
built into the system, not bolted on afterward.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>documentation</category>
      <category>engineering</category>
      <category>architecture</category>
      <category>devops</category>
    </item>
    <item>
      <title>Just Ask - A Story About Growth as a Developer</title>
      <dc:creator>Arto Baltayan</dc:creator>
      <pubDate>Sun, 07 Dec 2025 01:16:56 +0000</pubDate>
      <link>https://dev.to/arto-b/just-ask-a-story-about-growth-as-a-developer-1a2b</link>
      <guid>https://dev.to/arto-b/just-ask-a-story-about-growth-as-a-developer-1a2b</guid>
      <description>&lt;p&gt;I've been coding for a long time. When I first started, I remember feeling such a profound sense of insecurity that it stopped me from ever asking for help—or even asking questions of any kind. It got so bad that it morphed into a fear of &lt;em&gt;losing face&lt;/em&gt;, as if asking was somehow a violation of some unwritten coder’s code of honor.&lt;/p&gt;

&lt;p&gt;Years later, after I had learned to suffer through my own problems in silence, something very unique and enlightening happened. I went to work as a computer science instructor at a local technical college. There, I met someone—another instructor—who I quickly became friends with.&lt;/p&gt;

&lt;p&gt;Let’s call him Paul. Paul is probably the smartest man I know. His intelligence truly approaches the level of genius, and I’m not exaggerating. He was working on artificial intelligence systems 20 years before “AI” was even a buzzword. He went on to code the firmware inside pacemakers. Today, he's the Director of Research and Development at a major medical device corporation.&lt;/p&gt;

&lt;p&gt;Anyway, our story begins in the lab at the technical college. My class was over, and I had my students in the lab working on an assignment or exercise I had given them. Next thing I know, Paul walks into the lab, comes straight up to me, and asks a question about a C++ statement he was planning to include in an assignment for his own students.&lt;/p&gt;

&lt;p&gt;It wasn’t a hard question, but it was obscure enough that many coders wouldn’t know the answer. I just happened to know it. However, what truly astonished me wasn’t the question—it was the fact that &lt;em&gt;he&lt;/em&gt;, of all people, didn’t know. Even more astonishing was that he came up and asked &lt;em&gt;me&lt;/em&gt;. Wasn’t he embarrassed?&lt;/p&gt;

&lt;p&gt;When I gave him the answer, I hesitated for a second, then decided to ask—because at that point in our friendship, I felt close enough to be candid.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Paul,” I said, “I know what you were hung up on isn’t something that’s generally known... but weren’t you a little embarrassed to ask?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He looked straight at me, and without missing a beat, said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“If I don’t ask, how would I ever know the answer?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At that moment, it was as if the heavens opened up and a light shone down on me. I felt so foolish. He was absolutely right.&lt;/p&gt;

&lt;p&gt;What was truly life-changing was the realization that I had suffered through my career for so many years with a false sense of pride—one that could have been completely avoided. From that point on, I subscribed to my friend Paul’s way of coding and software engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you don’t know, why not ask? How else will you ever get better?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sure, you’ll eventually figure things out on your own, but is it really worth putting yourself through all that? Especially when there are colleagues—many of whom are more than willing to help at a moment’s notice. That’s how we grow as developers and move on to bigger and brighter things.&lt;/p&gt;

&lt;p&gt;It wasn’t until a couple of years later that I realized I wasn’t alone. Nearly every software engineer I encountered—whether novice or expert—struggled through their problems in silence, rarely asking for help or bouncing ideas off colleagues. And it hit me: this wasn’t just &lt;em&gt;my&lt;/em&gt; issue. This was a cultural issue in our profession.&lt;/p&gt;

&lt;p&gt;Fast forward several years. I’m working at a company, and one of my coworkers is a young firmware engineer. She had just accepted a new job and was about to move on. In her, I saw a little bit of myself—back when I was just starting out.&lt;/p&gt;

&lt;p&gt;On her last day, I went to say goodbye and, before she left, I told her this little story about me and Paul from my earlier days as a developer. When I finished, her eyes lit up. I didn’t expect it to impact her the way it did—but why wouldn’t it? The experience had affected &lt;em&gt;me&lt;/em&gt; quite drastically.&lt;/p&gt;

&lt;p&gt;She told me she often felt the same way—apprehensive about asking for help. That sometimes, when she got stuck, she wanted to ask someone... but it felt embarrassing. She thanked me, and left.&lt;/p&gt;

&lt;p&gt;It put a big smile on my face, because I knew I had changed the way she thought about software engineering—and perhaps the way she would move forward in her career.&lt;/p&gt;

&lt;p&gt;I don’t know where this feeling of inadequacy or embarrassment comes from, but it has to stop. As software engineers, we put so much pressure on ourselves. We think we have to know &lt;em&gt;everything&lt;/em&gt;—every nuance of every language, every protocol, every piece of technology that’s ever been developed since the dawn of the software age.&lt;/p&gt;




&lt;h3&gt;
  
  
  Not so.
&lt;/h3&gt;

&lt;p&gt;If you’re stuck, &lt;strong&gt;ask&lt;/strong&gt;—and see what happens. You’ll live a much happier, more productive life. And you wouldn’t believe how far that simple change can take you in your career.&lt;/p&gt;

&lt;p&gt;That, I know for a fact.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>codenewbie</category>
      <category>programming</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
