<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.1">Jekyll</generator><link href="https://www.thewokecoder.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.thewokecoder.io/" rel="alternate" type="text/html" /><updated>2026-03-22T13:51:18+00:00</updated><id>https://www.thewokecoder.io/feed.xml</id><title type="html">The Woke Coder</title><subtitle>Learn math. Build software.</subtitle><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><entry><title type="html">Learning C++ Until I Get An AI/Quant Role (Part 1)</title><link href="https://www.thewokecoder.io/learning-cpp-until-ai-quant-role/" rel="alternate" type="text/html" title="Learning C++ Until I Get An AI/Quant Role (Part 1)" /><published>2026-03-14T00:00:00+00:00</published><updated>2026-03-14T00:00:00+00:00</updated><id>https://www.thewokecoder.io/learning-cpp-until-ai-quant-role</id><content type="html" xml:base="https://www.thewokecoder.io/learning-cpp-until-ai-quant-role/"><![CDATA[<p>In AI infrastructure and quantitative trading, performance is not just an optimization—it is a competitive advantage. Writing efficient systems requires understanding how software interacts with memory, hardware, and execution at a low level.</p>

<p>C++ is one of the most important languages for building this foundation. It offers fine-grained control over memory, predictable performance, and the ability to create high-performance abstractions without sacrificing efficiency.</p>

<p>For experienced programmers, a good starting point is <em>A Tour of C++</em> by Bjarne Stroustrup, the creator of the language. It provides a concise, practical overview of modern C++, serving as a high-level map without unnecessary detail.</p>

<h2 id="the-basics">The Basics</h2>

<p>Here is a program that writes <code class="language-plaintext highlighter-rouge">Hello, World!</code>:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include &lt;iostream&gt;
</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Hello, World!</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="from-source-code-to-executable">From Source Code to Executable</h2>

<p>Although this program looks tiny, several important steps happen before it can run.</p>

<h3 id="1-preprocessing">1. Preprocessing</h3>

<p>The line</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include &lt;iostream&gt;
</span></code></pre></div></div>

<p>tells the preprocessor to include the standard input/output stream header.</p>

<p>This header provides the declarations needed to use <code class="language-plaintext highlighter-rouge">std::cout</code>, which sends output to the screen.</p>

<p>Before the compiler actually compiles your C++ program, the <strong>preprocessor</strong> runs first.</p>

<p>When it sees <code class="language-plaintext highlighter-rouge">#include &lt;iostream&gt;</code>, it roughly takes the contents of the <code class="language-plaintext highlighter-rouge">iostream</code> header and pastes them into your file at that point.</p>

<p>So the compiler effectively works with something like this:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// contents of iostream pasted here</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Hello, World!</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>This matters because <code class="language-plaintext highlighter-rouge">std::cout</code> is declared in the standard library headers. Without including <code class="language-plaintext highlighter-rouge">&lt;iostream&gt;</code>, the compiler would not know what <code class="language-plaintext highlighter-rouge">std::cout</code> is, so the program would fail to compile.</p>

<p>After preprocessing, the compiler no longer sees <code class="language-plaintext highlighter-rouge">#include &lt;iostream&gt;</code> as a special instruction. Instead, it sees the expanded source code with the necessary declarations inserted.</p>

<h4 id="more-preprocessing-examples">More Preprocessing Examples</h4>

<p>The preprocessor does more than just handle <code class="language-plaintext highlighter-rouge">#include</code>. It also processes macros and conditional compilation.</p>

<h5 id="example-1-macro-substitution">Example 1: Macro Substitution</h5>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#define SIZE 10
</span>
<span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="n">SIZE</span><span class="p">];</span>
</code></pre></div></div>

<p>A simple mental model is that the preprocessor replaces <code class="language-plaintext highlighter-rouge">SIZE</code> with <code class="language-plaintext highlighter-rouge">10</code> before compilation, so the compiler roughly sees:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">int</span> <span class="n">arr</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span>
</code></pre></div></div>

<h5 id="example-2-function-like-macro">Example 2: Function-Like Macro</h5>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#define SQUARE(x) ((x) * (x))
</span>
<span class="kt">int</span> <span class="n">y</span> <span class="o">=</span> <span class="n">SQUARE</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span>
</code></pre></div></div>

<p>After preprocessing, this becomes roughly:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">int</span> <span class="n">y</span> <span class="o">=</span> <span class="p">((</span><span class="mi">5</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="mi">5</span><span class="p">));</span>
</code></pre></div></div>

<h5 id="example-3-conditional-compilation">Example 3: Conditional Compilation</h5>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#define DEBUG
</span>
<span class="cp">#ifdef DEBUG
</span><span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Debug mode</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
<span class="cp">#endif
</span></code></pre></div></div>

<p>If <code class="language-plaintext highlighter-rouge">DEBUG</code> is defined, the preprocessor keeps that line. If it is not defined, the line is removed before compilation.</p>

<h3 id="example-4-header-guards">Example 4: Header Guards</h3>

<p>A common use of the preprocessor is preventing the same header from being included multiple times.</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#ifndef MY_HEADER_H
#define MY_HEADER_H
</span>
<span class="kt">void</span> <span class="nf">f</span><span class="p">();</span>

<span class="cp">#endif
</span></code></pre></div></div>

<p>This pattern is called a <strong>header guard</strong>.</p>

<p>It tells the preprocessor to include the contents of the header only once, avoiding duplicate declarations.</p>

<h3 id="2-compilation">2. Compilation</h3>

<p>Next, the compiler translates the C++ source code into <strong>object code</strong>.</p>

<p>At this stage, the compiler checks the syntax and semantics of the program. It verifies things such as:</p>

<ul>
  <li>whether <code class="language-plaintext highlighter-rouge">main</code> is written correctly</li>
  <li>whether <code class="language-plaintext highlighter-rouge">std::cout</code> has been declared</li>
  <li>whether the operators are being used in a valid way</li>
</ul>

<p>The result is usually an <strong>object file</strong>, not yet a runnable program.</p>

<p>You can think of an object file as a partially completed machine-level translation of your source code.</p>

<h3 id="3-linking">3. Linking</h3>

<p>After compilation, the <strong>linker</strong> takes over.</p>

<p>The linker combines your object file with the other pieces required to form a complete program. These pieces often include code from the C++ standard library and runtime support provided by the system.</p>

<p>This step matters because seeing a declaration is not the same as having the actual implementation.</p>

<p>For example, the compiler may accept your use of <code class="language-plaintext highlighter-rouge">std::cout</code> because it knows the declaration from <code class="language-plaintext highlighter-rouge">&lt;iostream&gt;</code>, but the final executable still needs the underlying compiled library code that makes output actually work.</p>

<p>The linker resolves those references and joins everything together into one finished program.</p>

<p>A useful mental model is:</p>

<ul>
  <li>the <strong>compiler</strong> checks your code and translates it</li>
  <li>the <strong>linker</strong> connects your translated code with all the other compiled pieces it depends on</li>
</ul>

<h3 id="4-creating-the-executable">4. Creating the Executable</h3>

<p>Once linking succeeds, the result is an <strong>executable</strong>.</p>

<p>An executable is the file that the operating system can load into memory and run.</p>

<p>So the journey looks roughly like this:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source file -&gt; preprocessor -&gt; compiler -&gt; object file -&gt; linker -&gt; executable
</code></pre></div></div>

<p>When you run that executable, the operating system starts the program, execution enters <code class="language-plaintext highlighter-rouge">main()</code>, and the statement</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Hello, World!</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
</code></pre></div></div>

<p>writes the text to standard output.</p>

<h2 id="summary">Summary</h2>

<p>To get from source code to a running program, you need to understand the pipeline:</p>

<ul>
  <li>the <strong>preprocessor</strong> prepares the source code</li>
  <li>the <strong>compiler</strong> translates it into object code</li>
  <li>the <strong>linker</strong> combines everything into an executable</li>
  <li>the <strong>operating system</strong> loads and runs that executable</li>
</ul>

<p>This flow becomes increasingly important in larger systems, especially in performance-sensitive domains like AI infrastructure and quantitative trading, where build systems, libraries, binaries, and runtime behavior all matter.</p>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="C++" /><summary type="html"><![CDATA[In AI infrastructure and quantitative trading, performance is not just an optimization—it is a competitive advantage. Writing efficient systems requires understanding how software interacts with memory, hardware, and execution at a low level.]]></summary></entry><entry><title type="html">Learning Math Until I Break Into AI/Quant (Part 4)</title><link href="https://www.thewokecoder.io/learning-math-until-ai-quant-role-4/" rel="alternate" type="text/html" title="Learning Math Until I Break Into AI/Quant (Part 4)" /><published>2026-02-26T00:00:00+00:00</published><updated>2026-02-26T00:00:00+00:00</updated><id>https://www.thewokecoder.io/learning-math-until-ai-quant-role-4</id><content type="html" xml:base="https://www.thewokecoder.io/learning-math-until-ai-quant-role-4/"><![CDATA[<h2 id="integer-constraints-via-linear-independence">Integer Constraints via Linear Independence</h2>

<p>In this article, we study a fascinating problem that beautifully bridges <strong>elementary number theory</strong> and <strong>linear algebra</strong>.</p>

<p>Despite its discrete setup, this problem can be solved by mapping exponents of primes into a vector space and applying dimension constraints.</p>

<hr />

<h3 id="problem">Problem</h3>

<p>Let $a_1 &lt; a_2 &lt; \dots &lt; a_n \le x$ be a set of positive integers such that no $a_i$ divides the product of the others. Prove that $n \le \pi(x)$.</p>

<hr />

<h3 id="solution">Solution</h3>

<p>Let $m = \pi(x)$ be the number of primes less than or equal to $x$. Let these primes be denoted as $p_1, p_2, \dots, p_m$.</p>

<p>Since every integer $a_i$ is less than or equal to $x$, its prime factorization can only consist of primes from this set. We can write each $a_i$ as</p>

\[a_i = p_1^{e_{i,1}} p_2^{e_{i,2}} \cdots p_m^{e_{i,m}}\]

<p>where each exponent $e_{i,j} \ge 0$ is an integer.</p>

<h4 id="vector-representation-of-exponents"><strong>Vector Representation of Exponents</strong></h4>

<p>We map each integer $a_i$ to an <strong>exponent vector</strong> in the real vector space $\mathbb{R}^m$</p>

\[v_i = (e_{i,1}, e_{i,2}, \dots, e_{i,m})\]

<h4 id="the-divisibility-condition"><strong>The Divisibility Condition</strong></h4>

<p>The problem states that for any $i$, $a_i$ does not divide the product $\prod_{j \neq i} a_j$.</p>

<p>In terms of prime factorizations, $a \mid b$ if and only if every prime exponent in $a$ is less than or equal to the corresponding prime exponent in $b$. Because $a_i$ does <em>not</em> divide the product of the others, there must exist at least one specific prime index $k$ (where $1 \le k \le m$) such that the exponent of $p_k$ in $a_i$ is strictly greater than the sum of the exponents of $p_k$ in all other numbers</p>

\[e_{i,k} &gt; \sum_{j \neq i} e_{j,k}\]

<h4 id="proving-linear-independence"><strong>Proving Linear Independence</strong></h4>

<p>Suppose for contradiction that the vectors $v_1, \dots, v_n$ are linearly dependent. Then there exists $c_1, \dots, c_n$, not all zero, such that</p>

\[\sum_{j=1}^n c_j v_j = \mathbf{0}\]

<p>Since not all coefficients are zero, let $i$ be the index such that 
\(|c_i| = \max{(|c_1|,|c_2|, \dots, |c_n|)}.\)</p>

<p>Consider the $k^{th}$ coordinate of the linear combination, \(\sum_{j=1}^n c_j v_j = \mathbf{0}\), we have</p>

\[c_i e_{i,k} + \sum_{j \neq i} c_j e_{j,k} = 0\]

<p>Rearranging the terms,</p>

\[c_i e_{i,k} = - \sum_{j \neq i} c_j e_{j,k}\]

<p>Taking the absolute value of both sides and applying the triangle inequality,</p>

\[|c_i| e_{i,k} = \left| \sum_{j \neq i} c_j e_{j,k} \right| \le \sum_{j \neq i} |c_j| e_{j,k}\]

<p>Since 
$|c_i| \ge |c_j|$,</p>

\[|c_i| e_{i,k} \le \sum_{j \neq i} |c_i| e_{j,k}\]

\[e_{i,k} \le \sum_{j \neq i} e_{j,k}\]

<p>This contradicts the established fact above that \(e_{i,k} &gt; \sum_{j \neq i} e_{j,k}\).</p>

<h4 id="dimension-constraint"><strong>Dimension Constraint</strong></h4>

<p>Because the assumption of linear dependence leads to a contradiction, the set of vectors ${v_1, v_2, \dots, v_n}$ must be linearly independent.</p>

<p>We now have $n$ linearly independent vectors residing in $\mathbb{R}^m$. A fundamental theorem of linear algebra states that the number of linearly independent vectors in a finite-dimensional vector space cannot exceed the dimension of that space.</p>

<p>Therefore, $n \le m$. Since $m = \pi(x)$, we conclude that</p>

\[\boxed{n \le \pi(x)}\]

<hr />

<blockquote>
  <p><strong>Note:</strong> This method reflects a broader mathematical principle. Discrete algebraic structures can be embedded into vector spaces where multiplicative relations become additive and structural constraints become linear. Dimension bounds then limit how complex such systems can be. Similar representation ideas appear in quantitative modeling, where discrete features are encoded into continuous vector spaces to enable geometric and linear analysis.</p>
</blockquote>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Mathematics" /><category term="Number Theory" /><category term="Linear Algebra" /><summary type="html"><![CDATA[Integer Constraints via Linear Independence]]></summary></entry><entry><title type="html">Learning Math Until I Break Into AI/Quant (Part 3)</title><link href="https://www.thewokecoder.io/learning-math-until-ai-quant-role-3/" rel="alternate" type="text/html" title="Learning Math Until I Break Into AI/Quant (Part 3)" /><published>2026-02-07T00:00:00+00:00</published><updated>2026-02-07T00:00:00+00:00</updated><id>https://www.thewokecoder.io/learning-math-until-ai-quant-role-3</id><content type="html" xml:base="https://www.thewokecoder.io/learning-math-until-ai-quant-role-3/"><![CDATA[<h2 id="integer-constraints-via-diophantine-equations">Integer Constraints via Diophantine Equations</h2>

<p>In this article, we study a simple yet instructive example of a <strong>linear Diophantine equation</strong> arising from a coin-counting problem.</p>

<p>Despite its elementary appearance, this problem showcases how number theory naturally encodes <strong>discrete constraints</strong>, a theme that appears repeatedly in optimization, algorithms, and quantitative finance.</p>

<p>This idea mirrors feasibility checks in optimization, algorithms, and quantitative modeling.</p>

<hr />

<h3 id="problem">Problem</h3>

<p>A man has <strong>$4.55</strong> in change composed entirely of <strong>10-cent coins</strong> and <strong>25-cent coins</strong>.</p>

<ol>
  <li>What is the <strong>maximum</strong> number of coins he can have?</li>
  <li>What is the <strong>minimum</strong> number of coins he can have?</li>
  <li>Is it possible for the number of 10-cent coins to equal the number of 25-cent coins?</li>
</ol>

<hr />

<h3 id="solution">Solution</h3>

<p>Let</p>
<ul>
  <li>$x$ = number of 10-cent coins</li>
  <li>$y$ = number of 25-cent coins</li>
</ul>

<p>The total value in cents gives the equation</p>

\[10x + 25y = 455.\]

<h4 id="existence-of-solutions"><strong>Existence of Solutions</strong></h4>

<p>Let $d = \gcd(a,b)$. A fundamental result in number theory states that there exist integers $u,v$ such that $au + bv = d.$ (This is a consequence of the Euclidean algorithm.)</p>

<p>If $d \mid c$, say $c = dk$, then multiplying the identity by $k$ gives</p>

\[a(ku) + b(kv) = dk = c.\]

<p>Thus $(x,y) = (ku,kv)$ is an integer solution.</p>

<p>Conversely, if $ax + by = c$ has an integer solution, then every common divisor of $a$ and $b$ must divide the left-hand side, hence must divide $c$. In particular, $\gcd(a,b)$ divides $c$.</p>

<p>Therefore, a linear Diophantine equation $ax + by = c$
has integer solutions if and only if</p>

\[\gcd(a,b) \mid c.\]

<h4 id="euclidean-algorithm"><strong>Euclidean Algorithm</strong></h4>

<p>Applying the Euclidean algorithm,</p>

\[\begin{aligned}
25 &amp;= 10(2) + 5, \\
10 &amp;= 5(2).
\end{aligned}\]

<p>Hence, $\gcd(10,25) = 5.$</p>

<p>Since $5 \mid 455$, integer solutions exist.</p>

<h4 id="solution-via-back-substitution"><strong>Solution via Back Substitution</strong></h4>

<p>From the first equation,</p>

\[5 = 25 - 10(2).\]

<p>Multiply both sides by $91$,</p>

\[455 = 91(25) - 182(10).\]

<p>This gives a particular integer solution,</p>

\[x_0 = -182, \qquad y_0 = 91.\]

<h4 id="general-integer-solution"><strong>General Integer Solution</strong></h4>

<p>Let $d = \gcd(a,b)$.<br />
If $(x_0,y_0)$ is one solution of $ax+by=c$, then <strong>all</strong> integer solutions are given by</p>

\[x = x_0 + \frac{b}{d}t,
\qquad
y = y_0 - \frac{a}{d}t,
\qquad t \in \mathbb{Z}.\]

<p>To see why, suppose $(x,y)$ is any other solution. Then</p>

\[a(x - x_0) + b(y - y_0) = 0.\]

<p>Hence</p>

\[a(x - x_0) = -b(y - y_0).\]

<p>Since $a$ and $b$ share greatest common divisor $d$, one can show that</p>

\[x - x_0 = \frac{b}{d}t,
\qquad
y - y_0 = -\frac{a}{d}t\]

<p>for some integer $t$. Substituting these expressions back verifies that all such pairs satisfy the original equation.</p>

<p>In our case, $a=10$, $b=25$, and $d=5$, so</p>

\[\frac{b}{d} = 5,
\qquad
\frac{a}{d} = 2.\]

<p>Therefore the general integer solution of $10x + 25y = 455$ is</p>

\[\boxed{
\begin{aligned}
x &amp;= -182 + 5t, \\
y &amp;= 91 - 2t,
\end{aligned}
\qquad t \in \mathbb{Z}.
}\]

<h4 id="non-negativity-constraints"><strong>Non-Negativity Constraints</strong></h4>

<p>Since coin counts must be non-negative,</p>

\[x \ge 0 \;\Rightarrow\; -182 + 5t \ge 0 \;\Rightarrow\; t \ge 36.4,\]

\[y \ge 0 \;\Rightarrow\; 91 - 2t \ge 0 \;\Rightarrow\; t \le 45.5.\]

<p>Hence,</p>

\[37 \le t \le 45.\]

<h4 id="maximum-and-minimum-number-of-coins"><strong>Maximum and Minimum Number of Coins</strong></h4>

<p>The total number of coins is $x + y = (-182 + 5t) + (91 - 2t) = -91 + 3t.$</p>

<p>Therefore, the total number of coins is <strong>increasing in $t$</strong>.</p>

<p>It follows that:</p>

<ul>
  <li>the <strong>minimum</strong> number of coins occurs at the smallest admissible value of $t$,</li>
  <li>the <strong>maximum</strong> number of coins occurs at the largest admissible value of $t$.</li>
</ul>

<p>At $t = 37$ (minimum $t$),</p>

\[x = 3, \quad y = 17, \quad x + y = 20.\]

<p>At $t = 45$ (maximum $t$),</p>

\[x = 43, \quad y = 1, \quad x + y = 44.\]

<h4 id="equal-numbers-of-coins"><strong>Equal Numbers of Coins</strong></h4>

<p>Let $x = y$. Then, $-182 + 5t = 91 - 2t$ which gives $7t = 273 \;\Rightarrow\; t = 39.$</p>

<p>Substituting $t = 39$, we have $x = y = 13.$</p>

<p>Thus, the answer is <strong>yes</strong>.</p>

<h4 id="final-answer"><strong>Final Answer</strong></h4>

<ul>
  <li><strong>Maximum number of coins:</strong> $\boxed{44}$</li>
  <li><strong>Minimum number of coins:</strong> $\boxed{20}$</li>
  <li><strong>Equal numbers of coins possible:</strong> $\boxed{\text{Yes}}$</li>
</ul>

<hr />

<blockquote>
  <p><strong>Note:</strong> The procedure of checking $\gcd(a,b)\mid c$, performing back substitution, and parameterising all solutions is the standard approach to linear Diophantine equations.
This mirrors feasibility checks in integer optimization, cryptography, and algorithmic design.</p>
</blockquote>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Mathematics" /><category term="Number Theory" /><summary type="html"><![CDATA[Integer Constraints via Diophantine Equations]]></summary></entry><entry><title type="html">Learning Math Until I Break Into AI/Quant (Part 2)</title><link href="https://www.thewokecoder.io/learning-math-until-ai-quant-role-2/" rel="alternate" type="text/html" title="Learning Math Until I Break Into AI/Quant (Part 2)" /><published>2026-01-31T00:00:00+00:00</published><updated>2026-01-31T00:00:00+00:00</updated><id>https://www.thewokecoder.io/learning-math-until-ai-quant-role-2</id><content type="html" xml:base="https://www.thewokecoder.io/learning-math-until-ai-quant-role-2/"><![CDATA[<h2 id="applications-of-cauchy-schwarz-means-and-averages">Applications of Cauchy-Schwarz: Means and Averages</h2>

<p>In this article, we continue exploring the power of the <strong>Cauchy-Schwarz Inequality</strong>. While Part 1 focused on basic linear bounds, Part 2 dives into how this inequality governs the relationship between different types of averages.</p>

<h3 id="problems">Problems</h3>

<h4 id="1-bounds-for-reciprocal-sums"><strong>1. Bounds for Reciprocal Sums</strong></h4>
<p>Suppose $a, b, c, d$ are positive numbers.<br />
(a) Prove that $(a + b + c + d)\left(\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}\right) \geq 16$.<br />
(b) For which positive numbers $a, b, c, d$ is the inequality above an equality?</p>

<h4 id="2-square-of-average-vs-average-of-squares"><strong>2. Square of Average vs. Average of Squares</strong></h4>
<p>Show that if $a_1, \dots, a_n \in \mathbb{R}$, then the square of the average of $a_1, \dots, a_n$ is less than or equal to the average of $a_1^2, \dots, a_n^2$:
\(\left( \frac{a_1 + \dots + a_n}{n} \right)^2 \leq \frac{a_1^2 + \dots + a_n^2}{n}\)</p>

<hr />

<h3 id="solutions">Solutions</h3>

<h4 id="1-bounds-for-reciprocal-sums-1"><strong>1. Bounds for Reciprocal Sums</strong></h4>

<p><strong>Part (a)</strong></p>

<p>Define two vectors $x$ and $y$ such that their inner product leads to a constant value.</p>

<p>Let \(x = (\sqrt{a}, \sqrt{b}, \sqrt{c}, \sqrt{d}), \quad y = \left(\frac{1}{\sqrt{a}}, \frac{1}{\sqrt{b}}, \frac{1}{\sqrt{c}}, \frac{1}{\sqrt{d}}\right)\).</p>

<p>Using the Cauchy-Schwarz inequality
\(|\langle x, y \rangle|^2 \leq \|x\|^2 \|y\|^2\),</p>

\[\begin{aligned}
|\langle x, y \rangle|^2 &amp;\leq \|x\|^2 \|y\|^2 \\

\left|
\left(\sqrt{a}\,\frac{1}{\sqrt{a}}\right)
+
\left(\sqrt{b}\,\frac{1}{\sqrt{b}}\right)
+
\left(\sqrt{c}\,\frac{1}{\sqrt{c}}\right)
+
\left(\sqrt{d}\,\frac{1}{\sqrt{d}}\right)
\right|^{2} &amp;\leq (a + b + c + d)(\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}) \\

(1+1+1+1)^{2} &amp;\leq (a + b + c + d)\left(\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}\right) \\

16 &amp;\leq (a + b + c + d)\left(\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}\right) \\

\end{aligned}\]

<p><strong>Part (b)</strong></p>

<p>If $a = b = c = d = 1$, then \((1 + 1 + 1 + 1)(1 + 1 + 1 + 1) = 16\).<br />
More generally, whenever $x$ and $y$ are linearly dependent, which occurs when <strong>$a = b = c = d$</strong>.<br />
Let $a = b = c = d = z$ for some positive $z \in \mathbb{R}$.<br />
Then \((z + z + z + z)(\frac{1}{z} + \frac{1}{z} + \frac{1}{z} + \frac{1}{z}) = (4z)(\frac{4}{z}) = 16\).</p>

<h4 id="2-square-of-average-vs-average-of-squares-1"><strong>2. Square of Average vs. Average of Squares</strong></h4>

<p>This is a fundamental result in statistics, proving that the second moment is always greater than or equal to the square of the first moment, that is $\text{Var}(X) = E[X^2] - (E[X])^2 \geq 0$.</p>

<p>Let $u = (a_1, a_2, \dots, a_n)$ and let $v = (1, 1, \dots, 1) \in \mathbb{R}^n$.</p>

<p>Applying Cauchy-Schwarz,</p>

\[\begin{aligned}
|\langle x, y \rangle|^2 &amp;\leq \|x\|^2 \|y\|^2 \\
(a_1(1) + a_2(1) + \dots + a_n(1))^2 &amp;\leq (a_1^2 + a_2^2 + \dots + a_n^2)(1^2 + 1^2 + \dots + 1^2) \\
(a_1 + a_2 + \dots + a_n)^2 &amp;\leq (a_1^2 + a_2^2 + \dots + a_n^2)(n) \\
\end{aligned}\]

<p>Dividing both sides by $n^2$,</p>

\[\begin{aligned}
\frac{(a_1 + a_2 + \dots + a_n)^2}{n^2} &amp;\leq \frac{n(a_1^2 + a_2^2 + \dots + a_n^2)}{n^2} \\
\left( \frac{a_1 + \dots + a_n}{n} \right)^2 &amp;\leq \frac{a_1^2 + \dots + a_n^2}{n}
\end{aligned}\]

<hr />

<blockquote>
  <p><strong>Note:</strong> This result shows that the square of the sample mean is always bounded by the mean of the squares. In portfolio theory, this relationship is a precursor to understanding how volatility reduces the geometric growth rate of a fund.</p>
</blockquote>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Mathematics" /><category term="Linear Algebra" /><summary type="html"><![CDATA[Applications of Cauchy-Schwarz: Means and Averages]]></summary></entry><entry><title type="html">Learning Math Until I Break Into AI/Quant (Part 1)</title><link href="https://www.thewokecoder.io/learning-math-until-ai-quant-role/" rel="alternate" type="text/html" title="Learning Math Until I Break Into AI/Quant (Part 1)" /><published>2026-01-24T00:00:00+00:00</published><updated>2026-01-24T00:00:00+00:00</updated><id>https://www.thewokecoder.io/learning-math-until-ai-quant-role</id><content type="html" xml:base="https://www.thewokecoder.io/learning-math-until-ai-quant-role/"><![CDATA[<h2 id="the-cauchy-schwarz-inequality">The Cauchy-Schwarz Inequality</h2>

<p>To better understand inner product spaces, several applications of the Cauchy–Schwarz inequality have been worked through. The following is a list of problems.</p>

<h3 id="problem">Problem</h3>

<h4 id="1-bounds-for-linear-expressions"><strong>1. Bounds for Linear Expressions</strong></h4>

<p>Suppose $a, b, c, x, y \in \mathbb{R}$ and $a^2 + b^2 + c^2 + x^2 + y^2 \leq 1$.<br />
Prove that $a + b + c + 4x + 9y \leq 10$.</p>

<h4 id="2-equality-case-of-cauchyschwarz"><strong>2. Equality Case of Cauchy–Schwarz</strong></h4>

<p>Suppose $u, v \in V$ and $|u| = |v| = 1$ and $\langle u, v \rangle = 1$.<br />
Prove that $u = v$.</p>

<hr />

<h3 id="solution">Solution</h3>
<h4 id="1-bounds-for-linear-expressions-1"><strong>1. Bounds for Linear Expressions</strong></h4>

<p>To prove this, we leverage the <strong>Cauchy-Schwarz Inequality</strong> in the inner product space $\mathbb{R}^5$. The inequality states that for any vectors $u, v \in V$, we have</p>

\[|\langle u, v \rangle| \leq \|u\| \|v\|\]

<p>In this case, we define the inner product as the <strong>Euclidean inner product</strong> (or standard dot product) on $\mathbb{R}^5$. We represent the linear expression as an inner product of two vectors.</p>

<p>Let $u = (a, b, c, x, y)$ and $v = (1, 1, 1, 4, 9)$.</p>

<p>The inner product $\langle u, v \rangle$ corresponds to the expression we want to bound:</p>

\[\begin{aligned}
\langle u, v \rangle &amp;= a(1) + b(1) + c(1) + x(4) + y(9) \\
&amp;= a + b + c + 4x + 9y
\end{aligned}\]

<p>Applying the inequality 
\(|\langle u, v \rangle| \leq \|u\| \|v\|\),</p>

\[|a + b + c + 4x + 9y| \leq \sqrt{a^2 + b^2 + c^2 + x^2 + y^2} \sqrt{1^2 + 1^2 + 1^2 + 4^2 + 9^2}\]

<p>From the problem constraints, the norm of $u$ is bounded,</p>

\[\|u\| = \sqrt{a^2 + b^2 + c^2 + x^2 + y^2} \leq \sqrt{1} = 1\]

<p>Calculating the norm of $v$, we get,</p>

\[\|v\| = \sqrt{1 + 1 + 1 + 16 + 81} = \sqrt{100} = 10\]

<p>Plugging these values back into the inequality, we get</p>

\[\begin{aligned}
a + b + c + 4x + 9y &amp;\leq (1)(10) \\
a + b + c + 4x + 9y &amp;\leq 10
\end{aligned}\]

<blockquote>
  <p><strong>Note:</strong> Equality happens when $u$ is a scalar multiple of $v$ (i.e., they are linearly dependent).</p>
</blockquote>

<h4 id="2-equality-case-of-cauchyschwarz-1"><strong>2. Equality Case of Cauchy–Schwarz</strong></h4>

<p>Recall the <strong>Cauchy–Schwarz inequality</strong> in an inner product space,</p>

\[|\langle u, v \rangle| \leq \|u\| \|v\|.\]

<p>Substituting the given conditions, 
\(\langle u, v \rangle = 1\) and 
\(\|u\| = \|v\| = (1)\), we get</p>

\[\langle u, v \rangle = |u\|\|v\|\]

<p>By the equality condition for the Cauchy–Schwarz inequality, the vectors $u$ and $v$ are linearly dependent. Hence, there exists a scalar $\lambda$ such that
\(u = \lambda v.\)</p>

\[\begin{aligned}
\langle u, v \rangle &amp;= \langle \lambda v, v \rangle \\
&amp;= \lambda \langle v, v \rangle \\
&amp;= \lambda \|v\|^{2} \\
\end{aligned}\]

<p>Hence, $\lambda = 1$. Therefore, $u = v$.</p>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Mathematics" /><category term="Linear Algebra" /><summary type="html"><![CDATA[The Cauchy-Schwarz Inequality]]></summary></entry><entry><title type="html">Mathematics Will Eat The World</title><link href="https://www.thewokecoder.io/mathematics-will-eat-the-world/" rel="alternate" type="text/html" title="Mathematics Will Eat The World" /><published>2024-11-11T00:00:00+00:00</published><updated>2024-11-11T00:00:00+00:00</updated><id>https://www.thewokecoder.io/mathematics-will-eat-the-world</id><content type="html" xml:base="https://www.thewokecoder.io/mathematics-will-eat-the-world/"><![CDATA[<p>The phrase “mathematics will eat the world” is more than just a provocative metaphor; it captures a profound truth about the way math permeates every corner of our lives, transforming everything from finance and technology to art and medicine. Far from being confined to chalkboards and classrooms, mathematics is a force that drives innovation, shapes decision-making, and, in many ways, defines the world we inhabit.</p>

<p>In this article, we’ll explore why mathematics is increasingly seen as the “universal language” of the 21st century, how it impacts our day-to-day experiences, and what this might mean for the future.</p>

<hr />

<h3 id="the-rise-of-data-and-the-power-of-mathematics">The Rise of Data and the Power of Mathematics</h3>

<p>In a world that generates over 2.5 quintillion bytes of data each day, our ability to make sense of this data hinges on mathematics. Statistics, calculus, and linear algebra are at the core of the algorithms and models used to sift through massive amounts of information, extracting patterns and insights that help drive modern economies. Mathematical frameworks fuel everything from search engines to financial markets, providing businesses and governments with the insights needed to make data-driven decisions.</p>

<p>In finance, for example, algorithms trained on vast amounts of historical data guide the decisions of traders and investors. Quantitative analysts, or “quants,” use complex mathematical models to predict price movements, manage risk, and maximize returns. Beyond Wall Street, mathematicians play a critical role in public policy, healthcare, and environmental sciences, where predictive models help governments prepare for future challenges, from pandemics to climate change.</p>

<h3 id="mathematics-in-machine-learning-and-ai">Mathematics in Machine Learning and AI</h3>

<p>Machine learning and artificial intelligence (AI) are transforming industries, and they are, at their core, mathematical in nature. These technologies rely on sophisticated models and algorithms that “learn” from data. Linear algebra, probability theory, and calculus are the cornerstones of machine learning algorithms, which means that advances in AI are, essentially, advances in mathematics.</p>

<p>Consider how natural language processing (NLP), powered by mathematical models, enables computers to understand and generate human language. These technologies allow us to interact with AI systems like Siri, Alexa, and ChatGPT, which, in turn, are reshaping how we communicate, learn, and even work. AI systems are increasingly integrated into our daily lives, making mathematical literacy more relevant than ever before.</p>

<h3 id="cryptography-the-mathematics-of-security-and-trust">Cryptography: The Mathematics of Security and Trust</h3>

<p>With so much of our lives online, securing digital transactions and personal data has become a top priority. Mathematics is essential in this realm, particularly in cryptography—the science of encoding and decoding information to ensure privacy and security. Modern encryption protocols rely on number theory, prime numbers, and complex algorithms to protect sensitive information.</p>

<p>The rise of blockchain technology, which powers cryptocurrencies like Bitcoin, is another example of how mathematics underpins the digital world. Blockchain’s decentralized and transparent nature is made possible by cryptographic principles, allowing for secure and anonymous transactions without the need for a central authority. As blockchain technology expands into areas like supply chain management and digital identity, it’s clear that mathematics is reshaping not only finance but also how we establish trust in an increasingly digital society.</p>

<h3 id="mathematics-in-art-and-creativity">Mathematics in Art and Creativity</h3>

<p>Art and mathematics may seem worlds apart, but they share a deep and complex relationship. Patterns, symmetry, and fractals—found in nature and governed by mathematical principles—are often sources of inspiration for artists. The Golden Ratio, a mathematical ratio found in both nature and art, is considered a symbol of aesthetic harmony. Generative art, which uses algorithms to create visual designs, blends art with mathematics in a way that pushes the boundaries of human creativity.</p>

<p>Artists and designers are also increasingly leveraging AI-powered tools to create complex visuals and interactive experiences that would be impossible to produce by hand. These tools rely on mathematical principles to generate, manipulate, and analyze visual data, demonstrating that math can be an enabler of artistic expression, not just scientific discovery.</p>

<h3 id="mathematical-models-in-medicine-and-biology">Mathematical Models in Medicine and Biology</h3>

<p>In medicine, mathematics plays a crucial role in understanding the human body and diagnosing diseases. Epidemiologists use mathematical models to track the spread of diseases, which became particularly evident during the COVID-19 pandemic. Predictive models allowed public health officials to make data-driven decisions that saved lives.</p>

<p>Mathematics also shapes advances in genetics, where statistical models are used to analyze DNA sequences, enabling breakthroughs in personalized medicine and genetic engineering. Bioinformatics, an interdisciplinary field combining biology, computer science, and mathematics, is unlocking the secrets of our genetic code and paving the way for treatments tailored to individuals’ unique genetic profiles.</p>

<h3 id="education-and-the-democratisation-of-mathematics">Education and the Democratisation of Mathematics</h3>

<p>As mathematics continues to “eat the world,” there’s an urgent need to make mathematical education more accessible and relevant. The demand for data literacy and mathematical fluency is growing, with skills like coding, statistical analysis, and computational thinking becoming fundamental in many careers. Educational initiatives worldwide are adapting to meet this demand, introducing students to practical applications of mathematics early on to equip them for a data-driven world.</p>

<p>The rise of online education and open-source resources has democratized access to mathematical knowledge, allowing more people than ever to learn and apply math. By making these resources available to everyone, we are fostering a generation that can harness the power of mathematics to address complex global challenges.</p>

<h3 id="the-future-mathematics-as-the-foundation-of-innovation">The Future: Mathematics as the Foundation of Innovation</h3>

<p>As we look to the future, it’s clear that mathematics will play an even more significant role in shaping society. Quantum computing, for instance, relies on entirely new mathematical principles and has the potential to revolutionize fields that require immense computational power. From materials science to pharmaceuticals, quantum computers could solve problems in seconds that would take traditional computers thousands of years.</p>

<p>Mathematics will also be central to addressing the ethical challenges posed by AI and automation. As algorithms make more decisions on our behalf, we’ll need to understand their underlying mathematical models to ensure transparency and fairness. A deep understanding of these models will be crucial to mitigate biases, ensure accountability, and safeguard human rights.</p>

<hr />

<h3 id="conclusion-mathematics-as-the-engine-of-human-progress">Conclusion: Mathematics as the Engine of Human Progress</h3>

<p>“Mathematics will eat the world” may sound like a futuristic slogan, but it reflects the reality that math underpins nearly every aspect of modern life. As we continue to generate more data, solve more complex problems, and push the boundaries of technology, mathematics will remain at the heart of human progress. Whether it’s in finance, healthcare, AI, or the arts, mathematics enables us to unlock new frontiers and navigate the complexities of an interconnected world.</p>

<p>In embracing mathematics, we are not only embracing a discipline but a way of thinking that empowers us to understand, predict, and shape the world around us. As mathematics continues to evolve, so too will its role as an essential, transformative force in our lives.</p>

<hr />
<h3 id="references">References</h3>
<p>OpenAI. (2024). Mathematics Will Eat the World: How Numbers, Patterns, and Algorithms Are Reshaping Reality. ChatGPT.</p>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Mathematics" /><summary type="html"><![CDATA[The phrase “mathematics will eat the world” is more than just a provocative metaphor; it captures a profound truth about the way math permeates every corner of our lives, transforming everything from finance and technology to art and medicine. Far from being confined to chalkboards and classrooms, mathematics is a force that drives innovation, shapes decision-making, and, in many ways, defines the world we inhabit.]]></summary></entry><entry><title type="html">My Reading List</title><link href="https://www.thewokecoder.io/my-software-engineering-reading-list/" rel="alternate" type="text/html" title="My Reading List" /><published>2024-06-11T00:00:00+00:00</published><updated>2024-06-11T00:00:00+00:00</updated><id>https://www.thewokecoder.io/my-software-engineering-reading-list</id><content type="html" xml:base="https://www.thewokecoder.io/my-software-engineering-reading-list/"><![CDATA[<p>This is a collection of software engineering and productivity books that I have read and would highly recommend to
others.</p>

<h2 id="programming">Programming</h2>

<ul>
  <li>
    <p><a href="https://amzn.to/4b0NA2u" target="_blank">Functional Programming in Java</a> by Venkat Subramaniam showcases how
functional programming improves code quality, readability, and performance using Java 8 features like lambdas and
streams, promoting immutability and easier concurrency.</p>
  </li>
  <li>
    <p><a href="https://amzn.to/4chU0uW" target="_blank">Practical Object-Oriented Design</a> by Sandi Metz teaches how to write
maintainable and flexible code using powerful OO design techniques. With clear Ruby examples, it helps developers
create adaptable applications and improve existing ones. Key topics include class responsibilities, object separation,
flexible interfaces, duck typing, inheritance, and composition,</p>
  </li>
  <li>
    <p><a href="https://amzn.to/3Xg7raF" target="_blank">Structure and Interpretation of Computer Programs</a> is a classic book that
has the potential to alter your fundamental beliefs about computers and programming. While not everyone will have this
experience, some might dislike the book or struggle to get past the first few pages, the potential rewards make it
worth trying.</p>
  </li>
</ul>

<h2 id="productivity">Productivity</h2>

<ul>
  <li><a href="https://amzn.to/4cbW7Au" target="_blank">Atomic Habits</a> by James Clear.</li>
</ul>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Productivity" /><category term="Software Engineering" /><summary type="html"><![CDATA[This is a collection of software engineering and productivity books that I have read and would highly recommend to others.]]></summary></entry><entry><title type="html">A Brief Introduction To Domain-Driven Design</title><link href="https://www.thewokecoder.io/brief-intro-domain-driven-design/" rel="alternate" type="text/html" title="A Brief Introduction To Domain-Driven Design" /><published>2024-04-28T00:00:00+00:00</published><updated>2024-04-28T00:00:00+00:00</updated><id>https://www.thewokecoder.io/brief-intro-domain-driven-design</id><content type="html" xml:base="https://www.thewokecoder.io/brief-intro-domain-driven-design/"><![CDATA[<h2 id="introduction">Introduction</h2>
<p>To develop high-quality software, you have to know what that software is about. You cannot create a banking software system unless you have a good understanding of what banking is all about.</p>

<p>It’s not the software architect or the agile coach who knows about banking.</p>

<p>The banking system is well understood by the people inside, by the bankers. They know all the details, all the catches, all the possible issues and all the rules.</p>

<p>This is where we should start: the domain.</p>

<h2 id="building-domain-knowledge">Building Domain Knowledge</h2>
<p>Domain-Driven Design is to make software a reflection of the domain. Software needs to incorporate the core concepts and elements of the domain and accurately represent the relationships between them. The software has to model the domain.</p>

<p>If you’re working in an organisation with any kind of process, you likely have requirements expressed as a user story, task, or use case. These requirements or specifications you receive are usually incomplete.</p>

<p>Typically requirements are somewhat murky or expressed at a high level of understanding. In the course of designing and implementing a solution, it is beneficial when developers have access to the people who bring some expertise in the intended domain.</p>

<p>This is exactly the point of user stories, which are typically expressed according to a template like this: as a [role], I want [feature] so that [benefit].</p>

<hr />

<p>Let’s take one example from the domain of insurance policy management: As an underwriter, I want approval control over a policy so that I can write safe exposures and reject risky ones.</p>

<p>Software developers are unlikely to fully understand the requirements that will go into delivering the supporting software based on this abstract description.</p>

<p>User stories, properly done, are an invitation to have a conversation with their author — the user. This means when you go to work on the approve/deny policy feature, you should ideally have access to an underwriter. Underwriters are domain experts who determine whether a certain category of exposure is safe for a carrier to cover.</p>

<h2 id="ubiquitous-language">Ubiquitous Language</h2>
<p>When discussing the feature with your underwriter or whoever your project domain expert might be, pay close attention to the terminology they use. These domain experts use company- or industry-standard terminology. In DDD, this vocabulary is called the Ubiquitous Language. As developers, it is important to understand this vocabulary and use it when communicating with domain experts and implementing it in your code.</p>

<p>The Ubiquitous Language is a fundamental pattern of DDD. Although it may seem like common sense, consciously using the business language in code is essential for developers. This helps bridge the gap between business terminology and technical jargon, keeping the focus on <strong>delivering business value</strong>.</p>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Software Engineering" /><summary type="html"><![CDATA[Introduction To develop high-quality software, you have to know what that software is about. You cannot create a banking software system unless you have a good understanding of what banking is all about.]]></summary></entry><entry><title type="html">The Heydays Are Over</title><link href="https://www.thewokecoder.io/the-heydays-are-over/" rel="alternate" type="text/html" title="The Heydays Are Over" /><published>2023-12-25T00:00:00+00:00</published><updated>2023-12-25T00:00:00+00:00</updated><id>https://www.thewokecoder.io/the-heydays-are-over</id><content type="html" xml:base="https://www.thewokecoder.io/the-heydays-are-over/"><![CDATA[<p><img src="/assets/images/the-heydays-are-over/code-zombie.png" alt="Code Zombie" width="50%" style="display:block; margin-left:auto; margin-right:auto" /></p>

<p>For the most part of their career in the software industry, programmers worked with their heads in the sand.</p>

<p>Success in the industry requires presentation skills and training others.</p>

<p>The value of improved programming skills is overlooked, and passion is the only reward for building.</p>

<p>The incentive structure favoured self-promoters, and the industry’s culture drove talent away from meaningful work.</p>

<p>The average programming career span decreased rapidly, with fears of AI making programmers obsolete.</p>

<p>The best programmers left, and products suffered due to below-average talent.</p>

<p>The industry’s future remains yet uncertain.</p>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Software Engineering" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">6 Realities Of Software Engineering</title><link href="https://www.thewokecoder.io/realities-of-software-engineering/" rel="alternate" type="text/html" title="6 Realities Of Software Engineering" /><published>2023-07-20T00:00:00+00:00</published><updated>2023-07-20T00:00:00+00:00</updated><id>https://www.thewokecoder.io/realities-of-software-engineering</id><content type="html" xml:base="https://www.thewokecoder.io/realities-of-software-engineering/"><![CDATA[<p><img src="/assets/images/realities-of-software-engineering/code-matrix.png" alt="Code in The Matrix" width="80%" style="display:block; margin-left:auto; margin-right:auto" /></p>

<ol>
  <li>
    <p>Your perspective is insignificant if senior engineers disregard it. Your years of experience are what define you. Gaining their trust is crucial to obtaining challenging projects. However, trust must be earned.</p>
  </li>
  <li>
    <p>Software engineers are the most vulnerable when a company fails to generate revenue or over-hires. In a capitalist society, hard work does not always guarantee success. Therefore, it’s critical to be prudent and push back on tasks that aren’t necessary.</p>
  </li>
  <li>
    <p>Focusing on minor details can be counterproductive, delaying decision-making and progress. You cannot please everyone, so it’s best to avoid unnecessary conflicts.</p>
  </li>
  <li>
    <p>Software engineers are often tasked with mundane tasks such as CRUD operations and pipeline maintenance, leaving little room for innovation. Therefore, they often work on side projects to keep their passion alive.</p>
  </li>
  <li>
    <p>Businesses generally don’t care about low-level software engineering details; they just want results. Quality is often overlooked in favour of quantity, with developers being measured by how much they deliver.</p>
  </li>
  <li>
    <p>Operational work is tedious, and no one enjoys it. It exists only because of compromises made during the launch and disregard for cross-cutting concerns.</p>
  </li>
</ol>]]></content><author><name>The Woke Coder</name><email>thewokecoder@gmail.com</email></author><category term="Software Engineering" /><summary type="html"><![CDATA[]]></summary></entry></feed>