<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Alperen Keles</title>
    <link rel="self" type="application/atom+xml" href="https://alperenkeles.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://alperenkeles.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-13T00:00:00+00:00</updated>
    <id>https://alperenkeles.com/atom.xml</id>
    <entry xml:lang="en">
        <title>On The Simplicity of Humanness</title>
        <published>2026-04-13T00:00:00+00:00</published>
        <updated>2026-04-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/on-the-simplicity-of-humanness/"/>
        <id>https://alperenkeles.com/posts/on-the-simplicity-of-humanness/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/on-the-simplicity-of-humanness/">&lt;p&gt;Just yesterday, Bryan Cantrill published a short piece that touches something that I
think most of us fundamentally understand, but don&#x27;t have the words. The article is very
short, titled
&lt;a href=&quot;https:&#x2F;&#x2F;bcantrill.dtrace.org&#x2F;2026&#x2F;04&#x2F;12&#x2F;the-peril-of-laziness-lost&#x2F;&quot;&gt;&amp;quot;The peril of laziness lost&amp;quot;&lt;&#x2F;a&gt;.
I recommend you all read it. I plucked out one sentence for you:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The problem is that LLMs inherently &lt;strong&gt;lack the virtue of laziness.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The essence is, our laziness is the reason we engineer simple systems. LLMs lack this
laziness, which results in the fact that they don&#x27;t have the incentive or the process to
simplify, given that we don&#x27;t externally create such mechanisms. That is why Anthropic
had to introduce a separate command (&lt;code&gt;&#x2F;simplify&lt;&#x2F;code&gt;) to enable such post hoc simplification
process.&lt;&#x2F;p&gt;
&lt;p&gt;The thing that touches me the most about this idea is that I have been frequently amazed
by the simplicity of human-engineered artifacts. All the algorithms I&#x27;ve ever read
seemed simple, perhaps &lt;em&gt;too simple&lt;&#x2F;em&gt; in hindsight. All the codebases, even the gigantic
ones, can be broken into simpler modules, sections, abstractions, hierarchies that allow
us to understand the system. A great deal of modern advances in computing are due to
simplification, malloc made memory allocation simpler, structured programming made
control flow simpler, Rust made memory management simpler, typically via removal of our
mental burdens.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s not just computer science, all human-engineered systems are &lt;em&gt;simple&lt;&#x2F;em&gt;, for a very
specific meaning of the word; as opposed to emerging structures such as social
relationships or physical world that just &lt;em&gt;is&lt;&#x2F;em&gt;, or evolution that just &lt;em&gt;happens&lt;&#x2F;em&gt;. One
may object that a plane, or Linux kernel, or the lithography machine of ASML is very
complex, and they would be right. But all of those systems can be broken into smaller
modules, subsystems, abstractions that allow for understanding them. I can say this
confidently without having a concrete idea of what those systems are and how they work,
because I believe in a fundamental principle of engineering, &lt;strong&gt;we must be able to
maintain the systems we build&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;When something goes wrong in a system, we must be able to locate where it is, understand
the root cause of the problem, make changes in a way that are isolated without
regressing on other parts of the system, and validate that the change correctly fixed
our problem. Nature has the luxury to simply &lt;em&gt;not care&lt;&#x2F;em&gt;, things break, systems fail,
earthquakes happen, it&#x27;s all part of the plan.&lt;&#x2F;p&gt;
&lt;p&gt;There are escape hatches to this simplicity, complexities that we do not need to
understand, when there&#x27;s an asymmetric relationship between the process and the
verification of the result. This has been long known and applied in the field of
automated theorem proving, the
&lt;a href=&quot;https:&#x2F;&#x2F;lawrencecpaulson.github.io&#x2F;2022&#x2F;01&#x2F;05&#x2F;LCF.html&quot;&gt;de Bruijn Criterion&lt;&#x2F;a&gt; separates
the proof object, the proof checker, and the proof producer from each other. We must
only understand and trust the proof checker, the proof objects themselves are irrelevant
for the purposes of understanding the system. Although the generated proofs are
irrelevant, I argue that the same engineering principles still apply to the proof
producing programs, just not their results. A SAT solver possesses &lt;em&gt;humanness&lt;&#x2F;em&gt;, but the
proofs it produces will not. A genetic algorithm possesses the humanness, but its
artifact, such as AlphaZero, is akin to a biological organism that we must try to
understand and model. We still care about understanding such results, because they allow
us to improve on the engineering artifacts that produce them, as well as the outputs
themselves, but we can &lt;strong&gt;bear&lt;&#x2F;strong&gt; not to.&lt;&#x2F;p&gt;
&lt;p&gt;LLMs do not possess the humanness right now, they probably will never do, just as
AlphaZero doesn&#x27;t. This doesn&#x27;t make their outputs useless, but rather a new challenge
we must overcome. In highly
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiable-abstractions&#x2F;&quot;&gt;verifiable domains&lt;&#x2F;a&gt;, such as
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;&quot;&gt;translation&lt;&#x2F;a&gt; or
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;self-optimizing-system&#x2F;&quot;&gt;optimization&lt;&#x2F;a&gt;, we will continue
to see them in high, sometimes autonomous capacities. In other domains, we will find a
way to push &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;their limits&lt;&#x2F;a&gt;.
We will build more and more tools for analyzing and understanding programs that we
previously did not need to, not because we couldn&#x27;t, but because such understanding now
gives us a great deal of
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;specifiability-is-the-leverage&#x2F;&quot;&gt;leverage&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I didn&#x27;t really know what I wanted to say when starting to write this one, I do that
sometimes. Now that I&#x27;m concluding, I am searching for a conclusion, here it is; we are
driven to understand the systems we build and maintain, and we find ways to do so. We
were able to analyze the world, figure out the rules of the universe, model the human
genome to its molecules that we didn&#x27;t even know existed. I don&#x27;t think that was
primarily due to laziness, but rather the drive to build better, larger, greater
systems; and I think we&#x27;ll find a way to mold the LLM outputs into forms that we can
understand too.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks Bryan for lighting a spark that led me to write this, I hope you have enjoyed
reading this as much as I did writing.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>What is a property?</title>
        <published>2026-04-05T00:00:00+00:00</published>
        <updated>2026-04-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/what-is-a-property/"/>
        <id>https://alperenkeles.com/posts/what-is-a-property/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/what-is-a-property/">&lt;p&gt;When talking about Property-Based Testing, we typically talk in very abstract terms.
There are properties, which define the correctness; there are generators, which define
the domain; the PBT framework gives us APIs for writing property-based tests that
combine the properties with the generators to find bugs. It&#x27;s all very nice and simple.&lt;&#x2F;p&gt;
&lt;p&gt;A (surprisingly) large chunk of my time goes into exploring different PBT frameworks,
many times porting an existing PBT workload to use a new one instead of the other. This
requires me to build abstractions on what a PBT framework is, which should have been
very easy if the simple definition I gave in the first paragraph captured what PBT is.
Unfortunately it doesn&#x27;t, so let&#x27;s see what the issue is. A property is a universally
quantified computation that must hold for all possible inputs. The simplest model of a
property in a programming language is a function that returns a boolean, such as the one
below:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;property&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-generic-type z-haskell&quot;&gt;a&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For instance, &lt;code&gt;\l -&amp;gt; reverse (reverse l) == l&lt;&#x2F;code&gt; is a property, it asserts double
reversion leads to the original list. This gets slightly complicated with
&lt;em&gt;preconditions&lt;&#x2F;em&gt;, which are rules that state if an input is valid or not. So we can write
things like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;data&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;execute&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Query&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;query&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Query&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; [[&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;(==&amp;gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-infix z-haskell&quot;&gt;(==&amp;gt;)&lt;&#x2F;span&gt; precondition property &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;if&lt;&#x2F;span&gt; precondition &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;then&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; property &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Nothing&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;prop_insert_select&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;] &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;prop_insert_select db table values &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; insert &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Insert&lt;&#x2F;span&gt; table values
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        select &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Select&lt;&#x2F;span&gt; table &lt;span class=&quot;z-string z-quoted z-double z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*&lt;span class=&quot;z-punctuation z-definition z-string z-end z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;in&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        hasTable db table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;==&amp;gt;&lt;&#x2F;span&gt; (values &lt;span class=&quot;z-keyword z-operator z-function z-infix z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;elem&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; query (execute db insert) select)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Where &lt;code&gt;==&amp;gt;&lt;&#x2F;code&gt; is the implication operator, which states that if the precondition (the
left-hand side) is not satisfied, then the property cannot be tested. In our case, the
precondition is &lt;code&gt;hasTable db table&lt;&#x2F;code&gt;, which checks if the database has the specified
table. If it doesn&#x27;t, then we don&#x27;t care about the result, we just discard it. If the
database has the table, then we execute the insert and check if the select query returns
the values we inserted.&lt;&#x2F;p&gt;
&lt;p&gt;Now that we have a property at hand, we need some random generators for it. We can write
&lt;code&gt;Arbitrary&lt;&#x2F;code&gt; instances for all the input types and let QuickCheck handle the rest.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;data&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Value&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Number&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;String&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;String&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-declaration z-instance z-haskell&quot;&gt;&lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;instance&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Arbitrary&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;where&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; oneof [&lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Number&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;$&amp;gt;&lt;&#x2F;span&gt; arbitrary&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;String&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;$&amp;gt;&lt;&#x2F;span&gt; arbitrary&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-declaration z-instance z-haskell&quot;&gt;&lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;instance&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Arbitrary&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;where&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Well, not really. When we write these instances, what do you think QuickCheck does? It
generates a random database, a random string, a list of random &lt;code&gt;Value&lt;&#x2F;code&gt;s, and then runs
the &lt;code&gt;prop_insert_select&lt;&#x2F;code&gt; function. In what percent of cases do you think a random string
is a valid table name that exists in the database?&lt;&#x2F;p&gt;
&lt;p&gt;What we want is a dependent generator, where some values can depend on the others:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Randomly generate a table
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;genTable&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Table&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;genTable &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;tableName&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Table&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;tableName &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;genValuesFor&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;genValuesFor db table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;...&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;, &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt;, [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;])
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;gen &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Decide how many tables we want to create
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    numTables &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; choose (&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;10&lt;&#x2F;span&gt;)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Randomly generate the tables
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    tables &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; vectorOf numTables genTable
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Create an empty database
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; db0 &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; emptyDatabase
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Populate the database with the generated tables
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; db &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; foldl createTable db0 tables
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Now we can generate a valid table name and values
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; tableNames &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; map tableName tables
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; elements tableNames
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    values &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; genValuesFor db table
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    return (db&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; table&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; values)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now we don&#x27;t need to worry about the precondition failure because the inputs are valid
by construction. The table is selected from the already existing list of tables in the
database, so it will never fail. How do we run the tests? Here&#x27;s a conceptual API for
it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;quickCheck&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-generic-type z-haskell&quot;&gt;t&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; (&lt;span class=&quot;z-variable z-other z-generic-type z-haskell&quot;&gt;t&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;) &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-generic-type z-haskell&quot;&gt;t&lt;&#x2F;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;quickCheck gen property n &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;if&lt;&#x2F;span&gt; n &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;then&lt;&#x2F;span&gt; pure &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Nothing&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Generate a random input using the provided generator
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        input &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; gen
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Check the property with the generated input
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;case&lt;&#x2F;span&gt; property input &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;of&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Test passed, generate another input
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;True&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; quickCheck gen property (n &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;1&lt;&#x2F;span&gt;)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Test failed, return the failing input
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;False&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; pure (&lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; input)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Precondition not satisfied, generate another input
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Nothing&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; quickCheck gen property (n &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;1&lt;&#x2F;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is &lt;strong&gt;not&lt;&#x2F;strong&gt; how QuickCheck actually works (for instance, it ignores shrinking and
the actual test runner machinery), but the details of that are probably left best to
another post, because I want to focus on something different. The fact that the
generator is &lt;em&gt;not&lt;&#x2F;em&gt; independent from the property. To be fair, that is a common
requirement, you cannot just randomly sample data in the hopes of running into
interesting inputs, you need to be aware of the system under test. But we have a more
pressing situation here, the generator runs computations that are seemingly not related
to the random generation itself. The &lt;code&gt;foldl createTable ...&lt;&#x2F;code&gt; call runs with the database
to add the generated tables to it. This is in contrast to our usual mental model of a
random generator which makes some random decisions to construct some datatype.&lt;&#x2F;p&gt;
&lt;p&gt;Instead here, the &lt;code&gt;Database&lt;&#x2F;code&gt; is too complex to generate from scratch, so we generate a
really simple version and use its own API for constructing it. While we&#x27;re at it, we
could go even further. The generator already returns the &lt;code&gt;(db, table)&lt;&#x2F;code&gt; pair, which then
the property checks if &lt;code&gt;hasTable db table&lt;&#x2F;code&gt; to detect validity. We know that for this
specific generator, the &lt;code&gt;db&lt;&#x2F;code&gt; always has the &lt;code&gt;table&lt;&#x2F;code&gt;, so we can just remove it. For other
generators, we could just add it as a check within the generator and make the generator
partial instead of total, make the property total instead of partial. In the example
below, the generator returns &lt;code&gt;Gen (Maybe ...)&lt;&#x2F;code&gt; instead of plain &lt;code&gt;Gen&lt;&#x2F;code&gt;, and the property
returns &lt;code&gt;Bool&lt;&#x2F;code&gt; instead of &lt;code&gt;Maybe Bool&lt;&#x2F;code&gt; because the &lt;code&gt;hasTable&lt;&#x2F;code&gt; check has moved into the
generator.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;, &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt;, [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]))
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;gen &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    db &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;String&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;if&lt;&#x2F;span&gt; hasTable db table &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;then&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        values &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; [&lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        return &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;$&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; (db&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; table&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; values)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        return &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Nothing&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;prop_insert_select&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;, &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;String&lt;&#x2F;span&gt;, [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]) &lt;span class=&quot;z-keyword z-other z-arrow z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;prop_insert_select (db&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; table&lt;span class=&quot;z-punctuation z-separator z-comma z-haskell&quot;&gt;,&lt;&#x2F;span&gt; values) &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; insert &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Insert&lt;&#x2F;span&gt; table values
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        select &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Select&lt;&#x2F;span&gt; table &lt;span class=&quot;z-string z-quoted z-double z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*&lt;span class=&quot;z-punctuation z-definition z-string z-end z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;in&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        values &lt;span class=&quot;z-keyword z-operator z-function z-infix z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;elem&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; query (execute db insert) select
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If we can move some part of the property into the generator, can&#x27;t we do that with the
rest?&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; (&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Maybe&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Bool&lt;&#x2F;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;gen &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    db &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Database&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;String&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;if&lt;&#x2F;span&gt; hasTable db table &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;then&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        values &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;&amp;lt;-&lt;&#x2F;span&gt; arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Gen&lt;&#x2F;span&gt; [&lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Value&lt;&#x2F;span&gt;]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; insert &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Insert&lt;&#x2F;span&gt; table values
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            select &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Select&lt;&#x2F;span&gt; table &lt;span class=&quot;z-string z-quoted z-double z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*&lt;span class=&quot;z-punctuation z-definition z-string z-end z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;in&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            return &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;$&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Just&lt;&#x2F;span&gt; (values &lt;span class=&quot;z-keyword z-operator z-function z-infix z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;elem&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; query (execute db insert) select)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-haskell&quot;&gt;else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        return &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Nothing&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Voila, we&#x27;re now back to the original property-only version of the code, only now we&#x27;re
in the generator land, so we can actually change the generation inline without
separating it into two parts and rewriting something from scratch. QuickCheck already
has support for this style of property-based test writing without making you write your
property under &lt;code&gt;Gen&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;prop_insert_select&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Property&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;prop_insert_select &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    forAll arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;$&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;\&lt;&#x2F;span&gt;db &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    forAll arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;$&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;\&lt;&#x2F;span&gt;table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    hasTable db table &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;==&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;    forAll arbitrary &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;$&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;\&lt;&#x2F;span&gt;values &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;let&lt;&#x2F;span&gt; insert &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Insert&lt;&#x2F;span&gt; table values
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            select &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-other z-haskell&quot;&gt;Select&lt;&#x2F;span&gt; table &lt;span class=&quot;z-string z-quoted z-double z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*&lt;span class=&quot;z-punctuation z-definition z-string z-end z-haskell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;        &lt;span class=&quot;z-keyword z-other z-haskell&quot;&gt;in&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;            values &lt;span class=&quot;z-keyword z-operator z-function z-infix z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;elem&lt;span class=&quot;z-punctuation z-definition z-entity z-haskell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; query (execute db insert) select
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;In this style, every &lt;code&gt;forAll&lt;&#x2F;code&gt; combinator takes a generator and produces a context with
access to the generated value, which while hiding the fact that you&#x27;re working with
generators, allow you to write dependent generators without hassle. Here, the property
is not a function that returns a boolean, it&#x27;s the test that captures the generation as
well as the assertion. To be fair, nothing I wrote here is revolutionary, &lt;code&gt;forAll&lt;&#x2F;code&gt; has
been a part of QuickCheck for the past 26 years, every person writing PBTs is aware of
the fact that property-based tests aren&#x27;t properties and generators completely separated
from each other, but rather a combination of the two. The
&lt;a href=&quot;https:&#x2F;&#x2F;hypothesis.readthedocs.io&#x2F;en&#x2F;latest&#x2F;&quot;&gt;Hypothesis intro&lt;&#x2F;a&gt; puts it especially well
from a practical perspective:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;you write tests which should pass for all inputs in whatever range you describe, and
let Hypothesis randomly choose which of those inputs to check&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Essentially, Property-Based Tests leverage properties as universally quantified
statements about the program under test, but many times, they cannot use them without
breaking the abstraction boundaries. Thinking about this is especially important as we
implement libraries, for instance, the Rust port of Haskell&#x27;s QuickCheck,
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BurntSushi&#x2F;quickcheck&quot;&gt;quickcheck&lt;&#x2F;a&gt; gets the abstraction boundary
wrong.&lt;&#x2F;p&gt;
&lt;p&gt;Its &lt;code&gt;quicktest&lt;&#x2F;code&gt; expects a &lt;code&gt;Testable&lt;&#x2F;code&gt; instance, which has a function
&lt;code&gt;fn result(&amp;amp;self, _: &amp;amp;mut Gen) -&amp;gt; TestResult&lt;&#x2F;code&gt;. This instance is implemented for tuples
of up to 8 elements as follows:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-impl z-rust&quot;&gt;impl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-rust&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;T&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; Testable,
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;     $&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;: Arbitrary + Debug&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;,*&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt; Testable &lt;span class=&quot;z-keyword z-other z-rust&quot;&gt;for&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt; &lt;span class=&quot;z-entity z-name z-impl z-rust&quot;&gt;fn&lt;&#x2F;span&gt;($(&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;),*) -&amp;gt; &lt;span class=&quot;z-entity z-name z-impl z-rust&quot;&gt;T&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-meta z-annotation z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-annotation z-rust&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-annotation z-rust&quot;&gt;allow&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-annotation z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-annotation z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;non_snake_case&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-annotation z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;result&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;self&lt;&#x2F;span&gt;, &lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;g&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;mut&lt;&#x2F;span&gt; Gen&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; TestResult&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; self_ &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-language z-rust&quot;&gt;self&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;Arbitrary&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;arbitrary&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;g&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;mut&lt;&#x2F;span&gt; r &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-rust&quot;&gt;safe&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;move&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-rust&quot;&gt;||&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;self_&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;result&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;g&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;if&lt;&#x2F;span&gt; r&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;is_failure&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;            &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;mut&lt;&#x2F;span&gt; a &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;shrink&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-rust&quot;&gt;Some&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;next&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; t&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;clone&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;mut&lt;&#x2F;span&gt; r_new &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-rust&quot;&gt;safe&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;move&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-rust&quot;&gt;||&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;self_&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;result&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;g&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;if&lt;&#x2F;span&gt; r_new&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;is_failure&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                        &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;ref&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; t&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                        r_new&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;arguments &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-rust&quot;&gt;Some&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;debug_reprs&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-bitwise z-rust&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-rust&quot;&gt;$name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; The shrunk value *does* witness a failure, so remember
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; it for now
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    r &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; r_new&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; ... and switch over to that value, i.e. try to shrink
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; it further.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                    a &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; t&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;shrink&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;                &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;            &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        r
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-impl z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Where the line &lt;code&gt;let a: ($($name,)*) = Arbitrary::arbitrary(g);&lt;&#x2F;code&gt; calls the arbitrary for
the input tuple and passes it to the property that computes the result in
&lt;code&gt;let mut r = safe(move || {self_($($name),*)}).result(g);&lt;&#x2F;code&gt;. The design here assumes the
exact boundary we just said was inadequate because computations might need to be
interleaved with the generation. Proptest, as far as I can tell, makes the same
decision. The
&lt;a href=&quot;https:&#x2F;&#x2F;altsysrq.github.io&#x2F;proptest-book&#x2F;proptest&#x2F;vs-quickcheck.html&quot;&gt;comparison against QuickCheck&lt;&#x2F;a&gt;
mentions differences that I personally do not find that much impactful, while not
mentioning the capability that this blog post focuses on. The newly introduced
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hegeldev&#x2F;hegel-rust&quot;&gt;Hegel&lt;&#x2F;a&gt; keeps the &lt;code&gt;tc: TestCase&lt;&#x2F;code&gt; argument that
allows for mixing generation with the test case that allows the original functionality
in Haskell via a different mechanism that Hypothesis has been using for some time.&lt;&#x2F;p&gt;
&lt;p&gt;The article wasn&#x27;t really meant to lead to a particular result, but rather to explore
what we need expressible in a PBT library in general. I hope it&#x27;s been fun to read and
insightful, if you have any objections, I would love to discuss them over at
&lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;My related work on the topic:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;







&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;arxiv.org&amp;#x2F;abs&amp;#x2F;2602.18545&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
    Programmable Property-Based Testing
&lt;&#x2F;a&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;







&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;alperenkeles.com&amp;#x2F;documents&amp;#x2F;dirt.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;
    Database-Integrated Random Testing
&lt;&#x2F;a&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Closing the verification loop: Observability-driven harnesses for building with agents</title>
        <published>2026-03-09T00:00:00+00:00</published>
        <updated>2026-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/harness-first-agents/"/>
        <id>https://alperenkeles.com/posts/harness-first-agents/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/harness-first-agents/">&lt;p&gt;This is a mirror entry of an article I co-authored published in &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;ai&#x2F;harness-first-agents&#x2F;&quot;&gt;Datadog AI Blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;AI agents can now produce software faster than any team can verify it. The bottleneck has moved from writing code to trusting what was written.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;We have seen this pattern before. Early programmers resisted compilers because they could write better assembly by hand. Often they were right. Compilers earned trust because the languages they translate have precise semantics: The programmer defines what the program does; the compiler has freedom over how it is implemented. Automation has consistently won only when paired with verification.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;With AI agents, building trust is more challenging than in the case of compilers. AI agents ingest unrestricted natural language, sometimes from untrusted sources, and translate it into running code. We must find new ways to verify the outputs of these new program synthesis engines.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Seeing types where others don&#x27;t</title>
        <published>2026-03-06T00:00:00+00:00</published>
        <updated>2026-03-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/seeing-types-where-others-dont/"/>
        <id>https://alperenkeles.com/posts/seeing-types-where-others-dont/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/seeing-types-where-others-dont/">&lt;p&gt;This is a mirror entry for my article published in &lt;a href=&quot;https:&#x2F;&#x2F;theconsensus.dev&#x2F;p&#x2F;2026&#x2F;03&#x2F;06&#x2F;seeing-types-where-others-dont.html&quot;&gt;The Consensus&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Welcome to a snapshot of my multi-year long journey of inferring types from jq programs in order to produce better, understandable errors messages.&lt;&#x2F;p&gt;
&lt;p&gt;Programmers are peculiar people, they, actually we, develop odd affections to otherwise impersonal concepts, such as programming languages, such as types. I am guilty of this affection, I love my types. I love the ability to construct a concrete domain model, build relations between the types, and fearlessly refactor my code as I refine my domain model...&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Specifiability is the Leverage</title>
        <published>2026-02-24T00:00:00+00:00</published>
        <updated>2026-02-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/specifiability-is-the-leverage/"/>
        <id>https://alperenkeles.com/posts/specifiability-is-the-leverage/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/specifiability-is-the-leverage/">&lt;p&gt;Almost a year ago, I wrote my first ever blog post on AI-assisted programming, &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;Verifiability is the Limit&lt;&#x2F;a&gt;.
The core idea was a push against the school of thought that AI-assisted programming would scale to an infinite productivity level, because &lt;em&gt;someone&lt;&#x2F;em&gt; had to verify
that the outputs conform to the given specification, &lt;em&gt;the prompt&lt;&#x2F;em&gt;. I predicted that this had, and would, give rise to uneven levels of productivity in different domains;
in UI development, it would make human-in-the-loop development much faster, because UIs are very easy to verify via looking, checking, inspecting the changes. If
we could construct a perfect oracle, a computational verifier that has the ability to reject or accept any artifact produced by the model, we could get autonomous
improvements comparable to those we got in games such as Chess or Go, which I&#x27;ve further explored in &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiable-abstractions&#x2F;&quot;&gt;Breaking Verifiable Abstractions&lt;&#x2F;a&gt;,
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;test-dont-verify&#x2F;&quot;&gt;Test, don&#x27;t (just) verify&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;&quot;&gt;The Mechanics of Autonomous Software Translation&lt;&#x2F;a&gt;.
This time, I&#x27;ve come back to reframe these ideas from a new lens, I don&#x27;t know how useful these lenses are, perhaps both of them separately don&#x27;t lend any
usefulness to anyone, but if they are of interest to you, here&#x27;s the thesis.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The gap between the specification and the task is the leverage.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s an important component here, which is that this new thesis isn&#x27;t really that different from how verifiability is the limit. Rather, instead of framing a limit based on
the verifier, be it subjective personal judgement or a perfect computational oracle, it recognizes that the verifier is the specification.
So, it gives us a tool to answer the question, &lt;em&gt;&amp;quot;how much productivity gain can we get from using an LLM&amp;quot;&lt;&#x2F;em&gt;, which is that the difference in
time to specify the task versus executing it. This is an upper limit to the productivity gain that we&#x27;re far away from because these systems are far from perfect, they make mistakes,
and we also make mistakes on how we think about specifying systems, so we&#x27;ve a lot to improve on.&lt;&#x2F;p&gt;
&lt;p&gt;The rest of this post is talking about different domains, different ways to specify, how to gain leverage, how people have been gaining leverage, what are we still missing.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest form of specification is a reference. Imagine you take a screenshot of a webpage, and you ask the model to keep generating code until it recreates it. You gain
immense leverage from this interaction, because you have left much of the specification of the details to your reference with a minimal requirement, &lt;em&gt;the page must look the same&lt;&#x2F;em&gt;.
There are, however, millions of different ways to fulfill this request. For instance, nothing prevents the model from literally making the page a canvas and putting the picture
there, objective achieved! That is probably not you want, you want a reasonable approximation of the screenshot in a usable manner. So something that looks like a button should
probably be a button, something that resembles a textbox should be a text area, etc. You also want reasonable behavior on scrolling, resizing, reloading... You see how this is
somehow damaging on the leverage, we started with a simple reference as the specification of what to generate, but we see that&#x27;s not really enough, the specification is much
more nuanced in practice. This isn&#x27;t really a groundbreaking discovery, we started from a static 2D reference image, which captures (maybe) a moment in the life of a webpage,
so the model has to infer, or guess, or ask, every decision beyond the reference.&lt;&#x2F;p&gt;
&lt;p&gt;This isn&#x27;t really so bad, because models are not blind followers of instructions, they generalize them in the context of training data. So when we ask the model to generate
a webpage based on a screenshot, I am certain that it will not just print it on a canvas, it will infer that you want DOM elements organized in such a way that it
resembles the screenshot, and that&#x27;s a very nice behavior we certainly want when using the models, because if we wanted to be &lt;em&gt;that&lt;&#x2F;em&gt; precise, we lose the leverage we get by using
a generative model of programming, at the limit without contextual inference, the specification can be equivalent to the implementation.&lt;&#x2F;p&gt;
&lt;p&gt;In practice, we are advantageous in two ways. The first is, lots of times people don&#x27;t have very specific requests. A simple book club app might be fine the way the model infers
what it should be. The second is, we don&#x27;t need have a precise specification in mind, we&#x27;re using the model interactions as a way to iteratively refine the specification, as we would
when developing without model assistance. We can even use the model to help us with the refinement,
you can get the model to &lt;em&gt;quiz&lt;&#x2F;em&gt; you, ask you questions to refine the specification you gave, in order to produce software that is a better fit to your intent. You can, as is the typical
development workflow, check the output to refine the specification by correcting a piece of it.&lt;&#x2F;p&gt;
&lt;p&gt;You might&#x27;ve realized in the screenshot example that references themselves are not the specifications, they are &lt;em&gt;anchors&lt;&#x2F;em&gt;, targets to adhere to. We have to also specify the gadgets,
the tools, the platform to produce the artifact to conform to the reference, which would be a standalone HTML page or a React application in the screenshot instance. In other
instances we might specify using specific programming languages, testing strategies, implementation tricks, dependencies... The highest leverage, however, comes with the ability
to remove the human from the loop. If we could only produce a computational verifier that completely specifies our program, we could just let the model evolve the program in an
autonomous loop, I&#x27;ve outlined a rough economic function of the cost for such an autonomous
loop in my latest post, &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;&quot;&gt;The Mechanics of Autonomous Software Translation&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;total cost ≈ (inference cost per iteration) × (expected iterations until “good enough”) + (harness engineering + oversight)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;So, what is leverage?&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;leverage ≈ traditional engineering cost - (harness engineering + oversight)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The leverage we acquire via generative programming is the effort we spend on building the harness and maintaining it
subtracted from the total engineering effort we would have spent if we didn&#x27;t have the
computational verifier. What does the computational verifier look like? It&#x27;s a random testing loop! Produce random inputs, pass them in the new and the old implementation,
assert that their results are the same, or at least equivalent. We once again rely on the generalization capacities of the model here, trusting that it won&#x27;t keep
adding new &lt;code&gt;if&lt;&#x2F;code&gt; statements for every single input it gets wrong until the testing loop is exhausted. Within this framework, we get increasingly higher leverage as models
get better and harnesses are better engineered, we should get increasingly better results in translation. The current demos with the &lt;a href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;engineering&#x2F;building-c-compiler&quot;&gt;C Compiler&lt;&#x2F;a&gt;,
&lt;a href=&quot;https:&#x2F;&#x2F;cursor.com&#x2F;blog&#x2F;scaling-agents&quot;&gt;the browser&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;ccccjjjjeeee&#x2F;status&#x2F;2021160492039811300&quot;&gt;SimCity&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ladybird.org&#x2F;posts&#x2F;adopting-rust&#x2F;&quot;&gt;Javascript Compiler&lt;&#x2F;a&gt;,
or the recent news of &lt;a href=&quot;https:&#x2F;&#x2F;claude.com&#x2F;blog&#x2F;how-ai-helps-break-cost-barrier-cobol-modernization&quot;&gt;COBOL modernization&lt;&#x2F;a&gt; are the footsteps of what&#x27;s to come, they mark
what we can achieve with high leverage using these computational verifiers.&lt;&#x2F;p&gt;
&lt;p&gt;Well then, we get to the gist of the important question. &lt;strong&gt;Where else do we have this type of leverage?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A simple answer is, any domain or scenario you can construct robust, expressive, and extensive Property-Based Testing harnesses.
The core idea of Property-Based Testing is, users write executable specifications using first order logic. Properties are universally quantified predicates that must hold true
for any given input, and they are implemented as predicate functions from such inputs to booleans, letting the testing harness decide on how the inputs are produced. For instance,
we can write and test the following properties in Python:&lt;&#x2F;p&gt;
&lt;p&gt;Program translation:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;translation_preserves_semantics&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;PythonProgram&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;translated_program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;translate_to_rust&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;execute_python&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;execute_rust&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;translated_program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Program optimization:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;optimization_preserves_semantics&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;optimized_program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;optimize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;execute&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;execute&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;optimized_program&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Preservation of momentum in physics simulations:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;momentum_preservation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;mass1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;float&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;vel1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;float&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;mass2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;float&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-parameters z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;vel2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;float&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;initial_momentum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;vel1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;vel2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_vel1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;, &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_vel2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;simulate_collision&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;vel1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;vel2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_momentum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_vel1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mass2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_vel2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;initial_momentum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;final_momentum&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Serialization and deserialization consistency:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;serialization_consistency&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;protobuf_message&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-annotation z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-annotation z-parameter z-python&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;ProtobufMessage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;serialized&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;serialize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;protobuf_message&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;deserialized&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;deserialize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;serialized&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;protobuf_message&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;deserialized&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;All of these examples denote universal truths. A program optimizer must not change the output of any program for any input. A physics simulation
must preserve the momentum for all possible physical worlds, a serialize&#x2F;deserialize pair must not lose information for any type of message.
Once we have such universal expectations about the implementations, it is possible that we no longer need to worry about the implementation.
Write the specification, run sufficiently long random testing campaigns, keep feeding counterexamples back to the model until there are none.
That would be hell of a way to develop software, but unfortunately real life is messier.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;None of the examples I gave are complete.&lt;&#x2F;strong&gt; Program optimization must not just preserve the semantics, it must also optimize the program.
We tested momentum preservation with only two rigid bodies, but the simulation might have more. We made sure serializing and deserializing
any protobuf message leads to the same message, but not that broken serialized messages could not be deserialized, or parsed, into
the wrong messsage. We checked that the translations are functionally equivalent, but not that of compatible in memory usage or runtime performance;
we also did not account for nondeterminism or concurrency that might not be well suited for random testing to test for. We have another
way to check specifications, namely formal verification, but I will just name drop a previous blog post of mine,
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;test-dont-verify&#x2F;&quot;&gt;Test, don&#x27;t (just) verify&lt;&#x2F;a&gt;, if anyone is interested in how and when
LLM-assisted formal verification can and can&#x27;t provide similar or even better leverage to random testing.&lt;&#x2F;p&gt;
&lt;p&gt;So are we back to the beginning? Do we not get any leverage from the random tests, of course not! We must merely be very careful. As we move away
from the implementation to the specification, we start to use the &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;llms-could-be-but-shouldnt-be-compilers&#x2F;&quot;&gt;LLM as some kind of compiler&lt;&#x2F;a&gt;,
we relinquish control of every detail we choose not to specify, or not to test for. This means the model has free reign to do as it pleases as long
as the tests pass.&lt;&#x2F;p&gt;
&lt;p&gt;Universally quantified properties aren&#x27;t the only way to specify software at scale. Temporal logic formulas as in &lt;a href=&quot;https:&#x2F;&#x2F;learntla.com&quot;&gt;TLA+&lt;&#x2F;a&gt;, or the newly announced
&lt;a href=&quot;https:&#x2F;&#x2F;wickstrom.tech&#x2F;2026-01-28-there-and-back-again-from-quickstrom-to-bombadil.html&quot;&gt;Bombadil&lt;&#x2F;a&gt; allow users to specify behavior of a program
temporally, as formulas over traces of the program, reasoning if a property holds all the time, for all possible paths in the program; or that all paths in the program eventually lead to
some supposed destination such as a cleanup routine. These types of specifications are especially crucial in distributed settings because many
distributed algorithms as expressed as temporal logic formulas and proven in model checkers like TLA+. These formulas, unsurprisingly, have to be
combined with finer level details we expect from the implementations too, after all, many concepts in theoretical computing such as eventuality
have to be bounded by certain limits to be practical in real life settings.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Let&#x27;s talk about what I see we&#x27;re still missing.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For starters, we lack the expressivity in our specification languages to specify many useful aspects of the software. All of the harnesses people
use in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;algorithmicsuperintelligence&#x2F;openevolve&quot;&gt;OpenEvolve&lt;&#x2F;a&gt; style systems are still programs, programs that are written as bespoke,
potentially buggy specifications for evolving code for some metric. We talk about faster software without talking about the distribution of inputs,
we talk about software security without talking about properly defining the threat model. We&#x27;re also missing proper harnesses for autonomous
programming. There are a multitude of impressive products such as Codex, Claude Code, Cursor, Open Code for programming via prompting, they
take care of context management, tool calling, model selection, prompt caching, sandboxing, checkpointing and many other useful feature for AI-assisted programming,
but I don&#x27;t know of any such polished product for building fully autonomous loops. Last but not least, we are missing the mindset to look for
the leverage. I don&#x27;t see us identifying potential gaps to open up between the specification and the implementation and focusing on exploiting
those gaps. It&#x27;s not that there aren&#x27;t people working on these problems, as I mentioned in my previous posts, &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;engineering&#x2F;self-optimizing-system&#x2F;&quot;&gt;BitsEvolve&lt;&#x2F;a&gt;,
&lt;a href=&quot;https:&#x2F;&#x2F;sakana.ai&#x2F;shinka-evolve&#x2F;&quot;&gt;ShinkaEvolve&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2510.06189&quot;&gt;ADRS&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2510.27176&quot;&gt;Glia&lt;&#x2F;a&gt;,
&lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2507.15887&quot;&gt;AlgoTune&lt;&#x2F;a&gt;, there are many people working on finding opportunities to produce autonomous tasks, but the leverage is still in the niche.&lt;&#x2F;p&gt;
&lt;p&gt;If you have any comments, feedback, or (especially) criticisms, please feel free to reach out to me at &lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;, and
share with others if you found this interesting.&lt;&#x2F;p&gt;
&lt;p&gt;(I think this will be the last one of this line of posts, because I feel like I told all I wanted to say in this topic, wish me luck
on getting back to writing about testing databases and type systems!)&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Mechanics of Autonomous Software Translation</title>
        <published>2026-02-11T00:00:00+00:00</published>
        <updated>2026-02-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/autonomous-translations/"/>
        <id>https://alperenkeles.com/posts/autonomous-translations/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/autonomous-translations/">&lt;p&gt;2026 started with a boom of AI-assisted autonomous translations, on 14th of January,
Cursor published their post on &lt;a href=&quot;https:&#x2F;&#x2F;cursor.com&#x2F;blog&#x2F;scaling-agents&quot;&gt;Scaling long-running autonomous coding&lt;&#x2F;a&gt;
in which they created translations of a browser, Java LSP, Windows emulator and Excel. This was
followed by an Anthropic post on &lt;a href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;engineering&#x2F;building-c-compiler&quot;&gt;Building a C compiler with a team of parallel Claudes&lt;&#x2F;a&gt;, which has only further fanned the flames of the hype. Both of these posts have garnered lots of positive
attention but have failed to stand to the expectations of the demos, Cursor browser got lots of well-deserved critique, and people had
their good laughs when the C compiler that could compile the Linux kernel failed on a Hello World example. I view both of these as
initial attempts at translating production grade software products using an immature translation engine, and getting
broken results. It seems from a speculative point of view that the models are capable enough to do this translation, so my
position is that the translation harnesses themselves aren&#x27;t good enough, or the total budget required is much higher. I&#x27;ll go
into the economics of translation in the &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;#translation-as-a-function-of-money&quot;&gt;translation as a function of money&lt;&#x2F;a&gt; section.&lt;&#x2F;p&gt;
&lt;p&gt;To make my position clear, I think we&#x27;ll get better and better demos of these autonomous translations throughout 2026,
and maybe even have some decent autonomous translation products by the end of the year. This article starts with a technical
dive into how these translations even work in &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;#how-does-ai-translate-software&quot;&gt;How does AI translate software?&lt;&#x2F;a&gt;, followed
by my personal analysis of the question of &amp;quot;is translation capability really useful, and if yes, how so?&amp;quot; in
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;#how-can-we-derive-value-out-of-translations&quot;&gt;How can we derive value out of translations?&lt;&#x2F;a&gt;. In &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;autonomous-translations&#x2F;#the-next-frontier-optimization&quot;&gt;the next frontier&lt;&#x2F;a&gt; I&#x27;ll start making some more predictions,
and finish with a discussion of a world where ubiquitous translation of software is possible.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-does-ai-translate-software&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-does-ai-translate-software&quot; aria-label=&quot;Anchor link for: how-does-ai-translate-software&quot;&gt;How does AI translate software?&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I should start this section with a disclaimer to its title, &lt;strong&gt;AI currently does not translate software&lt;&#x2F;strong&gt;. If AI translated software,
it would be like waving a magic wand, we would say &amp;quot;give me a Rust version of Doom&amp;quot;, and voila, we would get one. What instead
happens right now is, people use LLMs as neural search engines, &lt;em&gt;AI proposes translations&lt;&#x2F;em&gt;, which are then rejected
by a translation harness, a concrete evaluator that decides if the translation has succeeded or not, that is designed by a human, in these cases experts that understand the mistakes LLMs make,
and know how to create a robust testing loop with continuous improvements. This may change in the future where
the harnesses themselves good enough for translation are written by the models, which is I think the point where the terminology
should shift, not at this point in the history. The fundamental current change is that these translations are now economically
viable because of the model capabilities. I feel the need to say this because whenever one of these translations drop to the
timeline, the vendors hype it up to suggest this indicates a larger ability in the context of software engineering, which I
fully disagree.&lt;&#x2F;p&gt;
&lt;p&gt;As such, let&#x27;s build a very dumb translation loop without LLMs:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;translate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;source_code&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-statement z-loop z-while z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-while z-python&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;True&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-while z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-comment z-line z-number-sign z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-python&quot;&gt;#&lt;&#x2F;span&gt; Randomly generate some strings
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;target_code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-python&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-python&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-string z-python&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-python&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;join&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;choices&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;string&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;ascii_letters&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;string&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;digits&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;k&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;randint&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1000000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;equivalent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;True&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-python&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;i&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-for z-in z-python&quot;&gt;in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;range&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-for z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;            &lt;span class=&quot;z-comment z-line z-number-sign z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-python&quot;&gt;#&lt;&#x2F;span&gt; Randomly generate some bytes
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;            &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;test_case&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;randbytes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;randint&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1000000&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;            &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;source_code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;test_case&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;!=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;target_code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;test_case&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;                &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;equivalent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;False&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;                &lt;span class=&quot;z-keyword z-control z-flow z-break z-python&quot;&gt;break&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;equivalent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;target_code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There&#x27;s a very cool mathematical theorem in combinatorics that is called the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Infinite_monkey_theorem&quot;&gt;infinite monkey theorem&lt;&#x2F;a&gt;, which states that a monkey hitting keys at random on a typewriter keyboard for an infinite amount of time will almost surely type any given text, such as the complete works of William Shakespeare. We don&#x27;t really care about
Shakespeare&#x27;s complete works right now, but we might care about translating an old COBOL software into Java without changing
its semantics, so it would be immensely useful if we had these infinite monkeys with some infinite time at hour hands to produce
modern Java equivalents of some old COBOL programs.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;translation-as-a-function-of-money&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#translation-as-a-function-of-money&quot; aria-label=&quot;Anchor link for: translation-as-a-function-of-money&quot;&gt;Translation as a function of money&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;While we don&#x27;t have infinite randomized labor coupled with infinite time, we have something that comes close to it, we have
AI models that can generate code that are astonishingly good at following instructions. These models unsurprisingly
cost a decent amount of money to run, but they make it so that we can now sample from a much better distribution of
possible translations than was previously possible. We can even guide this sampling by augmenting our instructions
with feedback from the testing harness, so the suggestions of the model is self-improving within this translation loop.
We can modularize the software into multiple units or modules, each of which is separately validated, which means
that the doesn&#x27;t even have to generate the whole thing, it can generate each smaller unit and compose
the whole thing together.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s an economic balance here:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;translation cost ≈ (cost per iteration) × (expected iterations until “good enough”) + (harness engineering + oversight)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As models and harnesses get better, the expected number of iterations to reach equivalence do and will get lower,
and assuming that the cost to generation itself doesn&#x27;t increase too much, we should expect the cost of translation
to drop significantly, expecting to see many more of these results. There are two significant developments from the model
side here, one is that they are getting better at following specifications, the two is that they are getting better at
being in the control plane. In addition to doing the translations themselves, we can trust the model to make better
judgements within the harness such as invoking subagents to translate a logical module and producing a smaller random test for
it, essentially letting the model dictate how much of the translation is successfully completed. I&#x27;m not aware of any current
demos that are doing this, but I would also expect this to happen.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;verifying-translations&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#verifying-translations&quot; aria-label=&quot;Anchor link for: verifying-translations&quot;&gt;Verifying Translations&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;The loop we saw at the beginning of the section is a &lt;em&gt;differential test&lt;&#x2F;em&gt;, where two systems must be observable equivalent.
It&#x27;s the most popular form of Property-Based Testing in software engineering, because it is one of the simplest properties we can express about a piece of software.
Traditionally it&#x27;s used for validating ports across languages (translations), refactors, optimizations, and there&#x27;s an even
interesting method of software development where when implementing a new system, you first build a &lt;em&gt;model&lt;&#x2F;em&gt;, a naive, simpler
version that defines the observable correct behavior of the system is, and use that to test your production grade system that
can be much more complex. Testing researchers have been using differential tests to find bugs in compilers, databases,
browsers and many other types of software for many years, and now differential testing is becoming mainstream thanks to
its ability to produce shiny demos for new AI models.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s a larger technical debate here, which is what does it mean for a translation to be correct, because observable
equivalence is my definition is doing a heavy lifting. What do we observe to make it equivalent? &lt;em&gt;Test cases!&lt;&#x2F;em&gt; So the strength
of the test case generation directly affects the strength of the equivalence we can ensure. There are some important
ramifications of this, one is namely that our translations are laser focused on functional equivalence because that&#x27;s the
easiest to test for, and fails to account for equivalence in performance, equivalence in security, equivalence in any scenario
we cannot test our systems for. For any sufficiently complex language, be it C, Rust, SQL or Brainfuck, it&#x27;s impossible
to produce all possible inputs to the system, so we must do the next best thing and try to reach as many states of the
underlying system as possible. I suspect a large part of the bottleneck of the translations today is how we generate the test cases, how much
of the system we are able to test quickly enough, and how much information are we able to give back to the model as feedback
when there&#x27;s an equivalence failure, how easy it is to localize failures, how much time is spent on tracing the root
cause of each failure, how much of the token budget are we spending that we could just solve with other, much faster techniques.&lt;&#x2F;p&gt;
&lt;p&gt;There is another large debate, which is that is this really useful? Let&#x27;s say the model is able generate a browser from scratch,
a GCC equivalent, or rather it really just replicates any software with the same exact input output structure across language
ecosystems, how much value do we produce here? What good is it to produce translations across languages?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-can-we-derive-value-out-of-translations&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-can-we-derive-value-out-of-translations&quot; aria-label=&quot;Anchor link for: how-can-we-derive-value-out-of-translations&quot;&gt;How can we derive value out of translations?&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The answer here isn&#x27;t really obvious. Let&#x27;s say we have a perfect translator from JavaScript to Rust, and we give it
the following JavaScript program:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js z-code&quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Here&#x27;s a potential Rust translation of it:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;i32&lt;&#x2F;span&gt;, &lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;i32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;i32&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    a &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; b
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course this is completely wrong, because we are translating a JavaScript function, which can take any JS object, so the correct translation would be something like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-enum z-rust&quot;&gt;enum&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-enum z-rust&quot;&gt;JsValue&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;f64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-support z-type z-rust&quot;&gt;String&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-rust&quot;&gt;String&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    Object&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;HashMap&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-rust&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-rust&quot;&gt;String&lt;&#x2F;span&gt;, JsValue&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; and so on for all JS types
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-enum z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; JsValue, &lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; JsValue&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; JsValue&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;match&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;String&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;String&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;String&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bitwise z-rust&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;String&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-rust&quot;&gt;Ok&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;y_num&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; y&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-path z-rust&quot;&gt;parse&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-rust&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;f64&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;            &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; y_num&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;            &lt;span class=&quot;z-meta z-path z-rust&quot;&gt;JsValue&lt;span class=&quot;z-punctuation z-accessor z-rust&quot;&gt;::&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;String&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;x&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bitwise z-rust&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-comment z-line z-double-slash z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-rust&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; handle other cases and type coercions
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;_&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-rust&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-macro z-rust&quot;&gt;panic!&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;TypeError: Invalid types for addition&lt;span class=&quot;z-punctuation z-definition z-string z-end z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There&#x27;s immensely less value in this translation compared to the previous one, because staying true to the semantics without
any type of restriction on the existing types hardly produces readable, maintainable, or faster code. This is more true
for translation of libraries where input types are necessarily host language objects, so making a strictly equivalent translation
gives us very little wiggle room. On the other hand, if we are translating an application, we have much more freedom to change
the underlying types as long as the public interface, which is usually a simpler object model we can easily serialize and
deserialize, is preserved. Therefore, it is in my opinion more possible to make an application more readable, maintainable, or
faster via translation as opposed to libraries.&lt;&#x2F;p&gt;
&lt;p&gt;Another point we can derive value is platform dependence. For instance, on web, we could only run JavaScript as a scripting
language for a while, although nowadays WASM is changing this, but if it had not, we could use translation to run arbitrary
languages on the web, as older symbolic translation methods such as ghcjs, emscripten had done. This type of platform
dependence also exists in other ecosystems such as smaller embedded devices, where we might want to run a Rust application
in a language that Rust compilation isn&#x27;t yet possible; or moving out of a dying ecosystem such as COBOL, where it&#x27;s very
hard to find developers, or the language doesn&#x27;t evolve with modern hardware to take advantage, so moving to a modern language
with an active ecosystem can be a huge win.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-next-frontier-optimization&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-next-frontier-optimization&quot; aria-label=&quot;Anchor link for: the-next-frontier-optimization&quot;&gt;The next frontier, optimization&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Translation has emerged as a powerful use case for LLMs due to its convenience in testability, so it&#x27;s natural to
ask what&#x27;s next? If we master translation, what would be the next emerging capability? I view optimization as a natural
next step after translation because (1) it already includes a valid translation as its requirement, so it isn&#x27;t surprising
we haven&#x27;t seen much advances on it without mastering translation first; (2) there are forms of optimization that are
as easily tested as translation even though optimization is much more nuanced.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest form of optimization is a dominant optimization, where the new program is strictly better than the old one across all dimensions, for all possible inputs. This type of optimization is typically possible by doing less, meaning we remove
allocations, extra pointer chasing via indirections, push ifs up and loops down to make our programs do less work. Given a
program where it&#x27;s possible to have such optimizations, we can once again treat the model as a neural search engine that proposes possibly optimized programs we can reject via benchmarks with little changes to the testing harness we had
for translations.&lt;&#x2F;p&gt;
&lt;p&gt;There are other forms of optimization that aren&#x27;t necessarily dominant, these might be optimizing for specific types of
known input distributions or focusing on absolute wins where making a small input run on 2x is deemed less important
than making a very large input run on 0.9x time. I think for these types of optimizations it&#x27;s harder to automate the harnesses
as it requires subjective judgement on the acceptable bounds on different input types and distributions.&lt;&#x2F;p&gt;
&lt;p&gt;We are already seeing examples of these, I myself have worked on one we called BitsEvolve &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;engineering&#x2F;self-optimizing-system&#x2F;&quot;&gt;Datadog&lt;&#x2F;a&gt;, there is &lt;a href=&quot;https:&#x2F;&#x2F;sakana.ai&#x2F;shinka-evolve&#x2F;&quot;&gt;ShinkaEvolve&lt;&#x2F;a&gt; by Sakana, &lt;a href=&quot;https:&#x2F;&#x2F;algotune.io&quot;&gt;Algotune&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;sky.cs.berkeley.edu&#x2F;project&#x2F;adrs&#x2F;&quot;&gt;ADRS&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2510.27176&quot;&gt;Glia&lt;&#x2F;a&gt; and a bunch more I probably have been missing on.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;can-we-copy-behind-closed-windows&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#can-we-copy-behind-closed-windows&quot; aria-label=&quot;Anchor link for: can-we-copy-behind-closed-windows&quot;&gt;Can we copy behind closed windows?&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;A futuristic application going forward in this technology is not just translating open source applications we have unlimited
access to with the ability to run hundreds of millions of side by side equivalence tests, but rather reconstruct existing closed
source software, perhaps even behind servers we have limited access to. This would be possible by essentially building a mirror model of the state machine implemented by the server that is refined across time as assumptions of the mirror model is broken.
I wonder what this would do to the existing SaaS ecosystem, what does on choose to build when it&#x27;s possible to build
autonomous copies of simpler architectures, how do businesses defend their competitive advantage...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;future-of-programming-languages&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#future-of-programming-languages&quot; aria-label=&quot;Anchor link for: future-of-programming-languages&quot;&gt;Future of programming languages&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I wrote a bit earlier that translation between languages themselves isn&#x27;t straightforward because faithful
translations can be hardly useful. There&#x27;s a bit of intellectual dishonesty here, because such as translation
also gives us the ability to specify types of the software too. We can take programs that are initially
too liberal with their types and progressively cut down those overly permissive types into simpler forms,
just as how the V8 JIT compiler dynamically computes when JavaScript function types can be pruned and simplified
based on existing input profiles. Our translation units also don&#x27;t have to be aligned at functions, which might
again force us to use patterns that are at a disadvantage in one language but useful in the other, such as memory
management patterns in C that isn&#x27;t expressible in safe Rust, but could have been avoided if we draw the translation
unit at a higher point in the code.&lt;&#x2F;p&gt;
&lt;p&gt;In an environment we are able to do such translations, what would we do? Which types of languages would become
more likely translation sources, which would become more likely translation targets? What kind of properties
of existing programming languages would shine in this ecosystem, which would become obsolete?&lt;&#x2F;p&gt;
&lt;p&gt;I would like to think that, in such a scenario, we would look for more declarative, but precisely specified
paradigms as opposed to natural language that I outlined the problems in &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;llms-could-be-but-shouldnt-be-compilers&#x2F;&quot;&gt;my last post&lt;&#x2F;a&gt;
where I talk about the topic of LLMs as compilers. Instead of picking
a specific implementation of a map, we could define an abstract map object that upholds certain properties; similar
for sets, lists, queues, heaps... Given the ability to translate at will, we could conjure programs that conform
to these declarative specs which we can refine in time, taking back the control we relinquish whenever necessary.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>LLMs could be, but shouldn&#x27;t be compilers</title>
        <published>2026-02-06T00:00:00+00:00</published>
        <updated>2026-02-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/llms-could-be-but-shouldnt-be-compilers/"/>
        <id>https://alperenkeles.com/posts/llms-could-be-but-shouldnt-be-compilers/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/llms-could-be-but-shouldnt-be-compilers/">&lt;p&gt;I’ve been going round and round in my mind about a particular discussion around LLMs: are they really similar to compilers? Are we headed toward a world where people don’t look at the underlying code for their programs?&lt;&#x2F;p&gt;
&lt;p&gt;People have been making versions of this argument since Andrej Karpathy’s “English is the hottest new programming language.” Computer science has been advancing language design by building higher and higher level languages; this is the latest iteration: maybe we no longer need a separate language to express ourselves to machines; we can just use our native tongues (let alone English).&lt;&#x2F;p&gt;
&lt;p&gt;My stance has been pretty rigid for some time: LLMs hallucinate, so they aren’t reliable building blocks. If you can’t rely on the translation step, you can’t treat it as a serious abstraction layer because it provides no stable guarantees about the underlying system.&lt;&#x2F;p&gt;
&lt;p&gt;As models get better, hallucinations become less central (even though models still make plenty of mistakes). Lately I’ve been thinking about a different question: imagine an LLM that never “hallucinates” in the usual sense, one that reliably produces some plausible implementation of what you asked. Would that make it the next generation of compiler? And what would that mean for programming and software engineering in general?&lt;&#x2F;p&gt;
&lt;p&gt;This post is my stab at that question. The core of my argument is simple:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Specifying systems is &lt;em&gt;hard&lt;&#x2F;em&gt;; and we are &lt;em&gt;lazy&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Before getting to what that means in practice, I want to pin down something else: what does it mean for a language to be “higher level”?&lt;&#x2F;p&gt;
&lt;p&gt;Programming is, at a fundamental level, the act of making a computer do something. Computers
are very dumb from the point of view of a human. You need to tell the computer exactly what to do,
there&#x27;s no inference. A computer fundamentally doesn&#x27;t even have the notion of a value, type, concept; everything
is a series of bits, which are processed to generate other bits, we bring meaning to this whole ordeal.
Very early on, people have started by building arithmetic and logical instructions into computers,
you would have 2 different bit sequences each denoting a number, you could add, subtract, multiply them.
In order to make a computer do something, you could denote your data in terms of a bunch of numbers, map
your logical operations onto those ALU instructions, and interpret the result in your domain at the end.
Then, you can define a bunch of operations on your domain, which will be compiled down to those smaller ALU
instructions, and &lt;em&gt;voila&lt;&#x2F;em&gt;, you have a compiler at hand.&lt;&#x2F;p&gt;
&lt;p&gt;This compiler is, admittedly, kind of redundant. It doesn&#x27;t do anything you would be able to do because you
essentially have a direct mapping between your two &lt;em&gt;languages&lt;&#x2F;em&gt;, your higher level language desugars into a
bunch of lower level ALU instructions, so anyone would be able to implement the same mapping very easily,
and even go further, perhaps just write the ALU instructions themselves.&lt;&#x2F;p&gt;
&lt;p&gt;What &lt;em&gt;real&lt;&#x2F;em&gt; higher level languages do is they give you an entirely new language that is eventually mapped
to the underlying instruction set in non-trivial mechanisms in order to reduce the mental complexity
on the side of the programmer. For instance, instruction sets do not have the concept of variables,
nor loops, nor data structures. You can definitely build a sequence of instructions that amount to a binary
search tree, but the mental burden of the process is orders of magnitude higher than any classic programming
language. Structs, Enums, Classes, Loops, Conditionals, Exceptions, Variables, Functions are all properties
that exist in higher level languages that are compiled away when going down the stack.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s a crucial aspect of compilation, which is that the programmer gives away some control, that&#x27;s essentially
what removes the mental burden. If a programming language doesn&#x27;t give away any control, it arguably isn&#x27;t a very
useful abstraction layer, because it did not absolve you of any responsibility that comes with that control. One
of the first examples of this type of control we gave away is code layout. If you are writing handwritten assembly, you control where the code lives in the program memory. When you go into a language with structured control flow with callable procedures,
you now don&#x27;t have exact control over when the instructions for a particular piece of code is fetched, how basic
blocks are arranged in the memory. Other examples are more common, the &lt;em&gt;runtime&lt;&#x2F;em&gt; of a language works in the background
to absolve you of other responsibilities such as manual memory management, which itself was an abstraction
for automatically managing how your data is organized in memory in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;This loss of control raises a question: how do we know the abstraction is implemented correctly? More importantly, &lt;strong&gt;what does it mean for an abstraction to be correct?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are a few layers to the answer. First, mature abstractions are defined against some semantics: what behaviors are allowed, what behaviors are forbidden, and what guarantees you’re meant to rely on. In C, &lt;code&gt;malloc&lt;&#x2F;code&gt; gives you a pointer to a block of memory of at least the requested size (or &lt;code&gt;NULL&lt;&#x2F;code&gt;), suitably aligned, which you may later &lt;code&gt;free&lt;&#x2F;code&gt;. It doesn’t give you “exclusive ownership” in the language-theoretic sense, but it does define a contract you can program against.&lt;&#x2F;p&gt;
&lt;p&gt;Second, we validate implementations with testing (and sometimes proofs), because these guarantees are at least in principle checkable. Third, in practice, guarantees are contextual: most programs care that allocation works; only some care deeply about allocator performance, fragmentation behavior, or contention, those are the cases where people swap allocators or drop down a level.&lt;&#x2F;p&gt;
&lt;p&gt;This highlights a critical point: abstraction guarantees aren’t uniform; they’re contextual. Most of the time, that contextuality is dominated by functional correctness: “does it do what it says?” Programming languages made enormous progress by giving us abstractions whose functional behavior can be specified precisely and tested relentlessly. We can act as if push&#x2F;pop on a Python list has the same
semantics as a vector in C++ even when the underlying implementation differs wildly across languages and runtimes.&lt;&#x2F;p&gt;
&lt;p&gt;LLM-based programming challenges this domination because the “language” (natural language) doesn’t come with precise semantics. That makes it much harder to even state what functional correctness should mean without building a validation&#x2F;verification suite around it (tests, types, contracts, formal specs).&lt;&#x2F;p&gt;
&lt;p&gt;This gets to my core point. What changes with LLMs isn’t primarily nondeterminism, unpredictability, or hallucination. It’s that the programming interface is functionally underspecified by default. Natural language leaves gaps; many distinct programs can satisfy the same prompt. The LLM must fill those gaps.&lt;&#x2F;p&gt;
&lt;p&gt;Just as a garbage-collected runtime takes control over how and when memory is reclaimed, “programming in English” relinquishes control over which exact program gets built to fulfill your requirements. The underspecification forces the model to guess the data model, edge cases, error behavior, security posture, performance tradeoffs in your program, analogous to how an allocator chooses an allocation strategy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;This creates quite a novel danger in how we write programs.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Humans have always written vague requirements; that part isn’t new. What’s new is how directly an LLM can turn vagueness into running code, inviting us to outsource functional precision itself. We can leave meaningful behavioral choices to a generator and only react to the outcome.&lt;&#x2F;p&gt;
&lt;p&gt;If you say “give me a note-taking app,” you’re not describing one program, you’re describing a huge space of programs. The LLM can return one of a billion “reasonable” implementations: something Notion-like, Evernote-like, Apple Notes-like, or something novel. The danger is that “reasonable” choices can still be wrong for your intent, and you won’t notice which commitments got made until later.&lt;&#x2F;p&gt;
&lt;p&gt;This pushes development toward an iterative refinement loop: write an imprecise spec, get one of the possible implementations, inspect it, refine the spec, repeat until you’re satisfied. In this mode, you become more like a consumer selecting from generated artifacts than a producer deliberately constructing one.&lt;&#x2F;p&gt;
&lt;p&gt;And you also lose something subtle: when you hand-build, the “space of possibilities” is explored through design decisions you’re forced to confront. With a magic genie, those decisions get made for you; you only see the surface of what you ended up with.&lt;&#x2F;p&gt;
&lt;p&gt;I don’t think this point is widely internalized yet: hallucinations aren’t the only problem. Even in a hallucination-free world, the ability to take the easy way out on specification plays into a dangerously lazy part of the mind. You can see it in the semi-conscious slips (I’m guilty too): accept-all-edits, “one more prompt and it’ll be fine,” and slow drifting into software you don’t really understand.&lt;&#x2F;p&gt;
&lt;p&gt;That’s why I think the will to specify is going to become increasingly important. We already see LLMs shine when they’re given concrete constraints: optimization, refactors, translations, migrations, tasks that used to be so labor-intensive we’d laugh at the timeline, become feasible when the target behavior is well specified and backed by robust test suites.&lt;&#x2F;p&gt;
&lt;p&gt;It’s been true for a long time that specifying a piece of software is often harder than building it. But we may be entering a world where: if you can specify, you can build. If that’s right, then &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;specification and verification become the bottleneck&lt;&#x2F;a&gt;, and therefore the core skill.&lt;&#x2F;p&gt;
&lt;p&gt;This isn’t my most polished post, but I wanted to get the idea out. I do think it’s possible to treat LLMs as compiler-like, in the loose sense that they translate a specification into an executable artifact. But the control we relinquish to that translation layer is larger than it has ever been.&lt;&#x2F;p&gt;
&lt;p&gt;Traditional compilers reduce the need to stare at lower layers by replacing low-level control with defined semantics and testable guarantees. LLMs also reduce the need to read source code in many contexts, but the control you lose isn’t naturally bounded by a formal language definition. You can lose control all the way into becoming a consumer of software you meant to produce, and it’s frighteningly easy to accept that drift without noticing.&lt;&#x2F;p&gt;
&lt;p&gt;So: I don’t think we should fully accept the compiler analogy without qualification. As LLMs become a central toolchain component, we’ll need ways to strengthen the will to specify, and to make specification and verification feel as “normal” as writing code used to.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Test, don&#x27;t (just) verify</title>
        <published>2025-12-22T00:00:00+00:00</published>
        <updated>2025-12-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/test-dont-verify/"/>
        <id>https://alperenkeles.com/posts/test-dont-verify/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/test-dont-verify/">&lt;p&gt;AI &lt;em&gt;is&lt;&#x2F;em&gt; making formal verification go mainstream.&lt;&#x2F;p&gt;
&lt;p&gt;AI-assisted mechnical proving companies are raising funds on billion dollar &lt;a href=&quot;https:&#x2F;&#x2F;www.reuters.com&#x2F;business&#x2F;robinhood-ceos-math-focused-ai-startup-harmonic-valued-145-billion-latest-2025-11-25&#x2F;&quot;&gt;valuations&lt;&#x2F;a&gt;, new people are trying proof assistants,
overwhelmingly Lean, at unprecedented rates. Models achieve fascinating results in competitions previously considered to contain
some of the hardest problems in the world, such as IMO, ICPC, Putnam; as well as open problems in mathematics such as Erdös Problems.
It&#x27;s not just the hobbyists that are excited about AI-assisted proofs, from &lt;a href=&quot;https:&#x2F;&#x2F;terrytao.wordpress.com&#x2F;wp-content&#x2F;uploads&#x2F;2024&#x2F;03&#x2F;machine-jan-3.pdf&quot;&gt;Terry Tao&lt;&#x2F;a&gt;, to &lt;a href=&quot;https:&#x2F;&#x2F;martin.kleppmann.com&#x2F;2025&#x2F;12&#x2F;08&#x2F;ai-formal-verification.html&quot;&gt;Martin Kleppman&lt;&#x2F;a&gt;, to &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;ilyasergey&#x2F;status&#x2F;1989053674552004749&quot;&gt;Ilya Sergey&lt;&#x2F;a&gt;, prominent researchers around the world are excited and hopeful about the effects.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;formal-verification-the-goods&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#formal-verification-the-goods&quot; aria-label=&quot;Anchor link for: formal-verification-the-goods&quot;&gt;Formal Verification: The Goods&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Let me quickly give you a run down of the argument:&lt;&#x2F;p&gt;
&lt;p&gt;There are multiple complex challenges in formal verification. The first one, and the one that is very hard to solve technically,
is that most software in the world does not have a formal specification. A formal specification is a simpler mathematical description
of the system we build. Algorithms have formal specifications. Data structures, protocols, data formats, safety-critical systems typically
have formal specifications. The majority of the programs in the world doesn&#x27;t have a formal specification, hell, most of them don&#x27;t even have
informal specifications. At the limit, which is where we actually are, the specification of a program is itself, the implementation is the
specification. The lack of a formal specification makes it very hard to formally verify some piece of software, because what would you even
verify?&lt;&#x2F;p&gt;
&lt;p&gt;The second issue is, proof engineering, the practice of writing proofs for theorems about your systems, is very hard. The proofs have many domain
specific elements to them, a proof of a mathematical theorem will be very different from a proof about a programming language, and a proof about the programming
language will highly depend on the underlying constructs of its theoretical framework. The widest taught proof engineering book
is &lt;a href=&quot;https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&quot;&gt;Software Foundations&lt;&#x2F;a&gt;, and every chapter has a different style of proofs. Someone that went through
Volume 2: Programming Language Foundations will not find the problems in Volume 6: Separation Logic Foundations intuitive or obvious. There are other problems
such as the tooling for proof automation, brittleness of proofs, reusability of proofs etc. but I don&#x27;t find them particularly fundamental to proof engineering
itself but rather problems of the current generation, so we can leave those aside for now.&lt;&#x2F;p&gt;
&lt;p&gt;The rise of LLMs in programming vastly affects both of these points. It affects point number 1 because AI-assisted programming is a very natural fit
fot specification-driven development. AI-assisted programming pushes the limits of programming from what you can implement to what you can specify and
what you can &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;verify&lt;&#x2F;a&gt;. This is a great incentive for writing executable specifications,
because then you can put the LLM inside a loop until it achieves the said objective, irrespective of the means of the achievement.
&lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiable-abstractions&#x2F;&quot;&gt;I predict that&lt;&#x2F;a&gt; this will give rise to program optimizers and translators that will
be transformative of our work in those domains. However, tests are, as infamously they are, incomplete. Tests are great at finding bugs (actually
they are not so great most of the time, but that&#x27;s another discussion), but they &lt;strong&gt;cannot&lt;&#x2F;strong&gt; prove the absence of bugs. SQLite famously has
millions of tests, but researchers still find bugs in SQLite, similar situations arise in almost all software.&lt;&#x2F;p&gt;
&lt;p&gt;The only way to prove the absence of bugs is formal verification, and industry has seen great examples of this. Highly cited formal verification
projects include CompCert C Compiler, &lt;a href=&quot;https:&#x2F;&#x2F;users.cs.utah.edu&#x2F;~regehr&#x2F;papers&#x2F;pldi11-preprint.pdf&quot;&gt;the random testing of which against GCC and Clang&lt;&#x2F;a&gt;
has led to finding 79 bugs in GCC and 202 bugs in Clang, and only 2 bugs in CompCert in its &lt;em&gt;unverified&lt;&#x2F;em&gt; parser, finding no bugs in its verified compilation
pass, a striking win for formal verification. (Thanks to &lt;a href=&quot;https:&#x2F;&#x2F;emptysqua.re&#x2F;blog&#x2F;&quot;&gt;A. Jesse Jiryu Davis&lt;&#x2F;a&gt; informing me, I learned that researchers have
&lt;a href=&quot;https:&#x2F;&#x2F;www.cs.purdue.edu&#x2F;homes&#x2F;pfonseca&#x2F;papers&#x2F;eurosys2017-dsbugs.pdf&quot;&gt;studied&lt;&#x2F;a&gt; the source of failures in formally verified distributed systems, and
found that wrong assumptions about the unverified parts of the system are the likely culprit.)&lt;&#x2F;p&gt;
&lt;p&gt;This makes formal verification a prime target for AI-assisted programming. Given that we have a formal specification, we can just let the machine wander around
for hours, days, even weeks. If it comes back with a solution, we shall trust not to the probabilistic predictions of the so-called artificial intelligence,
but the symbolic proof checker that verifies the solution. This idea has always been at the core of formal verification, the ability to have unsound proof
generation coupled with sound proof checking has given rise to complex tactics, algorithms that produce proofs by searching them, to enable proof engineers
in great capacity.&lt;&#x2F;p&gt;
&lt;p&gt;This is not the end of the good news. AI is also very good at writing proofs, at least much better than the average software engineer. Given that we have
a perfect oracle, we can also turn the problem into an RLVR (Reinforcement Learning with Verifiable Rewards), which means we should expect the models to get
even better at it as time goes on as they did in chess, go, and many other similar problems. This is the promise behind the billion dollar valuations,
the companies started with impressive autoformalization techniques and automated provers for tackling competition problems and open conjectures, but
the real industrial value is at the core of automating software engineering by letting the engineer write a verbal description, autoformalized into a Lean
theorem, proven by the automated prover, and voila, we have our program that we can fully trust.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;or do we?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;formal-verification-the-bads&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#formal-verification-the-bads&quot; aria-label=&quot;Anchor link for: formal-verification-the-bads&quot;&gt;Formal Verification: The Bads&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I see the appeal, I like the idea, I trust the researchers building these systems, but I don&#x27;t love the overarching promises. This blog post
is my attempt at building a reasonable middle ground by laying out the goods (as I already did), and the bads (as I now will), and make my closing
remarks by reiterating the position of testing in this space, and in the future.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;autoformalization-is-a-shaky-ground&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#autoformalization-is-a-shaky-ground&quot; aria-label=&quot;Anchor link for: autoformalization-is-a-shaky-ground&quot;&gt;Autoformalization is a shaky ground&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I started this post by stating most programs in the world do not have formal specifications, followed by how AI is incentivizing us to write specifications,
and autoformalization takes the specifications, and makes them &lt;strong&gt;formal&lt;&#x2F;strong&gt;. In formal verification, there&#x27;s this concept of a &lt;em&gt;trusted computing base (TCB)&lt;&#x2F;em&gt;. TCB
is your Achilles&#x27; Heel, it&#x27;s the bottom of the ladder, where layers over layers of verification is built on, trusting a small core without verifying it, because
there must be a bottom of the ladder, we cannot build a circular verification argument, and the system cannot verify itself. (please fact check me on this
if I&#x27;m wrong, which is possible)&lt;&#x2F;p&gt;
&lt;p&gt;Autoformalization is part of the TCB in this AI-assisted verified programming paradigm, because one cannot mechanically verify that the verbally stated
specification indeed corresponds to the formalized one. There are several modes of usage, one issue is soundness, there might be mechanically verified scenarios
that would be rejected by the verbal specification. Another issue is completeness, the formalized model might reject valid scenarios in our descriptions.
Autoformalization part of the process requires and deserves our special attention as it&#x27;s one of the crucial points of failure in this verification process.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;proof-assistants-are-slow&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#proof-assistants-are-slow&quot; aria-label=&quot;Anchor link for: proof-assistants-are-slow&quot;&gt;Proof assistants are slow&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In a proof assistant, the primary goal is reasoning about programs and ease of verification. For instance, proof assistants, traditionally, don&#x27;t use our classic
two&#x27;s complement integers packed into words in our memory, they use Peano numbers, an encoding of natural numbers as inductive data structures:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lean&quot; class=&quot;language-lean z-code&quot;&gt;&lt;code class=&quot;language-lean&quot; data-lang=&quot;lean&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Inductive Nat : Type :=
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| zero : Nat
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| succ : Nat -&amp;gt; Nat.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This encoding doesn&#x27;t possess the concept of an integer overflow. Its inductive structure allows us to build theorems that hold for all natural numbers, not
just the ones that can fit in a word. It is also painfully slow, the computational complexity of &lt;code&gt;a + b&lt;&#x2F;code&gt;, an operation so fast in CPU that it&#x27;s literally
an instant, is &lt;code&gt;O(a + b)&lt;&#x2F;code&gt;, addition is linear in time to the added values instead of a constant operation. However, we would like to run verified code on
real life workloads, so we cannot wait for a million cycles to add 1M + 1M = 2M. There are 2 solutions to this problem, the first one is that you build a
more efficient encoding in the proof assistant, prove equivalence of the efficient but hard to reason encoding to the inefficient but simpler to reason one,
and use the efficient one in your computations. The other is once again, axiomatization, or broadening the TCB. Proof assistants offer a mechanism called
&lt;strong&gt;extraction&lt;&#x2F;strong&gt; that allows for extracting a piece of code in the language of the proof assistant (e.g Rocq) to a language with a larger ecosystem optimized
for running production workloads (e.g OCaml). Much of the extraction is a one-to-one correspondence between the languages via syntactic transformations,
but we can hijack the extraction to axiomatize our own types. We can turn Nat into unsigned integers, where &lt;code&gt;Nat.add&lt;&#x2F;code&gt; becomes &lt;code&gt;u64 + u64&lt;&#x2F;code&gt;. For instance,
in Rocq, Nats are extracted to BigInts, which should have the same semantics, but the &amp;quot;should&amp;quot; in this sentence carries the heavyweight. Without an accompanying
proof of correctness, we just put BigInt into the TCB.&lt;&#x2F;p&gt;
&lt;p&gt;Without broadening the TCB, the speed of a proof assistant will be limited by the large amount of pointer chasing that arises naturally with the use of
inductive types and their tree-inducing characteristics. There are many domains in which speed isn&#x27;t that big of a deal, but I think there&#x27;s also a
concern between speed and the requirement for correctness, as faster code tends to involve more complex language constructs such as concurrency,
bit manipulation, layout awareness, which leads to more bugs than their simpler counterparts. If we cannot reason about programs that are more likely
to have bugs, how much of the overarching problem are we tackling?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;verification-requires-models-and-models-are-very-hard-to-come-by&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#verification-requires-models-and-models-are-very-hard-to-come-by&quot; aria-label=&quot;Anchor link for: verification-requires-models-and-models-are-very-hard-to-come-by&quot;&gt;Verification requires models, and models are very hard to come by&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In order to verify some property of a system, one needs a model of the system. These models don&#x27;t grow on trees, they are crafted by domain
experts over a number of years. People have been building models for programs with pointers (separation logic), as well as programs with
concurrency, programs with randomness, programs with algebraic effects, and perhaps many more that I haven&#x27;t even heard of. In proving a property
of the system, we need a foundation for our reasoning process, which these theories give us for their respective domains. However, there are many
domains we don&#x27;t have good models for, one example is runtime performance. This has been a contentious issue in the computer science curriculum, the
asymptotic complexity does not translate to program behavior in real hardware. Modern CPUs have cache lines, speculative execution, branch prediction
that makes the plain old abstract machine used in asymptotical analysis obsolete for many scenarios. We do not even have a single hardware to conform
our model to, we have tens of different configurations of hardware, each of which will give different results in our measurements. If we tried to prove
that some piece of code has a better result for a specific memory&#x2F;processor pair than another one, we would have a massive job on our hands, I personally
don&#x27;t even know where I would start with.&lt;&#x2F;p&gt;
&lt;p&gt;Contrast this to testing, where you can just spin up the same algorithm on both machines, run our benchmarks, which will be our final ground truth. Testing
is almost universally considered inferior to formal verification, it is what you do when you don&#x27;t have the resources to justify verification, because if you
had the opportunity to spend the time, proving absence of bugs, or universal facts about your system, would be much more valuable than codifiying the results
of singular measurements. I am here to tell you that there are tests we can write that could not be formally verified, because while building the underlying
models for verification might be hard, just using the real hardware for our measurements can be much easier.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;verification-doesn-t-tell-you-that-you-are-going-down-the-wrong-path&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#verification-doesn-t-tell-you-that-you-are-going-down-the-wrong-path&quot; aria-label=&quot;Anchor link for: verification-doesn-t-tell-you-that-you-are-going-down-the-wrong-path&quot;&gt;Verification doesn&#x27;t tell you that you are going down the wrong path&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In games, there are clear winners and losers. In verification, you can prove that your theorem is correct, you can prove that your theorem is incorrect, but
absence of a proof for a theorem does not imply that the theorem is incorrect, it is possible that you just haven&#x27;t found the proof. This means the feedback
you get when writing a proof is limited as you cannot rely on your inability to progress as a signal about your theorem, it is plausible that you are the problem.
This is why QuickChick, a testing tool descending from the famous QuickCheck of Haskell that introduced Property-Based Testing to the world, exists in Rocq
ecosystem as one of the three most popular packages. If verification was strictly superior to testing, QuickChick would have no reason to exist, but it serves
a very crucial role that the verification process needs, &lt;strong&gt;falsification&lt;&#x2F;strong&gt;. I had said that the absence of a proof does not imply that a theorem is wrong, but the witness of a violation of the theorem definitely does. Random testing is the prime suspect for finding such counterexamples, pulling the verifier out of the
rabbit hole of going through many useless paths in the proof search before giving up, because the theorem is ultimately wrong, there is no proof to be found.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;random-testing-and-formal-verification&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#random-testing-and-formal-verification&quot; aria-label=&quot;Anchor link for: random-testing-and-formal-verification&quot;&gt;Random Testing and Formal Verification&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I have given examples of tests that formal verification is incapable of modeling, and examples of tests that complement formal verification process by creating
a short that falsifies false theorems instead of trying to prove them in vain. The synergy between testing and formal verification doesn&#x27;t end here, I am a firm
supporter of &lt;a href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;blogs&#x2F;opensource&#x2F;lean-into-verified-software-development&#x2F;&quot;&gt;Verification-Guided Development (VGD)&lt;&#x2F;a&gt;, which in addition to leveraging this synergy, solves the problem of proof
assistants being too slow. In verification
guided development, we implement two versions of the same system, one is the simpler to reason, verified version, the other is the complex, production one. We then
test the property that the production system conforms to the reference implementation that is verified by running them with the same inputs and asserting that
the result is the same every single time. VGD &lt;em&gt;lifts&lt;&#x2F;em&gt; the proof to the production implementation from the slower one implemented in the proof assistant by leveraging
differential random testing, which allows for building a best-of-both-worlds system that is both correct and fast. Below is an image taken from &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2407.01688&quot;&gt;the paper&lt;&#x2F;a&gt;
that (as far as I know) introduced the notion of VGD, explaining their workflow.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;test-dont-verify&#x2F;image.png&quot; alt=&quot;cedar vgd&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;VGD doesn&#x27;t solve all the issues I mention in the rest of the post, but it removes the slowness out of the mix. As we have a production implementation ready to be tested thoroughly,
we can make all kinds of measurements that fall out of the purview of verification, but into the realm of testing. It levels the playing field between the verified realm of computing
and the unverified one, reducing the downsides of the verification leveraging testing.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;closing-remarks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#closing-remarks&quot; aria-label=&quot;Anchor link for: closing-remarks&quot;&gt;Closing Remarks&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I would like to state it once more for everyone:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;I see the appeal, I like the idea, I trust the researchers building these systems, but I don&#x27;t love the overarching promises. This blog post
is my attempt at building a reasonable middle ground by laying out the goods, and the bads, and make my closing
remarks by reiterating the position of testing in this space, and in the future.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I believe random testing plays as important of a role as formal verification in the future of software engineering. We will not have magically formally verified systems
in many domains, but as autoformalization tools get better, we will have many, many more formal specifications. Random testing benefits from these formal specifications
in different ways than formal verification, but both have their places. Proof systems will be incomplete without the accompanying testing tools, and the testing tools
will be incomplete without proofs of correctness, it is only possible via some combination of verification and testing that we can achieve our ideals of the future of
software engineering, live in a world where bugs are considered anomalies instead of the norm, where correctness is a virtue, and the bugs in our systems are as old and
as forgotten as the diseases we learned to cure and put away.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Formal Metotlar ve Kanıtlı Programlama Hakkında</title>
        <published>2025-12-18T00:00:00+00:00</published>
        <updated>2025-12-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/kanitli-programlama/"/>
        <id>https://alperenkeles.com/posts/kanitli-programlama/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/kanitli-programlama/">&lt;p&gt;Hatalar, günümüzde programlamanın ve yazılım mühendisliğinin ayrılmaz bir parçası. Yazdığımız programlarda hatalar olacağını, bu hataların
kaçınılmaz olduğunu, bu kaçınılmazlığın değiştirilemez olduğunu kabul ediyoruz, programlama etrafındaki kültürü bu şekilde geliştirdik.
Linux Kernel&#x27;ından kullandığımız tarayıcılara, tarayıcılarda ziyaret ettiğimiz web sitelerine, bu sitelerin mobil uygulamalarına kullandığımız
her yazılım ürününde hataların olmasını bekliyoruz. Diğer yanda, bilgisayar bilimlerinin niş bir köşesinde &lt;strong&gt;formal metotlar&lt;&#x2F;strong&gt; adında,
yazdığımız programların doğruluğunu arttırmak ve geliştirmek üzerine kurulu bir alan var. Formal metotlar, programlama dillerinin
ve onları kullanarak yazdığımız programların teorisini ve anlamını inceleyen, yeri geldiğinde programlarımızı analiz ederek onlardaki
hataları keşfedebilen, yeri geldiğinde bizim amaçlarımıza uygun programları sentezleyen, yeri geldiğinde ise yazdığımız programlarda
hiçbir hata olmadığını matematiksel olarak kanıtlayabilen metotlar. Bu yazıda bunların sonuncusundan, yazdığımız programların doğruluğunu
kanıtlayabildiğimiz yöntemlerden, teknolojilerden, programlama dillerinden bahsedeceğim.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Buna girmeden önce, bu yazının neden bugünün bağlamında önemli olduğuna dair küçük bir dipnot açayım:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Formal metotlar ve kanıtlı programlama, tarihin çok büyük bir kısmında kullanım olarak zor ve niş bir pozisyonda kaldı.
Bugün bu alanlarla uğraşan insanları incelediğinizde belki %90&#x27;ının akademik ortamlarda, akademik projelerde bununla uğraştığını
görebilirsiniz. Bugün, bu gerçekliğin hızla değişebileceği bir ortama giriyoruz, Martin Kleppman&#x27;ın geçtiğimiz hafta
&lt;a href=&quot;https:&#x2F;&#x2F;martin.kleppmann.com&#x2F;2025&#x2F;12&#x2F;08&#x2F;ai-formal-verification.html&quot;&gt;&amp;quot;Yapay Zeka Formal Doğrulamayı Anaakım Hale Getirecek&amp;quot;&lt;&#x2F;a&gt; yazısıyla,
kanıtlı programlama yapabildiğimiz Lean programlama dilinde yapay zekayla matematik kanıtlama üzerine ürünler geliştiren &lt;a href=&quot;https:&#x2F;&#x2F;harmonic.fun&#x2F;news#blog-post-aristotle-tech-report&quot;&gt;Harmonic&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;axiommath.ai&#x2F;territory&#x2F;building-the-reasoning-engine-at-axiom&quot;&gt;Axiom&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;venturebeat.com&#x2F;ai&#x2F;nous-research-just-released-nomos-1-an-open-source-ai-that-ranks-second-on&quot;&gt;Nous&lt;&#x2F;a&gt; gibi girişimlerin yaygınlaşmasıyla,
&lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2510.09907v1&quot;&gt;Claude Code&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;kiro.dev&#x2F;blog&#x2F;property-based-testing&#x2F;&quot;&gt;Kiro&lt;&#x2F;a&gt; gibi yapay zeka destekli kod
editörlerinin hafif formal metotlar (lightweight formal methods) adıyla anılan Property-Based Testing özelliğini eklemesiyle, yapay zekanın
ürettiği kodları &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;doğrulama probleminin&lt;&#x2F;a&gt; çözümüne giden yolun formal metotlar
olduğuna dair ciddi belirtiler görüyoruz. Ben şahsen bu gidişatın devam edeceğine, ve kanıtlama programlamanın önemli bir rol oynayacağına
inanıyorum, o yüzden bugün formal metotları ana akıma taşımak her zamankinden daha kolay, ve belki de her zamankinden daha değerli.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;basit-gozuken-programlarin-tehlikelerine-bir-ornek&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#basit-gozuken-programlarin-tehlikelerine-bir-ornek&quot; aria-label=&quot;Anchor link for: basit-gozuken-programlarin-tehlikelerine-bir-ornek&quot;&gt;Basit Gözüken Programların Tehlikelerine Bir Örnek&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Programlama dillerindeki numerik tipler (&lt;code&gt;int&lt;&#x2F;code&gt;, &lt;code&gt;uint&lt;&#x2F;code&gt;, &lt;code&gt;float&lt;&#x2F;code&gt;, &lt;code&gt;double&lt;&#x2F;code&gt;, &lt;code&gt;number&lt;&#x2F;code&gt;) programlamaya başladığımız günden
itibaren elimizin altında olan yapılar. Doğal sayılarla yapılacak işlemleri &lt;code&gt;int&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;uint&lt;&#x2F;code&gt; gibi tamsayı ve doğal sayıları
temsil eden tiplerle, reel ya da rasyonel sayılarla yapılacak işlemleri ise &lt;code&gt;float&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;double&lt;&#x2F;code&gt; (bundan sonra Javascript&#x27;teki
versiyonuna sadık kalarak &lt;code&gt;number&lt;&#x2F;code&gt; diyeceğim) tipleriyle yapıyoruz. Bu tipler, her ne kadar matematiksel objeleri temsil etmede
kullanılsa da o objelerin tüm özelliklerine sahip değiller. Bunun en klasik örneklerinden birisi &lt;code&gt;number&lt;&#x2F;code&gt; tipinin toplamada
alttaki reel sayıdan beklenmeyen sonuçlar üretmesi.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js z-code&quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; false&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; 0.30000000000000004&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu örnekte matematiksel olarak &lt;code&gt;0.1 + 0.2 = 0.3&lt;&#x2F;code&gt; olmasını beklerken, modern bilgisayarların kullandığı IEEE-754 Floating Point
standardı beklediğimiz sonuca yakın, ancak farklı bir çıktı veriyor. Bu çok da büyük bir problem değil gibi gözükebilir, daha
ciddi bir sıkıntıyı inceleyelim.&lt;&#x2F;p&gt;
&lt;p&gt;Klasik, okul yıllarında ilk yazdığımız algoritmalardan birini, İkili Aramayı (Binary Search) inceleyelim:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-java&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-java&quot;&gt;&lt;span class=&quot;z-variable z-function z-java&quot;&gt;binarySearch&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-array z-java&quot;&gt;[]&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-separator z-comma z-java&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;length &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-while z-java&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;&#x2F;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; midVal &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a[mid]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;             low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;         &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;             high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;         &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;             &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; mid&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; key found
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;     &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;     &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;  &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; key not found.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;İsterseniz bu noktada bir durun, bu koddaki hatayı görmeye çalışın.&lt;&#x2F;p&gt;
&lt;p&gt;Hata, 6. satırdaki iki tamsayının ortalamasını hesaplayan kodda (&lt;code&gt;int mid = (low + high) &#x2F; 2;&lt;&#x2F;code&gt;).
Problem, &lt;code&gt;int&lt;&#x2F;code&gt;&#x27;in tamsayı olmaması, &lt;code&gt;int&lt;&#x2F;code&gt; bilgisayarımızın hafızasında herhangi bir noktada yer alan
32 bitlik bir sekansın tamsayı olarak okunması. 32 bitlik bit sekansı bize 2^32 farklı değeri temsil
etme fırsatı veriyor, bunlar da &lt;code&gt;int&lt;&#x2F;code&gt; tipi için &lt;code&gt;[-2^31, 2^31 - 1]&lt;&#x2F;code&gt; aralığı. Eğer ki &lt;code&gt;low + high&lt;&#x2F;code&gt; 2^31&#x27;den
daha büyükse, üste taşma (overflow) dediğimiz fenomen ortaya çıkıyor, işlemin sonucunda ortaya çıkan bit sekansı
matematiksel hesaplama ile bilgisayarlı hesaplamanın birbirinden ayrışmasına sebep oluyor. Bu hata basit,
tecrübeli birinin yapmayacağı bir hata gibi görünebilir, ancak &lt;a href=&quot;https:&#x2F;&#x2F;research.google&#x2F;blog&#x2F;extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken&#x2F;&quot;&gt;Java standard kütüphanesinde&lt;&#x2F;a&gt; bile karşılaşılan
bir hata bu.&lt;&#x2F;p&gt;
&lt;p&gt;Peki, &lt;strong&gt;formal metotlar bu problemi çözebilir miydi?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Önceklikle cevap, &lt;strong&gt;evet&lt;&#x2F;strong&gt;. Bu problemi çözebilecek birkaç farklı yöntem mevcut. Ancak problemi keşfetmeden önce,
problemi tanımlamamız gerekiyor. Bu örnekteki problem, tamsayı taşması (integer overflow). Neye ihtiyacımız var?
Programda herhangi bir noktada tamsayı taşması ihtimali varsa bunu keşfeden, bize raporlayan bir metodolojiye.
Hadi gelin bunun için programdaki tüm tamsayıları alabilecekleri aralıklarla işaretleyelim.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; (low : [0, 0])
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Burada `a.length: int` aslında bize [-2^31, 2^31 - 1] değerini verirdi,
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; ancak uzunluğun hesaplanma yönteminden dolayı hiçbir zaman negatif
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; olamayacağını biliyoruz, o yüzden elimizde [0, 2^31 - 1] var.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;length &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; a.length : [0, 2^31 - 1] =&amp;gt; high : [-1, 2^31 - 2]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sıradaki işlem daha kompleks, çünkü elimizde 2 farklı seçenek var. While döngüsündeki
kontrole göre içine girip işleme devam edebiliriz, ya da döngüyü geçip fonksiyonun sonuna
atlayabiliriz, kolay olduğu için sona atladığımız duruma bakalım. Bunun için elimizdeki
araçlardan bir tanesi, döngü açımı (loop unrolling). Döngünün bir iterasyonunu bir &lt;code&gt;if&lt;&#x2F;code&gt;
olarak açıp, aynı anlamı (semantic) koruyabiliyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Döngünün 1. iterasyonuna giriş yaptık.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;&#x2F;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; midVal &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a[mid]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;             low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;         &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;             high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;         &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;             &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; mid&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; key found 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Döngünün 1. iterasyonu bitti, 2. iterasyondan devam ediyoruz.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-loop z-while z-java&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;            &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;&#x2F;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;            &lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; midVal &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a[mid]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;                low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;                high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;                &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; mid&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; key found
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;        &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;    &lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Döngü 1 ya da daha fazla iterasyon sonrasında bitti.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;  &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; key not found.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Elimizdeki bir diğer araç ise &lt;code&gt;if&lt;&#x2F;code&gt; için. &lt;code&gt;if&lt;&#x2F;code&gt; gördüğümüz noktada, 2 ihtimal var,
ya &lt;code&gt;if&lt;&#x2F;code&gt; içindeki kontrol doğrudur ve içerideki hesaplamayı yaparız, ya da değer
yanlıştır ve &lt;code&gt;if&lt;&#x2F;code&gt; den bir sonraki hesaplamayla devam ederiz. Öncelikle 0 döngü durumundan,
yani &lt;code&gt;if&lt;&#x2F;code&gt; içerisindeki kontrolün ilk iterasyona girmeden yanlış olmasından başlayalım.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Var olan değişkenleri hatırlayalım
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; (low : [0, 0])
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;length &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; (high : [-1, 2^31 - 2])
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-java&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; kontrol yanlış olmalı, demek ki (!low &amp;lt;= high), bu da demek ki (low &amp;gt; high) 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-java&quot;&gt;.&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-block z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-java&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; (low &amp;gt; high) olan tek bir durum var, o da low = 0, high = -1.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt;  &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; dolayısıyla (- low + 1) = -1, taşma yok.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Tüm detayları vermeye çalıştığımda burası çok uzayacak, dolayısıyla buradan itibaren biraz hızlı gideceğim. Diğer
durumda &lt;code&gt;low &amp;lt;= high&lt;&#x2F;code&gt; olmalı, dolayısıyla &lt;code&gt;low: [0, 0]&lt;&#x2F;code&gt;, &lt;code&gt;high: [0, 2^31-2]&lt;&#x2F;code&gt; ile devam ediyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;&#x2F;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Aralıklar üzerinde toplama ve bölme işlemi: ([0, 0] + [0, 2^31-2]) &#x2F; 2 = [0, 2^30 - 1]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; midVal &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; a[mid]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Dizinin elemanları hakkında bir bilgi sahibi değiliz, dolayısıyla midVal: [-2^31, 2^31 - 1]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Eğer buraya kadarki hesaplamalarımız bizi bir kontrolün yanlış olduğu sonucuna ulaştırırsa,
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; o dalı atlayabiliriz. Şu anda böyle bir sonuca ulaşamadığımız için 3 daldan ilerlemeleri ayrıca incelememiz gerekecek.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; midVal: [-2^31, 2^31 - 1], key: [-2^31, 2^31 - 1], midVal &amp;lt; key = ?? 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    low &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; midVal &amp;lt; key = true, mid: [0, 2^30], dolayısıyla low: [1, 2^30 + 1]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-if z-java&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;midVal &lt;span class=&quot;z-keyword z-operator z-comparison z-java&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; key&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; midVal: [-2^31, 2^31 - 1], key: [-2^31, 2^31 - 1], midVal &amp;lt; key = false, midVal &amp;gt; key = false
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;    high &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; midVal &amp;gt; key = true, mid: [0, 2^30], dolayısıyla high: [-1, 2^30 - 1]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-else z-java&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; midVal: [-2^31, 2^31 - 1], key: [-2^31, 2^31 - 1], midVal &amp;lt; key = false, midVal &amp;gt; key = false
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; (midVal &amp;lt; key) ve (midVal &amp;gt; key) yanlış, geriye yalnızca (midVal = key) kalıyor, dolayısıyla aradığımızı bulduk.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-java&quot;&gt;return&lt;&#x2F;span&gt; mid&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; aradığımızı bulduğumuz için fonksiyondan çıktık, bu dalın devamında incelenecek bir şey yok, ilk
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;                &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; iki dala devam etmeliyiz.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu hesaplamanın sonucunda, elimizde artık 3 farklı evren var. Birisinde birinci iterasyonda aradığımız elemanı bulduk,
dolayısıyla işimiz bitti, devam etmemiz gerek yok. Diğerinde aradığımız eleman ortanın solunda, diğerinde sağında. Hadi
gelin aradığımız elemanın ortanın sağında olduğu &lt;code&gt;midVal &amp;lt; key&lt;&#x2F;code&gt; dalında, &lt;code&gt;low = mid + 1&lt;&#x2F;code&gt; sonucunda elimizdeki aralıkların
&lt;code&gt;midVal: [-2^31, 2^31 - 1]&lt;&#x2F;code&gt;, &lt;code&gt;key: [-2^31 + 1, 2^31 - 1]&lt;&#x2F;code&gt;, &lt;code&gt;low: [1, 2^30 + 1]&lt;&#x2F;code&gt;, &lt;code&gt;high: [0, 2^31-1]&lt;&#x2F;code&gt; evrenine gidelim.&lt;&#x2F;p&gt;
&lt;p&gt;Bu evrende, yine yukarda yaptığımız While döngüsünü açma, ikiye bölme, &lt;code&gt;if&lt;&#x2F;code&gt; kontrolünün içerisinde girme işlerini yapacağız.
Bunlar sonucunda &lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;java&quot; class=&quot;language-java z-code&quot;&gt;&lt;code class=&quot;language-java&quot; data-lang=&quot;java&quot;&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; low: [1, 2^30 + 1]`, high: [0, 2^31-2]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-java&quot;&gt;&lt;span class=&quot;z-storage z-type z-primitive z-java&quot;&gt;int&lt;&#x2F;span&gt; mid &lt;span class=&quot;z-meta z-assignment z-rhs z-java&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-java&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-java&quot;&gt;(&lt;&#x2F;span&gt;low &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;+&lt;&#x2F;span&gt; high&lt;span class=&quot;z-punctuation z-section z-parens z-end z-java&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-java&quot;&gt;&#x2F;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-java&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-java&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-java&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-java&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; low + high = [1, 2^30 + 1] + [0, 2^31-2] = [0, 2^31 + 2^30 + 1]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;32-bit tamsayılarla ifade edebildiğimiz en büyük tamsayının 2^31-1 olduğunu daha önce söylemiştik, ancak
fark ettiyseniz bu işlem sonucunda ortaya çıkan aralık bu sınırı aştı &lt;code&gt;[0, 2^31 + 2^30 + 1]&lt;&#x2F;code&gt;. Dolayısıyla
bu analiz ile kullanıcıya geri dönüp, senin bu işlemin potansiyel olarak senin tipinin sınırlarını aşıyor
diyebiliriz.&lt;&#x2F;p&gt;
&lt;p&gt;Burada yaptığımız analiz bir tip statik kod analizi (static code analysis), bu tarz analizler yalnızca tamsayı taşmalarına mı yarıyor, hayır.
Mesela &lt;a href=&quot;https:&#x2F;&#x2F;fbinfer.com&quot;&gt;Facebook Infer&lt;&#x2F;a&gt; benzer analizleri milyonlarca satır C++ koduna uygulayarak koddaki hafıza güvenliği hatalarını
otomatik bir şekilde keşfetmeye, &lt;code&gt;NULL&lt;&#x2F;code&gt; işaretçileri (pointer) statik olarak keşfetmeye çalışıyor. Tahmin edebileceğiniz üzere bu yöntemlerin
hepsinin sınırları var, yoksa bugün Rust diye bir dile ihtiyacımız olmazdı, statik olarak C++&#x27;daki tüm hafıza güvenliği problemlerini
çözebilirdik, ancak çözemiyoruz. Dilin tasarımı, bizim o dil ile ilgili yapabileceğimiz analizleri kısıtlıyor. Dilde yapabildiğiniz her
dinamik işlem, statik olarak keşfedebileceğimiz bilgi miktarını azaltıyor. Bu sebepten ki Rust derleyicisinin reddedeceği hafıza
güvenliğinden yoksun programları C++ kabul ediyor, ya da herhangi bir statik programlama dilinin derleme zamanında engelleyeceği
hatalar ile Python, Javascript gibi dillerde çalışma esnasında karşılaşıyoruz. Java dilinin üzerine yazılan statik analiz araçlarının
en büyük kısıtlamalarından birisi Java&#x27;daki yansıma (reflection) özelliğinin analizin kesinliğini düşürüp analizi faydasız hale getirmesi.&lt;&#x2F;p&gt;
&lt;p&gt;Buraya kadar daha üst-seviye (meta level) doğruluk kavramlarından bahsettik, programın her noktasında tutması gereken, programlama dilinin
kendisi ile direkt olarak bağlı nitelikler bunlar, aynı zamanda bunlara bir çeşit güvenlik niteliği (safety property) diyoruz, çünkü
hiçbir zaman bozulmaması gereken nitelikler belirleyip, programımızın aldığı herhangi bir yol bu nitelikleri bozabiliyor mu onu arıyoruz.
Formal metotların programlamanın tamamına etki etmesi için, çok daha çeşitli niteliklere (properties) ihtiyacımız var, ve dahası
programcıların bu nitelikleri yazabilmesi için bir dil sağlamalıyız ki, doğruluk yalnızca bizim düşündüğümüz ve tasarladığımız
niteliklerden ibaret olmasın.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tip-odakli-gelistirme&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tip-odakli-gelistirme&quot; aria-label=&quot;Anchor link for: tip-odakli-gelistirme&quot;&gt;Tip-Odaklı Geliştirme&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Bu dillerden ilki, daha önce de bahsettiğim üzere, tipler. &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;tip-sistemleri-hakkinda&#x2F;&quot;&gt;Tip sistemleri&lt;&#x2F;a&gt;,
bizim yazdığımız programları kısıtlayabilmemizi, tipleri kullanarak programların ulaşmaması gereken durumlardan kaçınmamıza izin veriyor.
Bundan bazen tip-odaklı geliştirme (type-driven programlama) olarak bahsedildiğini görebilirsiniz, bu yaklaşımın mottosu &amp;quot;Hatalı
durumları temsil edilemez yap&amp;quot; (&lt;a href=&quot;https:&#x2F;&#x2F;lambda-the-ultimate.org&#x2F;node&#x2F;2216#comment-31690&quot;&gt;Make invalid states unrepresentable&lt;&#x2F;a&gt;).
Çoğu zaman, programlarımızda tip sisteminin izin verdiği, yani derleyicinin bir hata vermeyeceği, ancak aslında mümkün olmaması gereken
ihtimaller var. Tip-odaklı geliştirme bunları ortadan kaldırabiliyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Insan&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;isim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;okul&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-optional z-ts&quot;&gt;?&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;sirket&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-optional z-ts&quot;&gt;?&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yukarıdaki tip, bir kişiyi tanımlarken, &lt;code&gt;okul&lt;&#x2F;code&gt; ya da &lt;code&gt;sirket&lt;&#x2F;code&gt; alanlarının &lt;code&gt;undefined&lt;&#x2F;code&gt; olmasına izin veriyor. Alttaki veri modeline göre
bunun doğru olduğu noktalar vardır, ancak şu anda tartıştığımız evrende bir kişi ya okula, ya da şirkete gidebiliyor olsun. Yani bunların
ikisi de aynı anda var olamaz, ikisi de aynı anda boş da olamaz, ancak veri modelimiz buna izin veriyor. &lt;code&gt;{isim: &amp;quot;Alp&amp;quot;} as Insan&lt;&#x2F;code&gt; yazmak
tip hatası vermeyecek. Alternatif olarak, bu tipi aşağıdaki gibi tanımlayabilirdik:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Insan&lt;&#x2F;span&gt;   &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;isim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-type z-paren z-cover z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Ogrenci&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Calisan&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Ogrenci&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;okul&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Calisan&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;sirket&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu örnekte, &lt;code&gt;Insan&lt;&#x2F;code&gt; ya bir öğrenci olup okula sahip olacak, ya da bir çalışan olup şirkete; hiçbirisine sahip olmadığı durumlarda tip
sistemi bize hata verdiği için o ihtimal çalışma zamanında var olmayacak.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kontrat-bazli-dizayn-design-by-contract&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kontrat-bazli-dizayn-design-by-contract&quot; aria-label=&quot;Anchor link for: kontrat-bazli-dizayn-design-by-contract&quot;&gt;Kontrat Bazlı Dizayn (Design by Contract)&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Kontratlar fikir olarak nereden çıktı emin değilim, ancak benim şahsen bildiğim en eski popüler örnek Eiffel programlama dili. Kontratlar
bizim alttaki programa dair ne tarz varsayımlarımızın olduğunu (assumptions, preconditions), ne tarz sonuçlar beklediğimizi (postconditions),
programın hangi nitelikleri koruduğunu (invariants) tanımlamamızı sağlıyor. Aşağıda, Dafny programlama dilinde &lt;code&gt;Max&lt;&#x2F;code&gt; fonksiyonunun
tanımı var:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;dafny&quot; class=&quot;language-dafny z-code&quot;&gt;&lt;code class=&quot;language-dafny&quot; data-lang=&quot;dafny&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;method Max(a: int, b: int) returns (m: int)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  ensures m &amp;gt;= a
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  ensures m &amp;gt;= b
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  ensures m == a || m == b
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;{
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  if a &amp;gt;= b {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    m := a;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  } else {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    m := b;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Kontrat diyor ki, metodun ürettiği &lt;code&gt;m&lt;&#x2F;code&gt; değeri hem &lt;code&gt;a&lt;&#x2F;code&gt; hem de &lt;code&gt;b&lt;&#x2F;code&gt; parametrelerinden büyük eşit olmalı, hem de ikisinden
birisine eşit olmalıdır. Kontratın kendisi, fonksiyonun implementasyonundan bağımsız olarak neyin doğru olduğunu tanımlıyor,
Dafny ise derleme zamanında implementasyonun bu kontrata uyduğunu kanıtlıyor. Eğer implementasyonda bir hata varsa, mesela
tüm fonksiyonu silip yalnızca &lt;code&gt;m := b&lt;&#x2F;code&gt; yazarsak, &lt;code&gt;ensures m &amp;gt;= a&lt;&#x2F;code&gt; şartı kanıtlanamadığı için Dafny programı derlemeyecek.&lt;&#x2F;p&gt;
&lt;p&gt;Gelin bir de yukarıda bahsettiğimiz &lt;code&gt;midpoint&lt;&#x2F;code&gt; örneğine bakalım:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;dafny&quot; class=&quot;language-dafny z-code&quot;&gt;&lt;code class=&quot;language-dafny&quot; data-lang=&quot;dafny&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;method Midpoint(low: int, high: int) returns (mid: int)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    requires low &amp;lt;= high
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ensures mid * 2 &amp;gt;= low + high - 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ensures mid * 2 &amp;lt;= low + high
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;{
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    mid := (low + high) &#x2F; 2;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dafny&#x27;de &lt;code&gt;int&lt;&#x2F;code&gt; çoğu anaakım programlama dilinin aksine 32 bitlik değil, dolayısıyla bu örnekte taşma konusunda endişelenmemiz
gerekmiyor. Onun yerine &lt;code&gt;requires&lt;&#x2F;code&gt; bize bu fonksiyonun hangi şartlar altında çağırılabildiğini söylüyor, ancak &lt;code&gt;low &amp;lt;= high&lt;&#x2F;code&gt; durumunda
bu fonksiyonu çağırabildiğimiz için içerde &lt;code&gt;if a &amp;lt; b&lt;&#x2F;code&gt; kontrolünü tekrar yapmadan sonucu hesaplayabiliyoruz, &lt;code&gt;midpoint&lt;&#x2F;code&gt;&#x27;i ise
çarpma işleminin sonucu üzerinden tanımlıyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Burada küçük programlardan bahsettiğime bakmayın, AWS yeni yazdığı Yetkilendirme Politikaları Dili (Authorization Policy Language) olan
&lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.science&#x2F;blog&#x2F;how-we-built-cedar-with-automated-reasoning-and-differential-testing&quot;&gt;Cedar&lt;&#x2F;a&gt;&#x27;ı önce Dafny&#x27;de geliştirdi,
benzer şekilde &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;aws&#x2F;aws-encryption-sdk&quot;&gt;şifreleme kütüphanesini&lt;&#x2F;a&gt; Dafny&#x27;de kanıtladı.
Dafny&#x27;deki kontratlar statik kontratlar, pek çok programlama dilinde çalışma zamanında kontrol edilen dinamik kontrat kütüphaneleri
de var, Python&#x27;da &lt;a href=&quot;https:&#x2F;&#x2F;deal.readthedocs.io&#x2F;index.html&quot;&gt;Deal&lt;&#x2F;a&gt; var, &lt;a href=&quot;https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;guide&#x2F;contracts.html&quot;&gt;Racket&lt;&#x2F;a&gt; ise kontratlara dil seviyesinde bir özellik olarak sahip.
Bazı programlama dillerinde ise Dafny tipi statik kontrat sistemleri geliştiriliyor, Rust&#x27;ta Verus ve Flux, Haskell&#x27;da Liquid Haskell ile programlarımızın
belli özelliklerini statik olarak kanıtlayabiliyoruz. Bugün bu sistemleri kullanmak, bu sistemlerin üzerine kanıtlı programlar ve kütüphaneler geliştirmek
bugün için çok ciddi uzmanlık ve zaman gerektirdse de asıl soru şu aslında, yarın ne olacak?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Yapay zeka yardımıyla kanıtlamalı programlama yapabildiğimiz bir dünyada bu tarz teknolojileri kullanarak yazdığımız programların
doğruluğunu arttırabilir miyiz?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interaktif-teorem-kanitlama-interactive-theorem-proving&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#interaktif-teorem-kanitlama-interactive-theorem-proving&quot; aria-label=&quot;Anchor link for: interaktif-teorem-kanitlama-interactive-theorem-proving&quot;&gt;İnteraktif Teorem Kanıtlama (Interactive Theorem Proving)&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Buraya kadarki bahsettiğim metotlarda kanıtlama işleminin kendisini biz yapmadık. Tip sistemleri programların bizim onlara verdiğimiz sınırlamalarını
otomatik olarak kanıtlıyor, kanıtlayamadığında bize tip hatası veriyor. Statik kontrat sistemleri Hoare Mantığı (Hoare Logic) ile programların
yazdığımız kontratlara uyduğunu otomatik olarak kanıtlıyor, sistemin otomatik kanıtlamada zorlandığı noktalarda biz biraz yardımcı olabilsek de
elle kanıt yazılması için tasarlanmamış bir sistemde kanıt yazmak, kanıt yazılması için tasarlanmış sistemlerde yazmaktan çok daha zor, şimdi bu sistemlerden,
interaktif teorem kanıtlayıcılardan (interactive theorem prover) bahsedeceğim.&lt;&#x2F;p&gt;
&lt;p&gt;İnteraktif teorem kanıtlama araçları kendi içerisinde teknik detaylarına göre farklı kollara ayrılıyor, misal Isabelle&#x2F;HOL görece daha eski, bizim alışık olduğumuz
klasik mantık üzerine kurulu bir kanıt sistemi kullanıyor. Ben, bağlama da uygun olması için, görece yeni bir kanıtlayıcı olan Lean&#x27;e odaklanacağım. Lean,
bizim alışık olduğumuz matematiksel modellerden uzak, CIC (Calculus of Inductive Constructions) adında bir matematiksel temel üzerine kurulu. Bu temelin bize sağladığı
ana fayda ise, Curry-Howard Denkliği (Curry-Howard Correspondence). Curry-Howard Denkliği bize diyor ki, bizim yazdığımız programlardaki tipler aslında teoremler,
o tiplere uyan programlar ise o teoremlerin kanıtı. Dolayısıyla, biz bir teoremi dilimizde bir teorem olarak yazarsak, yazdığımız programın bir tip hatası vermemesi
o teoremi kanıtladığımız anlamına geliyor. Gelin biraz pratik örneklerle bakalım:&lt;&#x2F;p&gt;
&lt;p&gt;Bir tipi aşağıdaki gibi tanımlıyoruz, aşağıdaki tanım diyor ki, tümevarımsal olarak, bir doğal sayı ya sıfırdır, ya da bir doğal sayının ardılıdır (successor).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lean&quot; class=&quot;language-lean z-code&quot;&gt;&lt;code class=&quot;language-lean&quot; data-lang=&quot;lean&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Inductive Nat : Type
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| zero : Nat
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| succ : Nat -&amp;gt; Nat
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu tip üzerinde toplama işlemini aşağıdaki gibi tanımlayabiliriz:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lean&quot; class=&quot;language-lean z-code&quot;&gt;&lt;code class=&quot;language-lean&quot; data-lang=&quot;lean&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;def add : Nat -&amp;gt; Nat -&amp;gt; Nat
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| Nat.zero,     m =&amp;gt; m 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;| Nat.succ n,   m =&amp;gt; Nat.succ (add n m)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada &lt;code&gt;add&lt;&#x2F;code&gt; fonksiyonu, ilk parametresi &lt;code&gt;Nat.zero&lt;&#x2F;code&gt; (0) ise sonucu ikinci parametreye eşit yapıyor, yani &lt;code&gt;0 + x = x&lt;&#x2F;code&gt; işlemini tanımlıyor,
ikinci parametresi &lt;code&gt;Nat.succ n&lt;&#x2F;code&gt; (n+1) ise sonucu &lt;code&gt;add n m&lt;&#x2F;code&gt;&#x27;nin ardılı yapıyor, yani &lt;code&gt; (n + 1) + m = 1 + (n + m)&lt;&#x2F;code&gt; işlemini tanımlıyor. Klasik toplama
işleminde sahip olduğumuz bazı özellikler var, bunlardan bir tanesi toplamanın değişme özelliği (commutativity), yani &lt;code&gt;a + b = b + a&lt;&#x2F;code&gt;. Gelin bunu Lean&#x27;de teorem olarak tanımlayalım:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lean&quot; class=&quot;language-lean z-code&quot;&gt;&lt;code class=&quot;language-lean&quot; data-lang=&quot;lean&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;theorem add_comm : ∀ (n m : Nat), n + m = m + n
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu teorem diyor ki, her &lt;code&gt;n&lt;&#x2F;code&gt; ve &lt;code&gt;m&lt;&#x2F;code&gt; doğal sayısı için &lt;code&gt;add n m&lt;&#x2F;code&gt; ifadesi &lt;code&gt;add m n&lt;&#x2F;code&gt; ifadesine eşit. Şimdi bu teoremi kanıtlamamız gerekiyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lean&quot; class=&quot;language-lean z-code&quot;&gt;&lt;code class=&quot;language-lean&quot; data-lang=&quot;lean&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;theorem add_comm : ∀ (n m : Nat), n + m = m + n
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  | n, 0   =&amp;gt; Eq.symm (Nat.zero_add n)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  | n, m+1 =&amp;gt; by
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    have : Nat.succ (n + m) = Nat.succ (m + n) := by apply congrArg; apply Nat.add_comm
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    rw [Nat.succ_add m n]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    apply this
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kanıtı tüm detaylarıyla anlamanıza gerek yok, bir noktada bu yazıyı bugün yazmayı geçtiğimiz yıllardan ayıran en büyük fark bu. Yazının başında da bahsettiğim gibi bugünün iddiası, yapay zekanın
bu kanıtları bizim için yazabileceği bir geleceğe doğru yol aldığımız. Bu varsayımsal yolun devamında bizim teoremleri yazmamız yetiyor, çünkü arka plandaki kanıt kontrolcüsü (proof checker) bizim sırtımızı
tamamen dayayabildiğimiz, başka hiçbir programlama dilinde, hiçbir ortamda sahip olmadığımız bir garantiye sahip olduğumuz bir ortam sağlıyor. Programlamanın temeline işlemiş, her ortamda, her zaman bizi
sınırlayan varsayımlarımızı ortadan kaldırabiliyor. Herhangi bir testten, her türlü kod incelemesinden daha güçlü bir garanti bu kazandığımız. Hatta bu işle ilgilenen şirketlerin iddiaları, yapay zekanın
bu teoremleri de bizim sözlü olarak yazdığımız tanımlardan otomatik olarak oluşturabileceği yönünde (ben buna katılmıyorum, bu konudaki argümanlarımı okumak için &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;Verifiability is the Limit&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiable-abstractions&quot;&gt;Breaking Verifiable Abstractions&lt;&#x2F;a&gt;, ve &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verification-is-not-the-silver-bullet&#x2F;&quot;&gt;Verification is Not the Silver Bullet&lt;&#x2F;a&gt; yazılarımı okuyabilirsiniz). Lean ile teorem kanıtlama üzerine kendinizi geliştirmek için &lt;a href=&quot;https:&#x2F;&#x2F;leanprover.github.io&#x2F;theorem_proving_in_lean4&#x2F;&quot;&gt;Theorem Proving in Lean&lt;&#x2F;a&gt; kitabını okuyabilirsiniz.&lt;&#x2F;p&gt;
&lt;p&gt;Bu dillerin belli sınırları var. Her şeyden önce kullandığımız programlama dilini değiştirmemizi, yeni bir ekosisteme sırtımızı dayamamızı gerektiriyor. Lean gibi dillerde yazdığımız programların
performansının anaakım dillerde yazdığımız programların performansına kıyasla çok daha kötü olmasını bekliyoruz, çünkü teoremleri kanıtlamak için yazdığımız programlar çok daha deklaratif, teoremin
şeklini andıracak şekilde yazılmalı, kanıt mühendisliğinin (proof engineering) klasik prensiplerinden birisi teorem, kanıt ve programı birbirinden ayırmanın çok zor olması. Bir diğer zorluk ise,
bu dillerde ifade edebileceğimiz teoremlerin o dillerdeki matematiksel modellere dayalı olması. Mesela, hiçbir zaman bir programın diğerinden daha optimize olduğunu Lean&#x27;de kanıtlayamayız, çünkü
fiziksel bilgisayarların performansı bizim matematiksel olarak modelleyip kanıtlar yapabildiğimiz kadar basit değil, en azından bugün. Deterministik olmayan, rastgelelikler içeren ya da eşzamanlı programlar
(concurrent programs) hakkında kanıtlar yazmak da bugün çok zor, ancak zaman içerisinde gelişiyor, dolayısıyla belki de birkaç seneye bunları da kanıtlayabilir hale geleceğiz.&lt;&#x2F;p&gt;
&lt;p&gt;Bu problemlerin bir çözümü var, o da nitelik-bazlı test etme (property-based testing -- PBT).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nitelik-bazli-test-etme-property-based-testing-pbt&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nitelik-bazli-test-etme-property-based-testing-pbt&quot; aria-label=&quot;Anchor link for: nitelik-bazli-test-etme-property-based-testing-pbt&quot;&gt;Nitelik-Bazlı Test Etme (Property-Based Testing -- PBT)&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;PBT, temelde buraya kadar yazdığımız metodolojiler ile ayrık değil, hatta barışık ve bağlı. PBT, bir nitelik, ya da kanıtlama bağlamında bir teorem gerektiriyor. Bu teoremin ardından, teoremi test etmek için
teoremde bahsi geçen tüm değişkenlerin rastgele örneklerini üretebilmemiz gerekiyor. Bunun sonucunda az önce yazdığımız &lt;code&gt;add_comm&lt;&#x2F;code&gt; teoremini PBT ile test etmek istersek, bunu Typescript&#x27;te aşağıdaki gibi
yazabiliriz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;typescript&quot; class=&quot;language-typescript z-code&quot;&gt;&lt;code class=&quot;language-typescript&quot; data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Nat&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;zero&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;succ&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;zero&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt; &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;kind&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;succ&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;natEqual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;boolean&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;zero&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-ts&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;zero&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-ts&quot;&gt;true&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;succ&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-ts&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;kind&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;succ&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;natEqual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-boolean z-false z-ts&quot;&gt;false&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;toNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;n&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-relational z-ts&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt; &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;kind&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;zero&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt; &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;kind&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;succ&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;pred&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;toNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;n&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;generateNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Nat&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-constant z-math z-ts&quot;&gt;Math&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-math z-ts&quot;&gt;floor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-constant z-math z-ts&quot;&gt;Math&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-math z-ts&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;100&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; 0 ile 99 arasında rastgele bir sayı&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;toNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;testAddComm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;iterations&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-loop z-ts&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;i&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-relational z-ts&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;iterations&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-increment z-ts&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;generateNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;generateNat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;left&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;right&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-ts&quot;&gt;!&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;natEqual&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;left&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;right&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;            &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-class z-console z-ts&quot;&gt;console&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-console z-ts&quot;&gt;error&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;+&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;=&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;left&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt; ile &lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;+&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;=&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;right&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt; eşit değil!&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-class z-console z-ts&quot;&gt;console&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-console z-ts&quot;&gt;log&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;Tüm testler geçti!&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada, teoremimizi &lt;code&gt;natEqual(add(a, b), add(b, a))&lt;&#x2F;code&gt; fonksiyonuyla test ediyoruz. &lt;code&gt;generateNat&lt;&#x2F;code&gt; fonksiyonu ise rastgele doğal sayılar
üretmek için kullanılıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Geçtiğimiz yıllarda Cardano ve AWS PBT ile kanıtlı programlama yaklaşımlarını birleştirerek Lean&#x27;de geliştirdikleri kanıtlı programları
Rust&#x27;ta geliştirdikleri üretim sınıfı (production grade) programları test etmek için kullandılar. Bu yaklaşımda, Lean programı ile Rust programının
her girdi için aynı çıktıyı vermesi gerektiğini bildiğimiz için, Lean programını bir referans model olarak kullanıp, Rust programını Lean programına karşı
test ettiğimizde Lean&#x27;de kanıtlanan teoremlerin Rust programında da geçerli olduğunu garanti edebiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;PBT&#x27;nin faydalı olması için yalnızca kanıtlı programlamayla birlikte kullanılmasına gerek yok, bugün PBT daha müdahale etmeden kod yazılan yapay zeka
yaklaşımlarında (Agentic AI), kodun doğruluğunu test etmek için kullanılabiliyor. Daha gün, Claude Code&#x27;da &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;trq212&#x2F;status&#x2F;2001439032795107441&quot;&gt;majör bir yenilemenin&lt;&#x2F;a&gt; PBT ile yapıldığının
örneğini gördük. Benzer şekilde &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;engineering&#x2F;self-optimizing-system&#x2F;&quot;&gt;BitsEvolve&lt;&#x2F;a&gt; gibi yaklaşımlar da PBT&#x27;yi kullanarak otomatik optimizasyon sistemleri inşa ediyor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kapanis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kapanis&quot; aria-label=&quot;Anchor link for: kapanis&quot;&gt;Kapanış&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Formal metotlar, programlarımızın doğruluğunu arttırmak için kullanabileceğimiz güçlü araçlar. Bu araçlar bugüne kadar niş olsa da, yapay zeka yardımıyla daha erişilebilir
hale geldiklerini görüyoruz, ben şahsen gelmeye devam edeceğine dair işaretler görüyorum. Türkçe&#x27;de böyle bir kaynağın eksikliğini gördüğüm için yazmak istedim, eğer eksik gördüğünüz
ya da yanlış olduğunu düşündüğünüz bir nokta varsa bana &lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt; adresinden ulaşabilirsiniz. Bir sonraki yazıda görüşmek üzere!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Temporal Shrinking</title>
        <published>2025-11-22T00:00:00+00:00</published>
        <updated>2025-11-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/temporal-shrinking/"/>
        <id>https://alperenkeles.com/posts/temporal-shrinking/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/temporal-shrinking/">&lt;p&gt;Random testing, in isolation, is a stupid idea. You take a program, which has a practically infinite
amount of possible inputs, you randomly pick one of those infinite possibilities in the hopes of
breaking the program, or some assertion about the program, and it actually works (discovers bug) in even the most
naive form possible, which is essentially the following loop:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-loop z-while z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-while z-python&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;True&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-while z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;generate_random_input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-python&quot;&gt;not&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;property&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;report_bug&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Over the years, people have developed many different improvements on this naive
form I described. The most famous example is coverage guidance, which led to the rise of fuzz testing in the
last decade, finding thousands, perhaps millions of different bugs across systems. In coverage guiding,
the random inputs are biased towards inputs that increase the code coverage of the system under test, leading to
better exploration of the input space. The modified loop looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;initialize_pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-loop z-while z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-while z-python&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;True&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-while z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mutate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;select_from_pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-python&quot;&gt;not&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;property&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;report_bug&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;increases_coverage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-arguments z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;pool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-python&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;As we found more and more bugs, it became more and more apparent that finding bugs was, and is, not sufficient. Someone
must validate and fix the said bugs. Hence, the &amp;quot;counterexamples&amp;quot;, inputs that trigger the alleged bugs, must be legible,
inspectable, managable. Ideally, the tester should receive the simplest possible form of the input, isolated from any noise,
only providing the minimal necessary structure for the reproduction, and the eventual fixing, of the bug. The solution emerged
in different names, but in similar shapes, minimization, delta-debugging, or shrinking.&lt;&#x2F;p&gt;
&lt;p&gt;Shrinking is one of these ideas that immediately make sense once you hear about it. Let&#x27;s say that we generated some random
input for some program, perhaps a random PNG image for an image processor. Once a bug is triggered in some part of the system,
we would like to get the simplest PNG possible that retriggers the input. For this, we can designate some simplification procedures.
We can dim each pixel independently, making the picture darker, turning as much of the pixels as possible into &lt;code&gt;#000000&lt;&#x2F;code&gt;. We can
also remove some parts of the image completely by cropping the image. As it turns out, many times these simplifications are equivalent
to making the values smaller, such as reducing the size of the image, or converging pixels to white as the smallest hex coded
color, hence the name &lt;em&gt;shrinking&lt;&#x2F;em&gt;. In shrinking, we start from a bug-triggering input case, and we repeatedly produce smaller (shrunk)
versions of the input as long as there is a smaller input that still retriggers the bug. If we cannot find a smaller instance,
we report the original input to the user.&lt;&#x2F;p&gt;
&lt;p&gt;Given some input &lt;code&gt;I&lt;&#x2F;code&gt; that triggers a bug, we can define a shrinking function &lt;code&gt;shrink(I) -&amp;gt; [I_1, I_2...I_n]&lt;&#x2F;code&gt;, we can write
a version of the shrinking algorithm as follows:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;shrink_input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-python&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-function z-begin z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-python&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;smaller_input&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-for z-in z-python&quot;&gt;in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;shrink&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-for z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;        &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;triggers_bug&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;smaller_input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;            &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;shrink_input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;smaller_input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;Enters temporality.&lt;&#x2F;em&gt; The default perspective into random testing is that it produces many inputs from scratch, you may conjure up PNGs
from thin air, produce balanced binary trees, generate network topologies, create virtual physical environments or write texts with
grammatical faults, all depending on your domain. However, there are many systems where generating inputs from scratch is not an option,
you cannot first generate an entire well-formed SQLite database from scratch, and then a SQL query over the database, only to test the
result of a simple query. Therefore, instead of trying to generate such complex structures from scratch, random testing have mostly
converged to using &lt;em&gt;stateful generation&lt;&#x2F;em&gt;. In stateful generation, we add a notion of time to random testing. We start from an initial
state &lt;code&gt;S_0&lt;&#x2F;code&gt; at time &lt;code&gt;t=0&lt;&#x2F;code&gt;, and generate an interaction against a system based on its API. For a SQL database, these can be SQL statements,
for a key-value store, these are &lt;code&gt;insert&lt;&#x2F;code&gt;, &lt;code&gt;delete&lt;&#x2F;code&gt;, &lt;code&gt;get&lt;&#x2F;code&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;After every interaction, the state of the system possibly changes, affecting the next input we generate. Assuming we&#x27;re lucky (the
system itself is not affected by the physical time), every action will be another tick, going from &lt;code&gt;t=0,1,2...n&lt;&#x2F;code&gt; until we discover
a bug. We already know the logical next step, shrinking, but how do we shrink these actions that have these potential linear
dependencies with each other, every action possibly depending on all prior actions to be valid? Below is an example of such a dependency
chain:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; class=&quot;language-sql z-code&quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-meta z-create z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-create z-sql&quot;&gt;CREATE&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-sql&quot;&gt;TABLE&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-toc-list z-full-identifier z-sql&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-sql&quot;&gt;t0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; (c0, c1);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;INSERT INTO&lt;&#x2F;span&gt; t0 &lt;span class=&quot;z-keyword z-other z-DML z-II z-sql&quot;&gt;VALUES&lt;&#x2F;span&gt; (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;0&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;0&lt;&#x2F;span&gt;), (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;), (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;2&lt;&#x2F;span&gt;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;SELECT&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;FROM&lt;&#x2F;span&gt; t0 &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;WHERE&lt;&#x2F;span&gt; c0 &lt;span class=&quot;z-keyword z-operator z-comparison z-sql&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;; &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; @bind r
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; @assert r = (1, 1), (2, 2)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The language depicted here is a small augmentation of SQL for binding results of intermediate queries and asserting facts about them,
this specific example highlights a containment assertion, we expect to find the values we inserted when we search for them. If we go about
removing parts of this structure, similar to what we did for PNGs in the stateless instances, it is possible that we render the test
invalid. If you remove the first line (&lt;code&gt;CREATE TABLE...&lt;&#x2F;code&gt;), you expect that all the following interactions fail, hence the assertion will
fail, but the test itself will be invalid.&lt;&#x2F;p&gt;
&lt;p&gt;There are some solutions to this scenario, the first of which is to restrict the shrinking by slicing the input we have at hand. Take
the following alternative sequence of interactions:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;sql&quot; class=&quot;language-sql z-code&quot;&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-meta z-create z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-create z-sql&quot;&gt;CREATE&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-sql&quot;&gt;TABLE&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-toc-list z-full-identifier z-sql&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-sql&quot;&gt;t0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; (c0, c1);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-meta z-create z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-create z-sql&quot;&gt;CREATE&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-sql&quot;&gt;TABLE&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-toc-list z-full-identifier z-sql&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-sql&quot;&gt;t1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; (c0, c1, c2); &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; (2)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;INSERT INTO&lt;&#x2F;span&gt; t0 &lt;span class=&quot;z-keyword z-other z-DML z-II z-sql&quot;&gt;VALUES&lt;&#x2F;span&gt; (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;0&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;0&lt;&#x2F;span&gt;), (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;), (&lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;2&lt;&#x2F;span&gt;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;INSERT INTO&lt;&#x2F;span&gt; t1 &lt;span class=&quot;z-keyword z-other z-DML z-II z-sql&quot;&gt;VALUES&lt;&#x2F;span&gt; (&lt;span class=&quot;z-constant z-language z-sql&quot;&gt;NULL&lt;&#x2F;span&gt;, &lt;span class=&quot;z-string z-quoted z-single z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;why&lt;span class=&quot;z-punctuation z-definition z-string z-end z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;, &lt;span class=&quot;z-string z-quoted z-single z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;not&lt;span class=&quot;z-punctuation z-definition z-string z-end z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;); &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; (4)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;SELECT&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;FROM&lt;&#x2F;span&gt; t1 &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;WHERE&lt;&#x2F;span&gt; c0 &lt;span class=&quot;z-keyword z-operator z-comparison z-sql&quot;&gt;!=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-sql&quot;&gt;OR&lt;&#x2F;span&gt; c1 &lt;span class=&quot;z-keyword z-operator z-comparison z-sql&quot;&gt;!=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;how&lt;span class=&quot;z-punctuation z-definition z-string z-end z-sql&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;; &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; (5)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;SELECT&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;FROM&lt;&#x2F;span&gt; t0 &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;WHERE&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-boolean z-sql&quot;&gt;TRUE&lt;&#x2F;span&gt;; &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; (6)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;SELECT&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;FROM&lt;&#x2F;span&gt; t0 &lt;span class=&quot;z-keyword z-other z-DML z-sql&quot;&gt;WHERE&lt;&#x2F;span&gt; c0 &lt;span class=&quot;z-keyword z-operator z-comparison z-sql&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-sql&quot;&gt;1&lt;&#x2F;span&gt;; &lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; @bind r
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-sql&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-dash z-sql&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-sql&quot;&gt;--&lt;&#x2F;span&gt; @assert r = (1, 1), (2, 2)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We can slice this program up into 2 parts, the parts that are &lt;strong&gt;relevant&lt;&#x2F;strong&gt; to the failure, and the parts that are &lt;strong&gt;irrelevant&lt;&#x2F;strong&gt;.
This relevancy is of course a heuristic, perhaps what seems irrelevant is the cause of a failure we see, hence we need to make
sure our assumptions are sound. The slicing heuristic I&#x27;ll use is table-based slicing, where we only care about the interactions
with the tables related to the failing assertion. &lt;code&gt;r&lt;&#x2F;code&gt; is computed by a query over &lt;code&gt;t0&lt;&#x2F;code&gt;, hence we remove all interactions that do
not read or write to &lt;code&gt;t0&lt;&#x2F;code&gt;. In the example above, this slicing allows us to eliminate queries (2), (4), and (5) as they do not mention
&lt;code&gt;t0&lt;&#x2F;code&gt;, but rather only &lt;code&gt;t1&lt;&#x2F;code&gt;. Another heuristic is to remove as many reads as possible, as they (hopefully) do not affect the state
of the database, which allows us to remove query (6) as well. After slicing, we are left with the original example, which is much smaller.&lt;&#x2F;p&gt;
&lt;p&gt;We can, however, have another type of shrinking, one that leverages the temporal generation instead of trying to work through the
limitations it imposes. What do we do, we time travel!&lt;&#x2F;p&gt;
&lt;p&gt;Instead of starting shrinking from the large structure that triggered the bug, we start from the random seed that produced the
structure in the first place. We start generating the input at &lt;code&gt;t=0&lt;&#x2F;code&gt;, but at some point in time &lt;code&gt;t=j&lt;&#x2F;code&gt;, we manipulate our
decision, we generate a smaller input. It must be noted that every single action we take after &lt;code&gt;t=j&lt;&#x2F;code&gt; is now possibly changed,
because we went back in time and changed the past, affecting every future decision from that point on. The good thing about
this approach is that we preserve the original invariants that the generator respected, because we did no actual shrinking,
we only manipulated the generation process into generating a smaller structure.&lt;&#x2F;p&gt;
&lt;p&gt;The first approach of going from a large structure to smaller ones by using a &lt;code&gt;reproducer&lt;&#x2F;code&gt; for detecting if the fault
continues to occur is typically called &lt;code&gt;external&lt;&#x2F;code&gt; or &lt;code&gt;type-based&lt;&#x2F;code&gt; shrinking, although I like to call it &lt;code&gt;structural shrinking.&lt;&#x2F;code&gt;
The second approach is called &lt;code&gt;internal&lt;&#x2F;code&gt;, or &lt;code&gt;integrated&lt;&#x2F;code&gt; shrinking; Property-Based Testing libraries are typically
divided in the ways they pick the shrinking methodology, Hypothesis famously &lt;a href=&quot;https:&#x2F;&#x2F;hypothesis.works&#x2F;articles&#x2F;integrated-shrinking&#x2F;&quot;&gt;uses&lt;&#x2F;a&gt;
integrated shrinking, whereas many of the QuickCheck descendents use structural shrinking.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Fast forward to DST.&lt;&#x2F;em&gt; The discussion of integrated vs structural shrinking is a long one, one which I&#x27;ll not take sides
at the moment; but there&#x27;s a special flavor of random testing that structural shrinking is not really an option, &lt;em&gt;deterministic
simulation testing&lt;&#x2F;em&gt;. I won&#x27;t go into the very specific details of DST in this post, I think there&#x27;s already some great resources
such as &lt;a href=&quot;https:&#x2F;&#x2F;notes.eatonphil.com&#x2F;2024-08-20-deterministic-simulation-testing.html&quot;&gt;Phil&#x27;s blog post &lt;&#x2F;a&gt; that are sufficient for it.
In short, DST is what you need when testing systems where you are not lucky enough that you can remove the notion of time from your system,
violating the assumption of the previous section. Many times, especially in distributed systems or concurrent programs, physical time
is an important part of how your system works, and you cannot abstract over it, you need to work with the physical time. In such cases,
you cannot naively shrink your inputs, because you cannot even reproduce them most of the time. When testing a time-aware system,
running the same sequence of interactions twice doesn&#x27;t guarantee the same outputs or results, let alone preserving the error if you
change them.&lt;&#x2F;p&gt;
&lt;p&gt;In DST, the execution layer is perfectly deterministic, meaning that physical time and effects are abstracted from the system, so your
tests are perfectly reproducible, and that&#x27;s a great thing, because it gives you the ability to debug previously undebuggable bugs as you
can reproduce the same exact sequence of interactions, solving the infamous pain of Heisenbugs, &lt;em&gt;but does it&lt;&#x2F;em&gt;? The central issue with
perfect reproducibility is that you cannot change anything in the system because of the temporality. You can go back in time,
but you cannot change anything, you can only observe. The moment you change something, every next decision is out of your control,
so you cannot know the exact affects of your change. Did you actually fix the bug, or did the scheduler just make a different choice
that removed the bug?&lt;&#x2F;p&gt;
&lt;p&gt;Engineers at Antithesis, the company pioneering DST at the moment, have found a very cool method for overcoming this problem,
which I like to call temporal shrinking, or rather temporal fault localization. The idea is as follows:&lt;&#x2F;p&gt;
&lt;p&gt;You have a temporal test, some sequence of inputs spanning some amount of time. As I said, you can change any decision
at any point in time, which will affect possibly everything from that point on. Let&#x27;s assume that some decisions at arbitrary
points in time &lt;code&gt;j_0, j_1...j_k&lt;&#x2F;code&gt; are the triggering conditions of the bug. If you change anything after &lt;code&gt;t=j_k&lt;&#x2F;code&gt;, the reproduction
of the bug must not change, so all 100% of the decisions after &lt;code&gt;j_k&lt;&#x2F;code&gt; must be irrelevant. So, we can pick random points in time,
change the decisions at such points, and check how they affect the percentage of bugs found afterwards. In a very rare bug,
namely one that only reproduces under conditions &lt;code&gt;j_0...j_k&lt;&#x2F;code&gt;, if you change any of the &lt;code&gt;j_0...j_k&lt;&#x2F;code&gt;, you would get a 0% retrigger rate.&lt;&#x2F;p&gt;
&lt;p&gt;This core idea of retrigger percentage allows Antithesis to localize the bug temporally, identifying key pieces in time that are
crucial to the retriggering of the bug, which is ultimately a form of shrinking, hence the name of the article. It also feels somewhat
descendent of the spectrum based fault localization techniques that identify differences between positive and negative inputs, but
moving it into the temporal realm.&lt;&#x2F;p&gt;
&lt;p&gt;A potential analysis built on this capability leads to the following bug probability graph shown below. The exact details of the
computation for producing the graph can be found in &lt;a href=&quot;https:&#x2F;&#x2F;antithesis.com&#x2F;docs&#x2F;reports&#x2F;likelihood&#x2F;&quot;&gt;Antithesis docs&lt;&#x2F;a&gt;, as well
as how to interpret the results of the graph.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;antithesis.com&#x2F;img_opt&#x2F;a01ZUsOJsk-3673.webp&quot; alt=&quot;probability graph&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It should be noted that I&#x27;m not affiliated with Antithesis (although I collaborate with them on different topics), and temporal
shrinking is not limited to Antithesis, but rather applicable for any Deterministic Simulation Environment. I posit that in a few
years, we will probably see similar tools built on concurrency testing libraries such as &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;awslabs&#x2F;shuttle&quot;&gt;Shuttle&lt;&#x2F;a&gt;
or &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cmu-pasta&#x2F;fray&quot;&gt;Fray&lt;&#x2F;a&gt;, because they are in a similar design space and have the same challenges with respect
to shrinking and debugging.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Verification is Not the Silver Bullet</title>
        <published>2025-11-18T00:00:00+00:00</published>
        <updated>2025-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/verification-is-not-the-silver-bullet/"/>
        <id>https://alperenkeles.com/posts/verification-is-not-the-silver-bullet/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/verification-is-not-the-silver-bullet/">&lt;p&gt;This post is a sequel to my thoughts on &amp;quot;What are the limits of LLMs&amp;quot; (&lt;a href=&quot;&#x2F;posts&#x2F;verifiability-is-the-limit&quot;&gt;Verifiability is the Limit&lt;&#x2F;a&gt;) and &amp;quot;What are the domains I believe LLMs will shine at autonomously&amp;quot; (&lt;a href=&quot;&#x2F;posts&#x2F;verifiable-abstractions&quot;&gt;Breaking Verifiable Abstractions&lt;&#x2F;a&gt;). As I see verifiability as part of the mainstream discussions more and more, I decided to break down on the limits of verifiability, focusing on how verification as a general principle isn&#x27;t sufficient, and what more do we need.&lt;&#x2F;p&gt;
&lt;p&gt;In my original post, I posed verification as a human endeavour, as opposed to the mainstream usage of the term that usually means
computational verification. Computational verification is a procedural activity, it is the act of asserting facts about programs
by stating the facts in the form of tests that can be run, or factual statements that can be mechanically checked. Humans use
computational verification as part of their workflows, but they typically go beyond, because the facts checked by the machine are
subjective to the human verifier. If you would think about contesting this statement, think about any system you previously worked on,
would two people come up with the same exact tests for the same system in any of those cases? Unfortunately for us, correctness
is ultimately subjective, so we must be bothered with defining it.&lt;&#x2F;p&gt;
&lt;p&gt;This reveals a crucial limitation of the autoformalization approaches like Harmonic AI&#x27;s Aristotle, Math Inc&#x27;s Gauss, and a number
of similar efforts throughout the industry. The fact that you have perfect prover does not mean you have perfectly good theorems
about your systems. The fact that you have perfectly good theorems also doesn&#x27;t mean your autoformalization procedure, which takes
your perfectly good theorems expressed in natural language, will translate them by preserving their semantics. At any point
where the semantics of your specification is not precise, the systems need to &amp;quot;guess&amp;quot; your intent, which is prone to failures
on both sides, you might have ill-defined, or the system might have ill-guessed the specification. This is exactly the point I
touch in &lt;a href=&quot;..&#x2F;verifiable-abstractions&#x2F;index.md&quot;&gt;Breaking Verifiable Abstractions&lt;&#x2F;a&gt;, we can go above a traditional programming
language but still have precise semantics, or we can break the traditional flows of compilation by leveraging the perfect verifiers
without relying on imprecise specifications.&lt;&#x2F;p&gt;
&lt;p&gt;Nothing I wrote so far has been in contrast to anything I wrote prior to this, so let&#x27;s get to the new rather interesting bit I&#x27;ve
been thinking about. There&#x27;s an opinion that gets more mainstream by the day, the more verifiable a task is, the better the models
will get at it, we see this fact in games, mathematics, programming. When taken to the limit, this statement implies that any perfectly
verifiable task should be completely solvable my the models. The point of this post is to falsify this implication, and put a framework
for the limits of verifiability, what are the properties of verifiability of a domain that helps models get better in solving problems
in it?&lt;&#x2F;p&gt;
&lt;p&gt;The example I&#x27;ll use is prime factorization, the mathematical definition is very straightforward.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;r&quot; class=&quot;language-r z-code&quot;&gt;&lt;code class=&quot;language-r&quot; data-lang=&quot;r&quot;&gt;&lt;span class=&quot;z-source z-r&quot;&gt;n &lt;span class=&quot;z-keyword z-operator z-assignment z-r&quot;&gt;=&lt;&#x2F;span&gt; p_1 &lt;span class=&quot;z-keyword z-operator z-arithmetic z-r&quot;&gt;*&lt;&#x2F;span&gt; p_2 &lt;span class=&quot;z-keyword z-operator z-arithmetic z-r&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-r&quot;&gt;...&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-r&quot;&gt;*&lt;&#x2F;span&gt; p_k
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Where &lt;code&gt;n&lt;&#x2F;code&gt; is a natural number, and &lt;code&gt;p_1, p_2, ..., p_k&lt;&#x2F;code&gt; are prime numbers. The solution to the problem is the list of prime numbers that
multiply to &lt;code&gt;n&lt;&#x2F;code&gt;. The verification of the solution is also very straightforward, you multiply the list of prime numbers, and check if the result is &lt;code&gt;n&lt;&#x2F;code&gt;. Prime factorization is one of the foundations of today&#x27;s cryptographic systems as scientist haven&#x27;t been able to find
any patterns for reducing the problem space into something that&#x27;s essentially asymptotically better than brute force trials.&lt;&#x2F;p&gt;
&lt;p&gt;If we were to accept the original overly generalized statement that anything verifiable can be solved, we would reach to the conclusion
that one could train a model to the point it can automatically decide the prime factorization of any given number. A possible critique
of this position is that an LLM could indeed do that by learning to do arithmetic. There&#x27;s nothing that prevents the model from learning
to perfectly divide numbers, do this in a loop that simulates the algorithm we currently run on the CPU. My response to the critique would
be that this isn&#x27;t what we mean when we say that the model gets better at X. A model getting better at chess doesn&#x27;t necessarily learn
Alpha-beta pruning, it learns patterns at higher levels than the low level mathematically descriptive operations we traditionally have.&lt;&#x2F;p&gt;
&lt;p&gt;So we differentiated chess from prime factorization using &amp;quot;something&amp;quot;, which we haven&#x27;t really defined. What I would like to propose here
is &amp;quot;progress&amp;quot; as an augmentation to &amp;quot;Verifiability is the Limit&amp;quot;, I would like to revise myself to say &amp;quot;Verifiable Progress is the Limit&amp;quot;.
The problem with prime factorization is that there aren&#x27;t &amp;quot;to the best of our knowledge&amp;quot; patterns to discover and exploit. There&#x27;s no
information about &amp;quot;how wrong&amp;quot; the result is. In games and in programming, it is possible to compare two solutions to the same problem
and produce information based on their comparison; therefore repeated play produces more and more information by providing a compare
and contrast style of learning based on how different actions affect the outcomes.&lt;&#x2F;p&gt;
&lt;p&gt;What are the implications of this fact, if it is indeed a fact? The first is that it would mean you cannot target AI at an NP problem for 
repeatedly running a verifier on the problem and hoping that the model will become better in time, assuming that the model doesn&#x27;t
capture new patterns that we previously haven&#x27;t been able to uncover or realize. The second is that, building verifiers isn&#x27;t sufficient,
because we now have a measure of how useful a verifier is for a model based on the amount of information it produces. We must discuss
what types of feedback can be incorporated in the result of the verifier, and how that affects the process of learning.&lt;&#x2F;p&gt;
&lt;p&gt;That was it! As I think more on this issue, it becomes harder to differentiate between sound claims and personal bias, so it is
entirely possible that I&#x27;m missing some crucial points of the discussion. If you find such missing links, please let me know
at &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verification-is-not-the-silver-bullet&#x2F;akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;, I would love to know about the deficiencies of these arguments.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Designing A Digital Restaurant</title>
        <published>2025-10-10T00:00:00+00:00</published>
        <updated>2025-10-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/designing-a-restaurant/"/>
        <id>https://alperenkeles.com/posts/designing-a-restaurant/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/designing-a-restaurant/">&lt;p&gt;I had the second system design interview of my career last week, the first one was 7 years ago, I was a junior at college, the question was boring, and I fumbled it quite bad.
That just made me scared of system design interviews, so I was pretty nervous, little did I know, it was actually very fun, so I wanted to write about it.&lt;&#x2F;p&gt;
&lt;p&gt;The question, roughly put, is as follows:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;You walk into a restaurant, there&#x27;s a kiosk. You select some items, maybe a menu with some drinks, and you hit &lt;code&gt;order&lt;&#x2F;code&gt;. A few minutes later, you get the order. Assume
that the kitchen is tracked entirely through a digital system, where individual workers can only communicate through a digital interface, design the kitchen.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As this is a 45 minute interview, there&#x27;s of course lots of handwaving, but we went through a sequence of discussions I will now describe.&lt;&#x2F;p&gt;
&lt;p&gt;At a very high level, there&#x27;s a set of states an order will be in.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;designing-a-restaurant&#x2F;image.png&quot; alt=&quot;order steps&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;When an order is taken, the restaurant can accept or reject the order, which will be first queued, then cooked, served, and finally accepted or rejected by the customer.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest idea would to have a one person kitchen, where the kitchen worker has the ability to look at an order, &lt;code&gt;plan&lt;&#x2F;code&gt; some series of actions (picking up items, putting items
on counters, grilling, cutting...). Anytime an order is in, the worker receives the order, plans how to cook and serve it, all other orders are queued in the meantime. This, of course,
is completely impractical and not a very useful mental exercise.&lt;&#x2F;p&gt;
&lt;p&gt;A next step, while still keeping a single worker, is to move planning &lt;code&gt;offline&lt;&#x2F;code&gt;, where the worker isn&#x27;t required to do the planning but rather the system deconstructs the order
into pieces and gives the worker a sequence of actions. This is useful because it allows us to later scale the system into multiple workers by centralizing the planning.&lt;&#x2F;p&gt;
&lt;p&gt;There are perhaps multiple mechanisms for doing this, the one I came up with is building a dependency graph for an order, essentially a DAG that represents the preparation of a particular item,
linearize it by topologically sorting the dependency graph and sending each step to the worker in that order. Below is an example DAG for preparing a cheeseburger.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;designing-a-restaurant&#x2F;image-2.png&quot; alt=&quot;cheeseburger DAG&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Each item in the graph has a set of prerequisites as well as a set of steps that I hid in the graph. The black circles are the &lt;code&gt;DONE&lt;&#x2F;code&gt; items that were completed. The orange circles are &lt;code&gt;IN PROGRESS&lt;&#x2F;code&gt;
items that had their prerequisites &lt;code&gt;DONE&lt;&#x2F;code&gt;, but their internal set of steps haven&#x27;t been done yet. The white circles are &lt;code&gt;WAITING&lt;&#x2F;code&gt; for their prerequisites to be &lt;code&gt;DONE&lt;&#x2F;code&gt;, so their steps can be performed.
You might have realized there&#x27;s an inefficiency here, maybe some of the internal steps of a particular item only depend on some of its dependencies, so for instance even before having the cheeseburger
ready, the worker can put the fries and the drink in the brown bag, optimizing some of the steps. That is possible to do within this framework by further decomposing circles into smaller circles that
represent each step, so instead of viewing the DAG at the items level, we can see view it at the steps level, getting rid of such inefficiencies.&lt;&#x2F;p&gt;
&lt;p&gt;Once we have offloaded the planning to our digital system, we get to create a job queue that workers can just pick the next job to work on, getting a fair bit of parallelism in the way the kitchen is operated
without any type of coordination between workers. This assumes workers are indistinguishable from each other, meaning any step can be performed by any worker, an assumption far from reality.&lt;&#x2F;p&gt;
&lt;p&gt;To make our scenario a bit more realistic, let&#x27;s assume that each step is associated with some required capabilities, and that each worker has some capabilities. We can slightly modify our job queue for
giving each worker the next job in the queue that they have the capability to do. Based on the worker distribution, this can approximate a realistic environment. Trivial tasks such as moving item from
the shelf to a counter or from storage to the shelf are capabilities all workers possess, but other tasks such as grilling are more specialized, allowing only certain workers to perform them. A dimension
we currently ignore is that there is a cost to performing operations, and this cost depends on the current circumstances of the worker. If there are 2 available workers at stations A and B, and the next job in
queue is at some other station C, picking which worker will perform the job requires measuring the cost of moving between station A-C or B-C, as well as the next jobs in the queue requiring one of the workers
due to their capabilities.&lt;&#x2F;p&gt;
&lt;p&gt;Instead of handling such complexity, I picked a simpler one where I gave each job a certain amount of time to perform. So grilling meat takes 3 minutes but cutting the lettuce takes 15 seconds. We can also
invent the notion of a time-sensitive task, for instance after grilling a meat it should be served in less than 5 minutes so that it doesn&#x27;t get cold, or that after 3 minutes it should be taken from the grill
in a minute so that it&#x27;s not burnt. We can achieve this by making the job queue time-aware, where the time-sensitive tasks are placed based on the timing requirements. We can tag each task with a cost function
based on the time of execution. Aside from hard timing requirements I mentioned before, a basic cost function is just a measure of how much each customer waits. When picking a task, older tasks are more likely
to be picked. Another issue is fairness; if I come in with a 100 unit order, should the next 50 people with smaller orders wait for me, or should I wait for them? My suggestion in the interview was to be
unit-fair, the expected wait time should be proportional to the size of my order. People with small orders should be prioritized over people with large orders, so that one client cannot choke the system.&lt;&#x2F;p&gt;
&lt;p&gt;There are plenty of more complexity to add if you have time, you can design recovery&#x2F;mitigation schemes in the cases of faulty orders, you can define failsafe mechanisms for synchronizing the real state with
the digital one, because perhaps the worker failed to properly sync the digital system as they worked on their tasks. You can add contention over resources, where instead of having N queues (different work
stations) that are entirely isolated from each other, some resources (perhaps knives or pans) are shared across workers, so we need to remove contention over them.&lt;&#x2F;p&gt;
&lt;p&gt;It is of course important to remember that this is all just a mental exercise, we aren&#x27;t really designing restaurants, I&#x27;m sure anyone who spent more than 10 minutes at a kitchen will laugh at many of the
assumptions I make. The idea is to start from a vague definition with minimal requirements, gradually grow the system into something that resembles the problems we face in computing and software engineering.
I&#x27;m glad I got to think about the question, it was a fun 45 minutes, maybe it&#x27;ll be an inspiration to other companies in how they could design their interview questions, or to candidates on how to think about
system design questions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How can we secure Package Managers?</title>
        <published>2025-09-18T00:00:00+00:00</published>
        <updated>2025-09-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/package-managers/"/>
        <id>https://alperenkeles.com/posts/package-managers/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/package-managers/">&lt;p&gt;Package managers, however prevalent, feel as if they are still infants in terms of security, considering the various
supply chain attacks we have seen in the previous few years. The few solutions I see as a response are (1) securing the
producers of the packages via account security practices such as multi-factor authentication, (2) advocating against using
external packages for convenience by sometimes &lt;a href=&quot;https:&#x2F;&#x2F;www.gingerbill.org&#x2F;article&#x2F;2025&#x2F;09&#x2F;08&#x2F;package-managers-are-evil&#x2F;&quot;&gt;not having a package manager&lt;&#x2F;a&gt;, or &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;mitchellh&#x2F;status&#x2F;1965409636024221901&quot;&gt;making it harder to create packages&lt;&#x2F;a&gt;, and (3)
which feels to me is a sensible direction, is reducing the attack surface by adding &lt;a href=&quot;https:&#x2F;&#x2F;pnpm.io&#x2F;blog&#x2F;releases&#x2F;10.16&quot;&gt;a delay in consumptions of the package updates&lt;&#x2F;a&gt;, hence securing &lt;em&gt;some&lt;&#x2F;em&gt; of the consumers, because if all users used the same delay, we probably would have ended up in similar scenarios, albeit a bit safer. This option also has the problem of not taking into account when you need imminent updates specifically because you need to escape from a known vulnerability.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;package-managers&#x2F;.&#x2F;quickly.jpeg&quot; alt=&quot;How quickly should you update dependencies?&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I argue that even though the idea of securing the consumers instead of making it harder to create or consume packages, or securing the producers
is the right direction, time is not the right axis, it&#x27;s a faulty proxy. When we wait a day for updating a package, we trust the social process
that is supposed to execute within those 1440 minutes, which is the results of the package audits, user reports, perhaps the account owner that got exploited in the first place realizes the issue. &lt;strong&gt;As our trust in time is a reflection of our trust in the social process, why not just codify our trust in the social process in the first place?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I propose a HITS like graph ranking algorithm that users can define trust metrics based on the characteristics of the diffusion of the
package. Users should be able to set queries like &lt;code&gt;only if 60% of the users updated the package, I want to update too&lt;&#x2F;code&gt;, or &lt;code&gt;only if users X and Y updated the package, I want to update too&lt;&#x2F;code&gt;. This allows for the package auditers to be a central part of the package management, because users can
now use them as package authorities in their queries. The caveat, of course, is that the package management is now a complex system with a 
distributed state, which can have bugs of its own, in addition to opening up a whole lot of different questions such as the trustworthiness of the 
user-provided metrics, which is why I think an authoritative approach of assigning users some measure of trustworthiness is a useful addition.&lt;&#x2F;p&gt;
&lt;p&gt;Though I don&#x27;t have a good background in this domain, I found the idea to be stupidly simple while it has the potential to be very effective, 
which means I might actually be catastrophically wrong. I wanted to keep the idea in some long living form, which is why this blog post exists. If 
you have some criticisms, I would love to hear them (&lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>From Hand-Tuned Go to Self-Optimizing Code: Building BitsEvolve</title>
        <published>2025-09-18T00:00:00+00:00</published>
        <updated>2025-09-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/self-optimizing-system/"/>
        <id>https://alperenkeles.com/posts/self-optimizing-system/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/self-optimizing-system/">&lt;p&gt;This is a mirror entry of an article I co-authored published in &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;engineering&#x2F;self-optimizing-system&#x2F;&quot;&gt;Datadog Engineering Blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;At Datadog, cost-aware engineering is more than a principle; it’s a performance challenge at scale. We’ve published how we saved $17 million by rethinking our infrastructure, and we’ve built Cloud Cost Management to help customers do the same. But scaling deep, expert-level code optimization across a fast-moving engineering organization presents its own challenge.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Our journey didn’t start with a grand AI design. It began as a mission to trim CPU usage in several critical hot-path functions in our most expensive services. For the hands-on performance engineer, we’ll dig into the gritty work of optimizing Go code: eliminating compiler bounds checks, restructuring loops, and rewriting functions for maximum efficiency. For those building agentic systems with LLMs, we’ll share how those human-driven optimizations seeded the heuristics behind BitsEvolve, our internal agentic system for self-optimizing code.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Whether you’re here for the nanoseconds saved in Go or for a way to scale deep optimization work beyond a handful of experts, we’ll share what worked, what surprised us, and how the art of manual optimization provided the blueprint for an automated system.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Programlama Dilleri Hakkında</title>
        <published>2025-09-04T00:00:00+00:00</published>
        <updated>2025-09-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/programlama-dilleri-hakkinda/"/>
        <id>https://alperenkeles.com/posts/programlama-dilleri-hakkinda/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/programlama-dilleri-hakkinda/">&lt;p&gt;Programlama dilleri, programcı ile bilgisayar arasındaki en temel iletişim kanalı. Yazdığımız programlar derleyiciler (compilers) ve yorumlayıcılar (interpreters) ile bilgisayarların onları çalıştırabileceği formlara dönüşüyor, sonrasında ise kullanıcılar yazdığımız programları kullanabilir hale geliyor. Her ne kadar günümüzün büyük bir kısmını bilgisayara istediklerimizi yaptırabilmek için programlama dillerini kullanarak geçirsek de, programlama dillerinin hem teorisini hem de pratiğini anlamak programcılar için bir beklentiden ziyade bir anomali, nadide bir uzmanlık. Bunun popüler kültürde yansımalarını görmek çok kolay;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Bir programlama dilini öğrenince diğerlerinin yalnız sözdizimini (syntax) öğrenerek onları yazabileceği inancı.&lt;&#x2F;li&gt;
&lt;li&gt;JavaScript&#x27;in gariplikleriyle ilgili şakalar&lt;&#x2F;li&gt;
&lt;li&gt;Python&#x27;ın &lt;code&gt;in&lt;&#x2F;code&gt;, &lt;code&gt;is&lt;&#x2F;code&gt; gibi İngilizce kelimeleri kullandığı için daha basit ya da kolay olduğu iddiası.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Yazının kalanında programlama dillerinin yerleştirildiği bu mistik, anlaşılmaz noktadan onları biraz da olsa çıkarabilmek için kendi gözümden programlama dillerini nasıl değerlendirdiğimi, farklı dillerin nasıl özelliklere sahip olduğunu, ana akımın dışına çıktığımızda programlama dillerinin nasıl farklılaşabildiğini anlatmak istiyorum. Bu yazı bir nevi geçtiğimiz yıl yazdığım &lt;a href=&quot;&#x2F;posts&#x2F;tip-sistemleri-hakkinda&quot;&gt;Tip Sistemleri Hakkında&lt;&#x2F;a&gt; yazısının bir devamı, bütünleyicisi olacak, o yüzden eğer bu yazı ilginizi çekiyorsa onu da okumanızı tavsiye ederim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;programlama-dili-nedir&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#programlama-dili-nedir&quot; aria-label=&quot;Anchor link for: programlama-dili-nedir&quot;&gt;Programlama Dili Nedir&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Benim gözümde programlama dilleri, en temelde sözdizimi (syntax) ve anlamı (semantics) olarak iki teorik bileşenden oluşuyor, bu bileşenlerin üzerine bir pratik implementasyon (derleyici ya da yorumlayıcı), bir takım araçlar (Dil Sunucusu - LSP, Kod Formatlayıcı, Paket Yöneticisi, Paket Kayıt Sistemi), ve bir kütüphane ekosistemi ile en başta matematiksel bir obje olan programlama dilleri sosyal objelere dönüşüyor. Bu yazıda programlama dillerine mümkün olduğunca matematiksel bir obje olarak yaklaşacağım, yalnızca yer yer dilin tasarımındaki belli özelliklerin implementasyonu, araçları ya da ekosistemi nasıl etkilediğini tartışacağım.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sozdizimi-syntax-sentaks&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sozdizimi-syntax-sentaks&quot; aria-label=&quot;Anchor link for: sozdizimi-syntax-sentaks&quot;&gt;Sözdizimi - Syntax (Sentaks)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;İlk paragrafta programlama dillerinin programcı ve bilgisayar arasındaki iletişimi sağlayan kanal olduğundan bahsetmiştim, burada bir köprüye ihtiyacımız var, bu köprü de sözdizimi. Bir dilin sözdizimi o dilin metinsel halini tanımlıyor, yani teknik olarak aynı dil için dilin anlamını değiştirmeden farklı farklı sözdizimleri kullanmak mümkün. Bunun en iyi örneklerinden birisi programlama dillerindeki makrolar. Makrolar bize dilin ifade edemediği ya da sahip olmadığı sözdizimlerini ifade etme imkanı sağlıyor. Bunun en basit örneklerinden birisini C makroları ile görüyoruz, üzücü ki pek çok programcının makrolarla etkileşimi bunları hiçbir zaman geçmiyor. Gelin küçük bir örnek verelim, C programlama dilinde biliyorsunuz ki çok tiplilik yok, bu da demek oluyor ki Java ya da C++&#x27;da yazabildiğiniz gibi &lt;code&gt;Vector&amp;lt;String&amp;gt;&lt;&#x2F;code&gt; gibi bir ifade yazamıyorsunuz, bu problemi çözmenin bir yolu C tip sistemini yoksaymak, bunun için koleksiyonunuzun elemanlarının tipini &lt;code&gt;void*&lt;&#x2F;code&gt; olarak tanımlıyorsunuz, kullanıcı hangi tip değerleri koleksiyona koyduğundan kendisi sorumlu. Benzer bir problemi makrolar kullanarak da çözebiliyorsunuz. Aşağıdaki örnekte &lt;code&gt;DEFINE_VECTOR&lt;&#x2F;code&gt; makrosu bir anlamda sizin dilin sözdizimsel limitlerini aşmanıza izin veriyor, dili büyütmenizi sağlıyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;C&quot; class=&quot;language-C z-code&quot;&gt;&lt;code class=&quot;language-C&quot; data-lang=&quot;C&quot;&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-c&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Define a type-safe vector for any element type
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-keyword z-control z-import z-define z-c&quot;&gt;#define&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt; &lt;span class=&quot;z-entity z-name z-function z-preprocessor z-c&quot;&gt;DEFINE_VECTOR&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-parameters z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-c&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-c&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;                                      &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;typedef&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-c&quot;&gt;struct&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt; T &lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;data&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-sys-types z-c&quot;&gt;size_t&lt;&#x2F;span&gt; len&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; cap&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-typedef z-c&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;                  &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;inline&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-c&quot;&gt;void&lt;&#x2F;span&gt; Name##&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;_init&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;Name &lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt; v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;data&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language z-c&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;len&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;inline&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-c&quot;&gt;void&lt;&#x2F;span&gt; Name##&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;_push&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;Name &lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; T x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt;                        &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-c&quot;&gt;if&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;len&lt;span class=&quot;z-keyword z-operator z-comparison z-c&quot;&gt;==&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt; v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-keyword z-operator z-ternary z-c&quot;&gt;?&lt;&#x2F;span&gt; v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-ternary z-c&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;4&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;                   &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;        v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;data&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-support z-function z-C99 z-c&quot;&gt;realloc&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;data&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;cap&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-word z-c&quot;&gt;sizeof&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;T&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt;               &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;    v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;data&lt;span class=&quot;z-meta z-brackets z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-begin z-c&quot;&gt;[&lt;&#x2F;span&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;len&lt;span class=&quot;z-keyword z-operator z-arithmetic z-c&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-end z-c&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;x&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;                                            &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt;                                                                   &lt;span class=&quot;z-punctuation z-separator z-continuation z-c&quot;&gt;\&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-preprocessor z-macro z-c&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;static&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-modifier z-c&quot;&gt;inline&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-c&quot;&gt;void&lt;&#x2F;span&gt; Name##&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;_free&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;Name &lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-support z-function z-C99 z-c&quot;&gt;free&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;v&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt;data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-c&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt; Example: make IntVec and StrVec
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-assumed-macro z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-assumed-macro z-c&quot;&gt;DEFINE_VECTOR&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; IntVec&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-assumed-macro z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-assumed-macro z-c&quot;&gt;DEFINE_VECTOR&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;char&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; StrVec&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-c&quot;&gt;main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;void&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-c&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    IntVec iv&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;IntVec_init&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;iv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-c&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-c&quot;&gt;int&lt;&#x2F;span&gt; i&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-comparison z-c&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;5&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-arithmetic z-c&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;IntVec_push&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;iv&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; i&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;*&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-c&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-sys-types z-c&quot;&gt;size_t&lt;&#x2F;span&gt; i&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-comparison z-c&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;iv&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-member z-c&quot;&gt;len&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-arithmetic z-c&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-support z-function z-C99 z-c&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-placeholder z-c&quot;&gt;%d&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape z-c&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; iv&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-member z-c&quot;&gt;data&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brackets z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-begin z-c&quot;&gt;[&lt;&#x2F;span&gt;i&lt;span class=&quot;z-punctuation z-section z-brackets z-end z-c&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;IntVec_free&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;iv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    StrVec sv&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;StrVec_init&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;sv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;StrVec_push&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;sv&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;hello&lt;span class=&quot;z-punctuation z-definition z-string z-end z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;StrVec_push&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;sv&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;world&lt;span class=&quot;z-punctuation z-definition z-string z-end z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-c&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-sys-types z-c&quot;&gt;size_t&lt;&#x2F;span&gt; i&lt;span class=&quot;z-keyword z-operator z-assignment z-c&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-c&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-comparison z-c&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;sv&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-member z-c&quot;&gt;len&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;i&lt;span class=&quot;z-keyword z-operator z-arithmetic z-c&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-support z-function z-C99 z-c&quot;&gt;printf&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-placeholder z-c&quot;&gt;%s&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape z-c&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-c&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-c&quot;&gt;,&lt;&#x2F;span&gt; sv&lt;span class=&quot;z-punctuation z-accessor z-c&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-member z-c&quot;&gt;data&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brackets z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-begin z-c&quot;&gt;[&lt;&#x2F;span&gt;i&lt;span class=&quot;z-punctuation z-section z-brackets z-end z-c&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-variable z-function z-c&quot;&gt;StrVec_free&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-c&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-c&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;sv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-c&quot;&gt;&lt;span class=&quot;z-meta z-group z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-c&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-c&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-c&quot;&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-c&quot;&gt;&lt;span class=&quot;z-meta z-block z-c&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-c&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;C makroları farklı dillerdeki makro ailelerine göre güçsüz ve güvensiz bir makro tipi. LISP makroları size neredeyse sıfırdan yeni bir dil tasarlama fırsatı veriyor, LISP dil ailesinden çıkmış &amp;quot;Dil Odaklı Programlama&amp;quot; mottosunu temel alan Racket ile farklı problemler için farklı &amp;quot;diller&amp;quot; yazabiliyorsunuz, ancak aslında hepsi Racket makroları ile yazılmış sözdizimleri, yani aslında alttaki dilin semantikleri hala Racket, hatta son 2 yılda yayınlanan Racket ile yazılmış ama sözdizimi neredeyse tamamen Python&#x27;ı andıran Rhombus adında bir &amp;quot;dil&amp;quot; de mevcut.&lt;&#x2F;p&gt;
&lt;p&gt;Sözdiziminin önemi bir dilde kodu doğru yazdığınızda değil, yanlış yazdığınızda daha çok ortaya çıkıyor. İyi tasarlanmış bir sözdizimi alacağınız hataların lokalize olmasına önem verir, eğer ki siz 17. satırda yaptığınız bir yazım hatası için 42. satırda hata alıyorsanız, programlama dili sözdizimi anlamında size ihanet etmiş demektir. Benzer şekilde programlama dilinin sizin yaptığınız hataları sessizce yok etmesi de sözdizimsel bir hata, bunun en iyi örneklerinden birisi JavaScript&#x27;teki ASI (Automatic Semicolon Insertion):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js z-code&quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;getObject&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-entity z-name z-label z-ts&quot;&gt;value&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-label z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;42&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-class z-console z-ts&quot;&gt;console&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-console z-ts&quot;&gt;log&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;getObject&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; undefined&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ASI JavaScript&#x27;in sözdizim dizaynının bir parçası, eklenebilecek herhangi bir ifadenin sonuna noktalı virgül (&lt;code&gt;;&lt;&#x2F;code&gt;) ekleyerek dili yeni başlayanlara daha yakın hale getirme çabasının bir sonucu, ve benim gözümde kötü bir dizaynın iyi bir örneği. Dilin sözdiziminin parçası olan başka örnekler Python&#x27;ın tarihsel olarak popüler olan kıvırcık parantez (&lt;code&gt;{}&lt;&#x2F;code&gt;) blok sözdizimini reddedip girinti (indentation) bazlı bloklar oluşturması, ki daha geçmişe baktığımızda kıvırcık parantez öncesi &lt;code&gt;BEGIN END&lt;&#x2F;code&gt;, &lt;code&gt;IF FI&lt;&#x2F;code&gt;, &lt;code&gt;FOR ENDFOR&lt;&#x2F;code&gt; gibi farklı sözdizimsel tercihler de görüyoruz. Tabii en ünlü sözdizimsel tercih, bu tarz bloklar, işaretçiler, operatör öncelikleri vb. gibi tercihleri bir kenara bırakıp S-ifadeleri (s-expressions) kullanmak, LISP dil ailesini s-ifadeleriyle dolu bol parantezli kodlarından tanıyabiliyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;progn&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-storage z-type z-function-type z-lisp&quot;&gt;defmacro&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-lisp&quot;&gt;thr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;x &amp;amp;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;rest&lt;&#x2F;span&gt; fs&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; `&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;reduce&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;lambda&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;a &lt;span class=&quot;z-support z-function z-lisp&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;funcall&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-lisp&quot;&gt;f&lt;&#x2F;span&gt; a&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &amp;#39;,fs :initial&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;-&lt;&#x2F;span&gt;value ,x&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;labels &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;fib &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-lisp&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-comparison z-lisp&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; n &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; n &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;fib &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;-&lt;&#x2F;span&gt; n &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;fib &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;-&lt;&#x2F;span&gt; n &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;    &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-lisp&quot;&gt;let&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;xs &amp;#39;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;4&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;           &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;ys &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-lisp&quot;&gt;mapcar&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;lambda&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;x&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;lambda&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;k&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;*&lt;&#x2F;span&gt; x x&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; k&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;7&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; xs&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;           &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;sum&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;reduce&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-character z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-constant z-lisp&quot;&gt;#&lt;&#x2F;span&gt;&amp;#39;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;remove&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-lisp&quot;&gt;if&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-lisp&quot;&gt;not&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-character z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-constant z-lisp&quot;&gt;#&lt;&#x2F;span&gt;&amp;#39;evenp&lt;&#x2F;span&gt; ys&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;           &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;t3 &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;thr &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;lambda&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;x&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;+&lt;&#x2F;span&gt; x &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;5&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;lambda&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;x&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;*&lt;&#x2F;span&gt; x &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;      &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;format&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-lisp&quot;&gt;t&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lisp&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;~&amp;amp;YS=~a SUM=~a FIB(10)=~a THR=~a~%&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lisp&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; ys &lt;span class=&quot;z-support z-function z-lisp&quot;&gt;sum&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;fib &lt;span class=&quot;z-constant z-numeric z-lisp&quot;&gt;10&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; t3&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Her ne kadar bu şekilde görmesek de, sözdizimini bir kenara bırakmanın bir başka örneğini devops ailesinde &lt;code&gt;JSON&lt;&#x2F;code&gt; veya &lt;code&gt;YAML&lt;&#x2F;code&gt; bazlı sözdizimlerinin popüler olmasında görüyoruz. Github aksiyonlarınızı yazdığınız YAML dosyası aslında bir programlama dili.&lt;&#x2F;p&gt;
&lt;p&gt;Aynı dilin semantik olarak değişmeyen ancak sözdizimsel olarak değişen 2 halinden bahsediyorsak, o zaman popüler &amp;quot;programlama dili fark etmez, sözdizimini öğrenince hepsi aynı zaten&amp;quot; algısı doğru olabilir, ancak ben o halde bile doğru olduğunu düşünmüyorum, çünkü sözdizimi bizim için dilin bazı parçalarını kullanmayı daha kolay, bazı parçalarını kullanmayı daha zor hale getiriyor, eğer dilde bir veri yapısı için özel sözdizimi varsa, programcıların onu kullanma ihtimali çok daha artıyor. Python ve JavaScript&#x27;in ikisi de sonradan üstüne eklenmiş statik tip sistemlerine sahip, ancak TypeScript MyPy&#x27;dan çok daha popüler, benim bu konudaki görüşüm TypeScript tiplerinin yazmanın sözdizimsel olarak Python tip tüyolarından (type hints) çok daha kolay olması. JavaScript&#x27;te çok benzer kullanım şeklillerine sahip olmalarına rağmen objelerin Map&#x27;e göre çok daha popüler olduğunu görüyoruz, çünkü obje oluşturmak için özel sözdizimi varken, ve bu dilin çok temeline yerleşmişken, Map fonksiyonlarının dilde yazılmış farklı bir veri yapısından bir farkı yok. Sözdizimi dile olan sosyal algımızı etkiliyor, bu da sonrasında sosyal bir obje olan programlama dilini değiştiriyor, ekosistemi, araçları, dilin kullanımını ve gelişimini yönlendiriyor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;semantik-semantics-anlambilim&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#semantik-semantics-anlambilim&quot; aria-label=&quot;Anchor link for: semantik-semantics-anlambilim&quot;&gt;Semantik - Semantics (Anlambilim)&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Programlamanın bilgisayar ve programcı arasındaki iletişim olduğunu söylemiştik, sözdizim bu iletişimin &amp;quot;nasıl&amp;quot; olduğunu belirliyorsa, semantik de bu iletişimin ne anlama geldiğini belirliyor. Bunu daha derin anlatmak için biraz matematiğe girmemiz gerekecek, onun için kemerlerinizi bağlayın, koltuklarınıza sıkı tutunun. Programlama dillerini yorumlarken, kullanıcıdan bir metin olarak gelen kodu dilin sözdizimine uygun bir şekilde ayrıştırıyoruz (parsing). Bu ayrıştırmanın sonunda elimizde dilin soyut bir temsili ortaya çkıyor, bu temsile &amp;quot;Soyut Sözdizim Ağacı&amp;quot; (Abstract Syntax Tree) diyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Bu noktadan itibaren &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;programlama-dilleri-hakkinda&#x2F;#evaluation-strategies&quot;&gt;diller arasındaki semantik farklılıklardan&lt;&#x2F;a&gt; bahsetmeden önce küçük bir teorik sapma yapacağım, dil semantiklerinin formal olarak nasıl tanımlandığını &lt;a href=&quot;https:&#x2F;&#x2F;people.cs.umass.edu&#x2F;~arjun&#x2F;courses&#x2F;cmpsci631-spring2016&#x2F;reading&#x2F;lecture2.pdf&quot;&gt;UMASS Amherst Programlama Dilleri&lt;&#x2F;a&gt; dersinden aldığım bir örnekle açıklayacağım. Eğer matematiksel notasyonlardan sıkılıyorsanız, korkuyorsanız, ya da ilgilenmiyorsanız önümüzdeki kısmı atlayabilirsiniz.&lt;&#x2F;p&gt;
&lt;p&gt;Dilimiz aritmetik ve ikili (boolean) ifadeler içeren basit bir hesaplama dili. Dilin yapısını ifade etmek için EBNF (Extended Backus Naur Form) kullanıyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ebnf&quot; class=&quot;language-ebnf z-code&quot;&gt;&lt;code class=&quot;language-ebnf&quot; data-lang=&quot;ebnf&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;e ::= true | false | n | e1 + e2 | e1 * e2 | e1 &amp;gt; e2 | if e1 then e2 else e3 | (e)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;v ::= true | false | n
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aynı tanımı TypeScript&#x27;te yapmak istersek&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Expr&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;         &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Bool&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;boolean&lt;&#x2F;span&gt;          &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Add&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;lhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;rhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Mul&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;lhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;rhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Gt&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;  &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;lhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;rhs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;If&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Expr&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Value&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Number&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;         &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Bool&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;boolean&lt;&#x2F;span&gt;          &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Programcının sözdizimine uyarak metinsel olarak ifade ettiği programları ayrıştırma (parsing) ile soyut sözdizim ağaçlarına çeviriyoruz. Aşağıda bu dönüşümün bir örneğini görebilirsiniz.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;programlama-dilleri-hakkinda&#x2F;image.png&quot; alt=&quot;1 - (2 + 1)&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Eğer parantezi sola alsaydık, çok farklı bir ağaca ulaşırdık, tabii bu ağacın anlamı da farklı olurdu.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;programlama-dilleri-hakkinda&#x2F;image-1.png&quot; alt=&quot;(1 - 2) + 1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Artık dilimizin bir şekli var, ama hala bir anlamı yok. Şu noktada seneler boyunca tekrar tekrar gördüğümüz konseptleri tekrar tekrar gördüğümüz için dilin ne yapması gerektiğini hayal edebiliyoruz tabii ama, gelin matematiksel olarak nasıl tanımlandığını görelim. Burada göstereceğim notasyonu okumak için önce uzun yatay çizginin altından başlayıp, çizginin üstündeki ifadeleri altındaki ifadenin doğru olması için &amp;quot;gereksinimler&amp;quot; gibi görebilirsiniz.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;programlama-dilleri-hakkinda&#x2F;image-3.png&quot; alt=&quot;big-step-semantics&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Burada önemli olan nokta, &lt;code&gt;⇓&lt;&#x2F;code&gt; operatörünün solundaki değişkenler &lt;code&gt;e1, e2, e3&lt;&#x2F;code&gt; gibi dilimizin ifadelerini temsil ederken, operatörün sağındaki &lt;code&gt;n1, n2, v&lt;&#x2F;code&gt; gibi değişkenlerin dilimizin hesapladığı sonuçları temsil etmesi. Yani buradaki her bir kural bize dilimizdeki o ifadenin anlamını belirtiyor. &lt;code&gt;If-True&lt;&#x2F;code&gt; kuralını incelersek eğer, kuralın alt tarafı bize diyor ki &lt;code&gt;if e1 then e2 else e3&lt;&#x2F;code&gt; sonucu hesaplandığında &lt;code&gt;v&lt;&#x2F;code&gt; değerine ulaşırız, kuralın üstündeki gereksinimler de diyor ki bu ancak &lt;code&gt;e1&lt;&#x2F;code&gt;in sonucu &lt;code&gt;true&lt;&#x2F;code&gt; ve &lt;code&gt;e2&lt;&#x2F;code&gt;nin sonucu  &lt;code&gt;v&lt;&#x2F;code&gt; olduğunda gerçekleşir.&lt;&#x2F;p&gt;
&lt;p&gt;Kısaca örnekleyelim: &lt;code&gt;if (1+2 &amp;gt; 2*1) then 5 else 9  ⇓  5&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;tt&quot; class=&quot;language-tt z-code&quot;&gt;&lt;code class=&quot;language-tt&quot; data-lang=&quot;tt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1 ⇓ 1   2 ⇓ 2   3 = 1 + 2     2 ⇓ 2   1 ⇓ 1   2 = 2 * 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;────────────────────────Add   ─────────────────────────Mul
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1 + 2 ⇓ 3                     2 * 1 ⇓ 2                    3 &amp;gt; 2      
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;────────────────────────────────────────────────────────────────Gt-True   ───────Num
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1 + 2 &amp;gt; 2 * 1 ⇓ true                                                      5 ⇓ 5 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;───────────────────────────────────────────────────────────────────────────────If-True
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;if (1+2 &amp;gt; 2*1) then 5 else 9  ⇓  5
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Resme dışardan bakınca karmaşık gelebilir, ancak her çizgi aşağıda tanımladığımız kuralların bir uygulaması olduğu için isterseniz yukarıdan aşağıya doğru adım adım küçükten büyük parçalara, isterseniz de aşağıdan yukarıya doğru büyükten küçüğe parçalara ayırarak okuyabilirsiniz. Bu kuralların her birine &amp;quot;Doğruluk Kuralı&amp;quot; (Inference Rule) diyoruz, ve bu kuralların tamamına da &amp;quot;Büyük Adım Semantiği&amp;quot; (Big Step Semantics) diyoruz. Kuralları bir araya getirdiğimizde de &amp;quot;Türetim Ağacı&amp;quot; (Derivation Tree) elde ediyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Aritmetik operatörler gibi basit ifadeler için bu kuralları yazmanın çok fazla farklı yolu yok, zaten aritmetik ifadeler de dil semantiklerinin tasarımında önemli bir rol oynamıyor. Ancak özellikle fonksiyon çağrıları (function calls), referanslar ve işaretçiler (pointers), bellek yönetimi (memory management), paralel programlama (concurrency) gibi daha karmaşık konseptler için yazdığımız kurallardaki küçük farklılıklar dilin anlamını büyük ölçüde etkileyebiliyor.&lt;&#x2F;p&gt;
&lt;p&gt;Bu tarz kompleks semantikler için benzer kuralları yazmak bir blog post için fazla detay olacağı için buradan itibaren diller içerisinde farklılıklar gösteren semantiklerden, ve nasıl farklılıklar gösterdiğinden sözlü olarak bahsederek devam edeceğim.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;evaluation-strategies&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#evaluation-strategies&quot; aria-label=&quot;Anchor link for: evaluation-strategies&quot;&gt;Değerlendirme Stratejileri&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Ana akım programlama dillerindeki önemli bir ortak dizayn noktası sıkı değerlendirme (strict evaluation) kullanmaları, bunun dışına çıkan benim bildiğim tek popüler örnek sıkı-olmayan değerlendirme (non-strict evaluation) kullanan Haskell. Sıkı değerlendirmede, fonksiyonların girdileri fonksiyonlar çağırılmadan önce hesaplanıyor. Bir sayının karesini alan &lt;code&gt;square&lt;&#x2F;code&gt; fonksiyonunu ele alalım:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;square&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-ts&quot;&gt; &lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;n&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu fonksiyonu &lt;code&gt;square(1 + 2)&lt;&#x2F;code&gt; ile çağırdığımızda TypeScript&#x27;teki değerlendirme aşağıdaki gibi yaşanıyor:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;square&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; 1 + 2 -&amp;gt; 3&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;square&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; square(3) -&amp;gt; 3 * 3&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; 3 * 3 = 9&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;9&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aynı fonksiyonu Haskell&#x27;da çağırsaydık aynı sonuca varacak olmamıza rağmen çok farklı bir yol izleyecektik:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;square&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; square(1 + 2) -&amp;gt; (1 + 2) * (1 + 2) &lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; (1 + 2) -&amp;gt; 3&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; 3 * 3 = 9&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;9&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;TypeScript&#x27;te fonksiyonu çağırmadan önce argümanların değerlerini hesapladık, ancak Haskell&#x27;da  fonksiyonu bir değer (value) yerine bir hesaplama (computation) ile çağırdık, ve ancak değerin kendisine ihtiyaç duyduğumuzda hesaplamayı yaptık. Bu örnek için &amp;quot;bu neden önemli, aynı şeyi hesaplıyoruz işte&amp;quot; diyebilirsiniz, ancak sıkı-olmayan değerlendirme bizlere programları çok farklı şekillerde yazma fırsatı veriyor aslında. Bunun klasik örneklerinden birisi Haskell&#x27;daki &amp;quot;sonsuz veri yapıları&amp;quot;. Dilde bir değer ancak ona ihtiyaç duyulduğunda hesaplandığı için sonsuza kadar giden seriler yazabiliyoruz mesela &lt;code&gt;1, 4, 9...&lt;&#x2F;code&gt; gibi. Bu serilerin elemanları ancak onları hesaplamamız gerektiği noktada hesaplandığı için teoride sonsuz olan bu seriyi programımızda oluşturup, manipüle edip, istediğimiz şekilde kullanabiliyoruz. Mesela aşağıda sonsuz bir dizi kullanarak Fibonacci sayılarının hesaplandığı bir örneği paylaştım.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;haskell&quot; class=&quot;language-haskell z-code&quot;&gt;&lt;code class=&quot;language-haskell&quot; data-lang=&quot;haskell&quot;&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; Sonsuz fibonacci listesi
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-haskell&quot;&gt;fibs&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-other z-double-colon z-haskell&quot;&gt;::&lt;&#x2F;span&gt; [&lt;span class=&quot;z-storage z-type z-haskell&quot;&gt;Integer&lt;&#x2F;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-meta z-function z-type-declaration z-haskell&quot;&gt;&lt;&#x2F;span&gt;fibs &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;:&lt;&#x2F;span&gt; zipWith &lt;span class=&quot;z-entity z-name z-function z-infix z-haskell&quot;&gt;(+)&lt;&#x2F;span&gt; fibs (tail fibs)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;&lt;span class=&quot;z-comment z-line z-double-dash z-haskell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-haskell&quot;&gt;--&lt;&#x2F;span&gt; İlk 10 fibonacci sayısını al
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-haskell&quot;&gt;main &lt;span class=&quot;z-keyword z-operator z-haskell&quot;&gt;=&lt;&#x2F;span&gt; print (take &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-haskell&quot;&gt;10&lt;&#x2F;span&gt; fibs)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sıkı ve sıkı-olmayan değerlendirme stratejileri kendi içinde pek çok alt kategoriye ayrılıyor, mesela Haskell yalnızca sıkı-olmayan değerlendirme değil, aynı zamanda tembel değerlendirme (lazy evaluation) dediğimiz sıkı-olmayan değerlendirmeyi aynı hesaplamayı defalarca yapmamak için değer paylaşımı yapan bir metodoloji ile uyguluyor. JavaScript&#x27;in &lt;code&gt;==&lt;&#x2F;code&gt; ve &lt;code&gt;===&lt;&#x2F;code&gt; işaretlerinin, Python&#x27;ın &lt;code&gt;==&lt;&#x2F;code&gt; ve &lt;code&gt;is&lt;&#x2F;code&gt; karşılaştırmalarının farklı olmasının sebebi olan &amp;quot;referans&amp;quot; ve &amp;quot;değer&amp;quot; ayrımı da dilleri birbirinden ayırıyor. C programlama dilinde bir fonksiyona gönderdiğiniz her girdi bir değer (call by value), o yüzden fonksiyonu çağırdığınız her bir obje kopyalanıyor. Eğer bir fonksiyonu büyük bir obje ile çağırırsanız o obje kopyalandığı için performans sıkıntısı yaşayabilirsiniz hatta, bu yüzden fonksiyonu objenin kendisi ile değil, objeyi işaret eden bir işaretçiyi (pointer) ile çağırıyoruz. Diğer yandan Java, JavaScript, Python gibi dillerde ise sayılar, karakterler gibi belli girdi tipleri değer olarak gönderilip kopyalanırken objeler referans ile gönderiliyor, bu stratjinin adına ben de bu yazıyı yazarken öğrendim ki &amp;quot;paylaşarak çağırma&amp;quot; (call by sharing) deniyor. Diğer yanda Rust programlama dilinde taşıma semantikleri (move semantics) var, eğer ki siz bir fonksiyonu çağırırken girdinin açık bir şekilde referansını kullanmadıysanız Rust o objeyi o fonksiyona &amp;quot;taşıyor&amp;quot;, dolayısıyla o nokta itibariyle o değere erişiminizi kaybediyorsunuz.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bellek-yonetimi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bellek-yonetimi&quot; aria-label=&quot;Anchor link for: bellek-yonetimi&quot;&gt;Bellek Yönetimi&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Objelerden, değerlerden, kopyalardan, taşımadan bahsediyoruz, peki bunlar nasıl yaşanıyor? En temelde bilgisayarlar mimarilerinin izin verdiği birtakım işlemleri yapabilen basit makineler, derleyiciler ve yorumlayıcılar programlama dillerindeki kompleks semantikleri bu işlemlerin üzerine kurgulayarak bilgisayara yaptırıyorlar, bu aşamada programlarımızın oluşturduğu objeleri tutmak için bilgisayarın belleğini kullanıyoruz. Bu belleği kullanırken dikkatli olmamız gerekiyor, çünkü her ne kadar kullandığımız cihazların donanımları her gün gelişse de hiçbir şey sınırsız değil. Belleği kullanırken bir miktar belleğe ihtiyacımız olduğunda bunu alttaki işletim sisteminden istemek, o belleğe artık ihtiyacımız olmadığında ise işletim sistemine bunu geri bırakmak istiyoruz, bu işlem esnasında hata yaparsak, yani aldığımız belleğin bir kısmını geri bırakmayı unutursak, özellikle uzun süreli çalışan programlar bir noktadan sonra işletim sisteminden bellek isteyemeyecek, dolayısıyla program hata verip kapanacak, buna bellek sızması (memory leak) diyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Buraya kadar tasvir ettiğim süreç &amp;quot;manuel bellek yönetimi&amp;quot; (manual memory management) dediğimiz, C, Zig, Odin gibi programlama dillerinde kullanılan bellek yönetim stratejisinin bir parçası. Bellek yönetimi arayüzünün 2 temel fonksiyonu var, ilki işletim sisteminden yeni bir bellek parçası istemek için kullandığımız &lt;code&gt;malloc&lt;&#x2F;code&gt;, ikincisi ise bir bellek parçasını geri vermek için kullandığımız &lt;code&gt;free&lt;&#x2F;code&gt;. Manuel bellek yönetimi stratejileri kullanan dillerde programcılar işletim sisteminden istedikleri bellek miktarını &lt;code&gt;malloc&lt;&#x2F;code&gt; ile açık bir şekilde isteyip, &lt;code&gt;free&lt;&#x2F;code&gt; ile açık bir şekilde geri bırakmak zorundalar. Tarihsel olarak bellek yönetiminin manuel yapılmasının programların güvenliği de dahil olmak üzere pek çok dezavantajı ve zorluğu olması dolayısıyla, pek çok programlama dili otomatik bellek yönetimi stratejileri izliyor.&lt;&#x2F;p&gt;
&lt;p&gt;Bu stratejilerin ilki RAII (Resource acquisition is initialization), RAII kullanırken bellekte yer kaplayan tüm objelerin oluşturucu (constructor) ve yıkıcı (destructor) fonksiyonları esnasında bellek yönetimini yapıyoruz. Bu sayede spesifik objeler için &lt;code&gt;malloc&#x2F;free&lt;&#x2F;code&gt; çiftlerini ayrıca takip etmeden bellek yönetimini basitleştirebiliyoruz, C++ ve Rust bellek yönetimi için RAII kullanıyor. Bir diğer strateji ise dinamik referans sayaçları (dynamic reference counting) kullanmak. Referans sayacı tarafından takip edilen bir objeye herhangi bir anda kaç farklı noktadan erişilebildiğini program arka planda takip ediyor, bu takip esnasında objeye olan referans sayısı 0&#x27;a inerse, yani obje artık programda erişilebilir değilse, arka planda otomatik olarak o objenin kullandığı belleği işletim sistemine geri veriyor. Dinamik bellek yönetimi için son bahsedeceğim metot ise Çöp Toplayıcı (Garbage Collection) algoritmaları. Çöp toplayıcılar genelde referans sayaçlarına göre daha kompleks algoritmalar ve programın performansını kötü etkilememek için gerekli sezgisel hesaplamaları içeriyor. Rust&#x2F;C++ gibi dillerde RAII&#x27;ın üzerine dinamik referans sayaçları sağlarken, Swift tüm bellek yönetimi için referans sayaçları kullanırken Java ve Go çöp toplayıcıları tercih ediyor, Python ise araştırabildiğim kadarıyla RC&#x2F;GC hibrit bir metodoloji kullanıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Bellek yönetimi de değerlendirme stratejisi gibi dilden dile geçişlerde programlama stilinizi değiştirmenizi ve yeni metotlar öğrenmenizi gerektiren semantik bir bileşen. Bunun en dramatik örneği buraya kadar çok da detaya girmediğim Rust programlama dili. Rust kendisini diğer dillerden tip sistemini kullanarak statik bellek yönetimi yaparak ayrıştıran bir dil, Sahiplik (ownership), Ödünç alma (borrowing), ve Statik Obje Ömürleri (lifetimes) üzerine kurulu statik bellek yönetimi sistemiyle Rust dinamik bellek yönetiminin performans problemlerinden kaçınırken bir yandan da manuel bellek yönetiminin sonucunda ortaya çıkan bellek hataları gibi problemleri dilde yazabildiğimiz programları kısıtlayarak çözmeye çalışıyor, bu sebepten ana akım diller arasında öğrenmesi en zor dillerden birisi olarak görülüyor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;eszamanli-programlama-concurrent-programming&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#eszamanli-programlama-concurrent-programming&quot; aria-label=&quot;Anchor link for: eszamanli-programlama-concurrent-programming&quot;&gt;Eşzamanlı Programlama (Concurrent Programming)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Her ne kadar bugün karşımıza çıkan programların çok büyük bir kısmı tek-akışlı (single-threaded) programlar olsa da, aslında bugün bilgisayarlarımızda çalışıp CPU&#x27;larımızı yoran programların çok büyük bir kısmı çok-akışlı (multi-threaded). Eşzamanlılık (concurrency) programlama için &amp;quot;batch programming&amp;quot; günlerini geçtiğimizden beri önemli bir konsept, çünkü işletim sistemi, tarayıcı gibi programlarda farklı işleri yapacak alt-programlar arasında işlemcinin zamanını bir şekilde bölmemiz gerekiyor elimizde tek işlemci bile olsa. Çok çekirdekli işlemcilerle birlikte eşzamanlılığın üzerine parallellik (parallelism) ayrı bir konsept olarak ortaya çıktı, bilgisayara yaptırmak istediğimiz hesaplamaları daha küçük birimlere bölüp her birimi farklı işlemci ile işleyerek problemleri daha hızlı çözebiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Geçtiğimiz 40 senede farklı programlama dillerinin tek-akışlı semantikleri her geçen gün birbirlerine yaklaştı, o yüzden bugün bir programlama dilinden diğerine neredeyse sadece sözdizimini öğrenip geçebiliyor, yüzeysel düzeyde benzer işler yapan benzer programlar yazabiliyorsunuz. Eğer 1980&#x27;e geri dönseydiniz, her dil farklı problemlere çözmeye, farklı alanlarda kendini optimize etmeye çalıştığı için bu şekilde hızlı geçişler yapmanız çok daha zor olurdu. Bu 40 yılda programlama dilleri bir evrim sürecine girdi, yapılı programlama (structural programming) popülerleşti, alternatif kontrol akışı dinamikleri yavaş yavaş birkaç ortak konseptte birleşti, &lt;code&gt;goto&lt;&#x2F;code&gt; ortadan kayboldu; bu evrimi etkileyen faktörlerin bir kısmı nasıl daha anlaşılır programlar yazarız, nasıl daha az hata yaparız, nasıl büyük projeleri daha hızlı geliştiririz gibi daha sosyal problemlere cevap olarak yaşansa da, ciddi bir kısmı da kullandığımız donanımlara göre şekillendi. Bugün ondalık sayılarla programlama için IEEE-754 modelini kullanıyor olmamızın, programlama dillerinin &lt;code&gt;0.1 + 0.2 != 0.3&lt;&#x2F;code&gt; gibi kafamızdaki matematiksel modellere uymayan semantiklere sahip olması IEEE-754&#x27;ün donanımlarda hızlı bir şekilde çalıştırılabilmesinin mümkün olması, yoksa aslında ondalık sayılar yerine rasyonel sayıları kullanarak aklımızdaki ideal matematiksel semantiklere çok daha yakın sonuçlar alabilirdik (hatta çoğu dilde bunu sağlayan kütüphaneler var), ancak donanımın izin verdiği sınırlamalar altında bu şekilde çalışabiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Uzuuunca bir alakasız bilgi yığınının ardından eşzamanlı programlamaya geri döneyim. Bugün neredeyse her programlama dili bir şekilde eşzamanlı programlama kabiliyetlerine izin verse de, elimizdeki durum biraz daha 80&#x27;lerdeki tek-akışlı programlama günleri gibi, her dil farklı mekanizmalar, farklı metotlar sağlıyor. En popüler paradigmalardan birisi &lt;code&gt;async&#x2F;await&lt;&#x2F;code&gt;, bu paradigmada &lt;code&gt;async&lt;&#x2F;code&gt; olarak işaretlenen fonksiyonlar asenkron semantiklere sahip, yani bu fonksiyonları çağırdığımızda onların sonuçlarını bekleyerek işlemci vaktini boşa harcamak istemiyoruz senkron fonksiyonlarda yaptığımız gibi. Programlama dilleri &lt;code&gt;async&lt;&#x2F;code&gt; fonksiyonları bir &amp;quot;sonlu durum makinesine&amp;quot; (finite-state machine) derleyerek programcının gözünde çok-akışlı programların karmaşıklığını saklayıp basit bir şekilde eşzamanlılığa erişim sağlayabiliyor. Bir diğer paradigma aktör modelleri, aktör modellerinde asenkron aktörler birbirlerine mesajlar göndererek (message passing) bilgi aktarımı yapıyor, programlama dili bu mesajların gönderilmesini ve alınmasını organize ederek eşzamanlılığı sağlıyor. Diğer yanda bellek-paylaşımlı eşzamanlılık (shared-memory concurrency) eşzamanlı akışların (threads) programın erişebildiği kaynakları okumak ve o kaynakları değiştirmek için kilitleme (locking) mekanizmalarını kullanmasını sağlıyor, mutex, rwlock, semaphore gibi veri yapılarını kullanarak erişimi kontrol ediyor. Diğer yanda atomik operasyonlar ile kilit kullanmadan da farklı akışların ortak erişebildiği kaynaklar ile programlar yazabiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Ben var olan eşzamanlı programlama metotlarının yalnızca çok küçük bir kısmından bahsettim, literatüre gerçekten hakim birisi farklı seçenekler üzerine saatlerce konuşabilir, ve farklı programlama dilleri farklı metotları uyguluyor, optimize ediyor, onları kolayca kullanmanıza izin verecek ekosistemlere ya da dil seviyesinde desteğe sahip. Bu başta da bahsettiğim &amp;quot;dilden dile sözdizimi öğrenip geçebiliyorsun&amp;quot; mitini ciddi bir şekilde yıkıyor,  eşzamanlı programlama paradigmaları tek-akışlı paradigmaların yaşadığı evrimsel süreci daha aynı derecede yaşamadı, diller benzer özelliklerde tamamen birleşmedi, hala ciddi ayrımlar, aktarılması zor, bazen de imkansız semantikler var.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tip-sistemleri&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tip-sistemleri&quot; aria-label=&quot;Anchor link for: tip-sistemleri&quot;&gt;Tip Sistemleri&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Yazının başında da bahsettiğim gibi, &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;tip-sistemleri-hakkinda&#x2F;&quot;&gt;tip sistemleri hakkında&lt;&#x2F;a&gt; uzun ve detaylı ayrı bir yazı yazmıştım. Yine de programlama dillerini birbirinden ayırmasına kısaca da olsa değinmek istedim. Dinamik ve statik tip sistemlerinin dilleri birbirinden nasıl ayırabildiğinin aslında pek çoğumuz farkındayız, mesela aşağıdaki Python programının eşleniği bir kodu pek çok dilde yazmak mümkün değil.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-python&quot;&gt;is&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-python&quot;&gt;not&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;str&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;False&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-conditional z-else z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-else z-python&quot;&gt;else&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-else z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Her şeyden önce program çalışırken &lt;code&gt;x is not str&lt;&#x2F;code&gt; kontrolünü yapabilmek için dilin dinamik tipli bir dil olması gerek. İkinci olarak da programımız &lt;code&gt;x: str&lt;&#x2F;code&gt; durumu için &lt;code&gt;x&lt;&#x2F;code&gt;, diğer durumlarda &lt;code&gt;false&lt;&#x2F;code&gt; dönüyor, dolayısıyla bu fonksiyonun tipini hesaplamayı denersek karşımıza gelecek olan tip &lt;code&gt;(str -&amp;gt; str)&amp;amp;(Any -&amp;gt; bool[False])&lt;&#x2F;code&gt; gibi kompleks bir tip olacak, pek çok tip sistemi bu tarz tipleri ifade edecek kadar kompleks değil.&lt;&#x2F;p&gt;
&lt;p&gt;Yine de sosyal olarak programlama dillerinin kullanımına baktığımızda ana akım tip sistemleri diller arasında geçiş yapmak için ciddi bir bariyer değil gibi duruyor. Python -&amp;gt; Java, C++ -&amp;gt; JavaScript gibi dil geçişlerinde kullanıcıların çok büyük şikayetler ettiklerini duymuyoruz, en azından ben şahsen bununla çok karşılaşmadım. Dolayısıyla bu yazının temasına uygun olarak tip sistemlerinin dilleri birbirinden kullanıcı geçişini engelleyecek şekilde ayırdığı durumları kısaca incelemek istiyorum.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kaynak-tipleri-resource-types&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kaynak-tipleri-resource-types&quot; aria-label=&quot;Anchor link for: kaynak-tipleri-resource-types&quot;&gt;Kaynak Tipleri (Resource Types)&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Klasik tip sistemlerinde tipler sınırlı kaynaklar olarak görülmez, yani &lt;code&gt;a + b&lt;&#x2F;code&gt;&#x27;nin tipini hesaplarken &lt;code&gt;a: int, b: int -&amp;gt; a + b: int&lt;&#x2F;code&gt; şeklinde hesaplamalar yapabilirsiniz, ve bu değişkenleri tekrar tekrar kullanabilirsiniz, yani aşağıdaki programda &lt;code&gt;x: bool&lt;&#x2F;code&gt; ve &lt;code&gt;y: bool&lt;&#x2F;code&gt; sonuçlarına varabilirsiniz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; a &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;alp&lt;span class=&quot;z-punctuation z-definition z-string z-end z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; b &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;keles&lt;span class=&quot;z-punctuation z-definition z-string z-end z-rust&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-rust&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-rust&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; f &lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;string&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; string&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;bool&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-closure z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-closure z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;a&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-closure z-rust&quot;&gt;a &lt;span class=&quot;z-keyword z-operator z-comparison z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; x &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-rust&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-rust&quot;&gt;let&lt;&#x2F;span&gt; y &lt;span class=&quot;z-keyword z-operator z-assignment z-rust&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-rust&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;,&lt;&#x2F;span&gt; b&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rust&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ancak Rust&#x27;ın tip sistemi gibi kaynak bazlı bir tip sistemi kullanıyorsanız, o zaman her değişkeninizi sınırlı defa kullanabilirsiniz, çünkü değişkenler &amp;quot;kaynak&amp;quot; olarak görülür, siz bir değişkeni bir noktada kullandığınızda değişkeni &amp;quot;transfer&amp;quot; edersiniz, dolayısıyla tekrar kullanamazsınız. Eğer ki bu programı Rust&#x27;ta çalıştırmaya çalışırsanız, &lt;code&gt;let y = f(a, b)&lt;&#x2F;code&gt; hata verecek, çünkü &lt;code&gt;let x = f(a, b)&lt;&#x2F;code&gt; yazdığınızda &lt;code&gt;a&lt;&#x2F;code&gt; ve &lt;code&gt;b&lt;&#x2F;code&gt; değişkenleri &lt;code&gt;f&lt;&#x2F;code&gt; fonksiyonuna taşındı (moved) ve artık onlara erişiminiz yok. Dolayısıyla kaynak tiplerini kullanırken klasik ana akım tip sistemlerine göre çok daha farklı bir zihinsel modelle çalışmanız gerekiyor.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bagimli-tipler-dependent-types&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bagimli-tipler-dependent-types&quot; aria-label=&quot;Anchor link for: bagimli-tipler-dependent-types&quot;&gt;Bağımlı Tipler (Dependent Types)&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Klasik tip sistemlerinde programların tipleri değerlere bağımlı olmaz, tiplere bağımlı olur. Yani bir fonksiyona girdi olarak &lt;code&gt;0&lt;&#x2F;code&gt; geldiğinde &lt;code&gt;bool&lt;&#x2F;code&gt; dön, başka bir sayı gelince &lt;code&gt;int&lt;&#x2F;code&gt; dön diyemezsiniz. Tip sistemleri kısmının başında Python&#x27;da yazdığınız gelen değere göre farklı tipler dönen bir fonksiyonu başka dillerde yazamayacağınızdan bahsetmiştim, bağımlı tipler bu tarz fonksiyonları statik tip sistemleriyle yazabilmenize izin veriyor, yani Python&#x27;daki gibi program çalışırken gelen tip üzerine kontrol yazmak yerine, statik olarak gelen değere göre farklı tipler dönecek programlar yazabiliyorsunuz. Yazıyı çok uzatmamak adına bağımlı tiplerine kabiliyetlerini gelecek bir yazıya saklayacağım, ama bağımlı tipleri kullanarak yazdığınız kod üzerine teoremler yazıp onları kanıtlamak, klasik tip sistemlerinde mümkün olmayan &amp;quot;Parmak Ağaçları&amp;quot; (Finger Trees) gibi veri yapılarını yazmak mümkün. &lt;&#x2F;p&gt;
&lt;h4 id=&quot;akiskan-tipler-liquid-types&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#akiskan-tipler-liquid-types&quot; aria-label=&quot;Anchor link for: akiskan-tipler-liquid-types&quot;&gt;Akışkan Tipler (Liquid Types)&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Klasik tip sistemlerinin en büyük eksilerinden bir tanesi yaptığımız hesaplamaların tiplere işlenmemesi. Örnek vermek gerekirse, &lt;code&gt;filter(|x| x % 2 == 0)&lt;&#x2F;code&gt; fonksiyonu bize hiçbir zaman tek sayı dönemeyecekken, klasik tip sistemlerinde bu ifadenin tipi yine &lt;code&gt;int&lt;&#x2F;code&gt; olacak, yani değerimizin sahip olduğuna emin olduğumuz bazı özellikler o değerin tipine işlenmeyecek. Bizler bu özellikleri kafamızda tutmak zorunda kalacağız. Tek, çift oyuncak bir örnek gibi olmuş olabilir, o yüzden gelin TypeScript&#x27;in kontrollerinin bizi tip güvenliğini (type safety) kırmaya ittiği bir örneği inceleyelim. TypeScript&#x27;te normal şartlar altında daraltma (narrowing) dediğimiz bir mekanizma biz değerimizi kontrol ettikten sonra tipi o kontrole göre güncelliyor, ancak bu mekanizmanın limitleri var.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ts&quot; class=&quot;language-ts z-code&quot;&gt;&lt;code class=&quot;language-ts&quot; data-lang=&quot;ts&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;A&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-builtin z-ts&quot;&gt;null&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;B&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-builtin z-ts&quot;&gt;null&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;U&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;A&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-ts&quot;&gt;function&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-definition z-function z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;pick&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;u&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;U&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;k&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;b&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-conditional z-ts&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;k&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-expression z-in z-ts&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;u&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-ts&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;u&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;k&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;!==&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-null z-ts&quot;&gt;null&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-ts&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-double-slash z-ts&quot;&gt; güvenli, ancak TypeScript tarafından reddediliyor.&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;u&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;k&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-undefined z-ts&quot;&gt;undefined&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-function z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Tabii bu TypeScript için uzun vadede düzeltilebilecek bir implementasyon eksikliği de olabilirdi, ancak akışkan bir tip sistemi olmadığı sürece bu tarz tip güncellemeleri her zaman belirli şartlar altında çalışmayı hedefleyerek yapılacak, dolayısıyla çalışmadıkları örnekler üretmek her zaman mümkün olacak. Akışkan tip sistemlerinde tipler üzerinde yapılan işlemlere göre güncellendiği için tip güvenliğine zarar vermeden bu tarz programlar yazmak mümkün olabiliyor.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;efekt-tiplemesi-effect-typing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#efekt-tiplemesi-effect-typing&quot; aria-label=&quot;Anchor link for: efekt-tiplemesi-effect-typing&quot;&gt;Efekt Tiplemesi (Effect Typing)&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Efekt tiplemesi çevresindeki kavramları belki de &lt;a href=&quot;https:&#x2F;&#x2F;effect.website&quot;&gt;EffectTS&lt;&#x2F;a&gt; gibi teknolojiler bağlamında duymuş olabilirsiniz. Programlama dillerinde bir &amp;quot;efekt&amp;quot; programın sahip olduğu bir kabiliyet demek. Bu efektler dosya okumak, hata vermek, konsola yazı yazmak, rastgele sonuçlar vermek, sonsuz döngüye girmek gibi farklı farklı kabiliyetler olabilir. Efekt tiplemesi kullanan programlama dillerinde fonksiyonların sahip olduğu efektler o fonksiyonun tiplerinin de bir parçası oluyor, bu sayede bir fonksiyona belli bir kabiliyeti vermek için onu açık bir şekilde tipin parçası yapmanız gerekebiliyor, ve bir adım ötede her efekt için ayrı çözümleme stratejileri (effect handling) geliştirip programın çalışma mekanizmalarını bunlarla yönlendirebiliyorsunuz.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;diger&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#diger&quot; aria-label=&quot;Anchor link for: diger&quot;&gt;Diğer&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Yazı fazlaca uzadı, yoksa aslında farklı dillerdeki özyineleme optimizasyonları (tail call optimization), tanımsız davranışlar (undefined behavior) gibi konulardan da bahsetmek, makro sistemlerinin o dilde yazılan programları nasıl değiştirebildiğini açıklamak, &lt;code&gt;defer&lt;&#x2F;code&gt;, &lt;code&gt;yield&lt;&#x2F;code&gt; gibi ana akımın dışında kalan yapıların dillerde farklılıklar gösterebildiğini tartışmak da istemiştim, artık onları sonraki yazılara bırakıyorum.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dilleri-anlamak&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dilleri-anlamak&quot; aria-label=&quot;Anchor link for: dilleri-anlamak&quot;&gt;Dilleri Anlamak&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazıyı bitirmeden önce en başta bahsettiğim bir probleme geri dönmek istiyorum, &lt;strong&gt;kullandığımız programlama dillerini anlamıyoruz&lt;&#x2F;strong&gt;. Dillere kapalı kutular gibi baktığımız, dilin sözdizimini öğrenip de derleyici ve yorumlayıcıyı şikayet etmeden çalıştırmayı başardıktan sonra o programın gerçekten ne yaptığını anlamaya çalışmak yerine atari oynar gibi doğru cevabı görene kadar farklı konfigürasyonlar deneyerek programlamaya çalışıyoruz, bu özellikle programlamaya yeni başlayanlarda çok daha yaygın. Halbuki kullandığımız programlama dillerinin hepsinin, yer yer garip ve ilginç de olsa, kesin semantikleri var. Bir programı yazdıktan sonra onu incelediğimizde ne yapacağının kesin bir tanımı var, bunları öğrenmek de çok zor değil. Bunun için klasik 2 tane örneği alıp onları demistize etmeye çalışacağım.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;javascript-b-a-a-a-banana&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#javascript-b-a-a-a-banana&quot; aria-label=&quot;Anchor link for: javascript-b-a-a-a-banana&quot;&gt;JavaScript: &lt;code&gt;&amp;quot;b&amp;quot; + &amp;quot;a&amp;quot; + +&amp;quot;a&amp;quot; + &amp;quot;a&amp;quot;; &#x2F;&#x2F; -&amp;gt; &#x27;baNaNa&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;JavaScript&#x27;in gariplikleri popüler kültürde bir şaka malzemesi haline gelmiş durumda, ben en azından şahsen birkaç ayda bir bunlarla ilgili yorumlar görüyorum, insanlar genelde çok şaşırıyor, ya da dilde bir saçmalık olduğuna inanıyor, halbuki oturup biraz incelediğimizde semantikler hiç de zor değil.&lt;&#x2F;p&gt;
&lt;p&gt;JavaScript&#x27;in en önemli dizayn hedeflerinden bir tanesi programların mümkün olduğunca hata vermemesi, çalışabildiği her durumda çalışması. Bunu dilin tip sisteminin dinamik olmasıyla birleştirdiğimizde görüyoruz ki bunu yapmanın en iyi yolu &amp;quot;gizli tip çevirileri&amp;quot; (implicit type conversions). JavaScript pek çok dilin tip hatası vereceği durumlarda değerleri otomatik olarak &lt;code&gt;string&lt;&#x2F;code&gt; tipine çevirerek bu operasyonların hata vermek yerine yanlış da olsa sonuç vermesini sağlıyor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;b&amp;quot; + &amp;quot;a&amp;quot; + +&amp;quot;a&amp;quot; + &amp;quot;a&amp;quot;&lt;&#x2F;code&gt; kodu JavaScript için şu şekilde parçalara ayrılıyor:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;JavaScript&quot; class=&quot;language-JavaScript z-code&quot;&gt;&lt;code class=&quot;language-JavaScript&quot; data-lang=&quot;JavaScript&quot;&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;b&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-js&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-js&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sonrasında programı değerlendirmeye başlıyoruz, &lt;code&gt;+&amp;quot;a&amp;quot;&lt;&#x2F;code&gt; aslında bir &amp;quot;açık tip çevirisi&amp;quot; (explicit type conversion), &lt;code&gt;+&lt;&#x2F;code&gt; operatörü sağındaki değeri &lt;code&gt;number&lt;&#x2F;code&gt; tipine çeviriyor. &lt;code&gt;string -&amp;gt; number&lt;&#x2F;code&gt; çevirisi için JavaScript &lt;code&gt;parseNumber&lt;&#x2F;code&gt; fonksiyonunu kullanıyor, dolayısıyla &lt;code&gt;+&amp;quot;123&amp;quot;&lt;&#x2F;code&gt; bize &lt;code&gt;123.0&lt;&#x2F;code&gt; veriyor, benzer şekilde &lt;code&gt;+&amp;quot;a&amp;quot;&lt;&#x2F;code&gt; da &lt;code&gt;not a number&lt;&#x2F;code&gt;, yani &lt;code&gt;NaN&lt;&#x2F;code&gt; olarak değerlendiriliyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;JavaScript&quot; class=&quot;language-JavaScript z-code&quot;&gt;&lt;code class=&quot;language-JavaScript&quot; data-lang=&quot;JavaScript&quot;&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;b&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-js&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-js&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;b&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-nan z-js&quot;&gt;NaN&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;İki string arasında &lt;code&gt;+&lt;&#x2F;code&gt; operatörü onları arka arkaya bağlıyor, yani &lt;code&gt;&amp;quot;b&amp;quot; + &amp;quot;a&amp;quot; = &amp;quot;ba&amp;quot;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;JavaScript&quot; class=&quot;language-JavaScript z-code&quot;&gt;&lt;code class=&quot;language-JavaScript&quot; data-lang=&quot;JavaScript&quot;&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;b&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-nan z-js&quot;&gt;NaN&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;ba&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-nan z-js&quot;&gt;NaN&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ancak bu noktada bir tip uyumsuzluğuyla karşılaşıyoruz, toplama operatörü &lt;code&gt;string + number&lt;&#x2F;code&gt; bağlamında tanımlı değil, o bağlamda JavaScript önce &lt;code&gt;number -&amp;gt; string&lt;&#x2F;code&gt; dönüşümünü yapıp sonra &lt;code&gt;string + string&lt;&#x2F;code&gt; operasyonunu uyguluyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;JavaScript&quot; class=&quot;language-JavaScript z-code&quot;&gt;&lt;code class=&quot;language-JavaScript&quot; data-lang=&quot;JavaScript&quot;&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;ba&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-nan z-js&quot;&gt;NaN&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;ba&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;NaN&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;baNaN&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-js&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;a&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-js&quot;&gt;&lt;span class=&quot;z-meta z-string z-js&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-js&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;baNaNa&lt;span class=&quot;z-punctuation z-definition z-string z-end z-js&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sonucumuza varmış olduk, baktığımızda aradaki tüm adımlar aslında kavranabilir ve basit adımlar, anlaşılması zor olan dilin neden ve nerede gizli tip çevirilerini yaptığı.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;python&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#python&quot; aria-label=&quot;Anchor link for: python&quot;&gt;Python&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Yazıyı kapatmadan önce bir de Python&#x27;la ilgili konuşmak istedim, bu sefer JavaScript&#x27;in tam tersi şekilde. Genelde dilde operatörler İngilizce kelimelerle tanımlandığı için Python&#x27;un yeni başlayanlar için daha kolay olduğu, İngilzice gibi yazılabildiği bir mit var, baktığınızda aslında Python JavaScript&#x27;ten çoğu konuda çok farklı değil. Gizli tip çevirileri konusuna bakarsak Python da &lt;code&gt;if &amp;quot;a&amp;quot; + &amp;quot;b&amp;quot; then 1 else None&lt;&#x2F;code&gt; gibi durumlarda tip çevirileri yapıyor, &lt;code&gt;&amp;quot;a&amp;quot; + &amp;quot;b&amp;quot;&lt;&#x2F;code&gt; ifadesini önce &lt;code&gt;bool&lt;&#x2F;code&gt; tipine çevirip sonrasında sonucu hesaplıyor. Brown Üniversitesinden çıkmış Python semantiklerinin problemlerini ve garipliklerini çalışan &lt;a href=&quot;https:&#x2F;&#x2F;cs.brown.edu&#x2F;~sk&#x2F;Publications&#x2F;Papers&#x2F;Published&#x2F;pmmwplck-python-full-monty&#x2F;paper.pdf&quot;&gt;çok detaylı bir makale&lt;&#x2F;a&gt; de var hatta. Dolayısıyla programlama dilleriyle ilgili yorum yaparken yalnızca yüzeysel seviyede sözdizimlerini ya da anahtar kelimelerin kullanımını değil, dilin semantiklerini değerlendirmek gerektiğine kısaca değinmeyi mantıklı mantıklı gördüm.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kapanis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kapanis&quot; aria-label=&quot;Anchor link for: kapanis&quot;&gt;Kapanış&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Bazı yazılarımı biraz daha toplu, düzenli, birkaç haftada yavaş yavaş düzenleyerek, geri bildirim alarak yazıyorum, bazıları ise o an aklıma gelenleri arka arkaya döktüğüm, düzensiz pek çok farklı fikir ve bilginin bir araya geldiği yazılar oluyor, bu yazı bunlardan ikincisine biraz daha yakın oldu, dolayısıyla yer yer hatalar olabilir, mantıksız gelen noktalar olabilir, sonuca bağlanmayan tartışmalar olabilir. Eğer bunlar gözünüze çarptıysa bana yorum olarak &lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;&#x27;ya email atabilirseniz mutlu olurum, hataları düzeltmeye, soruları cevaplamaya çalışırım. Sevgiler.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Breaking Verifiable Abstractions</title>
        <published>2025-08-31T00:00:00+00:00</published>
        <updated>2025-08-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/verifiable-abstractions/"/>
        <id>https://alperenkeles.com/posts/verifiable-abstractions/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/verifiable-abstractions/">&lt;p&gt;Abstractions are one of the central ideas of computer science as well building and engineering complex systems in general. In essence, an abstraction is an interface over a system or process, somehow enhancing the mechanisms in which we interact with the underlying system. A famous example of abstraction is a programming language, which abstracts details of how the underlying machine executes the provided code. Loops and function calls are compiled into lower lever primitives of comparisons and jumps, the memory allocators takes care of storing and loading data from the memory, a majority of the programmers in 2025 has never seen a single line of the instruction set architecture of the machines their code works on, and the majority of code today does not run on physical machines, but virtual machines like browsers we built on top of them.&lt;&#x2F;p&gt;
&lt;p&gt;An important aspect of an abstraction is its leakiness, which, when I think about it, does not really do justice to the abstractions. &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Leaky_abstraction&quot;&gt;Wikipedia page&lt;&#x2F;a&gt; on Leaky Abstraction states:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;A leaky abstraction in software development refers to a design flaw where an abstraction, intended to simplify and hide the underlying complexity of a system, fails to completely do so. This results in some of the implementation details becoming exposed or &#x27;leaking&#x27; through the abstraction, forcing users to have knowledge of these underlying complexities to effectively use or troubleshoot the system.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Followed by the Law of Leaky Abstractions by Joel Spolsky:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;All non-trivial abstractions, to some degree, are leaky.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Given that &lt;em&gt;all&lt;&#x2F;em&gt; abstractions are leaky, I feel that we should not really talk about what an abstration leaks, but rather what it hides, because that is the point we really care about. I think I came close to this idea when writing &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;the-lies-about-abstraction&#x2F;&quot;&gt;The Lies About Abstraction&lt;&#x2F;a&gt; but failed to grok, or articulate it at the time. Abstractions really only ever preserve the properties we measure. Let&#x27;s take SQL as an example, it is an abstraction for communicating with a storage system, we use it to instruct the system to store and load data. SQL engines make strong guarantees on the &amp;quot;functional correctness&amp;quot; of the engine, it should not matter if we are using 2.12 or 3.71, SQLite &lt;em&gt;strongly tries&lt;&#x2F;em&gt; to ensure that the same set of queries would result in the same set of answers. It does not make strong guarantees on the time of the query though. If the underlying model changes, it is possible that your query is slower or faster now. If you, adhering to &lt;a href=&quot;https:&#x2F;&#x2F;www.hyrumslaw.com&quot;&gt;Hyrum&#x27;s Law&lt;&#x2F;a&gt;, relied on observable but not guaranteed behavior, you might find yourself at odds with the users of your service.&lt;&#x2F;p&gt;
&lt;p&gt;Such as scenario is prevalent in virtually all domains of software engineering. Software systems are typically evolving systems with a set of primary objectives, and in the process of this evolution any behavior that is not explicitly tested or guaranteed is subject to changes. Consider the concept of &lt;a href=&quot;https:&#x2F;&#x2F;semver.org&quot;&gt;semantic versioning&lt;&#x2F;a&gt;, which states that a MAJOR version is when &lt;code&gt;you make incompatible API changes&lt;&#x2F;code&gt;, which assumes a specific definition of compatibility that boils down to the fact that the new version will not throw a compile error, at least from the perspective of the user. More concretely, the secondary condition over compilation is &amp;quot;documented behavior shall not change&amp;quot;, which is a social condition that is far from machine checkability, hence the truly guaranteed behavior is always the tested ones.&lt;&#x2F;p&gt;
&lt;p&gt;With that, let me get a step closer to the point. A few months ago, I wrote my ever favorite blog post on the limits of AI-assisted programming which I promptly gave away the answer in the title, &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;Verifiability is the Limit&lt;&#x2F;a&gt;. I won&#x27;t reiterate it all here, but the central idea is &lt;strong&gt;&amp;quot;what you can verify marks the limit of what you can create&amp;quot;&lt;&#x2F;strong&gt; regardless of the method of creation, albeit human, LLM, or magic, the genie of the magic oil lamp was a cautionary tale for all of us. Closer to the end of the blog post, I posed a question, and gave some preliminary thoughts on possible answers.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;If verifiability is the limit, if it’s the bottleneck of using LLMs for programming, the natural question is &lt;strong&gt;how do we raise the limit, how do we make it easier to verify?&lt;&#x2F;strong&gt;
...We should rely much more on declarative random testing methods such as property-based testing, where the programmer defines a predicate that should hold over all possible inputs, and this predicate is tested by generating random inputs and passing them to the program. Such methods have been used to enhance the reliability of programs in many domains, but they haven’t caught up with the software engineering community. The advantage of such methods is that having one general predicate is much easier to inspect and understand than many unit tests, in addition to the added testing strength...&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;For the past month, I have been at Datadog working on an LLM-guided continuous optimizer called BitsEvolve (see the &lt;a href=&quot;https:&#x2F;&#x2F;www.datadoghq.com&#x2F;blog&#x2F;engineering&#x2F;self-optimizing-system&#x2F;&quot;&gt;linked blog post&lt;&#x2F;a&gt;) powered by observability and random testing, and day by day I became more convinced that the future holds crazy possibilities for combining LLMs with verifiable abstractions, which I see surprisingly little. The industry as a whole has been spending an insane amount of time and effort making it easier to program by prompting, because prompting solves a multitude of problems where programmers traditionally have to specify many details they do not really care, such as what type of container to use for a specific scenario, and instead only convey their intent, which the LLM acts as the programmer making such decisions, letting the programmer only focus on high level details. Similar to how &amp;quot;higher-level languages&amp;quot; abstract away memory management, prompting abstracts away anything and everything you don&#x27;t specify. This property of prompting, which is its central value proposition, is also its greatest weakness even without hallicunations, because there are no executable semantics of a prompt. Given the context, the temperature, the model, the random number generator, the mood of {{insert your favorite CEO}}, the prompt will lead to different execution semantics. Programs on the other hand, have testable semantics, they are executable, analyzable, are quite strict in what they do, and how. Shortly, the prompt-to-program abstraction is not a verifiable one, which is what stirred up the discussion in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;Well I already gave away the spoiler, &lt;strong&gt;why are we fixating so much on prompts when we could just use programs instead?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;People already use LLMs for translating code between languages, but they still rely on the LLM to correctly do the translation even though the translation has one of the most popular correctness properties of all the time, equivalence that we can programmatically test for. This problem is traditionally called translation validation, and is far from being solved, we definitely do not have the capability of proving two programs will behave exactly the same way for every single input (it&#x27;s undecidable, so we will never have that capability). We, however, have the capability of doing differential testing, which has given rise to some of the greatest testing successes of the industry by finding bugs in C compilers and SQL engines, as well as being a central piece of modern practices for developing high assurance software.&lt;&#x2F;p&gt;
&lt;p&gt;I posit that some of the most interesting use cases of AI will emerge from using programs as sources instead of focusing on prompts.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Translating entire libraries and programs across ecosystems through a continuous feedback loop that is based on counterexample guided program synthesis.&lt;&#x2F;li&gt;
&lt;li&gt;Optimizing programs for cache friendliness or memory consumption, securing them against side channel attacks, automatically switching between equivalence programs with different characteristics of readability or density, auto-parallelization of single-threaded programs.&lt;&#x2F;li&gt;
&lt;li&gt;Breaking existing abstractions at lower levels by switching them with verifiable translations, instead of accepting the bytecode or assembly emitted by the compiler as a given, using the instrumentation and observations from the program for doing machine-level verifiable optimizations similar to what a JIT compiler would do.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Let&#x27;s make no mistake, there are already people out there claiming they can do these things, or that LLMs will be able to do these things, I do not believe such claims without the accompanying translation validation. Verifiability is the limit, even if LLM capabilities increase a 1000x from today, it is impossible to trust that a change in your machine executable would fit your intent, or that you could even specify such changes in many cases. &amp;quot;Machine go brrr&amp;quot; is not the specification we should be using, tests and measurements with concrete results are.&lt;&#x2F;p&gt;
&lt;p&gt;The bottleneck of these approaches today are not just LLMs being unable to apply such changes, but also the fact that random testing still has a long way to go. The translations I mentioned rely on fast feedback loops to be operational, while getting the fuzzers to generate complex inputs are still research projects. Catching concurrency bugs is still a relatively developing area, building testing targets for comparing functions or programs across languages is non-trivial, deterministic simulation testing is here to stay, but it&#x27;s history is a very short one with a few promising companies pushing it through. Programming languages are as impure as they come, hurting the testability at all costs, as much as possible, although functional programming community as well as effect systems are pushing for explicit impurity, I am not sure how to test two unordered hash maps in two languages acting with the same characteristics.&lt;&#x2F;p&gt;
&lt;p&gt;Let me tie the two parts of the article as I finish. Although all abstractions are leaky, the measure of an abstraction is its testability. If we can test some behavior, we can guarantee it. Such guarantees allow us to look beneath the abstraction and break it while keeping the guaranteed behavior intact. I hypothesize that given sufficient improvements in random testing, this &lt;strong&gt;break the abstraction, optimize what you can observe&lt;&#x2F;strong&gt; has the potential to become a major appraoch in optimizing programs and being a centerpiece of programming.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A Better Vocabulary for Testing</title>
        <published>2025-08-16T00:00:00+00:00</published>
        <updated>2025-08-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/vocab-for-testing/"/>
        <id>https://alperenkeles.com/posts/vocab-for-testing/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/vocab-for-testing/">&lt;p&gt;Contemporary vocabulary for talking about software testing has bothered me for a long time. The concept of a unit in unit test is not really defined,
integration tests are integrating arbitrarily scoped modules, the concept of an E2E test makes sense, but it very much underspecifies the actually tested behavior as well as methods for testing it, are you using automated agents, human supervision, predefined set of actions, random exploration... it&#x27;s all sweeped under the rug. On the other side you have your stress tests, load tests, peneration tests etc. but there is no proper classification in the wild, it all seems to be based on &amp;quot;vibes&amp;quot;. A short web search reveals a &amp;quot;level&amp;quot; based classification as seen below, as well as an &amp;quot;ad&amp;quot; from Atlassian that gives you &lt;a href=&quot;https:&#x2F;&#x2F;www.atlassian.com&#x2F;continuous-delivery&#x2F;software-testing&#x2F;types-of-software-testing&quot;&gt;7 &amp;quot;types&amp;quot; of software tests&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;vocab-for-testing&#x2F;.&#x2F;types-of-testing.png&quot; alt=&quot;types of tests&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Can we go beyond this, definitely. Should we, I think yes. We should have a vocabulary that is actionable, you should be able to upgrade or downgrade your tests based on the availability of resources, there should be a recipe for the available set of options given your situation. Of course, this article will be very much biased towards a certain category, random testing which I happen to be working on for a while now.&lt;&#x2F;p&gt;
&lt;p&gt;My view is as follows, we can roughly create 5 different categories, some of which are orthogonal to each other, some of which &amp;quot;branch&amp;quot; within.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;scopes-of-testing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#scopes-of-testing&quot; aria-label=&quot;Anchor link for: scopes-of-testing&quot;&gt;Scopes of Testing&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The first category is a &lt;strong&gt;the scope of the test unit&lt;&#x2F;strong&gt;, this is similar to what the classic unit&#x2F;integration&#x2F;e2e testing classification tries to vaguely define, but I think it fails at it. There are two axes to the scope, one of them is based on the constructs of the programming language we use, we might test a function, a class&#x2F;struct&#x2F;type, a module, or a system. The secondary axis is if the scope is a stateful, or a stateless one. You might have stateful functions, and you might have stateless systems, although we expect most functions to be stateless and most systems to be stateful. It should be noted that these scopes also vary a lot, one could argue that the entry function of a large system is the same as the system itself, but here is why the scopes are useful;&lt;&#x2F;p&gt;
&lt;p&gt;When talking about testing anything, we typically talk about inputs and outputs, but the space of inputs are actually very different. Functions, especially stateless ones, consume arbitrary structures in your programming language. Systems receive interactions or directives, which is typically some serialized piece of data that is parsed and validated. This actually allows system testing to be much more restrictive in the list of inputs because it includes a natural discriminator that can shrink the input space, while function signatures in programming are very often too relaxed, the input type of the function includes many potential inputs that the function will never consume.&lt;&#x2F;p&gt;
&lt;p&gt;When state comes into play, your testing can be made isomorphic to the previous one by turning a test of function &lt;code&gt;f&lt;&#x2F;code&gt; with state &lt;code&gt;s&lt;&#x2F;code&gt; consuming input &lt;code&gt;x&lt;&#x2F;code&gt; and producing output &lt;code&gt;y&lt;&#x2F;code&gt; and transforming the state to &lt;code&gt;s&#x27;&lt;&#x2F;code&gt; into another stateless function &lt;code&gt;g&lt;&#x2F;code&gt; that either produces initial the state &lt;code&gt;s&lt;&#x2F;code&gt; or the state pair &lt;code&gt;(s, s&#x27;)&lt;&#x2F;code&gt; becomes a part of the input-output.&lt;&#x2F;p&gt;
&lt;p&gt;This type of state(ful&#x2F;less)ness transformation depends on the complexity of your system, because testing an input requires you to produce it. Simple states can be turned into inputs that you can construct, but creating a complex state that represents a realistic workload of your system is non-trivial, and for many systems outright impossible. In such scenarios, instead of transforming your test to be stateless, you treat your system as a simulation. You pass in messages that contain directives or interactions based on the public API of your system and get answers or confirmations in multi-message scenarios, you can check intermediate states of the system as well as the initial and final ones, ensuring your invariants, preconditions and postconditions hold.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly for making the testing of your functions more tractable, you can employ &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Design_by_contract&quot;&gt;Design by Contract (DbC)&lt;&#x2F;a&gt; which is natively supported in C++26, D, Kotlin, and Racket, with library support in Python and Rust, and many others I probably haven&#x27;t heard. In DbC, we can write the assumptions we make on the inputs to the functions, which might come up as unchecked pointer dereferences or code comments promising that such inputs are not possible, as annotations to our functions, which can be checked on runtime, and sometimes even compile time through static analysis. DbC allows us to constraint the input space to the functions, which as I said are at many times much larger than the reality. Imagine creating a dictionary of items you read in your system, along with a list of keys that were created alongside the initial hashmap. To the view of your programming language, every lookup in your hashmap is fallible, when in reality we know all of them should succeed. This creates a tension between you and the programming language, where you feel like you are fighting with it. Using DbC, more expressive type systems, and better domain modeling solves much of these issues.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;purposes-and-hypotheses-of-testing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#purposes-and-hypotheses-of-testing&quot; aria-label=&quot;Anchor link for: purposes-and-hypotheses-of-testing&quot;&gt;Purposes and Hypotheses of Testing&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Testing, at some level, evaluates or measures &amp;quot;something&amp;quot;. It creates a hypothesis that can be falsified by running the test, and the purpose is to falsify this hypothesis. There are different domains that we can express some hypotheses on; the simplest one is functional correctness, which evaluates if the function produces the right output given some set of inputs. There are other domains such as time of execution, which we can test the performance of our system under test, or security, which we can check if the system is resistant to potential attack vectors. Most large scale systems are distributed systems that are bound by the laws of physics that can cause delays, drops, faults in the network, and even single machine systems experience file system fauls, disk corruptions etc. which we can test our system&#x27;s resilience against. The concept of chaos testing mostly refers to testing the robustness of a system in the case of unexpected faults.&lt;&#x2F;p&gt;
&lt;p&gt;Based on the domain of interest, such purposes or hypotheses varies a lot. In a security scenario that tests a potential timing side channel, the hypotheses is that the test will constuct an environment in which the attacker will be able to extract information out of the time to execute two different inputs. When testing for accessibility of a system or a webpage, the hypothesis is that a user with some disability that prevents them from leveraging the full set of system interactions will not be able to perform an action they would need or want to. Each test, of course, requires a domain specific &lt;strong&gt;oracle&lt;&#x2F;strong&gt; based on the scenario.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;oracles-of-testing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#oracles-of-testing&quot; aria-label=&quot;Anchor link for: oracles-of-testing&quot;&gt;Oracles of Testing&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Once we have an hypothesis at hand, we need an oracle for it. The natural oracle is a human. Although it&#x27;s an understatement to say that this is the job of QAs in software companies (they also program oracles by creating automated scenarios), it&#x27;s also very much they excel at. They hand-craft scenarios to test against the system in the hopes of discovering an &amp;quot;unusual&amp;quot; or &amp;quot;unwanted&amp;quot; scenario. Some of these scenarios may be more formal, for example it is commonplace that your software should not be stuck or unresponsive at any moment, but some others will be based on intuitions like &amp;quot;this page transformation is weird compared to the others&amp;quot;. I like to call this type of testing where the oracle is the judgement of a human user &amp;quot;tinker testing&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Although it&#x27;s not typically included in the discussions of testing, tinker testing is a major part of programming, because a traditional software test is ultimately a codification of tinker tests. If you are not doing test-driven development (I mostly don&#x27;t), it is very probable that you start by implementing a piece of functionality, create a small test where you can change the parameters very easily, maybe by changing them by hand if the compilation is very fast, or by using some functionality for reading inputs from the command line or web user interface. We play around with the artifacts the software produces for understanding it better, because not every piece of functionality in software is intentional, or explicit. Many code has unintended consequences, which is partly why we test it. The tinkering allows for (1) checking that the artifact conforms to the intended consequences, and (2) finding out what kind of unintended consequences we ended up sneaking into the artifact. The more &amp;quot;dense&amp;quot; the code is, the higher the possibility of introducing unintended consequences, which increases the requirement for tinker testing as well as testing in general, including applying TDD, but that&#x27;s a discussion for another day.&lt;&#x2F;p&gt;
&lt;p&gt;The second type of oracle is examples. When you write your unit tests with a concrete set of values to say &lt;code&gt;add(3, 5) == 8&lt;&#x2F;code&gt;, you are doing example-based testing, as you were doing tinker testing when you were typing &lt;code&gt;10 + 32&lt;&#x2F;code&gt; to your calculator for checking that it indeed tells you the result is &lt;code&gt;42&lt;&#x2F;code&gt;. You can write example-based oracles for all kinds of hypotheses, even though we mostly think of them useful for functional correctness. You can say measure the time of the execution of a function for specifying upper bounds such as &lt;code&gt;time(f(1337) &amp;lt; 0.5)&lt;&#x2F;code&gt;, or &lt;code&gt;time(sort([])) &amp;lt; time(sort[10, 9, 8, 7, 6, 5, 4, 3, 2 1])&lt;&#x2F;code&gt;. You can check if your SQL sanitizer is indeed catching specific SQL injections you can conjure. However complex the scenario is, there is typically a way to create an example for it. Some approaches has taken this idea very far and that is why we have &lt;code&gt;expect testing&lt;&#x2F;code&gt;, &lt;code&gt;golden testing&lt;&#x2F;code&gt;, or &lt;code&gt;snapshot testing&lt;&#x2F;code&gt; in the testing literature today, where the testing workflow evolves by verifying that the output conforms to the expectation of the tester for the given user, and the testing framework saves the snapshot to a file by codifying the current state of the program as the correct behavior. Although the primary use case for expect testing seems to be catching regressions, it also gives us a way to create more examples very easily, which actually possesses many hidden or unexpressed semantics of our program within, so they make for interesting oracles. For more on expect testing, &lt;a href=&quot;https:&#x2F;&#x2F;blog.janestreet.com&#x2F;the-joy-of-expect-tests&#x2F;&quot;&gt;this blog post&lt;&#x2F;a&gt; from Jane Street is a nice read.&lt;&#x2F;p&gt;
&lt;p&gt;A third type of oracle is inline assertions, which actually ties back to DbC I&#x27;ve talked at the end of the scopes. A precondition is an assertion at the beginning of a block, a postcondition is an assertion at the end of a block, an invariant is an assertion that should hold both at the beginning and end of the block, although it may be broken in the middle. An inline assertion is an assertion you can put anywhere in your program, there are companies in high-assurance part of the industry that advocate for aggressive use of inline assertions even in production, I advise everyone to read the &lt;a href=&quot;https:&#x2F;&#x2F;tigerstyle.dev&quot;&gt;Tiger Style&lt;&#x2F;a&gt; documentation, they have very good principles for writing robust and safe software. Inline assertions are not really coupled with a testing method by themselves, as opposed to the other oracles I mentioned so far, both of which are oracles and testing methods at the same time. Tinker Testing couples human intuition and tinkering as the testing method with human judgement as the oracle, and Example-Based Testing couples input-output examples as both the oracle and the testing method, because the user is producing the input (the method of testing) alongside the expected output (the oracle). Expect testing somewhat couples these approaches, the user still provides the input, but the oracle is now their judgement at first, and the state of the program at the time of snapshotting later. Inline assertions can be used alongside other methods of testing, because they are a method of specification but not a method of producing inputs for the system under test.&lt;&#x2F;p&gt;
&lt;p&gt;The fourth type of oracle is properties, which brings us to Property-Based Testing. Properties are universal statements that talk about the code under test in abstract terms rather than concrete inputs in the case of example-based testing. Some properties may be global invariants, which means they are like inline assertions you check at the end of each unit of execution. Examples of these are &amp;quot;program never crashes&amp;quot; in many languages (maybe not Erlang I guess?), or &amp;quot;never dereference a null pointer&amp;quot;, or if you are running a physics simulation it may be that you want to conserve momentum at each time step, or you may have any other type of global consistence metric based on your domain. Other properties are more local, they are metamorphic properties that relate the outputs of two programs&#x2F;functions to each other. For instance, the associativity of addition tells us that &lt;code&gt;a + (b + c) = (a + b) + c&lt;&#x2F;code&gt; (which doesn&#x27;t hold for IEEE-754 floats, so be careful), or the &lt;code&gt;UNION&lt;&#x2F;code&gt; of two SQL queries should be a subset of their &lt;code&gt;UNION ALL&lt;&#x2F;code&gt;. We have other canonical properties like roundtrip properties which tells us that two functions that are the inverse of each other result in the original input, for instance a lossless compression algorithm should always have the property that &lt;code&gt;decompress(compress(bytes)) = bytes&lt;&#x2F;code&gt;, or adding and subtracting the same quantitity should result in the original quantity &lt;code&gt;a + x - x = a - x + x = a&lt;&#x2F;code&gt;, which also amounts to some sort of cancellation effect. Compatibility is another sort of canonical property, different procedures that are functionally equivalent should always return the same results given the same inputs, so all sorting algorithms should always return the same result on the same list &lt;code&gt;quicksort(l) = bubblesort(l)&lt;&#x2F;code&gt;, or parallelizing some functionality should not change its observable behavior &lt;code&gt;par(f, x) = f(x)&lt;&#x2F;code&gt;, or your very complex distributed system should provide the same observable behavior as its simpler, single-node version. This type of compatibility, sometimes called differential testing, or other times model-based testing, is immensely powerful. It has found rendering bugs in browsers, compiler bugs in GCC, optimization bugs in SQLite, it has been used to test large scale systems like S3 object storage or the recently released verified permissions engine Cedar by AWS. The last bit of canonical property I&#x27;ll mention is idempotency, which shows up on sorting a list, &lt;code&gt;sort(sort(l)) = sort(l)&lt;&#x2F;code&gt;, but is generally considered a core property of many distributed systems due to its ability of creating a logical &amp;quot;always once delivery&amp;quot; layer on top of the physical world. Similar to inline assertions, properties also do not specify a specific method of testing. So given some property &lt;code&gt;p&lt;&#x2F;code&gt;, you can actually use it in Tinker Testing, that is why React is running your effects twice, so that you can realize you are invalidating the React property that effects should not mutate the state, but rather create a new one. You can use it in your example based tests by just supplying the inputs and letting the oracle be the property. Property oracles also give you more automated, much more powerful methods for testing your systems. So far I have only talked about first-order oracles, those that are manifestations of first-order logical propositions that talk about our code. In fact you can write properties in more powerful logic systems such as modal logics that can express temporal specifications about your program, some of these are equivalent to properties we already mentioned, a global invariant is the same as an ALWAYS([]) modality in linear temporal logic, which LTL people say is a &amp;quot;safety property&amp;quot;, but they can also express &amp;quot;liveness properties&amp;quot; that can talk about events that should happen every once in a while or at some indefinite point in the future. I don&#x27;t have much of a background here, I suggest you check out &lt;a href=&quot;https:&#x2F;&#x2F;www.hillelwayne.com&quot;&gt;Hillel Wayne&#x27;s writings&lt;&#x2F;a&gt; on TLA+ for learning more about these specifications, which are again very much used in distributed system specifications.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;methods-of-testing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#methods-of-testing&quot; aria-label=&quot;Anchor link for: methods-of-testing&quot;&gt;Methods of Testing&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In the previous section, I have made a distinction between a method of testing (providing inputs to a test) and an oracle of testing (how to decide if a test fails), and already reveal Tinker Testing and Example-Based Testing as two methods of testing. What are the other ones, which you can use for testing properties or inline assertions?&lt;&#x2F;p&gt;
&lt;p&gt;I will start from another type of testing we typically don&#x27;t count as tests in software, which is static analysis. A static analysis tool analyzes a piece of code and decides if it passes a certain &amp;quot;test&amp;quot;. A type system is in fact a &amp;quot;test&amp;quot;, it tests if your program is well typed, meaning that no execution will lead to a type level failure. There are two ways to see a type system as a test, for one you can use dynamic typing in &amp;quot;mostly statically typed&amp;quot; languages using &lt;code&gt;std::any&lt;&#x2F;code&gt; in Rust, &lt;code&gt;Dynamic&lt;&#x2F;code&gt; in Haskell, &lt;code&gt;void*&lt;&#x2F;code&gt; in C. These mechanisms allow you to bypass the type system, which means your program can now actually have type errors in runtime if you don&#x27;t maintain them correctly and cast to an incompatible type. On the other side, you can plug a static analysis tool on top of your statically typed language such as Infer on C++ or add a static type checker on top of your dynamically typed language such as mypy&#x2F;ty on Python and see that they reject programs that your looser system would accept. Well which property are these type systems holding? The reason I wanted to put them into discussion is to sneak in a discussion of a new generation of type systems that use refinement types (please read more on these) that can statically prove your properties, invariants, or contracts. So you still write the same properties or contracts as your oracles, but the method of checking is now static, Liquid Haskell, Flux in Rust, Dafny programming language are those I can think of, I highly advise checking them out. There are also model checkers like CBMC and Kani that can statically check some of your invariants and properties when expressed in terms they can process.&lt;&#x2F;p&gt;
&lt;p&gt;You can also use enumeration, which theoretically is complete (if you have infinite time and compute), because it enumerates your types. So enumerating integers would look like &lt;code&gt;0, 1, -1, 2, -2...&lt;&#x2F;code&gt;. It is possible to write enumerations for practically all types in our programs, although cyclic types like graphs may make it very hard, I believe it should be possible to have a complete ordering of a type, which gives you the enumeration (some very clever PL person is going to pull out an example that makes me wrong here, please do so I can add a small note on it, or better write the note for me and I&#x27;ll just insert it here).&lt;&#x2F;p&gt;
&lt;p&gt;Or, and this is a pretty big category on its own, you can use randomness. Instead of going through an order like &lt;code&gt;0, 1, -1...&lt;&#x2F;code&gt; you can be crazy and do &lt;code&gt;42, -1337, 22222222...&lt;&#x2F;code&gt;. Randomness makes testing properties very scalable, because you can generate many small structures very fast, and can generate large structures that can reveal many interactions with your in a slower fashion. You also don&#x27;t need to be completely random, because instead of generating, you can also mutate existing structures. So you can start by generating a few inputs, and once you have enough of them, instead of generating from scratch you can start using the old ones you had already generated by tweaking them. Imagine you have a large list, you can just remove some of it, add some more items to it, or swap out a part in the middle. When selecting which inputs to mutate, it would be really really nice if you had a measure of how &amp;quot;good&amp;quot; they are, so that you could prioritize those inputs. Well people have been thinking about this for a long time, and one of the best measures we have right now is called branch coverage, existing random testing systems look at how many branches or basic blocks your program hits, and prioritizes inputs that lead to new, unexplored paths. Congratulations, you have now learned about Coverage Guided Fuzzing. A great group of fuzzing researches have created one of the best fuzzing resources in the internet, the &lt;a href=&quot;https:&#x2F;&#x2F;www.fuzzingbook.org&quot;&gt;Fuzzing Book&lt;&#x2F;a&gt;, if this concept sounds interesting to you, please check it out. I have mentioned that the differential testing has found many correctness bugs in production systems such as GCC before, similarly, researchers and security engineers have found thousands of bugs in especially C&#x2F;C++ programs but across a wide variety using coverage guided fuzzing, if you check the trophies section of any fuzzer (&lt;a href=&quot;https:&#x2F;&#x2F;lcamtuf.coredump.cx&#x2F;afl&#x2F;&quot;&gt;AFL&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;aflplus.plus&quot;&gt;AFL++&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;google&#x2F;oss-fuzz&quot;&gt;OSS-Fuzz&lt;&#x2F;a&gt;) you will see a ton of names you know. Even without smart randomness, a well-written data generator coupled with strong properties lead to many bugs, CSmith testing GCC and Clang is one example, SQLancer finding hundreds of bugs across production DBMSs is another. Not all testing has to be at the scale of a system as I mentioned at the beginning, you can test functions, modules, systems in different ways.&lt;&#x2F;p&gt;
&lt;p&gt;When testing a function, you write random data generators for your inputs types, randomly generate inputs in a loop trying to falsify your properties. In most languages there are already methods for &amp;quot;deriving&amp;quot; random generators, so writing a property is most of your work. You can try to pattern match on the canonical properties I mentioned in the previous section or try to abstract your already written example-based tests to general patterns that can be tested with random data. There are popular Property-Based Testing libraries in virtually any language, Hypothesis in Python, fast-check in Typescript, jqwik in Java, proptest in Rust, and of course the root of all, QuickCheck in Haskell. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jmid&#x2F;pbt-frameworks&quot;&gt;This page&lt;&#x2F;a&gt; has a very comprehensive list if you are curious. These libraries take a lot of work away from you and let you focus mostly on expressing your properties.&lt;&#x2F;p&gt;
&lt;p&gt;When testing a system or a module, you need to build a &amp;quot;simulation environment&amp;quot;. A module is going to have a set of APIs, and a system is going to have a set of possible interactions, and they will very much possibly be stateful. There are two methods of testing your properties against these stateful artifacts, (1) is to maintain an internal simpler model of the system, which we are actually using for testing &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;tursodatabase&#x2F;turso&quot;&gt;Turso&lt;&#x2F;a&gt;, a rewrite of SQLite from scratch, and use the model for making decisions on what to generate, what to expect from the system and so on. (2) is to use the system&#x27;s internal model for making those decisions by querying the system, which is what SQLancer actually does for testing a variety of DBMSs, but is prone to dark points in the system in case the problem you are testing is correlated with the internal model the system under test keeps. When testing the DBMS, we keep a list of properties we expect the DBMS to have, and generate random SQL statements that will check for those properties. Taking a simpler module at hand, for example if we were testing a stack, we would just keep a small set of interactions (&lt;code&gt;pop, push x, empty?&lt;&#x2F;code&gt;) that we would continuously pick from to discover an interaction we hadn&#x27;t before.&lt;&#x2F;p&gt;
&lt;p&gt;I had already mentioned that in real physical systems your inputs are not just user messages to the system, the whole physical environment is, so testing for inputs the user sends is not enough, you also need to test what happens when one of your machines shut down, or when you have some file system fault, or when you experience network degradation. The throttling option in your browser, chaos testing that shuts down some of your machines, killing a process from outside, are all examples of how you can provide those physical inputs. High-assurance systems need these tests because the users are paying for the assurance alongside the functionality. A prominent approach in this space is called Deterministic Simulation Testing (DST), which artifically injects faults in your system for testing such inputs we normally don&#x27;t. To my knowledge this approach has been popularized by FoundationDB, but currently TigerBeetle and Antithesis are the two places you can learn more about these, so I will leave it at that.&lt;&#x2F;p&gt;
&lt;p&gt;With that, I conclude my new vocabulary proposal mashed with some advertisement of random testing. I believe software testing has a long way to go, and that we have only scratched the surface of the set of behaviors we are testing, and that random testing is going to be a key part of this future. I hope you had fun reading this, if you have any comments or suggestions please shoot me an email at (&lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Note: If you liked this post, I highly recommend this post on &lt;a href=&quot;https:&#x2F;&#x2F;matklad.github.io&#x2F;2022&#x2F;07&#x2F;04&#x2F;unit-and-integration-tests.html&quot;&gt;Unit and Integration Tests&lt;&#x2F;a&gt; by Matklad.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Bilgisayar Mühendisleri için Hafif* Ekonomi</title>
        <published>2025-08-09T00:00:00+00:00</published>
        <updated>2025-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yazilim-ekonomisi/"/>
        <id>https://alperenkeles.com/posts/yazilim-ekonomisi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yazilim-ekonomisi/">&lt;p&gt;Yazılım endüstrisi inanılmaz büyük, dağınık, neredeyse her endüstrinin içerisine kendisini anahtar bir oyuncu olarak yerleştirmiş bir endüstri. 2011 yılında A16Z&#x27;nin kurucularından Marc Andreessen &lt;a href=&quot;https:&#x2F;&#x2F;a16z.com&#x2F;why-software-is-eating-the-world&#x2F;&quot;&gt;&amp;quot;Why Software Is Eating The World&amp;quot; (Yazılım Dünyayı Neden Ele Geçiriyor)&lt;&#x2F;a&gt; yazısında sırtını yazılıma dayayan Amazon, Netflix, Spotify gibi devlerin nasıl ortaya çıktığını ve büyüdüğünü benim anlatabileceğimden çok daha iyi anlatıyor. Bugün benzer bir soruyu &lt;a href=&quot;https:&#x2F;&#x2F;www.technologyreview.com&#x2F;2017&#x2F;05&#x2F;12&#x2F;151722&#x2F;nvidia-ceo-software-is-eating-the-world-but-ai-is-going-to-eat-software&#x2F;&quot;&gt;&amp;quot;Yapay Zeka Yazılımı Ele Geçirecek Mi?&amp;quot;&lt;&#x2F;a&gt; ekseninde soruyoruz, yazılım endüstrisine ne olacak, sektördeki işler nasıl değişecek, 2030&#x27;da hala kod yazıyor olacak mıyız onu anlamaya çalışıyoruz, ancak bu tartışmaların altında yatan ekonomik dengeleri yeterince iyi anladığımızı düşünmüyorum. Bu sebeple oturup biraz sektörün ekonomisi nasıl işliyor, kim kime, niye para veriyor bunu araştırmak, araştırırken de yazmak istedim. Özellikle işlerimize ne olacak, bilgisayar mühendisliği yazdığıma pişman olmalı mıyım diyen öğrenci arkadaşlara faydası olmasını hedefledim. En azından ben bölümü okurken okusam faydası olacak şekilde yazmaya çabaladım.&lt;&#x2F;p&gt;
&lt;p&gt;Konuyu birkaç eksende ele alacağım:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Endüstriyi Resmetmek&lt;&#x2F;li&gt;
&lt;li&gt;Omurga Yazılımlar&lt;&#x2F;li&gt;
&lt;li&gt;Açık Kaynak&lt;&#x2F;li&gt;
&lt;li&gt;Maaşlar&lt;&#x2F;li&gt;
&lt;li&gt;Yapay Zeka&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;endustriyi-resmetmek&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#endustriyi-resmetmek&quot; aria-label=&quot;Anchor link for: endustriyi-resmetmek&quot;&gt;Endüstriyi Resmetmek&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Girişte bahsettiğim gibi yazılım endüstrisi büyük ve dağınık, &lt;a href=&quot;https:&#x2F;&#x2F;www.cbinsights.com&#x2F;research&#x2F;industry-market-map-landscape&#x2F;&quot;&gt;detaylı sektörel analizler&lt;&#x2F;a&gt; yüzlerce farklı alanda binlerce şirketi farklı segmentlere ayırıp onların sektördeki pozisyonlarını inceliyor. Ben çok daha basit bir harita çizmeye çalışacağım.&lt;&#x2F;p&gt;
&lt;p&gt;Endüstriyi önce 2 temel parçaya bölelim, ön-yüzü (buraya tüketici yazılımları diyeceğim), ve arka yüzü (buraya da omurga yazılımlar diyeceğim). Tüketici yazılımları bizlerin günlük hayatta karşılaştığı yazılım ürünleri. Bu ürünler bizim gündelik problemlerimize, ihtiyaçlarımıza, isteklerimize dijital çözümler üretiyor, bir noktada ben bu ürünleri bir çeşit &amp;quot;dijital dönüşüm&amp;quot; olarak görüyorum. Word, Google Docs gibi editörlerin daktilonun yerini alması, Wikipedia&#x27;nın geleneksel ansiklopedilerin geniş, çeşitli, elimizin altında anlık erişilebilir dijital bir hali olması, sosyal medyanın mahalle meydanlarındaki, kahvelerdeki, günlerdeki konuşmaları dijital ortama taşıması, Netflix, Spotify gibi platformların sinemalar, tiyatrolar, konserler gibi eğlence mekanlarının alternatifi olarak görev görmesi, öğrencilerin ChatGPT&#x27;yi özel ders hocası gibi kullanması... Bu uygulamaların neredeyse hepsi bizlerin günlük tecrübelerimizi dijital ortamda yeniden oluşturma, yazılım ürünlerinin ekonomik dinamikleri sayesinde çok daha ucuz fiyatlara &amp;quot;benzer&amp;quot; tecrübeler sunma peşinde. Bu uygulamalar için yazılım, ya da kod, aslında bir araç, bir amaç değil. Nitekim Netflix benzer hızda benzer tecrübeyi daha ucuza CD&#x27;leri kargolayarak evimize kargolayarak sunmaya devam edebiliyor olsaydı, dünyanın en büyük veri merkezlerini kurmak için uğraşmazdı.&lt;&#x2F;p&gt;
&lt;p&gt;E peki tüketici yazılımları için yazılım bir amaç değil de araçsa, yazılımın hangi özellikleri onu alternatif çözümlere göre ekonomik olarak daha makul kılıyor?&lt;&#x2F;p&gt;
&lt;p&gt;Netflix&#x27;i düzenli örneğimiz olarak elde tutalım. Bir tarafa kullanıcıların fiziksel bir katalogdan film seçip, telefonla Netflix&#x27;i arayıp, İş bankasını arayınca karşınıza çıkan robotun yerine sizi bir müşteri temsilcisi müsait olana kadar bekleten, müşteri temsilcisine istediğiniz filmi söyledikten sonra onun o filmin CD&#x27;sini kargolatıp size 2 gün sonra gönderdiği bir dünya düşünelim. Diğer tarafta da hepimizin bildiği, sevdiği, çaktırmadığımızı düşünerek arkadaşlarımızla kurduğumuz aile grubundan 1 dakika içerisinde binlerce film ya da diziden birisini seçip izlemeye başlayabildiğimiz Netflix&#x27;i.&lt;&#x2F;p&gt;
&lt;p&gt;Aslında baktığınızda bu ürünler birbirinin direkt karşılığı değil, güncel Netflix hayal ettiğimiz geçmiş Netflix&#x27;ten &lt;em&gt;üstün&lt;&#x2F;em&gt; değil. Bir CD aldığınızda artık ona sahip oluyorsunuz, pratikte o CD&#x27;yi arkadaşlarınızla paylaşabilirsiniz, hatta belki kopyalayıp satmaya bile çalışabilirsiniz, CD artık sizin mülkünüz. Günümüzdeki video&#x2F;müzik yayın platformları sahipliği ortadan kaldırarak abonelik bazlı bir sistemle bizleri aydan aya hangi ürünlerin içinde olduğunu bile bilmediğimiz bir ürün kümesine erişim ile sınırlandırıyor, kendilerini ekonomik olarak karlı hale getirdikleri iş modeli bu çünkü, yani teknoloji tek başına bir süreci iyileştirmeye yetmiyor, dijital olarak yeniden hayal ettiğiniz tecrübelerin iş ve gelir modellerini tasarlamanız, bu aşamada bu tecrübelerin bazı eksenlerini kötüleştirebileceğinizi kabul ettmeniz gerekiyor.&lt;&#x2F;p&gt;
&lt;p&gt;Benzer bir analizi pek çok tüketici yazılımında görebiliyoruz, mesela yazılımlaştırılmış süreçler geleneksel alternatiflerine göre çok daha az esnek olabiliyor, nüfus müdürlüğündeki çalışanın sizin için yapabileceği değişiklikleri E-Devlet&#x27;te yapamayabiliyorsunuz. ChatGPT herhangi bir özel ders hocasından çok daha ucuza çok daha fazla bilgi sağlayabiliyor size, ancak o bilgilerin doğru olduğuna dair bir kesinlik sunmuyor, hatta çoğu zaman sizin yanlış ön yargılarınızı beslemeye devam ediyor. Linkedin sizi fiziksel olarak karşılaşamayacağınız pek çok kişiyle &amp;quot;bağlıyor&amp;quot;, ancak bir konferasnta yüz yüze görüşüp el sıkışmanın, muhabbet etmenin yerini alamıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Ancak yazılım ürünleri, geleneksel alternatiflerine göre çok daha &lt;em&gt;ucuz, hızlı, ve sürekli&lt;&#x2F;em&gt;. Netflix size fiziksel CD&#x27;ler göndermeyerek hem her CD&#x27;nin materyal maliyetinden, hem de o CD&#x27;yi üretip size göndermesi gereken lojistik ihtiyacından kurtuluyor, teknoloji sayesinde anlık hizmet sunabiliyor. Bunun yanında sizden düzenli geri dönüt alabiliyor, &lt;a href=&quot;https:&#x2F;&#x2F;www.optimizely.com&#x2F;optimization-glossary&#x2F;ab-testing&#x2F;&quot;&gt;A&#x2F;B Test&lt;&#x2F;a&gt; gibi geleneksel hizmetlerde mümkün olmayan ürün ve süreç optimizasyonları uygulayabiliyor, kullandığınız uygulamayı, o uygulamayı destekleyen sistemi her gün geliştirebiliyor.&lt;&#x2F;p&gt;
&lt;p&gt;Buraya kadar görece &lt;em&gt;makro tüketim yazılımlarından&lt;&#x2F;em&gt; bahsettim, Netflix gibi, Wikipedia gibi hayatımızın her yerine girmiş, neredeyse her demografiğe hitap eden yazılımlardan. Tüketim yazılımlarını bir spektrum olarak ele alırsak bir de diğer uçtaki &lt;em&gt;mikro tüketim yazılımları&lt;&#x2F;em&gt; var, çok daha küçük demografiklerin spesifik ihtiyaçlarına cevap vermek üzerine kurulu yazılımlar. Kilo vermek isteyenler için diyet uygulamalarından yeni anneler için tavsiye uygulamalarına, fotoğraf filtreleme ve işlemeye, Forest gibi odaklı çalışma uygulamalarına, alıcısı olan her alanda uygulamalar var. Tüketim yazılımlarını sadece bilgisayar ya da telefonda kullandığımız web ya da mobil uygulamalar gibi düşünmek de doğru değil, evimizdeki otomatik ışıktan buzdolabımızın sıcaklığını ayarlayan gömülü sistemlere kullandığımız fiziksel elektronik sistemleri güçlendiren programlar da aslında tüketim yazılımları.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Peki bu ayrımların bize faydası ne?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Temelde varmak istediğim nokta şu, tüketim yazılımlarında ana uzmanlık ve odak aslında programlama ya da yazılım değil. Diyet uygulamasında diyetisyenin, fotoğraf uygulamasında fotoğrafçının &lt;em&gt;hedef kitlemize nasıl bir çözüm sunmalıyız&lt;&#x2F;em&gt; sorusuna verdiği cevabın dijital var oluşunun bir gereksinimi yazılım, bu uygulamaların çözdüğü problemlerin yazılımın &lt;em&gt;ucuz, hızlı, sürekli&lt;&#x2F;em&gt; olma özellikleriyle daha geniş bir kitleye daha karlı bir şekilde sunulmasına izin veren mekanizma yazılım. Bu tarz bir uygulamanın yazılmasında ana işler &lt;strong&gt;(1)&lt;&#x2F;strong&gt; yazılımın hangi özelliklere sahip olacağına karar vermek, &lt;strong&gt;(2)&lt;&#x2F;strong&gt; bu özelliklerin tamamını içerebilecek bir alan modellemesi (domain modeling) yapmak. İşin yazılımsal zorluluğu alanın ne kadar zor modellenebildiğine göre değişiyor. Bazı alanlar o kadar fazla kez modellendi ki, teknolojiye biraz yatkınlığı olan birisi neredeyse 15 senedir Wordpress kullanarak programlamayla hiçbir ilgisi olmadan e-ticaret sitesi açabiliyor kendi ürünlerini satmak için, ya da Bubble&#x2F;Wix gibi no-code&#x2F;low-code platformları kullanarak bir web platformu oluşturabiliyor insanlara belli hizmetleri sunan.&lt;&#x2F;p&gt;
&lt;p&gt;Diğer yanda bazı alanları modellemek doktora seviyesinde araştırmacıların uzmanlıklarını gerektirebiliyor. Örnek olarak fizik simülasyonları inşaat ve mimarlıkta, otomotiv sektöründe, savunma sanayiinde kullanılıyor, kullanılan materyallerin fiziksel özelliklerini modellemek ayrı bir iş, bu modellemelerin insanların kullanabileceği seviyede &lt;strong&gt;performanslı&lt;&#x2F;strong&gt; olmasını sağlamak ayrı bir iş, bu modellerin &lt;strong&gt;doğrulanmasını&lt;&#x2F;strong&gt; yapmak ayrı bir iş. Sosyal sistemleri modelleyen yazılımlar için de dünyanın sürekli değiştiğinin farkında olarak modelleme yapmak ayrı bir zorluk. Ülkelerle ilgili verileri işlediğiniz bir sistem düşünün, bir ülkenin adının değişebileceğini (Turkey -&amp;gt; Türkiye), bir ülkenin ortadan kaybolabileceğini (Yugoslavya, SSCB) ve bunun sonucunda ortaya yeni ülkeler çıkabileceğini, ülkenin farklı veri tabanlarında farklı adlara sahip olabileceğini hesaba katmak zorundasınız. Latin alfabesinin sizin hayal ettiğiniz kadar &lt;a href=&quot;https:&#x2F;&#x2F;haacked.com&#x2F;archive&#x2F;2012&#x2F;07&#x2F;05&#x2F;turkish-i-problem-and-why-you-should-care.aspx&#x2F;&quot;&gt;basit ya da yaygın olmadığını&lt;&#x2F;a&gt; fark edip buna göre sisteminizi daha geniş bir yelpazede tasarlamanız gerektiğini düşünmeniz gerekiyor. Tabii ki bu kompleks alan modellemelerinin de ayrı performans ve karmaşıklık maliyetleri var, dolayısıyla bunları da hesaba katmanız gerek.&lt;&#x2F;p&gt;
&lt;p&gt;Modellediğimiz alanın karmaşıklığını bir kenara bıraktığımızda, daha çok makro uygulamalarda karşımıza çıkan &lt;strong&gt;ölçek&lt;&#x2F;strong&gt; problemiyle karşılaşıyoruz. 300 kişinin kullandığı bir uygulama ile 300.000 kişinin kullandığı, 30.000.000 kişinin kullandığı uygulamalar çok temel düzeylerde birbirinden farklı. Her şeyden önce uygulamanın kitlesi büyüdükçe bahsettiğim modelleme problemleriyle karşılaşma ihtimaliniz artıyor. Belki ilk 1 milyon kullanıcınızda Kiril alfabesi kullanan kimse ile karşılaşmamış olabilirsiniz, ancak kullanıcı ölçeği büyüdükçe daha çeşitli arka planlardan insanlarla karşılaşacaksınız. Farklı diller konuşacaklar, farklı alfabeler, işletim sistemleri, zaman dilimleri, ödeme entegrasyonları, cihaz boyutları, internet hızları kullanacaklar. Bu çeşitlilik sizin modelleme ihtiyaçlarınızı kat be kat arttıracak. İkinci tip bir kompleksite ise uygulamanız sağladığı özellikler anlamında büyüdükçe yazılımınız da büyüyecek. Bugün ortalama bir yazılım ürününün arkasındaki sistemin birkaç yüz bin satır kodu olması hiç şaşırtıcı değil. Bu büyüklük size karmaşıklık olarak geri dönüyor, yeni bir özellik eklemek istediğinizde onu eklemeniz zorlaşıyor, uygulamada bir hata keşfettiğinizde onun sebebini tespit etmek saatler, günler sürebiliyor, özellikle de yazılımınızın mimari dizaynı bu büyüklüğü hesaba katacak şekilde yapılmadıysa. Üçüncü tip kompleksite ise kullandığımız cihazların fiziksel limitlerini algoritmik çözümlerle aşma çabasından geliyor. Mesela bilgisayarlarımızda 2 tip hafıza olduğunu düşünelim, geçici ve hızlı RAM, kalıcı ve yavaş disk. Eğer ki kullanıcı RAM&#x27;e sığmayan bir dosyayı yüklemek isterse ne yapmalıyız? Benzer şekilde, bir web uygulaması yazdığımızı varsayalım, bu web uygulamasını kullanıcılara sunmamızı sağlayan bir sunucu uygulamamız (application backend) var. Bu sunucunun fiziksel kapasitesi saniyede 100 kullanıcıya cevap vermesine izin veriyor ise, saniyede 120 kullanıcı aldığımızda ne olacak? Ya kullanıcıların bir kısmını düşüreceğiz, mesela sınav sonuçları açıklandığı gün ÖSYM sitesine giremediğinizde ÖSYM sizin isteklerinizi düşürüyordu... Diğer bir ihtimalde ise kodumuzu daha fazla kullanıcıya aynı hizmet verebilmesi için optimize edebiliriz, daha güçlü ve pahalı bir makineye geçebiliriz, ya da pek çok makineyi aynı anda kullandığımız dağıtık bir sistem kurgulayabiliriz.&lt;&#x2F;p&gt;
&lt;p&gt;Burada en başta bahsettiğim bir soruya geri döneyim, &lt;em&gt;kim kime neden yazılım ürünü geliştirmesi için maaş ödüyor?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Yazılımcının en temel işi alan uzmanlarının ortaya koyduğu gereksinimleri sağlayacak bir yazılım ürünü oluşturmak. Bu gereksinimler bir uygulamanın nasıl gözükmesi gerektiğinden kullanıcının aldığı aksiyonların uygulamada nasıl bir akışa yol açtığına, aynı anda desteklenmesi beklenen kullanıcı sayısına, kullanıcının bir aksiyonu sonucunda aldığı cevabın kaç saniyeyle limitli olduğuna... çok farklı şekiller alabilir. Tabii ki bu kararlar bir vakumda değil, bir yandan da kısıtlı kaynakların olduğu finansal bir denklemde alınıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Mühendislik de, en temelde kısıtlı kaynakların matematiksel modellemeler sonucu optimizasyonu aslında. Yazılım ya da bilgisayar mühendisliğinin objesi ise önceki paragraflarda bahsettiğim süreçleri optimize etmek. Bu optimizasyon projenin ilerlemesini hızlandıracak kararlar sonucunda projenin alacağı toplam insan saatini azaltmak da olabilir, projedeki fiziksel kaynaklara yapılan harcamalar ile algoritmik geliştirmelerin ya da dağıtık sistem tasarımlarının arasındaki dengenin kurulması da olabilir, projede kullanılacak olan &lt;strong&gt;dış kaynaklara ve hizmetlere&lt;&#x2F;strong&gt; karar verilmesi de olabilir.&lt;&#x2F;p&gt;
&lt;p&gt;Ürün sahipleri bu kararları alabilecek, bu kararların sonuçlarının sorumluluğunu alabilecek mühendislik ve takım liderlerine, bu gereksinimlere uyabilecek uygulamalar geliştirebilen yazılım mühendislerine maaş ödüyor. Bir uygulamanın &lt;a href=&quot;https:&#x2F;&#x2F;www.atlassian.com&#x2F;incident-management&#x2F;kpis&#x2F;cost-of-downtime&quot;&gt;bir saatliğine kapalı kalmasının&lt;&#x2F;a&gt; şirkete bir maliyeti var. Bir isteğin saniyenin &lt;a href=&quot;https:&#x2F;&#x2F;www.gigaspaces.com&#x2F;blog&#x2F;amazon-found-every-100ms-of-latency-cost-them-1-in-sales&quot;&gt;100 milisaniye daha uzun sürmesinin&lt;&#x2F;a&gt; şirkete bir maliyeti var. Bir uygulamada &lt;a href=&quot;https:&#x2F;&#x2F;www.it-cisq.org&#x2F;the-cost-of-poor-quality-software-in-the-us-a-2022-report&#x2F;&quot;&gt;kullanıcıyı etkileyen hatalar olmasının&lt;&#x2F;a&gt; şirkete bir maliyeti var. Dolayısıyla yazılım mühendisinin daha hızlı, dayanıklı, okunabilir, anlaşılabilir, büyütülebilir, güvenli yazılımlar geliştirebiliyor olmasının şirkete direkt olarak finansal faydaları var, bu faydalar yazılım endüstrinin var olmasını ve büyümesini sağlıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Uzuuunca bir şekilde tüketici yazılımlarından, bu yazılımların nasıl ihtiyaçları neden çözdüğünden, yazılım mühendislerinin bu yazılımları geliştirmedeki rollerinden bahsettik. Peki bu ürünlerin tüm parçalarını şirketler sıfırdan mı geliştiriyor? Tabii ki hayır. Nasıl araba şirketleri yeri geldiğinde basit parçaları, yeri geldiğinde ise motor gibi kritik bileşenleri güvendikleri üçüncü parti şirketlerden alıyorsa, yazılımda da benzer mekanizmalar var, bunlardan iki paragraf önce &lt;strong&gt;dış kaynaklar ve hizmetler&lt;&#x2F;strong&gt; olarak kısaca bahsetmiştim, şimdi omurga yazılımlar adı altında bu dış kaynak ve hizmetlerin ekonomik mekanizmalarını inceleyeceğim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;omurga-yazilimlar&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#omurga-yazilimlar&quot; aria-label=&quot;Anchor link for: omurga-yazilimlar&quot;&gt;Omurga Yazılımlar&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Not: omurga kullanmak istediğim asıl terim için --&amp;quot;backbone&amp;quot;-- çok iyi bir çeviri değil, daha iyi bir çeviriniz varsa iletirseniz sevinirim.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Bahsettiğim optimizasyon problemlerini, ölçekle ortaya çıkan karmaşıklığı okuduğunuzda bilgisayar mühendisliği yazdığınıza pişman olmuş, acaba başka bir mühendislik mi yazsaydım daha mı kolay olurdu diye düşünmüş olabilirsiniz, ancak şimdi sizi biraz daha endüstrinin realitesiyle tanıştıracağım, ve aslında yaptığımız işin çok büyük bir kısmının mühendislik olmadığını göreceksiniz, çünkü kullandığımız makineler çok ucuz, &lt;em&gt;&amp;quot;compute is cheap&amp;quot;&lt;&#x2F;em&gt;. Geçtiğimiz 70 senede yazılım endüstrisi donanım endüstrisinin üssel gelişiminden fazlasıyla yararlandı, ortalama her 18 ayda bir kullandığımız makineler iki kat daha güçlü hale geldi (&lt;a href=&quot;https:&#x2F;&#x2F;tr.wikipedia.org&#x2F;wiki&#x2F;Moore_yasas%C4%B1&quot;&gt;Moore Yasası&lt;&#x2F;a&gt;). Bugün cebimizdeki telefonun Apollo 11&#x27;den 100.000 kat daha fazla hesaplama gücü, 7 milyon kat daha fazla hafızası var, ve biz onunla 2048 oynuyoruz. Tabii ki şaka bir yana, günümüz bilgisayarları ekrana harfleri gözümüze güzel gelen bir şekilde çizmek için Apollo&#x27;nun çalıştırdığı fizik simülasyonlarından daha karmaşık hesaplamalar yapıyor, ortalama bir sosyal medya uygulaması 1970 yılındaki tüm veriden daha fazla veriyi tek bir günde telefonumuzda işliyor, dinlediğimiz bir müzik klibi 1990&#x27;lardaki 100 albüme eşdeğer miktarda veri saklıyor. Cihazlarımızda çok daha fazla veri tutuyor, çok daha fazla veri işliyoruz, bunları çok daha kompleks algoritmalarla ve protokollerle yapıyoruz; eğer ortalama bir yazılım mühendisi yazdığı uygulamanın &lt;em&gt;tam anlamıyla&lt;&#x2F;em&gt; ne yaptığını öğrenmeye kalkarsa bunun için birkaç yılını sadece okuyarak ve araştırarak harcaması gerekebilir. Dolayısıyla nasıl Aston-Martin motorları için Mercedes&#x27;e güveniyorsa, yazılım firmaları da kritik, bugün kurduğumuz sistemlerin omurgası haline gelmiş pek çok kendini kanıtlamış, hazır yazılım ürününü kullanıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Omurga yazılımların bize verdiği garantileri kullanarak, hesaplama gücünün ucuzluğuyla da birlikte yazılım ürünlerini özellikle ilk aşamalarda minimal mühendislik yüküyle geliştirebiliyoruz. Alan modellemelerini basit tutarak geliştirilen yazılımın karmaşıklığını sınırlayabiliyor, ortalama tek bir makine ile saniyede binlerce isteği karşılayarak dağıtık sistemlerin ve optimizasyonun yükünden kurtulabiliyoruz, klasik bir yazılım ürününün ihtiyaç duyduğu veri tabanı(SQLite, PostgreSQL, MongoDB, Firebase), kuyruk (Kafka, RabbitMQ, SQS), önbellek (Redis, Memcached), yük dengeleyici (NGINX, HAProxy), konteyner (Docker, Kubernetes), izleyici (Prometheus, Grafana), nesne deposu (S3, R2), içerik dağıtım ağı (Cloudflare, Akamai) gibi pek çok ihtiyacı çoğunluğu açık kaynak, yüksek yük altında kendini kanıtlamış, matematiksel modellerle desteklenmiş, çeşitli hata senaryolarına karşı dirençli omurga yazılımlar ile yazılım geliştirme sürecini hızlandırabiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Yalnızca yüksek yükü karşılaşayabilmek ya da optimizasyon için kullanmıyoruz tabii ki dışarıdan yazılımları. Programlama dilleri çoğu zaman yüz binlerce kütüphanenin olduğu büyük ekosistemlerden oluşuyorlar. Bu ekosistemler bize bir web sitesi oluştururken kullanabileceğimiz Django gibi tam paket (batteries-included) çözümler de sunuyor, yetkilendirme (authorization), kimlik doğrulama (authentication) gibi bir uygulama oluşturmak için temel faydalı paketler de sağlıyor, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helsing-ai&#x2F;sguaba&quot;&gt;aviyonikten&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ros2&quot;&gt;robotiğe&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;pytorch.org&quot;&gt;yapay zekaya&lt;&#x2F;a&gt;, burada say say bitiremeyeceğim çok farklı alanlarda kullanabileceğimiz, bahsettiğimiz algoritmik problemleri, alan modellemelerini çözen, bize hazır çözümler sunan kütüphaneler var. Sırtımızı bu koskoca ekosisteme taşıyarak son tüketim uygulamasını neredeyse sadece ekosistemden paketleri birbirine bağlayarak oluşturabiliyoruz çoğu zaman, en azından küçük ölçeklerde, basit modellerle.&lt;&#x2F;p&gt;
&lt;p&gt;Ancak birilerinin de bu omurga yazılımları yazması gerekiyor, bu yazılımlar kendileri bir anda ortaya çıkmıyorlar. Bu yazılımların sırtını dayayabileceği ekosistem çok daha küçük, yapılan hataların maliyeti çok daha büyük, geliştirme süreçleri geleneksel mühendisliklere çok daha yakın. Son tüketim yazılımlarında yazılımcının ana işinin ürün sahibinin ürettiği gereksinimleri programlara dönüştürmek olduğundan bahsetmiştim, omurga yazılımlarda artık yazılımcının ana uzmanlığı kod yazmak değil, alttaki sistemi anlamak, nasıl geliştirebileceğini keşfetmek, kod artık bir araç değil, aynı zamanda bir amaç haline geliyor.&lt;&#x2F;p&gt;
&lt;p&gt;Buraya kadar adını vermeden etrafından dolaştığım bir konsepte gelelim, soyutlama (abstraction). Bahsettiğim &amp;quot;sırtını dayama&amp;quot; konsepti aslında sırtımızı dayadığımız yazılımların bizim için belli detayları soyutlaması sayesinde mümkün oluyor. Her soyutlama katmanı bize belli garantiler sağlıyor, veri tabanları koyduğumuz veriyi tekrardan geri alabileceğimizi garantiliyor, PDF yaratmak için kullandığımız kütüphane en son ürettiği dökümanın geçerli bir PDF dosyası olduğundan emin oluyor, uçuş kontrolü için kullandığımız modül uzayda X-Y-Z yönüne doğru ilerlemek istediğimizde fiziksel olarak o yönde ilerlememizi sağlıyor. Soyutlama katmanlarının bize sağladığı garantiler sayesinde büyük yazılım projeleri üretebiliyoruz, mesela iki cihaz arasında tüm mesajların kesin bir şekilde problem yaşanmadan gitmesini sağlayacak fiziksel bir altyapı oluşturmak mümkün değil, ama var olan fiziksel altyapıların üstüne mantıksal olarak mesajların kesin bir şekilde iletimini sağlayan TCP gibi protokoller sayesinde mesaj iletimini bir problem olarak düşünmekten kurtulabiliyoruz. TCP&#x27;nin kendisini geliştiren kişiler bizim sahip olduğumuz soyutlamalardan faydalanamıyor, alttaki fiziksel dünya modelinin üzerine bir ağ protokolü kurmak zorundalar. Benzer şekilde veri tabanları, derleyiciler, döküman editörleri, ağ protokolleri, gerçek zamanlı video işleme modülleri... gibi başka uygulamaların onlara sunacağı soyutlama katmanlarından yararlanamayan, makinenin önbellek yapısını, hafızasını, bir programın makine kodunda nasıl gözüktüğünü anlaması gereken pek çok yazılım sınıfı var.&lt;&#x2F;p&gt;
&lt;p&gt;Bu endüstrilerde maaş artık yalnızca gereksinimleri koda dönüştürebilmenin yanında gereksinim üretebilmeye dayanmaya başlıyor, tüketim yazılımlarında daha çok alan uzmanlarının ürettiği gereksinimlere uyulmasından sorumlu olan yazılımcılar artık kendileri de alan uzmanı oluyorlar, çünkü dizayn edilen sistemin güvenebileceği soyutlama katmanları yok, makineyi, algoritmaları, protokolleri anlamak zorundasınız, nasıl ki bir otomotiv mühendisi matematiksel modellemeler yapıyorsa, bir inşaat mühendisi yaptığı binanın yıkılmayacağından emin olmak zorundaysa, siz de veri tabanınızın veri kaybetmediğinden, kullanıcılara verdiğiniz garantilerin gerçekten garantiler olduğundan emin olmak zorundasınız.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dipnot: Burada kendimi yanlış anlaşılmalara karşı biraz korumak istiyorum. Bir işin mühendislik içermiyor ya da gerektirmiyor olması o işin önemsiz olduğu ya da kolay olduğu anlamına gelmiyor. Demek istediğim şey matematik ve optimizasyon gerektirmediği. Benim de günlük hayatımda yazdığım kodların çok büyük bir kısmı matematik gerektirmiyor, hatta bilgisayar mühendisliği eğitimi de gerektirmiyor, kendime programlama öğretsem yapabilirdim çok büyük bir kısmını. İşin geri kalan küçük kısmında matematik bilmeye ihtiyacım var, eğitimimi de onun için kullanıyorum, bu yazıyı okuyacak öğrencilerin de aynısını yapacaklarını, aldıkları eğitimin boşa olmadığını, endüstride karşılığını olduğunu bilmeleri için bu yazıyı yazmak istedim biraz da.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;acik-kaynak&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#acik-kaynak&quot; aria-label=&quot;Anchor link for: acik-kaynak&quot;&gt;Açık Kaynak&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazılımın ekonomisini konuşurken açık kaynağın buradaki rolünü konuşmamak olmaz, çünkü yazılımı diğer endüstrilerden ayıran en önemli faktörlerden birisi açık kaynak kültürü. Çoğu endüstride &lt;em&gt;ticari sır&lt;&#x2F;em&gt; olarak nitelendirilecek uygulamalar, ürünler, fikirler açık olarak paylaşılıyor, geliştiriliyor. Linux, SQLite, Chromium, Kubernetes gibi endüstrinin çok büyük bir kısmını güçlendiren ürünlerin yanı sıra popüler tüm programlama dillerinin derleyicileri, editörler, TensorFlow&#x2F;PyTorch gibi endüstri standardı makine öğrenmesi kütüphaneleri, internetteki sitelerin çok büyük bir kısmının arkasında olan Wordpress, Netflix ve Youtube&#x27;un video işleme için kullandığı ffmpeg gibi yüzlerce inanılmaz değerli uygulama ve kütüphane açık kaynak, çoğunun lisansları üstlerine iş kurulabilecek esnek lisanslar.&lt;&#x2F;p&gt;
&lt;p&gt;Açık kaynakla ilgili tartışmaları çoğu zaman ekonomiden bağımsız görsem de, benim gözümde açık kaynak her projenin ekonomik olarak da sürdürülebilir olması gerekiyor, çünkü ekonomik olarak sürdürülemeyen bir sistem ancak öğrenciler, tam zamanlı çalışmak zorunda olmayan gönüllüler, ya da tam zamanlı işinin üzerine açık kaynak projeleri bir şekilde devam ettirebilen inanılmaz özverili insanlar sayesinde devam edebiliyor. Çoğu zaman, eğer  proje insanlara finansal fayda sağlayabiliyorsa şirketler üzerine ücretli bir ürün kurarak projenin açık kaynak kısmını fonlayabiliyorlar, benzer şekilde büyük açık kaynak projelerde yer almanın getirdiği endüstrideki sosyal kredi hem şirketlerin alım süreçlerinde hem de endüstrideki çalışanların verdikleri kararlarda etkili oluyor.  Şahsen ben açık kaynak bir projede çalışabileceğim bir şirketi kapalı bir projeye tercih edebilirim. Tabii bunun üzerine açık kaynağın manevi bir tarafı olduğunu da yadsımamak önemli, pek çok insana direkt olarak faydası olan bir proje üzerinde çalışmanın şahsi bir tatmini de var.&lt;&#x2F;p&gt;
&lt;p&gt;Açık kaynağın yazılımda popülerleşmesinin tarihsel geniş bir bağlamı var, ancak ben yine ekonomik taraftan yaklaşmak istiyorum. Yazılım ürünlerinin üretim ve bakım masraflarının neredeyse tamamı emekten oluşuyor, geleneksel endüstrilerdeki materyal veya lojistik masrafları kendilerini farklı şekillerde yazılım endüstrisinde ortaya çıkarsa da çok daha küçük ve göz ardı edilebilir kalıyorlar. Ana masrafın emek olması sebebiyle herhangi birimiz kendimizin, çevremizin, ya da toplumun bir kesiminin problemini çözecek bir çözüm üretip bunu yayabiliyoruz. Bugün özellikle programlamada bize yardımcı olması için kullandığımız pek çok mini araç 2-3 kişinin kendi problemlerini çözmek için üzerine çalışmaya başladığı araçlar, zaman içerisinde endüstri geneline yayıldıkları için her cihazda, her an, ücretsiz bir şekilde kullanabiliyoruz bunları.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;maaslar&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#maaslar&quot; aria-label=&quot;Anchor link for: maaslar&quot;&gt;Maaşlar&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Buraya kadar endüstrinin farklı parçalarının ne gibi işler yaptığını, farklı alanlarda yazılımcının hangi kabiliyetlerinin onu iş sahibi yaptığını konuştuk. Peki farklı segmentlerdeki maaş dengeleri nasıl ortaya çıkıyor? Tabii ki genel geçer belli bilgilerimiz var, Amerika&#x27;daki ortalama maaşın yüksek olduğunu biliyoruz, bunun ülkedeki yazılım endüstrisine yapılan yatırımın ve edilen dudak uçuklatıcı karların bir sonucu olduğu çıkarımına varabiliyoruz. Peki Avrupa&#x27;da, Türkiye&#x27;de nasıl ortaya çıkıyor maaş dengeleri? Benim endüstrisindeki maaşlarla ilgili gördüğüm &lt;a href=&quot;https:&#x2F;&#x2F;blog.pragmaticengineer.com&#x2F;software-engineering-salaries-in-the-netherlands-and-europe&#x2F;&quot;&gt;en iyi araştırmayı ve modeli&lt;&#x2F;a&gt; 2021 yılında Gergely Orosz &lt;a href=&quot;https:&#x2F;&#x2F;blog.pragmaticengineer.com&quot;&gt;pragmatic engineer&lt;&#x2F;a&gt; adlı bloğunda yayınladı. Gergely bu yazıda endüstriyi 3 parçaya ayırıyor, T1 şirketleri en fazla pozisyona sahip, en az maaşları veriyorlar, maaşları için kendi alanlarındaki lokal şirketler ile yarışıyorlar. T2 şirketleri maaşları için tüm lokal şirketler ile yarışıyor, T3 şirketleri ise en az miktarda çalışan alıyor, bölgesel ve küresel şirketler ile yarışıyor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;yazilim-ekonomisi&#x2F;.&#x2F;comp.png&quot; alt=&quot;Maaşlar&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Analizin detayı için asıl yazıyı okuyabilirsiniz, ancak ben biraz daha kendi perspektifimden sunmak istiyorum. Tek kişilik bir şirket hayal edelim, aylık belirli bir miktarda geliri var, giderleri var, günün sonunda karı da X lira olsun. Bu şirketi büyütmek için kişinin ya yeni büyümeyle birlikte uzun vadede daha fazla satış yaparak karını arttırabileceğine, ya da yapmak istemediği işleri karının belli bir miktarını keserek başkasına yaptırabileceğine inanıyor olması gerek. Buradaki seçeneklerden ilki çalışanı yeni kar üretiminin bir parçası olarak görürken, ikincisinde çalışan bir maliyet, işveren her zaman çalışanı ortadan kaldırarak yapmak istemediği işleri yapıp maliyetini eski haline düşürebilir.&lt;&#x2F;p&gt;
&lt;p&gt;Benim endüstriye bakışım bu ikilemde her zaman kar üretiminin bir parçası olmaya çabalamak yönünde, bu da büyüyen, büyümek isteyen şirketlerde yer almak, kendini endüstrinin kalanından mümkün olduğunca ayrıştıracak şekilde kabiliyetler edinmek, şirketlere o ayrıştırdığım yönü bir artı olarak sunmak, birinin yapmak istemediği işleri yapmak yerine yapamayacağı işleri yapabilmeye çalışmak oldu. Tabii ki endüstri 1 kişiden 2 kişiye çıkacak şirketler ekseninde tartışılabilecek kadar basit değil. Savunma sanayii, bankalar gibi kurumsal şirketler taşa yazılmışcasına sabit maaş aralıkları sunuyor, pek çok şirket Gergely&#x27;nin T3&#x27;ünde yer alabilecek kadar büyük bir ölçekte çalışmıyor, o şirketlerle yarışmasına gerek kalmıyor, ülkedeki genel ekonomik durumla uyumlu seviyede maaşlar veriyorlar, ancak Türkiye&#x27;de de küresel ölçekte çalışan, küresel yarışın bir parçası olan, T3 grubunda şirketler var.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yapay-zeka&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yapay-zeka&quot; aria-label=&quot;Anchor link for: yapay-zeka&quot;&gt;Yapay Zeka&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazının başında bu yazının &amp;quot;yapay zeka işimi alacak mı&amp;quot; korkusunu yaşayan öğrencilere faydalı olmasını umduğumdan bahsetmiştim. Bitirmeden önce biraz ona değineyim. Fark etmiş olabilirsiniz, yazı boyunca endüstriyi farklı şekillerde kategorize ettik, tüketici yazılımlarından, bu yazılımları destekleyici konumda olan omurga yazılımlara bir geçiş yaptık, bunun haricinde T1-3 eksenlerinde şirketlerin yarıştığı ölçekleri kategorize ettik. tüketici yazılımlarını da kendi içerisinde spesifik problemlere odaklanan mikro yazılımlardan makro yazılımlara bir spektrum olarak niteledik. Bu mikro-makro skalasında ilerledikçe nasıl problemlerin ortaya çıktığını, yazılımcıların spektrumun farklı noktalarında farklı problemleri çözdüğünü tartıştık.&lt;&#x2F;p&gt;
&lt;p&gt;Bundan birkaç ay önce &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;verifiability-is-the-limit&#x2F;&quot;&gt;Yeni Sınır Doğrulanabilirlik (Verifiability is the Limit)&lt;&#x2F;a&gt; adında, temele yapay zekanın yeni kabiliyetlerinin endüstriyi nasıl etkileyeceğini düşündüğüm bir yazı yazmıştım, burada tamamını tekrarlamayacağım, ama ana argümanı tekrarlamak yararlı.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Yazdığınız her türlü program, ürettiğiniz her türlü ürün, birilerinin işine yaramak için var. Dolayısıyla onun sizin kabul edilebilir bulduğunuz sınırlar içerisinde &amp;quot;doğru&amp;quot; olduğunu doğrulamanız gerekiyor. Bir nükleer santral, araba ya da apartman, ya da bir omurga yazılım için bu doğrulama çok daha fazla mühendislik gerektirebilir, çok daha fazla matematiğe ve efora ihtiyaç duyabilir, ancak bir web sitesi için de sizin bakıp istediğiniz gibi gözüktüğünden emin olmanız gerek. Doğrulama sizin yapay zekaya atayabileceğiniz bir görev değil, çünkü ne olursa olsun en son noktada sizin modelden doğal dille istediklerinizin modelin anladığıyla aynı şey olduğundan emin olmanız mümkün değil.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Yazıda doğrulamanın farklı alanlarda nasıl olduğu, bunun yapay zeka kullanımını nasıl etkilediğine dair başka tartışmalar da var, en sevdiğim yazılarımdan birisi, okursanız sevinirim. Buradan endüstri analizine geri dönebiliriz.&lt;&#x2F;p&gt;
&lt;p&gt;Yapay zeka öncesi dönemde programlama yeteneği bir ek değerdi. Yani maaşlar kısmında bahsettiğim şirkete maliyet olmak yerine daha fazla para kazandırma fırsatı verdiğiniz bir pozisyonda oluyordunuz kod yazan kişi olarak, çünkü &amp;quot;kod yazabilenler&amp;quot; ve &amp;quot;kod yazamayanlar&amp;quot; olarak ikiye ayırabilirdik toplumu. Artık &amp;quot;kod üretmenin&amp;quot; kolaylaşması ile birlikte bu ayrım ortadan kalktı, ancak &amp;quot;kod doğrulayabilenler&amp;quot; ve &amp;quot;kod doğrulayamayanlar&amp;quot; ayrımı hala var. Yeni Sınır Doğrulanabilirlik yazısında bahsettiğim gibi, doğrulama her alanda farklı şekillerde yapılıyor, bazı alanlarda doğrulama yapmak için bugün QA (Quality Assurance) alanında çalışlanların yaptığı tarzda program ile çeşitli interaksiyonlara girerek programın tepkilerini ve cevaplarını inceleyip izlemek yeterliyken, diğer alanlarda bir programı doğrulamak için yine farklı programlar yazmanız, sistemin matematiksel modelini anlamanız gerekebiliyor. Benim gözümde artık doğrulama yapmak için programla yalnızca interaksiyona girmenin yeterli olduğu alanlarda programcı olmak bir &lt;strong&gt;maliyet&lt;&#x2F;strong&gt; haline geldi bir &lt;strong&gt;değer&lt;&#x2F;strong&gt; olmak yerine, bu da bu pozisyonların ortadan kalkacağını, maaşlarının düşeceğini gösteriyor bana.&lt;&#x2F;p&gt;
&lt;p&gt;Endüstrinin bunun dışında kalan kısımlarına bakarsanız üretilen değerin doğal dille ifade edebileceğiniz problemleri koda dökmek olmadığını görebilirsiniz. İlk başta o problemleri keşfetmek, anlamak, çözüm yöntemi üretmek bir değer, ürettiğiniz kodun diğer kişiler tarafından okunabilir, geliştirilebilir, büyütülebilir olduğundan emin olmak bir değer, ürettiğiniz kodun fonksiyonel olmanın yanında performans, güvenlik gibi gereksinimlere uyduğundan emin olabilmek bir değer, bu değerlerin çok ciddi bir kısmı &amp;quot;doğrulama&amp;quot; ile geliyor, &amp;quot;üretim&amp;quot; ile değil.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;krediler&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#krediler&quot; aria-label=&quot;Anchor link for: krediler&quot;&gt;Krediler&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazıya dair yorumları, eleştirileri ve tavsiyeleri için Ahmet Öğreten, Ahmet Yüksel, Arda Çelik, Barış Aşkın, Cemil Vahapoğlu, Doğaç Eldenk, Emre Güllü, Göktuğ Ekinci, Ozan Erdem, Türker Akpınar, ve Umut Güloğlu&#x27;na teşekkürler.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kapanis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kapanis&quot; aria-label=&quot;Anchor link for: kapanis&quot;&gt;Kapanış&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Biraz dağınık bir yazı oldu, endüstrinin farklı taraflarındaki benim biraz geç fark ettiğimi düşündüğüm bakış açılarımı ortaya dökmeye çalıştım. Belki de ben biraz naifimdir, bilgisayar mühendisliği öğrencileri ya da endüstri ile daha iç içe yazılım mühendisleri bunların daha çok farkındadır, belki de benim farkındalıklarım çok da doğru değildir. Kısaca toparlamak gerekirse, dünyadaki en büyük endüstrilerinin bir tanesinin içerisindeyiz. Çok farklı iş kolları, çok farklı pozisyonlar, çok farklı şirketler var, hepsinin çeşitli dinamikleri, beraber iş yaptıkları farklı şirketler, hizmet sağladıkları çeşitli sektörler var, toplu bir şekilde baktığımızda milyarlarca doların döndüğü inanılmaz kompleks bir endüstriden bahsediyoruz. Bu endüstrinin içerisinde bir birey olarak yer alırken ekonomik dinamikleri anlamaya çalışmak bana eğlenceli geliyor, bir yandan da şirketlerle olan iletişimlerimi yönlendiriyor, hangi tip şirketlerle nasıl iletişim kurmalıyım, bu şirketler için ne değerli, yapacağım iş bundan nasıl etkilenecek onu anlamak için bana faydalı olduğunu düşünüyorum, bence endüstride yer alıyorsanız sizin de bunları düşünmeniz sizin için de faydalı olacaktır, kolay gelsin.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;*: Bilgisayar bilimi ve mühendisliğiyle ilgili ilginç başka fikirleri takip etmek istiyorsanız &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@hafifprogramming&quot;&gt;Hafif Programming&lt;&#x2F;a&gt;&#x27;i kaçırmayın.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Filling in the Missing Bits</title>
        <published>2025-08-02T00:00:00+00:00</published>
        <updated>2025-08-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/the-missing-bits/"/>
        <id>https://alperenkeles.com/posts/the-missing-bits/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/the-missing-bits/">&lt;p&gt;The world is full of gaps, missing opportunities, unfinished projects, and unfulfilled potential. We walk around every day complaining about the problems we see in the world. We don&#x27;t like the height of a shelf, the color of a wall, the shape of a doorknob, the line at the DMV, the length of the traffic light, the taste of our morning coffee, the feed our our social media, on, and on, and on. Much of the world is set in stone, or at least feels like it, so 9 out of 10 cases the solution is to change our preferences; we change the route to our work, the brand of our coffee, the position of the twitter app on our phone, and we just decide never to go to DMV ever again.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps this is why open source software is so misunderstood, so asymetric on the expectations of the people who create it, versus those who use it. You see this kind of divide in the discussions in open source projects, the user, whose modus operandi in life is to be a customer, asks for a change in a project that fits their requirements. The already burnt out open source maintainer responds by asking the &amp;quot;customer&amp;quot; to go to hell, or better yet just open up a PR, which the discussion more often than not dies, because customers do not fix, they &lt;em&gt;consume&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There are perfectly valid explanations for each behavior in this scenario, it is expected, it is common, it is normal. The question is, who breaks this pattern, and how? How do we turn from powerless customers to the grumpy maintainers? What&#x27;s the shift in mindset, what does it entail, how does it empower us, and why should you care?&lt;&#x2F;p&gt;
&lt;p&gt;I argue that you should care, because looking at problems in the world and having the audacity to try to fix them is quite empowering, because you can start by solving &lt;em&gt;your own problems&lt;&#x2F;em&gt;. In terms of a weird traffic lights that don&#x27;t make sense, the best you could do is perhaps calling your local municipality and fighting against a bureaucracy of conformity in order to move the status quo. In terms of software, the limit becomes the sky. If you don&#x27;t like how a website looks, you can just create a browser extension for automatically changing it. If you don&#x27;t like ads, you can write or install a kernel level ad blocker. If you don&#x27;t like your file manager, &lt;a href=&quot;https:&#x2F;&#x2F;filepilot.tech&quot;&gt;you can write one from scratch&lt;&#x2F;a&gt;. Software is malleable, it is &lt;strong&gt;not set in stone&lt;&#x2F;strong&gt;, we get to play, change, update, upgrade, evolve, and contribute to it.&lt;&#x2F;p&gt;
&lt;p&gt;That is not to say that changing software is any more easier than changing your traffic lights in terms of technical difficulty, most software is cimplex, and contributing to it requires time, effort, and domain expertise. The important difference of software is its zero-cost distribution, open source culture that allows for you to tinker with, play around, discover, understand and modify software. Creating a large project from scratch is like creating a whole new apartment, scratch that, it&#x27;s like designing a whole new city; but adding a specific feature you want, or need, for solving your own problems is more likely akin to changing your doorknob with the major difference that you don&#x27;t need to order a new doorknob from Amazon, but you just need your time and effort.&lt;&#x2F;p&gt;
&lt;p&gt;Once we are out of the customer mentality, such a large surface of possibilities opens up in front of us. You don&#x27;t like how slow Rust compiler is, perhaps you should check out what is making it slow, remove or upgrade it. If you want Excalidraw to support more shortcuts, you can spend a few hours figuring out how to do that, whereas you have direct access to the people who write the software from very open communication channels, something we almost never have for other problems in our life. In contrast to so many of those responsible for our problems building up layers of bureaucracy to shield themselves from complaints and requests, open source software communities are inviting, open, and surprisingly well accustomed to newcomers like yourself, or myself.&lt;&#x2F;p&gt;
&lt;p&gt;World is far from complete, and it is far from being set in stone. The systems we interact change every day, and I personally would like to be the change I would like to see in the world, which open source software allows me to do. Let&#x27;s open up a personal parantheses here, the project that inspired me to write this post is called tjq, or typed jq. &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;tjq&quot;&gt;tjq&lt;&#x2F;a&gt; is a novel algorithm for better error reporting for &lt;a href=&quot;http:&#x2F;&#x2F;jqlang.org&quot;&gt;jq&lt;&#x2F;a&gt;, a popular scripting language for processing JSON. What is so interesting about tjq is that the core of the idea is very simple, many people would have thought of it, and I&#x27;m sure many asked themselves why that did not exist. You use the information already available in the program for understanding it better and use it for better, informative, surgical error messages. The only reason I started this project is I was writing jq scripts and got fed up with the error messages I got. In a customer mindset, I would have either complained to the maintainers or switched to a better product. The &lt;em&gt;filler&lt;&#x2F;em&gt; mindset instead tries to understand what the missing bit is, and conjectures how to fill it. It is possible that filling gaps is a lot of work, tjq is still incomplete, and  it will remain so for a long time, so arguably I haven&#x27;t been able to fill it, and perhaps I won&#x27;t ever be able to finish the project.&lt;&#x2F;p&gt;
&lt;p&gt;Yet, the mentality of looking at the same world as many, but seeing something else, a possibility for change many others have ignored seems to have an exceptional satisfaction. Almost no problem in the world is unique, if you are experiencing it, others are too. If you fix it, many will benefit, perhaps even those who are ignorant to the problem today, and you will have filled a gap in the world, raising the bar for everyone, and lifting the world up to be a better place for us all.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Time Budget as a Software Constraint</title>
        <published>2025-08-01T00:00:00+00:00</published>
        <updated>2025-08-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/budget/"/>
        <id>https://alperenkeles.com/posts/budget/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/budget/">&lt;p&gt;Software performance is a contentious topic among programmers. On one hand, you&#x27;ll see Jonathan Blow arguing programmers should spend their valuable time bikeshedding small details to cut down a few CPU instructions, and on the other you&#x27;ll see people running an electron app that runs on a hypervisor that runs on a VM, claiming everything&#x27;s just fine.&lt;&#x2F;p&gt;
&lt;p&gt;Ultimately, a large portion of this discussion comes to opportunity costs and incentives, which are domain and case specific, which I believe isn’t particularly fruitful to rehash in this essay. I will, however, propose a framework for discussing what to optimize, and why. I have heard similar arguments in discussions before, so there&#x27;s certainly some folk knowledge on this, although I don&#x27;t have any formal citations, &lt;a href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;articles&#x2F;practical-test-pyramid.html&quot;&gt;Martin Fowler&lt;&#x2F;a&gt; seems to have influenced some of these ideas, so I thank him for that.&lt;&#x2F;p&gt;
&lt;p&gt;The core thesis I propose is that, performance, and performance requirements, fundamentally change the way software is used. The faster we can run a program, we can run it more. A program that takes a fraction of a second can be run without disrupting the user at all, while a program that takes a few seconds must require explicit user approval and action to run. If it takes a minute, the user will probably run it while checking their social media in the background, a 10 minute program will only run at coffee breaks, a 30 minute program will probably run in the CI or overnight. The best example of this is perhaps textual analysis of code. State of the art type checkers are fast and incremental, and they can provide almost immediate feedback to the users in most cases. These systems are now fundamental parts of the activity of programming, to the point it is expected for new languages to have LSP integrations and type inference to be counted as &amp;quot;usable&amp;quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Another important example, which is in fact related to my research, is in random testing. Random testing has many flavors, the most common is no doubt fuzz testing, which is roughly defined as generating random bytes as inputs to the system under test, using many heuristics, mainly coverage information acquired by instrumenting the system, in an effort to find crashes. My research focuses on Property-Based Testing, which, in contrast to fuzz testing, focuses on very short time horizons in the order of milliseconds, seconds, or at most a few minutes; while you&#x27;ll see fuzz testing running in continuous integration systems for hours or days. It is no doubt both approaches are useful on their own, and they have been used &lt;a href=&quot;https:&#x2F;&#x2F;antithesis.com&#x2F;resources&#x2F;reliability_glossary&#x2F;#fuzz-testing&quot;&gt;interchangeably in many cases&lt;&#x2F;a&gt;, but the focus, the incentives, the evaluations of PBT and fuzz testing differ vastly, which I believe the budget plays a big role in, because the budget changes the trade-offs we need to make, hence the  maneuvers we can take to explore new possibilities in the design space.&lt;&#x2F;p&gt;
&lt;p&gt;This view of performance gives us another avenue to think of, other than the classical &amp;quot;faster is better&amp;quot; mantra. Of course, given everything is constant, faster is better, but you can also think of &lt;em&gt;what are the interesting possibilities with a larger time budget?&lt;&#x2F;em&gt; Imagine a game engine that can run 60 FPS in real time for a given configuration. For anything that does not require real time processing, you can increase the FPS, or give it a much better rendering quality that you wouldn&#x27;t have the opportunity to do otherwise. Same thinking follows the other way. For any given software, and what you do with it, you can at many times conjure new possibilities with a lower time budget. Today, we&#x27;re used to grammar checkers or type checkers running in the background, giving us instant feedback, but our unit tests are running only when we explicitly run them, because they are not instant. What if you had an environment where any relevant test would automatically run as you type, could that lead to higher-quality software?&lt;&#x2F;p&gt;
&lt;p&gt;Our core assumptions on what we can do with software are limited by our assumptions on how fast we can run it. Coming from the land of WYISYG (what-you-see-is-what-you-get) editors, it is actually very weird to realize that writing LaTex documents require you to explicitly compile them, because LaTex has not been designed with the goal to be &lt;em&gt;that&lt;&#x2F;em&gt; fast. I see the problem from the other direction in many cases. People see how slow something is, and they asssume that is the &lt;em&gt;normal&lt;&#x2F;em&gt; speed, that&#x27;s the way things were, are, and will be; but that doesn&#x27;t have to be the case, the underlying hardware we use are immensely powerful, to the degree that software engineers have been blessed with ignorance that they can just not care about performance, but those that care can create great things. Figma has broken the mold of what a web app can do, and it is today worth 70 billion dollars, although I&#x27;m sure for reasons far beyond what I understand, or could discuss. This type of thinking gives us a framework to think about software optimization that exceeds serving more users with less resources, it lets us think about how we can run a process more often, or how we can run more processes at the same time. It, on the other hand, gives us a simple way of cost reduction and preservation of resources. If you want to spend less money or compute, you can just do less, and you will compute less. For instance you can take your realtime system that updates 100 times per second and turn it into a system that updates every 2 minutes, you will be running 1&#x2F;200th of what you previously did. Although this type of thinking is very very simple, I find having to remind myself that user experience is not set in stone, and every part of your software is a trade-off between implementation time, execution time, and user experience. You can either spend more time to optimize, or more time to run, or you can just degrade the user experience by running less often or with less quality.&lt;&#x2F;p&gt;
&lt;p&gt;Before concluding, I will mention LLMs as they seem to consume so much of our daily discussions. I think of LLMs today a bit similar to LaTex in their usage. I think we have taken their current velocity as given, but they are &lt;em&gt;slow&lt;&#x2F;em&gt;. I think so many new avenues would explore if they were 10x, or perhaps a 100x more performant. You could instantly generate 5 different potential results to a user and allow them to choose, as if they are picking options from a dropdown in a form. You could feed much larger data, increase the amount o information both the system providess, and also consumes, creating a &lt;em&gt;real&lt;&#x2F;em&gt; assistant that can run seamlessly alongside your tasks instead of constantly breaking your flow, marketed by &amp;quot;let your agent run for 30 minutes while drinking your coffee&amp;quot; that is the common sentiment today. Faster internet has given us constant connectivity, streaming, real-time video calls, even real-time robotic control in medical operations, I imagine faster models will change the way technology is used in similar ways, and we are still at the beginning of what is possible.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps I was naive, thinking most software engineers were as clueless as I am on thinking about the ramifications of performance and how it can change the systems we build, but if not, I hope this essay has given you a new perspective on how to think about performance, and how it can be used as a constraint to design better software. The next time you are faced with a performance problem, I encourage you to think not just about how to make it faster, but also about what new possibilities a different time budget could open up for your software.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Verifiability is the Limit</title>
        <published>2025-03-09T00:00:00+00:00</published>
        <updated>2025-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/verifiability-is-the-limit/"/>
        <id>https://alperenkeles.com/posts/verifiability-is-the-limit/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/verifiability-is-the-limit/">&lt;p&gt;LLMs have created an enormous turmoil within the software engineering community within the past 5 years, much of it revolving around one central question, &lt;strong&gt;what is the future of our profession?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A set of competing paradigms with various degrees of human intervention and control has emerged, on the one side agents with little to no humans in the loop, recently popularized “vibe coding” that discourages manually modifying code and instead interacting with the codebase over LLMs, the chatbots implementing standalone modules or functionalities, sometimes even running code using code interpretation feature, and on the other side coding assistants that predict what the user would like to implement, acting as “autocompletes on steroids”.&lt;&#x2F;p&gt;
&lt;p&gt;There are many beliefs in terms of the limits, usefulness, and potentials of these models. Some believe the models will ascend into human level capabilities with unprecedented levels of time and resources and will be able to automate the construction of production grade software systems, while skeptics belittle the models, claiming their code will be mediocre and trivial, unable to scale up to any kind of production.&lt;&#x2F;p&gt;
&lt;p&gt;I am not here to argue about the limits or capabilities of the models themselves, there are much better experts out there with deep theoretical knowledge and practical experience than I do. I, however, will argue the following.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Every piece of software in the world has to be “correct” with respect to some notion of correctness. Before LLMs, our time was split between writing, reading and verifying code. With LLMs, we are able to offload code writing phase to LLMs, but the verification process cannot be offloaded, only pushed up to a different layer.&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Out there, you will see people arguing correctness is only a thing in a small set of domains, such as rockets or cryptography. Make no mistake, the degree to which correctness requires rigor changes, but the requirement for correctness does not. Software is &lt;em&gt;always&lt;&#x2F;em&gt; created with a purpose, whether it is to consume and transform some data, or provide some information to a user, or allow a user to interact and create some new data. Correctness is the notion that the created software conforms to the intent of the creator, and the creator &lt;em&gt;has to&lt;&#x2F;em&gt; verify such conformance.&lt;&#x2F;p&gt;
&lt;p&gt;In less critical applications and domains, correctness is a matter of &lt;strong&gt;trial&lt;&#x2F;strong&gt;. If I’m making a website to present some information regarding a party I’m throwing, I will check that the website shows all the relevant information I wanted it to. If the party&#x27;s just with some friends, that is probably fine to have. If the party is for work, I will try it on my phone in addition to my computer, perhaps even ask a few friends with different devices to check it out and make sure everything looks good.&lt;&#x2F;p&gt;
&lt;p&gt;Even in the example above, the importance of correctness is contextual. With changing domains and scale, the mechanisms we verify correctness also changes. When we are creating software as a business application, experts on “&lt;strong&gt;trying&lt;&#x2F;strong&gt;” (QAs) are hired to test many paths in the program to discover unexpected behavior, a.k.a. &lt;strong&gt;bugs&lt;&#x2F;strong&gt;. A typical company spends a great deal of time on &lt;strong&gt;testing&lt;&#x2F;strong&gt; their code in addition to trying it, where the rigor of testing changes with respect to the scale of the number of users, money at stake, criticality of the application domain at hand. A small SaaS company might only write some integration tests checking out some scenarios or implement unit tests for some of their components, whereas AWS will mathematically prove the correctness of the S3 implementation that serves petabytes of data every day.&lt;&#x2F;p&gt;
&lt;p&gt;So, basing our argument on the discussion so far, it should be possible for an LLM to generate a codebase that does not require rigorous correctness. Perhaps it even could generate tests, or perhaps even write proofs on the code it writes, right? Maybe LLMs could really remove humans from the process and work on their own as a set of agents working together; if not now, perhaps when they’re better. I’ve heard this argument multiple times during discussions. The problem is, we have not taken into account &lt;strong&gt;verifiability of the code&lt;&#x2F;strong&gt;. We have talked about rigor and scale, but rigor is not enough as a parameter on the LLM-ability of a domain, we need to talk about how the code LLM generates is verified, and that includes testing code too.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s take a step back and take UI programming (mostly connotated with frontend development) into consideration. Anecdotal evidence from many practitioners state that LLMs are able to generate entire frontend applications in one prompt, or even drawings on a napkin. We see specialized tools such as V0 that focuses solely on UI generation. Yet, they are not that successful, or at least popularized in other domains. A popular folk sentiment regarding this phenomenon is that LLMs are trained over public domain repositories, and UI programming makes up a great portion of such code. Yet, that does not explain why LLMs are not that popular in web server applications (mostly connotated with backend development), which are perhaps almost as prevalent as UI programming, and has even less diversity and more structure in its code.&lt;&#x2F;p&gt;
&lt;p&gt;Although there is some psychological explanations regarding this discrepancy between frontend and backend popularity, mainly that creating UIs that are shiny and impressive is easier than creating backends that could attract the same level of attention, hence anecdotal evidence regarding the popularity or usability of backend&#x2F;frontend comparison should not be given much credit, &lt;strong&gt;I hypothesize that UIs are much easier to verify than any other domain we write code for&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Verification of UI is almost literally “looking”. When we look at a web page, we almost instantly recognize how the generated code diverges from our intent and can provide instant feedback back to the LLM. Verification of a web server requires setting up a set of test inputs, sending them to the server, perhaps creating some ephemeral state, and checking that the outputs conform to our expectations. This is, in fact, so much easier to write tests for than trying, whereas writing UI tests is a 30 year old long pain point that has not yet been solved.&lt;&#x2F;p&gt;
&lt;p&gt;The rise of “vibe coding games” last week seems to stem from the same root. The generated games are nonetheless impressive, but their verification is possible via trial. Typically implemented over a single server with no persistent state, the games look over complex networking or performance problems by degrading user experience or removing features that cause those problems rather than solving the problems themselves. This is not to say this is not a valid choice, but the reason for this choice is not that those things do not matter, it is that they are harder to verify correctness for, require custom testing infrastructures or domain knowledge for verification.&lt;&#x2F;p&gt;
&lt;p&gt;Going back to the title, &lt;strong&gt;verifiability is the limit.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;It is the limit that tells us what we cannot implement via LLMs, and it cannot be solved with agentic approaches.&lt;&#x2F;strong&gt; A security agent might in theory add security checks to an application, but such a check is worthless without verifying it as the person who intends to produce the code. A testing agent might add tests to a program, but the tests themselves are meaningless until we check to see they correspond to our intent.&lt;&#x2F;p&gt;
&lt;p&gt;So far, I theorized about the LLMs and the way we produced software to make my point. &lt;strong&gt;Now, I shall preach about what I think we should do.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If verifiability is the limit, if it’s the bottleneck of using LLMs for programming, the natural question is &lt;strong&gt;how do we raise the limit, how do we make it easier to verify?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I believe the first step we need to take is to concede defeat on the infinitely powerful and scalable software agents ideology. If verifiability is really the limit, no amount of agents is going to solve the problem. The way I see it, we need better tools and interfaces for verification. For example, instead of the programmer reading the tests LLM generates, it could be possible to summarize the generated tests into a human readable format, while of course the summarization also poses a threat of information loss. We should rely much more on declarative random testing methods such as property-based testing, where the programmer defines a predicate that should hold over all possible inputs, and this predicate is tested by generating random inputs and passing them to the program. Such methods have been used to enhance the reliability of programs in many domains, but they haven’t caught up with the software engineering community. The advantage of such methods is that having one general predicate is much easier to inspect and understand than many unit tests, in addition to the added testing strength.&lt;&#x2F;p&gt;
&lt;p&gt;We need to increase the vocabulary we’re using when talking about correctness. We need to have a wider understanding of performance, security, accessibility, flexibility, and how to measure such qualities of programs so that we know what we are looking for in our applications, and we have mechanisms for verifying these qualities. In status quo, correctness is typically attributed as functional correctness, where it mostly means “input-outputs are as expected”, and most other expectations from an application is bundled under “non-functional properties” and the software engineering community has ignored to properly measure and verify them at large.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Let me sum up with a prediction.&lt;&#x2F;strong&gt; For a very long time, I have believed LLMs would not be good coders, even with further improvements. My views have shifted after their success in competitive programming, perhaps as a reformed competitive programmer, that was my Lee Sedol moment. &lt;strong&gt;I now, although tentatively, believe that LLMs can indeed succeed in all domains with perfect oracles&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It is important to understand that this does not mean LLMs will be gods producing 100x code, because virtually no domain that software engineering is useful has a perfect oracle. A perfect oracle is a type of feedback where you are given a “correct&#x2F;incorrect” answer every single time, and they almost only appear in games as real world typically doesn’t have perfect models of correctness. Winning or losing a game is a perfect oracle, as well as creating a program that can pass the judge in a competitive programming contest.&lt;&#x2F;p&gt;
&lt;p&gt;Even the most formalized aspect of programming, the theorem provers where users can prove their code correct, are not perfect oracles, as they cannot tell you if you are on a good path at an intermediate point in the proof, but only give you information if your proof is correct or if you are stuck. I hope that this imperfect oracle will be enough to win the game of proving, and that LLMs will be better than us in automated proofs. If such a day comes, our next job could be creating new theorems, asking LLMs to produce code and proofs, and scaling such systems into production grade codebases safely and securely.&lt;&#x2F;p&gt;
&lt;p&gt;Please let me know what you think of this at &lt;a href=&quot;mailto:akeles@umd.edu&quot;&gt;akeles@umd.edu&lt;&#x2F;a&gt;, and share with others if you found this interesting.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Tip Sistemleri Hakkında</title>
        <published>2024-12-01T00:00:00+00:00</published>
        <updated>2024-12-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/tip-sistemleri-hakkinda/"/>
        <id>https://alperenkeles.com/posts/tip-sistemleri-hakkinda/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/tip-sistemleri-hakkinda/">&lt;p&gt;Tip sistemleri(type systems), programlama aktivitesinin temelinde yer almalarına rağmen gözümüzün önünden kaçan, programlama dillerinin özellikleri arasında çoğu zaman düşünmediğimiz, en az konuştuklarımızdan birisi. Bu yazıyı tip sistemlerinin günlük programlama pratiklerimizi nasıl yönlendirdiğini merkeze alarak yazmaya çalışacağım.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tip-sistemi-nedir&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tip-sistemi-nedir&quot; aria-label=&quot;Anchor link for: tip-sistemi-nedir&quot;&gt;Tip Sistemi Nedir?&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Her programlama dili, bazen dikkatli bir matematiksel dizaynın sonucunda oluşturulmuş, bazen de yaratıcısının tercihlerini yansıtacak şekilde bir tip sistemi içerir. Tip sistemleri, programlama dilindeki işlemlerin geçerliliğine dair yargılarda bulunmamızı sağlar, geçersiz işlemler sonucunda bizlere hata mesajları verir. Tip sisteminin dizaynı yazdığımız programların ne kadar &lt;em&gt;jenerik&lt;&#x2F;em&gt; olabildiğini, kullandığımız kodun içerisinde yazmamız gereken &lt;em&gt;tip işaretçilerini&lt;&#x2F;em&gt;(type annotations), kullandığımız editörden aldığımız &lt;em&gt;tip ipuçlarını&lt;&#x2F;em&gt;(type hints) etkiler.&lt;&#x2F;p&gt;
&lt;p&gt;Küçük bir aritmetik dili ile yolumuza başlayalım. Dilin yapısının tanımlanmasına BNF(Backus-Naur Form) adı verilen, programlama dillerinin gramerlerini ifade etmek için kullanılan bir notasyondan faydalanacağız.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bnf&quot; class=&quot;language-bnf z-code&quot;&gt;&lt;code class=&quot;language-bnf&quot; data-lang=&quot;bnf&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;e ::= e + e | e - e | e &amp;amp;&amp;amp; e | e &amp;lt; e | e &amp;gt; e
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  | 1 | 2 | 3 …
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sırada, bu dildeki işlemlerin &lt;em&gt;anlamına&lt;&#x2F;em&gt;(semantics) karar vermek gerekiyor. Sırasıyla elimizdeki işlemler toplama(&lt;code&gt;+&lt;&#x2F;code&gt;), çıkarma(&lt;code&gt;-&lt;&#x2F;code&gt;), mantıksal ve(&lt;code&gt;&amp;amp;&amp;amp;&lt;&#x2F;code&gt;), küçüktür(&lt;code&gt;&amp;lt;&lt;&#x2F;code&gt;), ve büyüktür(&lt;code&gt;&amp;gt;&lt;&#x2F;code&gt;) işlemleri. Peki &lt;code&gt;(3 &amp;lt; 5) + 2&lt;&#x2F;code&gt; bize nasıl bir anlam ifade etmeli? Böyle bir işleme izin vermeli miyiz? Yoksa hata mı vermeliyiz? İzin verirsek nasıl bir sonuç vermeliyiz, hata verirsek nasıl bir hata vermeliyiz? Hadi gelin bu tarz bir işlemle karşılaştıklarında şu anki popüler programlama dillerinin neler yaptığını inceleyelim.&lt;br &#x2F;&gt;
Python, Javascript, C:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;3
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Typescript:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Operator &amp;#39;+&amp;#39; cannot be applied to types &amp;#39;boolean&amp;#39; and &amp;#39;number&amp;#39;.  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rust:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  error[E0369]: cannot add `{integer}` to `bool`   
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  --&amp;gt; error.rs:8:13  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  |  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;8 |     (3 &amp;lt; 5) + 2;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  |     ------- ^ - {integer}  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  |     |  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  |     bool  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Java:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;error.java:6: error: bad operand types for binary operator &amp;#39;+&amp;#39;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;((3 &amp;lt; 5) + 2);  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ^  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  first type:  boolean  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  second type: int  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Gördüğümüz üzere, Python, Javascript ve C &lt;code&gt;(3 &amp;lt; 5) + 2&lt;&#x2F;code&gt; programını gördüklerinde &lt;code&gt;3  &amp;lt; 5&lt;&#x2F;code&gt;’i toplama bağlamında 1 olarak yorumlayıp cevabı 3 bulurken,  Typescript, Rust ve Java toplamanın mantıksal bir ifade(boolean) ile bir sayı(number, integer ya da int) arasında geçerli olmadığına karar verip, buna dayanarak programımızı reddediyorlar. Diller arasındaki bu farklılıklar, tip sistemlerinden kaynaklanıyor. Yazdığımız programlardaki her bir ifadenin bir tipi var, tip sistemleri ise programın içerisinde yer alan farklı ifadeleri programlama dilimizdeki yapıları kullanarak bir araya getirme aşamasında bizim hatalarımızı keşfetmemize imkan sağlıyorlar.&lt;&#x2F;p&gt;
&lt;p&gt;Peki Python, Javascript ve C aynı tip sistemini mi kullanıyorlar, basit bir örnekle görebiliyoruz ki hayır. Dilimize sicimleri(string) eklediğimizde Python ve Javascript arasındaki farkı görebiliyoruz. Yeni işlemimiz &lt;code&gt;”alp” + 3&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Python:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Traceback (most recent call last):  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  File &amp;quot;&amp;lt;python-input-0&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    &amp;quot;alp&amp;quot; + 3  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ~~~~~~^~~  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;TypeError: can only concatenate str (not &amp;quot;int&amp;quot;) to str  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Javascript:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;quot;alp3&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada yaşanan farklılıkların sebebi otomatik tip çevirisi(implicit coercion) kurallarının dilden dile farklı olması. Popüler kültürde bunu bazen zayıf&#x2F;güçlü tipleme(weak&#x2F;strong typing) olarak duysak da, bu terimler dilleri kategorize etmek için yeterince kesin değil. Daha ziyade tip sisteminin içerisine yerleştirilmiş tip çeviri kuralları.&lt;br &#x2F;&gt;
O zaman, başta bahsettiğimiz &lt;code&gt;(3 &amp;lt; 5) + 2&lt;&#x2F;code&gt; işleminin reddedildiği bir tip sistemi tasarlayalım. Burada tip teorisi(type theory) notasyonunu kullanarak tip sistemini yazabiliriz. Notasyonu aşağıdan yukarıya okumak gerekiyor. Sayı sabitlerinin tipi ile başlayalım.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;----------------------(integer)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, 0,1,2… : integer
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kural, bize şunu söylüyor.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Γ(Gamma)&lt;&#x2F;code&gt;:  Şu anda programdaki diğer ifadelerin tiplerini tutan bir mapping.&lt;&#x2F;li&gt;
&lt;li&gt;(&lt;code&gt;0,1,2… : integer):&lt;&#x2F;code&gt; 0, 1, 2… sayı sabitlerinin tipinin tamsayı(integer) olduğunun ifadesi.&lt;&#x2F;li&gt;
&lt;li&gt;Uzun çizgi(&lt;code&gt;----&lt;&#x2F;code&gt;):  Altta verilen tip yargısının(typing judgement) geçerli olması için gerekli tip yargıları.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Bu örnekte çizginin üstünde bir gereksinim olmadığı için, programdaki herhangi bir sayı sabiti gördüğümüzde o sabitin tipinin &lt;code&gt;integer&lt;&#x2F;code&gt; olduğunu söyleyebiliyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer        Γ, e2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(+)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        Γ, e1 + e2 : integer  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;İkinci baktığımız kural ise bize şunu söylüyor, iki ifadenin toplamı, eğer toplamın sağ ve sol kollarının tipi tamsayı ise tamsayı olur. Bu kuralı programdaki herhangi bir toplama işleminin doğru tiplere sahip olduğunu kanıtlamak için kullanabiliriz. Bunun için de türetim ağacı(derivation tree) adını verdiğimiz kuralları üst üste koyarak büyük ifadelerin tiplerine karar verdiğimiz bir metot kullanıyoruz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1 : integer        2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;------------------------------  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      1 + 2 : integer              3 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------------------  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;              (1 + 2) + 3: integer  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kuralı aşağıdan yukarıya doğru okursak, &lt;code&gt;(1 + 2) + 3&lt;&#x2F;code&gt;ün tipinin tamsayı olması için, &lt;code&gt;1 + 2&lt;&#x2F;code&gt;nin tipinin tamsayı olması gerekir, onun için de 1 ve 2’nin tiplerinin tamsayı olması gerekir, diğer yanda da 3’ün tipinin tamsayı olması gerekir. Bir türetim ağacı yazdığımızda ağacın tüm yapraklarının(leaf) en başta bahsettiğimiz ek gereksinimi olmayan kurallardan birisi olması gerekir. Aşağıda, sırasıyla çıkarma(&lt;code&gt;-&lt;&#x2F;code&gt;), küçüktür(&lt;code&gt;&amp;lt;&lt;&#x2F;code&gt;), büyüktür(&lt;code&gt;&amp;gt;&lt;&#x2F;code&gt;) ve mantıksal ve(&lt;code&gt;&amp;amp;&amp;amp;&lt;&#x2F;code&gt;) kurallarını okuyabilirsiniz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer        Γ, e2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(-)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;         Γ, e1 - e2 : integer
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer        Γ, e2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(&amp;lt;)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;          Γ, e1 &amp;lt; e2 : bool
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer        Γ, e2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(&amp;gt;)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;          Γ, e1 &amp;gt; e2 : bool
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : bool           Γ, e2 : bool  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(&amp;amp;&amp;amp;)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;          Γ, e1 &amp;amp;&amp;amp; e2 : bool  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Eğer ki yazılan  bir program için bir türetim ağacı üretemiyorsak, o halde o programa biz hatalı-tipli(ill-typed) deriz. Misal, yukarıdaki tip sisteminde &lt;code&gt;(3 &amp;lt; 5) + 2&lt;&#x2F;code&gt; programı için bir türetim ağacı yok, çünkü &lt;code&gt;(e1: bool + e2: integer)&lt;&#x2F;code&gt; için kullanabileceğimiz herhangi bir kural yok, dolayısıyla türetim esnasında sıkışıyoruz(stuck).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;3 : integer     5: integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--------------------------  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      (3 &amp;lt; 5): bool        2: integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;-----------------------------------------  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            (3 &amp;lt; 5) + 2 : ??  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dolayısıyla eğer ki bu ifadenin makul-tipli(well-typed) olmasını istiyorsak tip sistemine bu ifadenin tipini belirleyecek yeni kurallar eklememiz gerekiyor. Bunu yapmanın birden fazla yolu var, ilki de şu.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : bool  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;-----------------(b-&amp;gt;i)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kural sayesinde, &lt;code&gt;(3&amp;lt;5): bool&lt;&#x2F;code&gt; tiplemesini &lt;code&gt;(3&amp;lt;5): integer&lt;&#x2F;code&gt; tiplemesine çevirebiliyoruz. Diğer ihtimalde ise herhangi bir bool tipinde değeri integer’a çevirmek yerine, bu çeviriyi yalnızca toplama işlemi esnasında yapabiliriz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : bool           Γ, e2 : integer  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(b+i)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        Γ, e1 + e2 : integer  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ancak bu durumda tek bir kural bizim için yeterli değil. Çünkü bu kural &lt;code&gt;(3&amp;lt;5)+2&lt;&#x2F;code&gt; için yeterliyken, &lt;code&gt;2+(3&amp;lt;5)&lt;&#x2F;code&gt; için değil. Dolayısıyla kuralın ters versiyonuna ihtiyacımız da var.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : integer            Γ, e2 : bool  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------(i+b)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        Γ, e1 + e2 : integer  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada bu kuralların hepsinin sözdizimsel(syntactic) olduğu gerçeğini net bir şekilde görebiliyoruz. Bizler kendi kafamızda &lt;code&gt;a+b&lt;&#x2F;code&gt; ile &lt;code&gt;b+a&lt;&#x2F;code&gt;yı birbiri ile ilişkilendirsek de, üzerinde çalıştığımız sisteme bu tarz kuralların hepsini tek tek kodlamamız gerekiyor. Hem &lt;code&gt;i+b&lt;&#x2F;code&gt; hem de &lt;code&gt;b+i&lt;&#x2F;code&gt; şeklinde 2 kural yazmak yerine, ikinci kuralı daha genel bir kural olan toplamın değişebilirliği (commutativity) olarak da yazabilirdik.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e2 + e1 : T  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------(commutative)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 + e2 : T  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Fark ettiyseniz, ilk kez &lt;code&gt;e1, e2&lt;&#x2F;code&gt; gibi ifade değişkenlerinin(expression variable) yanı sıra bir tip değişkeni(type variable) olan &lt;code&gt;T&lt;&#x2F;code&gt;’yi kullandık.  Elimizdeki toplama, karşılaştırma ve mantıksal ifadelerin üzerine programlama dillerinde kullandığımız &lt;code&gt;if-else&lt;&#x2F;code&gt; ya da fonksiyon uygulaması(function application) gibi yapılar işin içerisinde girdiğinde bu tarz tip değişkenleri tip sisteminin çok daha içerisinde oluyor. Mesela, aşağıda dile &lt;code&gt;if-else&lt;&#x2F;code&gt; ifadesi(expression) eklediğimizde kullanacağımız kuralı inceleyelim.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : bool        Γ, e2 : T           Γ, e3 : T  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;---------------------------------------------------(if-else)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;          Γ, if e1 then e2 else e3 : T  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kuralı okursak, &lt;code&gt;if-else&lt;&#x2F;code&gt; ifadesinin makul-tipli olması için &lt;code&gt;e1&lt;&#x2F;code&gt; ifadesinin bir boolean olması, &lt;code&gt;e2&lt;&#x2F;code&gt; ve &lt;code&gt;e3&lt;&#x2F;code&gt; ifadelerinin de aynı &lt;code&gt;T&lt;&#x2F;code&gt; tipine sahip olması gerek.&lt;br &#x2F;&gt;
Bir diğer genel kural ise fonksiyon çağrısı(function call).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : T1     
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e2 : T2 …  Γ, en : Tn
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, fn : (T1, T2…Tn) -&amp;gt; T    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--------------------------------------------------------(fn-call)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, fn(e1, e2…en) : T  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu kuralı okumak için de, &lt;code&gt;(T1,T2, … Tn)&lt;&#x2F;code&gt; tiplerinde girdileri kullanarak &lt;code&gt;T&lt;&#x2F;code&gt; tipinde bir çıktı üreten bir fonksiyonu çağırmak için, fonksiyona sağladığımız girdilerin sırasıyla &lt;code&gt;T1, T2…Tn&lt;&#x2F;code&gt; tiplerine sahip olması gerek.&lt;&#x2F;p&gt;
&lt;p&gt;Bu kurallar ile birlikte, bir tip sistemi nasıl yazılır hakkında kısa bir giriş yapmış olduk. Şimdi, tip sistemlerinin nasıl kullanıldığını tartışalım.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;statik-ve-dinamik-tip-sistemleri&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#statik-ve-dinamik-tip-sistemleri&quot; aria-label=&quot;Anchor link for: statik-ve-dinamik-tip-sistemleri&quot;&gt;Statik ve Dinamik Tip Sistemleri&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Tip sistemleri ile ilgili ilk tartışma statik ya da dinamik olmaları. Bu yazıda bu tartışmayı mümkün olduğunca ileri atmak istedim, çünkü statiklik ve dinamiklik bir programın bir tip sistemince makul-tipli kabul edilip edilmemesine katkıda bulunsa da, tip sisteminin kendi dizaynı çok daha etkili.&lt;&#x2F;p&gt;
&lt;p&gt;Sistemin statik veya dinamik olması bir programın kabul edilip edilmemesinden ziyade, hangi noktada reddedileceğini etkiliyor. Statik tip sistemi
implementasyonları programın derleme zamanında(compile time) tip bilgisini kullanarak programın tipini kontrol ederken, dinamik tip sistemleri programın çalışma zamanında(run time) tip bilgisini kullanarak programın tipini kontrol ediyor. Tabii ki bu farklılık, tip sisteminin kendi dizaynını da yeri geldiğinde etkileyebiliyor, çünkü statik bir sistemde tip bilgilerini taşıyıp programın herhangi bir girdi için makul tipli olduğunu kanıtlamak gerekirken, dinamik bir sistemde programın çalışması esnasında sahip olduğumuz tip bilgilerinden yararlanabiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Statik ve dinamik sistemler arasındaki en büyük fark &lt;code&gt;if-then-else&lt;&#x2F;code&gt; gibi şartlı(conditional) ifadelerde ortaya çıkıyor. Yukarıda örnek verdiğim tip sisteminde &lt;code&gt;if-else&lt;&#x2F;code&gt; ifadesi için yazdığımız kuralda hatırlıyorsanız &lt;code&gt;then&lt;&#x2F;code&gt; ve &lt;code&gt;else&lt;&#x2F;code&gt; kollarının tipleri aynı olmalıydı. Bu kural, statik tip sistemlerinde sıkça gördüğümüz bir kural, çünkü statik bir tip sistemi programa hangi kol ile devam edileceğini bilmediği için programın devamında
iki kolun da tip bilgisini taşımak zorunda. Buna bir alternatif birlik tipleri(union types) kullanmak, örneğini Typescript&#x27;te görebiliriz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;typescript&quot; class=&quot;language-typescript z-code&quot;&gt;&lt;code class=&quot;language-typescript&quot; data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;string&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-support z-constant z-math z-ts&quot;&gt;Math&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-math z-ts&quot;&gt;random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-relational z-ts&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;span class=&quot;z-meta z-delimiter z-decimal z-period z-ts&quot;&gt;.&lt;&#x2F;span&gt;5&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;?&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;alperen&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Yukarıdaki kod içerisinde kullandığımız üçlü-şart-ifadesi(ternary if-expression) içerisinde &lt;code&gt;then&lt;&#x2F;code&gt; ve &lt;code&gt;else&lt;&#x2F;code&gt; kolları farklı tipler dönüyor, dolayısıyla
bizim sonuçta elde ettiğimiz tip &lt;code&gt;string | number&lt;&#x2F;code&gt; (string &lt;strong&gt;veya&lt;&#x2F;strong&gt; number) oluyor. Bu kuralı şu şekilde yazabiliriz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Γ, e1 : bool     Γ, e2 : T1       Γ, e3 : T2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--------------------------------------------(if-else-union)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    Γ, if e1 then e2 else e3 : T1 | T2  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu iki kuralı dinamik tipli bir tip sisteminde yazmamıza gerek bile yok, ileriye doğru taşımamız gereken tip bilgisini programın çalışma zamanında elde edebiliyoruz. Bu durumda, programın sonucunu hesaplarken(evaluation) hangi kolun seçildiğine göre ileriye doğru ileteceğimiz tip bilgisini değiştirebiliriz.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;txt&quot; class=&quot;language-txt z-code&quot;&gt;&lt;code class=&quot;language-txt&quot; data-lang=&quot;txt&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    Γ, e2 : T
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--------------------------------------------(if-true)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    Γ, if True then e2 else e3 : T
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    Γ, e3 : T
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--------------------------------------------(if-false)  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    Γ, if False then e2 else e3 : T
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aşağıda, girdi &lt;code&gt;alperen&lt;&#x2F;code&gt; olmadığı sürece tip hatası verecek bir Python programını görebilirsiniz. Aynı programı statik bir tip sisteminde yazdığımızda
tip kontrolcüsü derleme zamanında hata verecektir, çünkü &lt;code&gt;a&lt;&#x2F;code&gt; değişkenininin &lt;code&gt;alperen&lt;&#x2F;code&gt; olmadığı koşulunda &lt;code&gt;a&lt;&#x2F;code&gt; değişkenine makul bir tip atamak mümkün değil.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;input&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; “&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;alperen&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;”&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;3&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;5&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-conditional z-else z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-else z-python&quot;&gt;else&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-else z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-flow z-return z-python&quot;&gt;return&lt;&#x2F;span&gt; “&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;” &lt;span class=&quot;z-keyword z-operator z-arithmetic z-python&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;3&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dinamik tip sistemlerinin bir diğer farkı da tip denetimi(type inspection). Statik tip sistemlerinin sağladığı en büyük artılardan birisi programdaki tipler derleme esnasında belirli olduğu için derleme zamanında(compile time) tip bilgisinin kullanılması, ancak programın çalışması zamanında(run time) tip bilgisinin silinmiş olması. Bu sayede dinamik tip sistemlerinde ortaya çıkan tip bilgisinden kaynaklı performans kaybından kaçabiliyoruz. Diğer yanda, çalışma zamanında tip bilgisine erişimimizin olması da dinamik tip sistemlerinde heterojen listeler (heterogeneous lists) gibi veri yapılarını yazıp kullanabilmemize imkan sağlıyor. Teoride statik bir tip sisteminde de heterojen listeler oluşturabilsek de, bu listenin elemanları üzerinde herhangi bir işlem yapabiliyor olmamız mümkün değil. Yine bir Python programıyla örnekleyelim.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; class=&quot;language-python z-code&quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;l&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-python&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-sequence z-list z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-sequence z-begin z-python&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-python&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-python&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-python&quot;&gt;True&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-python&quot;&gt;,&lt;&#x2F;span&gt; “&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;alperen&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;”&lt;span class=&quot;z-punctuation z-section z-sequence z-end z-python&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-python&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;elem&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-for z-in z-python&quot;&gt;in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;l&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-statement z-loop z-for z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-loop z-for z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-meta z-statement z-conditional z-if z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-python&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;type&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;elem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;int&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-if z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;print&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;“&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;bir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;tamsayı&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;”&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-meta z-statement z-conditional z-elseif z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-elseif z-python&quot;&gt;elif&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;type&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;elem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-python&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-support z-type z-python&quot;&gt;bool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-elseif z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;print&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;“&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;mantıksal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;bir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;değer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;”&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;  &lt;span class=&quot;z-meta z-statement z-conditional z-else z-python&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-else z-python&quot;&gt;else&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-conditional z-else z-python&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-python&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-variable z-function z-python&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt;print&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-arguments z-begin z-python&quot;&gt;(&lt;&#x2F;span&gt;“&lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;Element&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;tipini&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-qualified-name z-python&quot;&gt;&lt;span class=&quot;z-meta z-generic-name z-python&quot;&gt;bilmiyoruz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;”&lt;span class=&quot;z-punctuation z-section z-arguments z-end z-python&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;del&gt;Aynı programı, Rust gibi bir programlama dilinde yazmamız mümkün değil, çünkü Rust listenin tipinin heterojen olmasına izin vermiyor.&lt;&#x2F;del&gt; E peki statik tipli bir programlama dili implementasyonunda farklı tipten değerleri içeren bir liste oluşturamaz mıyız? Bu sorunun cevabını vermek için gelin çok-tiplilikten(polymorphism) bahsedelim.&lt;&#x2F;p&gt;
&lt;style&gt;
    .note {
        padding: 8px;
        background-color: #ffffff;
        border: 1px solid #ddd;
        border-radius: 4px;
    }

    .note-title {
        font-weight: bold;
        color: #AB4459;
    }
&lt;&#x2F;style&gt;
&lt;div class=&quot;note&quot;&gt;
    &lt;div class=&quot;note-title&quot;&gt;Düzeltme&lt;&#x2F;div&gt;
    &lt;p&gt;
        Statik programlama dillerinde heterojen listeler üretilemeyeceğine dair yorumum hatalı. Rust programlama dilinde &amp;lt;code&amp;gt;std::any::Any&amp;lt;&amp;#x2F;code&amp;gt; tipini kullanarak
heterojen listeler oluşturabiliyor, bu listelerdeki elemanların tiplerine dair çalışma zamanında bilgi edinebiliyor, karar alabiliyoruz. Buna
&amp;lt;strong&amp;gt;Yansıma&amp;lt;&amp;#x2F;strong&amp;gt;(Reflection) deniyor, benzer konseptleri Çalışma Zamanı Tip Bilgisi(Runtime Type Information, RTTI) olarak da duyabiliyoruz başka dillerde.
    &lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;&lt;h2 id=&quot;jenerik-cok-tipli-programlar&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jenerik-cok-tipli-programlar&quot; aria-label=&quot;Anchor link for: jenerik-cok-tipli-programlar&quot;&gt;Jenerik, Çok Tipli Programlar&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Bahsettiğim gibi, statik tipli dillerde heterojen veri yapıları oluşturup elemanların tiplerine göre çalışma zamanında karar almak çok mümkün değil. Ancak programlamada jenerik veri yapıları çok önemli, liste(List), yığın(Stack), kuyruk(Queue), ağaç(Tree) gibi sandık(container) veri yapılarını jeneriklikleri sayesinde farklı farklı tipler için kullanabiliyoruz. Bu tarz veri yapılarına çok-tipli veri yapıları diyoruz, ve &lt;code&gt;List&amp;lt;T&amp;gt;, Stack&amp;lt;T&amp;gt;, Queue&amp;lt;T&amp;gt;, Tree&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; şeklinde &lt;code&gt;T&lt;&#x2F;code&gt; tipi ile parametrik olarak yazıyoruz. Burada &lt;code&gt;T&lt;&#x2F;code&gt; tipi ile ilgili hiçbir şey bilmediğimiz için, bu veri yapıları üzerinde yazdığımız fonksiyonlarda dolayısıyla alttaki tipe dair herhangi bir varsayım yapamıyoruz, yalnızca veri yapısının üzerinde herhangi bir &lt;code&gt;T&lt;&#x2F;code&gt; tipi ile çalışacak fonksiyonlar yazabiliyoruz. Buna literatürde Parametrik Çok Tiplilik(Parametric Polymorphism) diyoruz. Parametrik Çok Tipli programlar aldıkları tip parametresinin tip sınırlamalarına(type bound) bağlı olarak tip kontrolünden geçerler.&lt;&#x2F;p&gt;
&lt;p&gt;Yukarıda bahsettiğim &lt;code&gt;List&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; gibi bir programda &lt;code&gt;T&lt;&#x2F;code&gt; üzerinde herhangi bir sınırlandırma olmadığı için, listenin elemanlarıyla hiçbir işlem yapamayız. Bu da demek oluyor ki, biz bu liste için bir ekrana basma(printing) fonksiyonu yazamayız, çünkü listenin elemanları için bir &lt;code&gt;print&lt;&#x2F;code&gt; fonksiyonumuz yok. E peki bu veri yapıları üzerine bu tarz içerdeki elemanları kullanan bir fonksiyon yazmak istersek nasıl yazıyoruz?&lt;&#x2F;p&gt;
&lt;p&gt;Rust programlama dili bunu &lt;code&gt;Trait&lt;&#x2F;code&gt; sistemi ile çözüyor. Fonksiyonlar, tip olarak yalnızca katı tipler(concrete types) almıyor, bunun yanında tip sınırlandırmaları da alabiliyorlar.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;print_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-rust&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;T&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; Display&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;t&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-generic z-rust&quot;&gt;List&lt;span class=&quot;z-punctuation z-definition z-generic z-begin z-rust&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;T&lt;span class=&quot;z-punctuation z-definition z-generic z-end z-rust&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Örnek verdiğim fonksiyon &lt;code&gt;T&lt;&#x2F;code&gt; tipini &lt;code&gt;Display&lt;&#x2F;code&gt; trait’ine sahip bir tip olarak sınırlandırıyor. &lt;code&gt;Display&lt;&#x2F;code&gt; sınırlandırmasına sahip olan tipler Rust’ın jenerik &lt;code&gt;print&lt;&#x2F;code&gt; fonksiyonuna erişim sahibi olduğu için, biz bu tipler üzerine bir liste için de &lt;code&gt;print&lt;&#x2F;code&gt; fonksiyonu yazabiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Parametrik Çok Tiplilik çok-tipli programlar yazmanın tek yolu değil. Ayrık Çok Tiplilik(ad hoc polymorphism) ya da Alt-Tipleme(Subtyping) kullanarak da çok-tipli programlar yazabiliyoruz.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ayrik-cok-tiplilik&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ayrik-cok-tiplilik&quot; aria-label=&quot;Anchor link for: ayrik-cok-tiplilik&quot;&gt;Ayrık Çok Tiplilik&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Ayrık Çok Tiplilik için, kullandığımız programlama dilinin aynı fonksiyonu farklı tipler için tekrar tekrar yazmamıza izin vermesi yeterli oluyor. Aşağıda, aynı fonksiyonun &lt;code&gt;(to_string)&lt;&#x2F;code&gt; iki farklı tip (bool, int) için 2 farklı kez yazılabildiğini görüyoruz. Programda bir noktada &lt;code&gt;print&lt;&#x2F;code&gt; fonksiyonu çağrıldığında derleyici fonksiyonun girdisinin tipine göre doğru &lt;code&gt;print&lt;&#x2F;code&gt; fonksiyonunu seçip, onu kullanıyor.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;b&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;bool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; String  
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;fn to_string&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;i: int&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; String  
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ayrık Çok Tiplilik kullanıldığında ortada bir parametrizasyon yok, ancak yine de aynı fonksiyonu farklı tipler için kullanabiliyoruz. C++ tip sistemi
bu tarz çok-tiplilik için çok uygun bir örnek. Parametrik çok-tiplilik tip sisteminin içine gömülmüş değil, yani C++ tip kontrolcüsünün bir fonksiyonu
parametrik çok-tipli olarak tipleme şansı yok. Ancak C++ dilinde de &lt;code&gt;List&amp;lt;T&amp;gt;&lt;&#x2F;code&gt; gibi veri yapıları görebiliyoruz, bunlar üzerine fonksiyonlar yazabiliyoruz.
Bunu yapabilmemizin sebebi ise C++ tipinin bir şablon sistemi(templates) ile ayrık çok-tipliliği birleştirerek parametrik çok-tiplilik ilüzyonu yaratması.&lt;&#x2F;p&gt;
&lt;p&gt;Yukarıda verdiğim Rust örneğinde de, aynı örneğin C++ versiyonunda da derleme sonrasında çalıştırdığımız kod aslında monomorfik, yani tek-tipli. Ancak
derleme esnasında, Rust fonksiyonu çok-tipli olarak tip kontrolcüsüne verip, ortaya çıkabilecek tip hatalarını tek-tipleştirme(monomorphization) işlemi öncesinde keşfederken, C++ önce şablon doldurma(template instantiation) ile tek-tipli bir fonksiyon üretiyor, ve bu fonksiyonu derlerken tip hatalarını keşfediyor. Bu sebepten dolayı C++ şablon sistemi ile yazılan programlarda ortaya çıkan hatalar daha kriptik olabiliyor.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;alt-tipleme&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#alt-tipleme&quot; aria-label=&quot;Anchor link for: alt-tipleme&quot;&gt;Alt-Tipleme&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Nesne Yönelimli Programlama(Object Oriented Programming) bize çok-tipli programlar yazmak için farklı bir mekanizma sağlıyor, bunun adı da alt-tipleme(subtyping). Alt tipleme esasında bir tipin diğerinin özelliklerini miras alabilmesi(inheritance) üzerinden kurgulanıyor. Örnek vermek gerekirse, Java dilindeki tüm sınıflar &lt;code&gt;Object&lt;&#x2F;code&gt; üst sınıfının(superclass) çocukları, ya da torunları, daha da teknik tabiriyle alt sınıfları(subclass). Bir alt-tip, üst-tipinin tüm fonksiyonlarına ve özelliklerine sahip bir tiptir. Dolayısıyla Java’da heterojen bir liste yazmak istesek, &lt;code&gt;List&amp;lt;object&amp;gt;&lt;&#x2F;code&gt; tipinde bir liste oluşturmamız yeter, çünkü &lt;code&gt;List&amp;lt;object&amp;gt;&lt;&#x2F;code&gt; tipinde bir liste &lt;code&gt;object&lt;&#x2F;code&gt; tipinin tüm alt-sınıflarını içerebilir, ve Java’daki tüm tipler &lt;code&gt;object&lt;&#x2F;code&gt; tipinin bir alt sınıfıdır.&lt;br &#x2F;&gt;
Alt-tiplemenin ortaya çıktığı tek nokta nesne yönelimli programlama değil, yapısal tipler(structural types) da alt tipleme ile ilgili konuşurken karşımıza sık çıkan başka bir konsept.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yapisal-ve-isimsel-tipler&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#yapisal-ve-isimsel-tipler&quot; aria-label=&quot;Anchor link for: yapisal-ve-isimsel-tipler&quot;&gt;Yapısal ve İsimsel Tipler&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yapısal tipler(structural types) ve isimsel tipler(nominal types) kullandığımız dillerde yine sıkça ortaya çıkan, ancak tip sisteminin arkasında saklandığı için çok konuşmadığımız bir ikilem. Bazı tip sistemleri yapısal ve isimsel tipler arasında bir seçim yapsa da, pek çok dilde ikisini de gözlemleyebiliyoruz. İsimsel tipler, adından da anlaşılacağı üzere, bir tipin isimlendirilmesinden ortaya çıkıyor. Ben bir X tipi oluşturduğumda, o tipte bir değer ancak ve ancak başka bir X tipinde değer ile karşılaştırılabilir, ya da yer değiştirebilir. Yapısal tipler sayesinde kullandığımız tipler artık anonim hale gelebiliyor. Typescript’te bir objeye &lt;code&gt;{x: number, y: number}&lt;&#x2F;code&gt; tipini verdiğimizde bu tipe bir isim vermek zorunda değiliz, tip sistemi her objenin yapısını(şeklini) tutuyor, ve objeleri bu yapılar ile tanımlıyor. Dolayısıyla tip sisteminin gözüne aşağıda tanımladığımız &lt;code&gt;Point&lt;&#x2F;code&gt; ve &lt;code&gt;Vector&lt;&#x2F;code&gt; tipleri farklı tipler değil, dolayısıyla yer değiştirebilirler.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;typescript&quot; class=&quot;language-typescript z-code&quot;&gt;&lt;code class=&quot;language-typescript&quot; data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Point&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-type z-ts&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-alias z-ts&quot;&gt;Vector&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-object z-type z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-field z-declaration z-ts&quot;&gt; &lt;span class=&quot;z-meta z-definition z-property z-ts&quot;&gt;&lt;span class=&quot;z-variable z-object z-property z-ts&quot;&gt;y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;  
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Eğer ki bu program isimsel bir tip sistemi kullanarak yazılıyorsa, ki bunun için Java, Rust, C++, Python gibi pek çok dilde örnekler verebiliriz, bu iki tip farklı tiplerdir, ve birbirleri ile yer değiştiremezler.&lt;&#x2F;p&gt;
&lt;p&gt;Yapısal tiplerde alt-tipleme nesne yönelimli programlamadaki gibi kasıtlı bir miras yapısından ziyade, tip yapısının kendisinden ortaya çıkar. Örnek vermek gerekirse, &lt;code&gt;{x: number, y: number}&lt;&#x2F;code&gt; yapısal tipi &lt;code&gt;{x: number}&lt;&#x2F;code&gt; yapısal tipinin bir alt-tipidir, çünkü programda &lt;code&gt;{x: number}&lt;&#x2F;code&gt; tipinde bir obje bekleyen herhangi bir noktada onun yerine &lt;code&gt;{x: number, y: number}&lt;&#x2F;code&gt; tipinde bir obje kullanılabilir.&lt;&#x2F;p&gt;
&lt;p&gt;Peki, tip sistemleri tipleri programda nasıl takip ediyor? Neden bazı programlama dillerinde tanımlama esnasında her değişkenin tipini yazmak zorundayken diğerlerinde &lt;code&gt;let&lt;&#x2F;code&gt; ya da &lt;code&gt;var&lt;&#x2F;code&gt; yazıp geçebiliyoruz, ve neden bazen bu dillerde de bunu başaramıyoruz, Swift programlama dilinde neden 20 satırlık bir kodu derlemek bazen 45 saniye sürebiliyor? Bunları anlamak için biraz da tip kontrolü(typechecking) ve tip çıkarımı(type inference) kavramlarını tartışalım.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tip-kontrolu-ve-tip-cikarimi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tip-kontrolu-ve-tip-cikarimi&quot; aria-label=&quot;Anchor link for: tip-kontrolu-ve-tip-cikarimi&quot;&gt;Tip Kontrolü ve Tip Çıkarımı&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazının en başında, Tip Sistemlerinin ne olduğu hakkında konuşurken tip kontrolü(typechecking) hakkında biraz bilgi vermiştik aslında. Tip kontrolü, verilen programın makul-tipli(well-typed) ya da hatalı-tipli(ill-typed) olup olmadığına karar veren prosedür. Tip kontrolü algoritmalarının amacı programdaki ifadelerin tiplerinin tip sistemi üzerinde tamamlanabilecek bir türetim ağacı ürettiğini kanıtlamak. Yazının başındaki gibi basit tip sistemleri ile çalışırken tipleme kurallarını(typing rules) tersine çevirerek mekanik bir şekilde bir tip kontrolü algoritması üretebiliyoruz.&lt;&#x2F;p&gt;
&lt;p&gt;Ancak modern programlama dillerinde tip sistemleri yalnızca basit seviyede tip kontrolü için kullanılmıyor. Programlama dilleri tip sistemlerinde program hakkında daha detaylı bilgiler toplayıp, bu bilgileri programı optimize etmek için, ya da program üzerinde kısıtlar oluşturmak için kullanabiliyorlar. Misal, Rust programlama dili tip sisteminde programdaki değerlerin sahiplik(ownership) ilişkilerini takip ederek program hafızasını takip eden ek bir çöp toplayıcı(garbage collector) olmadan derleme zamanında hafıza güvenliği(compile-time memory safety) sağlayabiliyor. Rust’ın bu kabiliyeti bu zamana kadar C ve C++’ın neredeyse tamamen sahip olduğu yüksek performanslı programlar alanında ciddi bir kabul görmesini sağladı. Tip sisteminde takip edilen bilgi miktarı arttıkça, tip çıkarımı ihtiyacı büyüyor. Çünkü normal şartlarda bir C programı yazarken programda tanımlanan her değişkenin tipini yazmak basit. Ancak bir Rust programı yazarken programdaki tüm değişken ömrü işaretçilerini(lifetime annotations) elle yazmak mümkün değil, eğer Rust böyle bir efor gerektirseydi, kimse kullanmazdı.&lt;&#x2F;p&gt;
&lt;p&gt;Yalnızca Rust’ın değişken ömrü işaretçileri gibi ileri seviye tip sistemlerinde değil, günlük programlama aktivitelerinde de tip çıkarımı önemli bir rol oynuyor. Programdaki her bir değişken için elle tip işaretçisi yazmak hiçbir programcının çok hoşuna giden bir durum değil. Buna çözüm olarak literatürde pek çok tip çıkarım algoritması var, en ünlüsü de &lt;code&gt;Hindley-Milner(HM) Type System&lt;&#x2F;code&gt; ile birlikte ortaya çıkan tip çıkarım algoritması.  Rust, OCaml, Haskell gibi diller HM tip sistemini küçük varyasyonlar ile kullanıyorlar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ileri-seviye-tip-sistemleri&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ileri-seviye-tip-sistemleri&quot; aria-label=&quot;Anchor link for: ileri-seviye-tip-sistemleri&quot;&gt;İleri Seviye Tip Sistemleri&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Yazıyı, ileri seviye tip sistemlerinden biraz daha bahsederek bitireyim. Bir önceki kısımda Rust’tan bahsettik, Rust tarzı tip sistemlerine kaynak-odaklı tip sistemleri(resource-oriented type systems) deniyor. Bu tarz tip sistemleri programdaki objelerin sahiplik ilişkilerini takip ederek objelerin yanlış kullanımlarını engelliyorlar. Diğer yanda akışkan tipler(liquid types) kullanan sistemler tip üzerinde daha detaylı sınırlamalar oluşturabiliyor. Mesela bir akışkan tip sisteminde &lt;code&gt;{n | n % 2 == 0}&lt;&#x2F;code&gt; şeklinde ifade edilen yalnızca çift sayıları içeren bir tipe sahip olabiliyoruz. Liquid Haskell, Flux(Rust) gibi tip sistemleri bu dillerin klasik sistemlerini akışkan hale getirmeye çalışıyor. Diğer yanda bağımlı tipler(Dependent Types) programlama dilleri ve mantık arasındaki bariyerleri indirip, programların aynı zamanda kanıtlama asistanları(proof assistants) olarak kullanılmasına da izin veriyor. Coq, Agda, Lean gibi kanıt asistanları sayesinde doğruluğunu kanıtlayabildiğimiz programlar ve algoritmalar geliştirebiliyoruz. Bunun haricinde bilgi takip kontrolü(IFC-Information Flow Control) bazlı tip sistemleri programlardaki gizli verilerin açığa sızmayacağını kanıtlayabiliyor, aynı zamanda son yıllarda çıkan bazı tip sistemleri programların belirli bir zaman ya da uzay kompleksitesini aşmayacağını kanıtlamak üzerine çalışıyor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kapanis&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kapanis&quot; aria-label=&quot;Anchor link for: kapanis&quot;&gt;Kapanış&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Başta bahsettiğim gibi, tip sistemleri kullandığımız dillerdeki programlama aktivitelerimizi ciddi miktarda etkiliyor. Hatalı-tipli programlarda aldığımız hata mesajlarından, kendi programlarımızdaki hata durumlarını halletme metotlarımıza(error handling), eşzamanlı programlamaya(concurrent programming) programlama dilleri ile etkileştiğimiz pek çok yüzey dilin tip sisteminden geçiyor. Swift dilinin tip kontrolcüsünün çok-tipli programlardaki tip kontrolü algoritması üssel geri-çekilme(exponential backtracking) uyguladığı için kontrolcü ile uyuşmayan kısa programlar inanılmaz uzun sürede hata verebiliyor, hatta sırf bunun için Swift dilinde hızlı derlenen programlar yazma üzerine teknikler öğretiyor insanlar birbirlerine.&lt;&#x2F;p&gt;
&lt;p&gt;Durum buyken, tip sistemlerinin bu kadar opak ve arka planda kalması, yazdığımız programlarda ortaya çıkan tip hatalarının nasıl ortaya çıktığını çoğu zaman bilmiyor ya da anlamıyor olmamız benim içimde hep üzücü bir gerçek olarak kaldı. Bu sebepten bu yazıyı Türkçe’de yazmak, Türkçe programlama literatürüne yeni bir alan aktarmak istedim. Eğer buraya kadar okuduysanız çok teşekkür ederim.&lt;&#x2F;p&gt;
&lt;p&gt;Sevgiler,&lt;br &#x2F;&gt;
Alperen Keleş&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Printf Debuggers for Free</title>
        <published>2024-11-23T00:00:00+00:00</published>
        <updated>2024-11-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/debuggers-for-free/"/>
        <id>https://alperenkeles.com/posts/debuggers-for-free/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/debuggers-for-free/">&lt;p&gt;Software engineering has many ancient debates. OOP vs FP, dynamic types vs static types,
printf debugging vs visual debuggers... I personally always found the last one very intriguing,
because it feels like we shouldn&#x27;t have to choose at all. Why isn&#x27;t there a best-of-both-worlds
solution that allows us to get the level of convenience and integration printf does, with
the level of inspectability we get from the visual debuggers?&lt;&#x2F;p&gt;
&lt;p&gt;The answer is probably around (1) it exists, but people don&#x27;t use it, (2) language tooling is
hard, so we don&#x27;t have a good version of it yet, and (3) we haven&#x27;t figured out the exact
user experience for it yet. Well, this article introduces one such approach, which I call
&lt;code&gt;trace debugging&lt;&#x2F;code&gt;, that allows for constructing custom stack traces of only the functions the user
cares about, and a post-hoc visual interface for playing with it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;trace-debugging&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#trace-debugging&quot; aria-label=&quot;Anchor link for: trace-debugging&quot;&gt;Trace debugging&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The title is carefully worded as &lt;code&gt;printf debuggers&lt;&#x2F;code&gt;, instead of &lt;code&gt;printf debugging&lt;&#x2F;code&gt;, because
I think &lt;code&gt;trace debugging&lt;&#x2F;code&gt; is exactly a &lt;code&gt;printf debugger&lt;&#x2F;code&gt;, it&#x27;s a debugger made out of printfs.
In trace debugging, we mark functions to be traced. When a function is traced, two things happen.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;It gets added to a global map tracking function calls.&lt;&#x2F;li&gt;
&lt;li&gt;The function itself gets instrumented to (1) increment the corresponding counter when it&#x27;s called,
(2) decrement the counter when it finishes execution, (3) two print statements get injected before
and after the function call.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Let&#x27;s consider a simple addition function in Rust.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-annotation z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-annotation z-rust&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-annotation z-rust&quot;&gt;trace&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;left&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;u64&lt;&#x2F;span&gt;, &lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;right&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;u64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;u64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    left &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; right
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Calling this function with &lt;code&gt;3&lt;&#x2F;code&gt; and &lt;code&gt;5&lt;&#x2F;code&gt; now prints:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; class=&quot;language-text z-code&quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; [add] (left: 3) (right: 5)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; [add] 8
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Most of this is pretty easy and expected, with the small addition of &lt;code&gt;&amp;gt;&lt;&#x2F;code&gt; and &lt;code&gt;&amp;lt;&lt;&#x2F;code&gt; at the beginning. &lt;code&gt;&amp;gt;&lt;&#x2F;code&gt; marks the entry point of a function,
and &lt;code&gt;&amp;lt;&lt;&#x2F;code&gt; marks the result. The usefulness of the approach comes when recursion is involved.&lt;&#x2F;p&gt;
&lt;p&gt;Consider the following &lt;code&gt;fib&lt;&#x2F;code&gt; function.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust&quot; class=&quot;language-rust z-code&quot;&gt;&lt;code class=&quot;language-rust&quot; data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-annotation z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-annotation z-rust&quot;&gt;#&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-annotation z-rust&quot;&gt;trace&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-rust&quot;&gt;pub&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-function z-rust&quot;&gt;fn&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function z-rust&quot;&gt;fib&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-rust&quot;&gt;n&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;i64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-parameters z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt; &lt;span class=&quot;z-meta z-function z-return-type z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-rust&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-rust&quot;&gt;i64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;if&lt;&#x2F;span&gt; n &lt;span class=&quot;z-keyword z-operator z-comparison z-rust&quot;&gt;&amp;lt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-rust&quot;&gt;1&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        n
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-rust&quot;&gt;else&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-rust&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;        &lt;span class=&quot;z-support z-function z-rust&quot;&gt;fib&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;n &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-rust&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-rust&quot;&gt;fib&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-rust&quot;&gt;(&lt;&#x2F;span&gt;n &lt;span class=&quot;z-keyword z-operator z-arithmetic z-rust&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-rust&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-rust&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-rust&quot;&gt;&lt;span class=&quot;z-meta z-function z-rust&quot;&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-block z-rust&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-rust&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The resulting trace for &lt;code&gt;fib&lt;&#x2F;code&gt; is as follows;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; class=&quot;language-text z-code&quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; [fib] (n: 4)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; [fib] (n: 3)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [fib] (n: 2)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; [fib] (n: 1)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; &amp;lt; [fib] 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; [fib] (n: 0)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; &amp;lt; [fib] 0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [fib] 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [fib] (n: 1)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [fib] 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; [fib] 2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; [fib] (n: 2)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [fib] (n: 1)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [fib] 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [fib] (n: 0)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [fib] 0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; [fib] 1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; [fib] 3
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, we can track the function calls easily through the nesting at each level, which we couldn&#x27;t have done with naive printf debugging.&lt;&#x2F;p&gt;
&lt;p&gt;When you consider mutual recursion through a series of nested function calls, the approach becomes even more useful.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; class=&quot;language-text z-code&quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; [even] (n: 5)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; [odd] (n: 4)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; [even] (n: 3)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; [odd] (n: 2)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [even] (n: 1)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;gt; &amp;gt; &amp;gt; [odd] (n: 0)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [odd] false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; &amp;lt; [even] false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; [odd] false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; &amp;lt; [even] false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; [odd] false
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&amp;lt; [even] false
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Of course, as programs get longer, the inspection of these traces will get too long to read. That&#x27;s where the visual
debugger aspect comes from. So far, all we&#x27;ve done is to create a nice printing macro that tracks call depth and
prints it in a standardized format.&lt;&#x2F;p&gt;
&lt;p&gt;Good thing for us is that, those things enable many applications on top of them. Because we have the inputs to each function call, we can
jump to any pure function call that doesn&#x27;t access any globals and execute it. We have essentially created small snapshots of the program
for the subset we&#x27;re interested in. Well, unfortunately I haven&#x27;t implemented such advanced debugging capabilities yet; but I have
a proof of concept.&lt;&#x2F;p&gt;
&lt;p&gt;The thing is, I haven&#x27;t invented the idea of tracing, I saw it in &lt;a href=&quot;https:&#x2F;&#x2F;racket-lang.org&quot;&gt;Racket&lt;&#x2F;a&gt;. Racket has a &lt;a href=&quot;https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;reference&#x2F;debugging.html&quot;&gt;trace function&lt;&#x2F;a&gt;
that you can use to hook functions, and it does exactly what I&#x27;ve described so far. The Rust macro I implemented uses the same printing
interface, which is essentially a serialization protocol, that Racket uses. So, any tool that is designed to consume the Racket trace output
would be able to read and navigate Rust traces now, and vice versa. That&#x27;s where the &lt;code&gt;free&lt;&#x2F;code&gt; part of the title comes from, in any language
you implement the tracer, you get access to the same debugging tools.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve created a prototype tool to read the Racket output, and the demo is at &lt;a href=&quot;&#x2F;pages&#x2F;debugger.html&quot;&gt;https:&#x2F;&#x2F;alperenkeles.com&#x2F;pages&#x2F;debugger.html&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Below is an iframe of the tool, but you can also visit the link to see it in full screen. When you hit &lt;code&gt;Parse Trace&lt;&#x2F;code&gt;, it will parse the trace
on the left, and construct a visual representation of the function calls on the right. You can collapse a function call to hide the details
and just check its result, and I&#x27;ve also plans for adding tree-based navigation to the trace too.&lt;&#x2F;p&gt;
&lt;p&gt;So this is it. My next plans are making the Rust macro more robust, adding more features to the visual debugger, implementing the tracer in more
languages such as Javascript or Python, and maybe even creating a language server protocol for it so I can hook it inside an IDE. I really think
this might be a viable middle ground between printf debugging and visual debuggers, and I&#x27;m excited to see where it goes. &lt;strong&gt;Let me know what you think!&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;iframe src=&quot;&#x2F;pages&#x2F;debugger.html&quot; width=&quot;100%&quot; height=&quot;500px&quot;&gt;&lt;&#x2F;iframe&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yazılımda Tecrübenin Anlamsızlığı</title>
        <published>2024-06-28T00:00:00+00:00</published>
        <updated>2024-06-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/experience/"/>
        <id>https://alperenkeles.com/posts/experience/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/experience/">&lt;h1 id=&quot;yazılımda-tecrübenin-anlamsızlığı&quot;&gt;Yazılımda Tecrübenin
    Anlamsızlığı&lt;&#x2F;h1&gt;
&lt;p&gt;Bu yazıyı en başta “Yıllar Geçer, İlanlar Kalır” ismiyle çok daha
    detaylı ve resmi bir dil ile yazmaya başlamıştım, bugünkü modum ona hiç
    uygun olmadığı için daha keskin bir dille sıfırdan yazmaya karar
    verdim.&lt;&#x2F;p&gt;
&lt;p&gt;Öncelikle başlıktaki clickbait’i çözerek giriş yapayım.
    &lt;strong&gt;Anlamsız olan yazılım üzerine kazanılan tecrübe değil, bir
        yazılımcıyı işe alırken X üzerine Y yıl tecrübe beklentisi.&lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Nedir peki bunu örnekleri?&lt;&#x2F;p&gt;
&lt;ul&gt;
    &lt;li&gt;“5+ Years experience in at least one of the languages such as Java,
        Go, C#, Scala, Kotlin, Node.js”&lt;&#x2F;li&gt;
    &lt;li&gt;“Bilgi güvenliği, veri güvenliği, siber istihbarat, siber tehdit
        avı, sızma testleri ve zafiyet tespiti gibi alanlarda en az 3 yıl
        deneyimli olmak.”&lt;&#x2F;li&gt;
    &lt;li&gt;“8+ years experiences in software development experience”&lt;&#x2F;li&gt;
    &lt;li&gt;“Java (Java 8+), Spring ve&#x2F;veya Spring Boot ile en az 7 yıl
        deneyimli”&lt;&#x2F;li&gt;
    &lt;li&gt;“PHP (Laravel, Codeigniter ve&#x2F;veya Phalcon), Go veya Node.js
        hakkında minimum 4 yıllık iş deneyimi,”&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Bunların hepsini az önce Türkiye yazılım ekosisteminde aktif rol alan
    şirketlerin açık işe alım ilanlarından aldım. Eminim siz de aynılarını
    ya da benzerlerini sık sık görüyorsunuzdur.&lt;&#x2F;p&gt;
&lt;p&gt;Tabii ki X yıl Y beklentisi sadece iş ilanlarıyla bitmiyor, şirket
    içi pozisyon ve terfilerde de devam ediyor. Bu yazıyı yazmaya karar
    vermemde mesela bir arkadaşıma zam tartışmaları sırasında “sen zaten
    akranlarından çok daha yüksek maaş alıyorsun” gibi bir çıkış
    yapılmasıydı. Bu noktaya kadar okuduysanız aklınızda “bu durum
    Türkiye’ye özel değil” gibi bir itiraz olabilir, haklı da olursunuz. Bu
    konuda eleştiride bulunan ya da durumun değişmesi gerektiğini savunan da
    tek başıma ben değilim zaten, geçtiğimiz ay &lt;a href=&quot;remote.com&quot;&gt;remote.com&lt;&#x2F;a&gt; da &lt;strong&gt;X yıl tecrübe&lt;&#x2F;strong&gt;
    gerekliliğini iş ilanlarından kaldırdıklarından bahsetti mesela.&lt;&#x2F;p&gt;
&lt;p&gt;Alternatif olarak “Pazarlama giderlerimizi analiz ederek
    verimsizlikleri keşfetme kabiliyetinizi gösterebilmek” gibi yıldan
    bağımsız işe alım kriterleri uygulamaya karar verdiklerini aşağıdaki
    makalede daha detaylı açıklıyorlar ilgisini çekenler için.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a
        href=&quot;https:&#x2F;&#x2F;remote.com&#x2F;blog&#x2F;removing-years-of-experience-remote-jobs&quot;&gt;https:&#x2F;&#x2F;remote.com&#x2F;blog&#x2F;removing-years-of-experience-remote-jobs&lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;Gelelim asıl soruya, &lt;strong&gt;X üzerine Y yıl tecrübe beklentisi neden
        anlamsız?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Öncelikle, aslında işe aldığımız kişide tecrübe aramadığımızı kabul
    etmek gerekiyor; asıl aradığımız şey kabiliyet, ondan istediğimiz işleri
    yapabilme kabiliyeti. Tecrübe yalnızca bu kabiliyetin kendisini ölçmeye
    çalışmak yerine kullandığımız bir kısa yol.&lt;&#x2F;p&gt;
&lt;p&gt;Sıradaki soru ise şu, tecrübe kabiliyetle ne kadar doğru orantılı?
    Ben bir kişinin tecrübesini ölçtüğümde o kişinin kabiliyetini gerçekten
    ölçebiliyor muyum?&lt;&#x2F;p&gt;
&lt;p&gt;Bu sorunun cevabının hayır olduğunu reddeden birisi varsa, kendisinin
    sebeplerini mümkün olan en kısa zamanda &lt;a href=&quot;mailto:hi@alperenkeles.com&quot;&gt;hi@alperenkeles.com&lt;&#x2F;a&gt;’a bekliyorum.
    Her şeyden önce tecrübe inanılmaz subjektif, ortak bir tanımı da yok.
    Diyelim ki bir ilan 5 yıl Python tecrübesi istiyor olsun. Aşağıdaki
    sorulara cevaplarınız nedir mesela?&lt;&#x2F;p&gt;
&lt;ul&gt;
    &lt;li&gt;5 yıl * 52 hafta * 5 gün * 8 saat = 10400 saat Python kodu mu yazmış
        olmalı kişi?&lt;&#x2F;li&gt;
    &lt;li&gt;Yoksa 5 yıl boyunca Python ile geliştirme yaptığı bir şirkette mi
        çalışmış olmalı?&lt;&#x2F;li&gt;
    &lt;li&gt;Eğer okulda 3 derste Python kullandıysa bu okul dışında harcaması
        gereken süreyi azaltır mı?&lt;&#x2F;li&gt;
    &lt;li&gt;Eğer kendi lisede Python öğrenmeye başladıysa, üniversitede birkaç
        tane proje yaptıysa bu gereken süreyi azaltır mı?&lt;&#x2F;li&gt;
    &lt;li&gt;Eğer üniversiteden sonra iş bulamadığı bir dönemde kapanıp 6 ay
        boyunca her gün 4 saat Python’da bir proje üzerine çalışmışsa, bu total
        tecrübeye sayılır mı, eğer sayılırsa kaç ay sayılır?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Bu sorular yetmiyor gibi, daha temel bir problem de var elde. Bir
    programlama dilini öğrenmek diye bir konsept gerçekte yok, programlama
    dilini değil, o programlama dilini çevreleyen ekosistemi, kütüphaneleri,
    araçları öğreniyoruz aslında. Bu da aynı programlama dilinde 5 yıl
    tecrübeye sahip 2 kişinin aslında birbirinden çok farklı 5 yıllık
    tecrübelere sahip olması anlamına geliyor. Birisi data science ile
    uğraşmış, Pandas&#x2F;Numpy&#x2F;Matplotlib ekosistemiyle ilgileniyor, diğeri ise
    tamamen ayrı bir şekilde backend üzerine çalışmış, Django&#x2F;Flask&#x2F;Sqlite
    kullanıyor olabilir.&lt;&#x2F;p&gt;
&lt;p&gt;Burada gelebilecek bir itiraza şimdiden cevap vereyim, sonuçta bu
    gördüğümüz ilanlarda pek çok farklı gereksinim var, Backend Software
    Developer alan birisi hem 5 yıl Python tecrübesi isteyecek, hem de belli
    bir miktarda backend tecrübesi isteyecek, dolayısıyla bahsettiğin
    kişilerden Python’un farklı bir tarafında kendini geliştirmiş olanın o
    ilanla alakası yok diyebilirsiniz. Haklı da olursunuz. Bu da bizi
    sonraki probleme getiriyor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bir programlama dilini öğrenmek için yıllarca tecrübeye gerek
        yok.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ana akım programlama dillerinin önemli bir özelliği var, neredeyse
    hepsi birbiriyle semantik olarak aynı. Hepsi birbirinden kütüphaneler,
    dizayn sistemleri ve dil yapıları çalıyor. Aynı zamanda bir dildeki bir
    yapı diğerinde yoksa bile, onunla aynı işlevi gören başka bir yapı
    ortaya çıkıyor.&lt;&#x2F;p&gt;
&lt;p&gt;Ne demek istiyorum?&lt;&#x2F;p&gt;
&lt;p&gt;Bugünkü ana akım programlama dillerinde(C++, Java, Javascript,
    Python, Go…):&lt;&#x2F;p&gt;
&lt;ul&gt;
    &lt;li&gt;Imperative Programming: If-then-else, for&#x2F;while, assignment,
        functions and procedures&lt;&#x2F;li&gt;
    &lt;li&gt;Object Oriented Programming: Classes, Inheritance, Interfaces&lt;&#x2F;li&gt;
    &lt;li&gt;Functional Programming: Higher order functions, Sum Types&lt;&#x2F;li&gt;
    &lt;li&gt;Error handling: Exceptions, algebraic errors&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Bunların hepsi öyle ya da böyle var. Dolayısıyla pratikte ana akım
    bir programlama dilinde kod yazmaya başlamak genel anlamda diğer
    dillerde tecrübeli bir yazılımcının ihtiyacı olan süre çok fazla değil.
    Tabii ki bu durumun çeşitli istisnaları da var.&lt;&#x2F;p&gt;
&lt;ul&gt;
    &lt;li&gt;Memory Management: Manual(C, Zig), RAII(C++, Rust), Garbage
        Collection(Java, C#)&lt;&#x2F;li&gt;
    &lt;li&gt;Concurrency: Threads, Processes, Async&#x2F;Await, Channels&lt;&#x2F;li&gt;
    &lt;li&gt;Type System: Static, Dynamic, Strong, Weak, Nominal, Structural&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Ancak bu spesfik konseptlere hakim olmak geçirilen yıl ile çok
    alakalı değil, daha da ziyade aynı farklı kütüphane ve araçlarda tecrübe
    kazanmak gibi üzerinde çalışılan projelerle alakalı.&lt;&#x2F;p&gt;
&lt;p&gt;Yeni bir dile adapte olmaya şahsi bir örnek vermek gerekirse, geçen
    yıl AWS’de staj yaparken çalıştığım Java projesine kod eklemeye başlamam
    yaklaşık 3 gün sürdü, ve ben profesyonel hayatım boyunca bir kez bile
    Java yazmadım, bu stajdan 3 yıl önce Database dersim için yazmıştım.
    Benzer bir şekilde, üniversite son sınıfta Havelsan’da çalışmaya
    başladığımda daha önce neredeyse hiç Javascript yazmamış olmama rağmen
    4–5 gün içerisinde projeye dokunup kod eklemeye başlamıştım. Tabii buna
    “senin öğrenci ya da yeni mezun olarak yazdığın kod bizim işe alım
    standartlarımızın altında, dolayısıyla 5 yıl tecrübeli birini arıyoruz”
    gibi bir itiraz gelebilir. O itirazı yapacak kişilere de şunu sormak
    isterim.&lt;&#x2F;p&gt;
&lt;p&gt;5 yıl boyunca o kişinin ne yapmasını bekliyorsunuz? Buraya kadar
    gelirken soruyu sıkıştırmaya çalıştığım nokta da buydu. 5 yıl boyunca
    kişi ne yapacak da kod kalitesi yükselecek? 2 farklı şirketteki, 2
    farklı takımdaki, 2 farklı kişideki 5 yıl tecrübe herkes kabul edecektir
    ki aynı değil. Bazı kişiler diğerlerinden daha fazla çalışabilir, daha
    hızlı öğrenebilir, bazı takımlar çalışanları daha iyi eğitebilir, daha
    hızlı gelişmelerini sağlayabilir, bazı şirketler çalışanlara aynı
    projeyi küçücük farklılıklarla tekrar tekrar yazdırıp, bir anlamda
    teknisyen olarak kullanırken, başka şirketler çalışanlarını konfor
    alanlarından çıkarıp çeşitli projelerde farklı problemlerle karşı
    karşıya getirip onlara tecrübe kazandırabilir.&lt;&#x2F;p&gt;
&lt;p&gt;Ki şirkete bile varmadan önce, 2 farklı üniversite mezunu çok farklı
    kabiliyetlerle mezun olabilir. Ya da bir şirket işe alım yaparken
    karşısına bir üniversite mezunu ve alaylı yan yana denk gelebilir. Uzun
    lafın kısası, farklı farklı örneklerle tekrar tekrar anlatmaya
    çalıştığım şey aslında çok basit.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tecrübe ölçülebilir standart bir metrik değil, subjektif,
        ihtiyaç duyduğumuz bilgiler ile bize fayda sağlamak yerine daha da zarar
        veriyor.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Fark ettiyseniz az önce önce iddiamı değiştirdim, daha da ilerlettim.
    Tecrübenin sadece anlamsız değil, aynı zamanda zararlı olduğunu iddia
    ettim şirketler için. Bunun neden olduğunu da konuşalım kısaca. Aşağıya
    sizin için bir 3 adet çan eğrisi çizdim. Kırmızı olan 2 yıl tecrübeli,
    yeşil olan 5 yıl tecrübeli, mavi olan 10 yıl tecrübeli mühendisleri
    gösteriyor.&lt;&#x2F;p&gt;
&lt;figure&gt;
    &lt;img src=&quot;experience.png&quot; alt=&quot;Tecrübe Grafiği&quot; &#x2F;&gt;
    &lt;figcaption aria-hidden=&quot;true&quot;&gt;Tecrübe Grafiği&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Yazıda daha önce konuştuğumuz gibi, tecrübe ve kabiliyet arasındaki
    ilişki çok net bir ilişki değil, kişiye ve kişinin kariyer yoluna göre
    çok ciddi değişebilen bir olay. Bu grafiğin realitede böyle olup
    olmadığını tartışabiliriz ayrı bir zamanda, benim şahsi tahminim buna
    yakın bir sonuçla karşılaşma ihtimalimizin yüksek olduğu yönünde her ne
    kadar kabiliyetin bu şekilde bir eğride sıralanabileceğine inanmasam
    da.&lt;&#x2F;p&gt;
&lt;p&gt;Bu grafiğin bize vermeye çalıştığı önemli bir mesaj var aslında:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Öyle bir p1 ve p2 kişileri mevcuttur ki, 2 yıl tecrübeli p1
        kişisi 5 ya da 10 yıl tecrübeli p2 kişisinden daha yüksek kabiliyete
        sahiptir.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Tecrübe bazlı alım yapmak şirkete tam olarak burada bahsettiğim 2 yıl
    tecrübeli kişileri kaybettiriyor. O ilana 5 yıl yazdığınız anda, ilana
    yaklaşık 5 yıl tecrübeli ortalama yüzlerce kişiyi çekmiş oluyorsunuz, bu
    noktada 2 yıl tecrübeli kalifiye adayları ilanda tecrübe yazmayan başka
    bir rakibinize kaybetme ihtimaliniz çok yüksek.&lt;&#x2F;p&gt;
&lt;p&gt;E peki nasıl bir alternatif var? Tecrübeyi kullanmayacaksak ne
    yapabiliriz?&lt;&#x2F;p&gt;
&lt;p&gt;Daha önce bu soruyu Twitter’da sorduğumda konu üzerine kafa
    patlatanlardan birisi olan &lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;eserozvataf&quot;&gt;Eser
        Özvataf&lt;&#x2F;a&gt; ile yazıda yukarda bahsettiğim remote.com tarzında kişinin
    “X kabiliyetini başarabilme” konusunda kendisini kanıtladığı örnek bir
    proje, bir portföy oluşturması gerektiğini konuşmuştuk. Özellikle aday
    sayısı arttıkça ölçeklenebilme anlamında zorlukları olsa da tecrübe
    kriterinin kendisinin nötr değil zararlı olduğuna ikna olduğumdan
    dolayı, bu alternatifi en mantıklı alternatif olarak görüyorum.
    Bahsettiğim tartışmaları okumak isterseniz aşağıya bıraktım.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;x.com&#x2F;Keleesssss&#x2F;status&#x2F;1791535383936634909&quot;&gt;Tweet
        Linki&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Son bir tavsiye &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;failasaservice&#x2F;&quot;&gt;Fail’den&lt;&#x2F;a&gt;, bu seferki işe
    alım yapanlara değil adaylara. Bir ilanda kaç yıl tecrübe yazarsa
    yazsın, işi yapabileceğinize inanıyorsanız başvurun, bırakın onlar
    reddetsin.&lt;&#x2F;p&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Puzzles as Algorithmic Problems</title>
        <published>2024-06-28T00:00:00+00:00</published>
        <updated>2024-06-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/puzzles-as-algortihms/"/>
        <id>https://alperenkeles.com/posts/puzzles-as-algortihms/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/puzzles-as-algortihms/">&lt;p&gt;
 &lt;i&gt;
  This article is originally published at
  &lt;a href=&quot;https:&#x2F;&#x2F;pagedout.institute&#x2F;download&#x2F;PagedOut_004_beta1.pdf&quot;&gt;
   Paged Out! #4
  &lt;&#x2F;a&gt;
 &lt;&#x2F;i&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;
 This article is a brief advocacy for the use of puzzles as
        algorithmic problems for learning purposes as an alternative to the
        current style of Competitive Programming(CP) or Mathematics
        problems.
&lt;&#x2F;p&gt;
&lt;p&gt;
 The current trend in “how to learn algorithms” is mostly based on big
        tech companies and their interview process. This process is interleaved
        with the ICPC(International Collegiate Programming Contest) style of
        competitive programming, where a problem is usually a combination or
        adaptation of several known algorithms or mathematical concepts. I see
        four problems with this approach:
&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
 &lt;li&gt;
  &lt;strong&gt;
   The problems are not real-world problems
  &lt;&#x2F;strong&gt;
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  &lt;strong&gt;
   The problems have pre-defined and determined
                solutions
  &lt;&#x2F;strong&gt;
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  &lt;strong&gt;
   The problems are very hard to solve if you don’t already
                know the solution
  &lt;&#x2F;strong&gt;
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  &lt;strong&gt;
   The problems are not fun
  &lt;&#x2F;strong&gt;
 &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;
 Let me elaborate on these points by walking through the process of
        solving a LeetCode problem. I picked a medium problem with 34.5% solve
        rate, 3Sum. The problem statement is as follows:
&lt;&#x2F;p&gt;
&lt;blockquote&gt;
 &lt;p&gt;
  Given an integer array nums, return all the triplets [nums[i],
            nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] +
            nums[j] + nums[k] == 0. Notice that the solution set must not contain
            duplicate triplets.
 &lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;
 The naive solution would be to simply brute force the entire array,
        which would be O(n^3). This is obviously not the intended solution, so
        we are led to think where we can optimize. A classic approach for array
        questions is to first sort the array in the hope that it will allow for
        some optimization in the algorithm. After sorting the array, we can use
        the two-pointer technique to find the triplets.
&lt;&#x2F;p&gt;
&lt;p&gt;
 As you might’ve realized when reading the above paragraph, I didn’t
        invent anything when solving the question. In fact, the author already
        had an optimal solution, as well as a naive one, when they were writing
        the question. This is a common theme in competitive programming
        problems. The author has some solution in mind, usually by combining a
        few techniques or algorithms in a clever way, and the problem solver has
        to figure out that specific solution.
&lt;&#x2F;p&gt;
&lt;p&gt;
 This is in stark contrast to real-world problems. In a real-world
        problem, there is no “existing” solution that you have to discover. Of
        course the tricks and techniques you learn from competitive programming
        can be applied to real-world problems, but the process of solving a
        real-world problem is much more open-ended. You also need to decide on
        your constraints yourself, unlike the constraints given in competitive
        programming problems.
 &lt;strong&gt;
  What does it mean for your algorithm to be
            “fast enough”?
 &lt;&#x2F;strong&gt;
 Even further,
 &lt;strong&gt;
  what does it mean for your
            algorithm to be “correct”?
 &lt;&#x2F;strong&gt;
 In CP, the answer is usually “passes
        all test cases”, but in the real world, the answer is not so
        clear-cut.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Given such discrepancies, I am proposing solving puzzles by devising
        algorithms for them as an alternative to CP problems. The puzzles are
        actually fun to work with, they aren’t designed to be solved
        algorithmically, so there is no solution you have to discover, you
        actually have to invent a solution. These puzzles can be anything from
        variants of Sudoku to small Chess problems, any puzzle that doesn’t
        require any special knowledge to solve. The fact that you have to define
        your own constraints makes solving puzzles a much better approximation
        of real-world problem solving than CP problems. Solving a puzzle
        algorithmically means that
 &lt;strong&gt;
  (1)
 &lt;&#x2F;strong&gt;
 you must define your
        constraint for correctness and performance, as well as the space of
        inputs you are interested in,
 &lt;strong&gt;
  (2)
 &lt;&#x2F;strong&gt;
 you must devise a
        robust testing strategy,
 &lt;strong&gt;
  (3)
 &lt;&#x2F;strong&gt;
 you must model the problem
        space as a data structure in the programming language, perhaps think
        about the trade-offs between different representations of the problem
        space,
 &lt;strong&gt;
  (4)
 &lt;&#x2F;strong&gt;
 you must devise an algorithm that solves the
        problem, and
 &lt;strong&gt;
  (5)
 &lt;&#x2F;strong&gt;
 you must implement the algorithm and
        test it.
 &lt;strong&gt;
  Together, I believe these steps are a much better
            approximation of real-world problem solving than CP
            problems.
 &lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;!-- Add a hline --&gt;
&lt;!-- Add the image small --&gt;
&lt;figure&gt;
 &lt;img alt=&quot;Paintbrush Puzzle&quot; src=&quot;pb.png&quot; style=&quot;width:40.0%&quot;&#x2F;&gt;
 &lt;figcaption aria-hidden=&quot;true&quot;&gt;
  Paintbrush Puzzle
 &lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;
 &lt;strong&gt;
  Figure 1
 &lt;&#x2F;strong&gt;
 an example of a puzzle that I solved
        recently. Your task is to find a set of
 &lt;em&gt;
  brushes
 &lt;&#x2F;em&gt;
 that paint the
        source into the target canvas. For this particular example, brushing
        order A-F-B-D is the solution.
 &lt;strong&gt;
  Can you devise a general
            algorithm for solving this puzzle for any source and target canvas in
            any size?
 &lt;&#x2F;strong&gt;
 If you’re interested, you can also read my solution
        at
 &lt;br&#x2F;&gt;
 &lt;a href=&quot;https:&#x2F;&#x2F;www.alperenkeles.com&#x2F;blog&#x2F;paintbrush&quot;&gt;
  https:&#x2F;&#x2F;www.alperenkeles.com&#x2F;blog&#x2F;paintbrush
 &lt;&#x2F;a&gt;
 .
&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Solving Algorithmic Problems: Painting a Grid</title>
        <published>2024-06-01T00:00:00+00:00</published>
        <updated>2024-06-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/solving-algorithmic-problems/"/>
        <id>https://alperenkeles.com/posts/solving-algorithmic-problems/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/solving-algorithmic-problems/">&lt;p&gt;
 Earlier today, I saw a
 &lt;a href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;puzzles&#x2F;comments&#x2F;1c4pj67&#x2F;use_the_brushes_in_the_right_order_to_reproduce&#x2F;&quot;&gt;
  cute
            little puzzle on Reddit
 &lt;&#x2F;a&gt;
 . The puzzle is pretty simple, we have a 3x3
        grid where each square is either pink or turquoise. We are also given a
        target grid with a different configuration of colors. Finally, we can
        use 3 horizontal brushes(A, B, and C) that is pink, or 3 vertical
        brushes(D, E, and F) that is turquoise. The goal is to find the minimum
        number of brush strokes required to paint the target grid.
&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img alt=&quot;Puzzle Image&quot; src=&quot;reddit-image.png&quot; style=&quot;width: 50%;&quot;&#x2F;&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;
 It took me a couple of minutes to come up with the solution, I’m
        leaving the answer below in a spoiler box. If you want to try it
        yourself, please do so before reading the answer.
&lt;&#x2F;p&gt;
&lt;details&gt;
 &lt;summary&gt;
  &lt;b&gt;
   Click to see the answer
  &lt;&#x2F;b&gt;
 &lt;&#x2F;summary&gt;
 &lt;p&gt;
  The solution is
  &lt;code&gt;
   A F B D
  &lt;&#x2F;code&gt;
 &lt;&#x2F;p&gt;
&lt;&#x2F;details&gt;
&lt;p&gt;
 The next thought I had was,
 &lt;strong&gt;
  how hard would it be to write a
            program that solves this problem for any given grid?
 &lt;&#x2F;strong&gt;
 . I thought
        it would be a fun little exercise to write a program that solves this
        problem. Although I don’t think my solution is perfect(my intuition is
        that there are cases where it takes the wrong step which is possible to
        detect in the future and revert, but I didn’t implement it), I’m happy
        with the simplicity of the result.
&lt;&#x2F;p&gt;
&lt;p&gt;
 The first question that requires answering when solving such a
        question is, what does the solution space look like? If the solution
        space is very small, we can just enumerate all of them(hint: it’s not
        that large). For a 3x3 grid, we only have 6 brushes, and using a brush
        twice does not provide any additional benefit. This is an important
        insight into pushing the solution space down, so let’s think about why
        that is for a second.
&lt;&#x2F;p&gt;
&lt;p&gt;
 The reason why, is that there is only one way to paint a square. If
        we want to paint a square pink, we have to use the horizontal brush on
        that level, if we want to paint a square turquoise, we have to use the
        vertical brush on that level. Let’s say that we have a sequence of brush
        strokes
 &lt;code&gt;
  x_1, x_2, x_3...
 &lt;&#x2F;code&gt;
 . The question we need to ask is,
        why do we even care about the order of strokes to begin with? The reason
        is that
 &lt;code&gt;
  column
 &lt;&#x2F;code&gt;
 and
 &lt;code&gt;
  row
 &lt;&#x2F;code&gt;
 strokes don’t
 &lt;strong&gt;
  commute
 &lt;&#x2F;strong&gt;
 . Applying
 &lt;code&gt;
  r_i
 &lt;&#x2F;code&gt;
 where
 &lt;code&gt;
  r_i
 &lt;&#x2F;code&gt;
 is the row stroke for the i’th row, and
 &lt;code&gt;
  c_i
 &lt;&#x2F;code&gt;
 where
 &lt;code&gt;
  c_i
 &lt;&#x2F;code&gt;
 is the column stroke for the
        i’th column, is not the same as applying
 &lt;code&gt;
  c_i
 &lt;&#x2F;code&gt;
 and then
 &lt;code&gt;
  r_i
 &lt;&#x2F;code&gt;
 .
 &lt;code&gt;
  r_i c_j
 &lt;&#x2F;code&gt;
 means that
 &lt;code&gt;
  cell[i, j]
 &lt;&#x2F;code&gt;
 is painted
 &lt;code&gt;
  turqoise
 &lt;&#x2F;code&gt;
 , and
 &lt;code&gt;
  c_j r_i
 &lt;&#x2F;code&gt;
 means that
 &lt;code&gt;
  cell[i, j]
 &lt;&#x2F;code&gt;
 is painted
 &lt;code&gt;
  pink
 &lt;&#x2F;code&gt;
 . This gives us two piece of information:
&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
 &lt;li&gt;
  Order of strokes matter.
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  By changing the order of two strokes, we can change the color of a
            cell in the way we want.
 &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;
 As we can change the color of a cell by changing the order of
        strokes, running
 &lt;code&gt;
  c_i ... r_j ... c_i
 &lt;&#x2F;code&gt;
 is the same as running
 &lt;code&gt;
  r_j ... c_i
 &lt;&#x2F;code&gt;
 . That is it is sufficient to use each stroke
        once. Although working, this solution did not really satisfy my
        curiosity, it was just too inelegant.
&lt;&#x2F;p&gt;
&lt;p&gt;
 The next step we can take is to invert our thinking process for the
        previous solution. Previously, we decided that we can always change the
        order of two strokes when we want to change the color of something.
        Thinking backwards, this also means that we can just place the strokes
        in the order we want to paint the cells. If we want to paint cell
 &lt;code&gt;
  i, j
 &lt;&#x2F;code&gt;
 pink, now we know that our solution must be in the
        form
 &lt;code&gt;
  ... c_i ... r_j ...
 &lt;&#x2F;code&gt;
 . For this solution, we will first
        calculate the difference of the current grid and the target grid, then
        we will find a set of moves required to paint the grid in the way we
        want. We will order the strokes with respect to the painting order, and
        apply the first stroke in the list. After the application, we recompute
        the difference, and continue this process until the paintings are the
        same.
&lt;&#x2F;p&gt;
&lt;p&gt;
 This solution scales much better, as it’s local. We use a greedy
        approach to solve the problem, so we don’t have to generate the whole
        permutation space of strokes. The solution is also very simple to
        implement, the solver logic relies on the two functions provided in
        Typescript below. The order managed the order of strokes to solve
        commutation issues, and the solve function applies the strokes in the
        order provided by the order function.
&lt;&#x2F;p&gt;
&lt;input id=&quot;paintbrush.ts&quot; type=&quot;hidden&quot; value=&#x27;const order = (d1: Directive, d2: Directive, c: Canvas): number =&amp;gt; {
    if (d1.orient === d2.orient) {
        return 0;
    }
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;let dr = d1.orient === &amp;quot;row&amp;quot; ? d1 : d2;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;let dc = d1.orient === &amp;quot;column&amp;quot; ? d1 : d2;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;let t = c[dr.index][dc.index];
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;if (d1.orient === &amp;quot;row&amp;quot; &amp;amp;amp;&amp;amp;amp; t === &amp;quot;pink&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return -1;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;} else if (d1.orient === &amp;quot;column&amp;quot; &amp;amp;amp;&amp;amp;amp; t === &amp;quot;blue&amp;quot;) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return -1;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;} else {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 1;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;}&lt;&#x2F;p&gt;
&lt;p&gt;const solve = (c1: Canvas, c2: Canvas): Directive[] =&amp;gt; {
let path : Directive[] = [];&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;while (different(c1, c2)) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let d = diff(c1, c2);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let dirs = getDirectives(d);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let sortedDirs = dirs.sort((d1, d2) =&amp;amp;gt; order(d1, d2, c2));
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let dir = sortedDirs.pop() as Directive;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    c1 = applyDirective(c1, dir);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    path.push(dir);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;return path;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;}&#x27;&#x2F;&amp;gt;&lt;&#x2F;p&gt;
&lt;pre data-linenos data-lang=&quot;typescript&quot; class=&quot;language-typescript z-code&quot;&gt;&lt;code class=&quot;language-typescript&quot; data-lang=&quot;typescript&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;order&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-arrow z-ts&quot;&gt; &lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;d1&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Directive&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;d2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Directive&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Canvas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-arrow z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-type z-primitive z-ts&quot;&gt;number&lt;&#x2F;span&gt; =&lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;gt&lt;&#x2F;span&gt;; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-definition z-method z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;d1.orient === d2.orient&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;    let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;dr&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;d1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;orient&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;row&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;?&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d2&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;    let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;dc&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;d1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-property z-ts&quot;&gt;orient&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-ts&quot;&gt;===&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;column&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;?&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ternary z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d2&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;    let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;t&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;dr&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-variable z-property z-dom z-ts&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;dc&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-variable z-property z-dom z-ts&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-definition z-method z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;d1.orient === &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;row&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &amp;amp;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;amp&lt;&#x2F;span&gt;;&amp;amp;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;amp&lt;&#x2F;span&gt;; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;t&lt;&#x2F;span&gt; === &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;pink&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; else &lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-method z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;d1.orient === &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;column&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &amp;amp;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;amp&lt;&#x2F;span&gt;;&amp;amp;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;amp&lt;&#x2F;span&gt;; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;t&lt;&#x2F;span&gt; === &lt;span class=&quot;z-string z-quoted z-double z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;blue&lt;span class=&quot;z-punctuation z-definition z-string z-end z-ts&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-block z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-flow z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-arithmetic z-ts&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-statement z-ts&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-method z-declaration z-ts&quot;&gt;&lt;span class=&quot;z-meta z-block z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; else {
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        return &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-decimal z-ts&quot;&gt;1&lt;&#x2F;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-storage z-type z-ts&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-var-single-variable z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-definition z-variable z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-constant z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;solve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-arrow z-ts&quot;&gt; &lt;span class=&quot;z-meta z-parameters z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-begin z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;c1&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Canvas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-parameter z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-ts&quot;&gt;c2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-annotation z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Canvas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-parameters z-end z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-return z-type z-arrow z-ts&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-type z-annotation z-ts&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Directive&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-type z-tuple z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; =&lt;span class=&quot;z-keyword z-operator z-type z-ts&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;gt&lt;&#x2F;span&gt;; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;    let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;path &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object-literal z-key z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-ts&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;Directive&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-array z-literal z-ts&quot;&gt; &lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-square z-ts&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;while&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;different&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;diff&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;dirs&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;getDirectives&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;sortedDirs&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;dirs&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-ts&quot;&gt;sort&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-bitwise z-ts&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;gt&lt;&#x2F;span&gt;; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;order&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;d2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c2&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        let &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;dir&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-object z-ts&quot;&gt;sortedDirs&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-ts&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-ts&quot;&gt;pop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-as z-ts&quot;&gt;as&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-ts&quot;&gt;Directive&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        &lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c1&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-ts&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-ts&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-ts&quot;&gt;applyDirective&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;c1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-ts&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;dir&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brace z-round z-ts&quot;&gt;)&lt;&#x2F;span&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;        path.push(dir);
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;31&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;32&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;    &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-ts&quot;&gt;path&lt;&#x2F;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;tr&gt;&lt;td&gt;33&lt;&#x2F;td&gt;&lt;td&gt;&lt;span class=&quot;z-source z-ts&quot;&gt;&lt;span class=&quot;z-meta z-var z-expr z-ts&quot;&gt;&lt;span class=&quot;z-meta z-objectliteral z-ts&quot;&gt;&lt;span class=&quot;z-meta z-object z-member z-ts&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-block z-ts&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 If I’m not mistaken, this method should be able to solve NxNxN…xN
        grids in K dimensional spaces. The solution is not perfect, as it can
        actually lead to double strokes in some cases, but this would be
        immediately solved by keeping only the last stroke in the list. I
        published the code on
 &lt;a href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;ce3321f41bfa367997847b2ef79ea10f&quot;&gt;
  Github
 &lt;&#x2F;a&gt;
 ,
        and below is a playground where you can actually generate grids and see
        the results.
&lt;&#x2F;p&gt;
&lt;p&gt;
 An important point that I should also not that the problem does not
        really have a general solution, since there are grid pairs where it’s
        impossible to paint the target grid with the given brushes. I’m not sure
        how to prove this, if we had a proof that the state space is
        finite(which we believe, as we already said that using each brush only
        once is enough), then we could just provide a counterexample showing
        that it’s impossible to paint the target grid from that starting
        configuration, but that reasoning does not hold if we don’t actually
        prove that the state space is finite. We could also show cyclicity,
        which I think should be easy to do, but I didn’t try it.
&lt;&#x2F;p&gt;
&lt;table style=&quot;all:unset; display: body; float: left; margin-right: 20px;&quot;&gt;
 &lt;tbody&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c1-0-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-0-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-0-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c1-1-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-1-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-1-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c1-2-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-2-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c1-2-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
 &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;table style=&quot;all:unset; display: body; float: left; margin-right: 20px;&quot;&gt;
 &lt;tbody&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c2-0-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-0-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-0-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c2-1-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-1-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-1-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
   &lt;td id=&quot;c2-2-0&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-2-1&quot;&gt;
   &lt;&#x2F;td&gt;
   &lt;td id=&quot;c2-2-2&quot;&gt;
   &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
 &lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;button id=&quot;show-solution&quot;&gt;
 Show Solution
&lt;&#x2F;button&gt;
&lt;button id=&quot;reset&quot;&gt;
 Reset
&lt;&#x2F;button&gt;
&lt;input id=&quot;speed-slider&quot; max=&quot;100&quot; min=&quot;0&quot; type=&quot;range&quot; value=&quot;30&quot;&#x2F;&gt;
Adjust Speed
&lt;input id=&quot;speed&quot; type=&quot;hidden&quot; value=&quot;1000&quot;&#x2F;&gt;
&lt;h4&gt;
 Moves
&lt;&#x2F;h4&gt;
&lt;ul id=&quot;moves&quot;&gt;
&lt;&#x2F;ul&gt;
&lt;script&gt;
 var generateCanvas = function () {
            &#x2F;&#x2F; A Canvas is a 3x3 grid of colors
            var genColor = function () {
                return Math.random() &gt; 0.5 ? &quot;blue&quot; : &quot;pink&quot;;
            };
            var canvas = [];
            for (var i = 0; i &lt; 3; i++) {
                canvas.push([]);
                for (var j = 0; j &lt; 3; j++) {
                    canvas[i].push(genColor());
                }
            }
            return canvas;
        };
        var copyCanvas = function (canvas) {
            var newCanvas = [];
            for (var i = 0; i &lt; 3; i++) {
                newCanvas.push([]);
                for (var j = 0; j &lt; 3; j++) {
                    newCanvas[i].push(canvas[i][j]);
                }
            }
            return newCanvas;
        };
        var paintRow = function (canvas, row) {
            var newCanvas = copyCanvas(canvas);
            for (var i = 0; i &lt; 3; i++) {
                newCanvas[row][i] = &quot;pink&quot;;
            }
            return newCanvas;
        };
        var paintColumn = function (canvas, column) {
            var newCanvas = copyCanvas(canvas);
            for (var i = 0; i &lt; 3; i++) {
                newCanvas[i][column] = &quot;blue&quot;;
            }
            return newCanvas;
        };
        var diff = function (canvas1, canvas2) {
            var diffCanvas = [];
            for (var i = 0; i &lt; 3; i++) {
                diffCanvas.push([]);
                for (var j = 0; j &lt; 3; j++) {
                    if (canvas1[i][j] === canvas2[i][j]) {
                        diffCanvas[i].push(&quot;same&quot;);
                    }
                    else {
                        diffCanvas[i].push(canvas2[i][j]);
                    }
                }
            }
            return diffCanvas;
        };
        var getPinkedRows = function (canvas) {
            var hasPink = function (row) {
                return row.some(function (color) { return color === &quot;pink&quot;; });
            };
            var pinkedRows = [];
            for (var i = 0; i &lt; 3; i++) {
                if (hasPink(canvas[i])) {
                    pinkedRows.push(i);
                }
            }
            return pinkedRows;
        };
        var getBluedColumns = function (canvas) {
            var hasBlue = function (column) {
                return column.some(function (color) { return color === &quot;blue&quot;; });
            };
            var bluedColumns = [];
            for (var i = 0; i &lt; 3; i++) {
                if (hasBlue([canvas[0][i], canvas[1][i], canvas[2][i]])) {
                    bluedColumns.push(i);
                }
            }
            return bluedColumns;
        };
        var different = function (canvas1, canvas2) {
            return diff(canvas1, canvas2).some(function (row) { return row.some(function (color) { return color !== &quot;same&quot;; }); });
        };
        var getDirectives = function (diffCanvas) {
            var pr = getPinkedRows(diffCanvas);
            var bc = getBluedColumns(diffCanvas);
            var directives = [];
            pr.forEach(function (row) {
                directives.push({ orient: &quot;row&quot;, index: row });
            });
            bc.forEach(function (column) {
                directives.push({ orient: &quot;column&quot;, index: column });
            });
            return directives;
        };
        var printCanvas = function (canvas) {
            var printCell = function (color) {
                return color === &quot;blue&quot; ? &quot;O&quot; : &quot;X&quot;;
            };
            canvas.forEach(function (row) {
                console.log(row.map(printCell).join(&quot;&quot;));
            });
        };
        var applyDirective = function (canvas, directive) {
            return directive.orient === &quot;row&quot; ? paintRow(canvas, directive.index) : paintColumn(canvas, directive.index);
        };
        var order = function (d1, d2, c) {
            if (d1.orient === d2.orient) {
                return 0;
            }
            var dr = d1.orient === &quot;row&quot; ? d1 : d2;
            var dc = d1.orient === &quot;column&quot; ? d1 : d2;
            var t = c[dr.index][dc.index];
            if (d1.orient === &quot;row&quot; &amp;&amp; t === &quot;pink&quot;) {
                return -1;
            }
            else if (d1.orient === &quot;column&quot; &amp;&amp; t === &quot;blue&quot;) {
                return -1;
            }
            else {
                return 1;
            }
        };
        var solve = function (c1, c2) {
            var path = [];
            while (different(c1, c2)) {
                var d = diff(c1, c2);
                var dirs = getDirectives(d);
                var sortedDirs = dirs.sort(function (d1, d2) { return order(d1, d2, c2); });
                var dir = sortedDirs.pop();
                console.log(&quot;Applying directive: &quot;, dir);
                c1 = applyDirective(c1, dir);
                path.push(dir);
            }
            return path;
        };
        &#x2F;&#x2F; let c1 = generateCanvas();
        &#x2F;&#x2F; let c2 = copyCanvas(c1);
        var genDirective = function () {
            return { orient: Math.random() &gt; 0.5 ? &quot;row&quot; : &quot;column&quot;, index: Math.floor(Math.random() * 3) };
        };
        var genTarget = function (c1) {
            var c2 = copyCanvas(c1);
            for (var i = 0; i &lt; 100; i++) {
                var d = genDirective();
                c2 = applyDirective(c2, d);
            }
            return c2;
        };
&lt;&#x2F;script&gt;
&lt;script&gt;
 let c1 = generateCanvas();
        let c2 = genTarget(c1);
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let cs = {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        &amp;quot;c1&amp;quot;: c1,
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        &amp;quot;c2&amp;quot;: c2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    };
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    const toRgb = (color) =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        return color === &amp;quot;blue&amp;quot; ? &amp;quot;#41C9E2&amp;quot; : &amp;quot;#D862BC&amp;quot;;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    const paintCanvas = (cid) =&amp;gt; {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        console.log(cs[cid]);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        for (let i = 0; i &amp;lt; 3; i++) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            for (let j = 0; j &amp;lt; 3; j++) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                document.getElementById(cid + &amp;quot;-&amp;quot; + i + &amp;quot;-&amp;quot; + j).style.width = &amp;quot;20px&amp;quot;;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                document.getElementById(cid + &amp;quot;-&amp;quot; + i + &amp;quot;-&amp;quot; + j).style.height = &amp;quot;20px&amp;quot;;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                document.getElementById(cid + &amp;quot;-&amp;quot; + i + &amp;quot;-&amp;quot; + j).style.backgroundColor = toRgb(cs[cid][i][j]);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    paintCanvas(&amp;quot;c1&amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    paintCanvas(&amp;quot;c2&amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let path = solve(c1, c2);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    &#x2F;&#x2F; Add li to the moves list
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    document.getElementById(&amp;quot;moves&amp;quot;).innerHTML = path.map((p, i) =&amp;gt; `&amp;lt;li id=&amp;quot;move-${i}&amp;quot;&amp;quot;&amp;gt;${p.orient + p.index}&amp;lt;&#x2F;li&amp;gt;`).join(&amp;quot; &amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    console.log(path);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    document.getElementById(&amp;quot;show-solution&amp;quot;).addEventListener(&amp;quot;click&amp;quot;, function () {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        let i = 0;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        let interval = setInterval(function () {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            if (i &amp;lt; path.length) {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                cs[&amp;quot;c1&amp;quot;] = applyDirective(cs[&amp;quot;c1&amp;quot;], path[i]);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                console.log(cs[&amp;quot;c1&amp;quot;]);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                document.getElementById(&amp;quot;move-&amp;quot; + i).style.textDecoration = &amp;quot;line-through&amp;quot;;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                paintCanvas(&amp;quot;c1&amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                i++;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            } else {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;                clearInterval(interval);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        }, parseInt(document.getElementById(&amp;quot;speed&amp;quot;).value));
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    });
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    document.getElementById(&amp;quot;reset&amp;quot;).addEventListener(&amp;quot;click&amp;quot;, function () {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        c1 = generateCanvas();
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        c2 = genTarget(c1);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        cs = {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            &amp;quot;c1&amp;quot;: c1,
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            &amp;quot;c2&amp;quot;: c2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        };
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        paintCanvas(&amp;quot;c1&amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        paintCanvas(&amp;quot;c2&amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        path = solve(c1, c2);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        document.getElementById(&amp;quot;moves&amp;quot;).innerHTML = path.map((p, i) =&amp;gt; `&amp;lt;li id=&amp;quot;move-${i}&amp;quot;&amp;quot;&amp;gt;${p.orient + p.index}&amp;lt;&#x2F;li&amp;gt;`).join(&amp;quot; &amp;quot;);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    });
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    document.getElementById(&amp;quot;speed-slider&amp;quot;).addEventListener(&amp;quot;input&amp;quot;, function () {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        document.getElementById(&amp;quot;speed&amp;quot;).value = 30000 &#x2F; (parseInt(document.getElementById(&amp;quot;speed-slider&amp;quot;).value) + 10);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        console.log(document.getElementById(&amp;quot;speed&amp;quot;).value);
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    });
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;script&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Introducing Devy, written using Devy!</title>
        <published>2024-04-11T00:00:00+00:00</published>
        <updated>2024-04-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/introducing-devy-written-using-devy/"/>
        <id>https://alperenkeles.com/posts/introducing-devy-written-using-devy/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/introducing-devy-written-using-devy/">&lt;h1 id=&quot;introducing-devy-written-using-devy&quot;&gt;
 Introducing Devy, written
using Devy!
&lt;&#x2F;h1&gt;
&lt;p&gt;
 &lt;img alt=&quot;Devy Logo&quot; src=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&#x2F;blob&#x2F;630d2519cc3e62458f30e689470d2b6c34403a03&#x2F;devy-logo.png?raw=true&quot; style=&quot;display: block; margin-right: 20; float: left; width: 250px; &quot;&#x2F;&gt;
&lt;&#x2F;p&gt;
&lt;p&gt;
 This blog post introduces
 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;
  Devy
 &lt;&#x2F;a&gt;
 , the interactive blog
engine I’ve been working on. Devy is a static site generator that allows
you to write interactive blog posts using a combination of markdown and
a custom DSL. This post is written using Devy, so you can see how it
works in action!
&lt;&#x2F;p&gt;
&lt;p&gt;
 I like to write a lot of small code snippets in my code, and I want
my readers to be able to try them out. Using DCL(Declarative Component
Language), I can define components and their interactions in a simple
way. For example, the following code block defines a function for
turning a given string into uppercase:
&lt;&#x2F;p&gt;
&lt;p&gt;
 &lt;strong&gt;
  If you would like to see what this post looks like without
any CSS, check out the
  &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;devy.html&quot;&gt;
   raw HTML
  &lt;&#x2F;a&gt;
  .
 &lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;input id=&quot;toUpperCase&quot; type=&quot;hidden&quot; value=&quot;const toUpperCase = (str) =&amp;gt; str.toUpperCase();&quot;&#x2F;&gt;
&lt;script&gt;
 const toUpperCase = (str) =&gt; str.toUpperCase();
&lt;&#x2F;script&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot; name=&quot;toUpperCase&quot;&gt;const toUpperCase = (str) =&amp;gt; str.toUpperCase();&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;
 A simple feature, which probably should be the default behavior in
the future, is the ability to copy the code block to the clipboard. The
next code block is a simple example of a function that adds two numbers
together:
&lt;&#x2F;p&gt;
&lt;input id=&quot;add&quot; type=&quot;hidden&quot; value=&#x27;const add = (a, b) =&amp;gt; &quot;Answer is &quot; + (parseInt(a) + parseInt(b));&#x27;&#x2F;&gt;
&lt;button onclick=&quot;navigator.clipboard.writeText(document.getElementById(&#x27;add&#x27;).value);&quot;&gt;
 Copy
&lt;&#x2F;button&gt;
&lt;script&gt;
 const add = (a, b) =&gt; &quot;Answer is &quot; + (parseInt(a) + parseInt(b));
&lt;&#x2F;script&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot; name=&quot;add&quot;&gt;const add = (a, b) =&amp;gt; &quot;Answer is &quot; + (parseInt(a) + parseInt(b));&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;
 Line numbers are also an important feature(you need a little bit of
css to make them look good). Of course, we are not always limited to
Javascript, so here’s a Rust version of the
 &lt;code&gt;
  add
 &lt;&#x2F;code&gt;
 function.
&lt;&#x2F;p&gt;
&lt;style&gt;
 .line-numbers {
        display: inline-block;
        margin-right: 10;
        padding: 0;
    }
&lt;&#x2F;style&gt;
&lt;input id=&quot;add-rs&quot; type=&quot;hidden&quot; value=&quot;fn add(a: i32, b: i32) -&amp;gt; i32 {
    a + b
}&quot;&#x2F;&gt;
&lt;div style=&quot;display: flex; flex-direction: row;&quot;&gt;
 &lt;pre class=&quot;line-numbers&quot;&gt;&lt;code&gt;&lt;span&gt;1&lt;&#x2F;span&gt;
&lt;span&gt;2&lt;&#x2F;span&gt;
&lt;span&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;pre style=&quot;flex:1&quot;&gt;&lt;code class=&quot;language-rust&quot; name=&quot;add-rs&quot;&gt;fn add(a: i32, b: i32) -&amp;gt; i32 {
    a + b
}&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 That’s all pretty cool, but nothing impressive. The fun starts when
you can run code snippets and use their results. That’s where DCL comes
into play. Below is a short DCL snippet that uses the
 &lt;code&gt;
  add
 &lt;&#x2F;code&gt;
 function to add two numbers together. The first two lines define the
inputs and their initial values, and the third line defines the output
as a function of the result of adding the two inputs together.
&lt;&#x2F;p&gt;
&lt;input id=&quot;&quot; type=&quot;hidden&quot; value=&quot;```dcl {#add-example}
input1 : text-input := 5
input2 : text-input := 10
output : text-area := input1, input2 =&amp;gt; add(input1, input2)
```&quot;&#x2F;&gt;
&lt;pre&gt;&lt;code class=&quot;language-&quot; name=&quot;&quot;&gt;```dcl {#add-example}
input1 : text-input := 5
input2 : text-input := 10
output : text-area := input1, input2 =&amp;gt; add(input1, input2)
```&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;
 Devy compiles this DCL snippet into HTML and Javascript code that
updates the output whenever the inputs change as you can see below:
&lt;&#x2F;p&gt;
&lt;input id=&quot;add-example&quot; type=&quot;hidden&quot; value=&quot;input1 : text-input := 5
input2 : text-input := 10
output : text-area := input1, input2 =&amp;gt; add(input1, input2)&quot;&#x2F;&gt;
&lt;input id=&quot;input1&quot; type=&quot;text&quot; value=&quot;5&quot;&#x2F;&gt;
&lt;input id=&quot;input2&quot; type=&quot;text&quot; value=&quot;10&quot;&#x2F;&gt;
&lt;script&gt;
 document.getElementById(&quot;input1&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;output&quot;).value = add(document.getElementById(&quot;input1&quot;).value, document.getElementById(&quot;input2&quot;).value)
});
&lt;&#x2F;script&gt;
&lt;script&gt;
 document.getElementById(&quot;input2&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;output&quot;).value = add(document.getElementById(&quot;input1&quot;).value, document.getElementById(&quot;input2&quot;).value)
});
&lt;&#x2F;script&gt;
&lt;textarea id=&quot;output&quot;&gt;&lt;&#x2F;textarea&gt;
&lt;p&gt;
 Text inputs are not the only components available. Here’s an example
of a radio button that asks a question and provides feedback based on
the answer:
&lt;&#x2F;p&gt;
&lt;p&gt;
 &lt;strong&gt;
  Do you think Devy is a cool project?
 &lt;&#x2F;strong&gt;
&lt;&#x2F;p&gt;
&lt;input id=&quot;radio-example&quot; type=&quot;hidden&quot; value=&#x27;option : radio := yes, no, of course
feedback : paragraph := option =&amp;gt; option === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;&#x27;&#x2F;&gt;
&lt;input id=&quot;option&quot; type=&quot;hidden&quot;&#x2F;&gt;
&lt;input id=&quot;option_yes&quot; name=&quot;option&quot; type=&quot;radio&quot; value=&quot;yes&quot;&#x2F;&gt;
&lt;script&gt;
 document.getElementById(&quot;option_yes&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;option&quot;).value = &quot;yes&quot;;
    document.getElementById(&quot;option&quot;).dispatchEvent(new Event(&#x27;input&#x27;));
});
&lt;&#x2F;script&gt;
&lt;label for=&quot;option_yes&quot;&gt;
 yes
&lt;&#x2F;label&gt;
&lt;input id=&quot;option_no&quot; name=&quot;option&quot; type=&quot;radio&quot; value=&quot;no&quot;&#x2F;&gt;
&lt;script&gt;
 document.getElementById(&quot;option_no&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;option&quot;).value = &quot;no&quot;;
    document.getElementById(&quot;option&quot;).dispatchEvent(new Event(&#x27;input&#x27;));
});
&lt;&#x2F;script&gt;
&lt;label for=&quot;option_no&quot;&gt;
 no
&lt;&#x2F;label&gt;
&lt;input id=&quot;option_of course&quot; name=&quot;option&quot; type=&quot;radio&quot; value=&quot;of course&quot;&#x2F;&gt;
&lt;script&gt;
 document.getElementById(&quot;option_of course&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;option&quot;).value = &quot;of course&quot;;
    document.getElementById(&quot;option&quot;).dispatchEvent(new Event(&#x27;input&#x27;));
});
&lt;&#x2F;script&gt;
&lt;label for=&quot;option_of course&quot;&gt;
 of course
&lt;&#x2F;label&gt;
&lt;script&gt;
 document.getElementById(&quot;option&quot;).addEventListener(&#x27;input&#x27;, function(event) {
    document.getElementById(&quot;feedback&quot;).innerHTML = document.getElementById(&quot;option&quot;).value === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;
});
&lt;&#x2F;script&gt;
&lt;p id=&quot;feedback&quot;&gt;
&lt;&#x2F;p&gt;
&lt;details&gt;
 &lt;summary&gt;
  Click to see the CDL code for the question!
 &lt;&#x2F;summary&gt;
 &lt;input id=&quot;&quot; type=&quot;hidden&quot; value=&#x27;```dcl {#radio-example}
option : radio := yes, no, of course
feedback : paragraph := option =&amp;gt; option === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;
```&#x27;&#x2F;&gt;
 &lt;pre&gt;&lt;code class=&quot;language-&quot; name=&quot;&quot;&gt;```dcl {#radio-example}
option : radio := yes, no, of course
feedback : paragraph := option =&amp;gt; option === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;
```&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;details&gt;
&lt;p&gt;
 Aside from interactivity, I also want to focus on easily creating
diagrams and other visualizations. For now, I started with the
 &lt;a href=&quot;https:&#x2F;&#x2F;mermaid.js.org&quot;&gt;
  Mermaid
 &lt;&#x2F;a&gt;
 diagrams, which are simple to
write and look great. Here’s an example of a simple flowchart:
&lt;&#x2F;p&gt;
&lt;input id=&quot;mermaid-0&quot; type=&quot;hidden&quot; value=&quot;graph LR
A[Second diagram] --&amp;gt; B[Something]
B --&amp;gt; C[Something]
C --&amp;gt; D[Something]
A --&amp;gt; D[Something]&quot;&#x2F;&gt;
&lt;script src=&quot;https:&#x2F;&#x2F;cdn.jsdelivr.net&#x2F;npm&#x2F;mermaid@8&#x2F;dist&#x2F;mermaid.min.js&quot;&gt;
&lt;&#x2F;script&gt;
&lt;script&gt;
 setTimeout(() =&gt; {
                                            mermaid.render(
                                                &quot;mermaid-0-renderer&quot;,
                                                document.getElementById(&quot;mermaid-0&quot;).value,
                                                (code) =&gt; {document.getElementById(&quot;mermaid-0-rendered&quot;).innerHTML = code}
                                            ), 100});
&lt;&#x2F;script&gt;
&lt;div id=&quot;mermaid-0-rendered&quot;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 One cool thing I added(which doesn’t exist natively in Mermaid) is
animating the diagrams. Users can easily add a
 &lt;code&gt;
  rate
 &lt;&#x2F;code&gt;
 attribute to the mermaid code block to control the animation speed. For
example, the following diagram animates at a rate of 1000ms:
&lt;&#x2F;p&gt;
&lt;input id=&quot;mermaid-1&quot; type=&quot;hidden&quot; value=&quot;graph LR
A[Second diagram]
A[Second diagram] --&amp;gt; B[Something]
B --&amp;gt; C[Something]
C --&amp;gt; D[Something]
A --&amp;gt; D[Something]&quot;&#x2F;&gt;
&lt;script src=&quot;https:&#x2F;&#x2F;cdn.jsdelivr.net&#x2F;npm&#x2F;mermaid@8&#x2F;dist&#x2F;mermaid.min.js&quot;&gt;
&lt;&#x2F;script&gt;
&lt;script&gt;
 setInterval(() =&gt; {
                                            let value = document.getElementById(&quot;mermaid-1&quot;).value;
                                            let frames = value.split(&quot;\n&quot;);
                                            let numberOfFrames = frames.length - 1;
                                            let currentSecond = Math.floor(Date.now() &#x2F; 1000);
                                            let currentFrame = (currentSecond % numberOfFrames) + 1;
                                            let frameContent = frames.slice(0, currentFrame + 1).join(&quot;\n&quot;);
                                            mermaid.render(
                                                &quot;mermaid-1-renderer&quot;,
                                                frameContent,
                                                (code) =&gt; {document.getElementById(&quot;mermaid-1-rendered&quot;).innerHTML = code}
                                            )
                                        }, 1000);
&lt;&#x2F;script&gt;
&lt;div id=&quot;mermaid-1-rendered&quot;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 The current animation system is pretty simple, but I plan to add (1)
phase-based animations where user can define the frame each element
should appear, (2) control mechanisms for animations such as dynamic
speed control, and (3) layout preserving animation where all elements do
not destructively move around.
&lt;&#x2F;p&gt;
&lt;p&gt;
 That concludes the current state of Devy. It’s a brand new project,
and there are lots of features I want to add. If you have any ideas,
please let me know by opening an issue on the
 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;
  GitHub repository
 &lt;&#x2F;a&gt;
 . I’m
excited to see where this project goes, and I hope you are too! Also,
please leave a star on the repository if you like the project!
&lt;&#x2F;p&gt;
&lt;p&gt;
 &lt;strong&gt;
  Repository Link:
 &lt;&#x2F;strong&gt;
 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;
  https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy
 &lt;&#x2F;a&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;appendix&quot;&gt;
 Appendix
&lt;&#x2F;h2&gt;
&lt;p&gt;
 Below is the Markdown code for all of this article.
&lt;&#x2F;p&gt;
&lt;input id=&quot;&quot; type=&quot;hidden&quot; value=&quot;# Introducing Devy, written using Devy!
&lt;p&gt;&amp;lt;img src=&amp;quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&#x2F;blob&#x2F;630d2519cc3e62458f30e689470d2b6c34403a03&#x2F;devy-logo.png?raw=true&amp;quot; 
alt=&amp;quot;Devy Logo&amp;quot; 
style=&amp;quot;display: block; margin-right: 20; float: left; width: 250px; &amp;quot; &#x2F;&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;This blog post introduces &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;Devy&lt;&#x2F;a&gt;, the interactive 
blog engine I&#x27;ve been working on. Devy is a static site generator that allows you 
to write interactive blog posts using a combination of markdown and a custom DSL.
This post is written using Devy, so you can see how it works in action!&lt;&#x2F;p&gt;
&lt;p&gt;I like to write a lot of small code snippets in my code, and I want my readers to be
able to try them out. Using DCL(Declarative Component Language), I can define components
and their interactions in a simple way. For example, the following code block defines
a function for turning a given string into uppercase:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;If you would like to see what this post looks like without any CSS, check out the &lt;a href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;posts&#x2F;introducing-devy-written-using-devy&#x2F;devy.html&quot;&gt;raw HTML&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js  {#toUpperCase .script .show}&quot; class=&quot;language-js  {#toUpperCase .script .show} z-code&quot;&gt;&lt;code class=&quot;language-js  {#toUpperCase .script .show}&quot; data-lang=&quot;js  {#toUpperCase .script .show}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;const toUpperCase = (str) =&amp;amp;gt; str.toUpperCase();
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A simple feature, which probably should be the default behavior in the future, is the
ability to copy the code block to the clipboard. The next code block is a simple example
of a function that adds two numbers together:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;js  {#add .script .show .copy}&quot; class=&quot;language-js  {#add .script .show .copy} z-code&quot;&gt;&lt;code class=&quot;language-js  {#add .script .show .copy}&quot; data-lang=&quot;js  {#add .script .show .copy}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;const add = (a, b) =&amp;amp;gt; &amp;amp;quot;Answer is &amp;amp;quot; + (parseInt(a) + parseInt(b));
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Line numbers are also an important feature(you need a little bit of css to make them look
good). Of course, we are not always limited to Javascript, so here&#x27;s a Rust version of
the &lt;code&gt;add&lt;&#x2F;code&gt; function.&lt;&#x2F;p&gt;
&lt;p&gt;&amp;lt;style&amp;gt;
.line-numbers {
display: inline-block;
margin-right: 10;
padding: 0;
}
&amp;lt;&#x2F;style&amp;gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;rust  {#add-rs .show .linenumbers}&quot; class=&quot;language-rust  {#add-rs .show .linenumbers} z-code&quot;&gt;&lt;code class=&quot;language-rust  {#add-rs .show .linenumbers}&quot; data-lang=&quot;rust  {#add-rs .show .linenumbers}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;fn add(a: i32, b: i32) -&amp;amp;gt; i32 {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    a + b
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That&#x27;s all pretty cool, but nothing impressive. The fun starts when you can run
code snippets and use their results. That&#x27;s where DCL comes into play. Below is
a short DCL snippet that uses the &lt;code&gt;add&lt;&#x2F;code&gt; function to add two numbers together.
The first two lines define the inputs and their initial values, and the third
line defines the output as a function of the result of adding the two inputs together.&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;```dcl {#add-example}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;input1 : text-input := 5
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;input2 : text-input := 10
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;output : text-area := input1, input2 =&amp;amp;gt; add(input1, input2)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;```
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Devy compiles this DCL snippet into HTML and Javascript code that updates
the output whenever the inputs change as you can see below:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;dcl {#add-example}&quot; class=&quot;language-dcl {#add-example} z-code&quot;&gt;&lt;code class=&quot;language-dcl {#add-example}&quot; data-lang=&quot;dcl {#add-example}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;input1 : text-input := 5
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;input2 : text-input := 10
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;output : text-area := input1, input2 =&amp;amp;gt; add(input1, input2)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Text inputs are not the only components available. Here&#x27;s an example of a
radio button that asks a question and provides feedback based on the answer:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Do you think Devy is a cool project?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;dcl {#radio-example}&quot; class=&quot;language-dcl {#radio-example} z-code&quot;&gt;&lt;code class=&quot;language-dcl {#radio-example}&quot; data-lang=&quot;dcl {#radio-example}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;option : radio := yes, no, of course
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;feedback : paragraph := option =&amp;amp;gt; option === &amp;amp;quot;of course&amp;amp;quot; ? &amp;amp;quot;Great job!&amp;amp;quot; : &amp;amp;quot;Incorrect! Try Again!&amp;amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;Click to see the CDL code for the question!&amp;lt;&#x2F;summary&amp;gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;```dcl {#radio-example}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;option : radio := yes, no, of course
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;feedback : paragraph := option =&amp;amp;gt; option === &amp;amp;quot;of course&amp;amp;quot; ? &amp;amp;quot;Great job!&amp;amp;quot; : &amp;amp;quot;Incorrect! Try Again!&amp;amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;```
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&amp;lt;&#x2F;details&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Aside from interactivity, I also want to focus on easily creating diagrams
and other visualizations. For now, I started with 
the &lt;a href=&quot;https:&#x2F;&#x2F;mermaid.js.org&quot;&gt;Mermaid&lt;&#x2F;a&gt; diagrams, which are simple to write
and look great. Here&#x27;s an example of a simple flowchart:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;mermaid {#mermaid-0}&quot; class=&quot;language-mermaid {#mermaid-0} z-code&quot;&gt;&lt;code class=&quot;language-mermaid {#mermaid-0}&quot; data-lang=&quot;mermaid {#mermaid-0}&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;graph LR
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;A[Second diagram] --&amp;amp;gt; B[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;B --&amp;amp;gt; C[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;C --&amp;amp;gt; D[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;A --&amp;amp;gt; D[Something]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;One cool thing I added(which doesn&#x27;t exist natively in Mermaid) is
animating the diagrams. Users can easily add a &lt;code&gt;rate&lt;&#x2F;code&gt; attribute to
the mermaid code block to control the animation speed. For example,
the following diagram animates at a rate of 1000ms:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;mermaid {#mermaid-1 rate&quot; class=&quot;language-mermaid {#mermaid-1 rate z-code&quot;&gt;&lt;code class=&quot;language-mermaid {#mermaid-1 rate&quot; data-lang=&quot;mermaid {#mermaid-1 rate&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;graph LR
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;A[Second diagram]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;A[Second diagram] --&amp;amp;gt; B[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;B --&amp;amp;gt; C[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;C --&amp;amp;gt; D[Something]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;A --&amp;amp;gt; D[Something]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The current animation system is pretty simple, but I plan to add (1) phase-based
animations where user can define the frame each element should appear, (2) control
mechanisms for animations such as dynamic speed control, and (3) layout preserving
animation where all elements do not destructively move around.&lt;&#x2F;p&gt;
&lt;p&gt;That concludes the current state of Devy. It&#x27;s a brand new project, and there are
lots of features I want to add. If you have any ideas, please let me know by opening
an issue on the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;GitHub repository&lt;&#x2F;a&gt;. I&#x27;m excited
to see where this project goes, and I hope you are too! Also, please leave a star
on the repository if you like the project!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Repository Link:&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&lt;&#x2F;a&gt;&amp;quot;&#x2F;&amp;gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code class=&quot;language-&quot; name=&quot;&quot;&gt;# Introducing Devy, written using Devy!

&amp;lt;img src=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy&#x2F;blob&#x2F;630d2519cc3e62458f30e689470d2b6c34403a03&#x2F;devy-logo.png?raw=true&quot; 
alt=&quot;Devy Logo&quot; 
style=&quot;display: block; margin-right: 20; float: left; width: 250px; &quot; &#x2F;&amp;gt;

This blog post introduces [Devy](https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy), the interactive 
blog engine I&#x27;ve been working on. Devy is a static site generator that allows you 
to write interactive blog posts using a combination of markdown and a custom DSL.
This post is written using Devy, so you can see how it works in action!

I like to write a lot of small code snippets in my code, and I want my readers to be
able to try them out. Using DCL(Declarative Component Language), I can define components
and their interactions in a simple way. For example, the following code block defines
a function for turning a given string into uppercase:

**If you would like to see what this post looks like without any CSS, check out the [raw HTML](devy.html).**

```js  {#toUpperCase .script .show}
const toUpperCase = (str) =&amp;gt; str.toUpperCase();
```

A simple feature, which probably should be the default behavior in the future, is the
ability to copy the code block to the clipboard. The next code block is a simple example
of a function that adds two numbers together:

```js  {#add .script .show .copy}
const add = (a, b) =&amp;gt; &quot;Answer is &quot; + (parseInt(a) + parseInt(b));
```

Line numbers are also an important feature(you need a little bit of css to make them look
good). Of course, we are not always limited to Javascript, so here&#x27;s a Rust version of
the `add` function.

&amp;lt;style&amp;gt;
    .line-numbers {
        display: inline-block;
        margin-right: 10;
        padding: 0;
    }
&amp;lt;&#x2F;style&amp;gt;

```rust  {#add-rs .show .linenumbers}
fn add(a: i32, b: i32) -&amp;gt; i32 {
    a + b
}
```

That&#x27;s all pretty cool, but nothing impressive. The fun starts when you can run
code snippets and use their results. That&#x27;s where DCL comes into play. Below is
a short DCL snippet that uses the `add` function to add two numbers together.
The first two lines define the inputs and their initial values, and the third
line defines the output as a function of the result of adding the two inputs together.

````
```dcl {#add-example}
input1 : text-input := 5
input2 : text-input := 10
output : text-area := input1, input2 =&amp;gt; add(input1, input2)
```
````

Devy compiles this DCL snippet into HTML and Javascript code that updates
the output whenever the inputs change as you can see below:

```dcl {#add-example}
input1 : text-input := 5
input2 : text-input := 10
output : text-area := input1, input2 =&amp;gt; add(input1, input2)
```

Text inputs are not the only components available. Here&#x27;s an example of a
radio button that asks a question and provides feedback based on the answer:


**Do you think Devy is a cool project?**

```dcl {#radio-example}
option : radio := yes, no, of course
feedback : paragraph := option =&amp;gt; option === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;
```

&amp;lt;details&amp;gt;
  &amp;lt;summary&amp;gt;Click to see the CDL code for the question!&amp;lt;&#x2F;summary&amp;gt;

````
```dcl {#radio-example}
option : radio := yes, no, of course
feedback : paragraph := option =&amp;gt; option === &quot;of course&quot; ? &quot;Great job!&quot; : &quot;Incorrect! Try Again!&quot;
```
````

&amp;lt;&#x2F;details&amp;gt;

Aside from interactivity, I also want to focus on easily creating diagrams
and other visualizations. For now, I started with 
the [Mermaid](https:&#x2F;&#x2F;mermaid.js.org) diagrams, which are simple to write
 and look great. Here&#x27;s an example of a simple flowchart:


```mermaid {#mermaid-0}
graph LR
A[Second diagram] --&amp;gt; B[Something]
B --&amp;gt; C[Something]
C --&amp;gt; D[Something]
A --&amp;gt; D[Something]
```

One cool thing I added(which doesn&#x27;t exist natively in Mermaid) is
animating the diagrams. Users can easily add a `rate` attribute to
the mermaid code block to control the animation speed. For example,
the following diagram animates at a rate of 1000ms:

```mermaid {#mermaid-1 rate=1000}
graph LR
A[Second diagram]
A[Second diagram] --&amp;gt; B[Something]
B --&amp;gt; C[Something]
C --&amp;gt; D[Something]
A --&amp;gt; D[Something]
```

The current animation system is pretty simple, but I plan to add (1) phase-based
animations where user can define the frame each element should appear, (2) control
mechanisms for animations such as dynamic speed control, and (3) layout preserving
animation where all elements do not destructively move around.

That concludes the current state of Devy. It&#x27;s a brand new project, and there are
lots of features I want to add. If you have any ideas, please let me know by opening
an issue on the [GitHub repository](https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy). I&#x27;m excited
to see where this project goes, and I hope you are too! Also, please leave a star
on the repository if you like the project!

**Repository Link:** [https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy](https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;devy)&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Designing A Cryptic Language Puzzle</title>
        <published>2024-03-23T00:00:00+00:00</published>
        <updated>2024-03-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/designing-a-cryptic-language-puzzle/"/>
        <id>https://alperenkeles.com/posts/designing-a-cryptic-language-puzzle/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/designing-a-cryptic-language-puzzle/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;1d68&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;d049&quot; name=&quot;d049&quot;&gt;
      Designing A Cryptic
                            Language Puzzle
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;19bc&quot; name=&quot;19bc&quot;&gt;
      Last week, I published a Cryptic
                            Language called Kelesce on my website, with a given text as the puzzle, and some set of
                            clues I added to the website over the course of the week. Below is a small piece of the
                            puzzle and a link to the website.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9b41&quot; name=&quot;9b41&quot;&gt;
      …
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d066&quot; name=&quot;d066&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       If you are interested in solving the puzzle, DO
                                NOT READ the rest of this article, as it spoils the design and the solution. Click the
                                link below and go to the puzzle site.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;c860&quot; name=&quot;c860&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;puzzle.alperenkeles.com&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;puzzle.alperenkeles.com&#x2F;&quot; title=&quot;https:&#x2F;&#x2F;puzzle.alperenkeles.com&#x2F;&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Kelesce
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        A fun coding
                                    puzzle
       &lt;&#x2F;em&gt;
       puzzle.alperenkeles.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock&quot; data-media-id=&quot;55cc0316df8b7f9d6fd704e4fe99016c&quot; href=&quot;https:&#x2F;&#x2F;puzzle.alperenkeles.com&#x2F;&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--mixtapeEmbed&quot; id=&quot;f674&quot; name=&quot;f674&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;968&quot; data-image-id=&quot;1*kvp0GFtSjtPPMikVRWljaA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2388&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*kvp0GFtSjtPPMikVRWljaA.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       First 10 words!
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;f0aa&quot; name=&quot;f0aa&quot;&gt;
      This article is two fold. The
                            first part focuses my thought process on creating Kelesce, and the second part focuses on
                            the decipher implementation.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;59fc&quot; name=&quot;59fc&quot;&gt;
      A Very Short Cryptology Primer
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8f19&quot; name=&quot;8f19&quot;&gt;
      Cryptography 101 lectures usually
                            start with the history of cryptology, and the famous
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caesar_cipher&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Caesar_cipher&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Caesar
                                Cipher
      &lt;&#x2F;a&gt;
      . In a caesar cipher, encryption relies on some distance metric
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       d
      &lt;&#x2F;em&gt;
      that shifts the value of each letter by the given
                            amount. Below, we see a Caesar(2), where each letter is mapped to the letter that comes 2
                            after them.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8716&quot; name=&quot;8716&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;666&quot; data-image-id=&quot;1*IkXv-Orws3cjSeet7MF-Rg.png&quot; data-width=&quot;1252&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*IkXv-Orws3cjSeet7MF-Rg.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       A Simple Illustration of a Caesar Cipher
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;efde&quot; name=&quot;efde&quot;&gt;
      It is pretty simple to come up
                            with a Caesar Cipher implementation on the fly. Below is a sample Python implementation for
                            a very naive Caesar Cipher.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;1&quot; id=&quot;4a61&quot; name=&quot;4a61&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# This implementation assumes ASCII encoding, &lt;&#x2F;span&gt;&lt;br&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# and all alphanumeric characters.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;caesar_cipher&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;text, shift&lt;&#x2F;span&gt;):&lt;br&#x2F;&gt;    result = &lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; i &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(text)):&lt;br&#x2F;&gt;        char = text[i]&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; char.isupper():&lt;br&#x2F;&gt;            result += &lt;span class=&quot;hljs-built_in&quot;&gt;chr&lt;&#x2F;span&gt;((&lt;span class=&quot;hljs-built_in&quot;&gt;ord&lt;&#x2F;span&gt;(char) + shift - &lt;span class=&quot;hljs-number&quot;&gt;65&lt;&#x2F;span&gt;) % &lt;span class=&quot;hljs-number&quot;&gt;26&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;65&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;            result += &lt;span class=&quot;hljs-built_in&quot;&gt;chr&lt;&#x2F;span&gt;((&lt;span class=&quot;hljs-built_in&quot;&gt;ord&lt;&#x2F;span&gt;(char) + shift - &lt;span class=&quot;hljs-number&quot;&gt;97&lt;&#x2F;span&gt;) % &lt;span class=&quot;hljs-number&quot;&gt;26&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;97&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; result&lt;&#x2F;br&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;963b&quot; name=&quot;963b&quot;&gt;
      Deciphering a Caesar Cipher is
                            also rather straightforward. You can just try all 25 potential shifts and see which one
                            turns the cryptic result into a legible English sentence.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;a361&quot; name=&quot;a361&quot;&gt;
      How to Design A New Cipher for Fun
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2248&quot; name=&quot;2248&quot;&gt;
      So, we saw the oldest cipher in the
                            world, now the question is can we design a new one that is not already out there. (full
                            disclosure, I’m not a cryptography expert, and it’s very probably that my design is not
                            actually novel)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bac3&quot; name=&quot;bac3&quot;&gt;
      There are several design principles
                            I use:
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;885a&quot; name=&quot;885a&quot;&gt;
       The cipher-text should be
                                easy(and unambiguous) to decipher for someone who knows the ciphering mechanism.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;b5fa&quot; name=&quot;b5fa&quot;&gt;
       Cipher should consist of
                                multiple layers, so the game(of solving) has a feeling of progress, and it is easy to
                                provide hints when needed without spoiling all the fun.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f6ef&quot; name=&quot;f6ef&quot;&gt;
       The layers should be not be
                                simply rigorous mathematical obfuscations, using magic numbers that can only be
                                discovered by some complex brute force search; but rather simple but interesting ideas.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;557a&quot; name=&quot;557a&quot;&gt;
      I guess you could say these are
                            kind of obvious, and not very helpful, so let’s try to get into the real thing. How to
                            design Kelesce?
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5a7c&quot; name=&quot;5a7c&quot;&gt;
      Phase 1: Decide on a
                            central theme.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;bc36&quot; name=&quot;bc36&quot;&gt;
      What should be the focus of the
                            language? Should it be text, emojis, maybe music? I could use sound waves and frequencies,
                            or I could go into 2d visual structures, which opens up a whole new world. I could use
                            polygons, blobs made out of bezier curves, I could add new dimensions using colors, or as in
                            the case of Kelesce,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       I could just use
                                lines
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;b81e&quot; name=&quot;b81e&quot;&gt;
      Phase 2: Decide on the unit of
                            analysis.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;ba5d&quot; name=&quot;ba5d&quot;&gt;
      Every cipher has a unit of
                            analysis, the smallest structure you can independently analyze. In the case of a Caesar
                            Cipher, the unit of analysis is one character. If instead we use a
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Vigenère_cipher&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Vigenère_cipher&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Vigenère
                                cipher
      &lt;&#x2F;a&gt;
      , which generalized Caesar Cipher to arbitrary length units by using a list of
                            shifts instead of only one. Whereas a Caesar Cipher might have
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       2
      &lt;&#x2F;strong&gt;
      as its shift factor, a Vigenère
                            cipher has some list [2, 5, 3, 6], where all characters
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       % 4
      &lt;&#x2F;code&gt;
      is ciphered with 2, all characters
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       %4 + 1
      &lt;&#x2F;code&gt;
      is ciphered with 5 and so on. The unit
                            of analysis for a Vigenère cipher is the length of its key list.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1bc9&quot; name=&quot;1bc9&quot;&gt;
      In our case, the unit of analysis is
                            a
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       word.
      &lt;&#x2F;strong&gt;
      Each square in Kelesce is a
                            word, and the cipher-text for two different words do not depend on each other, hence they
                            can be separately analyzed.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;28a7&quot; name=&quot;28a7&quot;&gt;
      Phase 3: Start putting your
                            obfuscation layers in.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;73be&quot; name=&quot;73be&quot;&gt;
      Now that we decided on our theme
                            and the largest dependent cipher unit, we need to decide how to cipher it. We need to define
                            some
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       signals
      &lt;&#x2F;strong&gt;
      and
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       noise
      &lt;&#x2F;strong&gt;
      that will disguise our signals.
                            The signals define how we map the cipher-text with the plain-text, and the noise hides the
                            signals from the viewer.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;06fe&quot; name=&quot;06fe&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Layer 1: Represent every letter using
                                ratios.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;75e8&quot; name=&quot;75e8&quot;&gt;
      The first decision I made when
                            creating Kelesce was about how to express each letter, and I decided to use ratios that
                            increase&#x2F;decrease by 0.05 throughout the English alphabet.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;dart&quot; data-code-block-mode=&quot;1&quot; id=&quot;e4f9&quot; name=&quot;e4f9&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;A&#x2F;a =&amp;gt; &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;B&#x2F;b =&amp;gt; &lt;span class=&quot;hljs-number&quot;&gt;1.05&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;C&#x2F;c =&amp;gt; &lt;span class=&quot;hljs-number&quot;&gt;0.95&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;D&#x2F;d =&amp;gt; &lt;span class=&quot;hljs-number&quot;&gt;1.10&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;E&#x2F;e =&amp;gt; &lt;span class=&quot;hljs-number&quot;&gt;0.90&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;... and so &lt;span class=&quot;hljs-keyword&quot;&gt;on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;886e&quot; name=&quot;886e&quot;&gt;
      It is important to note that these
                            ratios can be actually used in so many different ways. I could use them as line lengths with
                            respect to some magic number, I could make them areas, or I could turn them into colors.
                            There goes my second decision.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;aed0&quot; name=&quot;aed0&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Layer 2: Represent each letter using 2
                                lines.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5e2f&quot; name=&quot;5e2f&quot;&gt;
      I decided to use 2 lines for each
                            letter, where the ratio is the length of the first line to the length of the second line.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8031&quot; name=&quot;8031&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;732&quot; data-image-id=&quot;1*UmFQqWN9iizHeMYMs5OIqA.png&quot; data-width=&quot;1730&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*UmFQqWN9iizHeMYMs5OIqA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a213&quot; name=&quot;a213&quot;&gt;
      This decision has an important
                            consequence, namely that it reduces the scope of the cipher to mostly programmers, as it’s
                            quite hard to manually measure the ratios.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;42ae&quot; name=&quot;42ae&quot;&gt;
      So, now we know how to decode a
                            letter when we see one, we just compute the ratios of the lines and we are done, but where
                            do we even put the lines?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c2e6&quot; name=&quot;c2e6&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Layer 3: Rotate, rotate, rotate,
                                rotate…
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ee83&quot; name=&quot;ee83&quot;&gt;
      We defined how to represent a word
                            in abstract terms, but how do we concretely place and compose the letters such that they are
                            unambiguously decipherable?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eed4&quot; name=&quot;eed4&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The first decision
      &lt;&#x2F;strong&gt;
      I made is to put
                            them inside squares.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;583d&quot; name=&quot;583d&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The second decision
      &lt;&#x2F;strong&gt;
      is that each line
                            pair starts from a random position on one side of the square, and makes a counter-clockwise
                            turn(top-to-right, right-to-bottom…).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bb82&quot; name=&quot;bb82&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The third decision
      &lt;&#x2F;strong&gt;
      is that the first
                            line starts from the top, and runs clockwise(top, right, bottom, left, top…).
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;cfce&quot; name=&quot;cfce&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;961&quot; data-image-id=&quot;1*wiseH3Xnj1e8rzMcRXEBYQ.png&quot; data-width=&quot;2956&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*wiseH3Xnj1e8rzMcRXEBYQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b084&quot; name=&quot;b084&quot;&gt;
      The next question is how to
                            handle the fifth letter, because now we have ambiguity. If there are two lines starting at
                            the top, which one is the first and which one is the fifth?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ba0b&quot; name=&quot;ba0b&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Layer 5: When in doubt, nest.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;df44&quot; name=&quot;df44&quot;&gt;
      This was an choice, when you need to
                            reuse a side, pick a position on the inner rectangle constrained by the previous word. See
                            the figure below for clarity.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7ebb&quot; name=&quot;7ebb&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;954&quot; data-image-id=&quot;1*ON8BjnIxFBBw4RGkFMl3sA.png&quot; data-width=&quot;852&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*ON8BjnIxFBBw4RGkFMl3sA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;25c3&quot; name=&quot;25c3&quot;&gt;
      This way, when you are reading
                            the cipher-text, you start from the largest rectangle for the current edge of the rectangle,
                            and go progressively inside, as if you’re peeling an onion.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;de2a&quot; name=&quot;de2a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Layer 6: Normalization
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;72f3&quot; name=&quot;72f3&quot;&gt;
      As you might have realized, I never
                            talked about punctuations, and I use the same ratios for uppercase and lowercase letters, so
                            the given plain text is first processed into a normalized form, and then converted into the
                            lines and squares.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b109&quot; name=&quot;b109&quot;&gt;
      The first part of the normalization
                            is that all characters that are not from the English alphabet are deleted, all characters
                            are lowercased, and words are merged together.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;ini&quot; data-code-block-mode=&quot;1&quot; id=&quot;dff1&quot; name=&quot;dff1&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-attr&quot;&gt;&quot;Hello, World!&quot;&lt;&#x2F;span&gt; =&amp;gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;helloworld&quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;d36f&quot; name=&quot;d36f&quot;&gt;
      With that, we conclude our
                            obfuscation layers. There is one more small transformation I added for the sake of
                            aesthetics, but it doesn’t affect the cipher that much. I wanted the puzzle to look nicer,
                            so I added a little bit of padding words at the end. If the length of the text is not a
                            multiple of 5, then a number of “hahaha” is added to the text to make it a multiple of 5.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       So, the last word in the clue is
                                hahaha
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;9d85&quot; name=&quot;9d85&quot;&gt;
      Part 2: How to implement a
                            deciphering algorithm for Kelesce?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;0292&quot; name=&quot;0292&quot;&gt;
      I hope others who solve the puzzle
                            on their own post some write-ups, but for now I’ll share my own methodology.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f84f&quot; name=&quot;f84f&quot;&gt;
      The 4th clue, which is “Two is all
                            you need”, actually refers to the solution, where 2 pixels are actually all you need. If you
                            can detect the starting and end points of a line, you can decide which letter it is.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bdb1&quot; name=&quot;bdb1&quot;&gt;
      The algorithm for line detection is
                            rather cumbersome to implement but it’s not really complicated.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c826&quot; name=&quot;c826&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The first step
      &lt;&#x2F;strong&gt;
      is to find all points
                            where a line is perpendicular to an edge.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8d5c&quot; name=&quot;8d5c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The second step
      &lt;&#x2F;strong&gt;
      is to follow the line
                            as far as it goes.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4d14&quot; name=&quot;4d14&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The third step
      &lt;&#x2F;strong&gt;
      is to turn
                            counter-clockwise, and find the other edge.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;90e6&quot; name=&quot;90e6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1004&quot; data-image-id=&quot;1*mrEDnG6zKF16X0dz_5jFAg.png&quot; data-width=&quot;3057&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*mrEDnG6zKF16X0dz_5jFAg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;ca10&quot; name=&quot;ca10&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The forth step
      &lt;&#x2F;strong&gt;
      is to convert the line
                            ratios into letters, and order the letters in the way they are positioned, and we are done.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cd6b&quot; name=&quot;cd6b&quot;&gt;
      Of course, this algorithm has a few
                            pitfalls(if a parallel line is right next to the edge, it might think there are 198 lines
                            leaning against that edge, or if there are two overlapping lines), but they don’t show up in
                            practice.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;dff9&quot; name=&quot;dff9&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1001&quot; data-image-id=&quot;1*h8_hO2Z-vb5P1CKIqFRo0Q.png&quot; data-width=&quot;1929&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*h8_hO2Z-vb5P1CKIqFRo0Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;a70d&quot; name=&quot;a70d&quot;&gt;
      Close-up
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;a2a9&quot; name=&quot;a2a9&quot;&gt;
      With that, I
                            conclude the article. If you tried to solve the puzzle, I hope you had fun trying! If you
                            just read the article, I hope you liked it!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;36d480faec51&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2024-03-23T16:05:43.471Z&quot;&gt;
     March 23, 2024
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;designing-a-cryptic-language-puzzle-36d480faec51&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Solving Algorithmic Problems in The Wild</title>
        <published>2024-03-06T00:00:00+00:00</published>
        <updated>2024-03-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/solving-algorithmic-problems-in-the-wild/"/>
        <id>https://alperenkeles.com/posts/solving-algorithmic-problems-in-the-wild/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/solving-algorithmic-problems-in-the-wild/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;e446&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;373a&quot; name=&quot;373a&quot;&gt;
      Solving Algorithmic Problems in The Wild
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a381&quot; name=&quot;a381&quot;&gt;
      For most software engineers, algorithmic problems are this bizarre type of problems that they only have to know in order to succeed in their interviews and get a job. Perhaps most readers will concede that they are sometimes useful, but I would imagine only a handful few studied solving algorithms outside of LeetCode or their college classes.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;516e&quot; name=&quot;516e&quot;&gt;
      The premise of this article is that the methods for solving your Algorithms homework or LeetCode mediums are ill-equipped to handle the algorithmic problems you will face as a software engineer, and I hope to provide you with a fresh technique I myself employ. To be fair to the reader, the two examples I talk about in the article are far from any reasonable definition of
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       the Wild,
      &lt;&#x2F;strong&gt;
      but let’s bear with me for now!
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;d0ee&quot; name=&quot;d0ee&quot;&gt;
      What is the problem with solving LeetCode?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;4be1&quot; name=&quot;4be1&quot;&gt;
      The problem is not that solving LeetCode problems is bad, per se, but how the platform is designed in getting you to solve questions.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;0868&quot; name=&quot;0868&quot;&gt;
       The set of inputs is fixed and limited. Our instincts urge us to submit the least good enough code that passes all the existing inputs without considering the problem in more depth.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;074f&quot; name=&quot;074f&quot;&gt;
       The feedback from the platform is imminent, the number of tests passing, leading to the fact that we tend to ignore any other forms of possible feedback in terms of correctness and performance.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;a64d&quot; name=&quot;a64d&quot;&gt;
      You might have realized that the two points have nearly identical indications, we need to understand what the problem is asking and the algorithm we design in more detail than LeetCode forces or sets us to do.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d411&quot; name=&quot;d411&quot;&gt;
      Why? Because we don’t have such nice input-output examples in reality. The ones we have are called unit tests, which are impossible to write for any sufficiently complex algorithmic problem. Imagine you are implementing a new shortest path algorithm for graphs that has certain types of properties, how many graphs and input-output examples would you need to see to have a sufficiently solid belief on the correctness of your algorithm?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;64e7&quot; name=&quot;64e7&quot;&gt;
      If unit tests are insufficient, what can we do then? Well, there is the classic computer science approach of picking a pen and paper, writing down the invariants of the algorithms and an inductive proof; or you could just find
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       a friend doing a Ph.D. in formal verification
      &lt;&#x2F;a&gt;
      to write your proofs for you. For the rest of this article, I’ll work on convincing you that coming up with some properties for your problem and writing random tests in the style of
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;QuickCheck&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;QuickCheck&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       QuickCheck
      &lt;&#x2F;a&gt;
      is a better option.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5753&quot; name=&quot;5753&quot;&gt;
      What the heck is a property?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;7113&quot; name=&quot;7113&quot;&gt;
      A property is a weird thing. In tutorials for property-based testing, you usually see properties like this.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;cpp&quot; data-code-block-mode=&quot;1&quot; id=&quot;f2de&quot; name=&quot;f2de&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;list.&lt;span class=&quot;hljs-built_in&quot;&gt;reverse&lt;&#x2F;span&gt;().&lt;span class=&quot;hljs-built_in&quot;&gt;reverse&lt;&#x2F;span&gt;() == list&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Reversing a list twice gives you the same list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--pre graf--preV2&quot; data-code-block-lang=&quot;go&quot; data-code-block-mode=&quot;1&quot; id=&quot;2b25&quot; name=&quot;2b25&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;list.&lt;span class=&quot;hljs-built_in&quot;&gt;append&lt;&#x2F;span&gt;(x).&lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;() == list.&lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;() + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Adding an item to a list increases its length by one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--pre graf--preV2&quot; data-code-block-lang=&quot;scss&quot; data-code-block-mode=&quot;1&quot; id=&quot;5224&quot; name=&quot;5224&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;sorted&lt;&#x2F;span&gt;(list.sort())&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Sorting a list means it&#x27;s sorted.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4a6d&quot; name=&quot;4a6d&quot;&gt;
      I’m sure these seem like no brainers to you,
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       what do you mean sorting a list means it’s sorted, what the hell was it gonna be?
      &lt;&#x2F;em&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dce2&quot; name=&quot;dce2&quot;&gt;
      The reality is different though. The
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       meaning
      &lt;&#x2F;em&gt;
      of the sorting function is that the output respects to some ordering
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       (sorted(list) == true)
      &lt;&#x2F;code&gt;
      . We have deeply embodied that meaning, so such examples are obvious, and might feel like a child’s toy. For algorithms, data structures, or code that is less studied, less familiar, it is possible that we never thought about the meaning of them.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9ed8&quot; name=&quot;9ed8&quot;&gt;
      What are other types of properties?(there are perhaps more formal&#x2F;correct names for these, please notify me if so)
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;db46&quot; name=&quot;db46&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Modeling Property:
       &lt;&#x2F;strong&gt;
       The property that the results of our function is the same as another function. Perhaps we are writing a blazingly fast sorting function, and we want the result to be the same as the result of bubble sort.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f088&quot; name=&quot;f088&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        RoundTrip Property:
       &lt;&#x2F;strong&gt;
       Roundtrip properties are usually found in programs such as parsers or encoders. One example I previously used is
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        JSON.parse(JSON.stringify(object)) === object
       &lt;&#x2F;code&gt;
       . You can imagine we actually rely a lot on this property a lot while sending data over the wire.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d7e4&quot; name=&quot;d7e4&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Effect Properties:
       &lt;&#x2F;strong&gt;
       Effect properties build the expectation that the result of some computation is a (simple)function of the input. When we don’t care about the way a computation is performed, but rather the effect of the computation on some state&#x2F;variable, we use effect properties. All 3 examples I gave in the beginning are effect properties.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;ff68&quot; name=&quot;ff68&quot;&gt;
      Where does properties and algorithmic problems come together?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d3fa&quot; name=&quot;d3fa&quot;&gt;
      As I said, LeetCode is all nice and good, but in reality, we have to define the correctness of our programs. Property-based tests with well-crafted properties provide more confidence in such correctness than unit tests. In the rest of the article, I will provide two examples of properties I came up with for my own problems.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;83b6&quot; name=&quot;83b6&quot;&gt;
      The first problem I will talk about is a familiar one, it’s actually a LeetCode medium in addition to being an elementary school problem,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       pow(x, n)
      &lt;&#x2F;code&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3bba&quot; name=&quot;3bba&quot;&gt;
      The problem, as you might have guessed, asks us to write a function that will give us the n’th power of x.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;efe9&quot; name=&quot;efe9&quot;&gt;
      A simple and intuitive solution might look like the one right below.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;java&quot; data-code-block-mode=&quot;2&quot; id=&quot;e1ee&quot; name=&quot;e1ee&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;double&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;result&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;; i &amp;lt; n; i++) {&lt;br&#x2F;&gt;    result *= x;&lt;br&#x2F;&gt;}&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; result;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;bc21&quot; name=&quot;bc21&quot;&gt;
      The problem here, for the careless reader, is that for
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       n &amp;lt; 0
      &lt;&#x2F;code&gt;
      , this code just returns 1. We can solve this problem by leveraging an algebraic identity,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       x^-n = (1&#x2F;x)^n
      &lt;&#x2F;code&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;cpp&quot; data-code-block-mode=&quot;1&quot; id=&quot;f9e8&quot; name=&quot;f9e8&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (n &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;) {&lt;br&#x2F;&gt;    x = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt; &#x2F; x;&lt;br&#x2F;&gt;    n = -n;&lt;br&#x2F;&gt;}&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; x^-n = (1&#x2F;x)^n&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-type&quot;&gt;double&lt;&#x2F;span&gt; result = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;&#x2F;span&gt; i = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;; i &amp;lt; n; i++) {&lt;br&#x2F;&gt;    result *= x;&lt;br&#x2F;&gt;}&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; result;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4917&quot; name=&quot;4917&quot;&gt;
      This code is indeed a bit slow. It is linear with n, meaning that it takes roughly n multiplications to get to the result. We can get better by using two more algebraic identities,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       x^2n = (x^2)^n, x^2n+1 = x * x^2n
      &lt;&#x2F;code&gt;
      . As you might have realized, we just cut our work in half at each step, resulting in an exponential speed-up.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;cpp&quot; data-code-block-mode=&quot;1&quot; id=&quot;a6a8&quot; name=&quot;a6a8&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-type&quot;&gt;double&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title&quot;&gt;pow&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;double&lt;&#x2F;span&gt; x, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;&#x2F;span&gt; n)&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;{&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (n == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;) {&lt;br&#x2F;&gt;      &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;;&lt;br&#x2F;&gt;  }&lt;br&#x2F;&gt;  &lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (n &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;) {&lt;br&#x2F;&gt;      x = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt; &#x2F; x;&lt;br&#x2F;&gt;      n = -n;&lt;br&#x2F;&gt;  }&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (n % &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt; == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;) {&lt;br&#x2F;&gt;      &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x * x, n &#x2F; &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;);&lt;br&#x2F;&gt;  } &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;&#x2F;span&gt; {&lt;br&#x2F;&gt;      &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; x * &lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x * x, n &#x2F; &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;);&lt;br&#x2F;&gt;  }&lt;br&#x2F;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;0250&quot; name=&quot;0250&quot;&gt;
      How do we make sure that our code is correct, though? The first option is to use a
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Modeling Property.
      &lt;&#x2F;strong&gt;
      We can just compare our results with
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       Math.pow
      &lt;&#x2F;code&gt;
      from the Java standart library.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;cpp&quot; data-code-block-mode=&quot;1&quot; id=&quot;c19a&quot; name=&quot;c19a&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x, n) == Math.&lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x, n)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;ce16&quot; name=&quot;ce16&quot;&gt;
      The second option is a less hacky one that actually relies on the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       meaning
      &lt;&#x2F;strong&gt;
      of the pow function.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;cpp&quot; data-code-block-mode=&quot;1&quot; id=&quot;8108&quot; name=&quot;8108&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x, n) * x = &lt;span class=&quot;hljs-built_in&quot;&gt;pow&lt;&#x2F;span&gt;(x, n + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4343&quot; name=&quot;4343&quot;&gt;
      We can just generate many (x, n) pairs, run our pow function for
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       pow(x,n)
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       pow(x, n+1)
      &lt;&#x2F;code&gt;
      separately, and check the results.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2d75&quot; name=&quot;2d75&quot;&gt;
      One nice feature of using Randomized Property-Based Testing is that it allows for benchmarking our code pretty easily. So, in addition to getting correctness, we get to measure performance. As the inputs are sampled from a large space, timing the results allows for comparing different algorithms easily. Below is the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Time vs N graph
      &lt;&#x2F;strong&gt;
      obtained by running 4 versions of the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       pow
      &lt;&#x2F;code&gt;
      function I implemented, measured over randomized inputs. The purple line that looks like it’s completely flat is the logarithmic implementation.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;db35&quot; name=&quot;db35&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1520&quot; data-image-id=&quot;1*eUlw8qRLDOFf2mkw4sO2RQ.png&quot; data-width=&quot;2876&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*eUlw8qRLDOFf2mkw4sO2RQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;492c&quot; name=&quot;492c&quot;&gt;
      A More Realistic Example
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;84cf&quot; name=&quot;84cf&quot;&gt;
      I can hear you saying, come oon, who writes pow these days??? So I come bearing good news, I have a better example.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7913&quot; name=&quot;7913&quot;&gt;
      There is a board game called
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Quoridor&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Quoridor&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Quoridor
      &lt;&#x2F;a&gt;
      that I started playing recently, and I decided to implement a mobile version of it to play with some friends overseas. Creating a mobile application has many hassles, but the first thing you need to do is to create a model of the game. The game has 81 squares, 144 tile locations, 10 1x2 tiles per player, and 2 pawns. There are several rules governing how tiles can be placed and how pawns can move, but one specific rule is pretty interesting.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       When placing tiles, opposing player must have at least one path toward their target open, you cannot shut them out.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fb68&quot; name=&quot;fb68&quot;&gt;
      This can be easily modeled as a
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Undirected Graph Reachability Problem
      &lt;&#x2F;strong&gt;
      . We can model the board as a 9x9 grid, where all adjacent squares have an undirected edge between them if there is no tile. If the pawn can reach any square in the first line of the opposing player after putting a new tile, then the move it valid. Below is a rough picture of the board, showing a path from the mid-top for the white pawn towards the left-bottom.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;5e64&quot; name=&quot;5e64&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3280&quot; data-image-id=&quot;1*H4Aq_Uz9WKwepWazxnHLYA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;3942&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*H4Aq_Uz9WKwepWazxnHLYA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2c8e&quot; name=&quot;2c8e&quot;&gt;
      There are two ways of solving this problem. The first is constructing a graph out of the board and running an off the shelf reachability algorithm, the second is to implement a reachability algorithm on top of your own board, which is of course more fun(try to guess which one I decided to do).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ac7a&quot; name=&quot;ac7a&quot;&gt;
      After implementing a DFS(Depth First Search), I was met with the question of how to verify the correctness of my algorithm, how do I know I’m not too permissive or too restrictive?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;32ba&quot; name=&quot;32ba&quot;&gt;
      I found two such properties.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;e542&quot; name=&quot;e542&quot;&gt;
       In the case of a permission, I ask for a witness(a path from the pawn to the target line). I follow through the line to make sure there are not tiles on the way.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0b10&quot; name=&quot;0b10&quot;&gt;
       In the case of a restriction, things are more complicated. How can you guarantee there are no actual ways? I came up with an interesting solution to this one. I pick a point in the target line, I generate a random non-overlapping walk to the point, and I crush(remove) any tiles on the way, effectively generating at least one path. Running the algorithm again must give me a witness. This is of course a weak property, perhaps my random walks are not uncovering interesting paths that my code is not able to find. I am open to suggestions here!
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;0697&quot; name=&quot;0697&quot;&gt;
      I like this because (1) it was directly useful to me in a personal project, (2) it was a case where testing the algorithm was actually pretty hard by hand, (3) the property I came up with was fun to think of.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7bf2&quot; name=&quot;7bf2&quot;&gt;
      With this, I conclude my examples, and the article. As I said, I believe algorithms come up in many places around software projects, and they are hard to test and verify, especially if you’re not ready for it. I think Randomized Property Based Testing has a pretty good potential for both correctness and performance measurements, and it’s also really fun. If you like property based testing, you can check out my previous article.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p graf--trailing&quot; id=&quot;0846&quot; name=&quot;0846&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; title=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Learner’s Guide to Property Based Testing#1
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Property Based Random Testing is a flavor of testing that aims to use higher level specifications for testing instead…
       &lt;&#x2F;em&gt;
       medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;19a1af58cac5358feef1ed754df15c73&quot; data-thumbnail-img-id=&quot;1*92Av2ZbXV98Ryo1C0cxpFw.png&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*92Av2ZbXV98Ryo1C0cxpFw.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;edf47daf3f88&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2024-03-07T04:20:18.356Z&quot;&gt;
     March 7, 2024
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;solving-algorithmic-problems-in-the-wild-edf47daf3f88&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Afet Anında Doğru Bilgiye Ulaşım</title>
        <published>2024-01-28T00:00:00+00:00</published>
        <updated>2024-01-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/afet-aninda-dogru-bilgiye-ulasim/"/>
        <id>https://alperenkeles.com/posts/afet-aninda-dogru-bilgiye-ulasim/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/afet-aninda-dogru-bilgiye-ulasim/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;191f&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;3f0b&quot; name=&quot;3f0b&quot;&gt;
      Afet Anında Doğru Bilgiye Ulaşım
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8928&quot; name=&quot;8928&quot;&gt;
      Bu yazının yayınlandığı tarih itibariyle 6 Şubat depreminin üzerinden 358 gün geçti. Bu yazıda, yaşadığımız depremi, kaybettiklerimizi, yaşananları anmak,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       afet anında doğru bilgiye ulaşımın zorluğu, ihtiyacı, nasıl başarılabileceği ile ilgili kendi tecrübelerimi aktarmak istedim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8aa6&quot; name=&quot;8aa6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1080&quot; data-image-id=&quot;1*9O2hAtlAP6-FvBpLDspYww.gif&quot; data-is-featured=&quot;true&quot; data-width=&quot;1920&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*9O2hAtlAP6-FvBpLDspYww.gif&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;a2f4&quot; name=&quot;a2f4&quot;&gt;
      Doğru Bilgiye Ulaşım
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;906e&quot; name=&quot;906e&quot;&gt;
      Yanlış ve yalan bilgilerin hızla büyük kitlelere yayılımı günümüzün en ciddi problemlerinden bir tanesi. Sosyal medya platformlarında her gün onlarca yalan haberin yayıldığını görüyoruz.
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;evrimagaci.org&#x2F;uyurken-orumcek-yutuyor-olabilir-misiniz-yoksa-bu-sadece-bir-kuruntu-mu-15588&quot; href=&quot;https:&#x2F;&#x2F;evrimagaci.org&#x2F;uyurken-orumcek-yutuyor-olabilir-misiniz-yoksa-bu-sadece-bir-kuruntu-mu-15588&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       İnsan uyurken örümcek yutar mı?
      &lt;&#x2F;a&gt;
      ,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;teyit.org&#x2F;analiz&#x2F;starbucks-boykotlardan-sonra-karpuz-motifli-bardak-mi-satmaya-basladi&quot; href=&quot;https:&#x2F;&#x2F;teyit.org&#x2F;analiz&#x2F;starbucks-boykotlardan-sonra-karpuz-motifli-bardak-mi-satmaya-basladi&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Starbucks Filistin’i desteklemek için bardak çıkardı mı?
      &lt;&#x2F;a&gt;
      gibi görece zararsız yanlış bilgiler her gün karşımıza çıkarken, özellikle
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       kriz dönemlerinde
      &lt;&#x2F;strong&gt;
      ortaya çıkan yanlış bilgiler, otoritelerin de doğru ve önemli bilgileri hızlı ve efektif bir şekilde paylaşamadığı durumlarda can alabiliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;84a7&quot; name=&quot;84a7&quot;&gt;
      Bu konuda
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;www.onurvarol.com&#x2F;bio.html&quot; href=&quot;http:&#x2F;&#x2F;www.onurvarol.com&#x2F;bio.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Onur Varol
      &lt;&#x2F;a&gt;
      ya da
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;tugrulcan.com&quot; href=&quot;https:&#x2F;&#x2F;tugrulcan.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Tuğrulcan Elmas
      &lt;&#x2F;a&gt;
      gibi değerli araştırmacıların bot ağları ile ilgili araştırmalarının yanı sıra
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;teyit.org&quot; href=&quot;https:&#x2F;&#x2F;teyit.org&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       teyit.org
      &lt;&#x2F;a&gt;
      ya da
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.dogrulukpayi.com&quot; href=&quot;https:&#x2F;&#x2F;www.dogrulukpayi.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       doğruluk payı
      &lt;&#x2F;a&gt;
      gibi haber doğrulama organizasyonlarının çabaları yanlış bilgilerin yayılımının engellenmesi anlamında çok değerli olsa da
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Covid-19 salgını ve 6 Şubat Pazarcık Depremi’nde gördüğümüz üzere yetersiz kalabiliyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9a18&quot; name=&quot;9a18&quot;&gt;
      Özellikle afet anlarında ilk saatler ve günler inanılmaz kritik, afetzedeler
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       (1)
      &lt;&#x2F;strong&gt;
      kendi ihtiyaçlarını(güvenlik, yemek, barınma, ulaşım, sağlık) nasıl karşılayacakları konusunda güvenilir bilgi kaynaklarına ihtiyaç duyuyor hem de
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       (2)
      &lt;&#x2F;strong&gt;
      kendi durumları hakkında ailelere ve otoritelere bilgi verme ihtiyacı duyuyorlar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;90ab&quot; name=&quot;90ab&quot;&gt;
      Bu noktada bu bilgi aktarımını sağlama konusunda ise 6 Şubat ve sonrasında gördüğümüz üzere Twitter büyük bir rol oynuyor ve bu rolde benim gözlemlerime göre . Bir noktada etkileşimden nemalanmaya çalışan bot ağları, diğer noktada sesini duyurmaya çalışan depremzedeler ve yakınları, tekrara düşen yardım çağırıları arasında görünmez ve çaresiz kendi halinde kalanlar… Kaosun hakim olduğu bu ortamda bilgi aktarım görevini Twitter’a bırakmamak, doğru bilgiye ulaşımı kolaylaştırmak ve depremzedeler ile direkt bağlantı ağları kurmak elzem hale geliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d464&quot; name=&quot;d464&quot;&gt;
      Bu noktada, ben çözümlerden birisi olarak doğrulanmış bilgi bankalarını sizlere anlatmak istiyorum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;f869&quot; name=&quot;f869&quot;&gt;
      Doğrulanmış Bilgi Bankaları
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3726&quot; name=&quot;3726&quot;&gt;
      Bu yazıyı okuyanların ciddi bir kısmının
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;www.afetbilgi.com&quot; href=&quot;http:&#x2F;&#x2F;www.afetbilgi.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       afetbilgi.com
      &lt;&#x2F;a&gt;
      ’dan haberi olacağını düşünüyorum. Bilmeyenler için, afetbilgi.com 6 Şubat depreminin ardından ortaya çıkmış, yemek, barınma, sağlık gibi farklı ihtiyaçlara yönelik doğrulanmış bilgileri basit ve kolayca kullanılabilir bir arayüzde sunmayı hedefleyen gönüllülerin oluşturduğu bir websitesi.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;54ab&quot; name=&quot;54ab&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;720&quot; data-image-id=&quot;1*zy1vc0JaVQvVsomD8k3LRQ.png&quot; data-width=&quot;1280&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*zy1vc0JaVQvVsomD8k3LRQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       afetbilgi.com arayüzü
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;0f50&quot; name=&quot;0f50&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bilmiyor olabileceğiniz bir şey, afetbilgi.com’un doğrulanmış bilgi bankalarından yalnızca bir tanesi olduğu olabilir.
      &lt;&#x2F;strong&gt;
      Deprem Destek Çemberi, Deprem Kaynaklar, Deprem Bölgesi Hastane Listesi, Adana Afet gibi pek çok farklı Google Spreadsheet de vardı aslında, eminim ki benim görmediğim pek çok farklı bilgi bankası mevcuttur.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b954&quot; name=&quot;b954&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Doğrulanmış bilgi bankaları
      &lt;&#x2F;strong&gt;
      ,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;ifcncodeofprinciples.poynter.org&quot; href=&quot;https:&#x2F;&#x2F;ifcncodeofprinciples.poynter.org&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       teyitçiliğin ilkelerini
      &lt;&#x2F;a&gt;
      belki bilerek, büyük ihtimalle farkında bile olmadan takip eden bilgi kaynakları. Birbirinden bağımsız pek çok bilgi bankasının olması bahsettiğim problemlerin pek çok farklı kişi tarafından fark edildiğini gösteriyor. Bizim afetbilgi.com ile çözmeye çalıştığımız problem, bu bilgi bankaları oluşturulduktan sonra depremzedelerin bu kaynaklara kolayca ulaşabilmesinin sağlanması idi. Basit, kolay kullanılabilen bir arayüz, verileri dosya olarak indirebilme, gerektiğinde haritada lokasyonları görebilme fırsatı bilgi bankasının kullanımını kolaylaştırdığını ve arttırdığını gördük. Bunun yanında birden fazla dilde bilgiyi paylaşmak da özellikle etnik zenginliği yüksek bölgelerde daha da önemli hale geliyor. ODTÜ Bilgisayar Mühendisliğinde bir grup öğrenci bu yıl veri bankalarından kolay ve hızlı bir şekilde web siteleri yaratılabilmesini sağlayan bir proje üzerine çalışıyorlar. Umuyorum ki sıradaki afetle karşı karşıya olduğumuzda bu veri bankaları da bir arayüz ile depremzedeler tarafından daha kullanılabilir hale geleceklerdir.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;112d&quot; name=&quot;112d&quot;&gt;
      Bilgi Bankası Nasıl Oluşturulur?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;02cc&quot; name=&quot;02cc&quot;&gt;
      Eminim ki her ekip kendi metodolojisini geliştirmiştir. Ben kısaca bizim sistemimizden bahsetmek istiyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8952&quot; name=&quot;8952&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;958&quot; data-image-id=&quot;1*pB2-tw6JmC8jb7S-BTCy9A.png&quot; data-width=&quot;2642&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*pB2-tw6JmC8jb7S-BTCy9A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b363&quot; name=&quot;b363&quot;&gt;
      Biz afetbilgi.com üzerine çalışırken, 3 aşamalı bir veri bankası kullanarak dış dünyadan aldığımız yapısız bilgilerin(fotoğraf, tweet, mesaj) tamamını kaynağın güvenilirliğine göre eleyip, bu verileri işleyebileceğimiz bir şekilde excel tablosuna kaydediyorduk. Tablodaki bilgiler önce kategorize ediliyor, web sitesine uygun bir şekilde şekillendiriliyor, sonrasında ise teyit edilerek web sitesine konuyordu. Farklı veri tiplerinin farklı invalidasyon(geçersizleşme) süreleri vardı, o süre doldukça veriyi tekrardan teyitleyemezsek web sitesinden siliyor idik.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;e11e&quot; name=&quot;e11e&quot;&gt;
      Doğrulanmış Bilgi Bankalarının Önemi
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf--startsWithDoubleQuote graf-after--h4&quot; id=&quot;a2e8&quot; name=&quot;a2e8&quot;&gt;
      “Peki bu bilgi bankaları neden bu kadar önemli?” diye soruyorsanız eğer, kendinizce haklı olabilirsiniz. Ne gibi önemli bilgilerden mahrum kalıyor depremzedeler?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;90b1&quot; name=&quot;90b1&quot;&gt;
      Basit bir örnek üzerinden gidelim, Google’a
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       afad güvenli toplanma yerleri
      &lt;&#x2F;code&gt;
      yazdığımızda önce karşımıza
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.afad.gov.tr&#x2F;kurumlar&#x2F;afad.gov.tr&#x2F;39521&#x2F;xfiles&#x2F;toplanma_alanlari.pdf&quot; href=&quot;https:&#x2F;&#x2F;www.afad.gov.tr&#x2F;kurumlar&#x2F;afad.gov.tr&#x2F;39521&#x2F;xfiles&#x2F;toplanma_alanlari.pdf&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       AFAD’ın Güvenli Toplanma Yerleri Afişi
      &lt;&#x2F;a&gt;
      çıkıyor. İki sayfalık bir döküman, ilk sayfası da aşağıdaki gibi.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Toplanma Alanına Erişim İçin
      &lt;&#x2F;strong&gt;
      gayet ağır ve yavaş bir web sitesinde birkaç dakika harcamanız gerekiyor, takdir edersiniz ki deprem anında
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       ben nereye gitmeliyim
      &lt;&#x2F;strong&gt;
      sorusunu soran bir kişinin doğru düzgün çekmeyen internetiyle 5 dakika bununla uğraşması çok da ideal değil. Dolayısıyla en basit bilgi alma ihtiyacında bile depremzedeler gereksiz ekstra adımlarla uğraşmak zorunda kalıyorlar.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;3a67&quot; name=&quot;3a67&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1498&quot; data-image-id=&quot;1*skYjJ8We6MRgP6OcJUV9Jg.png&quot; data-width=&quot;2880&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*skYjJ8We6MRgP6OcJUV9Jg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;d78d&quot; name=&quot;d78d&quot;&gt;
      Bunun yanı sıra sürekli değişen yemek, barınma ve sağlık imkanları gibi bilgileri düzenli güncellenen, kullanımı kolay bir arayüzden alabilmeleri de çok değerli,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Twitter’daki ya da Whatsapp’taki paylaşımların en büyük problemlerinden birisi hiçbir zaman geçersizleştirilmemeleri.
      &lt;&#x2F;strong&gt;
      Bir kez paylaştığınızda o bilgi yayılıyor, büyüyor, artık geçersizse bile o paylaşımları gören kişilerin bunu öğrenme fırsatı olmuyor maalesef. Bu da bilgi bankalarının düzenli olarak güncellenebilmesini onların önemli bir avantajı haline getiriyor.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6da6&quot; name=&quot;6da6&quot;&gt;
      Depremzedelerden Bilgi Akışı
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;63a7&quot; name=&quot;63a7&quot;&gt;
      Depremzedeye bilgi sağlamanın yanı sıra, depremzedelerden gelen bilgi akışı da çok değerli. Telekom hatlarının ve internetin zayıflığı yıkılan binaların, enkaz altındaki depremzedelerin, güvenli toplanma alanlarında toplanmış depremzedelerin tespitini çok zorlaştırıyor. Bu konuda en büyük çaptaki çabalardan bir tanesini
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;gundogmuseray.medium.com&#x2F;afetharita-com-binlerce-depremzedeye-nasıl-yardım-etti-f3ec0cd4adbe&quot; href=&quot;https:&#x2F;&#x2F;gundogmuseray.medium.com&#x2F;afetharita-com-binlerce-depremzedeye-nasıl-yardım-etti-f3ec0cd4adbe&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       AfetHarita
      &lt;&#x2F;a&gt;
      ekibi yaptı. Twitter verisini kullanarak çıkardıkları ısı haritası sayesinde normalde kaybolacak belki de pek çok yardım çağrısı kendisine yer bulabildi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;845e&quot; name=&quot;845e&quot;&gt;
      Bu noktada asıl eksiklik, bu bilgi aktarımının Whatsapp&#x2F;Twitter gibi kanallara kalması. Normal şartlar altında düşük bant genişliklerinde hızlı bir şekilde çalışabilecek, mümkünse SMS bazlı bir protokol kullanılmalı. Telefona ekranında belirecek en fazla 15 saniye içerisinde cevaplanacak 2–3 soru, bu sorulara verilen cevapların kişilerin yakınlarına mesaj olarak gönderilmesi gibi basit bir protokol hem hatları hafifletecek(insanlar haber alamadıkları insanlara ulaşmak için hatları daha çok meşgul ediyorlar) hem de afet yönetimini yapan kişilere durumun daha kesin ve doğru bir resmini çizecektir. Bir protokol olmasa bile, Türkiye’de satılan tüm telefonlara otomatik bir şekilde inmiş gelecek basit bir uygulama bile pek çok kişi için deprem anında faydalı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;ba15&quot; name=&quot;ba15&quot;&gt;
      Kapanış
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;fc29&quot; name=&quot;fc29&quot;&gt;
      Maalesef ki afet, özellikle de deprem, hayatımızın bir parçası ve parçası olmaya da devam edecek. 6 Şubat’ta hazırlıksız yakalandık. Umuyorum ki geleceği söylenen İstanbul depremine ya da yaşayacağımız herhangi bir afete daha hazırlıklı oluruz. Burada beraber hazırlanmak, hazırlanmayanları bilgilendirmek, kamuoyu üretmek, çözümler geliştirmek hepimizin kolektif sorumluluğu. Sevdiklerimizin hayatları belki de ellerimizin ucunda. Umuyorum ki 6 Şubat’ın yıl dönümü bu farkındalık için etkili olur, umarım bu yazı da sizin için biraz da olsa farkındalık yaratmayı başarmıştır. Buraya kadar okuduğunuz için teşekkür ederim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0dbb&quot; name=&quot;0dbb&quot;&gt;
      Ham Notlar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;7ffa&quot; name=&quot;7ffa&quot;&gt;
      Bu yazıda, geçtiğimiz yıl depremin olduğunu gördüğüm an yazdığım notlarımdan faydalandım. Bu notları da aşağıya bırakmak istedim.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--trailing graf--preV2&quot; data-code-block-lang=&quot;markdown&quot; data-code-block-mode=&quot;1&quot; id=&quot;42dd&quot; name=&quot;42dd&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-section&quot;&gt;# Notlar: 5 Feb 2023&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Öncelikle uzaktan yakından etkilenen herkes adına çok üzgünüm, çok geçmiş olsun. Bugünün ışığında gördüklerime dayanarak birtakım çağrılarda bulunmak, belki okuyan birilerinin gidip uygulayabileceği çözümler üzerine belli bir tartışma oluşturmak istiyorum.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Bu deprem ülkemizde yaşanan ilk büyük afet değil son da olmayacak, hiç şüphesiz ki (en azından benim bildiğim kadarıyla) en büyüklerinden bir tanesi. Ancak geçtiğimiz yıllardaki depremler, saldırılar, yangınlar gibi pek çok farklı iç yaralayıcı olayları da geçirdik. Bu olayların hepsine tek bir isimle hitap etmek için onlara &quot;afet&quot; diyeceğim.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Bir afet anında, çok önemli birkaç hedef var.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Afetten etkilenenlerin(afetzede) mümkün olan en kısa sürede tespiti.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Afetzedelerin yardım çağrılarının hızlı ve güvenilir bir şekilde doğru makamlara iletilmesi.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Afetzedelere gerekli tıbbi yardımın, kurtarma çalışmalarının en kısa zamanda sağlanması.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; İnsanların birbiriyle hızlı ve basit seviyede iletişiminin sağlanmasıyla, toplumsal korku ve dehşet ortamının sakinleştirilmesi.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Maddi, manevi, insani yardım koridorlarının oluşturulması. Halkın bu konuda bilgilendirilmesi.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; İlgili makamların hızlı, mantığa dayalı, halkı rahatlatıcı ve güven verici açıklama ve aksiyonlarda bulunması.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Bu hedeflerin başarılamamasına sebep olan bazı etkenler ise şunlar:&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Telefon hatlarının çalışmaması afetzedelerin durumlarını bildirememesine sebep oluyor.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Telefon hatlarının çalışmaması potansiyel afetzede yakınlarının panik durumuna düşmesine sebep oluyor. Bu sebeple yardım çağrısında bulunan kişiler, belki de gerçekten yardıma ihtiyaç duyan insanların seslerini duyurmasını zorlaştırabiliyor.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Çok fazla panik, çok fazla yanlış bilgi ortada dolaşıyor. Doğru bilgilere önceden sahip olmamız gerekirken, o anda yanlış bilgilerle savaşıyoruz.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Bilgisiz vatandaşlar yolları kapatıyor, telefon hatlarını boşa harcıyor, kendilerini, yakınlarını ve diğer insanları tehlikeye atıyorlar.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Yetkili kurum açıklamaları yetersiz kalıyor, doğru hızda, tonda ve şeffaflıkta yapılmıyor.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Neler yapılabilir&#x2F;yapılmalı?&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Afet uygulaması:&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; AFAD uygulamasının, veyahut yerine gelebilecek başka herhangi bir afet uygulamanın telefonlara yüklü gelmesi.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Bu uygulamanın operatörler tarafından tamamen ücretsiz kullanıma açılması.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Kişilerin &quot;ben güvendeyim&quot; ve &quot;ben güvende değilim&quot; şeklinde bilgilendirmeler yapabilmesi.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Afet alanlarının haritalarının çıkarılıp, göçük ve güvenli alanlarının bildirilmesi.&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Afet öncesi hazırlık:&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Düzenli afet tatbikatları yapılması.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Belediyeler tarafından evlere afet çantası sağlanması.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Afet anında iletişim kurallarının ve bilgilendirmelerinin düzenli periyotlarla yapılması, kamuoyunun merkezinde bir noktada bulunması.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-bullet&quot;&gt;-&lt;&#x2F;span&gt; Yardımcı olabilecekler ile ihtiyaç sahiplerinin birleştirilmesi için disipline edilmiş, önceden tasarlanmış sistemler oluşturulması.&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;e3646bd5a3bb&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2024-01-29T04:41:15.407Z&quot;&gt;
     January 29, 2024
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;afet-an%C4%B1nda-do%C4%9Fru-bilgiye-ula%C5%9F%C4%B1m-e3646bd5a3bb&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Lies About Abstraction</title>
        <published>2023-12-02T00:00:00+00:00</published>
        <updated>2023-12-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/the-lies-about-abstraction/"/>
        <id>https://alperenkeles.com/posts/the-lies-about-abstraction/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/the-lies-about-abstraction/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;816d&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;61a0&quot; name=&quot;61a0&quot;&gt;
      The Lies About Abstraction
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;4ed6&quot; name=&quot;4ed6&quot;&gt;
      Below is an excerpt from
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;streetcoder.org&quot; href=&quot;http:&#x2F;&#x2F;streetcoder.org&quot; rel=&quot;noopener ugc nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       Street Coder
      &lt;&#x2F;a&gt;
      , where
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;cfcbc8090ec&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;cfcbc8090ec&quot; data-user-id=&quot;cfcbc8090ec&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;cfcbc8090ec&quot; target=&quot;_blank&quot;&gt;
       Sedat Kapanoglu
      &lt;&#x2F;a&gt;
      talks about benefits of layering in software.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;df42&quot; name=&quot;df42&quot;&gt;
      A business layer doesn’t know anything about databases or storage techniques. It calls on the database layer for that. The database layer encapsulates the database functionality in a DB-agnostic fashion. This kind of separation of concerns can make the testability of business logic easier because we can easily plug a mocked implementation of the storage layer into the business layer.
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       More importantly, that architecture allows us to change a DB behind the scenes without changing a single line of code in the business layer, or in the web layer, for that matter.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;88c5&quot; name=&quot;88c5&quot;&gt;
      Although the sentiment is nice in theory, I think the reality does not conform to the sentiment. This article is a response to the idea that layering allows for seamlessly changing a layer without any consequences for the rest of the system. I argue that all abstractions come with leakage, meaning that they have
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       untested&#x2F;unspecified
      &lt;&#x2F;strong&gt;
      characteristics that might surface after such changes.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b21b&quot; name=&quot;b21b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3456&quot; data-image-id=&quot;1*0IxAsbazZbSAFZYq89FfpA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;6912&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*0IxAsbazZbSAFZYq89FfpA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--figure&quot; id=&quot;bce1&quot; name=&quot;bce1&quot;&gt;
      So, what is a layer?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;ae97&quot; name=&quot;ae97&quot;&gt;
      Abstraction is commonplace in software engineering. Layering is a type of abstraction where a software module is concerned with implementing a specific set of functionality for some data type, agreeing on a set of
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       contracts specifying the preconditions and postconditions of the module.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5134&quot; name=&quot;5134&quot;&gt;
      Layers are useful constructs that allow for building software, especially as teams and projects get larger. Below is a common architecture depicting 4 layers of a Web Application, taken from Street Coder.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;dedb&quot; name=&quot;dedb&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1198&quot; data-image-id=&quot;1*AZyKWLl97t8X1myGxWOaug.png&quot; data-width=&quot;2746&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*AZyKWLl97t8X1myGxWOaug.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;64a9&quot; name=&quot;64a9&quot;&gt;
      Although one does not need these layers to create a web application, their existence makes software development process more manageable by reducing the mental load of the developers, allowing them to think more locally.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;040d&quot; name=&quot;040d&quot;&gt;
      Well, what is a contract?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;f5da&quot; name=&quot;f5da&quot;&gt;
      A contract is the expectations(preconditions) and guarantees (postconditions) of a layer. Contracts can have different levels of formality depending on the language. The most common contract you have seen is
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       types
      &lt;&#x2F;strong&gt;
      . In a statically typed language, the type system proves that the function will receive an input and provide an output of a specific type, as opposed to dynamically typed languages where input to the layer might have any type, and the layer might produce an output of any type. Unlike types, most contracts are far from proven if you are not in a research programming language focused on
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_verification#:~:text=Formal%20verification%20of%20software%20programs,systems%2C%20and%20lightweight%20formal%20methods.&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_verification#:~:text=Formal%20verification%20of%20software%20programs,systems%2C%20and%20lightweight%20formal%20methods.&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       formal verification
      &lt;&#x2F;a&gt;
      . I will call such unproven contracts
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       “soft contracts”
      &lt;&#x2F;strong&gt;
      for the rest of this article, as they can be broken unlike the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       “hard contracts”
      &lt;&#x2F;strong&gt;
      that are proven. Examples of soft contracts include
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       validation, sanitization, null pointer checks, tests, and beliefs about the inner workings of software
      &lt;&#x2F;strong&gt;
      in general.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7865&quot; name=&quot;7865&quot;&gt;
      A typical example of sanitization in a web application is
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SQL_injection&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;SQL_injection&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       input sanitization against SQL Injections attacks
      &lt;&#x2F;a&gt;
      . When writing a web application, we usually ask for inputs from the user. If the input is not properly processed before constructing an SQL query, a malicious user may be able to extract private information from the database.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The belief that the input to the database is sanitized is a soft contract because of 2 reasons.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6589&quot; name=&quot;6589&quot;&gt;
      Imagine we have a function
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       sanitize(dangerous_query_string: str) -&amp;gt; SanitizedQuery
      &lt;&#x2F;code&gt;
      that produces a
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       SanitizedQuery
      &lt;&#x2F;strong&gt;
      datatype given a string taken from the user. The first problem is that
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       we can only believe that SanitizedQuery is actually sanitized
      &lt;&#x2F;strong&gt;
      , we cannot actually
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       know
      &lt;&#x2F;strong&gt;
      it. We can
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       test
      &lt;&#x2F;strong&gt;
      it, we can
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       code review,
      &lt;&#x2F;strong&gt;
      we can
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       pray to God,
      &lt;&#x2F;strong&gt;
      but as history of software engineering has shown us, our beliefs are very prone to be false. The second problem is that having such separate types are not feasible in many cases, because doing so leads to almost every single function having its own output type, leading to an unreadable codebase very very fast. This leads to the fact that function signature is usually
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       sanitize(dangerous_query_string: str) -&amp;gt; str
      &lt;&#x2F;code&gt;
      in practice, which means we lose the information tracking capabilities of the type system.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dce8&quot; name=&quot;dce8&quot;&gt;
      What happens when a soft contract is invalid? Well, anything might happen. As layers down path will assume that contract is valid, they will naively execute such input, leading to potentially catastrophic results.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;1f01&quot; name=&quot;1f01&quot;&gt;
      Where is the lie here?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;e7f4&quot; name=&quot;e7f4&quot;&gt;
      So far, I talked about layers, and contracts between layers that allow for composing different layers with each other. The composition relies on the expectations of the consuming module and the guarantees of the producer. For example, if the producer guarantees to output sanitized strings, the consumer will not try to sanitize such inputs again, enabling better scaling by providing separation of concerns between different modules.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3c44&quot; name=&quot;3c44&quot;&gt;
      The problem here is that a soft contract is as good as it is observable. If you cannot test&#x2F;verify the validity of a contract condition, then you cannot trust that the consumer will correctly handle inputs provided by the producer. Going back to the example at the beginning, your assumption must be that changing
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       your database layer will only guarantee you correctness on your tested behaviors, and nothing more.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c93d&quot; name=&quot;c93d&quot;&gt;
      With behavior such as input-output that is frequently and easily tested, we might actually achieve seamless transfer as we alternate a layer. So, it might be possible to switch your entire DB by keeping the input layer of the database layer intact.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The problem is now you need to think about the unobservables?
      &lt;&#x2F;strong&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       All behaviors of your previous implementation that affects the users is now part of your contract.
      &lt;&#x2F;strong&gt;
      Your new implementation may have the exact IO as the old one, but what about performance? Depending on the DB implementation, different query types will have different performance characteristics. Such differences are subtle and hard to catch, especially as the notion of correctness is built on IO for today’s software systems, so we don’t have the adequate tools to understand such
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       bugs
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;45a8&quot; name=&quot;45a8&quot;&gt;
      Let’s close up
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4 graf--trailing&quot; id=&quot;fefb&quot; name=&quot;fefb&quot;&gt;
      The blanket sentence that layering allows for seamless switching of an intermediate layer by keeping its public interface intact is a nice one, but it is false. Public interface only tells us what functions exist, and what their types are. Tests and code review provide extra guarantees, but they are incomplete tools for describing the total contract of a function, which leads to the fact that it is very hard to judge the results of a switch. Thank you for reading up to here!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5d7a85e2c9f7&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-12-02T19:40:22.182Z&quot;&gt;
     December 2, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;the-lies-about-abstraction-5d7a85e2c9f7&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Software Demystified: How does a Text Box Work?</title>
        <published>2023-11-24T00:00:00+00:00</published>
        <updated>2023-11-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/software-demystified-how-does-a-text-box-work/"/>
        <id>https://alperenkeles.com/posts/software-demystified-how-does-a-text-box-work/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/software-demystified-how-does-a-text-box-work/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;3c6b&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;6ee6&quot; name=&quot;6ee6&quot;&gt;
      Software Demystified: How does a Text Box Work?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;efd4&quot; name=&quot;efd4&quot;&gt;
      Below is an excerpt from
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;streetcoder.org&quot; href=&quot;http:&#x2F;&#x2F;streetcoder.org&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Street Coder
      &lt;&#x2F;a&gt;
      , where
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;cfcbc8090ec&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;cfcbc8090ec&quot; data-user-id=&quot;cfcbc8090ec&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;cfcbc8090ec&quot; target=&quot;_blank&quot;&gt;
       Sedat Kapanoglu
      &lt;&#x2F;a&gt;
      talks about opacity in software.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;41fc&quot; name=&quot;41fc&quot;&gt;
      “Technology is becoming more opaque, like cars. People used to be able to repair their own cars. Now as the engines become increasingly advanced, all we see under the hood is a metal cover, like the one on a pharaoh’s tomb that will release cursed spirits onto whoever opens it. Software development technologies are no different.
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Although almost everything is now open source, I think new technologies are more obscure than reverse-engineered code from a binary from the 1990s because of the immensely increased complexity of software.
      &lt;&#x2F;strong&gt;
      ”
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;6dbb&quot; name=&quot;6dbb&quot;&gt;
      I agree with these sentiments, and actively argue against this opaqueness. This article is part of a series of
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Software Demystified
      &lt;&#x2F;strong&gt;
      articles that will try to build up components or systems we use in our everyday software development such as text boxes, search bars, or databases in the hope of removing some of the opaqueness in our understanding of these systems.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;57b3&quot; name=&quot;57b3&quot;&gt;
      So, what is a text box?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;15be&quot; name=&quot;15be&quot;&gt;
      This is actually a pretty good and important question, especially because it doesn’t have a right answer. A Text Box can be growing or fixed height, it might overflow vertically or horizontally, it might be multiline or single line, it can support emojis, or allow rich text editing, may be WYGIWYS or more verbose, it can allow for directives such as mentions, or spoiler marks.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;298f&quot; name=&quot;298f&quot;&gt;
      Aside from these features, the maximum allowed text size or trimming characteristics, keyboard shortcuts, rendering, mouse interactions are all part of the requirements for implementing a text box.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c1fa&quot; name=&quot;c1fa&quot;&gt;
      In an ideal world, we would have a model of the text box that defines how any action transforms the state of the text box as below.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;ca1b&quot; name=&quot;ca1b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;465&quot; data-image-id=&quot;1*xkZviWTHq5S-EdFjOKogbw.png&quot; data-width=&quot;2909&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*xkZviWTHq5S-EdFjOKogbw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;f303&quot; name=&quot;f303&quot;&gt;
      This model of course depends on the internal data representation of the text box.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4356&quot; name=&quot;4356&quot;&gt;
      Let’s start with the one of the simplest text boxes possible.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;css&quot; data-code-block-mode=&quot;1&quot; id=&quot;ae94&quot; name=&quot;ae94&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;Textbox V1&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;. No mouse actions.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;. No ctrl&#x2F;alt&#x2F;shift actions.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;. No newlines.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;. Fixed &lt;span class=&quot;hljs-attribute&quot;&gt;width&lt;&#x2F;span&gt; and &lt;span class=&quot;hljs-attribute&quot;&gt;height&lt;&#x2F;span&gt;, grows &lt;span class=&quot;hljs-selector-tag&quot;&gt;to&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;right&lt;&#x2F;span&gt;.&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-number&quot;&gt;5&lt;&#x2F;span&gt;. No rich text, fixed &lt;span class=&quot;hljs-attribute&quot;&gt;width&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attribute&quot;&gt;font&lt;&#x2F;span&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;9cc4&quot; name=&quot;9cc4&quot;&gt;
      This text box, in essense, has only 3 features.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;3d92&quot; name=&quot;3d92&quot;&gt;
       Add&#x2F;delete a character
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;72cb&quot; name=&quot;72cb&quot;&gt;
       Have a cursor and move the cursor using left&#x2F;right arrows
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8c94&quot; name=&quot;8c94&quot;&gt;
       Focus the text view with respect to the cursor
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;5ca4&quot; name=&quot;5ca4&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       So, what are the tasks for the developer here?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2138&quot; name=&quot;2138&quot;&gt;
      Well, the programmer has several jobs. The first one is the rendering. Given a set of characters, we need to render those to the screen. We don’t need to implement the rendering itself, but we need to know certain properties of the result in order to correctly determine the position of the cursor as well as what portion of the text to render and where.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;706b&quot; name=&quot;706b&quot;&gt;
      Simplification number 5 plays a big role here, because we have a fixed width font, meaning that each character has the same width, (1) we immediately know the amount of characters that fit in our box, (2) we can find the position of our cursor very cheaply. If our box is 128 pixels and we have a fixed character size of 10 pixels, we can leave 4 pixels of padding in each side and have exactly 12 characters in the text box.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;c8e6&quot; name=&quot;c8e6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;434&quot; data-image-id=&quot;1*i6Z2fmolfuaIFAUeeA2Gkw.png&quot; data-width=&quot;1394&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*i6Z2fmolfuaIFAUeeA2Gkw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9f75&quot; name=&quot;9f75&quot;&gt;
      As we start typing in characters, our cursor moves automatically with each hit to the keyboard.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;cf56&quot; name=&quot;cf56&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;434&quot; data-image-id=&quot;1*Fe4_tNI3CsTxYHa-A705Cw.png&quot; data-width=&quot;1394&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Fe4_tNI3CsTxYHa-A705Cw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7bef&quot; name=&quot;7bef&quot;&gt;
      Our cursor has
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       length(text) + 1
      &lt;&#x2F;code&gt;
      potential positions, before the first character, between the characters, and after the last character. One funny thing that I just realized is we could also specify the amount of consecutive spaces. Medium’s text box interestingly only allows for one consecutive space character, I wonder why.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;f9ff&quot; name=&quot;f9ff&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;434&quot; data-image-id=&quot;1*4IngUVBkNzxmKfn44JCmJw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1394&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*4IngUVBkNzxmKfn44JCmJw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;62f0&quot; name=&quot;62f0&quot;&gt;
      Hitting 12 characters is the first point our action has a different result. Before now, we rendered our text by starting from the very first character by leaving 4 empty pixels, then rendering each character with 10 pixel distances, deciding the position of the cursor by calculating
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       4 + cursor_position * 10
      &lt;&#x2F;code&gt;
      . Each typed character has increased the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       cursor_position
      &lt;&#x2F;code&gt;
      by 1, and each deletion decreased it by 1, capped at 0. Now, we reached the case where
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       cursor_position == 12
      &lt;&#x2F;code&gt;
      , in which any new character does not change the cursor position, but rather changes the window of the text we render. This is easily doable by adding a
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       starting_position
      &lt;&#x2F;code&gt;
      that tracks where the rendering window of the text begins.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2052&quot; name=&quot;2052&quot;&gt;
      Now, we need to specify the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       starting_position
      &lt;&#x2F;code&gt;
      characteristics. Luckily, they are very easy, most of the time starting position does not change. It only changes when
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       cursor_position == 12
      &lt;&#x2F;code&gt;
      and the action tries to increase the cursor, or when
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       cursor_position == 0
      &lt;&#x2F;code&gt;
      and the action tries to decrease the cursor. (there is one extra case that I forgot to write in my first trial, I encourage the reader to think about what that is, as you see, it’s quite tricky to correctly specify the behavior of even the simplest version of the text box)
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;00ae&quot; name=&quot;00ae&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;434&quot; data-image-id=&quot;1*OSmz4E3-HAjpA2TGRJANiQ.png&quot; data-width=&quot;1394&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*OSmz4E3-HAjpA2TGRJANiQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9f52&quot; name=&quot;9f52&quot;&gt;
      Above, you can see how the window slides as we add new characters.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1eff&quot; name=&quot;1eff&quot;&gt;
      This is probably all we need to talk about TextBox V1. What are the next steps though?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;364d&quot; name=&quot;364d&quot;&gt;
      An easy thing to do is remove the first limitation and allow for mouse clicks. As we can easily determine the character at which mouse click happens, we can move the cursor at the end of that character. A harder mouse action is drag action, in the user presses the mouse at some character and drags the mouse to another part of the text. This behavior has the same computational model as shift + arrow keys, so implementing one gives us the other for free. The behavior is very similar to the cursor movement + text sliding described above, but it also requires us to remember where we started.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0230&quot; name=&quot;0230&quot;&gt;
      Adding ctrl keys requires finding the first whitespace and jumping at the point.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;07c7&quot; name=&quot;07c7&quot;&gt;
      Adding new lines adds a new dimension to the box, where our actions can also have vertical movements. It also opens up the possibility of changing the data representation to use paragraphs or lines instead of a simple text, because for long texts, it would be vastly inefficient to implement them in terms of simple strings.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9a82&quot; name=&quot;9a82&quot;&gt;
      Adding variable-width font complicates our cursor position calculations, line break computations, as well as mouse behaviors, because now it is much harder to determine how the original text is presented in the text box in a visual way. Before, the complexity was virtually constant, now it might be linear with respect to the size of the text.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;889b&quot; name=&quot;889b&quot;&gt;
      Adding rich text(colors, font sizes, font styles) requires us to create separate text runs that represent parts of the text with different qualities, and render them consecutively. Rich text also complicates the position calculations even further, because it prevents approximations. With a single style variable font, we can have a constant time approximate result, which is linear with respect to the number of text runs in a rich text setting.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;c00b&quot; name=&quot;c00b&quot;&gt;
      Why are all of these important?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4 graf--trailing&quot; id=&quot;fbc7&quot; name=&quot;fbc7&quot;&gt;
      To be fair, they probably aren’t if you are not developing the next blogging site, a new text editor or a new messaging app, hell they probably aren’t important even if you are doing one of those things because you would be using already existing components. The information in this article is more interesting than it is useful, and I think it allows for a rare type of thinking where we look behind the curtains of the opaque software world. I like to look behind the curtains, because I don’t like it when I am limited with the options available to me today, using the standart implementations available. I like to be limited with my own creativity.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;c24d28198cfa&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-11-24T15:02:01.648Z&quot;&gt;
     November 24, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;software-demystified-how-does-a-text-box-work-c24d28198cfa&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yazılım Projeleri: Kapsamlı Rehber</title>
        <published>2023-11-15T00:00:00+00:00</published>
        <updated>2023-11-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yazilim-projeleri-kapsamli-rehber/"/>
        <id>https://alperenkeles.com/posts/yazilim-projeleri-kapsamli-rehber/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yazilim-projeleri-kapsamli-rehber/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;fcc3&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;657a&quot; name=&quot;657a&quot;&gt;
      Yazılım Projeleri: Kapsamlı Rehber
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8402&quot; name=&quot;8402&quot;&gt;
      Yazıya başlamadan önce, bu yazının kimlere yönelik olduğunu belirteyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7811&quot; name=&quot;7811&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       1-
      &lt;&#x2F;strong&gt;
      Yazılımda görece yeniysen, kendini halk arasında “junior” olarak tabir edilen grupta görüyorsan,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f1a1&quot; name=&quot;f1a1&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       2-
      &lt;&#x2F;strong&gt;
      Kendini geliştirmek için proje yapmak istiyor, ancak ne yapacağını bilemiyorsan,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1e11&quot; name=&quot;1e11&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       3-
      &lt;&#x2F;strong&gt;
      Hackernews klonu gibi projelerden ziyade kendini teknik olarak geliştirebileceğin projelerle ilgilenmek istiyorsan,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fe53&quot; name=&quot;fe53&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       4-
      &lt;&#x2F;strong&gt;
      Yazılıma “eğer uygulamamda sağlamak istediğim bir özelliğin kütüphanesi yoksa oturur kendim yazarım” bakış açısıyla bakıyorsan,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e96f&quot; name=&quot;e96f&quot;&gt;
      O zaman bu yazı senin için yararlı olabilir. Yakın bir arkadaşım olan
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;bc40f811ddfc&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;bc40f811ddfc&quot; data-user-id=&quot;bc40f811ddfc&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;bc40f811ddfc&quot; target=&quot;_blank&quot;&gt;
       Ozan Sazak
      &lt;&#x2F;a&gt;
      ’ın aynı konuda kendi görüşlerini yazdığı bir makaleyi de aşağıya bırakıyorum, ilgini çekiyorsa onu da okuyabilirsin.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;5dbc&quot; name=&quot;5dbc&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;sazak.io&#x2F;blog&#x2F;fantastic-side-projects-and-where-to-find-them-2023-09-03&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;sazak.io&#x2F;blog&#x2F;fantastic-side-projects-and-where-to-find-them-2023-09-03&#x2F;&quot; title=&quot;https:&#x2F;&#x2F;sazak.io&#x2F;blog&#x2F;fantastic-side-projects-and-where-to-find-them-2023-09-03&#x2F;&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Fantastic Side Projects and Where to Find Them
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Here are the advices you need to check if you&#x27;re searching for a cool side project idea.
       &lt;&#x2F;em&gt;
       sazak.io
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;42cf3d37831fbf003a512909dc13cbfe&quot; data-thumbnail-img-id=&quot;0*88O0jNAEhfzYISAj&quot; href=&quot;https:&#x2F;&#x2F;sazak.io&#x2F;blog&#x2F;fantastic-side-projects-and-where-to-find-them-2023-09-03&#x2F;&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*88O0jNAEhfzYISAj);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--mixtapeEmbed&quot; id=&quot;38b8&quot; name=&quot;38b8&quot;&gt;
      Şimdi sizin aklınızda 2 soru var. Proje nedir, nasıl yapılır?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cc48&quot; name=&quot;cc48&quot;&gt;
      Bir yazılım projesi bir alışveriş listesi uygulaması yazmaktan kendi programlama dilini geliştirmeye kadar çok geniş bir yelpazede yer alabilir. Aşağıda kendim bir projeyi değerlendirirken kullandığım 2 önemli ekseni içeren küçük bir tablo çizdim. Burada
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Teknik Derinlik
      &lt;&#x2F;strong&gt;
      projenin daha teorik, daha tasarımsal taraftaki zorluğunu anlatırken,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Teknik Genişlik
      &lt;&#x2F;strong&gt;
      ise projenin ne kadar geniş bir teknoloji yelpazesi bilmeyi gerektirdiğinden bahsediyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8f26&quot; name=&quot;8f26&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1805&quot; data-image-id=&quot;1*TUfyBa2OxrOiY6ZE8Eg7QA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2916&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*TUfyBa2OxrOiY6ZE8Eg7QA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2260&quot; name=&quot;2260&quot;&gt;
      Tabii bu tablo fazlasıyla basitleştirilmiş durumda şu an(bir eksende hareket ederken diğerinde tamamen sabit kalmıyoruz aslında) ancak ana fikir, bir projenin teknik derinliği olmadan teknik genişliği olabileceği, aynı zamanda teknik genişliği olmadan teknik derinliği olabileceği. En temelde baktığınızda fullstack bir şekilde son teknolojileri kullanarak geliştirdiğiniz todo uygulamasının tüm bilgilerini tarayıcıda saklayan bir ToDo uygulamasından teknik derinlik anlamında bir farkı yok, yalnızca daha fazla farklı teknolojileri birbirine entegre etmenizi gerektiriyor. Diğer yandan neredeyse hiçbir ek teknolojiye ihtiyaç duymadan yeni bir programlama dili, terminal oyunu, veri sıkıştırma uygulaması, metinden konu analizi, resim editörü oluşturabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c8dc&quot; name=&quot;c8dc&quot;&gt;
      Bu yazının kalanında neden teknik derinliği yüksek ancak teknik genişliği dar projeleri daha yararlı gördüğümden bahsedip, bu tarz projelerde nasıl adımlar atılacağını anlatıp, 2 adet proje örneği vereceğim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2b3c&quot; name=&quot;2b3c&quot;&gt;
      Proje Seçerken Neye Dikkat Etmeliyim?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;4cc2&quot; name=&quot;4cc2&quot;&gt;
      Yazılımın temelinde modelleme var. Bir uygulama yazdığınızda, o uygulamada sakladığınız verileri, o uygulamanın kullanıcı arayüzünü, kullanıcı aksiyonlarını modellemeniz gerekiyor. Bu noktada kendi modellerimizi oluştururken, genelde başkalarının oluşturduğu modellerin üstüne kurguluyoruz. Veri tabanı olan interaktif bir web sitesi tasarlıyor olalım mesela, öncelikle “client&#x2F;server” modelinin üzerine kurulmuş bir veri şeması oluşturuyoruz. Hangi veri nerde&#x2F;nasıl saklanıyor, client ve server arasında ne gibi veriler aktarılıyor? Sonrasında genelde kullandığımız kütüphanenin ve framework’ün bize verdiği birtakım bileşenleri kullanarak kullanıcı aksiyonlarını modelliyoruz. Kullanıcının karşısındaki ekrana metin kutuları, butonlar, yazılar koyarak kullanıcının bizim uygulamamız ile etkileşime geçmesini sağlıyoruz, etkileşimin sonucuna göre uygulamamızın durumunu güncelliyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5afc&quot; name=&quot;5afc&quot;&gt;
      Peki bazı uygulamaları diğerinden bizim için daha zor kılan ne? Benim buradaki ilk düşüncem, aslında her türlü uygulamanın çok zor olduğu. Biz bugün bir web sitesini modellerken alttaki network’ün modeliyle ilgilenmiyoruz, o model bizim için tarayıcı tarafından soyutlanmış. Basit bir
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       fetch
      &lt;&#x2F;code&gt;
      ile dünyanın herhangi bir yerinden istediğimiz veriyi çekebiliyoruz, aslında arkada ne kadar kompleks bir mekanizmanın döndüğünün hiçbir şekilde farkında olmadan.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b6c8&quot; name=&quot;b6c8&quot;&gt;
      Bu noktada bir uygulamayı zor yapan ilk etmen, o uygulama için ihtiyaç duyduğumuz bileşenlere sahip olmamak. Çoğu kişinin hiç düşünmeden kullandığı bileşenlerin kendileri çoğu zaman düşünmeyeceğimiz kadar kompleks aslında. Eğer merak ediyorsanız, bir gün
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       &amp;lt;input type=&quot;text&quot;&amp;gt;
      &lt;&#x2F;code&gt;
      yazdığınızda karşınıza çıkan metin kutusunu kendi kendinize sıfırdan yazmaya çalışın. Ne kadar zor olduğunu göreceksiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;20c2&quot; name=&quot;20c2&quot;&gt;
      Neyse ki, modern teknoloji, açık kaynak, yüz binlerce şirket ve milyarlarca dolar yatırım sonrasında hayal edebileceğimiz her alanda ve konuda istemeyeceğimiz kadar hazır bileşen mevcut. Elimizin altında, yalnızca birkaç sorguyla ulaşılabilir durumda bu bileşenlerin hepsi. Hiçbir şekilde sıfırdan yeni bir bileşen oluşturmadan, yalnızca varolan bileşenleri birbiriyle doğru şekilde bağlayarak yazılım ürünleri üretmek mümkün, hatta ve hatta endüstrinin ciddi bir çoğunluğu bu şekilde ilerliyor. Dolayısıyla siz de kendi hobi projenizde aynı şekilde ihtiyaç duyduğunuz bileşenleri araştırıp bularak ilerleyebilirsiniz, çok güzel projeler de yapabilirsiniz. Bu tarz projeler benim
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       sığ ve geniş
      &lt;&#x2F;strong&gt;
      olarak nitelendirdiğim proje kümesine giriyor. Teorik bir bilgiye, matematiğe, algoritmalara, kendi veri yapınızı tasarlamaya ihtiyaç yok, bol bol araştırma yapmaya, framework ve kütüphane kullanmayı öğrenmeye, farklı araçları doğru şekillerde birleştirmeye ihtiyaç var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;98f0&quot; name=&quot;98f0&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Benim şahsi gözlemim, bu tarz projeler yapmanın (1) insanın motivasyonunu kırdığı, (2) uzun vadede kişinin gelişimini yavaşlattığı, (3) yeterince eğlenceli olmadığı yönünde.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e8fe&quot; name=&quot;e8fe&quot;&gt;
      Yazının başında da bahsettiğim gibi, eğer ki
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       kütüphanesi yoksa ben oturur yazarım
      &lt;&#x2F;em&gt;
      diyenlerdenseniz, yazının kalanında size
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       derin ve dar
      &lt;&#x2F;strong&gt;
      projeler tasarlamayı göstereceğim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;db6f&quot; name=&quot;db6f&quot;&gt;
      Öğrenmeden Öğrenmek
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ba29&quot; name=&quot;ba29&quot;&gt;
      Bu ana kadar teknik derinliğin ne demek olduğunu bilerek biraz gizledim. Teorik bilgiden kastım ne mesela? Bir proje nasıl diğerinden teknik olarak daha derin oluyor? Gelin bir vaka çalışması üzerinden gidelim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9a8e&quot; name=&quot;9a8e&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;p5js.org&#x2F;get-started&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;p5js.org&#x2F;get-started&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       p5.js
      &lt;&#x2F;a&gt;
      yüzbinlerce kullanıcısı olan bir Javascript çizim kütüphanesi.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;f233&quot; name=&quot;f233&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;editor.p5js.org&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;editor.p5js.org&#x2F;&quot; title=&quot;https:&#x2F;&#x2F;editor.p5js.org&#x2F;&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        p5.js Web Editor
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        A web editor for p5.js, a JavaScript library with the goal of making coding accessible to artists, designers…
       &lt;&#x2F;em&gt;
       editor.p5js.org
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock&quot; data-media-id=&quot;b0db2b9d06fda7098fa97f1c76367601&quot; href=&quot;https:&#x2F;&#x2F;editor.p5js.org&#x2F;&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;7f67&quot; name=&quot;7f67&quot;&gt;
      Diyelim ki ben bugün size hadi gelin sıfırdan bir tane p5 yazalım desem, ne yapardınız?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0ba0&quot; name=&quot;0ba0&quot;&gt;
      Öncelikle, birisi size böyle bir şey sorarsa kesinlikle evet demeyin. Önce projenin
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;processing&#x2F;p5.js&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;processing&#x2F;p5.js&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       github’ını
      &lt;&#x2F;a&gt;
      bir inceleyin, yüzlerce katılımcısı olan bir projeyi sıfırdan yazmak yerine ona katkıda bulunun. Diğer yandan öğrenmek amacıyla bir p5 klonu yazmak aslında çok da zor değil.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;31c7&quot; name=&quot;31c7&quot;&gt;
      Adım 1: Basitleştirme
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;fa8d&quot; name=&quot;fa8d&quot;&gt;
      Bir projeye başlamanın ilk adımı projeyi basit hale getirmek. p5.js içinde ses, video, 2d&#x2F;3d grafikler, kullanıcı aksiyonları, metin desteği falan derken inanılmaz büyük bir proje. Bu projeyi basitleştirmenin yolu da bunun küçük bir alt kümesini seçmek. Gelin sadece 2d grafikleri çizebileceğiniz bir kütüphane ile başlayalım. Hatta daha da basit başlayalım,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       ben bir resim üzerine 2 tane kare çizdirebilir miyim?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;63e0&quot; name=&quot;63e0&quot;&gt;
      Daha önce bu konuda hiç düşünmediyseniz biraz düşünmeye çalışın. Nedir bir resim? Nasıl çizilir? Bir dikdörtgen çizmek ne demektir?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8410&quot; name=&quot;8410&quot;&gt;
      İlk başta aklınıza gelen cevap yüksek ihtimalle bir resmin pikseller bütünü olduğu olmalı. Resim çizmek demek o piksellerin her birine bir renk atamak demek. Bir dikdörtgen ise belli bir matematiksel denkleme uyan piksellerin aynı renkte boyanması. Aşağıda da basit bir typescript tanımı var resim veri yapısı için.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;typescript&quot; data-code-block-mode=&quot;1&quot; id=&quot;092a&quot; name=&quot;092a&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;Color&lt;&#x2F;span&gt; = { &lt;span class=&quot;hljs-attr&quot;&gt;r&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;g&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;b&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt; };&lt;br&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;Point&lt;&#x2F;span&gt; = { &lt;span class=&quot;hljs-attr&quot;&gt;x&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;y&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt; };&lt;br&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;Image&lt;&#x2F;span&gt; = {&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;width&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;height&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;pixels&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-title class_&quot;&gt;Map&lt;&#x2F;span&gt;&amp;lt;&lt;span class=&quot;hljs-title class_&quot;&gt;Point&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-title class_&quot;&gt;Color&lt;&#x2F;span&gt;&amp;gt;&lt;br&#x2F;&gt;}&lt;&#x2F;br&gt;&lt;&#x2F;br&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4d51&quot; name=&quot;4d51&quot;&gt;
      Mesela benim buradaki
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       Image
      &lt;&#x2F;code&gt;
      tanımım seyrek(sparse) bir tanım. Bir resmi aynı zamanda yoğun(dense) olarak da tanımlayabilirdim. Farklı tanımların kolaylaştırdığı farklı operasyonlar var.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;typescript&quot; data-code-block-mode=&quot;1&quot; id=&quot;5725&quot; name=&quot;5725&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;DenseImage&lt;&#x2F;span&gt; = {&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;width&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;height&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;number&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;pixels&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-title class_&quot;&gt;Color&lt;&#x2F;span&gt;[][]&lt;br&#x2F;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;fd9c&quot; name=&quot;fd9c&quot;&gt;
      E peki dikdörtgen çizmek ne demek?
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;typescript&quot; data-code-block-mode=&quot;2&quot; id=&quot;9b87&quot; name=&quot;9b87&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;rect&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;img: Image, p1: Point, p2: Point, c: Color&lt;&#x2F;span&gt;) =&amp;gt; {&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;let&lt;&#x2F;span&gt; i = p1.&lt;span class=&quot;hljs-property&quot;&gt;x&lt;&#x2F;span&gt; ; i &amp;lt; p2.&lt;span class=&quot;hljs-property&quot;&gt;x&lt;&#x2F;span&gt; ; i++) {&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Üst kenar&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    img.&lt;span class=&quot;hljs-property&quot;&gt;pixels&lt;&#x2F;span&gt;.&lt;span class=&quot;hljs-title function_&quot;&gt;set&lt;&#x2F;span&gt;({&lt;span class=&quot;hljs-attr&quot;&gt;x&lt;&#x2F;span&gt;: i, &lt;span class=&quot;hljs-attr&quot;&gt;y&lt;&#x2F;span&gt;: p1.&lt;span class=&quot;hljs-property&quot;&gt;y&lt;&#x2F;span&gt;}, c);&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Alt kenar&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    img.&lt;span class=&quot;hljs-property&quot;&gt;pixels&lt;&#x2F;span&gt;.&lt;span class=&quot;hljs-title function_&quot;&gt;set&lt;&#x2F;span&gt;({&lt;span class=&quot;hljs-attr&quot;&gt;x&lt;&#x2F;span&gt;: i, &lt;span class=&quot;hljs-attr&quot;&gt;y&lt;&#x2F;span&gt;: p2.&lt;span class=&quot;hljs-property&quot;&gt;y&lt;&#x2F;span&gt;}, c);&lt;br&#x2F;&gt;  }&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;let&lt;&#x2F;span&gt; i = p1.&lt;span class=&quot;hljs-property&quot;&gt;y&lt;&#x2F;span&gt; ; i &amp;lt; p2.&lt;span class=&quot;hljs-property&quot;&gt;y&lt;&#x2F;span&gt; ; i++) {&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Sol kenar&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    img.&lt;span class=&quot;hljs-property&quot;&gt;pixels&lt;&#x2F;span&gt;.&lt;span class=&quot;hljs-title function_&quot;&gt;set&lt;&#x2F;span&gt;({&lt;span class=&quot;hljs-attr&quot;&gt;x&lt;&#x2F;span&gt;: p1.&lt;span class=&quot;hljs-property&quot;&gt;x&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;y&lt;&#x2F;span&gt;: i}, c);&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Sağ kenar&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    img.&lt;span class=&quot;hljs-property&quot;&gt;pixels&lt;&#x2F;span&gt;.&lt;span class=&quot;hljs-title function_&quot;&gt;set&lt;&#x2F;span&gt;({&lt;span class=&quot;hljs-attr&quot;&gt;x&lt;&#x2F;span&gt;: p2.&lt;span class=&quot;hljs-property&quot;&gt;x&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;y&lt;&#x2F;span&gt;: i}, c);&lt;br&#x2F;&gt;  }&lt;br&#x2F;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4070&quot; name=&quot;4070&quot;&gt;
      Alın size bir adet dikdörtgen çizme fonksiyonu. Tabii fonksiyonun bazı eksikleri var(p1 sol üst, p2 sağ alt nokta olmak zorunda, aynı zamanda köşelerde boş pikseller var, bir de 1 kenarlar 1 piksel sadece).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;da74&quot; name=&quot;da74&quot;&gt;
      Peki bu resmi üretmek kendi başına yetiyor mu? Bir de çizmek gerekmiyor mu? Bu konuda MDN’in HTML Canvas’ı kullanmak takip edebileceğiniz basit bir rehberi var, aşağıya bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;6d9f&quot; name=&quot;6d9f&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Canvas_API&#x2F;Tutorial&#x2F;Pixel_manipulation_with_canvas&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Canvas_API&#x2F;Tutorial&#x2F;Pixel_manipulation_with_canvas&quot; title=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Canvas_API&#x2F;Tutorial&#x2F;Pixel_manipulation_with_canvas&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Pixel manipulation with canvas - Web APIs | MDN
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Until now we haven&#x27;t looked at the actual pixels of our canvas. With the ImageData object you can directly read and…
       &lt;&#x2F;em&gt;
       developer.mozilla.org
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;845a4310f3500f3e2c26dc0668e8e646&quot; data-thumbnail-img-id=&quot;0*58bVhpfq0mVxwlEl&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;API&#x2F;Canvas_API&#x2F;Tutorial&#x2F;Pixel_manipulation_with_canvas&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*58bVhpfq0mVxwlEl);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;ad05&quot; name=&quot;ad05&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Öğrenmeden öğrenmek, tam olarak az önceki süreci geçirmek demek aslında.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5ce1&quot; name=&quot;5ce1&quot;&gt;
      Fark ettiyseniz HTML Canvas haricinde hiçbir ek soyutlamaya ya da teknolojiye ihtiyaç duymadık. Resimin kendisi için kendi veri modelimizi kullandık, bu modelin üzerine kendi dikdörtgen modelimizi kurguladık. Öğrenmeden öğrenmenin temeli, yeni teknolojiler veyahut soyutlamalara sırtını dayamadan mantık ve matematik üzerine kurulu bir şekilde yazılım geliştirmekten geliyor. Mesela şu anda kenarlar 1 piksel, kenar kalınlığı oluşturmak için ne yapmamız gerekirdi? Tabii ki olay sadece basitleştirerek bitmiyor. Pikseller zaten bir ızgara şeklinde olduğu için dik çizgileri çizmek çok kolay. Peki ya üçgen çizmek istersek? O zaman yamuk bir çizgi çizmemiz gerekecek. Eğer bu yamuk çizgiyi az önce dik çizgiyi çizdiğimiz gibi çizmeye çalışırsak karşımıza bir çizgiden ziyade aşağıdaki gibi kırıklı bir çizgi gelecek.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;955b&quot; name=&quot;955b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;480&quot; data-image-id=&quot;1*K8rodt0tly07NfKYWBf1xQ.jpeg&quot; data-width=&quot;640&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*K8rodt0tly07NfKYWBf1xQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;af14&quot; name=&quot;af14&quot;&gt;
      Bu noktaya kadarki mantığı takip edersek bu tarz problemleri de kendimiz çözmemiz gerektiğini söyleyeceğimi düşünebilirsiniz, bunu söylemeyeceğim. Bu tarz problemler benim
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       teknik derinlik
      &lt;&#x2F;strong&gt;
      adını verdiğim kategoride yer alıyor. Bu problemlerin çözümleri teorik, matematiksel çözümler.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;48ab&quot; name=&quot;48ab&quot;&gt;
      Adım 2: İşin Tekniğini Öğrenmek
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;dc1b&quot; name=&quot;dc1b&quot;&gt;
      Yukarıdaki problemin çözümünü araştırdığımda kısa bir çözümle 2 tane algoritma buldum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3033&quot; name=&quot;3033&quot;&gt;
      1-
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Xiaolin_Wu%27s_line_algorithm&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Xiaolin_Wu%27s_line_algorithm&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Xiaolin Wu’s line algorithm
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cb87&quot; name=&quot;cb87&quot;&gt;
      2-
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bresenham%27s_line_algorithm&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bresenham%27s_line_algorithm&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Bresenham’s line algorithm
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;71e8&quot; name=&quot;71e8&quot;&gt;
      Karşılaştığımız problemlere karşı genelde 3 tip yaklaşımımız var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a87f&quot; name=&quot;a87f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       1-
      &lt;&#x2F;strong&gt;
      Ben bu problemi çözen bir kütüphane bulayım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f3ff&quot; name=&quot;f3ff&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       2-
      &lt;&#x2F;strong&gt;
      Ben bu problemin nasıl çözüleceğini öğrenip kendim çözeyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;02c7&quot; name=&quot;02c7&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       3-
      &lt;&#x2F;strong&gt;
      Ben bu problemi çözmeyeyim, ya da daha basit&#x2F;farklı bir versiyonunu çözeyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b266&quot; name=&quot;b266&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Adım 2
      &lt;&#x2F;strong&gt;
      , burada problemin çözümünü öğrenip kendin çözme yolunu(2. seçenek) öneriyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2153&quot; name=&quot;2153&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu noktada bir dipnot düşmek istiyorum.
      &lt;&#x2F;strong&gt;
      Bu problemleri çözmek sizin iş hayatınızda düzenli olarak yapacağınız bir iş olmayabilir. Hatta çoğu zaman eğer bir problem zaten çözülmüşse gider kütüphanesini kullanırız, neden ben kütüphane kullanmayıp var olan kütüphaneleri tekrar yazayım diye soruyor olabilirsiniz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Haklısınız.
      &lt;&#x2F;strong&gt;
      İş hayatında zaten böyle yapmalısınız, ancak yeri geldiğinde
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       kendi problemlerinizi de çözebiliyor
      &lt;&#x2F;strong&gt;
      olmalısınız. Kendi problemlerinizi çözemiyor olmak bir problemi çözmek için bir kütüphane olmadığında (1. seçeneği uygulayamadığınızda) problemi çözmemek, belki de daha kötü bir kullanıcı tecrübesini kabul etmek(3. seçeneği uygulamak) anlamına geliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d9b7&quot; name=&quot;d9b7&quot;&gt;
      Seçenek 2&#x27;yi uygulamaya devam ettikçe işiniz kolaylaşacak. Kendi problemlerinizi çözmeye alıştığınızda karşınıza gelen diğer problemlerin çözümlerine nasıl ulaşabildiğini daha iyi öğreneceksiniz, belki de normal şartlar altında kütüphane bulamadığınız için iptal edeceğiniz bir özelliği oturup vakit harcayacak ekleyeceksiniz uygulamanıza.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d8ee&quot; name=&quot;d8ee&quot;&gt;
      İşin tekniğini öğrenmek her zaman makale okumak demek değil. Soyutlamaların altını görmeye çalışmak demek. Başkalarının veri modellerini anlamaya çalışmak demek. Bir resmin 2 tane farklı gösteriminden bahsetmiştik(Sparse ve Dense), bunlar yalnızca 2 seçenek mi elimizdeki? Hangi seçeneği kullanmak hangi durumlarda daha mantıklı? JPEG, SVG, PNG, BMP gibi farklı formatlar nasıl avantajlar sağlıyor? Resimin üzerine animasyon yaratmak istesek nasıl bir veri modeli geliştirmemiz gerekir?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;44c4&quot; name=&quot;44c4&quot;&gt;
      Soyutlamaların arkasındaki mekanikleri anladıkça, bilgisayarlar sizi daha az şaşırtmaya başlayacak. Mesela ben şu sıralar bir dosya editörü geliştiriyorum, onun yüzünden dosya editörlerinin veri modellerini anlamayı kafaya taktım biraz. Kullandığım editörlerin neyi nasıl yaptığına dikkat ederek arkadaki modeli tahmin edebiliyorum. Metnin pozisyonunu hesaplarken nasıl hesaplıyorlar, Microsoft Word’de sinir olduğum özelliklerin sebebi ne onları görebiliyorum. Yine benzer bir şekilde Whatsapp’ta bir metni aramaya çalışırken arkadaki veri yapısını hangi aramaları kolaylaştırdığı, hangi aramaları zorlaştırdığı üzerinden hayal edebiliyorum. Ne işe yarıyor bunlar derseniz, kendi kendime gülüp geçmem haricinde çok bir işime yaramıyor. Ancak bana öyle geliyor ki beni günlük hayatımda daha iyi bir mühendis ve araştırmacı haline getiriyor.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;3549&quot; name=&quot;3549&quot;&gt;
      Adım 3: Yeri Geldiğinde Genişlemek
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;83a5&quot; name=&quot;83a5&quot;&gt;
      Tabii ki her maksimalist argüman gibi, öğrenmeden öğrenmenin de uç noktası pratik değil. Hiçbir teknoloji kullanmadan tüm bir uygulamayı tek başınıza
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       yazamazsınız.
      &lt;&#x2F;strong&gt;
      Mümkün değil. Dolayısıyla neyi öğrenmek istediğinize, hangi konseptlerin ilginizi çektiğine, uygulamanızın hangi kısımlarının sizin için daha temel olduğuna göre bir öncelik geliştirip, kalan kısımda tabii ki var olan ekosisteme sırtınızı dayayabilmelisiniz. Ancak projenin temeli, sizin kendinizi geliştirmek istediğiniz
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       domain
      &lt;&#x2F;strong&gt;
      olmalı.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;7629&quot; name=&quot;7629&quot;&gt;
      Nası Projeler Seçmeliyim?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6611&quot; name=&quot;6611&quot;&gt;
      E peki nasıl bulabilirim bu tarz projeler diye düşünüyorsanız, aslında günlük hayatta kullandığınız servislerin çoğunun basit bir versiyonunu yazmayı deneyebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;2c34&quot; name=&quot;2c34&quot;&gt;
       Toy Version Control System: Kendi git’inizi yazmak istemez miydiniz? İstediğiniz tüm özellikleri koyma şansınız var hem de.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;dccb&quot; name=&quot;dccb&quot;&gt;
       Custom Textbox: Hepimizin her gün kullandığı html textbox aslında altında çok eğlenceli mekanikler içeriyor. Yazdığınız metnin piksellerini hesaplayıp ona göre alt satıra inmeli misiniz, kullanıcı ok tuşlarına bastığında işaretçiyi nereye götürmelisiniz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8ee7&quot; name=&quot;8ee7&quot;&gt;
       Toy Image Editor: Bu yazıda başladığımız sistemi bir adım öteye götürüp kendi resim editörünüzü yazmak istemez misiniz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0e22&quot; name=&quot;0e22&quot;&gt;
       Toy Grammarly: Eğer dil bilgisi veya kuralları ilginizi çekiyorsa, yazdığınız metni kendi gramer motorunuz ile kontrol etmeye çalışmak ister misiniz?
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li graf--trailing&quot; id=&quot;29ec&quot; name=&quot;29ec&quot;&gt;
      Bu projelerden bahsetmemin sebebi, daha önce üzerine düşündüğüm, ya buna uğraşsam ne eğlenirim dediğim projeler olması. Uç seviyede bir uygulama yazmanıza gerek yok son kullanıcıyı düşünen, ancak günlük hayatta nasıl işlediğini hiç düşünmeye ihtiyaç duymadan kullandığınız uygulamaları yazmaya çalıştığınızda o uygulamalara dair olan bakış açınız da değişecek bence.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Eğer ki sizin aklınıza gelen uygulamalar varsa onları da cevap olarak yazın, tartışalım!
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;8f883ed82275&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-11-15T23:33:07.594Z&quot;&gt;
     November 15, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yaz%C4%B1l%C4%B1m-projeleri-kapsaml%C4%B1-rehber-8f883ed82275&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Some Thoughts on Academia vs Industry(with a focus on Computer Science)</title>
        <published>2023-11-01T00:00:00+00:00</published>
        <updated>2023-11-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/academia-vs-industry/"/>
        <id>https://alperenkeles.com/posts/academia-vs-industry/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/academia-vs-industry/">&lt;h1 id=&quot;some-thoughts-on-academia-vs-industry-with-a-focus-on-computer-science&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-thoughts-on-academia-vs-industry-with-a-focus-on-computer-science&quot; aria-label=&quot;Anchor link for: some-thoughts-on-academia-vs-industry-with-a-focus-on-computer-science&quot;&gt;Some Thoughts on Academia vs Industry(with a focus on Computer Science)&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I&#x27;m a 2nd year Computer Science PhD student, I also spent some time in the industry(part-time and internships, not a full-time-employment), I am also a somewhat reactionary person, I criticize a lot, I try to view problems of the processes that I reside in, I try to see what the originating reasons for such phenomenon is.&lt;&#x2F;p&gt;
&lt;p&gt;Today, there was a short Twitter discussion on senior academics leaving academia to join industry as Software Architects, and I bluntly answered with the obvious &amp;quot;money motive&amp;quot;. It&#x27;s not a secret that industry pays better, but that&#x27;s not the only relevance of money. Industry also spends more money too. Industrial labs get more clusters, more engineers, more scientists, working on ambitious projects in periods of time many academic labs would not be working on. In short, they make more investment to their projects than small academic labs, at least most of the time.&lt;&#x2F;p&gt;
&lt;p&gt;But is that the only reason, can we really condense all of these different people leaving academia to just one reason? If we give the same amount of money to an academic lab, is that going to fix everything? I don&#x27;t think so. Let&#x27;s explore what other reasons people might have, what are the differences between academic and industrial labs, and how deep are these reasons lie in the foundations of the current academic system.&lt;&#x2F;p&gt;
&lt;p&gt;Before moving on, I must make it clear that this is simply an opinion piece, I&#x27;ll try to use as many facts as I can that exist on the literature, I&#x27;ll try to make my arguments as general as possible, but my opinions still rely on my experience and beliefs. I must warn the reader that the sources I quote will reflect my views, the arguments I build will be based on facts that reside on my side. I welcome all different views on the topic together with any type of criticism.&lt;&#x2F;p&gt;
&lt;p&gt;One thing I do a lot is a comparison between alternative realities. Let&#x27;s compare two realities of the same person, making one choice differently. One of them is a successful academic that has published many papers, made considerable impact, recruited many bright students; the other one is a successful engineer working at a company they are happy with, has a hardworking team beneath them, they are able to effectively create value inside their company.&lt;&#x2F;p&gt;
&lt;p&gt;Note that even this is pushing the boundaries of my arguments into certain corners, but let&#x27;s worry about that later on.&lt;&#x2F;p&gt;
&lt;p&gt;The academic has;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Considerable pay.&lt;&#x2F;li&gt;
&lt;li&gt;Tenure(they are basically guaranteed employment)&lt;&#x2F;li&gt;
&lt;li&gt;Freedom:
&lt;ul&gt;
&lt;li&gt;to build a vision of research they believe in&lt;&#x2F;li&gt;
&lt;li&gt;to work on what they want(to the extent their grant agency provides them, which is usually a lot)&lt;&#x2F;li&gt;
&lt;li&gt;to recruit students they see fit to themselves(to the extent their budget allows them to)&lt;&#x2F;li&gt;
&lt;li&gt;to work with external collaborators they see fit&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Prestige(being a professor is rather cool)&lt;&#x2F;li&gt;
&lt;li&gt;A lot more responsibilities that the engineer. Admin stuff, budget stuff, department stuff, teaching stuff, research stuff, community stuff...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You&#x27;ll realize that this is one model of funding, which is very frequent in CS, so I&#x27;m going to stuck with that.&lt;&#x2F;p&gt;
&lt;p&gt;The engineer has;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Usually greater pay than the academic&lt;&#x2F;li&gt;
&lt;li&gt;A chance to work on a product that people actually use&lt;&#x2F;li&gt;
&lt;li&gt;Large teams with experienced engineers working on a single product&lt;&#x2F;li&gt;
&lt;li&gt;A rather easy process switching companies&lt;&#x2F;li&gt;
&lt;li&gt;A lot more external pressure than the academic. If your manager says finish this project by this time or you&#x27;re done, than you&#x27;re done.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To me, these provide 5 potential avenues of comparison.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Stability&#x2F;Security&lt;&#x2F;li&gt;
&lt;li&gt;Dynamism&#x2F;Adaptability&lt;&#x2F;li&gt;
&lt;li&gt;Freedom&#x2F;Pressure&lt;&#x2F;li&gt;
&lt;li&gt;Output&lt;&#x2F;li&gt;
&lt;li&gt;Team&lt;&#x2F;li&gt;
&lt;li&gt;Facilities&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Let&#x27;s go over each of these avenues&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stability-security&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#stability-security&quot; aria-label=&quot;Anchor link for: stability-security&quot;&gt;Stability&#x2F;Security&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;It should be clear that I believe an academic job is much more stable, and somewhat more secure than the industrial one. Once the academic has tenure, they are basically guaranteed lifetime employment, and most universities tend to have very long lifetimes. Academic has a considerable pay, in most places enough to make them happy, and they usually make money off external consulting too.&lt;&#x2F;p&gt;
&lt;p&gt;Although, I must mention that this security&#x2F;stability is hard to come by. A very small percentage of CS PhD&#x27;s are able to get academic jobs, a much smaller percentage gets tenure. So even getting to this stage is a pretty insecure and unstable process. The pressure of working with many other bright young scholars forces one to work longer and longer hours, focusing on a simple objective, getting tenure. Whereas, the industrial version, making more money working 8 hours days might secure their future by carefully planning their future, investing their surplus wage, using the extra hours to put themselves in &amp;quot;hireable&#x2F;valuable&amp;quot; positions.&lt;&#x2F;p&gt;
&lt;p&gt;When we talk about senior academics moving to industry though, I believe this stability&#x2F;security aspect rather disappears from the discussion. Many accomplished academics will have their future already secured, so the displacement of employment guarantee should not really worry them.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dynamism-adaptability&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dynamism-adaptability&quot; aria-label=&quot;Anchor link for: dynamism-adaptability&quot;&gt;Dynamism&#x2F;Adaptability&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I believe industrial careers are more dynamic, and industry engineers are more adaptable to new conditions. Even though the academics have much freedom over basically anything, they are bound by their expertise. Expertise in one academic area does not easily convey to another, as academic expertise tends to form over time and it usually builds upon a very sharp line. On the other hand, many industrial products use similar building blocks, meaning expertise in building one product (in my very immature and unfounded opinion) translates much better to building another product.&lt;&#x2F;p&gt;
&lt;p&gt;To me, this means that an industrial engineer working at Company X on product Y today can easily change their job to work in Company A on product B, whereas it would be much harder for the academic to change the area they work on. They need to cultivate new relationships with new external collaborators, recruit new students, learn te culture of a new academic community, adapt to the conventions and the systems of that community, funding agencies that provide funding to that specific area, and so on... I believe all of these force academics to stay committed to certain communities and domains, putting high thresholds and gatekeepers in the way of changing areas of expertise.&lt;&#x2F;p&gt;
&lt;p&gt;I think in the context of our discussion, this is an important avenue where industry leaves academia behind. If an academic wants to change their domain of expertise, maybe it&#x27;s easier to move to industry? I&#x27;m not really sure about this part, but I think overall this could be a big part of the discussion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;freedom-pressure&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#freedom-pressure&quot; aria-label=&quot;Anchor link for: freedom-pressure&quot;&gt;Freedom&#x2F;Pressure&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I believe academic careers have much much much more freedom on almost any avenue. As you see from my passion in writing 3 much&#x27;es, I don&#x27;t even think this is really debatable. I, as a PhD student, am able to pick my own projects as long as my advisor approves it, which he is more than happy to do. I see this is a similar case for many of my friends, especially as students get more senior, they draw their own path, differing from their advisors, and that is expected, it is asked for, even required.&lt;&#x2F;p&gt;
&lt;p&gt;Academia has the pressure of the race you&#x27;re in. A Ph.D. student is racing for the cunning job market, a tenure-track professor is racing for the tenure spot. People who submit to the same journals and conferences race for the acceptance of their paper. The important thing is, this pressure is mostly self managed. You set your own limits, your own objectives, and the pressure is mostly shaped by your hands, especially as you get more senior.&lt;&#x2F;p&gt;
&lt;p&gt;In the industry, one gains freedom through seniority, but pressure resurfaces in many ways. There is the pressure from one&#x27;s manager, the pressure from the market, the pressure from the race with others in your position for promotion, the pressure from investors. In short, pressure is an important part of the job. It is also shaped by your hand in some cases, but I believe not as much as it is in academia.&lt;&#x2F;p&gt;
&lt;p&gt;I think, in the context of our discussion, this is particularly important and, to me, surprising. I don&#x27;t really see how academics leave their freedom and put themselves under the pressure that as seniors, go under the pressure that they were freed by their positions in their universities. This could be due to policies of companies(maybe academics are promised more freedom and less pressure), or some other factor that I cannot foresee right now. We should probably ask them about this.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;output&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#output&quot; aria-label=&quot;Anchor link for: output&quot;&gt;Output&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In my experience, the output incentives, and as a result the outputs themselves, are very different in industry and academia.&lt;&#x2F;p&gt;
&lt;p&gt;Academic work tends to have many smaller outputs, gradually migrating over time, divided into many papers. The output product is usually not consumer grade, it&#x27;s designed with an academic mindset to be used by other academics. It tries to disrupt existing beliefs, concepts and limits, to create novelty one might say. The industrial work focuses much more on a designated consumer base and the problems of those consumers. It focuses on providing solutions to urgent consumer needs, novelty is an afterthough.&lt;&#x2F;p&gt;
&lt;p&gt;To exemplify what I mean, think about creating a new web interface for an existing database system. None of the components or ideas might be new, maybe the interface already exists for a different database, and you just create a very similar one for a different database. This would be out of the purview of academic work, it lacks novelty in all senses. Yet it might be a very good idea for an industrial product, as users of the database would like to use a better interface of couse.&lt;&#x2F;p&gt;
&lt;p&gt;In the context of our discussion, I think this is mostly about individual beliefs and desires. Every person has different motives, and maybe professors moving to academia is sometimes only about building products that solve urgent problems, rather than creating novelty. Maybe we are just putting too much thought into these decisions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;team&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#team&quot; aria-label=&quot;Anchor link for: team&quot;&gt;Team&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Academic work is mostly done in small teams, it doesn&#x27;t scale up too much. Industrial teams tend to be larger, focus on a single product for a longer period of time, and they usually have senior IC&#x27;s(Individual Contributors). Academics have the advantage of self-recruitment, the ability to work with external collaborators. but they aren&#x27;t usually able to build very large and effective teams with more than 2 senior members working on the same product for a long time.&lt;&#x2F;p&gt;
&lt;p&gt;In the context of our discussion, I think this might be on either side. Working with strong-willed students that work with you for a rather unconditional 5 year span is amazing, you build strong bonds, work towards a common goal, or sometimes even a dream, and once they are a faculty or engineer somewhere else, you get to continue working with them if they still do research in similar areas. Yet, industrial labs have the advantage that seniors don&#x27;t have to spend their days doing admin or teaching stuff, there are people who do full-time research and coding with more than 10 years of experience. This is something almost no academic lab will ever have. Yet, these industrial labs are mostly contained to themselves, no external collaboration, even publishing papers is usually hard due to company regulations.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;facilities&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#facilities&quot; aria-label=&quot;Anchor link for: facilities&quot;&gt;Facilities&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Industrial labs tend to have greater clusters, machines, a larger workforce. These are facilities academic labs may lack. I&#x27;m not really sure how important this is for our discussion, but I don&#x27;t think it really is much. There are industrial labs with small budgets and academic labs with huge budgets, and everybody somehow gets work done. So I won&#x27;t go into much detail on this.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summary&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#summary&quot; aria-label=&quot;Anchor link for: summary&quot;&gt;Summary&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;As a conclusion, I think the dynamic nature of industrial jobs, combined with the ability to work with senior individual contributors and the ability to create impactful products that solve people&#x27;s urgent problems might be the key point that incentivizes senior academics to move to industry. But, I think we should just ask them, they&#x27;ll probably give us more insights than we could ever find out by discussing amongs ourselves.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Algoritmik Problemler: Kapsamlı Rehber</title>
        <published>2023-11-01T00:00:00+00:00</published>
        <updated>2023-11-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/algoritmik-problemler-kapsamli-rehber/"/>
        <id>https://alperenkeles.com/posts/algoritmik-problemler-kapsamli-rehber/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/algoritmik-problemler-kapsamli-rehber/">&lt;h1 id=&quot;algoritmik-problemler-kapsamli-rehber&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#algoritmik-problemler-kapsamli-rehber&quot; aria-label=&quot;Anchor link for: algoritmik-problemler-kapsamli-rehber&quot;&gt;Algoritmik Problemler: Kapsamlı Rehber&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Bu yazıda, çoğunlukla &lt;a href=&quot;http:&#x2F;&#x2F;leetcode.com&quot;&gt;Leetcode&lt;&#x2F;a&gt; tarzı olarak bahsedilen, aynı zamanda “Competitive Programming”, “Algoritma Sorusu”, “Lanet Olası Algoritmalar” gibi farklı şekillerde de duymuş olabileceğiniz, büyük teknoloji şirketlerinin mülakat süreçlerinde popülerleşmenin ardından pek çok bilgisayar mühendisinin&#x2F;yazılımcının hayatında ciddi bir yer eden problemler nasıl çözülür, algoritma ve veri yapısı konseptleri nasıl öğrenilir, ne işe yarar, nerede kullanılırı anlatacağım.&lt;&#x2F;p&gt;
&lt;p&gt;Yazıma, sıkça gördüğüm birtakım noktalara kendi bakışımı net bir şekilde koyarak başlamak istiyorum. Yazının kalanı bu kabullere dayanacağı için, eğer katılmıyorsanız bu yazı sizin için faydalı olmayabilir.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;“Algoritma ya da veri yapısı bilmek” diye bir konsept yok. “Ben Tree biliyorum” diye bir cümle de yok. &lt;strong&gt;“Algoritmik düşünme” insanda zamanla gelişen, belirli bir noktadan sonra yavaşlasa da bitmeyen bir süreçte öğrenilen bir kabiliyet.&lt;&#x2F;strong&gt; Bazı algoritmaların veya veri yapılarının kodunu yazmayı, zaman ve alan kompleksitesini, hangi durumlarda kullanılabileceğini öğrenmiş olabilirsiniz, bu bilgileri pratikte kullanabilmek ise algoritmik düşünme kabiliyetini geliştirmekle bitiyor.&lt;&#x2F;li&gt;
&lt;li&gt;“Algoritma problemleri” dünya çapında yaygın kullanılan belli algoritmaları ve veri yapılarını, algoritmik teknikleri, kombinatorik ve olasılık gibi matematiksel konseptleri doğru şekilde birleştirmenizi bekleyen birtakım sorular.&lt;&#x2F;li&gt;
&lt;li&gt;“Algoritma problemlerini” çözmek gereksiz değil. Gereksiz olduğunu düşünmenin en büyük sebebi, pek çok yazılım projesinde belli özellikleri feda etmenin kolay olması. Performansı yüksek bir kodu her saniye çalıştırabilirken, performansı düşük bir kodu daha az çalıştırmanın yollarını buluyoruz genelde. Algoritmik verimsizlikleri kullanıcı deneyimini o verimsizliği saklayacak şekilde manipüle ederek saklıyoruz. Algoritmik problemleri çözemiyor olmak, o problemlerin oluşturacağı çözümleri yok saymaya gidiyor dolayısıyla. &lt;strong&gt;Bugün birisi size ben yazdığım hiçbir kodda algoritma kullanmaya ihtiyaç duymadım diyorsa, demek ki belli özellikleri feda etmiş, ya da daha kötüsü o özelliklerin var olabileceğini düşünmemiş bile.&lt;&#x2F;strong&gt; Burada, bir tip hayatta kalma yanılgısına düşüyor insanlar.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Bu kabuller ile yazımıza başlayalım.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;simdi-sizin-aklinizda-iki-soru-var-algoritma-sorusu-nedir-nasil-cozulur&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#simdi-sizin-aklinizda-iki-soru-var-algoritma-sorusu-nedir-nasil-cozulur&quot; aria-label=&quot;Anchor link for: simdi-sizin-aklinizda-iki-soru-var-algoritma-sorusu-nedir-nasil-cozulur&quot;&gt;Şimdi sizin aklınızda iki soru var, algoritma sorusu nedir, nasıl çözülür?&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Algoritma soruları, her şeyden önce örüntü tanımayı gerektiriyor. Örüntü tanımanın 2 adet temel faydası var.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Soruda verilmiş girdi-çıktı örneklerini kolayca genele yayabilmek için o girdi-çıktılardaki örüntüleri yakalamak gerekiyor.&lt;&#x2F;li&gt;
&lt;li&gt;Algoritmik problemler çoğu zaman özyinelemeli(recursive) yapılara sahip. Bir problemi öz yinelemeli bir şekilde ifade edebilmek de problemin kendi iç örüntülerini tanımayı gerektiriyor.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Örnek vereyim mesela, benim çok sevdiğim bir leetcode sorusu var, adı da &lt;a href=&quot;https:&#x2F;&#x2F;leetcode.com&#x2F;problems&#x2F;next-permutation&#x2F;&quot;&gt;&lt;strong&gt;Next Permutation(Sıradaki Sıralama)&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. Bize herhangi bir dizi veriliyor, dizinin sıradaki permütasyonunu bulmamız isteniyor. Problemin çözümündeki en anahtar adım ise permütasyonun doğası itibariyle özyinelemeli olduğunu fark etmek. Başka bir yazıda bu probleme detaylı bir çözüm yazacağım, ancak şu anda denemek isterseniz oturup biraz çözmeye çalışmanızı tavsiye ederim.&lt;&#x2F;p&gt;
&lt;p&gt;Peki neden ben bu soruyu çok seviyorum biliyor musunuz? Normal şartlarda algoritma sorularıyla ilgili yapılan yorumların neredeyse hiçbiri geçerli değil çünkü bu soru için. Bu soruyu herhangi bir dilde çözmek diğerinden daha kolay değil, soru ne bir veri yapısı(linked list, binary search tree vb.) hakkında bilgi gerektiriyor, ne de bir algoritma hakkında. Yapmanız gereken tek şey örüntüleri çözmek.&lt;&#x2F;p&gt;
&lt;p&gt;Bazı başka sorular böyle değil tabii ki, bazen direkt olarak spesifik bir veri yapısının kendisiyle ilgili sorular geliyor. “Linked List Reversal(ters çevirme) fonksiyonu yaz”, “Binary Search Tree Insertion(eleman ekleme) fonksiyonu yaz” gibi… Bu tarz soruların çözümü ise bu veri yapılarını (1) görselleştirebilmeyi, (2) daha önce yazmış olmayı gerektiriyor. Daha önce hiç Binary Search Tree yazmadıysanız, mülakat esnasında bir anda icat etmeniz çok olası değil.&lt;&#x2F;p&gt;
&lt;p&gt;Görselleştirme için 2 adet web sitesi tavsiye ediyorum. Özellikle Tree ve Graph problemleri için problemi ve çözümü kafanızda canlandırabilmek aşırı önemli.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;visualgo.net&#x2F;en&quot;&gt;https:&#x2F;&#x2F;visualgo.net&#x2F;en&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.cs.usfca.edu&#x2F;~galles&#x2F;visualization&#x2F;Algorithms.html&quot;&gt;https:&#x2F;&#x2F;www.cs.usfca.edu&#x2F;~galles&#x2F;visualization&#x2F;Algorithms.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Görselleştirme ve pratiğin yanında şahsen bence öğrenebileceğiniz en önemli kabiliyet öz yinelemeli(recursive) düşünmeyi öğrenmek. Recursive düşünmek ne demek peki, biraz da bundan bahsedeyim.&lt;&#x2F;p&gt;
&lt;p&gt;Öz yineleme ile düşünmek, bir problemi kendinden daha küçük parçalara bölüp, problemin çözümünü parçaların çözümü ile birleştirmeye dayanıyor. Örnek veriyorum, bir ağacın derinliğine bakarken, çocuklarının derinliklerinin maksimumuna 1 ekliyoruz aşağıdaki gibi.&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;type Tree = { tag: &amp;quot;Node&amp;quot;, children: Tree\[\]} | { tag: &amp;quot;Leaf&amp;quot; }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;const height = (tree) =&amp;gt; {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  if (tree.tag === &amp;quot;Leaf&amp;quot;) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 1;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  } else {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 1 + Math.max(tree.children.map((child) =&amp;gt; child.height()))  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Burada çözümün mantıklı olma sebebi bir ağacın yüksekliğinin çocuklarının yüksekliklerinin üzerinden tanımlanabiliyor olması. Öz yinelemeyi akılda tutarak kod yazmak da bu tarz bağlantıları sürekli kurmak demek. Bu kod yazma tarzının en büyük avantajı(bence) lokal düşünmeye izin vermesi. Yalnızca şu anda elimizde bulunan ağaca odaklanabiliyoruz çocuklarına hiç bakmadan.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;e-peki-hocam-iyi-guzel-diyorsun-da-biz-nasil-ogrenecegiz-bunlari&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#e-peki-hocam-iyi-guzel-diyorsun-da-biz-nasil-ogrenecegiz-bunlari&quot; aria-label=&quot;Anchor link for: e-peki-hocam-iyi-guzel-diyorsun-da-biz-nasil-ogrenecegiz-bunlari&quot;&gt;E peki hocam iyi güzel diyorsun da biz nasıl öğreneceğiz bunları?&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Bu noktaya kadar dedik ki örüntü çözebilmek lazım, pratik lazım, görselleştirme lazım, recursive düşünme lazım, e peki bunları öğrenmek için en iyi yol nedir? Birisi oturup kurs mu almalı, leetcode mu çözmeli?&lt;&#x2F;p&gt;
&lt;p&gt;Bence şahsen öğrenmenin en iyi yolu pratik, ki ben bunu yıllarca bu işin pratiğinden kaçmış bir insan olarak söylüyorum. Bol bol kod yazmak, alışmak gerekiyor. Bir ağaç ya da graf tanımının refleksif olarak omurgadan yazılabilir hale gelmesi gerekiyor. Peki pratiğin ilk aşaması ne? Leetcode kolay soruları çözmek mi mesela?&lt;&#x2F;p&gt;
&lt;p&gt;Benim bu konuda şahsen biraz farklı bir görüşüm var. Ben programlamaya aşağıda bıraktığım dökümandaki egzersizleri çözerek başladım. Aşağı, yukarı, ters, düz, içi dolu&#x2F;boş bir sürü ağaç çizerdim farklı şekillerde. Ağaç egzersizlerinin en iyi tarafı görsel bir çıktının sayının fonksiyonu olarak ortaya çıkması. Bu tarz egzersizler ekstra bir bilgi öğrenme gereği oluşturmadan kendi kendinize algoritmik düşünme kabiliyetini geliştirme fırsatı veriyor başlangıç aşamasında.&lt;&#x2F;p&gt;
&lt;p&gt;Giriş problemlerini bitirdikten sonra, yapılabilecek en iyi şey herhangi bir hazır veri yapısına ya da algoritmaya ihtiyaç duymadığınız problemlerle ilgilenmeye devam etmek iyice rahat hale gelene kadar. Burada çeviri problemleri güzel bir giriş noktası olabilir. &lt;a href=&quot;https:&#x2F;&#x2F;leetcode.com&#x2F;problems&#x2F;roman-to-integer&#x2F;&quot;&gt;Roma Rakamlarından Sayıya Çeviri&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;parseInt&quot;&gt;String’den Sayıya Çeviri&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;leetcode.com&#x2F;problems&#x2F;base-7&#x2F;&quot;&gt;Farklı Sayı Tabanları Arasında Çeviri&lt;&#x2F;a&gt;… Benzer şekilde &lt;a href=&quot;https:&#x2F;&#x2F;leetcode.com&#x2F;problems&#x2F;add-strings&#x2F;&quot;&gt;String Halindeki 2 Sayıyı Toplama&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;leetcode.com&#x2F;problems&#x2F;add-binary&#x2F;&quot;&gt;İkili Tabanda Toplama&lt;&#x2F;a&gt;, gibi problemlerle ilgilenebilirsiniz. Toplama problemlerini çıkarma&#x2F;çarpma&#x2F;bölme için de yapabilirsiniz. Yine herhangi bir algoritma&#x2F;veri yapısı kullanmadan çözebileceğiniz problemler &lt;a href=&quot;https:&#x2F;&#x2F;projecteuler.net&#x2F;archives&quot;&gt;Project Euler Sorularını&lt;&#x2F;a&gt; kullanabilirsiniz.&lt;&#x2F;p&gt;
&lt;p&gt;Bu noktada zaten bir yandan kullanıyor olacağınız Array bazlı problemlerle ilgilenmeye başlayabilirsiniz. Search ve Sort problemleri array ile ilgili en sık göreceğiniz problemler. Burada yapılan en büyük hata ise bunların arkasındaki konseptleri anlamadan koda odaklanmak. Burada 2 adet kod örneği koyalım ortaya neden bahsettiğimi somutlaştırmak için.&lt;&#x2F;p&gt;
&lt;p&gt;Aşağıda, Google’a Insertion Sort yazdığım ilk çıkan &lt;a href=&quot;https:&#x2F;&#x2F;www.geeksforgeeks.org&#x2F;insertion-sort&#x2F;&quot;&gt;Geeks for Geeks&lt;&#x2F;a&gt;’deki kodu görüyorsunuz.&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;function insertionSort(arr, n)    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;{    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    let i, key, j;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    for (i = 1; i &amp;lt; n; i++)   
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    {    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        key = arr\[i\];    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        j = i - 1;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;     
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        &#x2F;\* Move elements of arr\[0..i-1\], that are    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        greater than key, to one position ahead    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        of their current position \*&#x2F;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        while (j &amp;gt;= 0 &amp;amp;&amp;amp; arr\[j\] &amp;gt; key)   
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        {    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            arr\[j + 1\] = arr\[j\];    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;            j = j - 1;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        }    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        arr\[j + 1\] = key;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;} 
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aslında bu kodun çok daha okunabilir bir versiyonu yazılabilir.&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; 1. Diziyi ikiye ayır, sıralanmış ve sıralanmamış kısım olarak.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; 2. Sıralanmamış dizinin ilk elemanını al, onu sıralanmış dizinin   
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; içinde doğru yere yerleştir.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; 3. Sıralanmamış dizi bitene kadar devam et.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; Bu fonksiyon, dizinin n&amp;#39;inci elemanını dizinin 0..n-1&amp;#39;lik  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; baş kısmında ne noktaya yerleştirmesi gerektiğine karar verecek.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;function findSortedPlace(arr, n) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  let i;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Eğer n&amp;#39;inci eleman ilk elemandan küçükse, en başa yerleşmeli.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  if (arr\[n\] &amp;lt;= arr\[0\]) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 0;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Eğer n&amp;#39;inci eleman dizideki iki elemanın arasındaysa, ikinci  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; elemanın pozisyonuna yerleşmeli.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  for(i = 0; i &amp;lt; n - 1 ; i++) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    if (arr\[n\] &amp;gt;= arr\[i\] &amp;amp;&amp;amp; arr\[n\] &amp;lt;= arr\[i + 1\]) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      return n + 1;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Eğer tüm elemanlardan büyükse, yerinde kalmalı.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  return n  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;     
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; Bu fonksiyon, dizinin k&amp;#39;ıncı elemanından itibaren n&amp;#39;inci  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; elemana kadar tüm elemanları 1 sağa kaydırmalı.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;function shiftArray(arr, k, n) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  let i;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Sağdan sola gidiyoruz ki sildiğimiz elemanları ayrıca tutmak zorunda  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; kalmayalım. Eğer kafanızda oturmuyorsa, soldan sağa gittiğimizde  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; ne olacağını düşünmeyi egzersiz olarak yapabilirsiniz.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  for (i = n - 1; i &amp;gt;= k ;i--) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    arr\[i+1\] = arr\[i\];  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  }  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; Bu fonksiyon, dizinin n&amp;#39;inci elemanı dizinin 0..n-1&amp;#39;lik   
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;&#x2F; baş kısmında doğru yere yerleştirecek.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;function insertSorted(arr, n) {  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Elemanı kaydet.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  const element = arr\[n\];  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Elemanın gelmesi gereken yeri bul.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  const place = findSortedPlace(arr, n);  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Elemanın geleceği yerden itibaren elemanları kaydır.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  shiftArray(arr, place, n);  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &#x2F;&#x2F; Elemanı yerleştir.  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  arr\[place\] = element;  
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Probleme bu şekilde hiyerarşik ve fonksiyonel yaklaştığımızda, i = n mi olacaktı n-1 mi gibi tartışmaları geride bırakabiliyoruz. Çünkü aslında bu algoritmaların hepsinin kendi içinde belli bir yapısı, bir hiyerarşisi, bir sistemi var. Geeks for Geeks gibi sitelerdeki kodların en büyük problemi bu hiyerarşiyi yok etmeleri, arkadaki konseptleri silmeleri.&lt;&#x2F;p&gt;
&lt;p&gt;Search ve Sort problemlerinden sonra artık ilk dil dışı veri yapınızla ilgilenmeye başlayabilirsiniz, Linked List. Burada önemli olan nokta, kullandığınız dillerin sizlere Array’ler ile uğraşmak için çok ciddi bir altyapı sağlıyor olması. Kendi veri yapınızda böyle bir lüksünüz yok, her detayla sizin ilgilenmeniz gerekiyor. Aynı şekilde, Linked List’e geçerken bir de parantez açmak gerek, çünkü genelde “Linked List ne abi hiçbir zaman kullanmayacağım napıyorum” gibi bir bakış açısı var.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Linked List, karşınıza çıkabilecek en basit veri yapılarından bir tanesi. Linked List sorulara da size Graph ya da Tree gibi yapıların sorularını çözmeye yardımcı olacak refleksler kazandırıyor. Görselleştirmenin işe yaradığı ilk problem Linked List mesela. Linked List sorularını çözmeden de bu konseptleri öğrenebilirsiniz tabii ki, ama toplama öğrenmeden çarpma öğrenmeye eşdeğer bir durumla karşılaşıyor olma şansınız çok yüksek.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Linked List ile ilgili konseptleri öğrenmek için, bir Linked List’in arayüzünü yazmak yeterli bence çoğu zaman. Favori dilinizdeki Array&#x2F;Vector kütüphanesindeki fonksiyonlardan ilginizi çekenleri(insert, find, remove, index, length, reverse, merge, concat) doğru bir şekilde yazıp test edebiliyorsanız, kalan yolda stack, queue, deque, binary tree, nary tree, heap, graph vb gibi çok fazla veri yapısı var. Bunların hepsini tabii ki bir tane blog yazısında tartışmayacağım, ancak neden önemli olduklarını biraz konuşmak lazım.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;personal-opinion-alert&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#personal-opinion-alert&quot; aria-label=&quot;Anchor link for: personal-opinion-alert&quot;&gt;Personal Opinion Alert!&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Bir yazılımcının asıl işi kod yazmak değil. Kod yazmak bir araç, bir yazılımcının asıl işi modelleme yapmak. Kullanıcının aksiyonlarını, uygulamadaki verileri, verilerin kullanıcıya nasıl sunulduğunu modellemek, bunların arasında bir ilişki kurmak. Eğer ki siz, yazılımcı olarak doğru modelleme araçlarına sahip değilseniz, o noktada &lt;a href=&quot;https:&#x2F;&#x2F;eksisozluk1923.com&#x2F;elinde-cekic-olan-her-seyi-civi-sanir--830764&quot;&gt;elinde sadece çekiç olan ustaya&lt;&#x2F;a&gt; benzersiniz. Üzerine çalıştığınız problemde bir ağaç yapısı gördüğünüzde onu tanıyamazsanız, onu bir array ile modelleyebilirsiniz tabii ki. Elimizde tarihin gördüğü en güçlü makineler var, saniyede milyonlarca işlem yapabiliyorlar sonuçta, bir ağaçta 10 işlem yapmak yerine bir array’de 1000 işlem yapmak çoğu zaman bir problem değil, problem olduğu noktaya kadar. Ölçek büyüdükçe, daha fazla kullanıcıya ulaştıkça, daha fazla problem çözdükçe, aynı anda daha fazla kod çalıştırdıkça yanlış modellemenin getirdiği verimsizlikler birikmeye başlıyor. O noktada da en başta hayatta kalma yanılgısı ile bahsettiğim gibi, çoğu zaman eldeki imkanlar neticesinde kullanıcı arayüzleri dizayn ediliyor, aslında kullanıcıya daha iyi hizmet verebilecek özellikler belki de hiçbir zaman sahaya sürülmüyor, tartışılmıyor. Bir kodu kullanıcının her mouse hareketinde çalıştırmakla, her klavyeye basışında çalıştırmakla, her kaydet butonuna bastığında çalıştırmak arasındaki en büyük fark, bu kodun ne kadar hızlı çalışabildiği oluyor bir noktada.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;toplayip-kapatalim&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#toplayip-kapatalim&quot; aria-label=&quot;Anchor link for: toplayip-kapatalim&quot;&gt;Toplayıp Kapatalım&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Biraz dağınık bir yazı oldu, ben de kendi kafamı aşırı toplayamadım ama yayınlıyorum artık bu şekilde şimdilik, sonrasında güncellerim biraz da belki.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Algoritmik problem çözmenin temellerinde örüntü tanıma, öz yinelemeli düşünebilme, yaygın veri yapıları ve algoritmalarla haşır neşir olma, bol bol pratik yapma var.&lt;&#x2F;li&gt;
&lt;li&gt;Algoritmik problem çözme kabiliyetini geliştirebilmek için yazıda benim şahsen mantıklı gördüğüm aşırı da detaylandırılmamış bir yol haritası var. Veri yapıları ve algoritmalara girmeden daha basit, mantıksal ve matematiksel problemlerle başlayan, sonrasında Linked List&#x2F;Binary Tree gibi basit yapıların kendi arayüzlerini yazmakla devam eden. Deneyip yorum yapan olursa yorumlarını beklerim.&lt;&#x2F;li&gt;
&lt;li&gt;(bence) Bu konseptleri öğrenmek sizi daha iyi bir mühendis yapacak.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Umarım faydalı bir yazı olmuştur, buraya kadar okuyan herkese teşekkür ediyorum, iyi günler dilerim.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Hurdles of Designing A Layout Model</title>
        <published>2023-08-06T00:00:00+00:00</published>
        <updated>2023-08-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/hurdles-of-designing-a-layout-model/"/>
        <id>https://alperenkeles.com/posts/hurdles-of-designing-a-layout-model/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/hurdles-of-designing-a-layout-model/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;c6fa&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;31c6&quot; name=&quot;31c6&quot;&gt;
      Hurdles of Designing A
                            Layout Model
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9e49&quot; name=&quot;9e49&quot;&gt;
      For the past 2 weeks, I have been
                            working on designing my own layout model for the
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; href=&quot;http:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       document generator I’ve been working on
      &lt;&#x2F;a&gt;
      . I have
                            successfully failed to come up with a sound modal that’s expressive enough for all my use
                            cases. I decided to document my pains for (1) clearing my vision, (2) maybe helping out
                            anyone who ever tries to go in similar routes, (3) finding people to help me design better
                            as the best way to get answers to your questions on the internet is to provide wrong
                            answers. So, let’s talk about some really wrong layout models.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;7e9c&quot; name=&quot;7e9c&quot;&gt;
      What is the problem I am trying
                            to solve?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ef1c&quot; name=&quot;ef1c&quot;&gt;
      Before going into the details of
                            the design, it is important to talk about what I am trying to solve here. What is the
                            document this layout model is supposed to represent?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1d76&quot; name=&quot;1d76&quot;&gt;
      I am working on
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; href=&quot;http:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       CVDL(CV
                                Description Language),
      &lt;&#x2F;a&gt;
      which is a misleading name at this point, because the project
                            is really about designing an extensible structured layout generator. The layout generator
                            mainly depends on
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       data
      &lt;&#x2F;strong&gt;
      and
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       layout schemas.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;9d88&quot; name=&quot;9d88&quot;&gt;
      Data Schema
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;30b3&quot; name=&quot;30b3&quot;&gt;
      A data schema defines a set of
                            fields and their types. Below, you see an example data schema for a work experience section
                            of a CV.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;json&quot; data-code-block-mode=&quot;1&quot; id=&quot;375e&quot; name=&quot;375e&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;schema-name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Work-Experience&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;header-schema&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Title&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;String&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item-schema&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Company&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;String&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Position&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;String&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Skills&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;List&amp;lt;String&amp;gt;&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date-Started&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date-Finished&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date | String&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Location&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;String&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Text&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;&quot;type&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;MarkdownString&quot;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--pre&quot; id=&quot;e683&quot; name=&quot;e683&quot;&gt;
      Layout Schema
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;02c7&quot; name=&quot;02c7&quot;&gt;
      A layout schema defines a mapping
                            of the variables in the data schema into the document. Below, you can see both the visual
                            representation and the JSON version of a layout schema for a work experience section.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;e19a&quot; name=&quot;e19a&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1553&quot; data-image-id=&quot;1*aF9dyyAmuLv95QmDj5uhzQ.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1985&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*aF9dyyAmuLv95QmDj5uhzQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       An Item Layout Schema for “Work-Experience” section
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--figure graf--preV2&quot; data-code-block-lang=&quot;json&quot; data-code-block-mode=&quot;1&quot; id=&quot;2d80&quot; name=&quot;2d80&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;schema-name&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Work-Experience&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;header-layout-schema&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Title&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;width&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;70&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item-layout-schema&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Stack&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;elements&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;FrozenRow&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;elements&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Company&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;FrozenRow&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;elements&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date-Started&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Text&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;-&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                    &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date-Finished&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                                &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                            &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                        &lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;width&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;30&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                                &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Position&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;width&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;70&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Text&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;width&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;70&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-attr&quot;&gt;&quot;Ref&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;item&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Skills&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                            &lt;span class=&quot;hljs-attr&quot;&gt;&quot;width&quot;&lt;&#x2F;span&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;70&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;                &lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--pre&quot; id=&quot;7f10&quot; name=&quot;7f10&quot;&gt;
      What is the problem I am
                            actually dealing with?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2326&quot; name=&quot;2326&quot;&gt;
      So, if I have both of these schemas
                            working with each other, what’s the problem?
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       What’s the hurdle?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1219&quot; name=&quot;1219&quot;&gt;
      The hurdle is the fact that I will
                            not always receive such well constructed layouts.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;801c&quot; name=&quot;801c&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1756&quot; data-image-id=&quot;1*QEESd-Rn1TdpacbuAKn1hg.png&quot; data-width=&quot;2609&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*QEESd-Rn1TdpacbuAKn1hg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;f8ef&quot; name=&quot;f8ef&quot;&gt;
      I need sane default behaviors
                            for people to use this system. What should I do if I receive a specification as above? There
                            are various options.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;e24e&quot; name=&quot;e24e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Just throw an error:
       &lt;&#x2F;strong&gt;
       This is a bad
                                idea in general. You don’t see your Microsoft Word throwing errors when you try to do
                                monstrous stuff, it finds a way to squeeze it in.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a5ec&quot; name=&quot;a5ec&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Wrap using some predefines strategy:
       &lt;&#x2F;strong&gt;
       When you start thinking about potential solutions, you can come up with two
                                main ones. The red strategy on the left is simpler. It implements wrapping on the
                                outmost layer by pushing any item that doesn’t fit to the next line. You could also have
                                some strategy like the blue on the right though, where you check assume boxes have their
                                own columns and they continue to grow there.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;2&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--li&quot; id=&quot;8377&quot; name=&quot;8377&quot; style=&quot;width: 45.506%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2251&quot; data-image-id=&quot;1*rQZhkNueNAHQvejYKggS-g.png&quot; data-width=&quot;2370&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*rQZhkNueNAHQvejYKggS-g.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;c95b&quot; name=&quot;c95b&quot; style=&quot;width: 54.494%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1876&quot; data-image-id=&quot;1*dimtF5xAeW0wQHSjdRjjGA.png&quot; data-width=&quot;2365&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*dimtF5xAeW0wQHSjdRjjGA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c147&quot; name=&quot;c147&quot;&gt;
      3.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Allow User to Configure:
      &lt;&#x2F;strong&gt;
      This requires
                            me to define ways of giving user control over the row wrapping they want to apply.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6041&quot; name=&quot;6041&quot;&gt;
      In some sense, what I end up doing
                            is a combination of all three. There are always some implicit logic that defines some part
                            of the strategies, but I also try to provide a set of high level constructs for the
                            strategies. The main two I have right now are
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       FrozenRow
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       FlexRow
      &lt;&#x2F;code&gt;
      , where
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       FrozenRow
      &lt;&#x2F;code&gt;
      requires elements two stay in the
                            same line and fails if it cannot sustain this requirements; and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       FlexRow
      &lt;&#x2F;code&gt;
      continues to put elements in the next
                            line.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;bc67&quot; name=&quot;bc67&quot;&gt;
      What did it take to come to this
                            solution?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3cc6&quot; name=&quot;3cc6&quot;&gt;
      The first design I had did not
                            account for overflows.I quickly realized that wouldn’t end well for me.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4910&quot; name=&quot;4910&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;589&quot; data-image-id=&quot;1*A_QYHcZ7rT26JTTo5MT6uw.png&quot; data-width=&quot;831&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*A_QYHcZ7rT26JTTo5MT6uw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4758&quot; name=&quot;4758&quot;&gt;
      When I started thinking about
                            possible solutions, I realized three possible solutions.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;3&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--p&quot; id=&quot;ad7b&quot; name=&quot;ad7b&quot; style=&quot;width: 34.062%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;524&quot; data-image-id=&quot;1*EI-z696oUkc1Ra_y7oXGyw.png&quot; data-width=&quot;678&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*EI-z696oUkc1Ra_y7oXGyw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;7920&quot; name=&quot;7920&quot; style=&quot;width: 34.062%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;524&quot; data-image-id=&quot;1*NnjH-2JRccejc3297shq3A.png&quot; data-width=&quot;678&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*NnjH-2JRccejc3297shq3A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;be72&quot; name=&quot;be72&quot; style=&quot;width: 31.877%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;521&quot; data-image-id=&quot;1*3TernvI6LgJHSuHxpCNd4A.png&quot; data-width=&quot;631&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*3TernvI6LgJHSuHxpCNd4A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;589a&quot; name=&quot;589a&quot;&gt;
      The first(red) solution tries
                            to equally distribute each box into the next line. The second(blue) solution tries to
                            equalize the width of each box on the first line. The third(green) solution requires me to
                            throw boxes into newlines until the remaining ones with. I quickly decided to go with option
                            3 as others did not compose&#x2F;cascade well and I wasn’t sure how useful they were out of some
                            contrived examples.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b5ab&quot; name=&quot;b5ab&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The second point I had trouble was is the
                                flexible width components.
      &lt;&#x2F;strong&gt;
      If a component did not specify its width, how do you
                            decide it? The solution here came from the realization that you can always decide the width
                            of a component by using its parent and children. There is no such thing as an empty stack or
                            row, they must eventually reach to some text element. That text element defines their
                            minimum width. Also, the root element has the width of the document that defines the maximum
                            width. By bounding each element from both sides and wrapping if minimum width exceeds
                            maximum width, we can calculate exact sizes for all elements.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;aac0&quot; name=&quot;aac0&quot;&gt;
      Conclusion
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;cdcc&quot; name=&quot;cdcc&quot;&gt;
      Writing this article
                            actually made me realize some problems I thought were problems are not, so it’s been pretty
                            helpful for me :D I really hope it was also a fun read to some of you out there.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5973a2a7dc7a&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-08-06T04:07:27.006Z&quot;&gt;
     August 6, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;hurdles-of-designing-a-layout-model-5973a2a7dc7a&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Learner’s Guide to Functional Programming#0: Sum Types, Booleans and Naturals in Javascript</title>
        <published>2023-07-13T00:00:00+00:00</published>
        <updated>2023-07-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/learners-guide-to-functional-programming0-sum-types-booleans-and-naturals-in-javascript/"/>
        <id>https://alperenkeles.com/posts/learners-guide-to-functional-programming0-sum-types-booleans-and-naturals-in-javascript/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/learners-guide-to-functional-programming0-sum-types-booleans-and-naturals-in-javascript/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;3833&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;b3ab&quot; name=&quot;b3ab&quot;&gt;
      Learner’s Guide to Functional Programming#1: Implementing Lists in JavaScript
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e891&quot; name=&quot;e891&quot;&gt;
      Although this article was written first, I suggest you read the prequel I read as background. Leaving the link below.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;a9d6&quot; name=&quot;a9d6&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;learners-guide-to-functional-programming-0-sum-types-booleans-and-naturals-in-javascript-d20a44ca808d&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;learners-guide-to-functional-programming-0-sum-types-booleans-and-naturals-in-javascript-d20a44ca808d&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;learners-guide-to-functional-programming-0-sum-types-booleans-and-naturals-in-javascript-d20a44ca808d&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Learner’s Guide to Functional Programming#0: Sum Types, Booleans and Naturals in Javascript
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;66a0a05c561ba009445d72b82cfbdb7c&quot; data-thumbnail-img-id=&quot;1*rNub9K1VtRelmSjPVlWmvg.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;learners-guide-to-functional-programming-0-sum-types-booleans-and-naturals-in-javascript-d20a44ca808d&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*rNub9K1VtRelmSjPVlWmvg.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;f91c&quot; name=&quot;f91c&quot;&gt;
      There are many articles introducing functional programming. They mention immutability, first class functions, purity, recursion, and many other concepts with usually small examples of each one of them. In this series, I want to try a different way. We will implement functional data structures within using a very minimal subset of Javascript. No loops, no mutable variables, no builtins except primitive types.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5571&quot; name=&quot;5571&quot;&gt;
      The first of these data structures is a list. A list is a very simple data structure, below is a simple definition of a list type in typescript.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;typescript&quot; data-code-block-mode=&quot;2&quot; id=&quot;c870&quot; name=&quot;c870&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;List&lt;&#x2F;span&gt; = { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;nil&quot;&lt;&#x2F;span&gt; } | { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;cons&quot;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;elem&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;any&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;rest&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-title class_&quot;&gt;List&lt;&#x2F;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;5dd3&quot; name=&quot;5dd3&quot;&gt;
      Here, we either have a “nil” variant with no elements, and a “cons” variant with a en element, as well as the rest of the list. Before going into implementation details, let’s imagine how would such a list look like.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;1350&quot; name=&quot;1350&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1993&quot; data-image-id=&quot;1*irBBs3TmC-b_qyHBu179qw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;3415&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*irBBs3TmC-b_qyHBu179qw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Three lists with lengths 0, 1, and 2.
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;f326&quot; name=&quot;f326&quot;&gt;
      Below are the same definitions in Javascript code.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;0e6d&quot; name=&quot;0e6d&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; emptyList = { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;nil&quot;&lt;&#x2F;span&gt; }; \\ []&lt;br&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; singleElemList = { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;cons&quot;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;elem&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;rest&lt;&#x2F;span&gt;: emptyList } \\ [&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;]&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; twoElemList = {&lt;br&#x2F;&gt;  { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;cons&quot;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;elem&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;rest&lt;&#x2F;span&gt;: { &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;cons&quot;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-attr&quot;&gt;elem&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-attr&quot;&gt;rest&lt;&#x2F;span&gt;: emptyList }&lt;br&#x2F;&gt;} &lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; [1, 2]&lt;&#x2F;span&gt;&lt;&#x2F;br&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;caac&quot; name=&quot;caac&quot;&gt;
      We start from the first element with a
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       variant: &quot;cons&quot;
      &lt;&#x2F;code&gt;
      node, end we denote the end with a
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       variant: &quot;nil&quot;
      &lt;&#x2F;code&gt;
      node.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d57c&quot; name=&quot;d57c&quot;&gt;
      Here, we will have two constructors, one per variant.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;3d5e&quot; name=&quot;3d5e&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;mkEmpty&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    {&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;nil&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    }&lt;br&#x2F;&gt;)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;elem, rest&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    {&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;variant&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-string&quot;&gt;&quot;cons&quot;&lt;&#x2F;span&gt;,&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;elem&lt;&#x2F;span&gt;: elem,&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-attr&quot;&gt;rest&lt;&#x2F;span&gt;: rest&lt;br&#x2F;&gt;    }&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;2481&quot; name=&quot;2481&quot;&gt;
      If we want to make a list of only one item, we could easily compose them.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;1&quot; id=&quot;10be&quot; name=&quot;10be&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;mkListFromElem&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;elem&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(elem, &lt;span class=&quot;hljs-title function_&quot;&gt;mkEmpty&lt;&#x2F;span&gt;())&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;a0bb&quot; name=&quot;a0bb&quot;&gt;
      Implementing accessors is pretty straightforward.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;1&quot; id=&quot;cde2&quot; name=&quot;cde2&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    list.&lt;span class=&quot;hljs-property&quot;&gt;variant&lt;&#x2F;span&gt; === &lt;span class=&quot;hljs-string&quot;&gt;&quot;nil&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Below, we introduce the list notation. &quot;:&quot; is the prepending operation.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; (elem : rest) -&amp;gt; elem&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Get first element&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    list.&lt;span class=&quot;hljs-property&quot;&gt;elem&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Get the rest of the list&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; (elem : rest) -&amp;gt; rest&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    list.&lt;span class=&quot;hljs-property&quot;&gt;rest&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;332c&quot; name=&quot;332c&quot;&gt;
      As we now have the basic building blocks at hand, we can start defining more complicated functions. The first is the length function.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;a6c5&quot; name=&quot;a6c5&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; length(elem:rest) = 1 + length(rest)&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;length&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt;(list) ? &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt; : &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-title function_&quot;&gt;length&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list))&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;91cb&quot; name=&quot;91cb&quot;&gt;
      The definition goes, is you have an empty list, that list has 0 length. For any other list, you can add one to the length of the rest of the list and return that.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f333&quot; name=&quot;f333&quot;&gt;
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       length(list) = length([list.head]) + length([list.rest])
      &lt;&#x2F;code&gt;
      is the relation we are using for this function.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4096&quot; name=&quot;4096&quot;&gt;
      Although we could continue implementing functions in ad hoc manners, now I will introduce you with Higher Order Functions map, filter and reduce. We will then use these functions as building blocks of more complex functions.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;fe98&quot; name=&quot;fe98&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;map&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, f&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt;(list) ? &lt;span class=&quot;hljs-title function_&quot;&gt;mkEmpty&lt;&#x2F;span&gt;() : &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list)), &lt;span class=&quot;hljs-title function_&quot;&gt;map&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list), f))&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;c5c8&quot; name=&quot;c5c8&quot;&gt;
      Map function applies a function
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       f
      &lt;&#x2F;code&gt;
      to all elements of a list. You can see that we are effectively recreating the list by computing
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       f
      &lt;&#x2F;code&gt;
      on
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       head(list)
      &lt;&#x2F;code&gt;
      and passing it to the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       map(tail(list), f)
      &lt;&#x2F;code&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;2092&quot; name=&quot;2092&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;filter&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, p&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt;(list) ?&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-title function_&quot;&gt;mkEmpty&lt;&#x2F;span&gt;()&lt;br&#x2F;&gt;        : &lt;span class=&quot;hljs-title function_&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list)) ?&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list), &lt;span class=&quot;hljs-title function_&quot;&gt;filter&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list), p))&lt;br&#x2F;&gt;            : &lt;span class=&quot;hljs-title function_&quot;&gt;filter&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list), p)&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;98f7&quot; name=&quot;98f7&quot;&gt;
      Filter takes a list, and a predicate
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       p
      &lt;&#x2F;code&gt;
      , a predicate is a type of function that returns a boolean. Filters create a list with the elements passing the predicate.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;00ad&quot; name=&quot;00ad&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;reduce&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, f, acc&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt;(list) ? acc : &lt;span class=&quot;hljs-title function_&quot;&gt;reduce&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list), f, &lt;span class=&quot;hljs-title function_&quot;&gt;f&lt;&#x2F;span&gt;(acc, &lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list)))&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;5399&quot; name=&quot;5399&quot;&gt;
      Reduce is the last one of our building blocks. We use reduce to apply functions over the list by propagating the result. I usually find reduce the most confusing among these three, so let’s use reduce for some functions in order to allow a more comprehensive understanding.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;1&quot; id=&quot;ec40&quot; name=&quot;ec40&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Instead of recursively calling tail ourselves, we call reduce&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; with the initial value of 0, incremented for every node.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;lenReduce&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, f&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;reduce&lt;&#x2F;span&gt;(list, &lt;span class=&quot;hljs-function&quot;&gt;(&lt;span class=&quot;hljs-params&quot;&gt;acc, elem&lt;&#x2F;span&gt;) =&amp;gt;&lt;&#x2F;span&gt; acc + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Reverse initiates an empty list. At every point, we take the&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; head, prepend it to the accumulator.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;reverse&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;reduce&lt;&#x2F;span&gt;(list, &lt;span class=&quot;hljs-function&quot;&gt;(&lt;span class=&quot;hljs-params&quot;&gt;acc, elem&lt;&#x2F;span&gt;) =&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(elem, acc), &lt;span class=&quot;hljs-title function_&quot;&gt;mkEmpty&lt;&#x2F;span&gt;())&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4861&quot; name=&quot;4861&quot;&gt;
      Another important building block is
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       concat
      &lt;&#x2F;code&gt;
      which allows us two concatenate two lists.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;1936&quot; name=&quot;1936&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; We will use ++ for concat notation.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; concat(l1, l2) = l1 ++ l2&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; If the first list is empty, we can just return the second list.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; Otherwise, we concatenate the rest of the list with and prepend&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; the first element of the first list.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;concat&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list1, list2&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;isEmpty&lt;&#x2F;span&gt;(list1) ? &lt;br&#x2F;&gt;        list2 &lt;br&#x2F;&gt;        : &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list1), &lt;span class=&quot;hljs-title function_&quot;&gt;concat&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list1), list2))&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;b92c&quot; name=&quot;b92c&quot;&gt;
      As we have
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       concat
      &lt;&#x2F;code&gt;
      we can now define prepend and append.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;2a8f&quot; name=&quot;2a8f&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; prepend(list, elem) = (elem : list)&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;prepend&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, elem&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;mkList&lt;&#x2F;span&gt;(elem, list)&lt;br&#x2F;&gt;)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; append(list, elem) = list ++ [elem]&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;append&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, elem&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-title function_&quot;&gt;concat&lt;&#x2F;span&gt;(list, &lt;span class=&quot;hljs-title function_&quot;&gt;mkListFromElem&lt;&#x2F;span&gt;(elem))&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;2777&quot; name=&quot;2777&quot;&gt;
      As you see, prepend is the same as
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       mkList
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       append
      &lt;&#x2F;code&gt;
      is equivalent to creating a one element list and concatenating it to the end.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;89fe&quot; name=&quot;89fe&quot;&gt;
      The last function we are implementing is the indexing function. Here, we pass the index parameter
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       n
      &lt;&#x2F;code&gt;
      and we decrease it as we move within the list.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;javascript&quot; data-code-block-mode=&quot;2&quot; id=&quot;60e6&quot; name=&quot;60e6&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&#x2F;&#x2F; nth((elem:rest), n) = nth(rest, n - 1)&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;nth&lt;&#x2F;span&gt; = (&lt;span class=&quot;hljs-params&quot;&gt;list, n&lt;&#x2F;span&gt;) =&amp;gt; (&lt;br&#x2F;&gt;    n === &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt; ? &lt;span class=&quot;hljs-title function_&quot;&gt;head&lt;&#x2F;span&gt;(list) : &lt;span class=&quot;hljs-title function_&quot;&gt;nth&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-title function_&quot;&gt;tail&lt;&#x2F;span&gt;(list), n - &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;5d7e&quot; name=&quot;5d7e&quot;&gt;
      Below is the Github repository for the functions introduced within this article.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p graf--trailing&quot; id=&quot;3d91&quot; name=&quot;3d91&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;functional-ts&#x2F;blob&#x2F;main&#x2F;List.ts&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;functional-ts&#x2F;blob&#x2F;main&#x2F;List.ts&quot; title=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;functional-ts&#x2F;blob&#x2F;main&#x2F;List.ts&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        functional-ts&#x2F;List.ts at main · alpaylan&#x2F;functional-ts
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Functional Data Structures in Typescript. Contribute to alpaylan&#x2F;functional-ts development by creating an account on…
       &lt;&#x2F;em&gt;
       github.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;92f0723e5e9c5b92ed81aaf8cfac6ad1&quot; data-thumbnail-img-id=&quot;0*Y2YP655OJeXvwVdi&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;functional-ts&#x2F;blob&#x2F;main&#x2F;List.ts&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*Y2YP655OJeXvwVdi);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;8ec3946aa9ab&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-07-12T04:45:40.430Z&quot;&gt;
     July 12, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;learners-guide-to-functional-programming-1-implementing-lists-in-javascript-8ec3946aa9ab&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Extracting Signals: Playing The Inverse Waldo Game</title>
        <published>2023-07-11T00:00:00+00:00</published>
        <updated>2023-07-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/extracting-signals-playing-the-inverse-waldo-game/"/>
        <id>https://alperenkeles.com/posts/extracting-signals-playing-the-inverse-waldo-game/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/extracting-signals-playing-the-inverse-waldo-game/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;4e9e&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;c83c&quot; name=&quot;c83c&quot;&gt;
      Extracting Signals: Playing The Inverse Waldo Game
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e128&quot; name=&quot;e128&quot;&gt;
      I believe most of you will recognize the game in the following image, “Where’s Waldo?”. It has many variations such as finding the cat, the rabbit, the differing number etc.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;d236&quot; name=&quot;d236&quot;&gt;
      &lt;img alt=&quot;An image with many distractions, with the character Waldo in the middle.&quot; class=&quot;graf-image&quot; data-height=&quot;1444&quot; data-image-id=&quot;1*H90tidsLLzjkAyGVFdLtLw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1910&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*H90tidsLLzjkAyGVFdLtLw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Taken from:
       &lt;a class=&quot;markup--anchor markup--figure-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.independent.co.uk&#x2F;arts-entertainment&#x2F;books&#x2F;news&#x2F;where-s-the-brains-behind-wally-6261459.html&quot; href=&quot;https:&#x2F;&#x2F;www.independent.co.uk&#x2F;arts-entertainment&#x2F;books&#x2F;news&#x2F;where-s-the-brains-behind-wally-6261459.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.independent.co.uk&#x2F;arts-entertainment&#x2F;books&#x2F;news&#x2F;where-s-the-brains-behind-wally-6261459.html
       &lt;&#x2F;a&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7728&quot; name=&quot;7728&quot;&gt;
      The objective of the game is to hide an object within similar objects acting as distractions. Expressed in another way, the game uses the distractive objects(noises) to hide the target(signal).
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       A poorly written resume, article, poster, or portfolio is very similar to a Finding Waldo game for the reader.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c920&quot; name=&quot;c920&quot;&gt;
      When the author is unable to extract the signals from the noises and guide the reader with well designed indicators and pointers throughout the content, the readers has to search important pieces of information as thought they would search Waldo.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The most fundamental difference here is, the reader does not have to search for Waldo.
      &lt;&#x2F;strong&gt;
      They have hundreds of articles to read, resumes to review, portfolios to go through. You need to make Waldo as detectable as possible, you need to play the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       inverse Waldo game.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2fea&quot; name=&quot;2fea&quot;&gt;
      Inverse Waldo Game
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;0703&quot; name=&quot;0703&quot;&gt;
      Imagine you are indeed playing the game I described in abstract terms in the introduction. You are in a contest where many people submit their Waldo pictures, and the jury awards the best pictures where it is easiest to find Waldo. I would imagine you would be submitting something similar to the picture below. Maybe you would even delete the distracting background and the letters.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4ad1&quot; name=&quot;4ad1&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;498&quot; data-image-id=&quot;1*Z7Q0oStXoK2Bf7_MzsQItQ.png&quot; data-width=&quot;642&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Z7Q0oStXoK2Bf7_MzsQItQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Taken from:
       &lt;a class=&quot;markup--anchor markup--figure-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.imdb.com&#x2F;title&#x2F;tt0213376&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;www.imdb.com&#x2F;title&#x2F;tt0213376&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.imdb.com&#x2F;title&#x2F;tt0213376&#x2F;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4e65&quot; name=&quot;4e65&quot;&gt;
      If you need to remember a single paragraph from this article, remember the next one.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;714e&quot; name=&quot;714e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Creating content is like playing an Inverse Waldo Game. High quality content reduces noise, guides the reader throughout the signals it tries to convey. Mediocre content is often bloated, it is up to the reader to extract the signals from the sea of noises.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;34c3&quot; name=&quot;34c3&quot;&gt;
      Understanding Signals
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a684&quot; name=&quot;a684&quot;&gt;
      So far, I have talked about signals and noises as though they are terms set in stone, they aren’t.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       They are defined with respect to the information you want to convey, qualities of the reader of the contents, and your objective in conveying this information to the reader, namely your end goal.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;1ad2&quot; name=&quot;1ad2&quot;&gt;
      A simple rule of thumb within this framework is, you ask if adding some piece of content brings you closer to your end goal, or not. If it is not, you probably should not be adding it.
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;ca61&quot; name=&quot;ca61&quot;&gt;
      The most obvious example I see violating this principle is people’s resumes. When creating a resume, one tends to want to stuff it with as much as they can fill in one tiny page, sometimes even filling out multiple pages.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       If you don’t think of the content in terms of signals and noises, it is very easy to fall into the pitfall of adding anything that might be valuable.
      &lt;&#x2F;strong&gt;
      Yet, you should never forget that you are playing the Inverse Waldo Game. You should think about in terms such as
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       “Will this information help me get an interview?”, “Is this sentence important for me to coherently explain my past experiences?”, “Does adding this experience provide any relevant information regarding my potential performance in my prospective job?”
      &lt;&#x2F;em&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;661c&quot; name=&quot;661c&quot;&gt;
      Once one starts thinking about signals, they start thinking about the reader.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Empathizing with the reader, writing in order to guide the reader is the key to good content creation.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;1c2b&quot; name=&quot;1c2b&quot;&gt;
      Less Is More
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;dd03&quot; name=&quot;dd03&quot;&gt;
      The central theme of the minimalism move is also one of the central principles of this article.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e178&quot; name=&quot;e178&quot;&gt;
      When curating content, it is easy to add. You can set arbitrary thresholds for adding some piece or not. By nature, adding does not force you into trade-offs. On the other hand, not adding it harder. You need to decide some piece is
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       not worth
      &lt;&#x2F;strong&gt;
      adding. What is even harder is to delete. Deletion implies some piece of content you found worthy to add earlier is now unworthy. It is an implicit debate against your past self. This rigorous process acts as a natural noise filter. Deletion decides on the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       least worthy information,
      &lt;&#x2F;strong&gt;
      effectively separating signals from the noise around them.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5c09&quot; name=&quot;5c09&quot;&gt;
      Signals Are Not Just Information
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cb4c&quot; name=&quot;cb4c&quot;&gt;
      I have at several points mentioned “guiding the reader throughout the content”. One might ask,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       what is this guidance I have been talking about?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;e10f&quot; name=&quot;e10f&quot;&gt;
      Although until now, I have been talking about information, signals and noise as they are isolated pieces, they are not. A writing is not a separate set of words, as pictures are not pixels put together.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The whole is not the aggregation of the parts, it is the piece, their interactions with each other, as well as their interactions with the reader.
      &lt;&#x2F;strong&gt;
      That is why we have sentences, paragraphs, punctuations, bold&#x2F;italics and headers. Whereas monotonicity turns the best of the signals into illegible noise, dynamicity allows for guiding the reader into what is most important. Without the hierarchy provided by these external signaling mechanisms, information itself is not enough to convey signals properly.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;dd00847e6322&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-07-12T03:06:31.819Z&quot;&gt;
     July 12, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;extracting-signals-playing-the-inverse-waldo-game-dd00847e6322&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Sinyalleri Ayrıştırmak</title>
        <published>2023-07-09T00:00:00+00:00</published>
        <updated>2023-07-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/sinyalleri-ayristirmak/"/>
        <id>https://alperenkeles.com/posts/sinyalleri-ayristirmak/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/sinyalleri-ayristirmak/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;77fd&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;04b4&quot; name=&quot;04b4&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Sinyalleri Ayrıştırmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;25bc&quot; name=&quot;25bc&quot;&gt;
      Aşağıdaki fotoğrafı görüyorsunuz değil mi? Yılların bulmacasıdır, yok Waldo’yu bul, yok tavşanı bul, yok kediyi bul, yok farklı sayıyı bul…
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;552d&quot; name=&quot;552d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;345&quot; data-image-id=&quot;1*Gf6u1A0k4sTlLJfaO1yzMw.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;474&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Gf6u1A0k4sTlLJfaO1yzMw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7dc4&quot; name=&quot;7dc4&quot;&gt;
      Bu bulmacada amaç, aradığınız objeyi kendisine benzeyen başka objelerin arasına saklamak, sizin için asıl aradığınızı(sinyali) dikkatinizi dağıtacak diğer objeler(gürültüler) kullanarak gizli hale getirmektir. Kötü bir CV, kötü bir yazı, kötü bir video, kötü bir Github profili, kötü bir niyet mektubu da tam olarak bu tarz bulmacalara benzer. Eğer ki siz sinyallerle gürültüleri yeterince iyi ayrıştıramazsanız, sunduğunuz içerikten, dökümandan gürültüyü atamazsanız, o içeriği tüketenler, o dökümanı okuyanlar da aynı sizin gibi Waldo’yu aramak zorunda kalırlar. Aradaki temel fark ise, onların sizin Waldo’nuzu bulmasına gerek yok. Önlerinde sizin gibi yüzlerce farklı içerik var, yüzlerce farklı CV var, yüzlerce farklı mektup var, duruma göre bir ya da beş tane Waldo bulsalar yetecekse, nedne sizin Waldo’nuzu arasınlar ki?
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8602&quot; name=&quot;8602&quot;&gt;
      Sinyal&#x2F;Gürültü Oranı
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f5e5&quot; name=&quot;f5e5&quot;&gt;
      Bu konsept aslında hiç de yeni bir konsept değil, Information Theory (Bilgi Teorisi) dediğimiz bugünkü internetin omurgası olmuş bir alan var, onun çok temel bir teoremi var. Kısaca, Sinyal&#x2F;Gürültü oranınız ne kadar düşükse, yani elinizdeki sinyallere oranla ne kadar çok gürültünüz varsa, o kadar az bilgi aktarabilirsiniz. Güzel, diyelim ki kabul ettik sinyal çok olmalı, gürültü az olmalı, neyin sinyal olduğunu, neyin gürültü olduğunu nasıl anlayacağız peki? Sinyalleri nasıl ayrıştırabiliriz gürültülerden?
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;7a5d&quot; name=&quot;7a5d&quot;&gt;
      Kimin Sinyali, Kimin Gürültüsü?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1635&quot; name=&quot;1635&quot;&gt;
      Burada dikkat edilmesi gereken ilk nokta, sinyal ve gürültünün öyle sabit tanımlı kavramlar olmadıkları. Sizin sinyaliniz benim gürültüm olabilir, benim bugünkü gürültüm yarınki sinyalim olabilir. Nedir peki sinyal?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2544&quot; name=&quot;2544&quot;&gt;
      Bir bilginin sinyal olduğuna karar vermek için size basit bir yöntem. Eğer bir bilginin varlığı, sizi yokuluğunuzdan daha fazla hedefinize yaklaştıracaksa, bu bilgiyi bir sinyal olarak ele alabilirsiniz. Benim üzerine en çok düşündüğüm örnek olduğu için CV’yi örnek vereceğim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f415&quot; name=&quot;f415&quot;&gt;
      CV hazırlarken yapılan en büyük hatalardan bir tanesi her şeyi koymaya çalışmak. Şu kulüpteki şu etkinliği de koyayım, şu yaptığım mini projeyi de koyayım, şu aldığım dersi de koyayım… E doldurdun dökümanı, tek sayfaya sığmadı 2 sayfa oldu hatta. Bu senin işe alınmanı kolaylaştıracak mı, hayır tabii ki. Neden, çünkü dökümanının sinyal&#x2F;gürültü oranı kötü. Özgeçmiş tek sayfa mı olmalı sorusunun altında da gizli bir şekilde bu oran yatıyor. Tek sayfada tutmaya çalışırken acaba hangi tecrübemi koymalıyım sorusunu sorduğunda sinyalleri ayrıştırmaya başlıyorsun aslında. Buradan da ikinci kısma giriş yapmış olduk.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sinyal kimin için sinyal?
      &lt;&#x2F;strong&gt;
      Sinyaller okuyucu içindir, ya da alıcı için. Benim neyin sinyal olduğunu düşündüğümün çok bir önemi yok bir bilgiyi sunarken, karşı tarafın oradan neler alabildiği önemli. Dolayısıyla her türlü döküman ya da içerik hazırlarken alıcıyı düşünmeniz gerekiyor. Özgeçmiş için karşıdaki İK görevlisi, içerik için takipçileriniz. Empati yapmak gerekiyor. Daha da önemlisi çok basit bir soruyu tekrar tekrar sormak gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;9888&quot; name=&quot;9888&quot;&gt;
      Bu bilgiyi bu özgeçmişe yazmak benim işe alınmama katkıda bulunacak mı? Videoma bunu eklemek izleyicilere faydalı olacak mı?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;389c&quot; name=&quot;389c&quot;&gt;
      Her zaman, alıcıyı birinci noktaya koymak gerekiyor tasarım esnasında.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;64ea&quot; name=&quot;64ea&quot;&gt;
      2 tane daha benim için önemli olduğunu düşündüğüm noktadan bahsedip yazıyı bitireceğim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;01b9&quot; name=&quot;01b9&quot;&gt;
      Az çoktur(Less is more)
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8c1c&quot; name=&quot;8c1c&quot;&gt;
      Burada ben tabii çok daha farklı alanlarda çok daha farklı filozofların ve düşünürlerin bir sözünü çalıp kendimce yeniden anlamlandırıyorum, ama deneyelim bakalım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e6c2&quot; name=&quot;e6c2&quot;&gt;
      Bir içerik hazırlarken, eklemek kolaydır. Bir cümlenin, bir sahnenin, bir bilginin sinyal olduğunu düşünüp ekleyebilirsiniz mesela. Eklemek, doğası itibariyle sizi seçime zorlamaz. Zor olan, eklememektir. Daha da zor olan, çıkarmaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2deb&quot; name=&quot;2deb&quot;&gt;
      Eklememek, neyi ekleyeceğinizi seçmek anlamına gelirken, çıkarmak, daha öncesinde mantıklı bulduğunuz, sevdiğiniz, belki de emek verdiğiniz bir bileşenden vazgeçmek demektir. Basit bir sandalyeye bile önem atfeden insanlar olarak bizim kendi ürettiğimiz düşüncelerimize değer vermemiz ve bağlanmamız kadar da doğal bir şey yoktur. Bu noktada, bir içerikten çıkardığınız her bir bilgiye çok dikkat edeceksinizdir. Eğer gerçekten çıkarmanız gerekmiyorsa çıkarmazsınız. Bu süreç, doğal bir gürültü temizleyicidir. Her bir çıkarma aşamasında en az faydalı olanı belirleyerek ilerlediğiniz için, gürültüyü yavaş yavaş ortadan kaldırırsınız. Dolayısıyla çıkarmak, aşırı derecede yapılmadığı sürece, iyidir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;784f&quot; name=&quot;784f&quot;&gt;
      Bu noktada tabii ben de inanılmaz iradeli miyim, hayır. Çoğu zaman çıkarmayı başaramam, eklememeyi denerim. Bir bilgi eklerken
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       bunu eklemeli miyim, bu bana ne katacak
      &lt;&#x2F;strong&gt;
      diye düşünmeye çalışırım eklerim canım ne olacak demektense
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;cf6c&quot; name=&quot;cf6c&quot;&gt;
      Sinyaller Bilgiden İbaret Değildir
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1f87&quot; name=&quot;1f87&quot;&gt;
      Bu zamana kadar, sinyaller bilgiden ibaretmiş gibi davrandım. Yani bir bilgiyi eklersiniz veya eklemezsiniz, içerikler yalnızca bilgilerin toplamından oluşuyormuş gibi. Bu bir yalan. İçerikler, onları oluşturan parçaların hepsinden daha değerlidir. Bir resmi ele alın, o resmi oluşturan piksellerin hiçbirisi kendi başına değerli değil iken, birleşip büyüdükçe değerli hale gelirler. Bir yazıyı oluşturan kelimeler önemsizdir, cümleler önemli, paragraflar değerli, yazılar ise çoğu zaman eşsiz olur. Bütün, parçaların bir toplamı değil, o parçaların kendi aralarındaki etkileşimlerin tamamıdır. Yani ben bir cümle kurarken, o cümleden önceki ve sonraki cümleler, yazının kalanı, başlıklar, italik&#x2F;kalın yazım gibi işaretçiler önemli hale gelir. Bu sayede sinyaller ortaya çıkar. Kendi başına değersiz olacak pek çok bilgi bütünle birlikte anlamlı hale gelir. Gelin size gerçek bir örnek vereyim geçen yıl yaptığım bir sunumdan.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;6cf7&quot; name=&quot;6cf7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;236&quot; data-image-id=&quot;1*ctShPd1OKgCy6TzrX1F6Nw.png&quot; data-width=&quot;1632&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*ctShPd1OKgCy6TzrX1F6Nw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;6e2f&quot; name=&quot;6e2f&quot;&gt;
      Bir makaledeki bir yazılımı tekrardan oluşturuyorduk bir ders projesi için, yukarda verdiğim parçayı özellikle vermek istedim. Ancak kendi başına bu şekilde verildiğinde bir anlam ifade etmiyordu.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;c535&quot; name=&quot;c535&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1002&quot; data-image-id=&quot;1*mLvk8zPJUpGtm9Aat4H0bA.png&quot; data-width=&quot;1782&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*mLvk8zPJUpGtm9Aat4H0bA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b4b0&quot; name=&quot;b4b0&quot;&gt;
      Bir ihtimal, gerekli bağlamı verip, dinleyicinin buradan benim istediğim kısma odaklanmasını sağlamaya çalışabilirdim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;2ee9&quot; name=&quot;2ee9&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1002&quot; data-image-id=&quot;1*1jxJoCELcmNYkEFuluoz2Q.png&quot; data-width=&quot;1782&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*1jxJoCELcmNYkEFuluoz2Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7196&quot; name=&quot;7196&quot;&gt;
      Onun yerine sayfaya dinleyicinin algılamasını kolaylaştıracak hiyerarşi ekledim. Bağlamı korurken, gerçek sinyaller, ve çevresindeki gerekli ikincil sinyaller arasındaki bağlantıyı yazıdaki renkler ve belirteçler sayesinde kurmaya çalıştım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;8b3b&quot; name=&quot;8b3b&quot;&gt;
      Bu yazı da bunlarla dolu aslında baktığınızda. Başlıklar, fotoğraflar, sözel belirteçler… Belirli bir büyüklüğü geçen herhangi bir içerikte zaten belli bir hiyerarşi kurmadan karşıya kendinizi anlatmanız mümkün değil.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;e42802c8cc5f&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-07-09T20:08:34.182Z&quot;&gt;
     July 9, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;sinyalleri-ayr%C4%B1%C5%9Ft%C4%B1rmak-e42802c8cc5f&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Technical Pie (Yet-Another-Tech-Debt-Analogy)</title>
        <published>2023-06-16T00:00:00+00:00</published>
        <updated>2023-06-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/the-technical-pie-yetanothertechdebtanalogy/"/>
        <id>https://alperenkeles.com/posts/the-technical-pie-yetanothertechdebtanalogy/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/the-technical-pie-yetanothertechdebtanalogy/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;4582&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;2b4e&quot; name=&quot;2b4e&quot;&gt;
      The Technical Pie (Yet-Another-Tech-Debt-Analogy)
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f457&quot; name=&quot;f457&quot;&gt;
      Yesterday, I was listening to a talk by
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;TitusWinters&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;TitusWinters&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       @TitusWinters
      &lt;&#x2F;a&gt;
      on why the current metaphors for “technical debt” are insufficient and fail to capture the reality of the situation. So, before going into the metaphors, what is the definition these metaphors try to capture?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1088&quot; name=&quot;1088&quot;&gt;
      Here is a definition from wikipedia:
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--hasDropCapModel graf-after--p&quot; id=&quot;093e&quot; name=&quot;093e&quot;&gt;
      In
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_development&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Software_development&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       software development
      &lt;&#x2F;a&gt;
      , or any other IT field (e.g., Infrastructure, Networking, etc.)
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       technical debt
      &lt;&#x2F;strong&gt;
      (also known as
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       design debt
      &lt;&#x2F;strong&gt;
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Technical_debt#cite_note-Girish_2014-1&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Technical_debt#cite_note-Girish_2014-1&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       [1]
      &lt;&#x2F;a&gt;
      or
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       code debt
      &lt;&#x2F;strong&gt;
      ) is the implied cost of future reworking required when choosing an easy but limited solution instead of a better approach that could take more time.
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;34f1&quot; name=&quot;34f1&quot;&gt;
      Here is another definition from a Dagstuhl in 2016:
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--hasDropCapModel graf-after--p&quot; id=&quot;5bb0&quot; name=&quot;5bb0&quot;&gt;
      In software-intensive systems, technical debt is a collection of design or implementation constructs that are expedient in the short term, but set up a technical context that can make future changes more costly or impossible. Technical debt presents an actual or contingent liability whose impact is limited to internal system qualities, primarily maintainability and evolvability.
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;d048&quot; name=&quot;d048&quot;&gt;
      Although I don’t remember the exact wording, Titus had another definition that I really liked, where the basic idea was “technical debt is the difference between the software we have, and the software we wish we had”.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3f5a&quot; name=&quot;3f5a&quot;&gt;
      So, these are some of the definitions. Even though there isn’t an agreement on a fixed definition, probably all engineer have some internal conception of it. Technical debt is sometimes the doc or the test we didn’t write, sometimes the one edge case we didn’t handle, sometimes the design we know will force us to a redesign but we are using for now. It doesn’t even have to be this negative, sometimes it is the decisions we take in conditions we know will change, where we have to make a choice even though we know that’s probably not the right one.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;df74&quot; name=&quot;df74&quot;&gt;
      What about the metaphors? There were four of them in the presentation.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;0816&quot; name=&quot;0816&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Debt.
       &lt;&#x2F;strong&gt;
       This is the classic example. It’s very intuitive, we think we are borrowing some time&#x2F;money from our future selves. The interest rate acts as the cost of pushing the effort to future.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8932&quot; name=&quot;8932&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Pollution.
       &lt;&#x2F;strong&gt;
       Pollution is an interesting metaphor. The idea is basically that you are creating some pollution in your coding environment, which will require some cleanup at some point in the future. You are not the only one affected, other members, teams or organizations are also affected by the pollution you create.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;33e9&quot; name=&quot;33e9&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Cooking.
       &lt;&#x2F;strong&gt;
       Cooking has a more intuitive connection to software development, as it relays the idea of product development. When you are cooking, you might take shortcuts, you might leave some item on the sink at a particular moment as it is convenient, but you’ll have to pick it up in the future. If you leave too many things, you might suddenly encounter a full kitchen sink, representing the non-linear nature of technical debt, which is not really captured with the
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        debt
       &lt;&#x2F;strong&gt;
       metaphor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ba95&quot; name=&quot;ba95&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Gardening.
       &lt;&#x2F;strong&gt;
       Gardening is taking the cooking metaphor one step forward. You are not just crafting a product, you also have to maintain it. Additionally, gardens are scalable, so you might be able to imagine a very large garden you need to attend to as you think of a bigger project. For cooking, it is hard to imagine how scaling up works.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;ee79&quot; name=&quot;ee79&quot;&gt;
      None of these metaphors perfectly captures the underlying idea of what software developers talk about when they mention technical debt. One could imagine how “not writing docs” convey into cooking. If you don’t write your recipes properly, how would your apprentice learn to use them? On the other hand, how does “not writing tests” convey into these examples, I don’t really know.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;acce&quot; name=&quot;acce&quot;&gt;
      The solution Titus had to this rather incompleteness of these metaphors was to throw them out. Instead of trying to talk about debt, pollution, failure to organize the kitchen or the garden, talk about inefficiencies. Tech debt is a problem because it creates other problems. It creates inefficiencies for the future of our engineering teams. Why don’t we just talk about inefficiencies and how to mitigate them?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cb16&quot; name=&quot;cb16&quot;&gt;
      I have 2 disagreements with this idea;
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;b1c5&quot; name=&quot;b1c5&quot;&gt;
       People tend to become very attached to powerful metaphors. Metaphors and analogies travel around, affect people much more deeply than arguments. Inefficiencies is much more abstract than debt, hence I don’t think it’s really possible in practice to make people talk about inefficiencies when talking about technical debt.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2f8e&quot; name=&quot;2f8e&quot;&gt;
       Inefficiency is such an umbrella term, it is rather applicable to almost any domain, any concept. This generality makes it easy to classify virtually anything on the efficiency scale. I think that’s harmful because it makes tech debt “boring”.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;44fc&quot; name=&quot;44fc&quot;&gt;
      I also come up with another suggestion for a new metaphor,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       The Technical Pie
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;185a&quot; name=&quot;185a&quot;&gt;
      The technical pie relies on the fact that functional requirements are both related, and also orthogonal to quality requirements. I view the development of software as a non-linear journey.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;69df&quot; name=&quot;69df&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;697&quot; data-image-id=&quot;1*b6vbOH_IH9C_JcquzfG-Mg.png&quot; data-width=&quot;951&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*b6vbOH_IH9C_JcquzfG-Mg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;ef8f&quot; name=&quot;ef8f&quot;&gt;
      Think of the black dot as the beginning, each line as a functional requirement along the way. We sometimes struggle with the requirements, we go around, but we consistently move as we develop our project. What happens when quality requirements also come into play? I argue that our previous stack-like line based process becomes a circle.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;e325&quot; name=&quot;e325&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1074&quot; data-image-id=&quot;1*Rm2fi3ZeoJNtLyX6xFdYwA.png&quot; data-width=&quot;1086&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Rm2fi3ZeoJNtLyX6xFdYwA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;281a&quot; name=&quot;281a&quot;&gt;
      Whereas each layer of the circle represents a feature we develop, the direction of the arrow represents our perfect process. Within a perfect process with perfect quality, we would be moving alongside this perfect line. Yet, this isn’t what happens in real world.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;25eb&quot; name=&quot;25eb&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1083&quot; data-image-id=&quot;1*L2Amyz4mBBjdgK_XWdCb5g.png&quot; data-width=&quot;2493&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*L2Amyz4mBBjdgK_XWdCb5g.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;75fa&quot; name=&quot;75fa&quot;&gt;
      Consider these two examples. The left(green) case showcases a path where we finally align with the quality requirements, whereas the right(red) case shows that even though we have reached our functional goals, we are far from the quality requirements.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d795&quot; name=&quot;d795&quot;&gt;
      So, what is technical debt?
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4b09&quot; name=&quot;4b09&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1084&quot; data-image-id=&quot;1*1mekx_uJLm1WTrizAEnF5Q.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2493&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*1mekx_uJLm1WTrizAEnF5Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure graf--trailing&quot; id=&quot;ed80&quot; name=&quot;ed80&quot;&gt;
      Technical debt here is the blue slice, in other words, The Technical Pie. As you are developing a product, you have a target quality that can actually change in different phases. That is your baseline. Your efforts, as well as allowing you to develop your features, push or pull you towards this ideal quality line. The Technical Pie is the difference. To eat the pie, you either need to create a long term path to close the gap between the ideal and the reality, or quickly close the gap by pausing development of new features for a while, or some hybrid option between the two. You can also always change your ideal results.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;e53a919c9e9f&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-06-16T05:36:43.585Z&quot;&gt;
     June 16, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;the-technical-pie-yet-another-tech-debt-analogy-e53a919c9e9f&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Visa-Exclusion as A Form of Inequality</title>
        <published>2023-06-14T00:00:00+00:00</published>
        <updated>2023-06-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/visaexclusion-as-a-form-of-inequality/"/>
        <id>https://alperenkeles.com/posts/visaexclusion-as-a-form-of-inequality/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/visaexclusion-as-a-form-of-inequality/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;64cd&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;cf02&quot; name=&quot;cf02&quot;&gt;
      Visa-Exclusion as A Form of Inequality
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;842c&quot; name=&quot;842c&quot;&gt;
      The problems regarding visas to Turkish people are at a ridiculous level. I urge my colleagues in any type of position of power to tap into this conversation. This basically undermines any talk of inclusivity at any level of reality.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d899&quot; name=&quot;d899&quot;&gt;
      Just today, there were 2 events. A women engineer, whose husband is an EU Citizen, has been rejected for a visa for a Google event in Netherlands. This morning, after 6 days of campaigning, very much public attention(millions of views)…
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;9986&quot; name=&quot;9986&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;NLinIstanbul&#x2F;status&#x2F;1669008735979675648&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e442&quot; name=&quot;e442&quot;&gt;
      She was told that it was a “technical issue” and her visa was granted. It is very important to note that she is not an ordinary citizen, the fact that her husband is an EU citizen is already a very much higher position of power than the ordinary Turkish citizen.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;97c1&quot; name=&quot;97c1&quot;&gt;
      A master’s student affiliated with
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;MPI_NL&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;MPI_NL&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       @MPI_NL
      &lt;&#x2F;a&gt;
      , someone who has done 2 internships in Germany in the past, has been denied a visa for entry to Estonia for a summer school that he received funding for.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;a132&quot; name=&quot;a132&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;ugurkkann&#x2F;status&#x2F;1668988780051587073&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;05d0&quot; name=&quot;05d0&quot;&gt;
      These are not individual events. Germany has suspended the visa rejection appeal process in Turkey for 6 months.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;400c&quot; name=&quot;400c&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;medyascope&#x2F;status&#x2F;1668945448457891842&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;0e70&quot; name=&quot;0e70&quot;&gt;
      A pretty famous singer in Turkey, someone who has traveled countless times to different countries, has been rejected visa for entry to Germany two times and cancelled his concerts.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;98a7&quot; name=&quot;98a7&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;volkankonak&#x2F;status&#x2F;1662406383000535040&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure graf--trailing&quot; id=&quot;9c2c&quot; name=&quot;9c2c&quot;&gt;
      When you hold events, congresses, conferences in visa-exclusive countries, you are effective enablers of these strategies. You should acknowledge that these countries treat all citizens as potential asylum seekers. Their treatment is openly and bluntly exclusive and offensive.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;301ccc546a35&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-06-15T02:06:45.568Z&quot;&gt;
     June 15, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;visa-exclusion-as-a-form-of-inequality-301ccc546a35&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Learner’s Guide to Dynamic Programming#2</title>
        <published>2023-06-10T00:00:00+00:00</published>
        <updated>2023-06-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/learners-guide-to-dynamic-programming2/"/>
        <id>https://alperenkeles.com/posts/learners-guide-to-dynamic-programming2/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/learners-guide-to-dynamic-programming2/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;28ef&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;a989&quot; name=&quot;a989&quot;&gt;
      Learner’s Guide to Dynamic Programming#2
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d7d3&quot; name=&quot;d7d3&quot;&gt;
      Dynamic programming is an algorithmic problem solving paradigm focused on recognization and elimination of repetitive computation. Earlier this week, I had another article introducing dynamic programming and a perspective I found useful. I’m leaving a link for that below.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;b3c0&quot; name=&quot;b3c0&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-dynamic-programming-1-f520a5b2ba4b&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-dynamic-programming-1-f520a5b2ba4b&quot; title=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-dynamic-programming-1-f520a5b2ba4b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Learner’s Guide to Dynamic Programming#1
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Dynamic programming is an algorithmic problem solving paradigm focused on recognization and elimination of repetitive…
       &lt;&#x2F;em&gt;
       medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;55d6be621f25383557007b51a7b44998&quot; data-thumbnail-img-id=&quot;1*uPxMi97vZ0vYqjGNHOTcFw.png&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-dynamic-programming-1-f520a5b2ba4b&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*uPxMi97vZ0vYqjGNHOTcFw.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;0cd6&quot; name=&quot;0cd6&quot;&gt;
      In this second article, I will focus on a different example, Wildcard Matching.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;f2af&quot; name=&quot;f2af&quot;&gt;
      Problem Statement
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;bedd&quot; name=&quot;bedd&quot;&gt;
      Given an input string (
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       s
      &lt;&#x2F;code&gt;
      ) and a pattern (
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       p
      &lt;&#x2F;code&gt;
      ), implement wildcard pattern matching with support for
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       &#x27;?&#x27;
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       &#x27;*&#x27;
      &lt;&#x2F;code&gt;
      where:
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;634e&quot; name=&quot;634e&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        &#x27;?&#x27;
       &lt;&#x2F;code&gt;
       Matches any single character.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;fa43&quot; name=&quot;fa43&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        &#x27;*&#x27;
       &lt;&#x2F;code&gt;
       Matches any sequence of characters (including the empty sequence).
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;f63a&quot; name=&quot;f63a&quot;&gt;
      The matching should cover the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       entire
      &lt;&#x2F;strong&gt;
      input string (not partial).
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;918f&quot; name=&quot;918f&quot;&gt;
      Solution
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ee37&quot; name=&quot;ee37&quot;&gt;
      Again, we should start with small examples.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f09a&quot; name=&quot;f09a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “”)
      &lt;&#x2F;strong&gt;
      = True =&amp;gt; Empty pattern matches empty string.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5326&quot; name=&quot;5326&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “a”)
      &lt;&#x2F;strong&gt;
      = False =&amp;gt; A letter pattern cannot match empty string.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;034b&quot; name=&quot;034b&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “?”)
      &lt;&#x2F;strong&gt;
      = False =&amp;gt; A single matcher pattern cannot match empty string.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;11c9&quot; name=&quot;11c9&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “*”)
      &lt;&#x2F;strong&gt;
      = True =&amp;gt; A wildcard matcher pattern can match empty string.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;12f3&quot; name=&quot;12f3&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a”, “”)
      &lt;&#x2F;strong&gt;
      = False =&amp;gt; Empty pattern cannot match a non-empty string.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f51c&quot; name=&quot;f51c&quot;&gt;
      So, we are actually finished with small examples. As I will show you in a minute, we can reduce any pattern to these patterns by recognizing a set of simple relations.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;084e&quot; name=&quot;084e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a__”, “a__”) or isMatch(“a__”, “?__”)
      &lt;&#x2F;strong&gt;
      = isMatch(“__”, “__”) =&amp;gt; When a letter pattern or a single matcher matches the first character of the string, we can consume both characters and control the rest of S and P.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5fe1&quot; name=&quot;5fe1&quot;&gt;
      This last one is the real deal. What happens when we meet a wildcard pattern?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;205f&quot; name=&quot;205f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a__”, “*__”)
      &lt;&#x2F;strong&gt;
      has 3 possibilities.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;0953&quot; name=&quot;0953&quot;&gt;
       “*” matches exactly one character. So, both characters are consumed.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;6180&quot; name=&quot;6180&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a__”, “*__”) = isMatch(“__”, “__”)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;67fc&quot; name=&quot;67fc&quot;&gt;
      2. “*” matches zero characters. So, only “*” is consumed.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3c8d&quot; name=&quot;3c8d&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a__”, “*__”) = isMatch(“a__”, “__”)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;54a1&quot; name=&quot;54a1&quot;&gt;
      3. “*” matches one or more characters. So, only “a” is consumed.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2371&quot; name=&quot;2371&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“a__”, “*__”) = isMatch(“__”, “*__”)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;43a2&quot; name=&quot;43a2&quot;&gt;
      Let’s put a visual representation.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7fa5&quot; name=&quot;7fa5&quot;&gt;
      Below is the matcher tree for “aaa” and “*?a”.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;ca84&quot; name=&quot;ca84&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1208&quot; data-image-id=&quot;1*qqdeoTUmJ0nU9hPUeJikzw.png&quot; data-width=&quot;3326&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*qqdeoTUmJ0nU9hPUeJikzw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--figure-strong&quot;&gt;
        isMatch(aaa, *?a) = isMatch(aa, ?a) or isMatch(aaa, ?a) or isMatch(aa, *?a)
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;ce8f&quot; name=&quot;ce8f&quot;&gt;
      Respectively, below are the matcher trees for these 3 child nodes.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;3&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--p&quot; id=&quot;11f4&quot; name=&quot;11f4&quot; style=&quot;width: 19.138%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1134&quot; data-image-id=&quot;1*zdJhv2YmLb2aAWrfSCNe9g.png&quot; data-width=&quot;902&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*zdJhv2YmLb2aAWrfSCNe9g.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;d45a&quot; name=&quot;d45a&quot; style=&quot;width: 18.416%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1148&quot; data-image-id=&quot;1*E0YMLyzxrSYy5fmhsfpx9w.png&quot; data-width=&quot;878&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*E0YMLyzxrSYy5fmhsfpx9w.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;5811&quot; name=&quot;5811&quot; style=&quot;width: 62.446%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1135&quot; data-image-id=&quot;1*mgcrgMzqFy3V1WnZaW2Hhw.png&quot; data-width=&quot;2944&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*mgcrgMzqFy3V1WnZaW2Hhw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot; style=&quot;width: 160.138%; left: -60.138%;&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--figure-strong&quot;&gt;
        isMatch(aa, ?a) = isMatch(a, a) ||| isMatch(aaa, ?a) = isMatch(aa, a) ||| isMatch(aa, *?a) = isMatch(a, ?a) or isMatch(aa, ?a) or isMatch(a, *?a)
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;09a5&quot; name=&quot;09a5&quot;&gt;
      You should now realize that I started coloring the nodes that appear more than once in distinct colors. So, even at this second step, we have a duplicate node, the blue
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(aa, ?a).
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;58f2&quot; name=&quot;58f2&quot;&gt;
      At this point, the visual representation allows us to reach a similar conclusion even within this picture. Each “*” leads to an exponential growth in the number of computational steps, as it creates 3 separate branches.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;6189&quot; name=&quot;6189&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3757&quot; data-image-id=&quot;1*aaZ_QwKL688B1qJulyQtsQ.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;7648&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*aaZ_QwKL688B1qJulyQtsQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       The whole matcher tree of isMatch(aaa, *?a). Same colored nodes are duplicates.
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a588&quot; name=&quot;a588&quot;&gt;
      The green nodes are the isMatch(“”, “”) nodes, reaching such a node means that we actually reached a match.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7460&quot; name=&quot;7460&quot;&gt;
      Even within this small example with only one “*” node, we can see 5 duplicates. So, can we actually compute the number of steps? In the general case, probably no. I’ll give you the numbers for a specific set of cases though.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6a08&quot; name=&quot;6a08&quot;&gt;
      Let’s examine
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(a…a, *…*)
      &lt;&#x2F;strong&gt;
      for different lengths of “a” and “*”. Below, I have written two numbers, the first one is the number of calls to
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “”)
      &lt;&#x2F;strong&gt;
      , and the second is the number of all function calls for that query.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;css&quot; data-code-block-mode=&quot;2&quot; id=&quot;9a9b&quot; name=&quot;9a9b&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;isMatch(&lt;span class=&quot;hljs-selector-tag&quot;&gt;a&lt;&#x2F;span&gt;, *): &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;&#x2F;span&gt;&lt;br&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(a, **): &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;11&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(a, ***): &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;19&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(a, ****): &lt;span class=&quot;hljs-number&quot;&gt;8&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;29&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(a, *****): &lt;span class=&quot;hljs-number&quot;&gt;10&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;41&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aa, *): &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;8&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aa, **): &lt;span class=&quot;hljs-number&quot;&gt;8&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;25&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aa, ***): &lt;span class=&quot;hljs-number&quot;&gt;18&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;56&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aa, ****): &lt;span class=&quot;hljs-number&quot;&gt;32&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;105&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aa, *****): &lt;span class=&quot;hljs-number&quot;&gt;50&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;176&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaa, *): &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;11&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaa, **): &lt;span class=&quot;hljs-number&quot;&gt;12&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;45&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaa, ***): &lt;span class=&quot;hljs-number&quot;&gt;38&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;127&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaa, ****): &lt;span class=&quot;hljs-number&quot;&gt;88&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;289&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaa, *****): &lt;span class=&quot;hljs-number&quot;&gt;170&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;571&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaa, *): &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;14&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaa, **): &lt;span class=&quot;hljs-number&quot;&gt;16&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;71&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaa, ***): &lt;span class=&quot;hljs-number&quot;&gt;66&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;244&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaa, ****): &lt;span class=&quot;hljs-number&quot;&gt;192&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;661&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaa, *****): &lt;span class=&quot;hljs-number&quot;&gt;450&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;1522&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaa, *): &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;17&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaa, **): &lt;span class=&quot;hljs-number&quot;&gt;20&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;103&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaa, ***): &lt;span class=&quot;hljs-number&quot;&gt;102&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;419&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaa, ****): &lt;span class=&quot;hljs-number&quot;&gt;360&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;1325&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaa, *****): &lt;span class=&quot;hljs-number&quot;&gt;1002&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3509&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Some big &lt;span class=&quot;hljs-built_in&quot;&gt;examples&lt;&#x2F;span&gt;(these do not have the total number)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaa, **********): &lt;span class=&quot;hljs-number&quot;&gt;4780008&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaa, ***********): &lt;span class=&quot;hljs-number&quot;&gt;11414898&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaa, ************): &lt;span class=&quot;hljs-number&quot;&gt;25534368&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaa, *************): &lt;span class=&quot;hljs-number&quot;&gt;53972178&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaa, **************): &lt;span class=&quot;hljs-number&quot;&gt;108568488&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaa, **********): &lt;span class=&quot;hljs-number&quot;&gt;10377180&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaa, ***********): &lt;span class=&quot;hljs-number&quot;&gt;26572086&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaa, ************): &lt;span class=&quot;hljs-number&quot;&gt;63521352&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaa, *************): &lt;span class=&quot;hljs-number&quot;&gt;143027898&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaa, **************): &lt;span class=&quot;hljs-number&quot;&gt;305568564&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaa, **********): &lt;span class=&quot;hljs-number&quot;&gt;21278640&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaa, ***********): &lt;span class=&quot;hljs-number&quot;&gt;58227906&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaa, ************): &lt;span class=&quot;hljs-number&quot;&gt;148321344&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaa, *************): &lt;span class=&quot;hljs-number&quot;&gt;354870594&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaa, **************): &lt;span class=&quot;hljs-number&quot;&gt;803467056&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaaa, **********): &lt;span class=&quot;hljs-number&quot;&gt;41517060&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaaa, ***********): &lt;span class=&quot;hljs-number&quot;&gt;121023606&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaaa, ************): &lt;span class=&quot;hljs-number&quot;&gt;327572856&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaaa, *************): &lt;span class=&quot;hljs-number&quot;&gt;830764794&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;isMatch&lt;&#x2F;span&gt;(aaaaaaaaaaaaa, **************): &lt;span class=&quot;hljs-number&quot;&gt;1989102444&lt;&#x2F;span&gt;&lt;&#x2F;br&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;fd7e&quot; name=&quot;fd7e&quot;&gt;
      I have tried to uncover some deep function running in the back, but I wasn’t able to find any mathematical equations. If anyone is, I would love to hear your results. But it is clear that length has a multiplicative effect and quickly gets very large.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;11ea&quot; name=&quot;11ea&quot;&gt;
      Of course, this number by itself is not very meaningful as
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       isMatch(“”, “”)
      &lt;&#x2F;strong&gt;
      is actually cheaper than the memoization call, but I think it gives an intuition on the number of duplicate computations. So, how do we memorize this? I have implemented a very simple cache in the code below.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;2&quot; id=&quot;daeb&quot; name=&quot;daeb&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# Call counter for the measurements in this articc&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;call_counts = {}&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# Call cacher &lt;&#x2F;span&gt;&lt;br&#x2F;&gt;calls = {}&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;isMatch&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;s: &lt;span class=&quot;hljs-built_in&quot;&gt;str&lt;&#x2F;span&gt;, p: &lt;span class=&quot;hljs-built_in&quot;&gt;str&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;) -&amp;gt; &lt;span class=&quot;hljs-built_in&quot;&gt;bool&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;## Caching Parts&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Call counter&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (s, p) &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; call_counts:&lt;br&#x2F;&gt;        call_counts[(s, p)] += &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        call_counts[(s, p)] = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Memoization&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; (s, p) &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; calls:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; calls[(s, p)]&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;## Base cases&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# When both are consumed, it&#x27;s a match&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(s) == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;and&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(p) == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        calls[(s, p)] = &lt;span class=&quot;hljs-literal&quot;&gt;True&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;True&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# When pattern is consumed, it&#x27;s not a match&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(p) == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        calls[(s, p)] = &lt;span class=&quot;hljs-literal&quot;&gt;False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# When string is consumed, it&#x27;s a match if the rest of the pattern is all &#x27;*&#x27;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(s) == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; p[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] == &lt;span class=&quot;hljs-string&quot;&gt;&#x27;*&#x27;&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;and&lt;&#x2F;span&gt; isMatch(s, p[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;## Recursive cases&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Consume both if they match&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# a___ &amp;lt;&amp;gt; a___&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; s[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] == p[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;]:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; isMatch(s[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:], p[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Consume both if pattern is &#x27;?&#x27;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# a___ &amp;lt;&amp;gt; ?___&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; p[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] == &lt;span class=&quot;hljs-string&quot;&gt;&#x27;?&#x27;&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; isMatch(s[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:], p[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# There are 3 cases for &#x27;*&#x27;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# a___ &amp;lt;&amp;gt; *___&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; p[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] == &lt;span class=&quot;hljs-string&quot;&gt;&#x27;*&#x27;&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-comment&quot;&gt;# 1. Consume both: so that &#x27;*&#x27; matches 1 character&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        c1 = isMatch(s[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:], p[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-comment&quot;&gt;# 2. Consume string, but not pattern: so that &#x27;*&#x27; matches 1 or more characters&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        c2 = isMatch(s[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:], p)&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-comment&quot;&gt;# 3. Consume pattern, but not string: so that &#x27;*&#x27; matches 0 characters&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;        c3 = isMatch(s, p[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; c1 &lt;span class=&quot;hljs-keyword&quot;&gt;or&lt;&#x2F;span&gt; c2 &lt;span class=&quot;hljs-keyword&quot;&gt;or&lt;&#x2F;span&gt; c3&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    calls[(s, p)] = &lt;span class=&quot;hljs-literal&quot;&gt;False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;aa&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;a&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;aa&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;*&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# True&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;cb&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;?a&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;adceb&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;*a*b&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# True&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;acdcb&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;a*c?b&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# False&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;print&lt;&#x2F;span&gt;(isMatch(&lt;span class=&quot;hljs-string&quot;&gt;&#x27;adceb&#x27;&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&#x27;*a*b*&#x27;&lt;&#x2F;span&gt;)) &lt;span class=&quot;hljs-comment&quot;&gt;# True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;64e6&quot; name=&quot;64e6&quot;&gt;
      This memoization is kind of hacky, in the sense that you would not able to copy-paste this code into leetcode, but it’s certainly adaptable. Instead of using the strings for the cacher, it’s easy to use the indexes, which in turn means you don’t actually need a map, but rather just a simple 2d array that allows O(1)(constant) indexing.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;d2ef&quot; name=&quot;d2ef&quot;&gt;
      Conclusion
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;9f97&quot; name=&quot;9f97&quot;&gt;
      I like this problem better than the 3sum problem in the first article, as it allows a much more principled way of memoization. The fact that 3sum depended on calls to 2sum was a bit crude and maybe harder to internalize. But isMatch depending entirely on itself allows one to see the call tree much better. If you have any other problems you want solved in different articles, let me know!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;36cebb419d56&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-06-10T21:07:08.681Z&quot;&gt;
     June 10, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;learners-guide-to-dynamic-programming-2-36cebb419d56&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Learner’s Guide to Dynamic Programming#1</title>
        <published>2023-06-07T00:00:00+00:00</published>
        <updated>2023-06-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/learners-guide-to-dynamic-programming1/"/>
        <id>https://alperenkeles.com/posts/learners-guide-to-dynamic-programming1/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/learners-guide-to-dynamic-programming1/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;63f9&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;8e5c&quot; name=&quot;8e5c&quot;&gt;
      Learner’s Guide to Dynamic Programming#1
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cb1a&quot; name=&quot;cb1a&quot;&gt;
      Dynamic programming is an algorithmic problem solving paradigm focused on recognization and elimination of repetitive computation. For this article, I’ll write a short introduction to dynamic programming, and move on to explaining how I try to look at dynamic programming problems.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;ad20&quot; name=&quot;ad20&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Introduction to Dynamic Programming
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;bcb5&quot; name=&quot;bcb5&quot;&gt;
      Dynamic programming rests on two simple properties of the algorithms and the problems it works on.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5f87&quot; name=&quot;5f87&quot;&gt;
      Firstly, a problem needs to have
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       optimal substructure property
      &lt;&#x2F;strong&gt;
      , namely the property that it is possible to use results of an algorithm for a substructure to compute the results of an algorithm for the whole structure. Let’s demistify this a bit.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2fad&quot; name=&quot;2fad&quot;&gt;
      Let us look an implementation of array sum algorithm. One would write is as given below in Python in the iterative way.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;2&quot; id=&quot;9944&quot; name=&quot;9944&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;sum&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;array&lt;&#x2F;span&gt;):&lt;br&#x2F;&gt;  res = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; i &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; array:&lt;br&#x2F;&gt;    res += i&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; i&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;7e74&quot; name=&quot;7e74&quot;&gt;
      If we instead took the functional way to write it, it could look as below.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;2&quot; id=&quot;e0f2&quot; name=&quot;e0f2&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;sum&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;array&lt;&#x2F;span&gt;):&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; array == []:&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;  &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; array[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] + &lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;(array[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;:])&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;d485&quot; name=&quot;d485&quot;&gt;
      Even though this looks like a simple change, it’s actually a fundamentally different solution. In the iterative version, if we were to try to put it in natural language, would basically say “Start with 0, add each element to the result, at the end of the array we will have all of them added to the result” while the second one would say “Empty array has a sum of 0, for any non-empty array, we can take the first element and the result of summing the rest, and just add those.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;90d5&quot; name=&quot;90d5&quot;&gt;
      So, if we have a list of items [3, 2, 7, 6], the first algorithm would sum it as
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;scss&quot; data-code-block-mode=&quot;1&quot; id=&quot;25ac&quot; name=&quot;25ac&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;((((&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-number&quot;&gt;7&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;ae27&quot; name=&quot;ae27&quot;&gt;
      Whereas the second algorithm would sum it as
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;scss&quot; data-code-block-mode=&quot;1&quot; id=&quot;53b3&quot; name=&quot;53b3&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt; + (&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt; + (&lt;span class=&quot;hljs-number&quot;&gt;7&lt;&#x2F;span&gt; + (&lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;))))&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;44c9&quot; name=&quot;44c9&quot;&gt;
      The real difference between them is, the second one explicitly relies on
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       optimal substructure property
      &lt;&#x2F;strong&gt;
      . It follows the statement that we can just add the current number with the sum of the rest and the sum of the current array. I believe this line of thinking, especially for memoization-based dynamic programming becomes very important.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5da9&quot; name=&quot;5da9&quot;&gt;
      The second property dynamic programming relies on is
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       overlapping subproblems property
      &lt;&#x2F;strong&gt;
      . This property states that we do not use the results of the subproblems once, we do it many times, which means it makes sense to store those results and reuse them as needed. Let’s clarify further.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7d56&quot; name=&quot;7d56&quot;&gt;
      In the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       sum
      &lt;&#x2F;code&gt;
      example, it doesn’t make sense to use dynamic programming, simply because each value is computed exactly once. So, what would be an case where we have
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       overlapping subproblems
      &lt;&#x2F;strong&gt;
      ? The canonical example is the fibonacci numbers.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c969&quot; name=&quot;c969&quot;&gt;
      We all know and love fibonacci numbers,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       f(n) = f(n-1) + f(n-2)
      &lt;&#x2F;code&gt;
      . When we write the paranthesis based computation tree, we will see something very interesting.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;scss&quot; data-code-block-mode=&quot;1&quot; id=&quot;aa4e&quot; name=&quot;aa4e&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;5&lt;&#x2F;span&gt;) = &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;) = &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;) = &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;) = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;) = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;f&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;5&lt;&#x2F;span&gt;) = (((&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;) + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;) + (&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;36fb&quot; name=&quot;36fb&quot;&gt;
      One should realize that we compute f(3) = (1+1) twice, one for computing f(4), one for computing f(5). This is the
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       overlapping subproblems property
      &lt;&#x2F;strong&gt;
      . When we are computing the same substructures repeatedly, and the substructures preserve the optimality, we can use dynamic programming.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;26bd&quot; name=&quot;26bd&quot;&gt;
      Some Personal Insights
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d521&quot; name=&quot;d521&quot;&gt;
      I think one particularly interesting&#x2F;important realization I had in my own perspective to these problems is that the recursive paradigm for solving problems allows one to easily discover the overlapping subproblems. In my early years of working with algorithms problems, I would try to find ad hoc algorithms that could solve some cases I would come up with. Now, I start with small examples(recursion base cases), look for optimal substructures(recursive cases), look for overlapping substructures(function calls to be cached&#x2F;memoized). I’ll apply this line of thinking for 3Sum problem.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;57d8&quot; name=&quot;57d8&quot;&gt;
      3Sum
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;c04e&quot; name=&quot;c04e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Problem Statement:
      &lt;&#x2F;strong&gt;
      Given an array and a number, return all triples that add up to the number.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7851&quot; name=&quot;7851&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Small examples:
      &lt;&#x2F;strong&gt;
      If I have an array with 3 elements, then all I can do is check if they are equal to the number. If I have an array of 4 elements, I can do 2 things. (1) I can just take the sum of the first 3 elements, or I can take the last element with any two elements from the first 3 elements.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a126&quot; name=&quot;a126&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Optimal Substructure:
      &lt;&#x2F;strong&gt;
      The small example gives me a perspective. For each element, there are two cases. Either the element is in the sum, or it is not. So, we look at 2 cases for each element; (1) Ask for the 3Sum of the rest of the array, (2) ask for all 2Sum’s of the rest of the array, check if adding my element to them results in the asked number.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eb0c&quot; name=&quot;eb0c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Overlapping Substructure:
      &lt;&#x2F;strong&gt;
      As I would realize if I tried to compute a length-5 array, this solution requires me to recompute 2Sum’s for the array each time I want to compute a 3Sum. Let’s write it similar to Fibonacci numbers.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;1&quot; id=&quot;4d5d&quot; name=&quot;4d5d&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;3&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;) = 3&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;) ++ 2sums([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;])&lt;br&#x2F;&gt;3&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;) = 3&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-number&quot;&gt;6&lt;&#x2F;span&gt;) ++ 2sums([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;])&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;Whereas&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;2sums([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;&#x2F;span&gt;]) = 2sums([&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;]) * &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;0089&quot; name=&quot;0089&quot;&gt;
      Instead of the actual functions, I have written the number of steps associated with each computation, but the realization should be that we are computing
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       2sums([1, 2, 3])
      &lt;&#x2F;code&gt;
      twice, one for computing
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       3sum([1, 2, 3, 4], 6)
      &lt;&#x2F;code&gt;
      and one for computing
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       2sums([1, 2, 3, 4])
      &lt;&#x2F;code&gt;
      , and in fact that’s a property of
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       2sums
      &lt;&#x2F;code&gt;
      . Any array that computes its 2sum always computes 2sums’s of all of its subsets.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2019&quot; name=&quot;2019&quot;&gt;
      Upon this realization, we will simply precompute 2sum and relieve ourselves of the responsibility of computing it every single time. Below is the actual code we would write for those who would like to test it by hand.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;2&quot; id=&quot;85c5&quot; name=&quot;85c5&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;two_sums&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;arr: &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;) -&amp;gt; &lt;span class=&quot;hljs-built_in&quot;&gt;dict&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;tuple&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;]]:&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&quot;&lt;br&#x2F;&gt;    Returns a dictionary of all the two sums in the array&lt;br&#x2F;&gt;    &quot;&quot;&quot;&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    two_sum_dict = {}&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; i &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(arr)):&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;&#x2F;span&gt; j &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;range&lt;&#x2F;span&gt;(i + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(arr)):&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; arr[i] + arr[j] &lt;span class=&quot;hljs-keyword&quot;&gt;not&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;&#x2F;span&gt; two_sum_dict:&lt;br&#x2F;&gt;                two_sum_dict[arr[i] + arr[j]] = [(arr[i], arr[j])]&lt;br&#x2F;&gt;            &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;                two_sum_dict[arr[i] + arr[j]].append((arr[i], arr[j]))&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; two_sum_dict&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;three_sum&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;arr: &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;) -&amp;gt; &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;]:&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(arr) &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; []&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Compute 3sum for the first part.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    c1 = three_sum(arr[:-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;)&lt;br&#x2F;&gt;    &lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Compute 2sum for the first part&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    two_sum = two_sums(arr[:-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;])&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Check for all the pairs of numbers in the first part that conforms&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# to the given sum. &lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    c2 = &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;map&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;lambda&lt;&#x2F;span&gt; t: (t[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;], t[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;]), two_sum.get(&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt; - arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], [])))&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Merge two solutions&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; c1 + c2&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;40e8&quot; name=&quot;40e8&quot;&gt;
      The cached version is somewhat trickier and not as neat as the version I provide above.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;python&quot; data-code-block-mode=&quot;2&quot; id=&quot;546e&quot; name=&quot;546e&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;three_sum_cached&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;arr: &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;: &lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;, two_sums: &lt;span class=&quot;hljs-built_in&quot;&gt;dict&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;tuple&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;, &lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;]]&lt;&#x2F;span&gt;) -&amp;gt; &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;[&lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;&#x2F;span&gt;]:&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;len&lt;&#x2F;span&gt;(arr) &amp;lt; &lt;span class=&quot;hljs-number&quot;&gt;3&lt;&#x2F;span&gt;:&lt;br&#x2F;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; []&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Same function call with the original version&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    c1 = three_sum_cached(arr[:-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], &lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt;, two_sums)&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# Instead of the function call, we lookup from the precomputed dictionary&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    matching_two_sums = two_sums.get(&lt;span class=&quot;hljs-built_in&quot;&gt;sum&lt;&#x2F;span&gt; - arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], [])&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# This is to prevent using the same number twice&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    filtered_two_sums = &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;filter&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;lambda&lt;&#x2F;span&gt; t: t[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] != arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;] &lt;span class=&quot;hljs-keyword&quot;&gt;and&lt;&#x2F;span&gt; t[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;] != arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], matching_two_sums))&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    c2 = &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;map&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;lambda&lt;&#x2F;span&gt; t: (t[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;], t[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;], arr[-&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;]), filtered_two_sums))&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# This is to prevent using the same triplets twice.&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;# For example, we delete (1, 4, 3) and only leave (1, 3, 4)&lt;&#x2F;span&gt;&lt;br&#x2F;&gt;    filtered_c2 = &lt;span class=&quot;hljs-built_in&quot;&gt;list&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-built_in&quot;&gt;filter&lt;&#x2F;span&gt;(&lt;span class=&quot;hljs-keyword&quot;&gt;lambda&lt;&#x2F;span&gt; t: t[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;&#x2F;span&gt;] &amp;lt; t[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;&#x2F;span&gt;] &amp;lt; t[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;&#x2F;span&gt;], c2))&lt;br&#x2F;&gt;&lt;br&#x2F;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;&#x2F;span&gt; c1 + filtered_c2&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;edc1&quot; name=&quot;edc1&quot;&gt;
      The second algorithm is somewhat crude, but that’s probably on me. I bet there are better ways of implementing the caching.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fa23&quot; name=&quot;fa23&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Complexity: O(n²)(The time to compute the 2sums)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;adbf&quot; name=&quot;adbf&quot;&gt;
      Visually, while the original looks similar to this:
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;6e24&quot; name=&quot;6e24&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2304&quot; data-image-id=&quot;1*uPxMi97vZ0vYqjGNHOTcFw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;4707&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*uPxMi97vZ0vYqjGNHOTcFw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;48b1&quot; name=&quot;48b1&quot;&gt;
      The cached implementation is similar to this:
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8a66&quot; name=&quot;8a66&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2221&quot; data-image-id=&quot;1*V92DTDFgYacxG3fP0Le-TQ.png&quot; data-width=&quot;4527&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*V92DTDFgYacxG3fP0Le-TQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;166a&quot; name=&quot;166a&quot;&gt;
      2Sum part is kind of cheating as I’ve not written that part of the algorithm recursively, so it’s more similar to this:
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;3430&quot; name=&quot;3430&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2679&quot; data-image-id=&quot;1*Xhsmpc1uswA_Mn5ifl8trw.png&quot; data-width=&quot;5439&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Xhsmpc1uswA_Mn5ifl8trw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;1f6c&quot; name=&quot;1f6c&quot;&gt;
      Where 2Sums is the data structure that allows querying for tuples for a given amount in constant time.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;354e&quot; name=&quot;354e&quot;&gt;
      Conclusion
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;e4ca&quot; name=&quot;e4ca&quot;&gt;
      In this article, I tried to convey my method&#x2F;perspective on solving algorithmic problems using dynamic programming. My methodology rests on first creating a naive recursive solution for a problem with optimal substructures, identifying overlapping substructures and caching&#x2F;memoizing those function calls. Hope it’s useful!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;f520a5b2ba4b&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-06-07T04:47:12.361Z&quot;&gt;
     June 7, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;learners-guide-to-dynamic-programming-1-f520a5b2ba4b&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Learner’s Guide to Coq Theorem Prover#1</title>
        <published>2023-04-21T00:00:00+00:00</published>
        <updated>2023-04-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/learners-guide-to-coq-theorem-prover1/"/>
        <id>https://alperenkeles.com/posts/learners-guide-to-coq-theorem-prover1/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/learners-guide-to-coq-theorem-prover1/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;88bb&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;2f61&quot; name=&quot;2f61&quot;&gt;
      Learner’s Guide to Coq
                            Theorem Prover#1
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;16f6&quot; name=&quot;16f6&quot;&gt;
      Before I begin, I must state that I
                            am pretty much not qualified to write about theorem proving in Coq, but that was pretty much
                            the idea behind Learning From Learners, so I decided to try anyway.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;616c&quot; name=&quot;616c&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;242&quot; data-image-id=&quot;1*dugdANnZXpIZV9h4d6y3ag.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;618&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*dugdANnZXpIZV9h4d6y3ag.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--figure-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;1856&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;1856&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;xkcd.com&#x2F;1856&#x2F;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c77f&quot; name=&quot;c77f&quot;&gt;
      If you want a more
                            comprehensive lecture style interactive book, go with a classic,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&quot; href=&quot;https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Software
                                Foundations
      &lt;&#x2F;a&gt;
      ; if you wanna have your mind blown by dependent types, go with
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;adam.chlipala.net&#x2F;cpdt&#x2F;&quot; href=&quot;http:&#x2F;&#x2F;adam.chlipala.net&#x2F;cpdt&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       CPDT
      &lt;&#x2F;a&gt;
      ; if you
                            were as confused as I was when you hear about dependent types, I may be a good starting
                            point to show you “How to Start Playing Around With Coq”.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7f45&quot; name=&quot;7f45&quot;&gt;
      So, what is Coq? According to
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Coq&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Coq&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Wikipedia
      &lt;&#x2F;a&gt;
      :
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;69d1&quot; name=&quot;69d1&quot;&gt;
      “
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Coq
      &lt;&#x2F;strong&gt;
      is an
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Proof_assistant&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Proof_assistant&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;Proof assistant&quot;&gt;
       interactive theorem prover
      &lt;&#x2F;a&gt;
      first released in 1989. It allows for
                            expressing
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mathematics&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mathematics&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;Mathematics&quot;&gt;
       mathematical
      &lt;&#x2F;a&gt;
      assertions, mechanically checks proofs of these
                            assertions, helps find formal proofs, and extracts a certified program from the
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Constructive_proof&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Constructive_proof&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;Constructive proof&quot;&gt;
       constructive proof
      &lt;&#x2F;a&gt;
      of its
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_specification&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_specification&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;Formal specification&quot;&gt;
       formal specification
      &lt;&#x2F;a&gt;
      ”.
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;9f89&quot; name=&quot;9f89&quot;&gt;
      What is Coq? I hear you
                            asking again. Simply put, it’s a programming system that allows you to prove your programs.
                            You can write theorems about your code which then you can prove. It’s like testing, but
                            without the testing part, and it actually works.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6b23&quot; name=&quot;6b23&quot;&gt;
      Let’s see the Hello World example
                            for Coq.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;281f&quot; name=&quot;281f&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;54cd1482e242e15283bf1c351cbe8cdc.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b95d&quot; name=&quot;b95d&quot;&gt;
      Let’s break this down.
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       bool
      &lt;&#x2F;code&gt;
      is your old classic
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       true
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       false
      &lt;&#x2F;code&gt;
      .
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       negb
      &lt;&#x2F;code&gt;
      is “Negate-Bool”.
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       negb_involutive
      &lt;&#x2F;code&gt;
      is the interesting part.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e5ce&quot; name=&quot;e5ce&quot;&gt;
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       \forall b: bool, negb(negb b) = b
      &lt;&#x2F;code&gt;
      is our
                            first theorem. We can actually easily check it for each both
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       true
      &lt;&#x2F;code&gt;
      and
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       false
      &lt;&#x2F;code&gt;
      to see that it is true.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7d87&quot; name=&quot;7d87&quot;&gt;
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       b=true: negb(negb true) = negb false = true
      &lt;&#x2F;code&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;34c5&quot; name=&quot;34c5&quot;&gt;
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       b=false: negb(negb false) = negb true = false
      &lt;&#x2F;code&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0f77&quot; name=&quot;0f77&quot;&gt;
      In fact, the proof is exactly the
                            same. Of course, to understand that, you need to understand what is going on.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;897f&quot; name=&quot;897f&quot;&gt;
      When Coq sees the “Vernacular”
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       Theorem
      &lt;&#x2F;code&gt;
      , it expects a proof of the theorem
                            after its definition. Proofs conventionally start with the
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       Proof
      &lt;&#x2F;code&gt;
      vernacular, denoting the beginning of
                            the proof for documentation. The proof we see above is a sequence of “Tactics”, which are
                            basically building blocks for your proof. They hide the complexity of Coq “Proof Terms”, and
                            allow you to see your proof as a set of instructions.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;94fd&quot; name=&quot;94fd&quot;&gt;
      Let me try to give a
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       quick
      &lt;&#x2F;strong&gt;
      explanation of that paragraph.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;39f4&quot; name=&quot;39f4&quot;&gt;
      A Coq program does not have a
                            special proof mode. It is just a program. The difference is, it has dependent types. These
                            are types that depend on values. They allow you to write your types as theorems. So,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       \forall b: bool, negb(negb b) = b
      &lt;&#x2F;code&gt;
      is the type
                            of
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       negb_involutive
      &lt;&#x2F;code&gt;
      . What do programs
                            written in statically-typed languages do? They type-check.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5f5b&quot; name=&quot;5f5b&quot;&gt;
      So, when you have a definition that
                            has a theorem as its type, you are supposed to write its proof, which would be the code that
                            will allow the function to type-check correctly. It is not much different than the fact that
                            we need a function returning integer to return an integer.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       (Kidding)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c2e7&quot; name=&quot;c2e7&quot;&gt;
      This phenomenon of “types are
                            theorems, programs are proofs” arises from
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Curry–Howard_correspondence&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Curry–Howard_correspondence&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Curry-Howard
                                Correspondence
      &lt;&#x2F;a&gt;
      for anyone curious to go more into detail.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4ae7&quot; name=&quot;4ae7&quot;&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       For the Javascript people, Tactics are like JSX elements
                                hiding the HTML&#x2F;CSS&#x2F;Js behind.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8135&quot; name=&quot;8135&quot;&gt;
      A Vernacular is a top-level
                            statement to tell Coq program is going to behave in a certain way. There are many different
                            vernaculars,
      &lt;code class=&quot;markup--code markup--p-code&quot;&gt;
       Inductive, Definition, Proof
      &lt;&#x2F;code&gt;
      are three examples we have on the small piece of code.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5d78&quot; name=&quot;5d78&quot;&gt;
      Now, we can go inside the proof.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p graf--preV2&quot; data-code-block-lang=&quot;coq&quot; data-code-block-mode=&quot;0&quot; id=&quot;6be9&quot; name=&quot;6be9&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;Proof.&lt;br&#x2F;&gt;intros b. &lt;br&#x2F;&gt;destruct b eqn:E.&lt;br&#x2F;&gt;- reflexivity.&lt;br&#x2F;&gt;- reflexivity.&lt;br&#x2F;&gt;Qed.&lt;&#x2F;span&gt;&lt;&#x2F;pre&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--pre&quot; id=&quot;6248&quot; name=&quot;6248&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        Proof
       &lt;&#x2F;code&gt;
       is used to denote the start of
                                sequence of tactics.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1920&quot; name=&quot;1920&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        intros b
       &lt;&#x2F;code&gt;
       turns
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        \forall b
       &lt;&#x2F;code&gt;
       into
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        b
       &lt;&#x2F;code&gt;
       in order to operate on the variable.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;55a2&quot; name=&quot;55a2&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        destruct b eqn:E
       &lt;&#x2F;code&gt;
       is “Proof by Cases”.
                                Remember,
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        Inductive bool
       &lt;&#x2F;code&gt;
       had two
                                “constructors&#x2F;members”,
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        true
       &lt;&#x2F;code&gt;
       and
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        false
       &lt;&#x2F;code&gt;
       . Hence, destructing b gives you
                                two cases,
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        b=true
       &lt;&#x2F;code&gt;
       and
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        b=false
       &lt;&#x2F;code&gt;
       , we have now decided the value
                                of the variable.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ae28&quot; name=&quot;ae28&quot;&gt;
       Each
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        -
       &lt;&#x2F;code&gt;
       allows us to focus on a single case,
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        reflexivity
       &lt;&#x2F;code&gt;
       just checks if two sides
                                of the equality is “definitionally equal”. What definitional equality is a question I
                                will not try to answer here.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;51cc&quot; name=&quot;51cc&quot;&gt;
       &lt;code class=&quot;markup--code markup--li-code&quot;&gt;
        Qed
       &lt;&#x2F;code&gt;
       signals Coq that we have finished
                                our proof, and we are ready for proof-checking. If proof-checking goes through, we start
                                to
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;tenor.com&#x2F;bQ9Ws.gif&quot; href=&quot;https:&#x2F;&#x2F;tenor.com&#x2F;bQ9Ws.gif&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;tenor.com&#x2F;bQ9Ws.gif
       &lt;&#x2F;a&gt;
       ; else, we missed something in the
                                proof.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;af2d&quot; name=&quot;af2d&quot;&gt;
      As you see, there are lots of stuff
                            going on the background, even the simplest example of a proof has to go through some
                            complicated explanations. Yet, Coq is pretty good at abstracting many of these
                            complications, as does all of our other programming systems.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0d73&quot; name=&quot;0d73&quot;&gt;
      I am thinking of moving on with
                            these series with some follow-up articles. They will be much simplified&#x2F;cut versions of
                            Software Foundations, designed to mostly intrigue rather than teach. If this piece has
                            attracted your interest in proved programming and Coq, please check the sources I leave
                            below and let me know so I get motivated to write more about this.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;9861&quot; name=&quot;9861&quot;&gt;
       Software Foundations:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;softwarefoundations.cis.upenn.edu&#x2F;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e762&quot; name=&quot;e762&quot;&gt;
       CPDT:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;adam.chlipala.net&#x2F;cpdt&#x2F;&quot; href=&quot;http:&#x2F;&#x2F;adam.chlipala.net&#x2F;cpdt&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        http:&#x2F;&#x2F;adam.chlipala.net&#x2F;cpdt&#x2F;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;92dc&quot; name=&quot;92dc&quot;&gt;
       Coq Website:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;coq.inria.fr&#x2F;a-short-introduction-to-coq&quot; href=&quot;https:&#x2F;&#x2F;coq.inria.fr&#x2F;a-short-introduction-to-coq&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;coq.inria.fr&#x2F;a-short-introduction-to-coq
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6baa&quot; name=&quot;6baa&quot;&gt;
       Turkish Youtube Video by
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;joomy.korkutblech.com&quot; href=&quot;http:&#x2F;&#x2F;joomy.korkutblech.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
         Joomy
        &lt;&#x2F;strong&gt;
       &lt;&#x2F;a&gt;
       :
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=llQTJuO65Kk&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=llQTJuO65Kk&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=llQTJuO65Kk
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6e08&quot; name=&quot;6e08&quot;&gt;
       Learn X in Y Minutes:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;learnxinyminutes.com&#x2F;docs&#x2F;coq&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;learnxinyminutes.com&#x2F;docs&#x2F;coq&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;learnxinyminutes.com&#x2F;docs&#x2F;coq&#x2F;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;2&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--li&quot; id=&quot;b5f9&quot; name=&quot;b5f9&quot; style=&quot;width: 47.424%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;640&quot; data-image-id=&quot;1*DORzPabprYmsShRUBYN3jA.png&quot; data-width=&quot;577&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*DORzPabprYmsShRUBYN3jA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure graf--trailing&quot; id=&quot;a276&quot; name=&quot;a276&quot; style=&quot;width: 52.576%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;200&quot; data-image-id=&quot;1*e5SHfheTSuANvryZ8m6NYg.png&quot; data-width=&quot;200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*e5SHfheTSuANvryZ8m6NYg.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot; style=&quot;width: 190.201%; left: -90.201%;&quot;&gt;
       Left(Le coq
                                mécanisé taken from Ilya Sergey’s website, created by
       &lt;a class=&quot;markup--anchor markup--figure-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.liliaanisimova.com&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;www.liliaanisimova.com&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.liliaanisimova.com&#x2F;
       &lt;&#x2F;a&gt;
       ), Right(Coq logo from Twitter)
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;e380c9e360b8&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-04-21T04:19:48.296Z&quot;&gt;
     April 21, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;learners-guide-to-coq-theorem-prover-1-e380c9e360b8&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A Short Story of Inequality</title>
        <published>2023-04-17T00:00:00+00:00</published>
        <updated>2023-04-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/a-short-story-of-inequality/"/>
        <id>https://alperenkeles.com/posts/a-short-story-of-inequality/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/a-short-story-of-inequality/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;b1eb&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;c1b1&quot; name=&quot;c1b1&quot;&gt;
      A Short Story of Inequality
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8e07&quot; name=&quot;8e07&quot;&gt;
      The voice we hear. The light we see. The step we take. The water we drink. The car we drive. The bed we sleep. The screen we look. The pen we write. The book we read. All of them are different. All of these are subjective experiences of persons, they are not the same, if not unique. Yet, we have to choose in our designs. We choose the decibels and frequency of music one listens, we choose the range one’s glasses pass the light, we choose the height of the stairs one will climb, we choose the pH of the water one drinks, we choose the height, size and controller of the car one drives, we choose the structure of one’s bed, the size and brightness of their screen, the weight of their pen, the texture of their books, which feel different to all persons.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b7c4&quot; name=&quot;b7c4&quot;&gt;
      We choose our expectations and norms. We choose how many hours one works, how many days a week, month, year. We choose what is expected of whom, some needs better clothes, some needs to more fit, some needs to look “smart”, some needs to be calmer, some needs to fight more…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;110f&quot; name=&quot;110f&quot;&gt;
      All of these choices have affects on their recipients. It makes life easier or harder on them, it allows for them to relieve their pains, or prolongs their sufferings.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;027e&quot; name=&quot;027e&quot;&gt;
      Our systems either enable, or disable people in different ways. We must be careful who we are enabling, who we are disabling, what benefits and harms to whom. If, as system designers, we fail to stand by these principles, it is no wonder the results of our systems produce an unjust world, full of anger, disparage, and inequality.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;f7dd&quot; name=&quot;f7dd&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;5235&quot; data-image-id=&quot;1*1uSYAfLR0VYo-n1YzwkPzw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;8461&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*1uSYAfLR0VYo-n1YzwkPzw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;c0e9482ccd0&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-04-18T03:03:45.685Z&quot;&gt;
     April 18, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;a-short-story-of-inequality-c0e9482ccd0&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>2ClickMail: 2 Clicks to Change</title>
        <published>2023-04-15T00:00:00+00:00</published>
        <updated>2023-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/2clickmail-2-clicks-to-change/"/>
        <id>https://alperenkeles.com/posts/2clickmail-2-clicks-to-change/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/2clickmail-2-clicks-to-change/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;affe&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;e646&quot; name=&quot;e646&quot;&gt;
      2ClickMail: 2 Clicks to Change
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;c0e1&quot; name=&quot;c0e1&quot;&gt;
      I have been working on a new service for easily creating and distributing email templates. It leverages mailto schemes creating a convenient mail sharing experience. Once you create your email template, anyone will be able to send it via 2 simple clicks. Service
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;profile&quot; href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;profile&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;www.2clickmail.com&#x2F;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;f536&quot; name=&quot;f536&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1078&quot; data-image-id=&quot;1*qHtKfg2q5En7Scy60srgzw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2532&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*qHtKfg2q5En7Scy60srgzw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9b97&quot; name=&quot;9b97&quot;&gt;
      You can check out the email above via the link below.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;7405&quot; name=&quot;7405&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; title=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Two Click Mail
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
       &lt;&#x2F;em&gt;
       www.2clickmail.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock&quot; data-media-id=&quot;003de5926f96d09a22a3b8f4003d81a3&quot; href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed graf--trailing&quot; id=&quot;3c28&quot; name=&quot;3c28&quot;&gt;
      In future, I hope to make this into a fully fledged mail template engine with variable-templates, better access control, integrations to existing mail clients and managers.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;7f0e6ab093b7&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-04-16T03:38:35.048Z&quot;&gt;
     April 16, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;2clickmail-2-clicks-to-change-7f0e6ab093b7&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>2ClickMail: 2 Tıkta Dünyanı Güzelleştir</title>
        <published>2023-04-15T00:00:00+00:00</published>
        <updated>2023-04-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/2clickmail-2-tikta-dunyani-guzellestir/"/>
        <id>https://alperenkeles.com/posts/2clickmail-2-tikta-dunyani-guzellestir/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/2clickmail-2-tikta-dunyani-guzellestir/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;43cd&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;c9f8&quot; name=&quot;c9f8&quot;&gt;
      2ClickMail: 2 Tıkta Dünyanı Güzelleştir
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;307f&quot; name=&quot;307f&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1078&quot; data-image-id=&quot;1*lJMAOXh15aCIApd8Sx130w.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2484&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*lJMAOXh15aCIApd8Sx130w.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--figure-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c
       &lt;&#x2F;a&gt;
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;1fb7&quot; name=&quot;1fb7&quot;&gt;
      Yaklaşık 3 yıl önce, Covid-19 salgının ilk aylarında
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpaylan.github.io&#x2F;pass-fail-metu&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;alpaylan.github.io&#x2F;pass-fail-metu&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;alpaylan.github.io&#x2F;pass-fail-metu&#x2F;
      &lt;&#x2F;a&gt;
      üzerinden ODTÜ’de Pass&#x2F;Fail notlandırma sistemine geçilmesi üzerine bir çalışma başlattım. Amacımız öncelikle diğer öğrencileri, sonrasında üniversite hocalarını ve yönetimini bilgilendirmek, sonundaysa güçlü bir kamuoyu oluşturarak yönetimin bu konuda karar almasını sağlamaktı. Her şey tam anlamıyla istediğimiz gibi olmasa da belli kazanımlar elde ettik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8e9a&quot; name=&quot;8e9a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Peki bu yazının bunlarla ne alakası var?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e1b4&quot; name=&quot;e1b4&quot;&gt;
      Bu çalışmalar sırasında benim o dönem varlığını ve ne kadar kullanışlı olduğunu keşfettiğim “mailto” linklerini kullandık.
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mailto&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mailto&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Mailto
      &lt;&#x2F;a&gt;
      linki tarayıcılar tarafından kullanılan, internette bir email adresi paylaşıldığında kolayca mail atılması için tasarlanmış bir mekanizma. Burada nasıl çalıştığını açıklamayacağım, ancak kısaca belli bir uzunluğa kadar oluşturulmuş mailleri bir link olarak kaydedebilmenize olanak sağlıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;72fa&quot; name=&quot;72fa&quot;&gt;
      Normal şartlarda bir toplu mail çalışması yapmak isteseniz, kullanıcının yapması gereken 9 adet hareket var sırasıyla.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;7088&quot; name=&quot;7088&quot;&gt;
       To(Alıcı) alanını kopyala, yapıştır(2 hareket)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;95d6&quot; name=&quot;95d6&quot;&gt;
       CC alanını kopyala, yapıştır(2 hareket)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e3e8&quot; name=&quot;e3e8&quot;&gt;
       Konu alanını kopyala, yapıştır(2 hareket)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;7b3f&quot; name=&quot;7b3f&quot;&gt;
       Gövde alanını kopyala, yapıştır(2 hareket)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;aebb&quot; name=&quot;aebb&quot;&gt;
       Maili göndere tıkla. (1 hareket)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;5111&quot; name=&quot;5111&quot;&gt;
      Mailto linkleri bunu 2 tık hareketine indiriyor.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;c5a7&quot; name=&quot;c5a7&quot;&gt;
       Linke tıkla.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;feb7&quot; name=&quot;feb7&quot;&gt;
       Göndere bas.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;26a5&quot; name=&quot;26a5&quot;&gt;
      Bu insanların davranışlarını ne kadar etkiliyor diye merak edebilirsiniz? Eğer yanlış bilmiyorsam bu mekanizma sayesinde ODTÜ yönetimi ve senatosu 1000–3000 arasında mail aldı 2–3 gün gibi çok kısa bir sürede. Bizi en azından yok sayamadıklarından emin olabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cad7&quot; name=&quot;cad7&quot;&gt;
      Ben, bu mekanizmanın farklı çalışmalarda da yararlı olacağına inandığım için bunu mümkün olduğunca yaymaya, farklı kişilerin kullanımına açmaya çalıştım.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;ac36&quot; name=&quot;ac36&quot;&gt;
       Geçen yılın mezuniyet maili:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;mezuniyet-mail&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;mezuniyet-mail&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;mezuniyet-mail
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9f69&quot; name=&quot;9f69&quot;&gt;
       Yurtdışındaki okullara gönderilmesi için hazırladığım mail:
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetmail&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetmail&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetmail
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;76dc&quot; name=&quot;76dc&quot;&gt;
      Başka birkaç örnek daha mevcut, ancak gördüğüm en büyük sıkıntı şuydu. Mailleri göndermek kolay, ancak hazırlamak zor. Bunun için bir bilgilendirici yazı da yazdım.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;3da0&quot; name=&quot;3da0&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;toplu-mail-linki-nas%C4%B1l-haz%C4%B1rlan%C4%B1r-5043b769ef9e&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;toplu-mail-linki-nas%C4%B1l-haz%C4%B1rlan%C4%B1r-5043b769ef9e&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;toplu-mail-linki-nas%C4%B1l-haz%C4%B1rlan%C4%B1r-5043b769ef9e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Toplu Mail Linki Nasıl Hazırlanır?
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Önceki yıllarda toplu mail atılması gerektiğinde aşağıdakileri içeren bir belge hazırlanırdı.
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;12a5cc9290b6a0423e76dcac44775ebb&quot; data-thumbnail-img-id=&quot;1*pRpPNchptfRLuZ-TEModSg.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;toplu-mail-linki-nas%C4%B1l-haz%C4%B1rlan%C4%B1r-5043b769ef9e&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*pRpPNchptfRLuZ-TEModSg.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;fd34&quot; name=&quot;fd34&quot;&gt;
      Hala istediğim kadar kolay değildi. Hala ortaya işe yarar bir mail koymak için birçok farklı adım gerekiyordu. Sonunda pes ettim,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;2clickmail.com&quot; href=&quot;http:&#x2F;&#x2F;2clickmail.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       2clickmail.com
      &lt;&#x2F;a&gt;
      ’u oluşturmaya karar verdim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0fe8&quot; name=&quot;0fe8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       2clickmail.com
      &lt;&#x2F;strong&gt;
      , kolayca email şablonları yaratmanıza izin veren, üyelik oluşturup bu mailleri tek bir noktada toplamanızı, hızlı bir şekilde paylaşmanızı sağlayan bir platform.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d1fe&quot; name=&quot;d1fe&quot;&gt;
      Platformu neredeyse 1 aydır geliştiriyorum, an itibariyle kullanılmaya hazır olduğuna karar verdiğim için artık paylaşmaya karar verdim. Bir örnek görmek isterseniz,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; href=&quot;https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;www.2clickmail.com&#x2F;email?value=643b65c7ee0f1b6496c2371c
      &lt;&#x2F;a&gt;
      adresinden inceleyebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6bec&quot; name=&quot;6bec&quot;&gt;
      Proje tamamen açık kaynak, ilgilenenler aşağıdan inceleyebilirler.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;32af&quot; name=&quot;32af&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;2clickmail&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;2clickmail&quot; title=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;2clickmail&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        GitHub - alpaylan&#x2F;2clickmail
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        You can&#x27;t perform that action at this time. You signed in with another tab or window. You signed out in another tab or…
       &lt;&#x2F;em&gt;
       github.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;faa396a0489f895a6578f19f3b8e8174&quot; data-thumbnail-img-id=&quot;0*NVQSQPoqksJ2UZBf&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;2clickmail&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*NVQSQPoqksJ2UZBf);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed graf--trailing&quot; id=&quot;44bb&quot; name=&quot;44bb&quot;&gt;
      Önümüzdeki dönemde emailleri isimlendirme, kolayca doldurulabilecek boşluklu email şablonları oluşturma, belki çeşitli mail uygulamalarıyla entegre ederek bu şablonları kolayca kullanma gibi özelliklerle toplu maillerin yanı sıra kişisel bir email şablon deposuna dönüştürmeyi hedefliyorum.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;f40844bdd00e&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-04-16T03:28:22.603Z&quot;&gt;
     April 16, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;2clickmail-2-t%C4%B1kta-d%C3%BCnyan%C4%B1-g%C3%BCzelle%C5%9Ftir-f40844bdd00e&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Some Thoughts on Academia vs Industry(with a focus on Computer Science)</title>
        <published>2023-04-03T00:00:00+00:00</published>
        <updated>2023-04-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/some-thoughts-on-academia-vs-industrywith-a-focus-on-computer-science/"/>
        <id>https://alperenkeles.com/posts/some-thoughts-on-academia-vs-industrywith-a-focus-on-computer-science/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/some-thoughts-on-academia-vs-industrywith-a-focus-on-computer-science/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;40bf&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;13a5&quot; name=&quot;13a5&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Some Thoughts on Academia vs Industry(with a focus on Computer Science)
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;aef1&quot; name=&quot;aef1&quot;&gt;
      I’m a 2nd year Computer Science PhD student, I also spent some time in the industry(part-time and internships, not a full-time-employment), I am also a somewhat reactionary person, I criticize a lot, I try to view problems of the processes that I reside in, I try to see what the originating reasons for such phenomenon is.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;59a7&quot; name=&quot;59a7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;640&quot; data-image-id=&quot;1*zxMt2HtFI9KAOTFTXARIhw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1280&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*zxMt2HtFI9KAOTFTXARIhw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;096d&quot; name=&quot;096d&quot;&gt;
      Today, there was a short Twitter discussion on senior academics leaving academia to join industry as Software Architects, and I bluntly answered with the obvious “money motive”. It’s not a secret that industry pays better, but that’s not the only relevance of money. Industry also spends more money too. Industrial labs get more clusters, more engineers, more scientists, working on ambitious projects in periods of time many academic labs would not be working on. In short, they make more investment to their projects than small academic labs, at least most of the time.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f0f0&quot; name=&quot;f0f0&quot;&gt;
      But is that the only reason, can we really condense all of these different people leaving academia to just one reason? If we give the same amount of money to an academic lab, is that going to fix everything? I don’t think so. Let’s explore what other reasons people might have, what are the differences between academic and industrial labs, and how deep are these reasons lie in the foundations of the current academic system.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;80a0&quot; name=&quot;80a0&quot;&gt;
      Before moving on, I must make it clear that this is simply an opinion piece, I’ll try to use as many facts as I can that exist on the literature, I’ll try to make my arguments as general as possible, but my opinions still rely on my experience and beliefs. I must warn the reader that the sources I quote will reflect my views, the arguments I build will be based on facts that reside on my side. I welcome all different views on the topic together with any type of criticism.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4b24&quot; name=&quot;4b24&quot;&gt;
      One thing I do a lot is a comparison between alternative realities. Let’s compare two realities of the same person, making one choice differently. One of them is a successful academic that has published many papers, made considerable impact, recruited many bright students; the other one is a successful engineer working at a company they are happy with, has a hardworking team beneath them, they are able to effectively create value inside their company.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c65d&quot; name=&quot;c65d&quot;&gt;
      Note that even this is pushing the boundaries of my arguments into certain corners, but let’s worry about that later on.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;29a3&quot; name=&quot;29a3&quot;&gt;
      The academic has;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;baac&quot; name=&quot;baac&quot;&gt;
      -Considerable pay.
      &lt;br&#x2F;&gt;
      - Tenure(they are basically guaranteed employment)
      &lt;br&#x2F;&gt;
      - Freedom:
      &lt;br&#x2F;&gt;
      — to build a vision of research they believe in
      &lt;br&#x2F;&gt;
      — to work on what they want(to the extent their grant agency provides them, which is usually a lot)
      &lt;br&#x2F;&gt;
      — to recruit students they see fit to themselves(to the extent their budget allows them to)
      &lt;br&#x2F;&gt;
      — to work with external collaborators they see fit
      &lt;br&#x2F;&gt;
      - Prestige(being a professor is rather cool)
      &lt;br&#x2F;&gt;
      - A lot more responsibilities that the engineer. Admin stuff, budget stuff, department stuff, teaching stuff, research stuff, community stuff…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5144&quot; name=&quot;5144&quot;&gt;
      You’ll realize that this is one model of funding, which is very frequent in CS, so I’m going to stuck with that.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0fae&quot; name=&quot;0fae&quot;&gt;
      The engineer has;
      &lt;br&#x2F;&gt;
      - Usually greater pay than the academic
      &lt;br&#x2F;&gt;
      - A chance to work on a product that people actually use
      &lt;br&#x2F;&gt;
      - Large teams with experienced engineers working on a single product
      &lt;br&#x2F;&gt;
      - A rather easy process switching companies
      &lt;br&#x2F;&gt;
      - A lot more external pressure than the academic. If your manager says finish this project by this time or you’re done, than you’re done.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2c59&quot; name=&quot;2c59&quot;&gt;
      To me, these provide 5 potential avenues of comparison.
      &lt;br&#x2F;&gt;
      - Stability&#x2F;Security
      &lt;br&#x2F;&gt;
      - Dynamism&#x2F;Adaptability
      &lt;br&#x2F;&gt;
      - Freedom&#x2F;Pressure
      &lt;br&#x2F;&gt;
      - Output
      &lt;br&#x2F;&gt;
      - Team
      &lt;br&#x2F;&gt;
      - Facilities
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d1c6&quot; name=&quot;d1c6&quot;&gt;
      Let’s go over each of these avenues
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;daf3&quot; name=&quot;daf3&quot;&gt;
      Stability&#x2F;Security
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;46ba&quot; name=&quot;46ba&quot;&gt;
      It should be clear that I believe an academic job is much more stable, and somewhat more secure than the industrial one. Once the academic has tenure, they are basically guaranteed lifetime employment, and most universities tend to have very long lifetimes. Academic has a considerable pay, in most places enough to make them happy, and they usually make money off external consulting too.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ffef&quot; name=&quot;ffef&quot;&gt;
      Although, I must mention that this security&#x2F;stability is hard to come by. A very small percentage of CS PhD’s are able to get academic jobs, a much smaller percentage gets tenure. So even getting to this stage is a pretty insecure and unstable process. The pressure of working with many other bright young scholars forces one to work longer and longer hours, focusing on a simple objective, getting tenure. Whereas, the industrial version, making more money working 8 hours days might secure their future by carefully planning their future, investing their surplus wage, using the extra hours to put themselves in “hireable&#x2F;valuable” positions.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;38ba&quot; name=&quot;38ba&quot;&gt;
      When we talk about senior academics moving to industry though, I believe this stability&#x2F;security aspect rather disappears from the discussion. Many accomplished academics will have their future already secured, so the displacement of employment guarantee should not really worry them.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;154e&quot; name=&quot;154e&quot;&gt;
      Dynamism&#x2F;Adaptability
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3841&quot; name=&quot;3841&quot;&gt;
      I believe industrial careers are more dynamic, and industry engineers are more adaptable to new conditions. Even though the academics have much freedom over basically anything, they are bound by their expertise. Expertise in one academic area does not easily convey to another, as academic expertise tends to form over time and it usually builds upon a very sharp line. On the other hand, many industrial products use similar building blocks, meaning expertise in building one product (in my very immature and unfounded opinion) translates much better to building another product.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3b9c&quot; name=&quot;3b9c&quot;&gt;
      To me, this means that an industrial engineer working at Company X on product Y today can easily change their job to work in Company A on product B, whereas it would be much harder for the academic to change the area they work on. They need to cultivate new relationships with new external collaborators, recruit new students, learn te culture of a new academic community, adapt to the conventions and the systems of that community, funding agencies that provide funding to that specific area, and so on… I believe all of these force academics to stay committed to certain communities and domains, putting high thresholds and gatekeepers in the way of changing areas of expertise.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7f5f&quot; name=&quot;7f5f&quot;&gt;
      I think in the context of our discussion, this is an important avenue where industry leaves academia behind. If an academic wants to change their domain of expertise, maybe it’s easier to move to industry? I’m not really sure about this part, but I think overall this could be a big part of the discussion.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;3498&quot; name=&quot;3498&quot;&gt;
      Freedom&#x2F;Pressure
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5d0f&quot; name=&quot;5d0f&quot;&gt;
      I believe academic careers have much much much more freedom on almost any avenue. As you see from my passion in writing 3 much’es, I don’t even think this is really debatable. I, as a PhD student, am able to pick my own projects as long as my advisor approves it, which he is more than happy to do. I see this is a similar case for many of my friends, especially as students get more senior, they draw their own path, differing from their advisors, and that is expected, it is asked for, even required.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4f6e&quot; name=&quot;4f6e&quot;&gt;
      Academia has the pressure of the race you’re in. A Ph.D. student is racing for the cunning job market, a tenure-track professor is racing for the tenure spot. People who submit to the same journals and conferences race for the acceptance of their paper. The important thing is, this pressure is mostly self managed. You set your own limits, your own objectives, and the pressure is mostly shaped by your hands, especially as you get more senior.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4f3b&quot; name=&quot;4f3b&quot;&gt;
      In the industry, one gains freedom through seniority, but pressure resurfaces in many ways. There is the pressure from one’s manager, the pressure from the market, the pressure from the race with others in your position for promotion, the pressure from investors. In short, pressure is an important part of the job. It is also shaped by your hand in some cases, but I believe not as much as it is in academia.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e60c&quot; name=&quot;e60c&quot;&gt;
      I think, in the context of our discussion, this is particularly important and, to me, surprising. I don’t really see how academics leave their freedom and put themselves under the pressure that as seniors, go under the pressure that they were freed by their positions in their universities. This could be due to policies of companies(maybe academics are promised more freedom and less pressure), or some other factor that I cannot foresee right now. We should probably ask them about this.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5c8d&quot; name=&quot;5c8d&quot;&gt;
      Output
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;4326&quot; name=&quot;4326&quot;&gt;
      In my experience, the output incentives, and as a result the outputs themselves, are very different in industry and academia.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;046e&quot; name=&quot;046e&quot;&gt;
      Academic work tends to have many smaller outputs, gradually migrating over time, divided into many papers. The output product is usually not consumer grade, it’s designed with an academic mindset to be used by other academics. It tries to disrupt existing beliefs, concepts and limits, to create novelty one might say. The industrial work focuses much more on a designated consumer base and the problems of those consumers. It focuses on providing solutions to urgent consumer needs, novelty is an afterthough.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1a29&quot; name=&quot;1a29&quot;&gt;
      To exemplify what I mean, think about creating a new web interface for an existing database system. None of the components or ideas might be new, maybe the interface already exists for a different database, and you just create a very similar one for a different database. This would be out of the purview of academic work, it lacks novelty in all senses. Yet it might be a very good idea for an industrial product, as users of the database would like to use a better interface of couse.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d528&quot; name=&quot;d528&quot;&gt;
      In the context of our discussion, I think this is mostly about individual beliefs and desires. Every person has different motives, and maybe professors moving to academia is sometimes only about building products that solve urgent problems, rather than creating novelty. Maybe we are just putting too much thought into these decisions.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8ae8&quot; name=&quot;8ae8&quot;&gt;
      Team
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d163&quot; name=&quot;d163&quot;&gt;
      Academic work is mostly done in small teams, it doesn’t scale up too much. Industrial teams tend to be larger, focus on a single product for a longer period of time, and they usually have senior IC’s(Individual Contributors). Academics have the advantage of self-recruitment, the ability to work with external collaborators. but they aren’t usually able to build very large and effective teams with more than 2 senior members working on the same product for a long time.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a021&quot; name=&quot;a021&quot;&gt;
      In the context of our discussion, I think this might be on either side. Working with strong-willed students that work with you for a rather unconditional 5 year span is amazing, you build strong bonds, work towards a common goal, or sometimes even a dream, and once they are a faculty or engineer somewhere else, you get to continue working with them if they still do research in similar areas. Yet, industrial labs have the advantage that seniors don’t have to spend their days doing admin or teaching stuff, there are people who do full-time research and coding with more than 10 years of experience. This is something almost no academic lab will ever have. Yet, these industrial labs are mostly contained to themselves, no external collaboration, even publishing papers is usually hard due to company regulations.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;b74d&quot; name=&quot;b74d&quot;&gt;
      Facilities
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8774&quot; name=&quot;8774&quot;&gt;
      Industrial labs tend to have greater clusters, machines, a larger workforce. These are facilities academic labs may lack. I’m not really sure how important this is for our discussion, but I don’t think it really is much. There are industrial labs with small budgets and academic labs with huge budgets, and everybody somehow gets work done. So I won’t go into much detail on this.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;d937&quot; name=&quot;d937&quot;&gt;
      Summary
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;182b&quot; name=&quot;182b&quot;&gt;
      As a conclusion, I think the dynamic nature of industrial jobs, combined with the ability to work with senior individual contributors and the ability to create impactful products that solve people’s urgent problems might be the key point that incentivizes senior academics to move to industry. But, I think we should just ask them, they’ll probably give us more insights than we could ever find out by discussing amongs ourselves.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;99614b06d7ca&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-04-04T02:37:37.194Z&quot;&gt;
     April 4, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;some-thoughts-on-academia-vs-industry-with-a-focus-on-computer-science-99614b06d7ca&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Where did all the writers go?</title>
        <published>2023-03-18T00:00:00+00:00</published>
        <updated>2023-03-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/where-did-all-the-writers-go/"/>
        <id>https://alperenkeles.com/posts/where-did-all-the-writers-go/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/where-did-all-the-writers-go/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;2529&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;e043&quot; name=&quot;e043&quot;&gt;
      Where did all the writers go?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f712&quot; name=&quot;f712&quot;&gt;
      Abundance is the root of dullness. We find scarcity interesting, we uphold scare items and concepts, scarcity is somehow “authentic”, it is valueable. Before the age of mass machine manufacturing, machine produced goods were considered interesting, they were used as signals of authenticity. Yet, as mass production was generalized, cheapened, and democratized, world has seen a turn back to specialized goods. Hand-crafted items became evermore looked upon; today, unique products that “nobody else has” are more expensive, valuable, and appreciated than ever.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1fea&quot; name=&quot;1fea&quot;&gt;
      What does this have to do with writers though? The tech native reader might have guessed, it’s the rise of generative AI, the so-called Large Language Models like GPT, LLaMA, PaLM. I argue that even before the rise of automated writers, we had copy-cats that served a similar purpose, yet the automated writers pose a much more challenging problem for the future of original content. Let me provide more context into this claim, and explain what the problem actually is.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4c2c&quot; name=&quot;4c2c&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1024&quot; data-image-id=&quot;1*I6Kn7di2uePP8tOg904C5Q.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1024&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*I6Kn7di2uePP8tOg904C5Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;d66e&quot; name=&quot;d66e&quot;&gt;
      Writing, an endeavor as old as civilization itself, underwent many transformations throughout history. From being a tool available only to the powerful ruling class, it is today the most crucial communication channel. We are at a point where many people read and write more than they talk or listen throughout their daily lives. One important problem with writing is though, it is a primarily unattributed form of communication, let’s say compared to giving a speech, or doing a painting. One’s words are so easily cut out of context and pasted elsewhere without any hassles. Any reader might steal some quotes of mine, and present them as they are original. This is different for a speech, where the speechwriting is only half of the work, the delivery is many times impossible to copy. For a painting, it is hard to crop just a part you like, as paintings are usually meaningful as a whole, rather than a set of parts tucked together.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;02c4&quot; name=&quot;02c4&quot;&gt;
      Another avenue of this problem is that it’s rather hard to claim authorship. If my words are paraphrased, who am I to say that my work was stolen; after all “
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       there is only a few new under the sun”
      &lt;&#x2F;em&gt;
      . What if my ideas were stolen and the writing was new, does that mean that person has written something original? Even worse, what if nobody cares if anything is authentic and original? What if people just praise what they see? What hope do we have for incentivizing young talents who would like to write?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6e27&quot; name=&quot;6e27&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       I have been babbling, I shall come to the point.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7240&quot; name=&quot;7240&quot;&gt;
      For some time, I had realized this trend across Twitter. People pick up popular tweets, and they sometimes paraphrase it, sometimes translate it, sometimes keep it as is. They just post it as though it’s their original ideation, knowing full well that it’s going to be popular as they already observed. This has made my Twitter experience worse, seeing the same tweet many many times across different accounts, but even more importantly, I just felt that our current value systems disincentivize originality. Original work is hard to produce, it is hard to be appreciated for it, it is hard to stay motivated to continue. Picking up popular stuff and copying them around is so much easier, as we know already happens around. One aspect of this situation that sparked my hope was that I also saw pushback around this type of behavior. Although replications of popular tweets were still liked and popular, I saw people complaining about them, I saw criticizing responses. This, to me, meant that people still value original content, that they would uphold content that is original over the copy-cat.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1b32&quot; name=&quot;1b32&quot;&gt;
      With the rise of generative AI, I view another future avenue of problems, as many others have. Generative AI has given the copy-cats a very powerful tool, evading detection. One important aspect of writing is that the longer the piece, the easier it is to claim authorship and ownership. If I tried to publish someone else’s book under my name, I would get laughed out and I would potentially be liable against some lawsuits coming my way even if I was only stealing some chapters of the book. Copying paragraphs, even sentences is an act of academic dishonesty, it is without question plagiarism. So, these copy-cats mostly have copied tweets until now, where some tried automated paraphrasing and translation tools for stealing blog-posts, failing to feel authentic most of the time. Yet, tools like ChatGPT is able to capture ideas provided to them via some prompt, and act as convincing automated writers. Although the initial iterations of these tools still have shortcomings, many future versions await us. Using better prompts, better feedback strategies, bundling several tools together, learning to take advantage of small quirks of these programs that allow them to create more and more convincing texts, these copy-cats will become better than ever in their efforts for stealing ideas, and presenting them as their own. They will create automated systems that act like humans, open up social media accounts that use different strategies for growth, and the automation will allow them to scale more than they ever could have imagined before.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d25f&quot; name=&quot;d25f&quot;&gt;
      Although all of these are rather wild conjectures of my imaginations, I believe they are very real possibilities. So, in a world with these automated copy-cat agents all around us, what do we do?
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Where do all the writers go?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;330d&quot; name=&quot;330d&quot;&gt;
      I believe there are two potential paths, perhaps walked at the same time. One of them is, we are unaware of this reality. These agents “walk” among us, and we interact with them without even realizing. This is a scenario where originality would lose its uphill battle against the copy-cats. It would be hard to get noticed amongst these giant entities, acting as they are mere content generators, copying every single original idea you have before any person actually reads your writings. Going even further, they might just blend many ideas from different piece into a new writing, preventing you from making any claim of ownership against them. The second path is, we as the society realize this phenomenon. We take plagiarism seriously. We value our originals and creators, we value their intellectual property, and we take steps for tracking and banning plagiarism, create effective social mechanisms for punishing plagiarizers and rewarding our originals. My hope for this second scenario stems from a fact I have articulated in the beginning.
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       Abundance is boring.
      &lt;&#x2F;em&gt;
      This scenario appeals to the human instinct to seek and value original, look out for the scarce. I wonder if we are going to uphold our creators, so that one day we don’t ask
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       “Where did all the writers go?”.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;da3c87750342&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-03-18T17:50:35.998Z&quot;&gt;
     March 18, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;where-did-all-the-writers-go-da3c87750342&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Introduction to Property Based Testing</title>
        <published>2023-03-14T00:00:00+00:00</published>
        <updated>2023-03-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/introduction-to-property-based-testing/"/>
        <id>https://alperenkeles.com/posts/introduction-to-property-based-testing/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/introduction-to-property-based-testing/">&lt;h1 id=&quot;introduction-to-property-based-testing&quot;&gt;
 Introduction to Property Based Testing
&lt;&#x2F;h1&gt;
&lt;p&gt;
 Property Based Random Testing is a flavor of testing that aims to use higher level specifications for testing instead
    of hand-writing or generating tests. It was first developed by Koen Claessen and John Hughes in 1999 as a software
    library for Haskell, called QuickCheck. There has been substantial development in the field since then, I will not
    bore you with lots of details as the purpose of this writing is to familiarize you with PBT(Property Based Testing).
&lt;&#x2F;p&gt;
&lt;p&gt;
 To give a sense of what is happening, let’s first start by talking about Unit Tests.
&lt;&#x2F;p&gt;
&lt;p&gt;
 A Unit Test is a test case aimed into testing a unit of a program, conventionally a function.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code data-code-block-lang=&quot;python&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_1():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; sorted_l &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 Above, you see a very simple test case for a function called dummy sort, which from the name and the structure it
    feels is supposed to sort a given function of possibly integers in ascending order.
&lt;&#x2F;p&gt;
&lt;p&gt;
 But, this test case doesn’t actually give us very much knowledge on the function under test. It gives us a few clues
    we could perhaps generalize such as;
&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
 &lt;li&gt;
  Function sorts the list [2, 1, 3, 4] correctly
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  (1) could imply that the function sorts all lists of length 4 correctly.
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  (1) also could imply that the function sorts all lists of integer permutations from 1 up to n.
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  (1) also could imply that the function sorts all lists of all lengths containing positive integers.
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  (1) also could imply this function sorts any type of list containing arbitrary integers in arbitrary length.
 &lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;
 We might be expecting any one of the properties from (1–4), but a better possibility is that we are expecting 5. We
    could also expect properties 1–4, but the example also wouldn’t generalize to those, at least those other than
    property (1).
&lt;&#x2F;p&gt;
&lt;p&gt;
 So ideally, we would need to create a set of examples that could represent the set of all cases we want our function
    to work on, so we need a way of defining this representative.
&lt;&#x2F;p&gt;
&lt;p&gt;
 This is possible via creating what we will call properties in our code. Let me demonstrate with an example.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_1():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; is_sorted(candidate_list):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;len&lt;&#x2F;span&gt;(candidate_list) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    pivot &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; candidate_list[&lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; candidate_list:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; pivot &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; item:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-13&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-13&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-14&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-14&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            pivot &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; item&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-15&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-15&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 Function is_sorted checks if the list is monotonically increasing, meaning if no element is less than the element
    right before. As a logical statement, we can write is_sorted as
&lt;&#x2F;p&gt;
&lt;p&gt;
 If you look carefully, you will see that this property that we wrote actually does not cover our needs. Suppose we
    have an implementation of dummy_sort as given below.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb3-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; dummy_sort(l):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb3-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 You will see that this means dummy_sort will always give a sorted list back to you, just not the one you would want.
&lt;&#x2F;p&gt;
&lt;p&gt;
 So a better property could be writing the test as.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_2():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; elements_same(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; elements_same(l1, l2):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;set&lt;&#x2F;span&gt;(l1) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;set&lt;&#x2F;span&gt;(l2)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 We just added a new check that looks if both lists have the same elements. Which would mean that if l contains an
    element that sorted_l does not contain, then our function does not do the right thing.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Yet, a careful reader will also realize the problem with this property. We can falsify it with the test case given
    below.We just added a new check that looks if both lists have the same elements. Which would mean that if l contains
    an element that sorted_l does not contain, then our function does not do the right thing.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Yet, a careful reader will also realize the problem with this property. We can falsify it with the test case given
    below.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_3():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; elements_same(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; dummy_sort():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 As one familiar with Python’s set data structure will see, a set will delete the duplicate elements in a list, hence
    this property will not be powerful enough too.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb6&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb6-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_4():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; is_permutation(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; is_permutation(l1, l2):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; l1:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; l2:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            l2.remove(item)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;len&lt;&#x2F;span&gt;(l2) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 So this was our final property for testing. The resulting list must be sorted, and it should be a permutation of the
    initial list. If I did not do any mistakes in writing the is_permutation function, this function must be properly
    tested using this property.
&lt;&#x2F;p&gt;
&lt;p&gt;
 There is another way of testing this, we could use a so-called Test Oracle for our property. Let’s say that we tested
    our dummy_sort extensively, and we used it in our software project for some time, we are quite sure that our
    function holds. And let’s assume we did not do Property Based Testing the first time, we were young and naive, we
    only did unit tests on the function, and we now want to use property based testing.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Now, we can use another notion of truth for our new sorting algorithm, whatever dummy_sort returns is our truth.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb7&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb7-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_5():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dummy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    fancy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; dummy_sort(l) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 As our truth is defined using a previous implementation, we can use that implementation to test our new
    implementation. This is especially useful for testing optimizations and refactors in our code.
&lt;&#x2F;p&gt;
&lt;p&gt;
 So what do we do, we now have a great testing infrastructure, we can just write a bunch of test cases without writing
    their results as given below.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb8&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb8-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_fancy_sort(l):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dummy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    fancy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; dummy_sort(l) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    list_of_cases &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;5&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-13&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-13&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    ]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-14&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-14&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; case &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; list_of_cases:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-15&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-15&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        test_fancy_sort(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 It doesn’t seem great, right. We still have to write all of these tests, which is better than writing tests and the
    results, but still it feels like we could have something better.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Wait, we actually do! John Hughes and Koen Claessen has invented exactly that process.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb9&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb9-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases_smart():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; _ &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;1000&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; generate_test_case_for_sorting()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        test_fancy_sort(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 Strictly speaking, what they invented is so much greater, fancier, and smarter than this, but it still relies on the
    same idea. A better version is given below.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb10&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb10-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases_even_smarter():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; i &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;1000&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; generate_test_case_for_sorting_smarter(i)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; test_fancy_sort(case) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&quot;Fail&quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; shrink_failing_case(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 So what’s better about this process is that
&lt;&#x2F;p&gt;
&lt;p&gt;
 1- It remembers how many tests it has done, so it can be a bit stateful and remember the past in some sense. A simple
    example is we can generate lists based on logarithm of i, which would allow creating larger examples as we move
    forward with the tests, hoping that larger test cases might catch bugs smaller test cases could not demonstrate.
&lt;&#x2F;p&gt;
&lt;p&gt;
 2- It “shrinks” the failing test case. Shrinking means finding a minimal example using a failed test case. Let’s say
    that our fancy sorting function has a bug, it crashes when the list has negative numbers. This bug is found with the
    following test case.
&lt;&#x2F;p&gt;
&lt;p&gt;
 [11, 1,1,1,1,-1,1,2,442,34,2,4]
&lt;&#x2F;p&gt;
&lt;p&gt;
 But it could actually be found using.
&lt;&#x2F;p&gt;
&lt;p&gt;
 [-1]
&lt;&#x2F;p&gt;
&lt;p&gt;
 If I had given you the first list as the failing case, it would take a lot of time to debug. There are lots of cases,
    maybe the function crashes with lists of size more than 10, or it cannot handle cases where 4 list elements are
    same.
&lt;&#x2F;p&gt;
&lt;p&gt;
 But the second test case makes it very clear where the problem is and how to find and debug it.
&lt;&#x2F;p&gt;
&lt;p&gt;
 Let me give you a very simple and not-so-smart generator and shrinker for the case given above.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb11&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb11-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; generate_test_case_for_sorting_smarter(size):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    actual_size &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; math.log(size, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    generated_list &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; []&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; _ &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(actual_size):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        generated_list.append(random.randint(&lt;span class=&quot;op&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;dv&quot;&gt;5&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;10000&lt;&#x2F;span&gt;))&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; generated_list&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 This generation function generates random integers from the interval [-5, 10000) for a list of size log2size.
&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb12&quot;&gt;
 &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb12-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; shrink_failing_case(case):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    shrinked_case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; case[&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;:]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; test_fancy_sort(shrinked_case) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&quot;Fail&quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; shrink_failing_case(shrinked_case)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; case&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;
 This shrinking function tries to shrink the list by truncating it from the beginning. At each step, a smaller list is
    created by excluding the first element; this allows creating minimal examples for debugging the actual problem.
&lt;&#x2F;p&gt;
&lt;p&gt;
 This is the intuition behind Property Based Testing. There is a lot more to talk about, there is fuzzing, mutation
    based property based testing; there are clever ways of generating, shrinking, testing, writing properties… I want to
    write about those in the future too, I hope this was an interesting read for you.
&lt;&#x2F;p&gt;
&lt;p&gt;
 For those interested, here are some more interesting reading to follow through.
&lt;&#x2F;p&gt;
&lt;ul&gt;
 &lt;li&gt;
  Original QuickCheck Paper (
  &lt;a href=&quot;https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf&quot;&gt;
   https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf
  &lt;&#x2F;a&gt;
  )
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  A Description of Random PBT and Fuzzing explaining motivations behind it by Leo and Mike (
  &lt;a href=&quot;https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html&quot;&gt;
   https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html
  &lt;&#x2F;a&gt;
  )
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  A (probably better than mine) medium post on PBT (
  &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237&quot;&gt;
   https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237
  &lt;&#x2F;a&gt;
  )
 &lt;&#x2F;li&gt;
 &lt;li&gt;
  A talk by John Huges, “Dont Write Tests” (
  &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y&quot;&gt;
   https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y
  &lt;&#x2F;a&gt;
  )
 &lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;
 Aside from the gists given above, I also uploaded the code to a single file for anyone interested as a convenience.
&lt;&#x2F;p&gt;
&lt;p&gt;
 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py&quot;&gt;
  https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py
 &lt;&#x2F;a&gt;
 Introduction to Property Based Testing
 &lt;p&gt;
  Property Based Random Testing is a flavor of testing that aims to use higher level specifications for testing instead
    of hand-writing or generating tests. It was first developed by Koen Claessen and John Hughes in 1999 as a software
    library for Haskell, called QuickCheck. There has been substantial development in the field since then, I will not
    bore you with lots of details as the purpose of this writing is to familiarize you with PBT(Property Based Testing).
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  To give a sense of what is happening, let’s first start by talking about Unit Tests.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  A Unit Test is a test case aimed into testing a unit of a program, conventionally a function.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code data-code-block-lang=&quot;python&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_1():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb1-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; sorted_l &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  Above, you see a very simple test case for a function called dummy sort, which from the name and the structure it
    feels is supposed to sort a given function of possibly integers in ascending order.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  But, this test case doesn’t actually give us very much knowledge on the function under test. It gives us a few clues
    we could perhaps generalize such as;
 &lt;&#x2F;p&gt;
 &lt;ol type=&quot;1&quot;&gt;
  &lt;li&gt;
   Function sorts the list [2, 1, 3, 4] correctly
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   (1) could imply that the function sorts all lists of length 4 correctly.
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   (1) also could imply that the function sorts all lists of integer permutations from 1 up to n.
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   (1) also could imply that the function sorts all lists of all lengths containing positive integers.
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   (1) also could imply this function sorts any type of list containing arbitrary integers in arbitrary length.
  &lt;&#x2F;li&gt;
 &lt;&#x2F;ol&gt;
 &lt;p&gt;
  We might be expecting any one of the properties from (1–4), but a better possibility is that we are expecting 5. We
    could also expect properties 1–4, but the example also wouldn’t generalize to those, at least those other than
    property (1).
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  So ideally, we would need to create a set of examples that could represent the set of all cases we want our function
    to work on, so we need a way of defining this representative.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  This is possible via creating what we will call properties in our code. Let me demonstrate with an example.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_1():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; is_sorted(candidate_list):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;len&lt;&#x2F;span&gt;(candidate_list) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    pivot &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; candidate_list[&lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; candidate_list:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; pivot &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; item:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-13&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-13&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-14&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-14&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            pivot &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; item&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-15&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb2-15&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  Function is_sorted checks if the list is monotonically increasing, meaning if no element is less than the element
    right before. As a logical statement, we can write is_sorted as
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  If you look carefully, you will see that this property that we wrote actually does not cover our needs. Suppose we
    have an implementation of dummy_sort as given below.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb3-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; dummy_sort(l):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb3-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  You will see that this means dummy_sort will always give a sorted list back to you, just not the one you would want.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  So a better property could be writing the test as.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_2():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; elements_same(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; elements_same(l1, l2):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb4-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;set&lt;&#x2F;span&gt;(l1) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;set&lt;&#x2F;span&gt;(l2)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  We just added a new check that looks if both lists have the same elements. Which would mean that if l contains an
    element that sorted_l does not contain, then our function does not do the right thing.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  Yet, a careful reader will also realize the problem with this property. We can falsify it with the test case given
    below.We just added a new check that looks if both lists have the same elements. Which would mean that if l contains
    an element that sorted_l does not contain, then our function does not do the right thing.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  Yet, a careful reader will also realize the problem with this property. We can falsify it with the test case given
    below.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_3():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; elements_same(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; dummy_sort():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb5-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  As one familiar with Python’s set data structure will see, a set will delete the duplicate elements in a list, hence
    this property will not be powerful enough too.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb6&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb6-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_4():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; is_sorted(sorted_l) &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; is_permutation(l, sorted_l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; is_permutation(l1, l2):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; l1:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; item &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; l2:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            l2.remove(item)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb6-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;len&lt;&#x2F;span&gt;(l2) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  So this was our final property for testing. The resulting list must be sorted, and it should be a permutation of the
    initial list. If I did not do any mistakes in writing the is_permutation function, this function must be properly
    tested using this property.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  There is another way of testing this, we could use a so-called Test Oracle for our property. Let’s say that we tested
    our dummy_sort extensively, and we used it in our software project for some time, we are quite sure that our
    function holds. And let’s assume we did not do Property Based Testing the first time, we were young and naive, we
    only did unit tests on the function, and we now want to use property based testing.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  Now, we can use another notion of truth for our new sorting algorithm, whatever dummy_sort returns is our truth.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb7&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb7-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; sort_test_prop_5():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dummy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    fancy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb7-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; dummy_sort(l) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  As our truth is defined using a previous implementation, we can use that implementation to test our new
    implementation. This is especially useful for testing optimizations and refactors in our code.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  So what do we do, we now have a great testing infrastructure, we can just write a bunch of test cases without writing
    their results as given below.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb8&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb8-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_fancy_sort(l):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dummy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; dummy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    fancy_sorted_l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;assert&lt;&#x2F;span&gt; dummy_sort(l) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; fancy_sort(l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-7&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-7&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    list_of_cases &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; [&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-8&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-8&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-9&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-9&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-10&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-10&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-11&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-11&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;3&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;],&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-12&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-12&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    [&lt;span class=&quot;dv&quot;&gt;5&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;4&lt;&#x2F;span&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-13&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-13&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    ]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-14&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-14&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; case &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; list_of_cases:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-15&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb8-15&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        test_fancy_sort(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  It doesn’t seem great, right. We still have to write all of these tests, which is better than writing tests and the
    results, but still it feels like we could have something better.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  Wait, we actually do! John Hughes and Koen Claessen has invented exactly that process.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb9&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb9-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases_smart():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; _ &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;1000&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; generate_test_case_for_sorting()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb9-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        test_fancy_sort(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  Strictly speaking, what they invented is so much greater, fancier, and smarter than this, but it still relies on the
    same idea. A better version is given below.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb10&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb10-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; test_many_cases_even_smarter():&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; i &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;1000&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; generate_test_case_for_sorting_smarter(i)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; test_fancy_sort(case) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&quot;Fail&quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb10-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; shrink_failing_case(case)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  So what’s better about this process is that
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  1- It remembers how many tests it has done, so it can be a bit stateful and remember the past in some sense. A simple
    example is we can generate lists based on logarithm of i, which would allow creating larger examples as we move
    forward with the tests, hoping that larger test cases might catch bugs smaller test cases could not demonstrate.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  2- It “shrinks” the failing test case. Shrinking means finding a minimal example using a failed test case. Let’s say
    that our fancy sorting function has a bug, it crashes when the list has negative numbers. This bug is found with the
    following test case.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  [11, 1,1,1,1,-1,1,2,442,34,2,4]
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  But it could actually be found using.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  [-1]
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  If I had given you the first list as the failing case, it would take a lot of time to debug. There are lots of cases,
    maybe the function crashes with lists of size more than 10, or it cannot handle cases where 4 list elements are
    same.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  But the second test case makes it very clear where the problem is and how to find and debug it.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  Let me give you a very simple and not-so-smart generator and shrinker for the case given above.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb11&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb11-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; generate_test_case_for_sorting_smarter(size):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    actual_size &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; math.log(size, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    generated_list &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; []&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; _ &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;range&lt;&#x2F;span&gt;(actual_size):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        generated_list.append(random.randint(&lt;span class=&quot;op&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;dv&quot;&gt;5&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;10000&lt;&#x2F;span&gt;))&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb11-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; generated_list&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  This generation function generates random integers from the interval [-5, 10000) for a list of size log2size.
 &lt;&#x2F;p&gt;
 &lt;div class=&quot;sourceCode&quot; id=&quot;cb12&quot;&gt;
  &lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb12-1&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-1&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; shrink_failing_case(case):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-2&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-2&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    shrinked_case &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; case[&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;:]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-3&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-3&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; test_fancy_sort(shrinked_case) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&quot;Fail&quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-4&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-4&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; shrink_failing_case(shrinked_case)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-5&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-5&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;else&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-6&quot;&gt;&lt;a aria-hidden=&quot;true&quot; href=&quot;#cb12-6&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; case&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
 &lt;&#x2F;div&gt;
 &lt;p&gt;
  This shrinking function tries to shrink the list by truncating it from the beginning. At each step, a smaller list is
    created by excluding the first element; this allows creating minimal examples for debugging the actual problem.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  This is the intuition behind Property Based Testing. There is a lot more to talk about, there is fuzzing, mutation
    based property based testing; there are clever ways of generating, shrinking, testing, writing properties… I want to
    write about those in the future too, I hope this was an interesting read for you.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  For those interested, here are some more interesting reading to follow through.
 &lt;&#x2F;p&gt;
 &lt;ul&gt;
  &lt;li&gt;
   Original QuickCheck Paper (
   &lt;a href=&quot;https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf&quot;&gt;
    https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf
   &lt;&#x2F;a&gt;
   )
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   A Description of Random PBT and Fuzzing explaining motivations behind it by Leo and Mike (
   &lt;a href=&quot;https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html&quot;&gt;
    https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html
   &lt;&#x2F;a&gt;
   )
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   A (probably better than mine) medium post on PBT (
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237&quot;&gt;
    https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237
   &lt;&#x2F;a&gt;
   )
  &lt;&#x2F;li&gt;
  &lt;li&gt;
   A talk by John Huges, “Dont Write Tests” (
   &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y&quot;&gt;
    https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y
   &lt;&#x2F;a&gt;
   )
  &lt;&#x2F;li&gt;
 &lt;&#x2F;ul&gt;
 &lt;p&gt;
  Aside from the gists given above, I also uploaded the code to a single file for anyone interested as a convenience.
 &lt;&#x2F;p&gt;
 &lt;p&gt;
  &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py&quot;&gt;
   https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py
  &lt;&#x2F;a&gt;
 &lt;&#x2F;p&gt;
&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>AfetBilgi’nin Hikayesi.</title>
        <published>2023-02-18T00:00:00+00:00</published>
        <updated>2023-02-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/afetbilginin-hikayesi/"/>
        <id>https://alperenkeles.com/posts/afetbilginin-hikayesi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/afetbilginin-hikayesi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;67de&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;b6f8&quot; name=&quot;b6f8&quot;&gt;
      AfetBilgi’nin Hikayesi.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9fd1&quot; name=&quot;9fd1&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;afetbilgi.com&quot; href=&quot;http:&#x2F;&#x2F;afetbilgi.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        afetbilgi.com
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       7 Şubat 2023 Türkiye saati ile sabah 10.12&#x27;de Pazarcık Depremi sürecinin 30. saatinde aşağıdaki Tweet vasıtasıyla duyurularak halka açıldı.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;984f&quot; name=&quot;984f&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&#x2F;status&#x2F;1622855716410204160&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2366&quot; name=&quot;2366&quot;&gt;
      Sitenin daha aşama aşama, günlük bir hikayesi olması için her gün tuttuğum notları bir sayfada topladım. Bunlara da
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetbilgi-notlar&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetbilgi-notlar&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;afetbilgi-notlar
      &lt;&#x2F;a&gt;
      ya da
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;afetbilgi-notlar&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;alperenkeles.com&#x2F;afetbilgi-notlar&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;alperenkeles.com&#x2F;afetbilgi-notlar&#x2F;
      &lt;&#x2F;a&gt;
      üzerinden ulaşabilirsiniz. Buradaki notların ciddi bir kısmı direkt olarak gönüllülerle paylaştığım notlar olduğu için herhangi bir editörlük aşamasından geçmediler.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2b12&quot; name=&quot;2b12&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Ben yine de burada tekrardan özetlemek istiyorum.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1fea&quot; name=&quot;1fea&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       AfetBilgi’yi açarken doğru bilginin kolayca erişilebilir ve anlaşılabilir bir şekilde tek bir noktada paylaşılmasını hedefledik.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6d30&quot; name=&quot;6d30&quot;&gt;
      Daha ilk saatlerde iletişimin ne kadar zayıf olduğunu, ortada dolaşan bilgiyi teyit etmenin zor olduğunu, yalan bilgilerin ortaya çıkıp hızlı bir şekilde yayılmasının ne kadar kolay ve tehlikeli olacağını gördük. Bunun üzerine, doğru bilgilerin tek bir noktada toplanması için basit bir Google Sheets üzerinde bunları toplamaya başladık. Kategorileri belirledik, bu kategorilerin içerisini doldurmaya başladık. Sonrasında ise girilen verinin basit bir arayüz üzerinde insanlara sunulabileceği bir veri modeli tasarladık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6473&quot; name=&quot;6473&quot;&gt;
      Eforlarımızın başladığı andan yaklaşık 16 saat sonra siteyi yayınladık. Bu aşamada ekipte 6&#x27;sı yazılım, 6&#x27;sı veri girişi gönüllüsü olarak 12 kişi çalışıyorduk. Yine aynı saatlerde Açık Yazılım Ağı(AYA) ile koordine olduk, sonrasındaki süreci beraber ilerlettik. Farklı anlarda 50 kişiye kadar çıkan ekipte, günün sonunda Yazılım, Veri Araştırması, Veri Girişi, Veri Teyiti, Çeviri gibi farklı alanlarda pek çok farklı gönüllü arkadaşımız günlerini, saatlerini harcadılar. Toplamda belki de 100&#x27;den fazla gönüllünün bir yerlerine dokunduğu, bir şekilde yardımcı olduğu çok güzel bir projede yer almış olduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6e10&quot; name=&quot;6e10&quot;&gt;
      İlk 24 saatte yaklaşık 700.000 tekil kullanıcıya ulaşan afetbilgi.com, an itibariyle 1.1 milyondan fazla farklı kişi tarafından kullanıldı. Bu noktada herkesin tek umudu, bir kişiye bile sıcak yemek yiyebilecekleri bir yer, uyuyabilecekleri bir çatı, iyileştikleri bir hastane bulmasında yardımcı olmuş olmak. Ekipteki her gönüllünün tek isteği, tek umudu bunun üzerine. Bunu başarmış olmak,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;afetbilgi.com&quot; href=&quot;http:&#x2F;&#x2F;afetbilgi.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       afetbilgi.com
      &lt;&#x2F;a&gt;
      ’un benim, bizim gözümüzde başarılı olmuş olması demektir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8edb&quot; name=&quot;8edb&quot;&gt;
      İlk günün sonrasında ise, sitenin ulaşanlara daha faydalı olması için çaba sarf ettik. Alandaki her türlü afetzedeye ve STK’ya faydalı olabilmek için İngilizce, Arapça ve Kürtçe dil seçenekleri ekledik. Sitedeki tüm adresleri
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;maps.afetbilgi.com&quot; href=&quot;http:&#x2F;&#x2F;maps.afetbilgi.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       maps.afetbilgi.com
      &lt;&#x2F;a&gt;
      adresinde topladık. İnternet erişimi problemli olduğu, sahadaki pek çok kişi kağıt-kalem üzerinde çalıştığı için sitedeki tüm verilerin PDF olarak indirilebilmesini sağladık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0124&quot; name=&quot;0124&quot;&gt;
      Bu noktada siteye daha fazla kategori eklenmesi, varolan kategorilerin doğru şekilde gruplandırılması, yeni bilgilerin eklenmesi, eklenen bilgilerin düzenli bir şekilde teyitlenmesi üzerine çalıştık. Arada hatalar yaptık, hatalarımızdan öğrendik ve daha iyisi için çabaladık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1337&quot; name=&quot;1337&quot;&gt;
      Aynı zamanda gelecek için planlamalar yaptık. Sitenin şu anki halini
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       afet modu
      &lt;&#x2F;strong&gt;
      olarak nitelendirip afet dönemleri haricinde bilgi sağlamak için oluşturacağımız nitelikli ve yalın bilgilerin merkezi olacak minimalist bir blog olarak planladığımız
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       bilgi modu
      &lt;&#x2F;strong&gt;
      üzerine çalışmaya başladık. Bu noktada internetin farklı noktalarındaki bilgileri ve yazıları inceleyip uzmanların tavsiyelerinin halka aktarılabildiği bir platform haline gelmeyi planlıyoruz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;04a9&quot; name=&quot;04a9&quot;&gt;
      Kapanış.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a8c1&quot; name=&quot;a8c1&quot;&gt;
      En başta bu yazıyı kafamda kurgularken, en sonda herkese tek tek emekleri için teşekkür etmeyi planlamıştım. Ancak yazarken tekrar gördüm ki, kime teşekkür etsem birileri eksik kalacak. O sebepten öncelikle işin bana göre en kritik, aynı zamanda en zor kısmı olan veri ekibi gönüllülerine en içten teşekkürlerimi iletmek istiyorum. Onlar olmasaydı, afetbilgi.com olamazdı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7809&quot; name=&quot;7809&quot;&gt;
      İkinci olarak, çeviri ekibindeki arkadaşlarımıza teşekkür etmek istiyorum. Onların emekleri olmasaydı, belki de gerçekten ihtiyacı olan insanlar bizim ürettiklerimize ulaşamayacaklardı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4252&quot; name=&quot;4252&quot;&gt;
      Üçüncü olarak, yazılım ekibindeki tüm arkadaşlarımızın emeklerine teşekkür etmek, yeteneklerine duyduğum saygıyı burada bir kez daha dile getirmek istiyorum. Çalıştığımız hız, altında bulunduğumuz yük, benim sürekli olarak onlardan “hadi şunu da yapalım” isteklerim altında verdikleri kararlar ve harcadıkları çabalar sayesinde afetbilgi.com bu kadar fazla kişi tarafından kolayca kullanılabilir ve erişilebilir hale geldi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;71b1&quot; name=&quot;71b1&quot;&gt;
      Son olarak, süreçte bizim yanımızda bulunan ve yardımcı olan Açık Yazılım Ağı ekibine, bize açık kaynak katkılarda bulunan tüm gönüllü yazılımcı arkadaşlara, benim başını ağrıttığım, gönüllü bir şekilde bize pek çok farklı konuda danışmanlık veren onlarca kişiye çok teşekkür ederim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;e2cc&quot; name=&quot;e2cc&quot;&gt;
      Depremden etkilenip de bu yazıyı okuyan birisi varsa, sizlerden tüm yaşadıklarınız adına, sizlere bunları yaşatanlar adına özür dilerim. Umuyorum ki yaptığımız işler size biraz da olsa yardımcı olmuştur, biraz da olsa faydalı olmuştur. Çok geçmiş olsun.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;ef5777ceb93c&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2023-02-18T18:59:08.966Z&quot;&gt;
     February 18, 2023
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;afetbilginin-hikayesi-ef5777ceb93c&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Roadmap of Concepts in Functional Programming</title>
        <published>2023-01-20T00:00:00+00:00</published>
        <updated>2023-01-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/fp-roadmap/"/>
        <id>https://alperenkeles.com/posts/fp-roadmap/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/fp-roadmap/">&lt;h1 id=&quot;roadmap-of-concepts-in-functional-programming&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#roadmap-of-concepts-in-functional-programming&quot; aria-label=&quot;Anchor link for: roadmap-of-concepts-in-functional-programming&quot;&gt;Roadmap of Concepts in Functional Programming&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;Immutability
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Immutable_object#:~:text=In%20object%2Doriented%20and%20functional,modified%20after%20it%20is%20created.&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.baeldung.com&#x2F;cs&#x2F;referential-transparency&quot;&gt;Referential Transparency&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;reasonml.github.io&#x2F;docs&#x2F;en&#x2F;let-binding&quot;&gt;let bindings&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Recursion
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Recursion_(computer_science)&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Tail_call&quot;&gt;Tail Call Optimization&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;First Class Functions
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;First-class_function&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Currying&quot;&gt;Currying&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Partial_application&quot;&gt;Partial Application&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Higher Order Functions
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Higher-order_function&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Map&lt;&#x2F;li&gt;
&lt;li&gt;Filter&lt;&#x2F;li&gt;
&lt;li&gt;Fold&#x2F;Reduce&lt;&#x2F;li&gt;
&lt;li&gt;Composition&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Types
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Product_type#:~:text=In%20programming%20languages%20and%20type,the%20operands%20in%20the%20product.&quot;&gt;Records&#x2F;Product Types&#x2F;Structs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Algebraic_data_type&quot;&gt;Sum Types&#x2F;ADTs&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;dev.to&#x2F;nexxeln&#x2F;expressive-code-with-pattern-matching-3de6&quot;&gt;Pattern Matching&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Type Classes
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Type_class&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.haskell.org&#x2F;tutorial&#x2F;classes.html&quot;&gt;Haskell Type Classes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;v2.ocaml.org&#x2F;manual&#x2F;moduleexamples.html&quot;&gt;OCaml Modules&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;book&#x2F;ch10-02-traits.html&quot;&gt;Rust Traits&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Purity
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;alvinalexander.com&#x2F;scala&#x2F;fp-book&#x2F;benefits-of-pure-functions&#x2F;&quot;&gt;Benefits of Pure Functions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;blog.bitsrc.io&#x2F;functional-programming-part-2-pure-functions-85491f3d7190#:~:text=A%20deterministic%20function%20is%20a,always%20be%20the%20same%20y%20.&quot;&gt;Determinism&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;swlh&#x2F;functional-programming-memoization-c2af275a0b1d&quot;&gt;Memoization&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;elm-lang.org&#x2F;news&#x2F;time-travel-made-easy&quot;&gt;Time Travel Debugger&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Functional Data Structures and Algorithms
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Purely_functional_data_structure#:~:text=In%20computer%20science%2C%20a%20purely,latter%20is%20(strongly)%20immutable.&quot;&gt;Purely Functional Data Structures&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Persistent_data_structure&quot;&gt;Persistent Data Structures&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Lambda Calculus
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lambda_calculus#:~:text=Lambda%20calculus%20(also%20written%20as,to%20simulate%20any%20Turing%20machine.)&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Simply_typed_lambda_calculus&quot;&gt;Simply Typed Lambda Calculus&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;System_F&quot;&gt;System-F&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Type Systems
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Type_system&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hindley%E2%80%93Milner_type_system&quot;&gt;Hindley-Milner&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Polymorphism_(computer_science)&quot;&gt;Polymorphism&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Type_inference#:~:text=Type%20inference%20is%20the%20ability,type%20annotations%20having%20been%20given.&quot;&gt;Type Inference&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dependent_type#:~:text=In%20computer%20science%20and%20logic,%22%20and%20%22there%20exists%22.&quot;&gt;Dependent Types&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Curry%E2%80%93Howard_correspondence&quot;&gt;Curry-Howard&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Liquid Types
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;goto.ucsd.edu&#x2F;~ucsdpl-blog&#x2F;liquidtypes&#x2F;2015&#x2F;09&#x2F;19&#x2F;liquid-types&#x2F;&quot;&gt;A Gentle Introduction to Liquid Types&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ucsd-progsys.github.io&#x2F;liquidhaskell&#x2F;&quot;&gt;Liquid Haskell&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;flux-rs&#x2F;flux&quot;&gt;Flux Rust&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Monads
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Monad_(functional_programming)&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Functors
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Functor&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Formal Verification
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_verification&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Abstract_interpretation&quot;&gt;Abstract Interpretation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Symbolic_execution&quot;&gt;Symbolic Execution&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Interactive Theorem Proving
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Proof_assistant&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;coq.inria.fr&quot;&gt;Coq&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;idris2.readthedocs.io&#x2F;en&#x2F;latest&#x2F;proofs&#x2F;index.html&quot;&gt;Idris&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;leanprover.github.io&quot;&gt;Lean&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Property Based Testing
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.schoolofhaskell.com&#x2F;user&#x2F;pbv&#x2F;an-introduction-to-quickcheck-testing&quot;&gt;QuickCheck&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot;&gt;My Blog&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=gAZMnAncvas&amp;amp;t=4274s&quot;&gt;My Talk&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Effect Systems
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Effect_system#:~:text=In%20computing%2C%20an%20effect%20system,possible%20effects%20of%20the%20program.&quot;&gt;Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Functional Programming Languages
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.haskell.org&quot;&gt;Haskell&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;wiki.haskell.org&#x2F;Lazy_evaluation&quot;&gt;Lazy Evaluation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.fpcomplete.com&#x2F;haskell&#x2F;library&#x2F;stm&#x2F;&quot;&gt;Software Transactional Memory&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Lisp_(programming_language)&quot;&gt;Lisp Family&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Standard_ML&quot;&gt;ML Family&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Functional Programming in Imperative Languages
&lt;ul&gt;
&lt;li&gt;Python
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.w3schools.com&#x2F;python&#x2F;python_lambda.asp&quot;&gt;lambda&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;functools.html&quot;&gt;functools&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.pydantic.dev&#x2F;latest&#x2F;&quot;&gt;Pydantic&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pypi.org&#x2F;project&#x2F;pyrsistent&#x2F;&quot;&gt;Pyrsistent&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yarım Kalan Projeler#3: Fact Checker’s Tool</title>
        <published>2022-12-21T00:00:00+00:00</published>
        <updated>2022-12-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yarim-kalan-projeler3-fact-checkers-tool/"/>
        <id>https://alperenkeles.com/posts/yarim-kalan-projeler3-fact-checkers-tool/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yarim-kalan-projeler3-fact-checkers-tool/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;5f0f&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;aa06&quot; name=&quot;aa06&quot;&gt;
      Yarım Kalan Projeler#3: Fact Checker’s Tool
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2ef1&quot; name=&quot;2ef1&quot;&gt;
      Asıl ismiyle “Fact Checker’s Tool” ya da “FCT”, farklı kişi ve kurumlar tarafından “FactHacker”, “FactChecker”, “Fact Maker” gibi birbirinden ilginç isimlerle hitap edilen, en sonda karmaşıklıklardan kurtulmak için “Factly” adını verdiğimiz bu projenin hedefi aslında çok basitti,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       yalan haberlerin keşfedilmesine yardımcı olmak.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0c6a&quot; name=&quot;0c6a&quot;&gt;
      Projenin detaylarına girmeden, nereden çıktığından bahsedeyim. Daha Covid-19&#x27;un ilk aylarındayken, girişimcilikle ilgilenen birkaç farklı kişi&#x2F;kuruluş salgının yarattığı olumsuz etkileri azaltabilecek, düzeltebilecek projelerin ortaya çıkması için
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Coronathon
      &lt;&#x2F;strong&gt;
      adında bir hackathon düzenlemeye karar veriyor. 1 haftadan daha kısa bir sürede 100&#x27;den fazla takım ve 100&#x27;den fazla mentör bir araya toplanıyor. O sırada biz de
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;3102d6d5f774&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; data-user-id=&quot;3102d6d5f774&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; target=&quot;_blank&quot;&gt;
       Ahmet YÜKSEL
      &lt;&#x2F;a&gt;
      ile yarışmayı görüp katılmaya karar verdik,
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;801f500f487e&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;801f500f487e&quot; data-user-id=&quot;801f500f487e&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;801f500f487e&quot; target=&quot;_blank&quot;&gt;
       Ozan Akın
      &lt;&#x2F;a&gt;
      ve
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;bc40f811ddfc&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;bc40f811ddfc&quot; data-user-id=&quot;bc40f811ddfc&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;bc40f811ddfc&quot; target=&quot;_blank&quot;&gt;
       Ozan Sazak
      &lt;&#x2F;a&gt;
      ile birlikte 4 kişilik bir ekip kurduk. Birkaç farklı fikri tartıştıktan sonra FCT’de karar kıldık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ce37&quot; name=&quot;ce37&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Fact Checker’s Tool
      &lt;&#x2F;strong&gt;
      , Teyit.org veya Doğruluk Payı gibi haber doğrulama organizasyonların yalan haberleri daha hızlı keşfetmesine yardımcı olacak bir araç olarak tasarlandı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8b9b&quot; name=&quot;8b9b&quot;&gt;
      Projenin arkasındaki ana fikir çok basitti.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;14a9&quot; name=&quot;14a9&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Yanlış haberlere inanan ve yanlış haberleri yayan kişiler yanlış haberlere inanmaya ve yanlış haberleri yaymaya devam edecektir.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;9835&quot; name=&quot;9835&quot;&gt;
      Daha az şiirsel olacak olursam, daha öncesinde yanlış haberleri beğenen ve paylaşan davranışlarını tekrarlama ihtimali daha yüksektir. O halde, haberlerin yayılımını incelediğimizde, daha öncesinde yanlış haberleri beğenen ve paylaşan kişiler tarafından paylaşılmaları halinde yanlış haber olma ihtimalleri yüksek olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3026&quot; name=&quot;3026&quot;&gt;
      Burada, birkaç eksik noktayı doldurmak gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;1628&quot; name=&quot;1628&quot;&gt;
       Haber beğenmek ve paylaşmak ne demek, hangi platform üzerinde yapılıyor?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8b51&quot; name=&quot;8b51&quot;&gt;
       Yanlış haber ne demek, neye göre ve nasıl tanımlanıyor?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c4e9&quot; name=&quot;c4e9&quot;&gt;
       Bir haberin yanlış olduğuna nasıl karar veriyoruz? Bir haberin yanlış olma ihtimalinin yüksek olması bize ne anlatıyor?
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;82a8&quot; name=&quot;82a8&quot;&gt;
      Projeyi Twitter üzerinde düşündük. Retweet mekaniğinin haberlerin yayılımını hızlandırması, yüksek kullanım seviyesi, diğer sosyal medya ağlarına göre daha çok haber paylaşımına elverişli olması ve haber paylaşımı için kullanılması, bir de üstüne geçmişte yalan haberlerin paylaşımına dair bilimsel bir literatür bulunmasından dolayı Twitter’ı mantıklı bulduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;de38&quot; name=&quot;de38&quot;&gt;
      Yanlış haberleri ise, doğru haberlerin tersi üzerinden tanımladık. Teyit.org, Doğruluk Payı gibi haber doğrulama organizasyonları IFCN(International Fact-Checking Network) adı verilen, haber doğrulama üzerine standartlar, rehberler ve yönlendiriciler sağlayan büyük bir organizasyonun içinde yer alıyorlar. IFCN tarafından kabul edilen organizasyonların yaptığı haberleri doğru haber olarak kabul ettik. Bu haberlerin yalanladığı tüm haberleri ise yanlış olarak. Bu şekilde, Twitter içindeki her bir hesabın bu haberlere dair attıkları tweet’lere dayanarak oluşturulan bir
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       güvenilirlik puanı
      &lt;&#x2F;strong&gt;
      oluştu.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0fbe&quot; name=&quot;0fbe&quot;&gt;
      Bu haberlere dair tweet atmayanlar için de bu güvenilirlik puanlarını HITS(Hyperlink-Induced Topic Search) adı verilen, arama motorlarının web sayfalarının sıralamasına karar vermek için kullandıkları bir algoritmayı kullanarak oluşturduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f945&quot; name=&quot;f945&quot;&gt;
      Yeni bir haber ortaya çıktığında, o haberi yayan kullanıcıların güvenilirlik puanlarına dayalı olarak o habere de bir güvenilirlik puanı atanıyor. Bu puan belli bir eşik sınırın altındaysa haber doğrulama ajanslarına haberin araştırılması için bildirim gönderiliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6edc&quot; name=&quot;6edc&quot;&gt;
      Bu süreci bir akış diyagramı olarak göstermek istersek aşağıdaki gibi bir sonuçlar karşılaşıyoruz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;d065&quot; name=&quot;d065&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1552&quot; data-image-id=&quot;1*BU6VfdqFaHGYYPJt_ZjF0w.png&quot; data-width=&quot;2750&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*BU6VfdqFaHGYYPJt_ZjF0w.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Akış Diyagramı
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;144e&quot; name=&quot;144e&quot;&gt;
      Fikrin çıkış noktası Covid-19 salgınının ilk dönemlerinde(ve gördüğümüz üzere sonrasında) yaşanan bilgi kirliliğinin azaltılmasına katkıda bulunmaktı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9e90&quot; name=&quot;9e90&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Maalesef ki bunlardan hiçbirisi gerçekten hayata geçmedi.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9344&quot; name=&quot;9344&quot;&gt;
      Yukarıdaki diyagramı incelediğinizde, “Stance Detection-Duruş Çıkarımı” adlı bir hamle görüyorsunuz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Duruş Çıkarımı
      &lt;&#x2F;strong&gt;
      , bir tweet’i alıp onun ne ile ilgili olduğunu ve aynı zamanda o konuya bakış açısını anlamak demek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;81bb&quot; name=&quot;81bb&quot;&gt;
      Biz, konunun içine biraz daha girdiğimizde fark ettik ki bunu güvenilir ve kaliteli bir şekilde yapmanın bir yolu yok, en azından biz bilmiyoruz ve bulamıyoruz. Bunu da, neyse ki hiçbir yerden yatırım veya fon almadan, kimseye yanlış vaadler sunmadan fark etmiş olduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7a6a&quot; name=&quot;7a6a&quot;&gt;
      Bu farkındalık anı da, Ağustos ayında sıcak Ankara güneşinin altında çalışırken geldi. O dönem proje bir şekilde Boğaziçi TTO’nun(Teknoloji Transfer Ofisi) dikkatini çekmişti, onlara yaptığımız sunum sonucunda bizim için ciddi bir miktarda yardımda bulunacaklardı. Ortaya finansal bir yükümlülük girince, girdiğimiz işten emin olmak için tekrardan projenin çalışması için gerekli bileşenlerin her birini tek tek incelemeye başladık. “
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Proje neden başarısız olabilir?”
      &lt;&#x2F;strong&gt;
      sorusunu defalarca sorduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;56f3&quot; name=&quot;56f3&quot;&gt;
      Cevabımızı, “Topic Modelling” için kullanmayı düşündüğümüz “LDA(Latent Dirichlet Allocation)” algoritmasının sabit bir konu sayısıyla çalıştığını fark ettiğimizde verdik. LDA’nın kullandığı istatistiksel model bir
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       K
      &lt;&#x2F;strong&gt;
      sayısı alıyor, metinleri o sayıda farklı konuya ayırmayı deniyor. En baştan itibaren zaten tweet’lerin ironik ve komedi içerikleri, sosyal medyanın dinamikleri, tweet’lerin kısa olması dolayısıyla konularının anlaşılamaması gibi problemlerin varlığını tahmin ettiğimiz için sisteme dair zaten belli şüphelerimiz ve korkularımız mevcuttu. Bunların hepsinin üstüne bir de kullanmayı düşündüğümüz modelin kullanımımıza uygun olmadığını gördüğümüzde,
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;3102d6d5f774&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; data-user-id=&quot;3102d6d5f774&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; target=&quot;_blank&quot;&gt;
       Ahmet YÜKSEL
      &lt;&#x2F;a&gt;
      ’e döndüm ve dedim ki “Bırakalım. Bu proje olmayacak ben inancımı kaybettim”. Tek problem LDA olsaydı belki Topic Modelling için başka yollar arayabilirdik, ama projenin temelinin yeterince sağlam olmadığına dair inancımıza yeni problemler eklenince bizim için inanç eşiğini geçmiş olduk, projeyi tamamen bıraktık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;997d&quot; name=&quot;997d&quot;&gt;
      Sürece bakınca, proje bize çok ilginç tecrübeler yaşattı.
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;3102d6d5f774&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; data-user-id=&quot;3102d6d5f774&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; target=&quot;_blank&quot;&gt;
       Ahmet YÜKSEL
      &lt;&#x2F;a&gt;
      Faruk Eczacıbaşı ile toplantı yaptı, ben Habertürk’e çıktım, ODTÜ Teknokent’te ofis kiralamak için pazarlık yaptık.
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;aiethicslab.com&quot; href=&quot;https:&#x2F;&#x2F;aiethicslab.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       AI Ethics Lab
      &lt;&#x2F;a&gt;
      projeyle ilgili bir rapor yazdı, ilk kez bir projemizi gerçekleştirsek oluşabilecek etik problemleri düşünme fırsatı bulduk. Teyit.org’un
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;factoryprogram.org&quot; href=&quot;https:&#x2F;&#x2F;factoryprogram.org&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Factory Bootcamp
      &lt;&#x2F;a&gt;
      ’ine katıldık, insanların teknik olarak imkansız fikirleri sanki mümkünmüş gibi sunmasına açık açık şahit olduk. Raporlar yazdık, sunumlar hazırladık, gelir modelleri tasarladık, hatalar yaptık, bir noktada günde 10–12 saat toplantıya giriyor çalışıyorduk.
      &lt;a class=&quot;markup--user markup--p-user&quot; data-action=&quot;show-user-card&quot; data-action-type=&quot;hover&quot; data-action-value=&quot;3102d6d5f774&quot; data-anchor-type=&quot;2&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; data-user-id=&quot;3102d6d5f774&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;u&#x2F;3102d6d5f774&quot; target=&quot;_blank&quot;&gt;
       Ahmet YÜKSEL
      &lt;&#x2F;a&gt;
      ile o dönemde şimdiki dostluğumuzun temellerini attık. Tek bir kelimeyle,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       öğrendik
      &lt;&#x2F;strong&gt;
      . Sürekli bir şekilde öğrendik, tecrübe edindik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;59c9&quot; name=&quot;59c9&quot;&gt;
      Bu yazıyı yazmak için o dönem hazırladığım bazı dökümanlara baktım, yazım hataları, tasarım hataları, açık bir şekilde mantıksal boşlukları olan fikirler… Geriye bakıp kendini beğenmemek ne güzel bir hismiş onu tekrar hatırladım; gelişmenin önemini gördüm.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cfe9&quot; name=&quot;cfe9&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu projenin tekrardan ayağa kalkma şansı olduğunu düşünmüyorum. Bu projeden aldığım en büyük ders, denemek gerektiği. Bir şeyleri deneyip, hayal edip, heyecanlanıp, emek ve vakit harcamak gerek. En güzel anılar böyle böyle birikiyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;44f9&quot; name=&quot;44f9&quot;&gt;
      Aşağıda o dönemde hazırladığımız sunum ve raporlardan bazı parçalar paylaşıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a2bf&quot; name=&quot;a2bf&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Konsept Logolar:
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;3&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--p&quot; id=&quot;6936&quot; name=&quot;6936&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*Yvhs70dtt9gxAokEAgoxSw.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*Yvhs70dtt9gxAokEAgoxSw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;8212&quot; name=&quot;8212&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*1G_me43zHNiTyTwLDYxWng.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*1G_me43zHNiTyTwLDYxWng.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;f7f6&quot; name=&quot;f7f6&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*pBxfGxdb4_uaQhgwnLLVZQ.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*pBxfGxdb4_uaQhgwnLLVZQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;3&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--figure&quot; id=&quot;cd49&quot; name=&quot;cd49&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*qpKQovkLyL_d8Tv8Ty7DnA.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*qpKQovkLyL_d8Tv8Ty7DnA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;04d7&quot; name=&quot;04d7&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*KJ7hDQbmnASvKYxgc2BTXg.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*KJ7hDQbmnASvKYxgc2BTXg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;0c1c&quot; name=&quot;0c1c&quot; style=&quot;width: 33.333%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*r61K7I-k1vwu0aa4Fi1GYw.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*r61K7I-k1vwu0aa4Fi1GYw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;2&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--figure&quot; id=&quot;2cb0&quot; name=&quot;2cb0&quot; style=&quot;width: 50%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*W8rG8FweSkqhsZuFnukPbg.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*W8rG8FweSkqhsZuFnukPbg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;1bb2&quot; name=&quot;1bb2&quot; style=&quot;width: 50%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*Rd5cQv6Z3q4ECcwgZ0-v9A.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*Rd5cQv6Z3q4ECcwgZ0-v9A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetColumn&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetCenter graf-after--figure&quot; id=&quot;c04a&quot; name=&quot;c04a&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;916&quot; data-image-id=&quot;1*VOSvmCy2Vji6uUKiExvMdw.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;1200&#x2F;1*VOSvmCy2Vji6uUKiExvMdw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;3d01&quot; name=&quot;3d01&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Rapor:
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;60d4&quot; name=&quot;60d4&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1uQoKRDd3uPeJPnOCGKmAJ5UdCoqCvs2WjW7Uxj9G-OA&#x2F;edit?usp=sharing&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1uQoKRDd3uPeJPnOCGKmAJ5UdCoqCvs2WjW7Uxj9G-OA&#x2F;edit?usp=sharing&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;1uQoKRDd3uPeJPnOCGKmAJ5UdCoqCvs2WjW7Uxj9G-OA&#x2F;edit?usp=sharing
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;52f8&quot; name=&quot;52f8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sunum:
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p graf--trailing&quot; id=&quot;7dd4&quot; name=&quot;7dd4&quot;&gt;
      &lt;iframe frameborder=&quot;0&quot; height=&quot;559&quot; scrolling=&quot;no&quot; src=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;embed?id=17n8KwAs2lorS_pONGmbEDJCioBhM2Cp9&amp;amp;size=l&quot; width=&quot;700&quot;&gt;
      &lt;&#x2F;iframe&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;c2db010d6655&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-12-21T13:28:52.547Z&quot;&gt;
     December 21, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yar%C4%B1m-kalan-projeler-3-fact-checkers-tool-c2db010d6655&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yarım Kalan Projeler#2: Learning from Learners</title>
        <published>2022-12-19T00:00:00+00:00</published>
        <updated>2022-12-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yarim-kalan-projeler2-learning-from-learners/"/>
        <id>https://alperenkeles.com/posts/yarim-kalan-projeler2-learning-from-learners/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yarim-kalan-projeler2-learning-from-learners/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;722f&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;ef31&quot; name=&quot;ef31&quot;&gt;
      Yarım Kalan Projeler#2: Learning from Learners
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;7950&quot; name=&quot;7950&quot;&gt;
      Learning from Learners, kısaca LFL, ortaya çıktığı dönem beni çok heyecanlandırmıştı. Doktoraya yeni başlamanın da etkisiyle çok yeni konseptler öğrendiğim için, bu konseptleri tanımayan benim gibi başkalarına da aktarabilmeyi hayal ettim. İlk yazı, doktoramın ana odağında bulunan Property-Based Testing üzerineydi.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;01e7&quot; name=&quot;01e7&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; title=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Learner’s Guide to Property Based Testing#1
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Property Based Random Testing is a flavor of testing that aims to use higher level specifications for testing instead…
       &lt;&#x2F;em&gt;
       medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;19a1af58cac5358feef1ed754df15c73&quot; data-thumbnail-img-id=&quot;1*92Av2ZbXV98Ryo1C0cxpFw.png&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;learning-from-learners&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*92Av2ZbXV98Ryo1C0cxpFw.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;ba5f&quot; name=&quot;ba5f&quot;&gt;
      Her şeyden önemlisi, benim için LFL’in önemli olma sebebi başkalarıyla birlikte yazabilme şansıydı. Çevremdeki insanların da motive olacağını düşünüp, onların da kendi öğrendikleriyle ilgili yazmasını planlamıştım. Tek bir yazıyla kalmasından açık olmalı ki proje maalesef devam etmedi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6cf3&quot; name=&quot;6cf3&quot;&gt;
      Blog için arkada yatan fikirler de şu şekildeydi.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;3e8e&quot; name=&quot;3e8e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Kullandığımız pek çok aracın arkasında yatan fikir aslında basit. Öğrenmenin önündeki engeller bu araçların performans, hata idaresi gibi gerekliliklerinden kaynaklı olarak kompleks olmasından kaynaklanıyor. Oyuncak bir arama motoru yazmak değil; kullanılabilecek, işe yarayacak bir arama motoru yazmak zor mesela.(Küçük bir örnek:
       &lt;&#x2F;strong&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;anvil.works&#x2F;blog&#x2F;how-to-build-a-search-engine&quot; href=&quot;https:&#x2F;&#x2F;anvil.works&#x2F;blog&#x2F;how-to-build-a-search-engine&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;anvil.works&#x2F;blog&#x2F;how-to-build-a-search-engine
       &lt;&#x2F;a&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        )
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ea47&quot; name=&quot;ea47&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Alanda uzun süre geçirmiş insanlar bu araçların karmaşıklıklarına aşina olduklarından onlar için yeni öğrenen bir insan bakış açısından bakmak zor. Dolayısıyla bu yazılar yeni öğrenenler tarafından yazılmalı.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;c43a&quot; name=&quot;c43a&quot;&gt;
      Bu iki fikri birleştirdiğimde, ortaya Learning from Learners ortaya çıktı. İlk yazı da beni şahsen tatmin edebilecek durumdaydı gayet. Hatta üstüne şöyle tasarım ruhundan uzak bir kapak fotoğrafı bile tasarlamıştım.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;c7a1&quot; name=&quot;c7a1&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;924&quot; data-image-id=&quot;1*eaf4FAPoXMv7g7ISq2dtEA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1640&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*eaf4FAPoXMv7g7ISq2dtEA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;128f&quot; name=&quot;128f&quot;&gt;
      Projenin yarım kalmasının sebebi öncelikle konseptin genelleştirilememesi, ikinci olarak da yanıma yazar bulamamam oldu.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;bbef&quot; name=&quot;bbef&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h4-strong&quot;&gt;
       Konseptin Genelleştirilememesi
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;87cf&quot; name=&quot;87cf&quot;&gt;
      Property-Based Testing konsept olarak neredeyse hiçbir arka plan gerektirmeden anlatılabiliyor. Dolayısıyla kısa bir yazıda tüm bir konsepti sıfırdan basit kod örnekleri üzerinden anlatabiliyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9d3a&quot; name=&quot;9d3a&quot;&gt;
      Diğer yandan aynı fikri “Automated Theorem Prover, SAT Solver, Fuzzer, Bitwise Algorithms” gibi alanlara uygulamaya çalıştığımda, arka planda çok daha fazla bilgi sağlamam gerektiğini fark ettim. Nasıl tek bir yazıda tüm bilgiyi toplayacağımdan emin olmadığım için bu yazıların neredeyse hepsi yarım kaldı. Diğer bir ihtimal ise benim bu konseptlere Property Based Testing kadar hakim olmamam, o yüzden nasıl basit konsept örnekleri oluşturabileceğimi bilmemem de olabilir.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;a03a&quot; name=&quot;a03a&quot;&gt;
      Yazar Bulamamam
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;a44e&quot; name=&quot;a44e&quot;&gt;
      Herhalde fikri ilk bulduğumda yaklaşık 50 kişiye yazdım, yazılar da toplam 1000 kişi tarafından okundu ancak ben gelip yazayım diyen toplamda
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       0 kişi çıktı.
      &lt;&#x2F;strong&gt;
      Ben de fikrin en tatlı taraflarından birisi başkalarıyla beraber çalışma fırsatı olduğu için motivasyonumu kaybettim. Belki de birkaç tane daha yazı yazabilseydim, ortaya çıkan momentumla başkaları da motive olabilirdi. Bilemiyorum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;1c0a&quot; name=&quot;1c0a&quot;&gt;
      Proje Şu An Ne Durumda?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;00c8&quot; name=&quot;00c8&quot;&gt;
      Yaklaşık 1 yıldır yazı yazılmamış olmasına rağmen, ben hala umutluyum. Hala konseptler yeterince basitleştirilirse alttaki öz fikri korurken belli bir seviyede kullanılabilir ve anlaşılabilir oyuncak projelerde birleştirilebilir diye düşünüyorum. Aklımda bazı yazılar var:
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;c277&quot; name=&quot;c277&quot;&gt;
       Coverage Measuring
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6aba&quot; name=&quot;6aba&quot;&gt;
       Fuzz-testing
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;64e0&quot; name=&quot;64e0&quot;&gt;
       Automated Theorem Solving
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;44f0&quot; name=&quot;44f0&quot;&gt;
       Writing a Simulation for X
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9543&quot; name=&quot;9543&quot;&gt;
       Encryption
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li graf--trailing&quot; id=&quot;c360&quot; name=&quot;c360&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Eğer bu tarz yazılar yazmak hoşunuza giderse beni haberdar ederseniz çok sevinirim. Belki yeterince ilgi çıkarsa birlikte devam ederiz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;a77403afb1da&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-12-19T11:33:50.124Z&quot;&gt;
     December 19, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yar%C4%B1m-kalan-projeler-2-learning-from-learners-a77403afb1da&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yarım Kalan Projeler#1: CengBook</title>
        <published>2022-12-17T00:00:00+00:00</published>
        <updated>2022-12-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yarim-kalan-projeler1-cengbook/"/>
        <id>https://alperenkeles.com/posts/yarim-kalan-projeler1-cengbook/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yarim-kalan-projeler1-cengbook/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;0e04&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;7c5f&quot; name=&quot;7c5f&quot;&gt;
      Yarım Kalan Projeler#1: CengBook
     &lt;&#x2F;h3&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--h3&quot; id=&quot;8cdb&quot; name=&quot;8cdb&quot;&gt;
      Önce giriş, bu seri ne hakkında?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;fa2d&quot; name=&quot;fa2d&quot;&gt;
      Biraz tezcanlı bir karakterim var. Hızlı heyecanlanıp, hızlı başlayıp, 1–2 günde hem kendi beklentilerimi, hem de çevremdekilerin beklentilerini aşıp bir projeye başlayıp, sonra bitirmeden bırakmışlığım çok. Sadece şu an düşündüğümde bile onlarca örnek görüyorum. Bilgisayarımdaki “Projeler” dosyasında 17 tane proje duruyor, Medium’da 15 tane yazı fikri taslak olarak bekliyor, arada aklıma fikir geldikçe aldığım notlara bakınca 5 tane bir kenara yazıp hiçbir şey yapmadığım proje görüyorum. Terminal uygulamalarından yeni bloglara, çekilebilecek videolardan yazılabilecek hikayelere kadar pek çok fikri bir kenara atmışım, beynimin arkasında çürütüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3e1a&quot; name=&quot;3e1a&quot;&gt;
      Evinizi birkaç gün toparlamadığınızı düşünün, ortalık biraz dağılır, gömleklerinizi sandalyenin arkasına asmaya başlarsınız, yapmak istediğiniz ev işleri birikir, eviniz gittikçe daha düzensiz bir hal almaya başlar, bir gün yeter artık deyip vaktinizi ayırana kadar bir karmaşa içerisinde yaşarsınız. Sonrasında kendinizde her şeyi toparlayacak iradeyi bulup da evin düzgün halini gördükten sonra rahatlarsınız, huzurlu olursunuz, omuzlarınızdan bir yük kalkar. Belki de yaşamıyorsunuzdur böyle bir şey, ama ben yaşıyorum dolayısıyla bu örnekle yetinmeniz gerekecek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a1cb&quot; name=&quot;a1cb&quot;&gt;
      Aklım o düzensiz eve dönüşmüş gibi hissediyorum biraz. Yapmayı bir noktada düşünüp de bıraktığım, toparlamadığım o kadar fazla şey var ki. Ne yapayım diye düşündüğümde seçimlerin arasında boğuluyorum, karar veremiyorum, felç olup hiçbir şey yapamadan vaktimi öldürüyorum.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu konuya bir çözüm getirmeye karar verdim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;aae0&quot; name=&quot;aae0&quot;&gt;
      Yarım kalan fikirlerimi, projelerimi paylaşacağım. Bitmemiş olabilir, yarım olabilir, sadece fikir olabilir. Belki bir yazıda birden fazla fikirden de bahsedebilirim. Belki de bu seriyi de yarım bırakırım, işte o komik olur.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;05dd&quot; name=&quot;05dd&quot;&gt;
      Bu serinin asıl özel noktası, bir çağrı olması. Paylaşacağım her şey yarım, her fikirde yardıma açığım, eleştiriye açığım, birlikte çalışmaya açığım.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Eğer herhangi bir fikir hoşunuza giderse lütfen çalın, ya da bana yazın beraber ilerletmeye çalışalım.
      &lt;&#x2F;strong&gt;
      Şimdiden teşekkürler.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;a263&quot; name=&quot;a263&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;7730&quot; data-image-id=&quot;1*fSX4XL6bW1iw-SwTw3zPsg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;7730&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*fSX4XL6bW1iw-SwTw3zPsg.jpeg&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Image by vectorjuice on Freepik
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;1dd8&quot; name=&quot;1dd8&quot;&gt;
      CengBook
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;82de&quot; name=&quot;82de&quot;&gt;
      CengBook, uzun ismiyle “METU CENG Interactive HandBook”, yaklaşık 1 yıl önce deneyip de başarısız olduğum bir çabaydı. Linkini de bırakayım hemen aşağı.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;85d7&quot; name=&quot;85d7&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;akeles.notion.site&#x2F;METU-CENG-Interactive-HandBook-ae416a31d3434c9e974f118fabf6dfde&quot; href=&quot;https:&#x2F;&#x2F;akeles.notion.site&#x2F;METU-CENG-Interactive-HandBook-ae416a31d3434c9e974f118fabf6dfde&quot; title=&quot;https:&#x2F;&#x2F;akeles.notion.site&#x2F;METU-CENG-Interactive-HandBook-ae416a31d3434c9e974f118fabf6dfde&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        METU CENG Interactive HandBook
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Table of Contents The actual writings are in the table of contents given above. Below, we give a list indicating latest…
       &lt;&#x2F;em&gt;
       akeles.notion.site
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock&quot; data-media-id=&quot;1aa520a90e8d27df4f2e12523cad821b&quot; href=&quot;https:&#x2F;&#x2F;akeles.notion.site&#x2F;METU-CENG-Interactive-HandBook-ae416a31d3434c9e974f118fabf6dfde&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;c936&quot; name=&quot;c936&quot;&gt;
      Uzun zamandır ODTÜ Bilgisayar Mühendisliği öğrencilerine faydalı kaynakları tek bir noktada biriktirmek istiyordum, geçen yıl denediğimiz “ODTÜ Bilgisayar Mühendisliği Akran Mentörlüğü” programını içerik üreticilerini tek bir noktaya birleştirmiş olma şansı olarak görüp bir prototip, bir iskelet hazırladım. Yararlı web sitelerinden, mezun veri tabanına, teknik yazılara, tecrübe yazılarına, yararlı içerik kürasyonuna, isteyen herkesin katkıda bulunabileceği, kendi versiyonlarını oluşturabileceği, genişletebileceği bir kitap hayalim vardı.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;0087&quot; name=&quot;0087&quot;&gt;
      Neden başarısız oldu?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;ea27&quot; name=&quot;ea27&quot;&gt;
      Şahsi görüşümce başarısızlığın en büyük sebebi benim. Yeterli vakti ayırmadım, hatta bölümden bir arkadaş oturup “tetick.xyz Nasıl Kullanılır?” rehberi yazdı onu bile eklemeyi unuttum çok geç olana kadar, inisiyatifi yönlendirecek kimse olmayınca proje de kendi halinde bırakılıp öldü tabii ki.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5502&quot; name=&quot;5502&quot;&gt;
      İkincisi de içerik üretmenin gerçekten zor olması. İçerik üretmek sürecinde yaratıcılık, emek, paylaşma isteği, eleştiriye dayanmak, hatta eleştiriyi sevmek, devamlılık, vakit yönetimi, ilham… pek çok farklı faktör devreye giriyor. Benim üretemiyor olmamın sebepleri de bu faktörler zaten.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;47b2&quot; name=&quot;47b2&quot;&gt;
      Neden başarılı olabilir?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;3014&quot; name=&quot;3014&quot;&gt;
      Güzel bir fikir çünkü. Benden geçti artık, ama bölümle daha iç içe herhangi birisinin hoşuna gider de alıp devam etmek isterse yavaş yavaş büyütülen kümülatif bir kütüphaneye dönüşme potansiyeli olduğunu düşünüyorum projenin. Eğer ilginizi çekerse, yardımcı olabileceğim herhangi bir nokta olduğunu düşünürseniz, lütfen bana yazın, yardımcı olmaya çalışırım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;c618&quot; name=&quot;c618&quot;&gt;
      Bakalım bu seri nasıl ilerleyecek, şimdiden heyecanlandım. Sonraki yazılarda görüşmek üzere!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;bba76f51b569&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-12-17T09:22:10.043Z&quot;&gt;
     December 17, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yar%C4%B1m-kalan-projeler-1-cengbook-bba76f51b569&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A Brief Essay on Change</title>
        <published>2022-10-29T00:00:00+00:00</published>
        <updated>2022-10-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/a-brief-essay-on-change/"/>
        <id>https://alperenkeles.com/posts/a-brief-essay-on-change/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/a-brief-essay-on-change/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;08e3&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;af7c&quot; name=&quot;af7c&quot;&gt;
      A Brief Essay on Change
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e6d5&quot; name=&quot;e6d5&quot;&gt;
      It’s been a long time since I’ve started thinking about change. One thing I realized is even though so much of our lives change, we still wander around some themes again and again, it’s almost like they’re a part of our core philosophy.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;2741&quot; name=&quot;2741&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;600&quot; data-image-id=&quot;1*f28Lf1Zp2XB7mjx6Poubag.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*f28Lf1Zp2XB7mjx6Poubag.jpeg&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Koi Fish
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b171&quot; name=&quot;b171&quot;&gt;
      Ironically, change is one of those themes for me. I frequently find myself thinking about change, the way I change, how my interactions change with my friends, family, people around me, how I can change the environment and the conditions I live in, when change occurs, how change occurs, why it sometimes do not occur…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2740&quot; name=&quot;2740&quot;&gt;
      One core idea I cannot shake is the old story of Theseus and his ship. More than a year back, I had written an essay on Reentry, and rather unsuccessfully failed to link Ship of Theseus into the narrative.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;1b91&quot; name=&quot;1b91&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;the-story-of-deviation-and-returning-6f3561062f38&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;the-story-of-deviation-and-returning-6f3561062f38&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;the-story-of-deviation-and-returning-6f3561062f38&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        The Story of Deviation and Returning
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        I always loved thinking about philosophical discussions and paradoxes. I am amazed that they are so simple at first…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;32a36b3520814cca9213527c4220c3bd&quot; data-thumbnail-img-id=&quot;1*ducjtZEhe072Ii85JMtZHQ.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;the-story-of-deviation-and-returning-6f3561062f38&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*ducjtZEhe072Ii85JMtZHQ.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;767a&quot; name=&quot;767a&quot;&gt;
      Today, I’ll again write on Theseus, but with the connection to this circularity I came to think of, the phenomenon that we cannot really escape certain themes of our lives.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;47f0&quot; name=&quot;47f0&quot;&gt;
      Let me recite the story once again.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;6aa9&quot; name=&quot;6aa9&quot;&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       The ship wherein
      &lt;&#x2F;em&gt;
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Theseus&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Theseus&quot; rel=&quot;noopener ugc nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Theseus
       &lt;&#x2F;em&gt;
      &lt;&#x2F;a&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       and the youth of Athens returned from Crete had thirty oars, and was preserved by the Athenians down even to the time of
      &lt;&#x2F;em&gt;
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Demetrius_of_Phalerum&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Demetrius_of_Phalerum&quot; rel=&quot;noopener ugc nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Demetrius Phalereus
       &lt;&#x2F;em&gt;
      &lt;&#x2F;a&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       , for they took away the old planks as they decayed, putting in new and stronger timber in their places, insomuch that this ship became a standing example among the philosophers, for the logical question of things that grow; one side holding that the ship remained the same, and the other contending that it was not the same.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;2cdd&quot; name=&quot;2cdd&quot;&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       —
      &lt;&#x2F;em&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Plutarch, Theseus
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ship_of_Theseus&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ship_of_Theseus&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
        &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
         [Wikipedia]
        &lt;&#x2F;em&gt;
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;3923&quot; name=&quot;3923&quot;&gt;
      Even though one might argue that the question itself is not useful for us non philosophers, it has always been one of my favorite topics to think about. I have been fascinated by the amount of connections I could make to real life scenarios, and the amount of insight the question forced me to have for myself. Unarguably, we change every day; we would hopefully assume all of these different(relative to the previous days&#x2F;months&#x2F;years) is still
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       us
      &lt;&#x2F;strong&gt;
      , so how do we fare against the ship?
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;54ed&quot; name=&quot;54ed&quot;&gt;
      I always thought the question had something to do with the speed at which we change, the derivative of our deviation.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;c33a&quot; name=&quot;c33a&quot;&gt;
      We can think of this by using trees as an examples. Every day, a tree changes little by little. We see the tree, we look at it, but we always know that it’s the same tree. In fact, we don’t only see the tree, we see its future, we also start to have expectations regarding its state in 1, 2, 5, 10 years. As long as the tree grows as we expect, we can always think of it as the same tree. It might deviate from the expectations until some point, but if we saw that a tree that was 50 centimeters yesterday is 2 meters today, none of us will believe they are the same tree.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;870d&quot; name=&quot;870d&quot;&gt;
      I feel like the same is true for the ship, and also for humans. Every day, every second we predict future. We don’t view world only as a moment, we see it as a never-ending sequence of states; and we view the objects and creatures around us based on the expectations. Hence, ship is not a constant object; it’s a function in time as long as it fits our expectations of change, if it deviates too much from the expectations, we might hold on to its old version, “the original”.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b3f2&quot; name=&quot;b3f2&quot;&gt;
      The rationale emerges from the fact that no object in the universe is ever static with respect to time, hence we must have adapted our perspective similarly. We are particularly keen on recognizing patterns as they allow us to turn random information into organized and structured knowledge. Recognizing patterns over time is what allowed humanity to discover days, years, calendar and many other discoveries, explorations and inventions over the course of the history. It’s a rather straightforward hypothesis that such convenience could influence our mindset, and that very well could be one of the reasons I believe that expected change is a crucial part of nature.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;883a&quot; name=&quot;883a&quot;&gt;
      In essence, it is my belief that past is past, the parts of the ship, or our previous characteristics that we no longer possess are not our parts now. We are not defined by who we were, or even who we were before. We are defined by our past, present, and future at the same time together.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;6837c5a398c1&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-10-29T17:19:14.708Z&quot;&gt;
     October 29, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;a-brief-essay-on-change-6837c5a398c1&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Seçimler v2</title>
        <published>2022-10-24T00:00:00+00:00</published>
        <updated>2022-10-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/secimler-v2/"/>
        <id>https://alperenkeles.com/posts/secimler-v2/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/secimler-v2/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;c3ab&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;e31f&quot; name=&quot;e31f&quot;&gt;
      Seçimler v2
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;302a&quot; name=&quot;302a&quot;&gt;
      Yaklaşık 18 ay önce bir yazı yazmışım. Geleceğin ne kadar korkunç olduğuna, karar vermenin, verdiğimiz kararların etkisini anlamanın ne kadar zor olduğuna, içinde bulunduğumuz kaotik sistemin üzerinde herhangi bir kontrolümüzün olup olmadığına dair sorgulamalar yapmış, verdiğim karar ne olursa olsun sonucunun iyi ya da kötü değil, farklı olacağına değinmişim.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;521d&quot; name=&quot;521d&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;se%C3%A7imler-6ff5e2480556&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;se%C3%A7imler-6ff5e2480556&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;se%C3%A7imler-6ff5e2480556&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Seçimler
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bazen korkuyorum. Gelecek belirsiz, korkutucu, her bir tercihin kelebek etkisi gibi sonuçlarının bizleri nereye…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;8fa7dc2089f1308dbc66f88672a1716e&quot; data-thumbnail-img-id=&quot;1*d4RBW4JFLiUbudI0ICQbXg.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;se%C3%A7imler-6ff5e2480556&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*d4RBW4JFLiUbudI0ICQbXg.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;e521&quot; name=&quot;e521&quot;&gt;
      Bugün, o kararın sonuçlarıyla yaşıyorum; ve geçtiğimiz o 18 ayda çok daha korkunç bir şey fark ettim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f3cd&quot; name=&quot;f3cd&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Artık her şeye her gün karar vermek zorundayım.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2f94&quot; name=&quot;2f94&quot;&gt;
      Bu ne demek? Hayatta bu noktaya kadar tabii ki çok önemli kararlar verdim. Gittiğim lise, üniversite, yaptığım stajlar, arkadaş seçimlerim, iş seçimlerim, doktoraya gelmem… Bu kararları saydıkça arttırabiliriz. Ancak bu zamana kadar bu seçimlerin neredeyse hepsini sadece bir kez yapıp, o karar anı geçtikten sonra başladığımı bitirmeye odaklanıyordum. Liseye gittiğimde, staja başladığımda, üniversitede okurken günün sonunda bir hedef vardı; bitirmek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f565&quot; name=&quot;f565&quot;&gt;
      Yetişkinliğin en korkunç farkındalıklarından birisi artık herhangi bir şeyin bitmediği, bitiyorsa bile benim bitirmek zorunda olmadığım farkındalığı. Yarın evimi değiştirebilirim, yaşadığım şehri, ülkeyi değiştirebilirim. İşimi değiştirebilirim, hatta belli bir seviyeye kadar mesleğimi bile değiştirebilirim. Kazanacağım para, yaşayacağım yer, çevremde bulundurmak istediğim insanlar, hepsinin kararı bana ait. Daha da ötesinde, bu kararı her gün yataktan kalktığımda tekrar veriyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3064&quot; name=&quot;3064&quot;&gt;
      Her gün kalktığımda tamam ben bugün de doktoraya devam ediyorum, bugün de bu işi yapıyorum, bugün de bu ülkede, bu şehirde yaşıyorum, bugün de aynı evde uyuyorum kararını vermek zorundayım. Eğer mutlu değilsem, değiştirebilirim. Eğer gelecekte mutlu olmayacağımı görüyorsam, değiştirmek zorundayım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;adeb&quot; name=&quot;adeb&quot;&gt;
      Seçimlerim artık eskisinden bile daha az etkili gözümde, çünkü neredeyse hepsi her an değişebilirler. Bu, hem bir hak, hem de çok büyük bir sorumluluk. İnsana hem özgürlük veriyor, hem de onu zincirliyor. Kendin için iyi kararlar verebilmenin mutluluğuyla, verdiğin kararın yanlış olmasının endişesini yaşıyorsun her gün.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;c275&quot; name=&quot;c275&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1000&quot; data-image-id=&quot;1*hVmKv8-FticjlBx9oymlkg.gif&quot; data-is-featured=&quot;true&quot; data-width=&quot;2000&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*hVmKv8-FticjlBx9oymlkg.gif&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;ebc8debd7c28&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-10-24T23:44:21.270Z&quot;&gt;
     October 24, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;se%C3%A7imler-v2-ebc8debd7c28&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Doktorada 1 Yıl Sonunda Bazı Görüşler</title>
        <published>2022-07-20T00:00:00+00:00</published>
        <updated>2022-07-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/doktorada-1-yil-sonunda-bazi-gorusler/"/>
        <id>https://alperenkeles.com/posts/doktorada-1-yil-sonunda-bazi-gorusler/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/doktorada-1-yil-sonunda-bazi-gorusler/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;0f48&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;8263&quot; name=&quot;8263&quot;&gt;
      Doktorada 1 Yıl Sonunda Bazı Görüşler
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;095c&quot; name=&quot;095c&quot;&gt;
      Merhabalar! Son yazımdan beri birkaç ay geçti; benim için güzel birkaç aydı, umarım sizler için de öyle olmuştur. Doktoranın 11. ayını bitirmek üzereyim, hem biraz kendi yılım üzerine düşünmek hem de bir yandan fırsatını bulmuşken yazmaya geri dönmek istedim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;9855&quot; name=&quot;9855&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;506&quot; data-image-id=&quot;1*bt6apSrMX6EIsh8uJrygUw.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;900&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*bt6apSrMX6EIsh8uJrygUw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;29ec&quot; name=&quot;29ec&quot;&gt;
      Önümüzdeki ay içerisinde doktoraya başlayacak birçok kişi olduğunu biliyorum kendi çevremde, eğer bunu okuyorsanız umarım bu yazı sizlere geçirdiğiniz zor günlerde yalnız olmadığınız hissini verir hem de belki bu zorlukların bazılarını hiç yaşamamanızı sağlar. Şimdiden yolculuğunuzda kolaylıklar diliyorum, Washington D.C yakınlarına gelirseniz sizlerin anılarını dinlemeyi de çok isterim!
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a2ea&quot; name=&quot;a2ea&quot;&gt;
      Geçtiğimiz yıl en basit tabiriyle aydınlatıcı bir yıldı. Eski hayatımdan kopmak (hatta uzun bir süre kopamamak), Amerika’da sıfırdan bir hayat kurmaya çalışmak, finansal olarak kendi ayaklarımın üstünde durmak, gelecekle ilgili seçeneklerin bir anda çoktan seçmeliden boşluk doldurmaya dönüşmesi gibi sonsuz tane ihtimalin ortaya çıkması…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d4e7&quot; name=&quot;d4e7&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu süreçte yaptığımı fark ettiğim birkaç hata var;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;3c4c&quot; name=&quot;3c4c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Eski Hayatıma Tutunmaya Çalışmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8c25&quot; name=&quot;8c25&quot;&gt;
      Beni az çok tanıyan herkesin bildiği gibi ODTÜ benim hayatta en ait hissettiğim yerdi. ODTÜ’de üzüldüm de, mutlu da oldum, zırladım da, ağladım da, heyecanlandım da… ODTÜ demek ev demekti, veda etmem bile aylar sürdü. Yine de Amerika’ya geldikten sonra ODTÜ’ye tutunmaktan kendimi alıkoyamadım. Hala ODTÜ’lülerle konuşuyor, ODTÜ’yle alakalı konuşuyor, ODTÜ’yle alakalı düşünüyordum. Bu da hem buradaki okuluma adapte olmamı zorlaştırdı hem de buradan insanlarla arkadaş olmamı zorlaştırdı. ODTÜ’deki arkadaşlıkların yerini tutmuyordu sonuçta, ODTÜ’deki yaşanmışlık yoktu sonuçta kimseyle… Anladınız fikri.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fa50&quot; name=&quot;fa50&quot;&gt;
      Kendi kafamda büyüttüğüm ODTÜ, ODTÜ’lü ideali beni konfor alanımdan çıkmamaya itti. Aslında ortaya koyduğum ideal bir yalandan başka bir şey değildi. Türkiye’deyken de insanlarla samimileşmek için aylar, bazen yıllar geçmesi gerekti; burda da aynı şekilde yaşıyoruz, çoğu zaman daha hızlı bile samimileşebiliyoruz aslında. Sadece artık, “ya bak lisansta böyle olmuyordu şimdi niye böyle oluyor anlamadım” diyebiliyoruz çünkü elimizde gerçekçi olmayan bir standart var, bir hayal var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;03cd&quot; name=&quot;03cd&quot;&gt;
      Fark ediyorum ki insanlara yeterli şansı vermemişim, yeteri kadar tanımaya çalışmamışım, çoğu zaman yüzeysel konuşmalardan yola çıkarak oturup daha derin konuşmaya çalışmamışım bile. Sizlere ilk tavsiyem, bundan kaçının lütfen. Arkasındaki motivasyonu tanıyın, Türkiye’deki hayatımıza tutunmak, oradaki arkadaşlarımızla konuşmaya çalışmak kolay; burada bir hayat kuracağımızı kabullenmek zor, hayatın kendisini kurmak daha zor. Ancak bir noktada başlamazsak eğer kurmaya, Türkiye’deki hayatımızın bir gölgesini yaşayacağız ancak. En azından benim için böyle olacak. Bundan dolayı, önümüzdeki süreçte arkadaş edinmek için daha fazla çaba harcayacağım, tanıştığım insanlarla daha fazla vakit geçirip onları daha iyi tanımak için uğraşacağım.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0377&quot; name=&quot;0377&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Tatilimin Tamamını Türkiye’de Geçirmek
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6470&quot; name=&quot;6470&quot;&gt;
      İlk maddeyle biraz bağlantılı, ama tamamen de değil. Doktoraya geldiğim saniyeden itibaren direkt olarak araştırma, asistanlık, dersler bir anda yoğun bir şekilde başladı. Staj bulmaya çalışma, alışma dönemi derken Amerika’da hiçbir zaman boş olduğum bir dönem olmadı. İlk uzun tatiliminse tamamını Türkiye’de geçirdim; hatta akıllılık yapıp finallerim çevrimiçi olduğu için dönemin son haftasını ve finalleri de Türkiye’de geçirdim. Bu tabii ki çok güzeldi, arkadaşlarımı ve ailemi uzun uzun görebilme fırsatına sahip oldum; ancak aynı zamanda benim Amerika’ya gerçekten alışmamın belki de ilk aşaması olacak günleri Türkiye’de geçirmem anlamına geldi. Yaşadığınız yere çalışırken değil, dinlenirken daha çok alışacaksınız. Çalışırken gün geçirmek kolay, çalış -&amp;gt; yorul -&amp;gt; dinlen -&amp;gt; uyu döngüsünde yıllar geçirebiliyor insan. Asıl boş olduğunda, işi olmadığında vakit geçirmek zor çünkü insan kendi kendini sorgulamaya ve o vakti geçirecek bir insan, bir aktivite aramaya başlıyor. Bizleri bulunduğumuz mekanlara ait hissettirenler de tam olarak o insanlar, o aktiviteler. Beraber çalıştığınız insanla değil, beraber kahve içtiğiniz, muhabbet ettiğiniz, mangal yaptığınız, sinemaya gittiğiniz, oyun oynadığınız insanla yakın hissediyorsunuz, arkadaş oluyorsunuz; bunlar sonucunda ait hissediyorsunuz bulunduğunuz yere.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6c57&quot; name=&quot;6c57&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Çalışmaya Olması Gerekenden Fazla Odaklanmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d291&quot; name=&quot;d291&quot;&gt;
      Dediğim gibi, gittiğiniz yere orda çok fazla çalışarak adapte olmayacaksınız. Eğleneceğiniz, dinleneceğiniz aktiviteleri farklı farklı insanlarla yaparak adapte olacaksınız. İş hiçbir zaman bitmiyor, doktora öğrencisisiniz, her zaman daha fazla makale okuyabilir, daha fazla kod yazabilir, daha fazla ders çalışabilirsiniz. Çalışmanın bir üst sınırı yok. Bu noktada çalışmak belli bir miktardan sonra gerçek hayattan kaçmak anlamına geliyor. Bulunduğunuz yerde sosyal bir hayat kurmaktansa çalışıyor, arkadaşlık kurmaya çalışıp başarısız olma riskini almaktansa gidip makale okuyor, yazacağınız makale için deney yapıyorsunuz. Yapmayın..
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;c33c&quot; name=&quot;c33c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       İkincil Çemberi Kuramamak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;36e5&quot; name=&quot;36e5&quot;&gt;
      Birinci çember tabii ki çok önemli. Düzenli görüştüğünüz, sırtınızı dayayabileceğiniz, kötü gününüzde güvenebileceğiniz, güzel ve özel günleri beraber geçirebileceğiniz, değer verdiğiniz birilerini bulmak kadar güzel bir şey yok (canım arkadaşlarım iyi ki varsınız). Ama bir yandan ikincil bir çembere de ihtiyacınız var. Birkaç haftada, belki ayda bir görüştüğünüz; spesifik bir aktiviteyi birlikte yapmaktan hoşnut olduğunuz, hayatınızın aşırı içinde olmasa da canınız sıkıldığında yazabileceğiniz insanlar olması gerekiyor çevrenizde. Bence asıl bunları edinmek çok zorlaşıyor. Hem yakın arkadaşa ihtiyacınız olduğunun zaten farkındasınız, hem de zaten kafanızın en baştan kolayca uyuştuğu insanlarla arkadaş olmak için ekstra bir efor harcamanıza gerek kalmıyor. Ancak ikincil çemberde yer alacak insanlara birden fazla şans vermeniz, onları daha önceki arkadaşlıklarınızla karşılaştırmamanız, denemeniz ve çabalamanız gerek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dbad&quot; name=&quot;dbad&quot;&gt;
      Bunlar benim şahsen geriye bakınca hata yaptığımı düşündüğüm noktalar, bu yazıyı okuyanların da benzer hatalara düşmeyeceğini umuyorum. Umarım sizler kendinize güzel bir hayat kurarsınız, sıkıntısız, kolayca, çok yorulmadan ve yıpranmadan.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;67e6&quot; name=&quot;67e6&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Biraz da iyi yaptığımı düşündüğüm noktalardan bahsedeyim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2ce6&quot; name=&quot;2ce6&quot;&gt;
      Araştırma Tarafında Denemekten ve Hata Yapmaktan Korkmamak
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;97c0&quot; name=&quot;97c0&quot;&gt;
      Daha doktoranızın başındasınız, pek çok hata yapacaksınız; ben çoktan başladım yapmaya. Oturup belli bir çaba harcadığım 3 projenin 2 sini bıraktım, bir noktadan sonra bana göre olmadığına karar verdim. Bu projelerden birini alırken bu ihtimalin çokça farkındaydım; çalıştığım araştırmacıya da bunu söylemiştim başlarken zaten, ayrılırken gayet medeni ve tatlı bir şekilde ayrıldım projeden. Diğer projede de, bir noktadan sonra ilerleyemediğimi ve artık daha fazla emek göstermek istemediğimi; projenin beni heyecanlandırmadığını hissettim, o zamana kadar yaptıklarımı belgeleyip ayrıldım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0b8b&quot; name=&quot;0b8b&quot;&gt;
      Şu anda endüstride staj yapıyorum, bir yandan da üçüncü araştırma projemle ilgileniyorum, bir de bir yarışma düzenlemeye çalışıyorum. Bu noktada yapmaya çalıştığım neredeyse her şey benim için yeniydi, bir kısmında başarısız oldum ancak kalanlara motive ve mutlu bir şekilde devam ediyorum. Doktora benim için bir keşif süreci, alanı, kendimi, hocamı, geleceğimi keşfetmeye çalışıyorum; bunun da bol bol hata yaparak ve başarısızlık yaşayarak olacağının farkındayım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4d56&quot; name=&quot;4d56&quot;&gt;
      Dolayısıyla daha önce uğraşmadığınız ihtimaller çıkarsa karşınıza, ben bunu yapamam demektense, ya başarısız olursam diye korkmaktansa deneyip başarısız olmayı denerseniz daha mutlu olabileceğinizi düşünüyorum. Tabii bu benim şahsi tecrübem, sizler için ne derece geçerli olur bilemiyorum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;dd03&quot; name=&quot;dd03&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Danışmanımla Dinamiklerimi Oturtmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;c839&quot; name=&quot;c839&quot;&gt;
      Her doktora öğrencisinin kendi danışmanıyla olan dinamiği birbirinden farklı. Bu noktada zaman içerisinde sizin ve danışmanınızın ikinizi de en rahat ettirecek, en verimli çalışmanıza izin verecek şekilde bir dinamik oluşturması gerekiyor. Ben bu noktada hem çok anlayışlı, kaliteli ve zeki bir danışman bulacak kadar şanslı; hem de ondan beklediklerimi açık bir şekilde ifade edecek kadar cesur olduğumu düşünüyorum. Danışmanınız sizi doktora öğrencisi olarak alarak size iyilik yapmıyor, siz kimseye borçlu da değilsiniz, birlikte geliştiğiniz ve ilerlediğiniz bir süreç olması gerek doktora sürecinizin. O yüzden, en baştan sınırlarınızı saygılı bir şekilde belirtmeniz, nasıl en iyi şekilde çalıştığınızı, nasıl bir danışmanlık ve yönlendirme beklediğinizi açıklamanız en iyisi olacaktır. Bunu yapmadığınız takdirde danışmanınızla aranızda kopuk, belki de sağlıksız olarak nitelendirilebilecek bir ilişki oluşacak; bununla birlikte çok severek başladığınız bir yolculuğu ya mutsuz ve yıpranmış olarak bitirecek, ya da belki de bitirmeyeceksiniz bile.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;c45f&quot; name=&quot;c45f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Tadını Çıkarmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f965&quot; name=&quot;f965&quot;&gt;
      Amerika’ya gelmenin tadını çıkarmak gerek. Ben şu ana kadar burada olmanın da getirdiği finansal özgürlük sayesinde hem Amerika’da, hem Türkiye’de, hem de Avrupa’da 1 yıldır çok güzel gezdim, eğlendim, vakit geçirdim. Aldığınız az bir doktora maaşını bir de biriktireceğim diye kendinizi zorlarsanız bu 5 yıl geçmez, en azından bana öyle geliyor.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5f7f&quot; name=&quot;5f7f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Hissettiklerim Açık Bir Şekilde Paylaşmak
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6ffe&quot; name=&quot;6ffe&quot;&gt;
      Buraya gelmeden önce, duygularını, zayıf anlarını öyle çok paylaşan bir insan değildim. Doktoraya geldikten sonra bu biraz daha arttı. Bunun mental sağlığım için çok faydalı olduğunu, arkadaşlarımla olan ilişkimi de geliştirdiğini düşünüyorum. Buraya gelip, yaşadığım zorlukları bir de tek başıma kimseye anlatmadan yaşamaya çalışsaydım, büyük ihtimalle ilk 2 ayı bile çıkaramazdım. Yaşadıklarınızda yalnız değilsiniz, benzer zorluklardan geçen on binlerce kişi var, anlatın, konuşun, ağlayın, zırlayın; bu tamamen hakkınız. Kimsenin size kurtuldun işte ülkeden daha ne ağlıyorsun demesine de izin vermeyin. Finansal özgürlüğe kavuşmak ve parlak bir geleceğe doğru adım atmaya devam etmek için aynı zamanda pek çok fedakarlık yapıyoruz, bu fedakarlıkların küçültülmesine izin vermeyin.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;263c&quot; name=&quot;263c&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;600&quot; data-image-id=&quot;1*xgzEuqWeHEoLA1w7MobwVw.jpeg&quot; data-width=&quot;600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*xgzEuqWeHEoLA1w7MobwVw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure graf--trailing&quot; id=&quot;fcd6&quot; name=&quot;fcd6&quot;&gt;
      Daha yazacak çok şey var aslında da, bu yazı bu kadar olsun. İyisiyle kötüsüyle, güzel ve aydınlatıcı bir yıl geçirdiğimi düşünüyorum ilk yılımda. Geleceğe dair umutluyum, heyecanlıyım, buraya geldiğim için de mutluyum yaşadığım tüm zorluklara rağmen. Umarım sizler de hayatınızda mutlu, heyecanlı, umutlu olursunuz, sağlıcakla kalın!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;52462e583b4a&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-07-20T17:17:29.457Z&quot;&gt;
     July 20, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;doktorada-1-y%C4%B1l-sonunda-baz%C4%B1-g%C3%B6r%C3%BC%C5%9Fler-52462e583b4a&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Doktoramın İlk 6 Ayı Nasıl Geçti? Yoğun, Yorgun Ama Mutlu.</title>
        <published>2022-03-08T00:00:00+00:00</published>
        <updated>2022-03-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/doktoramin-ilk-6-ayi-nasil-gecti-yogun-yorgun-ama-mutlu/"/>
        <id>https://alperenkeles.com/posts/doktoramin-ilk-6-ayi-nasil-gecti-yogun-yorgun-ama-mutlu/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/doktoramin-ilk-6-ayi-nasil-gecti-yogun-yorgun-ama-mutlu/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;31f1&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;0c9b&quot; name=&quot;0c9b&quot;&gt;
      Doktoramın İlk 6 Ayı Nasıl Geçti? Yoğun, Yorgun Ama Mutlu.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9f48&quot; name=&quot;9f48&quot;&gt;
      Bu yazı, aslında Amerika’ya doktoraya geliş sürecimi zaman içerisinde neredeyse anlık olarak ele aldığım bir güncenin 4. yazısı. Geriye dönüp baktığımda geçirdiğim zamanları daha iyi değerlendirebilmek, kendi geleceğime bir miras bırakabilmek; aynı zamanda sürecin kendisini belgeleyerek doktoraya gelecek olanlara beklentilerini daha iyi oturtma şansı vermek istiyorum. Yazıya girmeden önce, bir önceki yazının linkini aşağıya bırakayım, merak edenler okusunlar.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;184c&quot; name=&quot;184c&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-3-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bu-sefer-oldu-gibi-5975661a525b&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-3-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bu-sefer-oldu-gibi-5975661a525b&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-3-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bu-sefer-oldu-gibi-5975661a525b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Amerika’da İlk 3 Ayım Nasıl Geçti? Bu Sefer Oldu Gibi.
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Selamlar, geçen 2 ayın yazısını hatırlayanlar vardır belki, farkı görmek isteyenler olabilir ekleyeyim yine.
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;5c9f89c6e9957b51a14bd17feb1293a4&quot; data-thumbnail-img-id=&quot;1*Wib3QJKIwxU245U8OB1fBA.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-3-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bu-sefer-oldu-gibi-5975661a525b&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*Wib3QJKIwxU245U8OB1fBA.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;4cc6&quot; name=&quot;4cc6&quot;&gt;
      Önceki yazıda büyük ihtimalle bir sonraki yazının 6. ayda geleceğini tahmin etmiştim. O yazıyı yazdığım aşamada hayatım ciddi manada oturmuş, Amerika’ya gelmenin yarattığı kültür şokunu ciddi manada atlatmış, kendimi yavaş yavaş daha rahat hissetmeye başlamıştım. Hala problemler olsa da, ilk aylardaki karamsarlığım, yaşadığım problemler çok daha azalmıştı. Yaşadığım olaylar ise daha çok doktora öğrencisi olmaktan ziyade Amerika’ya gelmem dolayısıyla yaşadığım fenomenlerdi, doktora öğrencisi olmanın ne olduğunu daha tam anlamıyla kavramamış, doktora sürecinin parçası olarak yaşayacağım problemlerle daha karşılaşmamıştım bile.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e606&quot; name=&quot;e606&quot;&gt;
      6. ayımın sonuna gelmem ile birlikte hayatımdaki olayların odağı çok daha fazla doktora öğrencisi olmama kaydı, dolayısıyla bu andan itibaren bu seriyi “Amerika’da Neler Yaşıyorum“ serisinden ziyade “Doktorada Neler Yaşıyorum” serisi olarak devam ettireceğim. Peki son 3 ay neler oldu?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a601&quot; name=&quot;a601&quot;&gt;
      1- Türkiye’ye gittim geldim.(biraz dramatikti)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;022c&quot; name=&quot;022c&quot;&gt;
      2- İlk konferansıma katıldım.(aşırı eğlenceli ve motive ediciydi)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c475&quot; name=&quot;c475&quot;&gt;
      3- İlk makale son tarihimi kaçırdım.(inanılmaz yorucu, yıpratıcı, gerici ve öğreticiydi)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;61b9&quot; name=&quot;61b9&quot;&gt;
      4- Kafamda doktora sürecinde neler yapmak istediğime, ne tip araştırmaların, ne tip konuların beni daha çok çektiğine dair pek çok fikir oluştu.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b7ae&quot; name=&quot;b7ae&quot;&gt;
      5- Yaz stajıma kabul aldım. (bu süreçle ilgili ayrı bir yazı gelecek ama burada da biraz bahsedeceğim, biraz komik, biraz gergin, genel olarak mutlu bir hikaye oldu)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e047&quot; name=&quot;e047&quot;&gt;
      6- 2 dönem 2 farklı derse asistanlık yapmış oldum(2. ye hala yapıyorum daha yarısındayım, ders vermek, hocalık ve asistanlıkla ilgili çok fazla fikir oluşturdum)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c695&quot; name=&quot;c695&quot;&gt;
      7- Alıştım. Günlerim rutine bindi, rutinlerimi değiştirmeye, günlerimi renklendirmeye, tekdüzelikten kaçmaya çabalıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0253&quot; name=&quot;0253&quot;&gt;
      Bazı maddeler belki de(belki değil, kesinlikle) kendi yazılarını hak ediyorlar. O da olacak, lakin ben şimdilik anlatabildiğim derecede son 3 ayı özetlemeye çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8d74&quot; name=&quot;8d74&quot;&gt;
      Devam etmeden önce ilk kez bir yazıyı bir akşamda bitiremeden uyuyacak kadar yorgun şekilde eve geldiğimi söyleyeyim. Şu anda 3 gün sonra devam ediyorum. Bu yetişkinlik müessesesi ile aramız hiç iyi değil…
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;4ea3&quot; name=&quot;4ea3&quot;&gt;
      Türkiye’ye gittim geldim.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;f8c9&quot; name=&quot;f8c9&quot;&gt;
      Beni tanıyan pek çok kişi ODTÜ’deki yaşamımın beni ne kadar şekillendirdiğini, karakterimin ne kadar büyük bir parçasını oluşturduğunu bilir. Bu nedenle Türkiye’ye gitmemin ailemle kavuşmaktan sonraki en önemli tarafı ODTÜ’yü tekrardan görme fırsatı bulmamdı. Oradaki hayatımı ne kadar sevdiğimi hatırladım, ne kadar eğlendiğimi, ne kadar mutlu olduğumu hatırladım. Aynı zamanda bir fırsatım daha oldu, neden gelmeye karar verdiğimi hatırladım. Buraya bir kez geldikten sonra perspektifi kaybetmek çok kolay. Hayatın yoğunluğu ve akışı içerisinde hayatta kalmaya çalışırken yaşayıp gidiyoruz çoğu zaman. Neden geldiğimizi, bizi bu karara itenleri unutuyoruz, motivasyonlarımız çok daha bulanık hale geliyor, yaşadığımız problemler gözümüzde büyüyor… Buraya gelme kararını verdiğim hayata dönmek, her ne kadar zor olursa olsun; nasıl hayallerle bu kararı verdiğimi, bu hayallerin yolunda zorlansam da devam edebildiğimi, bir zamanlar bana imkansız gözüken şeyleri başarabildiğimi, geleceğimi şekillendirdiğimi, potansiyelimi keşfetmenin en iyi yolunun(benim için) bu olduğunu gösterdi bana tekrardan. Dönerken yine biraz ağladım. Arkadaşlardan ayrılmak, aileden ayrılmak her zaman zor. Alışır mıyız bir gün diye çok sordum arkadaşlara, kimse bilmiyor; alışılıyor diyenler oldu, göreceğiz artık.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;82d0&quot; name=&quot;82d0&quot;&gt;
      İlk konferansıma katıldım.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;f9ea&quot; name=&quot;f9ea&quot;&gt;
      Doktorayla ilgili beni en çok zorlayan şeylerden birisi artılarını göremememdi. Düşük maaş, aynı anda hem ders almak, hem yeni bir hayata alışmaya çalışmak, bir derse asistanlık yapmak, bir de üstünde birden fazla projede araştırma yapmak… Tüm işlerimi birleştirdiğimde benden insanüstü bir efor istemesine rağmen doktora hayatının beni mutlu eden bir yanını hala göremiyordum. Amerika’ya döndüğüm hafta eve 1 gün uğrayıp oradan direkt ilk konferansıma katılmak bunu görmemi sağladı. 1 hafta boyunca bir otelde benimle aynı alanlarda çalışan diğer araştırmacılarla tanıştım, akranım doktora öğrencileriyle sohbet ettim, arkadaş oldum, akşamları oyunlar oynadık, şehri gezdik… Çalıştığım konuya dair motivasyonlarım daha net ve güçlü hale geldi, kendimi çalışmak ve öğrenmek için motive edebildim. Bundan sonraki tüm konferanslarımı sabırsızlıkla bekliyorum!
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;1c89&quot; name=&quot;1c89&quot;&gt;
      İlk makale son tarihimi kaçırdım.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;81bc&quot; name=&quot;81bc&quot;&gt;
      Konferanstan aldığım gazla koştura koştura College Park’a döndüm, hocamla birlikte 40 günlük bir maratona giriştik. 32. gününde projenin yetişmeyeceğine karar verip vazgeçtik. O 1 ayda neler çektiğimi bir ben, bir de her akşam benle beraber oturup çalışan diğer doktora öğrencisi canım arkadaşlarım bilir… Yoruldum, yıprandım, kendimi sorguladım. Yetişmeyeceğine karar verip ertelediğimize açıkçası mutlu oldum, çünkü öbür türlü ne içime sinen bir iş olacaktı, ne de ben huzura erebilecektim, büyük ihtimalle kabul de edilmeyecekti. Bir sonraki konferansa daha da güçlü bir şekilde hazırlanmaya devam ediyoruz. Bu süreçte kendime ne kadar çok baskı yapabildiğime dair pek çok içgörü edindim, neler yapmamam gerektiğini öğrendim. Hocam sayesinde bu durumu pozitif bir şekilde karşılayabilmenin yollarını görmüş oldum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5118&quot; name=&quot;5118&quot;&gt;
      Kafamda doktora sürecinde neler yapmak istediğime, ne tip araştırmaların, ne tip konuların beni daha çok çektiğine dair pek çok fikir oluştu.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;5631&quot; name=&quot;5631&quot;&gt;
      Doktoraya geldiğimde ne yapacağıma, nasıl yapacağımda dair hiçbir fikrim yoktu. Alanımı ciddi manada değiştirdim, son 6 aydır her şeyi neredeyse sıfırdan öğreniyorum. Bu noktada ilk başlarda kendimi inanılmaz kaybolmuş hissediyordum. Imposter Sendromu içerisinde boğuşuyor, kendimi bir türlü ait hissedemiyordum. 1 dönemdir öğrendiklerim, yaptıklarım, okuduklarım, konferansta dinlediklerim ve izlediklerim sonucunda alanıma ısındım, neler yapabileceğime, neler yapmak istediğime dair çok daha iyi bir fikir edinmeye başladım. Mutluyum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;fce4&quot; name=&quot;fce4&quot;&gt;
      Yaz stajıma kabul aldım.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf--startsWithSingleQuote graf-after--h4&quot; id=&quot;6459&quot; name=&quot;6459&quot;&gt;
      ‘Lisansüstü seviyede nasıl staj bulunur’ temalı ayrı bir yazı yazacağım kendi tecrübemi biraz daha açıp, ama kısaca Amazon NY’a yaz stajı kabulu aldım. Temmuz 2021&#x27;den itibaren 7 aylık bolca hatırlatma maili içeren, yer yer gerici, yer yer yorucu bir süreçti; çok fazla yüzsüz olmam gerekti. Sonucunda geldiğim noktadan çok mutluyum! Doktoranın faydasını göremiyorum demiştim, bu da benim için inanılmaz bir faydası olmuş oldu şu anlık.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;8112&quot; name=&quot;8112&quot;&gt;
      2 dönem 2 farklı derse asistanlık yapmış oldum.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;893d&quot; name=&quot;893d&quot;&gt;
      Bunları çoook uzun anlatmak istiyorum. Kısaca bahsetmek gerekirse, ilk dönem 3. sınıftaki Algoritmalar dersine asistanlık yaptım, bu dönemse 1. sınıftaki Nesne Yönemli Programlamaya Giriş dersinin asistanlığını yapıyorum. Asistanlık yapmayı maalesef ki sevemedim, ODTÜ’deki tüm hocalarıma ve asistanlarıma bu zamana kadarki tüm çemkirmelerim için özür dilerim; gram empati yapamadığımı görüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ff54&quot; name=&quot;ff54&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Dipnot:
      &lt;&#x2F;strong&gt;
      Arkadaşlar lütfen asistanlarınıza iyi davranın, üzmeyin onları olur mu.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;29a0&quot; name=&quot;29a0&quot;&gt;
      Alıştım.
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2c96&quot; name=&quot;2c96&quot;&gt;
      İyisiyle kötüsüyle, güzeliyle çirkiniyle burada bir hayat kurduğum fikri kafama sonunda oturdu. Araştırma, hayatını idame ettirme, asistanlık, arkadaşlıklar, dersler, araştırmalar arasında belli rutinler, düzenler oturttum; şimdi artık bu rutinleri bozma evresindeyim. Yeni rutinler oluşturmaya, var olan rutinlerimi daha beni mutlu eden şekillerde geliştirmeye çalışıyorum. ‘Düzenlisi’ olduğum mekanlar var, günlük yaptığım ritüeller, kendime ben bunu her hafta yaparım dediğim olaylar var. Sonunda şehir dışı planları yapabiliyorum, tatilleri düşünebiliyorum, var olan bir düzen olduğu için o düzeni farklı aktivitelerle ve hayallerle nasıl entegre edebileceğimi düşünebiliyorum. Düzensizlik ve kaos insanın aklını inanılmaz meşgul ediyor, riskten kaçınmaya, düzen kurmaya çok odaklanabiliyoruz. O kaçınma halinden kurtulmaya, risk alabilmeye, keşfedebilmeye geri dönmeye çalışıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7814&quot; name=&quot;7814&quot;&gt;
      Sonuç olarak, mutluyum. Yaşıyorum, iyisiyle kötüsüyle sürekli yaşıyorum, öğreniyorum, tecrübe ediyorum. Yoruluyorum, hala çok yorgunum, sürekli çabalamak zorundayım. Yaşamak için emek göstermek zorundayım, kendi sınırlarımı keşfetmek, uğraşmak zorundayım. Bunların soncundaysa yeni her kendimi tekrardan keşfettiğimde, her yeni farkındalıkta, her yenilikte biraz daha mutlu, bir daha aydınlanmış oluyorum. Işığı görmeye başladım!
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;dd34&quot; name=&quot;dd34&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;306&quot; data-image-id=&quot;1*SYRZgG5GS1H1ezp1AZQ6CA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;612&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*SYRZgG5GS1H1ezp1AZQ6CA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;8ee8faa9e94b&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-03-08T05:55:00.068Z&quot;&gt;
     March 8, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;doktoram%C4%B1n-i%CC%87lk-6-ay%C4%B1-nas%C4%B1l-ge%C3%A7ti-yo%C4%9Fun-yorgun-ama-mutlu-8ee8faa9e94b&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Doktora Kabulleri: Kapsamlı Rehber</title>
        <published>2022-01-29T00:00:00+00:00</published>
        <updated>2022-01-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/doktora-kabulleri-kapsamli-rehber/"/>
        <id>https://alperenkeles.com/posts/doktora-kabulleri-kapsamli-rehber/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/doktora-kabulleri-kapsamli-rehber/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;cd28&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;e0a8&quot; name=&quot;e0a8&quot;&gt;
      Doktora Kabulleri: Kapsamlı Rehber
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3236&quot; name=&quot;3236&quot;&gt;
      Geçtiğimiz Nisan ayında “Doktora Başvuruları: Kapsamlı Rehber” adı altında başvurular esnasında ihtiyaç duyabileceklerinizi bir kenara toplamaya çalıştığım, kendi başvurularımda keşke birisi bana bunları söyleseydi dediğim bir yazı paylaşmıştım, linkini aşağıya ekliyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;a638&quot; name=&quot;a638&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;doktora-ba%C5%9Fvurular%C4%B1-kapsaml%C4%B1-rehber-fbe5ab8465c&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;doktora-ba%C5%9Fvurular%C4%B1-kapsaml%C4%B1-rehber-fbe5ab8465c&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;doktora-ba%C5%9Fvurular%C4%B1-kapsaml%C4%B1-rehber-fbe5ab8465c&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Doktora Başvuruları: Kapsamlı Rehber
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Daha önceki yazılarımda da kısaca bahsettiğim gibi, geçtiğimiz dönem içerisinde 7 doktora başvurusu yaptım, bunlardan 2…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;cf09104b54e4b8ed81d0080f8b5de389&quot; data-thumbnail-img-id=&quot;1*EzcaQNykPf64EkzcGzqDEg.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;doktora-ba%C5%9Fvurular%C4%B1-kapsaml%C4%B1-rehber-fbe5ab8465c&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*EzcaQNykPf64EkzcGzqDEg.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;5a48&quot; name=&quot;5a48&quot;&gt;
      Yazının üzerinden neredeyse 1 yıl geçti, doktoradaki 5. ayımı bitirmem, ilk konferansıma gitmem, pek çok arkadaş edinmem, ilk projelerimde çalışmaya başlamam, arkadaşlarımın ilk 5 aylarını nasıl geçirdiğini görmem, kültür şokundan bir derece de olsa kurtulmam, danışmanımla, derslerle, laboratuarımla, projelerimle ilgili yaşadığım karmaşıklıkları belli bir seviyede çözmem gibi pek çok sebepten dolayı artık doktora nedir sorusuna çok daha iyi cevap verebildiğimi düşünüyorum, en azından kendi açımdan.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;0e0b&quot; name=&quot;0e0b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1360&quot; data-image-id=&quot;1*WgP32Ls-7CwFtJtKSuOKnA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;907&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*WgP32Ls-7CwFtJtKSuOKnA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c07c&quot; name=&quot;c07c&quot;&gt;
      Bu noktada artık okuyanlara kabul döneminde neler yapabileceklerine dair tavsiyeler verebilecek durumda olduğumu düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2681&quot; name=&quot;2681&quot;&gt;
      Diyelim ki kabul geldi,
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;fdc6&quot; name=&quot;fdc6&quot;&gt;
       Hocaya neler sormalısınız?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1271&quot; name=&quot;1271&quot;&gt;
       Hocanın öğrencilerine neler sormalısınız?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8e67&quot; name=&quot;8e67&quot;&gt;
       Hangi kaynakları kullanabilirsiniz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;eb91&quot; name=&quot;eb91&quot;&gt;
       Okul seçerken nasıl kriterleri göze almalısınız?
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;83bb&quot; name=&quot;83bb&quot;&gt;
      gibi soruları cevaplamaya çalışacağım sizler için. Aynı şekilde eğer daha başvuru sonuçlarınız belli değil ise,
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;9af4&quot; name=&quot;9af4&quot;&gt;
       Hocalara nasıl bir mail atabilirsiniz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ef5e&quot; name=&quot;ef5e&quot;&gt;
       Nasıl kaynaklardan başvuruları takip edebilirsiniz?
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;546b&quot; name=&quot;546b&quot;&gt;
      gibi sorularınızla ilgileneceğim. Bir de, her ne kadar haddim olmadığını düşünsem de, “ben olsam ne yapardım, şu anki bilgimle nasıl hareket ederdim” sorusuna cevap olarak, eğer tüm başvurularınızdan reddedildiyseniz neler yapabileceğinize dair birkaç tavsiye vermek istiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bdc3&quot; name=&quot;bdc3&quot;&gt;
      Çok vakit kaybetmeden en baştan başlayalım. Diyelim ki kabul aldınız, öncelikle tebrikler!!! İşin en zor kısmını geçirdiniz. Bundan sonraki süreç tabii ki kolay olmayacak, üzüleceksiniz, mutsuz olacaksınız, düşük maaşla çok saatler çalışacaksınız, geleceğiniz belirsiz olacak; ama doktora sahibi olacaksınız.(!)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f533&quot; name=&quot;f533&quot;&gt;
      Şaka bir yana, artısıyla eksisiyle umarım çok güzel bir süreç geçirirsiniz. Ben her ne kadar yeri geldiğinde mutsuz da olsam, yorulsam da çok fazla şey öğrendiğim, günün sonunda bana kattıklarından mutlu olduğum bir 5 ay geçirdim. Tabii ki daha yolun çok başındayız pek çok şey göreceğiz yaşayacağız, ama yer yer karşınıza çıkacak engebelerin sizi uzun vade vizyonunuzdan şaşırtmamasını, mutluluğunuza ket vurmamasını dilerim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;bba5&quot; name=&quot;bba5&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;720&quot; data-image-id=&quot;1*nVphOr78upDEa5LmYMV1vg.jpeg&quot; data-width=&quot;1080&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*nVphOr78upDEa5LmYMV1vg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a7c0&quot; name=&quot;a7c0&quot;&gt;
      Öncelikle dikkate almanız gereken faktörlerden bahsedelim.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;7a05&quot; name=&quot;7a05&quot;&gt;
      Doktora’da Okul Seçiminde Ne Önemli?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2fd3&quot; name=&quot;2fd3&quot;&gt;
      Tabii ki bu sıralama insandan insana çok değişecek, aynı şekilde bu listeye koyacağınız elemanlar da size göre değişmeli, ama genel bir çerçeve olarak benim görüşüm.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;74d2&quot; name=&quot;74d2&quot;&gt;
       Hoca&#x2F;Danışman
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;eb99&quot; name=&quot;eb99&quot;&gt;
       Laboratuvarın Araştırma Kültürü
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d267&quot; name=&quot;d267&quot;&gt;
       Okul
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8d01&quot; name=&quot;8d01&quot;&gt;
       Ülke&#x2F;Şehir
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9276&quot; name=&quot;9276&quot;&gt;
       Maaş
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2aac&quot; name=&quot;2aac&quot;&gt;
       Bölümün Lisansüstü Kültürü
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;32f4&quot; name=&quot;32f4&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Hoca&#x2F;Danışman İle Başlayalım
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6886&quot; name=&quot;6886&quot;&gt;
      Danışmanınız inanılmaz önemli. Sonraki 4–6 yıl boyunca çok ciddi vakit geçireceğiniz, başarılarınızı ve başarısızlıklarınızı paylaşacağınız, sizin ne yapacağınıza karar verecek, ne kadar çalışacağınıza, nasıl çalışacağınıza karar verecek kişi danışmanınız olacak. Burada çok genel bazı stereotipler var. Mesela “Yaşlı hoca daha tecrübeli olur, çevresi geniş olur ama öğrenciyle ilgilenecek vakti daha az olur.”, diğer yandan “Genç hocanın tecrübesi veya çevresi daha az olur, ama öğrenciyle ilgilenecek vakti daha fazla olur, projeyle daha içli dışlı olur” gibi genel kabuller var; benim şahsi gözlemime göre o kadar gerçeklikten uzak da değiller.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;44f7&quot; name=&quot;44f7&quot;&gt;
      Ben şu an bir genç bir de görece daha tecrübeli bir hocayla çalışıyorum, genç hocamın alıp benim kodumu düzeltip geri göndermişliği var, çok daha kolay bir şekilde boş saatinde toplantı ayarlayabiliyoruz, daha esnek. Ancak her genelleme gibi, bu genellemeler de hatalı. Kişinin kendisini araştırmak, tanımak gerek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f138&quot; name=&quot;f138&quot;&gt;
      Eğer bir insanla 5 yıl çalışacaksanız, beraber espri yapabiliyor musunuz, sizi anlıyor mu, kişiliğiniz uyuşuyor mu, düşünce yapılarınız benziyor mu… gibi gibi pek çok soru ortaya çıkıyor. Doktora aşırı zihinsel bir iş, eğer danışmanınıza rahat bir şekilde soru soramıyorsanız, fikrini alamıyorsanız, kendi fikirlerinizi anlatamıyorsanız bir problem var demektir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5dc2&quot; name=&quot;5dc2&quot;&gt;
      Aynı şekilde danışman&#x2F;öğrenci ilişkisinin inanılmaz asimetrik bir güç dinamiğine sahip olmasından kaynaklı olarak(danışman öğrenci üzerinde çok ciddi güce sahip, basbayağı geleceğini kontrol ediyor aslında) sizinle sağlıklı bir ilişki kuracak, güveninizi ve çabanızı suistimal etmeyecek danışmanlar bulmanız önemli. Peki bunları nasıl anlayabilirsiniz?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;316f&quot; name=&quot;316f&quot;&gt;
      Hocanın blog postları olsun, kişisel web sitesi olsun bunları inceleyin. Eğer önceden video görüşme yapmadıysanız kesinlikle yapmaya çalışın. Eski öğrencileriyle görüşün, şu anki tecrübeli öğrencileri ile görüşün, yeni öğrencileri ile görüşün. Öğrencilerle konuşurken korkmayın, öğrenciler sizin dostunuz olacaktır; öğrencinin halinden en iyi öğrenci anlar. Aklınıza gelen soruları mümkün olduğunca sormaya çalışın, yanlış bir seçimden dönmek o seçimi başta yapmamaktan her zaman daha zordur. Pişman olacağınıza paranoyak olmaya çalışın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8133&quot; name=&quot;8133&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Laboratuvar Araştırma Kültürü Nedir?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;910c&quot; name=&quot;910c&quot;&gt;
      Dışardan bakınca bu kelimeler yan yana geldiğinde sizin için hiçbir şey ifade etmiyor olabilir, normaldir. Benim için de aşırı kesin anlamları olduğunu söylemeyeceğim. Ama genel olarak şu tip soruların cevaplarını bilmeniz iyi olur.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;fc2d&quot; name=&quot;fc2d&quot;&gt;
       Hoca öğrencilerinden nasıl bir performans bekliyor? Bazı hocalar ilk yıl makale ister, bazıları 3. yılında çıkarsan da olur yeter ki çok iyi bir konferansa gitsin der, bazıları nasıl istersen öyle gidebilirsin şeklinde yaklaşır. Hocanın yaklaşımını bilmek, sizin beklentilerinizi de daha net oturtur, kendinizi beklemediğiniz bir tempoda bulmamış olursunuz.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;5578&quot; name=&quot;5578&quot;&gt;
       Ne kadar hiyerarşik bir yapı mevcut? Bazı lablarda hocayla çok fazla direkt iletişime geçip beraber çalışırken, bazı lablarda çoğunlukla Postdoc’larla çalışıyor olabilirsiniz. Eğer “ben bu hocayla birlikte araştırma yapmak istiyorum” şeklinde bir beklentiyle gidip bir anda kendinizi Postdoc’la çalışıyor bulursanız, doktora motivasyonunuz daha başlamadan düşebilir. Beklentileri oturtmak önemli.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c222&quot; name=&quot;c222&quot;&gt;
       Çalışma sistemi nasıl? Bazı lablar 8–5 çalışır, bazıları haftada yalnızca 2 saat senkron toplantı yapar. Size uygun olan sistemi seçmek gerek.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c483&quot; name=&quot;c483&quot;&gt;
       Genel olarak o labda insanların çalışma motivasyonları, tarzları, istekleri, gereklilikleri… vesaire nasıl? Ondan sonraki 5 yılınızı oradaki insanlarla birlikte aynı ortamda atmosferde çalışarak geçireceksiniz. Toksik rekabetin olduğu bir ortamda bulunmak istemezsiniz mesela. Sevdiğiniz insanlarla birlikte çok daha iyi çalışacaksınız, o yüzden seveceğiniz insanların olacağını düşündüğünüz ortamları yeğlemelisiniz.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;f69e&quot; name=&quot;f69e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Okul
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1825&quot; name=&quot;1825&quot;&gt;
      Okul kısmı biraz karışık. İyi bir okul olması tabii ki iyi, ama iyi okul tam olarak ne demek? İki okulu nasıl karşılaştırırsınız? İnternetteki sıralamaların çoğu lisans seviyesinde fena olmayan karşılaştırmalar verse de lisansüstü seviyede yeterli bilgiyi sağlamayacak. Aynı şekilde bölüm sıralamalarını ne derece karşılaştırabileceksiniz?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7ddc&quot; name=&quot;7ddc&quot;&gt;
      Genel olarak mezunu olmaktan mutlu olacağınız bir okul seçmeye çalışmanızı tavsiye ederim. Sadece okula bağlı olarak seçim yapılmaz, ama okul hiçbir şey de değil. Kimliğiniz okula bağımlı, iş başvurularınız okula yine belli bir seviyede bağımlı, yaşantınız okula bağımlı. Barınmanız, yemeniz, içmeniz, maaşınız, çevreniz okula bağlı. Bunları değerlendirmek gerek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;afe9&quot; name=&quot;afe9&quot;&gt;
      Kesin söyleyebileceğim en önemli şey sadece okul adına&#x2F;sıralamasına bakarak seçim yapmanızın mümkün olmadığı. Sizin için önemli olan faktörleri görüp ona göre karar vermeniz gerek. Bilgisayar mühendisliği için csrankings.org gibi siteler var, sizin bölümünüz için de var mı bakabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5791&quot; name=&quot;5791&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ülke&#x2F;Şehir
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5c6b&quot; name=&quot;5c6b&quot;&gt;
      Her ne kadar burada 4. sırada gibi gözükse de aslında belki de en önemlisi olabilir ülke şehir. Genel olarak ortalama 2 şehir arasındaki fark sizin için aşırı etkilemese de, ciddi farklılıklar hayatınızı hayal edemeyeceğiniz derecede değiştirecektir.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;aa9b&quot; name=&quot;aa9b&quot;&gt;
       Banliyö ve şehir hayatı arasındaki farklar
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6ef4&quot; name=&quot;6ef4&quot;&gt;
       Avrupa&#x2F;Amerika&#x2F;Asya farkları
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ae0c&quot; name=&quot;ae0c&quot;&gt;
       Aynı kıtada bile ülke&#x2F;şehir bazındaki farklılıklar çok önemli.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;47ed&quot; name=&quot;47ed&quot;&gt;
      Ne olursa olsun, hiçbir zaman unutmayın siz orada en az 4–5 yıl yaşayacaksınız. Sevmediğiniz bir yerde 5 yıl yaşamak istemezsiniz, bana güvenin. Yaşadığı şehirleri beğenmeyip doktorayı bırakmayı düşünen arkadaşlarım var sırf bunun yüzünden.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;04fd&quot; name=&quot;04fd&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Maaş
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7f78&quot; name=&quot;7f78&quot;&gt;
      Doktora yaparken belli bir seviyede maaşınızın düşük olacağını zaten kabulleniyorsunuz, ama bu yine de üstüne düşünmemeniz gerektiğini göstermiyor. Maaşınızı tam detayıyla sorun.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;71f5&quot; name=&quot;71f5&quot;&gt;
       Ne şekilde bir maaş yapısı var? Toplam para kaç ayda, hangi aralıklarla veriliyor?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3e11&quot; name=&quot;3e11&quot;&gt;
       Ne kadar vergi ödeyeceksiniz? Bunu hocalara&#x2F;idareye sorduğunuzda çoğu zaman bilmiyor olurlar, bölümdeki diğer öğrencilere sorun.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;03fd&quot; name=&quot;03fd&quot;&gt;
       Aylık ortalama harcamanız ne kadar?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0672&quot; name=&quot;0672&quot;&gt;
       Ek iş yapabiliyor musunuz, ek çalışabiliyor musunuz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6c59&quot; name=&quot;6c59&quot;&gt;
       Yazları staj yapabiliyor musunuz, staj imkanları nasıl?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d639&quot; name=&quot;d639&quot;&gt;
       Ekstra ücretler var mı. Benim okulumun mesela dünyanın en saçma dönemlik 542.5$ bir ücreti var. Yıllık aldığımı düşündüğüm ücretin 1100 dolarını oraya veriyorum, rezillik. Bu tarz durumları gitmeden öğrenin ki bütçe planlaması yapabilin.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e900&quot; name=&quot;e900&quot;&gt;
       Eğer yeterince para kazanmıyorsanız, huzursuz olacaksınız. Huzursuzsanız, mutsuzsanız, çalışamazsınız. Çalışsanız bile, verimli çalışamazsınız. Bunu kendinize yapmayın, hayat bu şekilde yaşamak için çok kısa.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;e91e&quot; name=&quot;e91e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bölümün Lisansüstü Kültürü
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4031&quot; name=&quot;4031&quot;&gt;
      Bu da yine biraz soyut kalıyor, örneklerle açıklamaya çalışayım. Ben kendi bölümümün lisansüstü kültürünü çok seviyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;05b0&quot; name=&quot;05b0&quot;&gt;
       Tüm lisansüstü öğrencilerin olduğu toplu bir slack channelı
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2e0e&quot; name=&quot;2e0e&quot;&gt;
       Lisansüstü öğrenci topluluğu ve düzenlediği etkinlikler
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;898e&quot; name=&quot;898e&quot;&gt;
       Haftada bir gün 2 saat kahve eşliğinde sosyalleşme etkinliği
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1477&quot; name=&quot;1477&quot;&gt;
       Yeni gelen lisansüstü öğrencileri için etkinlikler, mentörlük sistemleri
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;7fbe&quot; name=&quot;7fbe&quot;&gt;
       Genel olarak araştırma odaklı lisansüstü dersler. Minimal ödev, minimal sınav, notun ciddi bir kısmı araştırma projesinden geliyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3028&quot; name=&quot;3028&quot;&gt;
       Aynı şekilde araştırmaya odaklanmamız için minimal sayıda ders.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;1570&quot; name=&quot;1570&quot;&gt;
      Bu tarz farklı faktörler okulun&#x2F;bölümün lisansüstü departmanına nasıl baktığını gösteriyor. Bu kültür sizin yaşayacağınız sistemik problemleri hızlı çözmenizi sağlayabiliyor, bazen yaşamadan engelliyor. Önden araştırmak çok zor, öğrencilerle konuşmanızı tavsiye ederim bu sebepten dolayı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2b3f&quot; name=&quot;2b3f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ne Tarz Kaynaklar Var?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;5681&quot; name=&quot;5681&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.thegradcafe.com&quot; href=&quot;https:&#x2F;&#x2F;www.thegradcafe.com&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.thegradcafe.com
       &lt;&#x2F;a&gt;
       — İnsanların başvuru sonuçlarını aldıklarında paylaştıkları bir web sitesi
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f843&quot; name=&quot;f843&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.quora.com&quot; href=&quot;https:&#x2F;&#x2F;www.quora.com&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.quora.com
       &lt;&#x2F;a&gt;
       — İnsanların soru sordukları, başkalarının cevapladıkları bir site. Quora’daki cevapları inceleyebilirsiniz, kendi sorularınızı sorabilirsiniz. Çok kaliteli farklı arka planlardan insanlar var, ciddi efor sarf ediyorlar cevaplar için yeri geldiğinde. Sorularınızı sorabilirsiniz.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;27d3&quot; name=&quot;27d3&quot;&gt;
       Üniversitelerin sanal ziyaret günleri. Profesörlerle konuşmak için kaydolabilir, genel sunumlara katılabilirsiniz.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;36c7&quot; name=&quot;36c7&quot;&gt;
       (aklınıza gelen kaynak varsa yorum olarak ya da alpkeles99@gmail.com’a ya da bana başka herhangi bir şekilde iletirseniz size bir kahve ısmarlar + kredi vererek kaynağı buraya eklerim, şimdiden teşekkürler)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;a2d3&quot; name=&quot;a2d3&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sonuçlarım daha belli değil, ne yapmalıyım?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d152&quot; name=&quot;d152&quot;&gt;
      Öncelikle gradcafe’yi inceleyin. Eğer daha hiçbir şey belli değilse, büyük ihtimalle zaten hiçbir şey belli değildir; çok da bir şey yapmasanız da olur. Eğer bölümden kabuller gelmeye başlamışsa, yanına başvurduğunuz hocayı kibarca dürtüp varlığınızı hatırlatabilirsiniz. Çoğu zaman bu aşamada artık çok da yapabileceğiniz bir şey olmuyor ama kendinizi hatırlatmanız hiçbir zaman kötü değildir. Aşağıya küçük bir İngilizce şablon bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;7603&quot; name=&quot;7603&quot;&gt;
      Subject: PhD Application Inquiry
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;99b7&quot; name=&quot;99b7&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Dear Professor [Name],
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;1162&quot; name=&quot;1162&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        I hope you are doing well, I have recently saw that admissions are concluded&#x2F;in the process of conclusion and wanted to ask if there is anything I might or should do at this point.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;4d65&quot; name=&quot;4d65&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Sincerely,
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;2a02&quot; name=&quot;2a02&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        [Name]
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;a830&quot; name=&quot;a830&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        PhD. Applicant
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;7a3c&quot; name=&quot;7a3c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Tüm başvurularımdan reddedildim, ne yapmalıyım?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5bc7&quot; name=&quot;5bc7&quot;&gt;
      En başta da belirttiğim gibi, ben şanslıydım, bu durumla boğuşmam gerekmedi; ama yine de birkaç fikrimi belirtmek istiyorum. Öncelikle, geçmiş olsun. Kesinlikle hak etmediğiniz için reddedilmediniz. Birkaç tane çok basit ama o ret aşamasında aklınıza gelmeyecek ihtimal bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;70d5&quot; name=&quot;70d5&quot;&gt;
       Hocalar öğrencileri o anki fon miktarlarına göre alıyorlar. Başvurduğunuz hocanın yeterli fonu olmayabilir, belki de o yıl öğrenci almayacaktır. Bu duruma düşmemek için önden konuşmak iyi olabilir, ancak genel olarak bu çok sık karşılaşılan ve insanların farkında olmadığı bir durum. Yeterince iyi olmadığınız için alınmamış gibi hissetmeyin, hiç kimse alınmamış da olabilir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d291&quot; name=&quot;d291&quot;&gt;
       Çoğu zaman çok fazla çok iyi başvuru arasından 1–2 kişinin seçildiği bir süreç doktora süreci. Maalesef ki sistemin içinde aşırı fazla şans oluyor bu durumda. Bu şansı mümkün olduğunca fazla farklı yere başvurarak, hocalarla önden konuşup başvuruyu daha güçlü hale getirerek arttırabilirsiniz, ama yine de ortada bir şans faktörü var. Moralinizi bozmamak, bir sonrakine devam etmek önemli.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;1551&quot; name=&quot;1551&quot;&gt;
      Bu gibi sebeplerden ötürü sakin kalmak önemli. Gerekli ön hazırlığı ve çalışmayı yaptıysanız, ortaya koyduğunuz mektupla, çabayla, referanslarla, özgeçmişle mutluysanız, mutlu olmaya devam edin. Umarım sizi mutlu edecek bir sonuca ulaşırsınız!
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;ff10&quot; name=&quot;ff10&quot;&gt;
      Yazı genel olarak bu kadardı, normalde buraya geldikten sonra olacaklara da değinmek istiyordum ama yeterince uzattım zaten, bir sonrakineymiş artık. Kendiniz iyi bakın, sağlıcakla. Yorumlarınızı, eleştirilerinizi, fikirlerinizi bekliyorum!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;bf6e158a8f19&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-01-29T07:16:14.530Z&quot;&gt;
     January 29, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;doktora-kabulleri-kapsaml%C4%B1-rehber-bf6e158a8f19&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Hatırlamak</title>
        <published>2022-01-25T00:00:00+00:00</published>
        <updated>2022-01-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/hatirlamak/"/>
        <id>https://alperenkeles.com/posts/hatirlamak/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/hatirlamak/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;406c&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;9e2d&quot; name=&quot;9e2d&quot;&gt;
      Hatırlamak
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1865&quot; name=&quot;1865&quot;&gt;
      Bu yazıyı geçmişte birkaç kez daha yazmaya çalıştım. Her seferinde içime sinen bir başlık bulamayıp bırakıyorum. “Beyin ve İlişkilendirme”, “Müziğin Hafızası”, “Anın Anahtarı” gibi pek çok farklı başlık denedim, hiçbirisinin aslında aktarmak istediğim mesajı anlatmadığını hissettim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;57fc&quot; name=&quot;57fc&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;456&quot; data-image-id=&quot;1*PE0hCeURgPx2yiLJiUvo5Q.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;810&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*PE0hCeURgPx2yiLJiUvo5Q.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;cad9&quot; name=&quot;cad9&quot;&gt;
      Anlatmak istediğim şey çok basit.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e436&quot; name=&quot;e436&quot;&gt;
      Hiçbir anımız yalnız başına değil. İnsanlar, kokular, sesler, gördüklerimiz, hepsi hep birlikte bir paket olarak beynimize yükleniyor. Bir anıyı beynimize kaydederken sadece bir kısmını kaydetmiyoruz, o anki her şeyi beraber kaydediyoruz. Peki bu ne demek?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;563d&quot; name=&quot;563d&quot;&gt;
      Benim için en basit örnek kitap&#x2F;müzik ilişkilendirmesi. Kendime koymaya çabaladığım bir kural var. Bir kitabı okumaya başladığım anda bir şarkı seçip bitirene kadar devam etmeye çalışıyorum. Mesela dün Adam Grant’in Originals kitabına ve X Ambassadors’ın Unconsolable şarkısına başladım aynı anda. Kitap bitene kadar çoookça kez şarkıyı dinliyor olacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c033&quot; name=&quot;c033&quot;&gt;
      Kendi tecrübelerime göre şu yaşanacak, ne zaman kitabı okusam kafamın arka planında bu şarkı çalmaya başlıyor olacak; ne zaman şarkıyı dinlesem kitaptan okuduğum parçalar aklıma gelecek. Bu ne işe yarıyor derseniz, pratikte sanırım hiçbir faydası yok. En azından ben düşünemiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f972&quot; name=&quot;f972&quot;&gt;
      Ama hayat kısa. 4000 haftacık. Hatırladığımız her anı, geçmişi bizim için bir adım daha değerli hale getiriyor. Eğer hatırlamak için bu kadar basit bir mekanizmamız varsa neden bunu kendi faydamıza kullanmayalım ki. Kitabı hatırlasam ne olacak diyor olabilirsiniz, daha güzel örneklerim de var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;801c&quot; name=&quot;801c&quot;&gt;
      2019 yazında Almanya’da stajdaydım. Akşamları işten çıktıktan sonra gittiğim bir teras vardı. Ed Sheeran’ın Collaborations albümünü açar, oturur içinden geldiğince yazar, çizer, yürür, doğayı izlerdim. Tam şu aşağıya koyduğum fotoğraftaki büyük binanın arkasındaydı.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8006&quot; name=&quot;8006&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;691&quot; data-image-id=&quot;1*UcgUCRI6E68QlvW-YrnVoQ.jpeg&quot; data-width=&quot;1000&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*UcgUCRI6E68QlvW-YrnVoQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;0cf9&quot; name=&quot;0cf9&quot;&gt;
      Hala Collaborations’tan bir şarkı açıp gözümü kapattığımda o anlara gidebildiğimi görebiliyorum. Terasta yürüdüğümü, rüzgara karşı kağıtlarım uçmasın diye koştuğumu, bir gün gelen Türk şarkıcıları dinlediğimi bile hatırlıyorum. O teras ile o şarkı beynimde yıllardır sökülemeyen bir bağlantı oluşturdu.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d076&quot; name=&quot;d076&quot;&gt;
      Sırf bu sebepten her gezimde ayrı bir Spotify playlisti yapıyorum mesela. France, Germany, Kopenhagen, İstanbul… bir sürü şehir isimli playlistim var. Küçük bir şey, benim alanım da değil, ama belki de birilerinin birkaç anısını hatırlamasına, küçük detayların hatrında kalmasına yardımcı olurum diye paylaşmak istedim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;3f5f&quot; name=&quot;3f5f&quot;&gt;
      Umarım denersiniz, umarım hoşunuza gider, umarım işinize yarar.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;87e148ae241f&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-01-25T23:53:46.708Z&quot;&gt;
     January 25, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;hat%C4%B1rlamak-87e148ae241f&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Lokasyon Bazlı Ödeme Hakkında Bazı Düşünceler</title>
        <published>2022-01-16T00:00:00+00:00</published>
        <updated>2022-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/lokasyon-bazli-odeme-hakkinda-bazi-dusunceler/"/>
        <id>https://alperenkeles.com/posts/lokasyon-bazli-odeme-hakkinda-bazi-dusunceler/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/lokasyon-bazli-odeme-hakkinda-bazi-dusunceler/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;23e5&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;7751&quot; name=&quot;7751&quot;&gt;
      Lokasyon Bazlı Ödeme Hakkında Bazı Düşünceler
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;9492&quot; name=&quot;9492&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;960&quot; data-image-id=&quot;1*29CZclPcQpx6oWpSuW1r0Q.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1440&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*29CZclPcQpx6oWpSuW1r0Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;5d22&quot; name=&quot;5d22&quot;&gt;
      Son günlerde yazılımcı Twitter’ında maaşlarla ilgili genel bir tartışma dönüyor. Bu tarz durumlarda fikirlerimizi Twitter üzerinden yazmaya çalıştığımızda sitenin yapısı gereği genelde kısa&#x2F;temelini kuramadığımız&#x2F;yeterli açıklama yapamadığımız bir şekilde ifade ediyoruz. (Kimse için önemli olduğundan değil ama yine de) Kendi düşüncelerimi ve argümanlarımı bir blog postta toplamak istedim. Tartışmayı etik bir düzleme koymaktan ziyade(ahlaki bakış açısının görece subjektif olduğunu düşünüyorum), daha finansal olarak incelemeye çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f369&quot; name=&quot;f369&quot;&gt;
      Tartışmanın genel ekseni şu şekilde. A şirketi X ve Y şehirlerinden&#x2F;ülkelerinden 2 farklı kişi(tartışma bağlamında genelde yazılımcı) çalıştırıyor. Bu kişilerin aldıkları maaş neye göre belirlenmeli? Yaptıkları işe göre mi? Yoksa yaşadıkları yerin yaşam masrafına göre mi? Soru günün sonunda bu kadar basit kalmıyor, tek bir cevapta birleştirmek de imkansıza yakın, ama deneyelim bakalım.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;34d0&quot; name=&quot;34d0&quot;&gt;
      Basit bir senaryodan başlayıp, senaryoyu çeşitlendirerek durumları analiz etmeye çalışalım.
     &lt;&#x2F;h4&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--h4&quot; id=&quot;a4a7&quot; name=&quot;a4a7&quot;&gt;
      En Basit Senaryo:
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;06f2&quot; name=&quot;06f2&quot;&gt;
       X çalışanı İstanbul’da yaşıyor. Yaşam masrafı 10.000 ₺
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3a50&quot; name=&quot;3a50&quot;&gt;
       Y çalışanı Ankara’da yaşıyor. Yaşam masrafı 7.000 ₺
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;eb75&quot; name=&quot;eb75&quot;&gt;
       Şirket yer bazlı maaş uygulaması yapmıyor, aynı pozisyonda aynı işi yapan bu iki kişiye aynı maaşı veriyor, bu maaş da 12.000 ₺ olsun.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;f51d&quot; name=&quot;f51d&quot;&gt;
      Bu noktada Ankara’da çalışan kişi net bir şekilde avantajlı oluyor(mu acaba?). Ay sonunda bir kişinin elinde 5.000₺ kalırken diğerinde 2.000₺ kalıyor. Twitter’da birkaç defa gördüğüm argümanlardan birisi herkesin eninde sonunda Ankara’ya taşınacağı.(orijinal örnekte aklımda Hindistan&#x2F;Los Angeles olarak kalmış bu şehirler)Bu argümanı birkaç sebepten ötürü çok da mantıklı göremiyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;70a2&quot; name=&quot;70a2&quot;&gt;
       Ankara&#x2F;İstanbul arasındaki tek fark yaşam masrafı değil. Sosyokültürel yapı, ulaşım, barınma imkanları, aktivite çeşitliliği, yaşam tarzı… Burada akla gelmeyecek pek çok daha farklı nokta var. İnsanlar bir şehirde yaşamayı seçerken orada en iyi maaşı aldıkları için seçmek zorunda değiller, özellikle aldıkları maaş zaten kendilerine yeten bir maaşsa. Herkesin maaş maksimizasyonuna gideceğine inanmak biraz insanlıktan uzak bir bakış açısı gibi geliyor bana.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6716&quot; name=&quot;6716&quot;&gt;
       Aynı şekilde, bu tarz bir “taşınma” hareketi o kadar basit nitelendirilebilecek bir hareket değil. Para insanların hayatındaki tek motivasyon değil.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;db78&quot; name=&quot;db78&quot;&gt;
      Bu noktada tartışmanın eksenini şirket bakış açısına kaydırmak gerekiyor. Şirketler sınırlı kaynakla maksimum kar elde etme hedefiyle yönetilen kurumlar. Ödedikleri maaş da bu kaynaklardan birisi. Bu da şu şekilde bir sonuca yol açıyor.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;d820&quot; name=&quot;d820&quot;&gt;
       A ve B şirketlerini ele alalım.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d9fa&quot; name=&quot;d9fa&quot;&gt;
       2 çalışan için de 2 şirketin toplam ödeme bütçesi 24.000₺ olsun.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c1a5&quot; name=&quot;c1a5&quot;&gt;
       A şirketi lokasyon bağımsız ödeme yapsın, yani yukarıdaki gibi X çalışanına da Y çalışanına da bu ödemeyi 12.000₺ olarak bölüştürsün.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8076&quot; name=&quot;8076&quot;&gt;
       B şirketi lokasyon bazlı ödeme yapsın.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;dfd7&quot; name=&quot;dfd7&quot;&gt;
       X çalışanına 10.000 + 3.500 = 13.500₺
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c397&quot; name=&quot;c397&quot;&gt;
       Y çalışanına 7.000 + 3.500 = 10.500₺
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;8b19&quot; name=&quot;8b19&quot;&gt;
      Hem şirketlerin, hem de çalışanların tek motivasyonunun para olduğunu varsayalım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2c51&quot; name=&quot;2c51&quot;&gt;
      Eşit ücret ödeyen şirket her yerden çalışan alabilir. Dolayısıyla zaten lokasyon bazlı ödeme yapan şirkette daha düşük ücret alacak olan Ankaralı çalışan eşit ücret ödeyen A şirketine gitmeyi tercih edecektir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c8cc&quot; name=&quot;c8cc&quot;&gt;
      Lokasyon bazlı ödeme yapan şirketin en temel amacı İstanbullu çalışanı kaybetmemek. Ama bunu yaparken Ankaralı hiçbir çalışanı alamayacağı için(herkesin hayattaki tek motivasyonu para olduğundan hepsi A şirketine gitti), B şirketi tamamen İstanbullu çalıştırmak zorunda. Bu noktada B şirketi lokalizasyon yapmadığı duruma göre daha zararda hale geldi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dc5e&quot; name=&quot;dc5e&quot;&gt;
      Yani tüm market açık olsa, herkes tamamen para odaklı çalışsa, şirketlerin verebildiği ücretler birbiriyle eşit olsa şirketin lokalizasyon yapması mantıksız. E peki bu şirketler bunu neden yapıyor? Çünkü şirketlerin finansal güçleri birbirine eşit değil.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;3b7e&quot; name=&quot;3b7e&quot;&gt;
      Senaryo 2:
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1f2a&quot; name=&quot;1f2a&quot;&gt;
      İstanbul&#x2F;Ankara’yı gelin İstanbul&#x2F;Silikon Vadisi yapalım.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;d271&quot; name=&quot;d271&quot;&gt;
       İstanbul’da yaşam masrafı 10.000₺
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;b05d&quot; name=&quot;b05d&quot;&gt;
       Silikon Vadisinde yaşam masrafı 100.000₺
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2fac&quot; name=&quot;2fac&quot;&gt;
       A şirketi bu zamana kadar Silikon Vadisinde iş yapan bir şirket olsun, dolayısıyla çalışanlarına 120.000₺ ödüyor olsun. Şirket uzaktan çalışmanın avantajlarını görüp İstanbul’daki iyi yazılımcıları almak istiyor olsun. Şirket İstanbul’daki yazılımcılara 120.000₺ ödese İstanbul’da başka şirkette yazılımcı kalmaz. Ama bu durum 40.000₺ için de geçerli. Dolayısıyla şirketin bakış açısından 120.000₺’ye 1 yazılımcı çalıştırmaktansa 40.000₺’ye 3 yazılımcı çalıştırmak çok mantıklı hale geliyor. Bu ücret ile yarışabilecek yerel hiçbir şirket olmadığından dolayı çok rahat bir şekilde istediği yazılımcıyı alabiliyor.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;3066&quot; name=&quot;3066&quot;&gt;
      Burada yazılımcıların ne yaptığını tartışmak gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;da9f&quot; name=&quot;da9f&quot;&gt;
       Taşınmak kolay olsa, yazılımcı İstanbul’dan Los Angeles’a taşınabilir. Maaş’tan sonra elinde kalan para aynı bile olacak olsa, gideceği ofisin imkanları, orada kazanacağı network, önüne açılacak diğer ihtimaller çok daha büyük olacaktır. Ancak hepimizin bildiği gibi ülkeler arası taşınmanın bürokratik, siyasi, kültürel, ekonomik, sosyal çok fazla engeli var.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;01a2&quot; name=&quot;01a2&quot;&gt;
       Para harici elementleri elediğimizden dolayı, yazılımcıların önünde bu şirketlerden gelecek teklifi kabul etmekten başka seçenek kalmıyor.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;3f55&quot; name=&quot;3f55&quot;&gt;
      Peki ya bir Türk bir küresel şirket yerine, 2 tane küresel şirketi tartışırsak ne olacak?
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;4ec4&quot; name=&quot;4ec4&quot;&gt;
      Senaryo 3:
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;baee&quot; name=&quot;baee&quot;&gt;
       A şirketi İstanbul’a 40.000₺, Silikon Vadisine 120.000₺ ödüyor olsun.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4194&quot; name=&quot;4194&quot;&gt;
       B şirketi İstanbul’a da, Silikon Vadisine de 80.000₺ ödüyor olsun.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;b9a0&quot; name=&quot;b9a0&quot;&gt;
       Silikon vadisindeki tüm yazılımcılar A şirketine gidecek.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;03f8&quot; name=&quot;03f8&quot;&gt;
       İstanbul’daki tüm yazılımcılar B şirketine gidecek.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;747f&quot; name=&quot;747f&quot;&gt;
       Yani şirket açısından baktığımızda lokalizasyon sayesinde yine kar edemiyor hale gelecek.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;4a5b&quot; name=&quot;4a5b&quot;&gt;
      Bu durumda yapılacak en basit varsayım, yurtdışı bazlı firmaların lokalizasyonla aslında kar edememeleri gerektiği. Peki nasıl kar ediyorlar? Yerel şirketlerin verdikleri maaşları ezerek. Piyasada yazılımcı sayısı küresel firmaların ihtiyaç duyduğunun çok üstünde. Bu şirketler lokalizasyon uygulayarak hala piyasadan ihtiyaç duydukları tüm yazılımcıları toplayabiliyorlar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;45a1&quot; name=&quot;45a1&quot;&gt;
      Bu zamana kadar her şeyi şirketler açısından konuştuk, çok fazla basitleştirmiş olsam da genel manasıyla iç dinamiklerin en azından belli bir kısmını kapsayabildiğimi umuyorum. Bu noktada topu freelancer yazılımcılara çevirmek istiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d890&quot; name=&quot;d890&quot;&gt;
      Bahsettiğim şirket ücreti lokasyona göre ayarlar ona göre çalışan bulur dinamiğinin tamamen simetriği freelancer ücreti lokasyona göre ayarlar ona göre çalışacak iş bulur konseptinde tutuyor. Şirketlerin yaptığı ne derece etikse ve komikse, freelancer’ın yaptığını da benzer değerlendirmek gerekecektir. Kısaca açıklamak gerekirse.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;ac29&quot; name=&quot;ac29&quot;&gt;
       A Freelancer’ı lokalizasyon yapıyor, İngiltere’deki işe 20.000₺, Türkiye’deki işe 5000₺ alıyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ec15&quot; name=&quot;ec15&quot;&gt;
       B Freelancer’ı lokalizasyon yapmıyor. İki işe de 12.500₺ alıyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c910&quot; name=&quot;c910&quot;&gt;
       A kişisi Türkiye’deki tüm işleri alırken, B kişisi İngiltere’deki tüm işleri alıyor olacak.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;ab5e&quot; name=&quot;ab5e&quot;&gt;
      3 senaryonun hepsi benzer şekilde bu duruma uyarlanabilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c2c7&quot; name=&quot;c2c7&quot;&gt;
      Burada gerçek hayatta çok daha kompleks olan market analizleri, etik, para harici tüm motivasyonları yok sayarak durumu belli bir seviyede analiz etmeye çalıştım; bu halinde bile üzerine düşünürken emin olamadığım çok fazla nokta oldu. Günün sonucunda varabildiğim tek sonuç şu, Twitter’da birbirimize 280 karakterle ahkem kesmeden önce biraz daha düşünmek gerekiyor sanırım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;de43&quot; name=&quot;de43&quot;&gt;
      Benim şahsi düşüncem ne peki? Tabii ki serbest piyasada herkes her şeyi yapabilir, ama ben lokalizasyon yapan bir şirkette çalışmam. Kısa vade kar maksimizasyonu yapan şirketin uzun vade vizyonundan o şirketteki yazılımcının da fayda sağlayacağını düşünmüyorum. Şirketler kar odaklı varlıklar, çalışanların yaptığı her iş eninde sonunda paraya dönüşüyor. Bence bir şirket bir çalışana yaptığı işin şirkete değerine göre ücret ödemeli, paranın çalışan için değerine göre değil. Şirketle çalışan arasındaki kontratın işin kendisinin değerinden uzaklaşıp tamamen paraya bağlı hassas bir dengeye dönüşmesi halinde herhangi bir çalışanın şirketine bağlı olacağını düşünmüyorum. Belki de günümüzde yazılımcıların 6 ay, 1 yıl gibi sürelerle sürekli iş değiştirmesinin ardında yatan sebeplerden birisi budur, bilemiyorum. Karmaşık bir konu, kalp kırmaya, kesin hükümlerde bulunmaya gerek yok gibi hissediyorum; hiçbirimiz tam anlamıyla haklı değiliz.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;8ac9bb1161ca&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-01-17T01:35:39.065Z&quot;&gt;
     January 17, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;lokasyon-bazl%C4%B1-%C3%B6deme-hakk%C4%B1nda-baz%C4%B1-d%C3%BC%C5%9F%C3%BCnceler-8ac9bb1161ca&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Proje Günlükleri: CVDL(CV Description Language)#1</title>
        <published>2022-01-10T00:00:00+00:00</published>
        <updated>2022-01-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/proje-gunlukleri-cvdlcv-description-language1/"/>
        <id>https://alperenkeles.com/posts/proje-gunlukleri-cvdlcv-description-language1/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/proje-gunlukleri-cvdlcv-description-language1/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;c9aa&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;783e&quot; name=&quot;783e&quot;&gt;
      Proje Günlükleri:
                            CVDL(CV Description Language)#1
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;dc24&quot; name=&quot;dc24&quot;&gt;
      Merhabalar, Proje Günlükleri
                            konseptinin ilk yazısı olduğu için projenin kendisine girmeden biraz daha serinin
                            konseptinden bahsetmek istedim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5a95&quot; name=&quot;5a95&quot;&gt;
      Üniversiteye geldiğimden beri
                            sürekli farklı alanlarda farklı tarzlarda projelerle ilgileniyorum. Geldiğimiz yıl 4 kişi
                            yurt mutfağında matkapla aluminyum deldiğimiz zamanlardan oturup kendi programlama dilimizi
                            tasarlamaya çalıştığımız zamanlara pek çok farklı insan grubuyla pek çok farklı işle
                            uğraştım. Bunların hepsini yaparken çok farklı tecrübeler yaşadım, her tecrübeden yeni bakış
                            açıları kazandım. Maalesef ki bunları kimse ile paylaşma şansım olmadı, hatta ve hatta
                            yazıya aktarmadığım için bu tecrübelerin ciddi bir kısmı benim bilinçaltımda kayboldu gitti,
                            ben bile hatırlamıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bbff&quot; name=&quot;bbff&quot;&gt;
      Bu sebeptendir ki çok uzun süredir
                            aklımda içinde bulunduğum projelerle ilgili günlüğümsü yazılar yazıp bunları paylaşmak
                            vardı. Hem yaşadıklarımı dokümante etmek, gelecekte geriye baktığımda hatırlayabileceğim bir
                            anı defteri oluşturmak; hem de kendi projesine girişeceklere yol haritası olabilecek
                            öneriler ortaya koymak, bakın bunları bunları yapabilirsiniz belki aklınıza gelmemiştir
                            diyebilmek, karşılarına çıkabilecek problemlere önden hazırlıklı olmalarını sağlamak
                            istiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bafc&quot; name=&quot;bafc&quot;&gt;
      Bu noktada kendi başıma girmeye
                            çabaladığım ilk açık kaynaklı proje olan CVDL ile başlamanın güzel bir fikir olduğuna karar
                            verdim. Nedenlerini aşağıda açıklayayım.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;e6f4&quot; name=&quot;e6f4&quot;&gt;
       Normal şartlarda şu zamana
                                kadar yazdığım hiçbir açık kaynaklı kodun birileri tarafından kullanılması gibi bir
                                amacım olmamıştı, bu zamana kadar ya şirket&#x2F;ödev&#x2F;proje kapsamında kapalı kaynaklı kodlar
                                yazdım; ya da açık kaynaklı yazdığım herhangi bir kodu yalnızca portfolyom genişlesin,
                                Github hesabım dolsun diye yazdım. İlk kez başkaları tarafından kullanılmasını
                                beklediğim bir yazılım projesine giriştiğim için oradan alacağım tecrübelerin bunu
                                sonradan deneyeceklere ışık olabileceğini düşünüyorum.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;7d11&quot; name=&quot;7d11&quot;&gt;
       İlk kez kompleks bir projeye
                                tek başıma giriyorum, teknik yükü üstleniyorum. Bu zamana kadarki çok basit bir
                                karmaşıklığın üstündeki tüm projelerde yanımda birileri oldu, ben de genel olarak kod
                                yazmayı, yazılım mühendisliği yapmayı sevmeyen birisi olarak kaçabildiğim kadar kaçtım
                                teknik yükü üstüme almaktan. Algoritma tasarımı, genel sistem mimarisi, iş modeli gibi
                                kodlamanın kendisinden uzak taraflara doğru kendimi ittim hep.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1a9b&quot; name=&quot;1a9b&quot;&gt;
       Neden bu sefer bunu bozdum,
                                çünkü fikri satabildiğim kimse yok. Herkes iyi ya güzel fikir demesine rağmen fikri en
                                çok benimseyen hala benim. Ben de dedim madem böyle bir durum var dene bakalım, en kötü
                                ne kaybedersin ki. 2–3 kişiyle birlikte ilerleyeceğiz gibi duruyor, teknik liderlik
                                tarafında onlara iş verme, kod inceleme, açık kaynak proje yönetimi gibi taraflarda da
                                tecrübe kazanmam gerekecek, çok muhtemel ki bir sürü hata yapacağım, sizlere yazacağım,
                                siz de okuyup ya ‘A evet çok mantıklı iyi ki okumuşum’ diyeceksiniz, ya da ‘Salağa bak
                                şunu bile düşünmemiş bi de oturmuş blog yazıp bir şey anlatmaya çalışıyor’ diyip
                                güleceksiniz, her halükarda sizlere ya bir şey öğretmiş ya da güldürmüş olacağım.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;f9f7&quot; name=&quot;f9f7&quot;&gt;
      Proje sürecinin detaylarına
                            girmeden önce projenin ne olduğundan bahsedeyim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b64b&quot; name=&quot;b64b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;572&quot; data-image-id=&quot;1*RVnF3B_ZRK12iRgjwjVb7A.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1145&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*RVnF3B_ZRK12iRgjwjVb7A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4a3f&quot; name=&quot;4a3f&quot;&gt;
      CVDL açık kaynaklı bir CV
                            Formatı oluşturulması için bir inisiyatif. Hepimiz şu zamana kadar CV hazırladık, pek çok
                            web sitesi(CV Builder), Latex, Word, Canva… gibi farklı metotlar izledik. Bu metotların
                            hepsinin problemleri var.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;342e&quot; name=&quot;342e&quot;&gt;
      CV Builder
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;126a&quot; name=&quot;126a&quot;&gt;
       Çoğu paralı
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;76c1&quot; name=&quot;76c1&quot;&gt;
       Bayağı kullanışlı
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4fe4&quot; name=&quot;4fe4&quot;&gt;
       Kullandığınız siteye
                                limitlisiniz, onun verdiği özelleştirmelerin üstüne çıkamıyorsunuz. Buna ilaveten CV’mi
                                ordan alayım da başka yere çıkarayım diyemiyorsunuz, size yalnızca bir adet PDF veriyor
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;84fa&quot; name=&quot;84fa&quot;&gt;
       Para vermeyi bıraktığınız
                                anda CV’niz kayboluyor, sıfırdan hazırlamak için tüm o eforu harcamak zorundasınız
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6070&quot; name=&quot;6070&quot;&gt;
       Ortada bir veriden ziyade bir
                                hesap olduğu için, gel ben senle CV’mi paylaşayım sen otur aynı şablondan yap
                                diyemiyorsunuz bir arkadaşınıza, çoğu zaman aynı siteden üyelik alsa bile sıfırdan her
                                şeyi hazırlaması lazım
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a132&quot; name=&quot;a132&quot;&gt;
       Aynısı sizin için de geçerli,
                                eski CV’nizden kurtulmaya karar verip yenisini hazırlamak isteseniz başınız ağrıyor
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e90a&quot; name=&quot;e90a&quot;&gt;
       Hata kaza site kapansa, şu
                                zamana kadar yaptığınız her şey kaybolacak
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;1e7d&quot; name=&quot;1e7d&quot;&gt;
      Word&#x2F;Canva&#x2F;Latex
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;b08d&quot; name=&quot;b08d&quot;&gt;
       Üçü de ücretsiz
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;5a10&quot; name=&quot;5a10&quot;&gt;
       Canva ve Word’de hazırlanan
                                CV’lerin estetik olma ihtimali inanılmaz düşük
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0a0d&quot; name=&quot;0a0d&quot;&gt;
       Latex öğrenmek zor, o
                                spesifik şablonda nasıl CV yazıldığını öğrenmek daha zor, 3 yıldır aynı şablonu
                                kullanıyorum hala bir şey yaparken zorlanıyorum
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4199&quot; name=&quot;4199&quot;&gt;
       Üçü de çok fazla efor
                                istiyor, aşırı kullanışsızlar
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;80bb&quot; name=&quot;80bb&quot;&gt;
      CVDL
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;9dc7&quot; name=&quot;9dc7&quot;&gt;
       CVDL ile amacım bu iki farklı
                                tarafın iyi özelliklerini birleştirmek.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;b240&quot; name=&quot;b240&quot;&gt;
       Kullanışlı bir web sitesi
                                olsa, ama CV’nin ham haline de ulaşabilsen, isteyen herkes şablon tasarlayabilse, para
                                ödemek zorunda kalmasan, bunların hepsi de senin elinde olsa bu sayede site kapansa
                                hiçbir şey kaybetmesen tadından yenmez değil mi?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e15d&quot; name=&quot;e15d&quot;&gt;
       Yenmez tabii. Ben de oturdum
                                başladım acaba bunu yapabilir miyiz diye.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;060d&quot; name=&quot;060d&quot;&gt;
      Sistemin kendisine girmeden önce
                            kodunu da şöyle bir bırakayım.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;15d1&quot; name=&quot;15d1&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; title=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        GitHub - alpaylan&#x2F;cvdl: CV
                                    Description Language
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        CV
                                    Description Language is the first part of a project aiming to create an open source
                                    format for description of…
       &lt;&#x2F;em&gt;
       github.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;a0acbdb86cfc1487daf6570dc3645138&quot; data-thumbnail-img-id=&quot;0*0Zw75mU8VqiLh-G3&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;cvdl&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*0Zw75mU8VqiLh-G3);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;2b67&quot; name=&quot;2b67&quot;&gt;
      Mantık şu şekilde
                            çalışıyor, 3 tane ayrı dosya var arka planda.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;13c0&quot; name=&quot;13c0&quot;&gt;
      (Eğer yazılımcı değilseniz
                            aşağıdaki dosya açıklamalarını atlayabilirsiniz)
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b40d&quot; name=&quot;b40d&quot;&gt;
      1- CVCD(CV Content Document)
                            Dosyası
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e504&quot; name=&quot;e504&quot;&gt;
      Bu dosyada aslında sen CV’nin
                            içeriğini yazıyorsun. Hangi okullara gittin, nerelerde staj yaptın, hangi dilleri ne derece
                            biliyorsun… Nasıl Word’e yazıyorsan aynı şekilde yazıyorsun. Tek fark şu, normalde Word’e
                            yazarken başlığı ayarlıyordun, neyin nerde duracağıyla ilgileniyordun falan, onların
                            hiçbirisi yok; sadece içerik var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f661&quot; name=&quot;f661&quot;&gt;
      2- CVSD(CV Schema Document) Dosyası
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1f34&quot; name=&quot;1f34&quot;&gt;
      CV’yi yazarken aslında yazdığımız
                            her bir bilginin bir anlamı var, arkada bağlı olduğu bir kavram, konsept var, mesela örnek
                            vereyim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;44f7&quot; name=&quot;44f7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;200&quot; data-image-id=&quot;1*n9tVn28Od93ilfcg9xJyTg.png&quot; data-width=&quot;1900&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*n9tVn28Od93ilfcg9xJyTg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a7f2&quot; name=&quot;a7f2&quot;&gt;
      Yukarda benim CV’mden okulda
                            öğretim asistanlığı yaptığım bir kısmı görüyorsunuz, bu aslında 4 e ayrılmış durumda.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d1fe&quot; name=&quot;d1fe&quot;&gt;
      1- Organizasyon Adı: University of
                            Maryland — Computer Science Department
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2465&quot; name=&quot;2465&quot;&gt;
      2- İş Tanımı: Teaching Assistant for
                            CMSC351 — Algorithms Class
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9857&quot; name=&quot;9857&quot;&gt;
      3- Lokasyon: Maryland, USA
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5a93&quot; name=&quot;5a93&quot;&gt;
      4- Tarih: August 2021 — Present
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d6e8&quot; name=&quot;d6e8&quot;&gt;
      CVSD dosyası bu şekilde şemalar
                            tanımlıyor. Mesela bu eleman tipi aşağıdaki şekilde tanımlanmış durumda.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p&quot; id=&quot;6704&quot; name=&quot;6704&quot;&gt;[&quot;Organization&quot;]&lt;br&#x2F;&gt;name = &quot;Short Text&quot;&lt;br&#x2F;&gt;location = &quot;Short Text&quot;&lt;br&#x2F;&gt;text = &quot;Long Text&quot;&lt;br&#x2F;&gt;role = &quot;Short Text&quot;&lt;br&#x2F;&gt;start_date = [&quot;Short Text&quot;, &quot;Date&quot;]&lt;br&#x2F;&gt;end_date = [&quot;Short Text&quot;, &quot;Date&quot;]&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;e969&quot; name=&quot;e969&quot;&gt;
      Bu şemalar birazdan
                            tanımlayacağımız üçüncü dosya tipinde kullanılacak, şu an için önemli değiller. Genel olarak
                            içeriklerimizin tipini, hatta adı üstünde şemasını tasarlıyorlar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;247a&quot; name=&quot;247a&quot;&gt;
      Bu şemalar CVDL sisteminin açık
                            kaynak tarafını besleyecekler. İnsanlar Şema&#x2F;Dizayn çiftleri oluşturup paylaşabilecekler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a405&quot; name=&quot;a405&quot;&gt;
      3- CVDD(CV Design Document) Dosyası
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1143&quot; name=&quot;1143&quot;&gt;
      CVCD ve CVSD dökümanları CV’nin
                            içeriğine dair bazı betimlemeler yapmışken, CV’nin görünümüne dair herhangi bir tanım
                            yapmamışlardı. CVDD bu tanımları içeriyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;722b&quot; name=&quot;722b&quot;&gt;
      Hangi içerik nereye yerleştirilmeli,
                            boşluklar, fontlar, renkler… CV üzerinde yapılması gereken ne kadar tasarım kararı varsa
                            bunların hepsi CVDD dökümanında sağlanacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1cfa&quot; name=&quot;1cfa&quot;&gt;
      Bu dosyaların içerikleri kimleri
                            ilgilendiriyor, tema&#x2F;şema yazmak isteyenleri, kendi CV’sinin en küçük detayına kadar kontrol
                            edebilmek isteyenleri, tabii ki genel popülasyon bunu yapmak istemeyecek. Bu noktada bizler
                            yazılan tema&#x2F;şemaları paylaştığımız, arkadaki koda dokunmadan ücretsiz bir şekilde şu anki
                            CV yaratıcılarının ara yüzüne sahip bir web sitesi oluşturacağız. Bu sitedeki tüm şemalar,
                            temalar açık kaynaklı olacak, oluşturulan CV’lerin arka planındaki dökümanlar da
                            kullanıcıyla paylaşılacak. Bu sayede kimse bir siteye, bir kuruma bağlı olmayacak, projeyi
                            ben yarın bıraksam ertesi gün başkası toparlayabilecek.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;dad3&quot; name=&quot;dad3&quot;&gt;
      (Eğer yazılımcı değilseniz buradan
                            devam edebilirsiniz)
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;327c&quot; name=&quot;327c&quot;&gt;
      Projenin ne olduğunu anlattığıma
                            göre, neler yaşandığına değinebilirim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;b178&quot; name=&quot;b178&quot;&gt;
      Peki bu zamana kadar projede
                            neler oldu?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;243b&quot; name=&quot;243b&quot;&gt;
      1- Fikir aklıma geldi(taaa ne zaman
                            önce), çevremdekilere anlattım, fikrin kendisi de aşırı ham olduğundan güzel bir tepki
                            alamadım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;79f2&quot; name=&quot;79f2&quot;&gt;
      2- Oturup gerçekten kodlamaya
                            başlamaya çalıştım. Kendimi limitlememek için öncelikle tamamen sıfırdan bir dilmiş gibi
                            davrandım. Gerçekten yazmaya başlayınca bu kadar özgürlüğe ihtiyaç duymadığımı gördüm,
                            betimleme dili olarak TOML kullanmaya karar verdim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c323&quot; name=&quot;c323&quot;&gt;
      3- Bu noktada daha TOML kararını
                            vermeden önce aşırı heyecanlı ve sabırsız bir insan olduğumdan projeyi Twitter ve Reddit’te
                            paylaştım. Twitter’dan 0&#x27;a yakın dönüş aldım, Reddit’ten çok güzel dönüşler aldım.
                            Öncelikle hiç tanımadığım insanlardan projenin gerçekten yararlı olabileceğini duyma fırsatı
                            duymuş oldum, bu motivasyonumu inanılmaz arttırdı. Buna ek olarak ilk kez Github’da
                            3&#x27;ten fazla yıldız aldım, o da çalışmam gerektiği inancımı büyüttü. Ayrıca schema.org ve
                            jsonresume.org gibi fikrimi geliştirebileceğim benzer inisiyatiflerden haberdar olma şansım
                            oldu. Eğer benzer bir durumdaysanız, heyecanlı olduğunuz bir fikriniz varsa belli bir
                            olgunluğa eriştikten sonra Reddit’te paylaşmanın çok faydalı olacağını düşünüyorum. Twitter
                            tarafındaysa doğru (projeyle ilgilenecek) bir Twitter çevresine sahip olmamamdan kaynaklı
                            olarak böyle oldu muhtemelen, gelecekte nasıl tepkiler alırım bilemiyorum tabii.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4f44&quot; name=&quot;4f44&quot;&gt;
      4- Projede benle birlikte çalışmaya
                            gönüllü 2 kişi çıktı şu ana kadar. Onlarla nasıl bir görev paylaşımı yapmalıyım, yazılan
                            kodlar nasıl test edilmeli, genel sistem nasıl dizayn edilmeli gibi gibi pek çok
                            kararsızlıkla karşı karşıyayım. Hata yapacağım muhtemel değil, kesin. Sabırsızlıkla da
                            bekliyorum bu süreçte neler yapacağımı, büyük ihtimalle vakit kazanmak yerine üstüne vakit
                            kaybedeceğim bunu yapayım derken, ama öğrenmek için kesinlikle değeceğini düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a768&quot; name=&quot;a768&quot;&gt;
      5- İlk aşamada daha basit bir
                            sistemle küçük bir prototip çıkarmayı umuyorum. Sonrasında geri bildirim ala ala büyür,
                            ilerleriz gibi geliyor. Bu süreçleri de mümkün olduğunca sık ve şeffaf bir şekilde bu
                            günlüklerde paylaşıyor olacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;b2c6&quot; name=&quot;b2c6&quot;&gt;
      Benim için de yeni
                            bir konsept olduğundan her türlü yoruma minnettar olurum açıkçası. Eleştiridir, ‘bak böyle
                            yapmışsın ama çok da olmamış gibi’ dir, her türlü yoruma açığım. Şimdiden çok teşekkür
                            ederim, sağlıcakla!
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;c77ace318b71&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2022-01-11T00:11:24.312Z&quot;&gt;
     January 11, 2022
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;proje-g%C3%BCnl%C3%BCkleri-cvdl-cv-description-language-1-c77ace318b71&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Amerika’da İlk 3 Ayım Nasıl Geçti? Bu Sefer Oldu Gibi.</title>
        <published>2021-11-21T00:00:00+00:00</published>
        <updated>2021-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/amerikada-ilk-3-ayim-nasil-gecti-bu-sefer-oldu-gibi/"/>
        <id>https://alperenkeles.com/posts/amerikada-ilk-3-ayim-nasil-gecti-bu-sefer-oldu-gibi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/amerikada-ilk-3-ayim-nasil-gecti-bu-sefer-oldu-gibi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;9f6f&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;9e3f&quot; name=&quot;9e3f&quot;&gt;
      Amerika’da İlk 3 Ayım Nasıl Geçti? Bu Sefer Oldu Gibi.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5c90&quot; name=&quot;5c90&quot;&gt;
      Selamlar, geçen 2 ayın yazısını hatırlayanlar vardır belki, farkı görmek isteyenler olabilir ekleyeyim yine.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;abc6&quot; name=&quot;abc6&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-%C3%B6%C4%9Fretici-%C5%9Fa%C5%9F%C4%B1rt%C4%B1c%C4%B1-derecede-d%C3%BCr%C3%BCst-bir-an%C4%B1-defteri-28e655463d2a&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-%C3%B6%C4%9Fretici-%C5%9Fa%C5%9F%C4%B1rt%C4%B1c%C4%B1-derecede-d%C3%BCr%C3%BCst-bir-an%C4%B1-defteri-28e655463d2a&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-%C3%B6%C4%9Fretici-%C5%9Fa%C5%9F%C4%B1rt%C4%B1c%C4%B1-derecede-d%C3%BCr%C3%BCst-bir-an%C4%B1-defteri-28e655463d2a&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Amerika’da İlk Ayım Nasıl Geçti? Öğretici, Şaşırtıcı Derecede Dürüst Bir Anı Defteri.
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Selam. Hoş geldin. Eğer uzun süredir beni takip ediyorsan, bu yazıya şaşırmış olabilirsin. Normalde insanlığa faydalı…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;8d8c5b7fe45e0880bbd701a15a7db879&quot; data-thumbnail-img-id=&quot;1*SnfIXlxGcF5L_JZFojp3VA.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87lk-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-%C3%B6%C4%9Fretici-%C5%9Fa%C5%9F%C4%B1rt%C4%B1c%C4%B1-derecede-d%C3%BCr%C3%BCst-bir-an%C4%B1-defteri-28e655463d2a&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*SnfIXlxGcF5L_JZFojp3VA.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--mixtapeEmbed&quot; id=&quot;d365&quot; name=&quot;d365&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87kinci-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bilinmezlikten-bilinirli%C4%9Fe-bir-yolculuk-daec23a510ce&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87kinci-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bilinmezlikten-bilinirli%C4%9Fe-bir-yolculuk-daec23a510ce&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87kinci-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bilinmezlikten-bilinirli%C4%9Fe-bir-yolculuk-daec23a510ce&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Amerika’da İkinci Ayım Nasıl Geçti? Bilinmezlikten Bilinirliğe Bir Yolculuk.
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Geçen ay ilk ayımın nasıl geçtiğine dair bir yazı yazmıştım, açıkça bakmak gerekirse fazlasıyla negatifti, buraya…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;146c54c3cb359cb07d82331ec43840b9&quot; data-thumbnail-img-id=&quot;1*2ZXULoUx3Rg8GCZuPqPXsA.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;amerikada-i%CC%87kinci-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bilinmezlikten-bilinirli%C4%9Fe-bir-yolculuk-daec23a510ce&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*2ZXULoUx3Rg8GCZuPqPXsA.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;4cf0&quot; name=&quot;4cf0&quot;&gt;
      Yazı ile aynı paralelde bir de Youtube videosu çektim, onu da aşağıda paylaşıyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;c1d3&quot; name=&quot;c1d3&quot;&gt;
      &lt;iframe frameborder=&quot;0&quot; height=&quot;393&quot; scrolling=&quot;no&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;TPB05zk9S5k&quot; width=&quot;700&quot;&gt;
      &lt;&#x2F;iframe&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4f25&quot; name=&quot;4f25&quot;&gt;
      Geçen ay, düşüşten yükselişe doğru geçtiğim aşamadaydım, beklentim de açıkçası o yükselişin yavaşlayarak devam etmesiydi. Hayat tabii ki beklendiği kadar düz ilerlemiyor, o yükseliş yolunda bazı tökezlemeler, zorluklar yaşanıyor ama mutlu bir şekilde söyleyebilirim ki güzel adımlar atmaya devam ediyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9d45&quot; name=&quot;9d45&quot;&gt;
      Sosyallik açısından çok güzel gelişmeler var. Genelde Türklerle olsa da pek çok arkadaş edindim, düzenli olarak akşamları dışarı çıktığım, sıkıldığımda aradığım, komik bir şey gördüğümde paylaştığım, “tamam ya artık olduk gibi” dediğim pek çok kişi var şu an. Bazen ODTÜ’de 1. sınıftaki arkadaş grubumla tanıştığım zamanlara dönmüş gibi hissediyorum kendimi. Gruba isim takmalar olsun, düzenli toplu buluşma ayarlamalar olsun tam klasik üniversitede tanışmış arkadaş gruplarının hareketlerini yapıyoruz, fark ettikçe kahkaha atıyorum arada. Farklı üniversitelerden, bölümlerden, alanlardan, arka planlardan, memleketlerden, yaşlardan… her türlü çeşitlilikten insan var. Hal böyle olunca sürekli farklı bakış açıları, yeni keşifler, perspektifler, heyecanlı ve eğlenceli diyaloglar, tartışmalar(bazen heyecandan bağırmalı çağırmalı), muhabbetler geçiyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ec14&quot; name=&quot;ec14&quot;&gt;
      Araştırma açısından aslında geçen ay da bayağı oturmuş bir durumdaydım, bu ay itibariyle 2 si ders projesi olarak 3.5 araştırma projesiyle ilgileniyorum. Hepsinden az az ilerliyorum her gün, bu stratejinin ne kadar iyi çalıştığını önümüzdeki aylarda görüyor olacağız, belki de 1–2 proje seçip onlara tüm odağını vermek çok daha iyi bir taktik olabilir ama ben hayatım boyunca hep pek çok işi aynı anda alıp onlar arasında hızlı geçişlerle hayatımı yaşamaya çalıştım. Yer yer tabii ki başarısız oluyorum, bu da aslında bir sonraki denemem için bana ders niteliğinde bir hata oluyor. En büyük pişmanlık en baştan denememektir mantığıyla devam ediyorum, önümüzdeki yazılarda durumdan yine bahsediyor olurum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c721&quot; name=&quot;c721&quot;&gt;
      Aralık sonu Türkiye’ye gelmem dolayısıyla çok problem etmesem de, Türkiye’dekilerle olan iletişimim saat farkının 8 saate de çıkmasıyla ciddi manada zorlaştı. Ben kahvaltımı yapmadan Türkiye’de akşam yemeği yenmiş oluyor bazı günler, sabah telaşla ofise gel toplantıya gir koştur derken arada ailemi bile aramayı unuttuğum sabahlar oluyor, arkadaşlarımla konuşmak için slot ayırmak daha da zor hale geldi. Bir şekilde kısa kısa anlık da olsa görüşmeye çalışıyoruz ama herkesle her zaman olmuyor tabii ki. Uzun vadede nasıl bir süreç gelişeceğini yaşayarak göreceğiz. Bu durumdan korkmamamın tek sebebi arkadaşlarımla aramdaki ilişkinin gücüne güvenmem. Aylarca konuşmasak da konuştuğumuz gün sanki hiçbir şey olmamış gibi devam edebileceğimize inanıyorum, bu testi geçen arkadaşlıkların hayat boyunca devam edebileceğinize olan inancım da yüksek; umuyorum ki zaman beni haksız çıkarmaz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a47b&quot; name=&quot;a47b&quot;&gt;
      Bir diğer nokta da Türkiye’de iş yapmak. Hala Türkiye’den projelerle ilgileniyorum, arada toplantı yapmak çok ama çok zor. Uzaktan motivasyonu korumak, tek başına çalışırken bırakmamak için kendini ikna etmek imkansıza yakın. Bu konuda çok ciddi bir tecrübe olarak Türkiye’deki iş&#x2F;proje bazındaki ilişkilerinizi sağlıklı bir şekilde dondurup gelmenizi tavsiye etmeliyim, aksi takdirde zor günler geçireceksiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;23c1&quot; name=&quot;23c1&quot;&gt;
      Kültür şokun etkisinin geçtiğini günden güne farklı örneklerle fark ediyorum. Bir gün İngilizce konuşurken İngilizce konuştuğumun farkında olmadığımı görüyorum. Fiyatları Türk Lirasına çevirmeyi uzun süre önce bırakmıştım ama Türkiye’de buna ne kadar öderdim refleksinin geçmesi o kadar kolay olmadı. Yeni bir ülkeye geldiğinizde oranın ekonomik düzenine ayak uydurmak gerekiyor, yani Türkiye’deki değer yargılarına göre ekonomik optimizasyon yapamazsınız. Bunu gelmeden düşünmek benim için zordu o yüzden bir örnek vereyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0761&quot; name=&quot;0761&quot;&gt;
      Kullanılan bir indeks olduğu için örnek vereyim, Türkiye’de BigMac diyelim ki 50 lira olsun, Amerika’da da 10 dolar olsun. Türkiyede 100 lira olan bir ürün Amerikada 20 dolar da olabilir, 5 dolar da. Herhangi bir ürüne verilen değer ülkeden ülkeye aynı olmayacak. Bu nedenle Türkiye’deki finansal anlamda geliştirdiğiniz optimizasyon reflekslerinin çok ciddi bir kısmını geride bırakmanız gerekebilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;34ea&quot; name=&quot;34ea&quot;&gt;
      Buna komik bir örnek de şahsi hayatımdan. Türkiye’de 50 lira olan berber burda 30 dolar. Hala Türk ekonomisine göre optimizasyon yapmayı bırakıp kendimi berbere gitmeye ikna edemedim…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7cb7&quot; name=&quot;7cb7&quot;&gt;
      Onun haricinde gayet güzel, artık bu yazıların sıklığını azaltabilirim gibi duruyor, bu yazıları hem benle benzer duyguları düşünceleri paylaşanlara yalnız olmadıklarını hissettirmek, hem de benden sonra gelecek olanlara ne gibi ihtimallerle karşı karşıya olduklarına dair bir fikir verebilmek için başlamıştım; 3 yazının buradaki süreçle ilgili verilebilecek fikirlerin çoğunu vereceğini düşünüyorum, umarım birilerine faydalı olabilecek bir seri olmuştur. 6. ayda görüşürüz diye tahmin ediyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d215&quot; name=&quot;d215&quot;&gt;
      Hepimizin yolları farklı olacak, pek çok farklı ihtimal ağacından pek çok farklı insanla pek çok farklı şekillerde yürüyeceğiz. Dikkat etmek gereken şey her zaman önümüzdeki sonsuz ihtimal olduğunu, bu ihtimallerle ilgili tüm varsayımlarımızın yanlış olabileceğini, olacağını unutmamak, umudumuzu kaybetmemek. Bunu hiçbir zaman unutmayın, kendinize iyi bakın!
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;3d78&quot; name=&quot;3d78&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;600&quot; data-image-id=&quot;1*Wib3QJKIwxU245U8OB1fBA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Wib3QJKIwxU245U8OB1fBA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5975661a525b&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-11-22T04:16:42.319Z&quot;&gt;
     November 22, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;amerikada-i%CC%87lk-3-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bu-sefer-oldu-gibi-5975661a525b&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Learner’s Guide to Property Based Testing#1</title>
        <published>2021-11-10T00:00:00+00:00</published>
        <updated>2021-11-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/learners-guide-to-property-based-testing1/"/>
        <id>https://alperenkeles.com/posts/learners-guide-to-property-based-testing1/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/learners-guide-to-property-based-testing1/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;62c7&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;bc17&quot; name=&quot;bc17&quot;&gt;
      Learner’s Guide to Property Based Testing#1
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;aefd&quot; name=&quot;aefd&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;924&quot; data-image-id=&quot;1*92Av2ZbXV98Ryo1C0cxpFw.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1640&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*92Av2ZbXV98Ryo1C0cxpFw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2fbe&quot; name=&quot;2fbe&quot;&gt;
      Property Based Random Testing is a flavor of testing that aims to use higher level specifications for testing instead of hand-writing or generating tests. It was first developed by Koen Claessen and John Hughes in 1999 as a software library for Haskell, called QuickCheck. There has been substantial development in the field since then, I will not bore you with lots of details as the purpose of this writing is to familiarize you with PBT(Property Based Testing).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8047&quot; name=&quot;8047&quot;&gt;
      To give a sense of what is happening, let’s first start by talking about Unit Tests.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c0ab&quot; name=&quot;c0ab&quot;&gt;
      A Unit Test is a test case aimed into testing a unit of a program, conventionally a function.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;ea2b&quot; name=&quot;ea2b&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;d4b79f19ff5f50c042c64bb8c9bb8047.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;41ba&quot; name=&quot;41ba&quot;&gt;
      Above, you see a very simple test case for a function called $dummy\_sort$, which from the name and the structure it feels is supposed to sort a given function of possibly integers in ascending order.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a73c&quot; name=&quot;a73c&quot;&gt;
      But, this test case doesn’t actually give us very much knowledge on the function under test. It gives us a few clues we could perhaps generalize such as;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;21eb&quot; name=&quot;21eb&quot;&gt;
      1- Function sorts the list [2, 1, 3, 4] correctly
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eaee&quot; name=&quot;eaee&quot;&gt;
      2- (1) could imply that the function sorts all lists of length 4 correctly.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c25d&quot; name=&quot;c25d&quot;&gt;
      3- (1) also could imply that the function sorts all lists of integer permutations from 1 up to n.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5ca7&quot; name=&quot;5ca7&quot;&gt;
      4- (1) also could imply that the function sorts all lists of all lengths containing positive integers.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0fd3&quot; name=&quot;0fd3&quot;&gt;
      5- (1) also could imply this function sorts any type of list containing arbitrary integers in arbitrary length.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f2cd&quot; name=&quot;f2cd&quot;&gt;
      We might be expecting any one of the properties from (1–4), but a better possibility is that we are expecting 5. We could also expect properties 1–4, but the example also wouldn’t generalize to those, at least those other than property (1).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3c53&quot; name=&quot;3c53&quot;&gt;
      So ideally, we would need to create a set of examples that could represent the set of all cases we want our function to work on, so we need a way of defining this representative.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;18ee&quot; name=&quot;18ee&quot;&gt;
      This is possible via creating what we will call properties in our code. Let me demonstrate with an example.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;3e6e&quot; name=&quot;3e6e&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;93c49cbfe2b25116733813db18d7fb7b.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;57ef&quot; name=&quot;57ef&quot;&gt;
      Function
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        is_sorted
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      checks if the list is monotonically increasing, meaning if no element is less than the element right before. As a logical statement, we can write
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        is_sorted
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      as
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;f976&quot; name=&quot;f976&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;77&quot; data-image-id=&quot;1*qj4PFKlqjuaKx-y0fX6m8Q.png&quot; data-width=&quot;467&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*qj4PFKlqjuaKx-y0fX6m8Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;af18&quot; name=&quot;af18&quot;&gt;
      If you look carefully, you will see that this property that we wrote actually does not cover our needs. Suppose we have an implementation of
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        dummy_sort
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      as given below.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;0e9e&quot; name=&quot;0e9e&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;9e60cb01bf37eaba6fab4d841d788c03.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;40cf&quot; name=&quot;40cf&quot;&gt;
      You will see that this means
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        dummy_sort
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      will always give a sorted list back to you, just not the one you would want.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;807d&quot; name=&quot;807d&quot;&gt;
      So a better property could be writing the test as.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;492b&quot; name=&quot;492b&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;2539c4d0d7342f6d24ac6137e21ac407.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;f5d3&quot; name=&quot;f5d3&quot;&gt;
      We just added a new check that looks if both lists have the same elements. Which would mean that if
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        l
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      contains an element that
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        sorted_l
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      does not contain, then our function does not do the right thing.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ae8a&quot; name=&quot;ae8a&quot;&gt;
      Yet, a careful reader will also realize the problem with this property. We can falsify it with the test case given below.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;41c2&quot; name=&quot;41c2&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;f3d320dc44dc07d010fed2d740462f65.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;febd&quot; name=&quot;febd&quot;&gt;
      As one familiar with Python’s set data structure will see, a set will delete the duplicate elements in a list, hence this property will not be powerful enough too.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;928e&quot; name=&quot;928e&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;962e02c4c4d864d167e4e45039144ccc.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c610&quot; name=&quot;c610&quot;&gt;
      So this was our final property for testing. The resulting list must be sorted, and it should be a permutation of the initial list. If I did not do any mistakes in writing the is_permutation function, this function must be properly tested using this property.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6e21&quot; name=&quot;6e21&quot;&gt;
      There is another way of testing this, we could use a so-called Test Oracle for our property. Let’s say that we tested our
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        dummy_sort
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      extensively, and we used it in our software project for some time, we are quite sure that our function holds. And let’s assume we did not do Property Based Testing the first time, we were young and naive, we only did unit tests on the function, and we now want to use property based testing.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;94e2&quot; name=&quot;94e2&quot;&gt;
      Now, we can use another notion of truth for our new sorting algorithm, whatever
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        dummy_sort
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      returns is our truth.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;06fa&quot; name=&quot;06fa&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;ace95fd9a8b6fbc392cde41446733f05.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;ad7f&quot; name=&quot;ad7f&quot;&gt;
      As our truth is defined using a previous implementation, we can use that implementation to test our new implementation. This is especially useful for testing optimizations and refactors in our code.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3fc7&quot; name=&quot;3fc7&quot;&gt;
      So what do we do, we now have a great testing infrastructure, we can just write a bunch of test cases without writing their results as given below.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;9ddc&quot; name=&quot;9ddc&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;49ac9f3a711790ad27b358eddc24bf32.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;5abe&quot; name=&quot;5abe&quot;&gt;
      It doesn’t seem great, right. We still have to write all of these tests, which is better than writing tests and the results, but still it feels like we could have something better.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a5be&quot; name=&quot;a5be&quot;&gt;
      Wait, we actually do! John Hughes and Koen Claessen has invented exactly that process.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;ccbf&quot; name=&quot;ccbf&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;f6d0554608be1bc00e0c78908e2e0c6e.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4def&quot; name=&quot;4def&quot;&gt;
      Strictly speaking, what they invented is so much greater, fancier, and smarter than this, but it still relies on the same idea. A better version is given below.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;2726&quot; name=&quot;2726&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;66edcd6e00a0c46d85c16198e10bda5f.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c975&quot; name=&quot;c975&quot;&gt;
      So what’s better about this process is that
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e700&quot; name=&quot;e700&quot;&gt;
      1- It remembers how many tests it has done, so it can be a bit stateful and remember the past in some sense. A simple example is we can generate lists based on logarithm of i, which would allow creating larger examples as we move forward with the tests, hoping that larger test cases might catch bugs smaller test cases could not demonstrate.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b083&quot; name=&quot;b083&quot;&gt;
      2- It “shrinks” the failing test case. Shrinking means finding a minimal example using a failed test case. Let’s say that our fancy sorting function has a bug, it crashes when the list has negative numbers. This bug is found with the following test case.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p&quot; id=&quot;8b40&quot; name=&quot;8b40&quot;&gt;&lt;code class=&quot;markup--code markup--pre-code&quot;&gt;[11, 1,1,1,1,-1,1,2,442,34,2,4]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;4629&quot; name=&quot;4629&quot;&gt;
      But it could actually be found using.
     &lt;&#x2F;p&gt;
     &lt;pre class=&quot;graf graf--pre graf-after--p&quot; id=&quot;3d85&quot; name=&quot;3d85&quot;&gt;&lt;code class=&quot;markup--code markup--pre-code&quot;&gt;[-1]&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
     &lt;p class=&quot;graf graf--p graf-after--pre&quot; id=&quot;fece&quot; name=&quot;fece&quot;&gt;
      If I had given you the first list as the failing case, it would take a lot of time to debug. There are lots of cases, maybe the function crashes with lists of size more than 10, or it cannot handle cases where 4 list elements are same.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c23e&quot; name=&quot;c23e&quot;&gt;
      But the second test case makes it very clear where the problem is and how to find and debug it.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3bfa&quot; name=&quot;3bfa&quot;&gt;
      Let me give you a very simple and not-so-smart generator and shrinker for the case given above.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;3d68&quot; name=&quot;3d68&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;5d58af2914f98c6bdbee76bf9eb9f74c.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;dca0&quot; name=&quot;dca0&quot;&gt;
      This generation function generates random integers from the interval
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        [-5, 10000)
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      for a list of size
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        log2size
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;137b&quot; name=&quot;137b&quot;&gt;
      &lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;alpaylan&#x2F;eb5d8f5f2381d5b09bf7ea821bb2cf96.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c40d&quot; name=&quot;c40d&quot;&gt;
      This shrinking function tries to shrink the list by truncating it from the beginning. At each step, a smaller list is created by excluding the first element; this allows creating minimal examples for debugging the actual problem.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7cb0&quot; name=&quot;7cb0&quot;&gt;
      This is the intuition behind Property Based Testing. There is a lot more to talk about, there is fuzzing, mutation based property based testing; there are clever ways of generating, shrinking, testing, writing properties… I want to write about those in the future too, I hope this was an interesting read for you.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3f37&quot; name=&quot;3f37&quot;&gt;
      For those interested, here are some more interesting reading to follow through.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;629b&quot; name=&quot;629b&quot;&gt;
       Original QuickCheck Paper (
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf&quot; href=&quot;https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.cs.tufts.edu&#x2F;~nr&#x2F;cs257&#x2F;archive&#x2F;john-hughes&#x2F;quick.pdf
       &lt;&#x2F;a&gt;
       )
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6265&quot; name=&quot;6265&quot;&gt;
       A Description of Random PBT and Fuzzing explaining motivations behind it by Leo and Mike (
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html&quot; href=&quot;https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;plum-umd.github.io&#x2F;projects&#x2F;random-testing.html
       &lt;&#x2F;a&gt;
       )
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8491&quot; name=&quot;8491&quot;&gt;
       A (probably better than mine) medium post on PBT (
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;medium.com&#x2F;criteo-engineering&#x2F;introduction-to-property-based-testing-f5236229d237
       &lt;&#x2F;a&gt;
       )
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3581&quot; name=&quot;3581&quot;&gt;
       A talk by John Huges, “Dont Write Tests” (
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=hXnS_Xjwk2Y
       &lt;&#x2F;a&gt;
       )
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;8088&quot; name=&quot;8088&quot;&gt;
      Aside from the gists given above, I also uploaded the code to a single file for anyone interested as a convenience.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;10dc&quot; name=&quot;10dc&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;github.com&#x2F;alpaylan&#x2F;technical-blog-code&#x2F;blob&#x2F;main&#x2F;pbt-1.py
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;ce979c1a58a1&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-11-11T04:29:26.672Z&quot;&gt;
     November 11, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;learners-guide-to-property-based-testing-1-ce979c1a58a1&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Introduction to Learning from Learners</title>
        <published>2021-11-08T00:00:00+00:00</published>
        <updated>2021-11-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/introduction-to-learning-from-learners/"/>
        <id>https://alperenkeles.com/posts/introduction-to-learning-from-learners/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/introduction-to-learning-from-learners/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;08c8&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;3f8f&quot; name=&quot;3f8f&quot;&gt;
      Introduction to Learning from Learners
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;0543&quot; name=&quot;0543&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;837&quot; data-image-id=&quot;1*OizdDgPnnTq7r2M7oXG6MA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2031&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*OizdDgPnnTq7r2M7oXG6MA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;d242&quot; name=&quot;d242&quot;&gt;
      So this piece should provide some insight into why we are starting this blog. There are lots of technical blogs and writings all over the internet. Some of them are written by experts on those topics, almost all of them are written by people with high confidence in their knowledge. I believe this poses a cognitive bias that functions as a entry barrier for people actually trying to learn.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d3d6&quot; name=&quot;d3d6&quot;&gt;
      A good teacher is not someone who knows the topic inside out, it is someone who knows what others don’t know, and how to transfere that knowledge. I believe learners have a unique perspective in that sense.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8b32&quot; name=&quot;8b32&quot;&gt;
      They are new to the domain, they have just experienced the act of learning, which I am hopeful that can allow them to be good teachers.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0867&quot; name=&quot;0867&quot;&gt;
      Hence, we will be starting this blog, “Learning from The Learners” as a group of Computer Science late undergraduate or early graduate students; which we hope to expand in the future. We want to level the playing field for those who might not have access to the knowledge we get to learn on a daily basis.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c7e2&quot; name=&quot;c7e2&quot;&gt;
      This is going to be an open, free and voluntary blog that will be maintained by me, Alperen Keles. I will be the main editor and one of the writers for the time being. I welcome and encourage anyone to write about what they learn. The best thing is, you are not alone. We are all writing about topics that we are not yet confident. We are bound to make mistakes, we are very right be scared and afraid. But with feedback from others, with the process of constant learning and improving, we will get better. Our writings will get better. Our knowledge will get wider. So if you have shred of interest in writing and you are learning anything new, reach out to me from “
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;mailto:alpkeles99@gmail.com&quot; href=&quot;mailto:alpkeles99@gmail.com&quot; target=&quot;_blank&quot;&gt;
       alpkeles99@gmail.com
      &lt;&#x2F;a&gt;
      ”.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8267&quot; name=&quot;8267&quot;&gt;
      Our first piece will be with you shortly on “Property Based Random Testing”, I thank Professor Leonidas Lampropoulos for getting me interested in and actually teaching the subject.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b7f7&quot; name=&quot;b7f7&quot;&gt;
      Regards to everyone reading,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;75f3&quot; name=&quot;75f3&quot;&gt;
      Alperen Keles
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;e77ff7ac84e6&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-11-08T05:07:59.022Z&quot;&gt;
     November 8, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;introduction-to-learning-from-learners-e77ff7ac84e6&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Amerika’da İkinci Ayım Nasıl Geçti? Bilinmezlikten Bilinirliğe Bir Yolculuk.</title>
        <published>2021-10-15T00:00:00+00:00</published>
        <updated>2021-10-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/amerikada-ikinci-ayim-nasil-gecti-bilinmezlikten-bilinirlige-bir-yolculuk/"/>
        <id>https://alperenkeles.com/posts/amerikada-ikinci-ayim-nasil-gecti-bilinmezlikten-bilinirlige-bir-yolculuk/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/amerikada-ikinci-ayim-nasil-gecti-bilinmezlikten-bilinirlige-bir-yolculuk/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;6bad&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;7a45&quot; name=&quot;7a45&quot;&gt;
      Amerika’da İkinci Ayım Nasıl Geçti? Bilinmezlikten Bilinirliğe Bir Yolculuk.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;d3cb&quot; name=&quot;d3cb&quot;&gt;
      Geçen ay ilk ayımın nasıl geçtiğine dair bir yazı yazmıştım, açıkça bakmak gerekirse fazlasıyla negatifti, buraya gelmenin zorlukları, problemleri, tehlikelerine çok odaklanmıştı. Bunları görerek bunu bir alışkanlık haline getirmeye, her ayın sonunda kendi düşündüklerimi yazmaya karar verdim. Hem benim geriye baktığımda kendi süreçlerimi daha iyi anlayabilmem, kendime dersler çıkarabilmem, hem de herhangi bir okuyucunun buraya gelirkenki(elbette herkesin tecrübeleri çok farklı olacaktır ama yine de bazı beklentileri netleştirebilirsiniz diye düşünüyorum) beklentilerini netleştirmesi, karşılaşacağı problemleri önden anlayabilmesi, bunlara hem fiziksel, hem de zihinsel olarak hazırlanması açısından faydalı olacağını umuyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ce14&quot; name=&quot;ce14&quot;&gt;
      Kısaca bahsetmek gerekirse, hayat monotonik bir şekilde düzeliyor, oturuyor, güzelleşiyor. Gereksiz matematiksel terimleri çıkarırsak aşağıdaki gibi bir grafikle gidiyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;47a4&quot; name=&quot;47a4&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1156&quot; data-image-id=&quot;1*BkUPWFKJHtlyawqGZrpQuw.png&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*BkUPWFKJHtlyawqGZrpQuw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;da58&quot; name=&quot;da58&quot;&gt;
      Aslında yukarıdaki grafik, çok daha büyük bir sürecin önemli bir parçası. Başvurular ve kabul sırasında yaşanan Balayı sürecinin ardından ilk ayın yazısında da kendini gösteren kültür şokunun ardından şu anda alışma fazında olduğumu düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;c987&quot; name=&quot;c987&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;409&quot; data-image-id=&quot;1*2ZXULoUx3Rg8GCZuPqPXsA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;566&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*2ZXULoUx3Rg8GCZuPqPXsA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2c74&quot; name=&quot;2c74&quot;&gt;
      Her gün daha adapte olduğumu, kendimi daha ait hissedebildiğimi görüyorum. Tabii bakınca her gün o kadar da kolay geçmiyor. Bazı günler, anlamlı günler çok daha farklı hisler oluşturabiliyor. 2 gün önce doğum günümdü, gün içinde kendimi sorguladığım pek çok an oldu, pek çok kişiden destek mesajları aldığım, anlaşıldığımı hissettiğim şöyle bir twitsel ile kendimi ifade etmeyi tercih ettim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;dad7&quot; name=&quot;dad7&quot;&gt;
      &lt;blockquote class=&quot;twitter-tweet&quot;&gt;
       &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&#x2F;status&#x2F;1448144006945202181&quot;&gt;
       &lt;&#x2F;a&gt;
      &lt;&#x2F;blockquote&gt;
      &lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;https:&#x2F;&#x2F;platform.twitter.com&#x2F;widgets.js&quot;&gt;
      &lt;&#x2F;script&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;865e&quot; name=&quot;865e&quot;&gt;
      Bu tip günlerin bana ayrı katkıları olduğunu düşünüyorum. Buraya niye geldiğimi, neden kaldığımı, neden devam ettiğimi düşünmek önemli. Sorgulamayı bıraktığım an, verdiğim kararların kölesi olma ihtimalini ortaya koymaya başlıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4350&quot; name=&quot;4350&quot;&gt;
      Uzun vade ve kısa vade mutluluğun dengesini kurmak, motivasyonlarının arka planında yatanları anlamak gerek. Bunları bırakmak, içinde bulunduğun durumu kabullenmek yeri geldiğinde basit gelebilir, ama en azından benim için mutsuz olduğum bir statükoda sıkışıp kalmaktan daha büyük bir kabus olamaz, o yüzden hayatım boyunca her zaman içinde bulunduğum durumu sorgulamayı, tercihlerimi bu sorgulamalar ışığında vermeyi tercih ettim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c9f8&quot; name=&quot;c9f8&quot;&gt;
      Yine negatiflerden bahsettim, çünkü belki de asıl alınması gereken derslerin burada olduğunu düşünüyorum. Hayallerle gelmek basit, gerçeklikten kopuk bir şekilde buraya gelen bir insanın yaşadığı gerçeklikle başa çıkamaması çok ciddi bir biçimde ihtimal dahilinde.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f3ac&quot; name=&quot;f3ac&quot;&gt;
      İyi şeyler yok mu peki? Tabii ki var. Bu konuyla ilgili en beğendiğim açıklama risk alabilme potansiyeli ile ilgili. İnsanlar, eğer bir konuda risk almışlarsa diğer konularda risklerini küçültmeye gitmeyi tercih ediyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4c0f&quot; name=&quot;4c0f&quot;&gt;
      Bunun en basit sebebi, kendini güvenceye almak. Hayatta bir alanda aldığım büyük bir riskin bana kaybettirdikleri diğer alanlardaki garantiler ile belli bir seviyede korunabilirse yaşamıma ciddi manada problemler yaşamadan devam edebilirim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5c62&quot; name=&quot;5c62&quot;&gt;
      ODTÜ’deki gibi inanılmaz derecede oturmuş, mutlu, geniş bir hayatı geride bırakıp, hiç kimseyi tanımadığın bir ülkede, geleceğinin belirsiz olduğu bir programa başlamak; her yeni durumla ilk kez karşılaşmak, bu durumlar karşısında ne yapacağını bilememenin de etkisiyle başarısız olmak, sinirlenmek, hayal kırıklığına uğramak çok doğal. Kendini böyle bir durumun içine bilerek ve isteyerek koymak ise çok ciddi bir risk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cdbc&quot; name=&quot;cdbc&quot;&gt;
      Bunun da etkisiyle, ilk geldiğim zaman başka riskler almanın benim için zor olduğunu hissediyordum. Anadilim olmayan bir dilde kalabalık bir grup içerisinde konuşmak, kurduğum cümlenin ortasında bir anda bir kelimeyi hatırlayamama ihtimalim bir risk mesela. Kültürünü bilmediğim insanlarla tanışmak, beklentilerini tahmin edemediğim insanlarla arkadaş olmaya çalışmak bir risk mesela. Derste gördüğün, gerçekten sevip sevmeyeceğini bilmediğin insanlarla arkadaş olmaya çalışmak bir risk mesela.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;87e0&quot; name=&quot;87e0&quot;&gt;
      Zaten konfor alanında olduğum bir zaman olsa bana risk gibi gelmeyecek, beni germeyecek, beni mutlu edecek pek çok şey; o konfor alanından uzaklaştığımda kendimi bilinçli olarak yönlendirmem gereken eylemlere dönüşmeye başlıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5ebc&quot; name=&quot;5ebc&quot;&gt;
      Kendimi, “mantıklı düşün, konuşmanın ortasında bir anda durakalmayacaksın, hadi diyelim ki kaldın kimsenin umurunda olmayacak, herkes İngilizcenin sana yabancı bir dil olduğunun farkında, hatta pek çok kişi de benzer durumlardan geçti hayatında farklı noktalarda” gibi mantıklı argümanlarla itmem gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;397c&quot; name=&quot;397c&quot;&gt;
      Gün geçtikçe bu itki gerekliliği azalıyor. Bir ay önce kendimi çok daha fazla enerji harcamak zorunda bulduğum pek çok aktiviteyi çok daha hızlı, çok daha kolay yapabiliyorum. Bulunduğum kalabalık gruplarda İngilizce espri yapıp insanları güldürebiliyorum, karşılaştığım insanlara selam verip kısa muhabbetler edebiliyorum, yeni insanlarla tanışmayı, konuşmayı, girişken olmayı kendime bir yük olarak değil, beni mutlu eden, bana enerji katan bir eylem olarak görüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0916&quot; name=&quot;0916&quot;&gt;
      Kısaca, çok daha iyi gidiyor, çok daha iyi gitmeye de devam edecek. Yukarıdaki grafikteki gibi, hayatın inişleri çıkışları olsa da alışma miktarımın düzenli şekilde gelişeceğine olan inancım tam. Yeri geldiğinde sinirleneceğim, üzüleceğim, mutsuz olacağım; ama bunlar da hayatın bir parçası zaten, Türkiye’de de defalarca mutsuz oldum, sinirlendim, ağladım, zırladım, etrafa patladım… Bunların hayatın önemli noktaları olduğunu, bizi biz yaptığını, asıl karakterimizin böyle anlarda daha çok kendini gösterdiğini, bunları inceleyip kendimizi daha iyi anlayabileceğimizi hiçbir zaman unutmamak gerek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3048&quot; name=&quot;3048&quot;&gt;
      Kapatmadan önce küçük bir reklam yapayım. Belki de görmüşsünüzdür, ama görmediyseniz lütfen Youtube kanalıma abone olmayı unutmayın. Burada yazdıklarımı daha detaylı, daha farklı şekillerde sizlere faydalı olması amacıyla paylaşmaya çalışıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p graf--trailing&quot; id=&quot;8d10&quot; name=&quot;8d10&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UC2leAU0dcu6qfoOFPYwMDuA&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UC2leAU0dcu6qfoOFPYwMDuA&quot; title=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UC2leAU0dcu6qfoOFPYwMDuA&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Alperen Keleş
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bilgisayar Mühendisliği, ODTÜ, Yurtdışı Stajı, Lisans Araştırmaları, Yüksek Lisans&#x2F;Doktora Süreçleri, Özgeçmiş&#x2F;Niyet…
       &lt;&#x2F;em&gt;
       www.youtube.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;f141d6bfc8de2f6e8e09b3e20957a232&quot; data-thumbnail-img-id=&quot;0*0ukxfV3j6Dfha6vp&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UC2leAU0dcu6qfoOFPYwMDuA&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*0ukxfV3j6Dfha6vp);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;daec23a510ce&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-10-15T04:59:39.968Z&quot;&gt;
     October 15, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;amerikada-i%CC%87kinci-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-bilinmezlikten-bilinirli%C4%9Fe-bir-yolculuk-daec23a510ce&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Amerika’da İlk Ayım Nasıl Geçti? Öğretici, Şaşırtıcı Derecede Dürüst Bir Anı Defteri.</title>
        <published>2021-09-24T00:00:00+00:00</published>
        <updated>2021-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/amerikada-ilk-ayim-nasil-gecti-ogretici-sasirtici-derecede-durust-bir-ani-defteri/"/>
        <id>https://alperenkeles.com/posts/amerikada-ilk-ayim-nasil-gecti-ogretici-sasirtici-derecede-durust-bir-ani-defteri/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/amerikada-ilk-ayim-nasil-gecti-ogretici-sasirtici-derecede-durust-bir-ani-defteri/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;1894&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;1ffd&quot; name=&quot;1ffd&quot;&gt;
      Amerika’da İlk Ayım Nasıl Geçti? Öğretici, Şaşırtıcı Derecede Dürüst Bir Anı Defteri.
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;5069&quot; name=&quot;5069&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1080&quot; data-image-id=&quot;1*SnfIXlxGcF5L_JZFojp3VA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1920&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*SnfIXlxGcF5L_JZFojp3VA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;8598&quot; name=&quot;8598&quot;&gt;
      Selam. Hoş geldin. Eğer uzun süredir beni takip ediyorsan, bu yazıya şaşırmış olabilirsin. Normalde insanlığa faydalı olmaya çalışan bir adam neden gidip ilk ayını anlattığı bir yazı yazsın ki (Youtube videosu hadi belki) diyor olabilirsin, belki de demiyorsundur, kafamda kuruyorumdur. Her neyse, bugün itibariyle 1 ay 1 günü doldurdum. Çok öğretici, dolu dolu, yeri geldiğinde karamsar, yeri geldiğinde umut verici, üzücü, mutluluk verici, gergin, pişman, kararsız zamanlar geçirdim. Bir kısmını yakın çevremle paylaştım, bir kısmını paylaşmadım. Ama günün sonunda bu yaşadıklarımın benim ve arkadaşlarımın başına geliyorsa başkalarının başına da gelebileceğine kanaat getirdiğim için bunları paylaşmak, benzer durumlardan geçenlerin yalnız olmadığını onlara hatırlatmak, benzer durumlardan geçecek olanlara içinde bulundukları durumun tehlikelerini göstermek için bu yazıyı yazmaya karar verdim, umarım birilerine faydam dokunur.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;099a&quot; name=&quot;099a&quot;&gt;
      Öncelikle buradaki durumumdan biraz bahsetmek istiyorum. Şu an doktora yaptığım üniversitede geçen yıl staj yaptığımdan dolayı, tanıdığım insanlar var; bu da benim için çok ciddi bir şans. Gelmeden zaten tanıştığım bir arkadaşla eve çıktım, aynı zamanda burada üst dönem doktora öğrencisi yardımsever bir tanıdığın bizim için beğendiğimiz evi gezmesiyle birlikte en önemli problemlerden olan ev meselesini görece kolay&#x2F;hızlı hallettim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7090&quot; name=&quot;7090&quot;&gt;
      Geçen yıl yaptığım stajdan aldığım para sayesinde belli bir sermaye ile gelme fırsatı buldum, evim eşyasız olduğundan dolayı yatak, masa, sandalye vb. pek çok eşyayı rahatlıkla alabildim. İlk maaşım ben ülkeye geldikten 12 gün sonra yattı, eğer o ilk para sermaye olmasaydı eşya alım işinde çok geç kalabilirdim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0334&quot; name=&quot;0334&quot;&gt;
      Ki şu anki haliyle bile geç kaldım, sonradan öğrendim ki benden daha zeki ve öngörülü arkadaşlar gelmeden sipariş verme gibi akıllıca bir hareket yaparak benim gibi 1 hafta şişme yatakta yatma fırsatını kaçırmışlar(!).
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;93f8&quot; name=&quot;93f8&quot;&gt;
      Geldiğim gün yine tanıdık vasıtasıyla kolayca eve geldim, ama buraya devam etmeden yolculuktan bahsetmemek olmaz. 8 yıldır (4 Lise + 4 Üniversite) ailemden uzakta okuyan bir birey olarak, son günkü ayrılmanın bana etkisini tahmin bile edemezdim, otobüse bindiğim anda ağlamaya başladım; 22.5 saatlik uçak yolculuğum boyunca aklıma geldikçe ağlamaya devam ettim. Bu esnada Twitter’da ülkeden kaçan bir hain olduğumu iddia ederek bana küfreden trollerin mesajlarını okuyup kafamı dağıttım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6bcb&quot; name=&quot;6bcb&quot;&gt;
      Çok daha uzatıp detaya da girebilirim, ama detaylardan ziyade ana fikir önemli, bunun ne kadar büyük ve ne kadar ciddi bir karar olduğunu hiçbir zaman unutmayın. Tüm hayatınızı değiştiriyorsunuz, ailenizden, arkadaşlarınızdan, tanıdığınız herhangi bir insandan, hatırladığınız herhangi bir manzaradan, yaşadığınız herhangi bir anıdan binlerce kilometre uzağa gidiyorsunuz, gitmeden önceki günlerin tadını çıkarın, bir kez o uçağa bindikten sonra o günlerin geri dönmeyeceğini unutmayın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f991&quot; name=&quot;f991&quot;&gt;
      Buraya gelebilecek güce, çabaya, cesarete, zekaya, iradeye sahip herkesin farkında olduğu çok temel bir şey, buranın da her yer gibi iyi ve kötü özelliklerinin olduğu, ama bunların çoğunu gelmeden anlamak bence çok da kolay değil, kendi gözlemlerimi paylaşmak istiyorum. Tabii ki benim gözlemlerim Amerika’nın tamamına genellenemeyecektir, College Park&#x2F;Maryland üzerinden kendi bölgenizle ilgili yorumlar yapmaya çalışabilirsiniz belki bilemiyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;f08e&quot; name=&quot;f08e&quot;&gt;
       — Dışarıda yemek yemek pahalı, üzerine bir de bahşiş girince(%18–25), Covid sonrası enflasyonla birlikte dışarıda yemek Türkiye’deki fiyat endeksine sahip bir insan için psikolojik olarak zorlayıcı olabiliyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3b89&quot; name=&quot;3b89&quot;&gt;
       +Evde yemek yapmak çok ucuz. Bugün 2 haftalık akşam yemeğim olacak et&#x2F;tavuk&#x2F;balık aldım yanlış görmediysem 30$ tutmadı.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0420&quot; name=&quot;0420&quot;&gt;
       — Getir&#x2F;Yemeksepeti tarzı sistemler bence(ve belki de ülkenin bu kısmında) yeterince gelişmiş değil. Çok fazla ek ücret alıyor, geç getiriyor, hız ve kullanıcı dostu sistemi hissedemiyorsunuz.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0c28&quot; name=&quot;0c28&quot;&gt;
       — Bankacılık sistemleri modern bankacılığı icat eden ülke olmalarına karşın aşırı eskide kalmış durumda. Havale&#x2F;EFT gibi sistemler oturmamış, kredi kartına ödeme yapmak bile 1 gün sürüyor, taksit diye bir kavram ortada yok bile… Genel olarak Türkiye’deki en kötü bankadan bile kötü olabilir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f914&quot; name=&quot;f914&quot;&gt;
       +Hizmet almak pahalı iken, ürün almak maaşa oranla aşırı ucuz. Geldiğimden beri bilgisayar&#x2F;tablet&#x2F;telefon&#x2F;e-kitap okuyucu&#x2F;kahve makinesi&#x2F;tüm oda eşyalarımı rahatça alabildim.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;93ea&quot; name=&quot;93ea&quot;&gt;
       — Araba olmadan yaşamak zor… Ofise 35 dakika, kahveciye 40 dakika, markete 45 dakika yürümem gerekiyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;8db5&quot; name=&quot;8db5&quot;&gt;
       — Problemleri çözmek zor, çünkü sistemi bilmiyorsunuz. Türkiye’de bir problemle karşılaştığınızda nasıl çözeceğinize dair bir iç sezginiz oluşmuş durumda, burada onu kullanmaya çalışırsanız başarılı olmak çok zor. Geldiğimden beri karşılaştığım engelleri bir şekilde kurnazlıkla kolayca aşmaya her çalıştığımda bir şekilde cezasını çekiyorum. O sezgiyi oluşturmak vakit alacak gibi duruyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2440&quot; name=&quot;2440&quot;&gt;
       — Sosyalleşmek çok da kolay değil. Türkiye’de görece sosyal bir insan olduğumu düşünmekten hoşlanıyorum. Ama genel olarak günlük hayatta İngilizce konuşurken dinlemek&#x2F;anlamak&#x2F;akıcı konuşarak diyalog içerisinde devam etmek özellikle kalabalık gruplarda birden fazla kişiye odaklanmanız gerekirse alışık olmayan insanlar için (bence) zor, en azından ben yeri geldiğinde kendimi çok da rahat hissetmiyorum. Buraya gelmekle zaten konfor alanınızdan çok ciddi şekilde dışarı çıktığınız için, hadi konfor alanımı sonsuza kadar genişleteyim de diyemiyorsunuz, evde oturup kimseyle görüşmeye çalışmamak çok daha kolay. Ama şanslıyım ki, (en azından benim bölümüm) bu duruma çoktan hazırlıklı. Öğrencilerin kaynaşabilmesi için pek çok etkinlik düzenliyorlar, bu etkinliklere katılmayı reddetmiyorsanız yavaş da olsa insanlarla tanışmak mümkün hale geliyor..
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;0d90&quot; name=&quot;0d90&quot;&gt;
      Günün sonunda baktığımızda, herkesin çok farklı tecrübeleri olacak. Türkiye’de son 1 yıldır hayatımın en güzel yılını geçirdikten sonra buraya gelip bir anda problemler&#x2F;yalnızlık&#x2F;güvensizliklerle boğuşmaya başlamak özellikle ilk günlerde daha hiçbir şeye alışamamışken beni ciddi karanlık noktalara sürükledi. Bu noktada eş&#x2F;dost&#x2F;arkadaş desteği çok önemli. Buraya gelirken Türkiye’de sizin çapanız olacak insanlardan kesinlikle uzaklaşmayın, çok pişman olursunuz. Arkadaşlarım ve ailem şu an benim en büyük destekçilerim, en büyük mutluluk kaynağım, her zaman da öyle olacaklar, onlar olmasaydı bu süreçte yaşayacağım depresif kondisyonu hayal bile edemiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d2c0&quot; name=&quot;d2c0&quot;&gt;
      Belki siz benzer problemler yaşamazsınız, belki adaptasyonunuz çok daha kolay ve hızlı olur, ancak ve ancak yaşarsanız bazı tavsiyeler vermek istiyorum. Buraya neden gelmeye karar verdiğinizi hiçbir zaman unutmayın. Potansiyelinizi keşfetmek, hak ettiğiniz refah seviyesinde yaşamak, hak ettiğiniz ücreti almak, sevdiğiniz işi kalifiye insanlarla yapmak, alanınızın uçlarını görmek, öğrenmek, konfor alanınızdan çıkmak, çeşitli kültürler görmek, insanlarla tanışmak… Buraya gelirken neyi isteyerek geldiyseniz, onu unutmayın, en büyük motivasyon kaynağınız her zaman o olacak. Ona tutunun, onu bıraktığınız anda umutsuzluğa kapılmak çok daha kolay olmaya başlayacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9b3c&quot; name=&quot;9b3c&quot;&gt;
      An itibariyle hayatım yoluna giriyor. Yeme&#x2F;İçme&#x2F;Çalışma düzenim oturmaya başladı, çoğu gerekli eşyamı aldım, yazı yazmaya ve kitap okumaya tekrardan başlıyorum, düzenli olarak Youtube videoları çekip editleyip paylaşacağım, 2 projede çalışmaya başlıyorum, ödevlerimi&#x2F;derslerimin okumalarını düzene sokacağım, ofise düzenli saatlerde gidiyorum, birkaç Türk, birkaç yabancı arkadaş edindim, hocalarla ve diğer araştırma görevlileriyle tanışmaya başladım… Çok fazla şey oldu, oluyor, ama bir şey kesin ki, düzensizlik&#x2F;kaos&#x2F;belirsizlik ortadan kalktıkça buraya neden geldiğimi hatırlamam kolaylaşıyor, umut ve heyecan ortaya çıkıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;fe7b&quot; name=&quot;fe7b&quot;&gt;
      Bu şekilde içimi döktüğüm, belki birkaç kişiye yardımcı olabilirsem mutlu olacağım bir yazıyı yazmak istedim, umarım beğenirsiniz.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;28e655463d2a&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-09-24T05:25:44.644Z&quot;&gt;
     September 24, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;amerikada-i%CC%87lk-ay%C4%B1m-nas%C4%B1l-ge%C3%A7ti-%C3%B6%C4%9Fretici-%C5%9Fa%C5%9F%C4%B1rt%C4%B1c%C4%B1-derecede-d%C3%BCr%C3%BCst-bir-an%C4%B1-defteri-28e655463d2a&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Toplu Mail Linki Nasıl Hazırlanır?</title>
        <published>2021-09-24T00:00:00+00:00</published>
        <updated>2021-09-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/toplu-mail-linki-nasil-hazirlanir/"/>
        <id>https://alperenkeles.com/posts/toplu-mail-linki-nasil-hazirlanir/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/toplu-mail-linki-nasil-hazirlanir/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;aec2&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;e721&quot; name=&quot;e721&quot;&gt;
      Toplu Mail Linki Nasıl Hazırlanır?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cb57&quot; name=&quot;cb57&quot;&gt;
      Önceki yıllarda toplu mail atılması gerektiğinde aşağıdakileri içeren bir belge hazırlanırdı.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;17ef&quot; name=&quot;17ef&quot;&gt;
       Mail İçeriği
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c8d3&quot; name=&quot;c8d3&quot;&gt;
       Mail Konusu
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ccc9&quot; name=&quot;ccc9&quot;&gt;
       Alıcılar
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6620&quot; name=&quot;6620&quot;&gt;
       Bilgi(CC)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;6292&quot; name=&quot;6292&quot;&gt;
      Bu belge çeşitli kanallar üzerinden dağıtılır, insanlar belgeyi açıp içerisinden kopyalayarak maili atarlardı. Maalesef ki bu süreç hem (görece) uzun, hem de hata yapmayı kolaylaştırıyor. Bu sebepten geçen yıl bunun daha kolay&#x2F;hızlı, sadece 4 tık ile mail atılabilen bir mekanizmasını geliştirmiştik. Bugün yapılan
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       “ODTÜ Yüz Yüze Dön”
      &lt;&#x2F;strong&gt;
      temalı mail çalışmasında geleneksel sistemi görünce, oluşturduğumuz sistematiği paylaşmak, sonraki nesillerde kullanılabilmesini sağlamak istedim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;e64d&quot; name=&quot;e64d&quot;&gt;
      Mailto Nedir?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6172&quot; name=&quot;6172&quot;&gt;
      Öncelikle biraz arka plan. Teknik detaylara girmeden anlatmaya çalışırsak, tarayıcıya kopyaladığınızda otomatik olarak sizin mail uygulamanızı açıp oraya linkteki içeriği yerleştiren bir özel bir link tipi mevcut.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3409&quot; name=&quot;3409&quot;&gt;
      Aşağıya isteyenlerin denemesi için küçük bir örnek bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;659c&quot; name=&quot;659c&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;mailto:alpkeles99@gmail.com?cc=alperen.keles@metu.edu.tr&amp;amp;bcc=e231024@metu.edu.tr&amp;amp;subject=Mutlu%20Y%C4%B1llar&amp;amp;body=Say%C4%B1n%20Kele%C5%9F%2C%0D%0A%0D%0ANice%20mutlu%20y%C4%B1llar%20dilerim!%0D%0A%0D%0ASayg%C4%B1mlar%C4%B1mla%2C%0D%0AODT%C3%9C%20%C3%96%C4%9Frencisi&quot; href=&quot;mailto:alpkeles99@gmail.com?cc=alperen.keles@metu.edu.tr&amp;amp;bcc=e231024@metu.edu.tr&amp;amp;subject=Mutlu%20Y%C4%B1llar&amp;amp;body=Say%C4%B1n%20Kele%C5%9F%2C%0D%0A%0D%0ANice%20mutlu%20y%C4%B1llar%20dilerim!%0D%0A%0D%0ASayg%C4%B1mlar%C4%B1mla%2C%0D%0AODT%C3%9C%20%C3%96%C4%9Frencisi&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        Bu Linke Tıklayın
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9758&quot; name=&quot;9758&quot;&gt;
      Yukarıdaki linke tıkladığınızda mail uygulamanız açılacak, ve aşağıdaki gibi bir mail kutusu göreceksiniz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;14db&quot; name=&quot;14db&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1378&quot; data-image-id=&quot;1*pRpPNchptfRLuZ-TEModSg.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;2382&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*pRpPNchptfRLuZ-TEModSg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9cb6&quot; name=&quot;9cb6&quot;&gt;
      Göndere tıklayarak yaklaşık 6 saniyede benim doğum günümü kutlayabilirsiniz :D
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;53c5&quot; name=&quot;53c5&quot;&gt;
      Peki arka planda ne oluyor? Yukarıda bastığınız linkin içeriğini aşağıda paylaşıyorum.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;6c56&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading graf--trailing&quot; id=&quot;c121&quot; name=&quot;c121&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       mailto:alpkeles99@gmail.com?cc=alperen.keles@metu.edu.tr&amp;amp;bcc=e231024@metu.edu.tr&amp;amp;subject=Mutlu%20Y%C4%B1llar&amp;amp;body=Say%C4%B1n%20Kele%C5%9F%2C%0D%0A%0D%0ANice%20mutlu%20y%C4%B1llar%20dilerim!%0D%0A%0D%0ASayg%C4%B1mlar%C4%B1mla%2C%0D%0AODT%C3%9C%20%C3%96%C4%9Frencisi
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;07d2&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading graf--trailing&quot; id=&quot;1b31&quot; name=&quot;1b31&quot;&gt;
      Aşağıda da parçalara bölünmüş hali.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;fc61&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;a2ce&quot; name=&quot;a2ce&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       mailto:alpkeles99@gmail.com?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ebec&quot; name=&quot;ebec&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       cc=alperen.keles@metu.edu.tr&amp;amp;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f235&quot; name=&quot;f235&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       bcc=e231024@metu.edu.tr&amp;amp;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e321&quot; name=&quot;e321&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       subject=Mutlu%20Y%C4%B1llar&amp;amp;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;dd3e&quot; name=&quot;dd3e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       body=Say%C4%B1n%20Kele%C5%9F%2C%0D%0A%0D%0ANice%20mutlu%20y%C4%B1llar%20dilerim!%0D%0A%0D%0ASayg%C4%B1mlar%C4%B1mla%2C%0D%0AODT%C3%9C%20%C3%96%C4%9Frencisi
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;a0d5&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;f664&quot; name=&quot;f664&quot;&gt;
      % li kısımlar Türkçe karakterlerden kaynaklanıyor, ama görebileceğiniz gibi aslında 5 farklı kısım var. Alıcı, cc, bcc, konu, içerik. Bunları doldurduktan sonra istediğiniz gibi mail linki oluşturabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2a74&quot; name=&quot;2a74&quot;&gt;
      Peki bu linki elle mi oluşturuyoruz, tabii ki hayır.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;eff0&quot; name=&quot;eff0&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;mailtolink.me&quot; href=&quot;https:&#x2F;&#x2F;mailtolink.me&quot; title=&quot;https:&#x2F;&#x2F;mailtolink.me&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Mailtolink.me | The Mailto Link Generator
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Mailto link code and markup generator with subject, body, cc and bcc. Quickly and easily generate code for those…
       &lt;&#x2F;em&gt;
       mailtolink.me
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock&quot; data-media-id=&quot;7138f36ae46d408e0bd1a06dea5550ad&quot; href=&quot;https:&#x2F;&#x2F;mailtolink.me&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;3aa8&quot; name=&quot;3aa8&quot;&gt;
      Yukarıda linkini paylaştığım siteye içeriğinizi yazıp kolayca mailto linkleri oluşturup kopyalayabilirsiniz. Yukarıda oluşturduğum link şu şekilde gözüküyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;c7f5&quot; name=&quot;c7f5&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1192&quot; data-image-id=&quot;1*OPnuZMckwylPfmmzbzHalg.png&quot; data-width=&quot;2142&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*OPnuZMckwylPfmmzbzHalg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;cea8&quot; name=&quot;cea8&quot;&gt;
      Peki insanlarla bu çirkin linki mi paylaşıyoruz, yine tabii ki hayır. Burada eski dostumuz link kısaltıcılardan yararlanıyoruz. Ben şahsen hep Evrim Ağacının yaptığı
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;dar.vin&quot; href=&quot;http:&#x2F;&#x2F;dar.vin&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        dar.vin
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
      &lt;&#x2F;strong&gt;
      i kullandım. Hesap oluşturup kaç kişinin linke girdiğine de bakabilme fırsatı veriyor size.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b9b3&quot; name=&quot;b9b3&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;156&quot; data-image-id=&quot;1*8W11E9Tntm4AAEAao0k10g.png&quot; data-width=&quot;1750&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*8W11E9Tntm4AAEAao0k10g.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;58bb&quot; name=&quot;58bb&quot;&gt;
      Geçtiğimiz haftalarda mezuniyet için yapılan linke bakabilirsiniz buradan.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4b3d&quot; name=&quot;4b3d&quot;&gt;
      Yeni süreci kısaca özetlemek gerekirse.
     &lt;&#x2F;p&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;3814&quot; name=&quot;3814&quot;&gt;
       İçerik, konu, alıcı, cc, bcc hazırlanacak.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a483&quot; name=&quot;a483&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;mailtolink.me&quot; href=&quot;http:&#x2F;&#x2F;mailtolink.me&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
         mailtolink.me
        &lt;&#x2F;strong&gt;
       &lt;&#x2F;a&gt;
       adresine gidilip oraya bu hazırlananlar yerleştirilecek
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;72cd&quot; name=&quot;72cd&quot;&gt;
       Aşağıdaki
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        “Copy Code”
       &lt;&#x2F;strong&gt;
       a tıklanıp link kopyalanacak.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6461&quot; name=&quot;6461&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;dar.vin&quot; href=&quot;http:&#x2F;&#x2F;dar.vin&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
         dar.vin
        &lt;&#x2F;strong&gt;
       &lt;&#x2F;a&gt;
       adresine gidilip giriş yapılacak.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a450&quot; name=&quot;a450&quot;&gt;
       Link
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;dar.vin&quot; href=&quot;http:&#x2F;&#x2F;dar.vin&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
         dar.vin
        &lt;&#x2F;strong&gt;
       &lt;&#x2F;a&gt;
       e yapıştırılacak, mail linki oluşturulacak.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c146&quot; name=&quot;c146&quot;&gt;
       Gerekli metinle birlikte paylaşılacak
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;a486&quot; name=&quot;a486&quot;&gt;
      Eğer ki bu işlem sırasında bir problem yaşanırsa, benim gösterirken yaptığım gibi
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;dar.vin&quot; href=&quot;http:&#x2F;&#x2F;dar.vin&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        dar.vin
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
      yerine bir
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       medium
      &lt;&#x2F;strong&gt;
      yazısının, bir
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       notion
      &lt;&#x2F;strong&gt;
      linkinin, basitçe
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       hazırlanmış bir web sitesinde bir butonun
      &lt;&#x2F;strong&gt;
      içine de koyabilirsiniz linki.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;3d9a&quot; name=&quot;3d9a&quot;&gt;
      Küçük Bazı Detaylar
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;31c7&quot; name=&quot;31c7&quot;&gt;
       Facebook&#x2F;Instagram dar.vin linkine izin vermiyor. Başka bir link yönlendirici kullanılabilir ya da bir medium&#x2F;notion sayfası linklenebilir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a623&quot; name=&quot;a623&quot;&gt;
       Bu linklerin bir karakter sınırı var(biraz araştırdım ama tam sayıyı bulamadım), o yüzden mailleri çok uzatmamakta yarar var. Ya da maili ayrıca kopyalatacaksınız(geçen yıl 2 defa yapmak zorunda kaldık) o da ekstra elle kodlama gerektiriyor.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;2bee&quot; name=&quot;2bee&quot;&gt;
      Şimdiden kolay gelsin, iyi çalışmalar dilerim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;a788&quot; name=&quot;a788&quot;&gt;
      Not: Gerçekten kutlamak isterseniz 13 Ekimde mailinizi bekliyorum.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5043b769ef9e&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-09-25T00:39:32.391Z&quot;&gt;
     September 25, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;toplu-mail-linki-nas%C4%B1l-haz%C4%B1rlan%C4%B1r-5043b769ef9e&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Story of Deviation and Returning</title>
        <published>2021-07-31T00:00:00+00:00</published>
        <updated>2021-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/the-story-of-deviation-and-returning/"/>
        <id>https://alperenkeles.com/posts/the-story-of-deviation-and-returning/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/the-story-of-deviation-and-returning/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;03b6&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;6fb3&quot; name=&quot;6fb3&quot;&gt;
      The Story of Deviation and Returning
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f25b&quot; name=&quot;f25b&quot;&gt;
      I always loved thinking about philosophical discussions and paradoxes. I am amazed that they are so simple at first glance yet so complex in their nature. Although I am intrigued by The Story of Achilles and The Tortoise, The Arrow Paradox, and many other paradoxes, The Ship of Theseus has a special place for me.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       It reminds me of my own nature; changing, evolving, deviating every single second of every single day.
      &lt;&#x2F;strong&gt;
      When I saw the title “Reentry”, my mind immediately revealed a connection with the story of the paradox of identity.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fa66&quot; name=&quot;fa66&quot;&gt;
      For those of you who have not read the paradox before, here is a short version of the story by Plutarch, the historian taken from Wikipedia:
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;0d65&quot; name=&quot;0d65&quot;&gt;
      The ship wherein
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Theseus&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Theseus&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Theseus
      &lt;&#x2F;a&gt;
      and the youth of Athens returned from Crete had thirty oars, and was preserved by the Athenians down even to the time of
      &lt;a class=&quot;markup--anchor markup--blockquote-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Demetrius_of_Phalerum&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Demetrius_of_Phalerum&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;Demetrius of Phalerum&quot;&gt;
       Demetrius Phalereus
      &lt;&#x2F;a&gt;
      , for they took away the old planks as they decayed, putting in new and stronger timber in their places, insomuch that this ship became a standing example among the philosophers, for the logical question of things that grow; one side holding that the ship remained the same, and the other contending that it was not the same.
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;a6c4&quot; name=&quot;a6c4&quot;&gt;
      —
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Plutarch,
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Theseus
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--blockquote&quot; id=&quot;8552&quot; name=&quot;8552&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;563&quot; data-image-id=&quot;1*ducjtZEhe072Ii85JMtZHQ.png&quot; data-width=&quot;1000&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*ducjtZEhe072Ii85JMtZHQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;2607&quot; name=&quot;2607&quot;&gt;
      Just as The Ship of Theseus, we humans are everchanging. We change with the world around us, with our experiences, with our relationships… These changes are unknown to us, and those around in the short sight, yet every slight deviation contributes to a much more significant difference alteration.
      &lt;br&#x2F;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       There is a phenomenon called Jamais Vu, also known as Vuja De, the reverse Deja Vu.
      &lt;&#x2F;strong&gt;
      It is the experience where one rationally knows that they have experienced the situation before. Yet, they irrationally feel that this is their first impression. I believe this is a core feature of the “Reentry” theme. After a long time, a load of experiences with different people in various places, we are not even the same person living those experiences. Talking with an old friend, revisiting an old place, reliving an old experience can and will feel different for us.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ed8a&quot; name=&quot;ed8a&quot;&gt;
      This experience can be trivial, as simple as seeing how life has changed you, or it might be hurting, demonstrating what you could have done or what you have lost in that time. Still, I believe the best version of this experience is to not live it. The most beautiful feeling I ever lived in the sense of familiarity with an old friend, old place, old experience… After years apart, despite having completely different lives in entirely different directions, it is fabulous to relive the joy of talking to an old friend, knowing them again, knowing yourself again, experiencing the nostalgia, looking at the past with a mix of happiness and sadness, looking at the future with a combination of excitement and anxiety, and living the moment without regrets and the feeling of the misfit.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1a7c&quot; name=&quot;1a7c&quot;&gt;
      In 22 days, I will be leaving a life that I love and have loved for the past 4 years. I will be leaving the place I see as my home. I will be leaving the people I see as my family. I will be leaving the experiences that I see as a composition of me. I will be going somewhere where I know nobody, where I know nowhere, and where I have no expectations, and where nobody has any expectations from me. I will be free, yet alone. I am excited and happy, yet I am frightened by all of these. I have left my comfort zone many times in the past, yet it was never this big, this crucial, and this much intimidating. Yet this is my life, I have chosen this path, and I am thrilled to know that I will experience the “Reentry” with my current life in the future. I will return to these places, walk on the same roads, get coffee from the same stand, and talk to the same people.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       And I hope that I don’t feel Jamais Vu. Instead, I feel the familiarity. I want to look at the past, embrace it, and know that who I am today is the product of all my history, and it has not left me, and I will not leave it.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6512&quot; name=&quot;6512&quot;&gt;
      References
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;35f4&quot; name=&quot;35f4&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;theurbanengine.com&#x2F;blog&#x2F;&#x2F;the-ship-of-theseus&quot; href=&quot;http:&#x2F;&#x2F;theurbanengine.com&#x2F;blog&#x2F;&#x2F;the-ship-of-theseus&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        http:&#x2F;&#x2F;theurbanengine.com&#x2F;blog&#x2F;&#x2F;the-ship-of-theseus
       &lt;&#x2F;a&gt;
       (Photograph is taken from the website)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li graf--trailing&quot; id=&quot;9ee7&quot; name=&quot;9ee7&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;D%C3%A9j%C3%A0_vu&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;D%C3%A9j%C3%A0_vu&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;D%C3%A9j%C3%A0_vu
       &lt;&#x2F;a&gt;
       (Definitions of Vuja De and Jamais Vu are taken from the website; also the story of Plutarch is taken from the website)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;6f3561062f38&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-07-31T12:48:14.515Z&quot;&gt;
     July 31, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;the-story-of-deviation-and-returning-6f3561062f38&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>ODTÜ’de Bilgisayar Mühendisliği: Nedir? Ne Değildir?</title>
        <published>2021-07-28T00:00:00+00:00</published>
        <updated>2021-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/odtude-bilgisayar-muhendisligi-nedir-ne-degildir/"/>
        <id>https://alperenkeles.com/posts/odtude-bilgisayar-muhendisligi-nedir-ne-degildir/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/odtude-bilgisayar-muhendisligi-nedir-ne-degildir/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;afaf&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;b7d4&quot; name=&quot;b7d4&quot;&gt;
      ODTÜ’de Bilgisayar Mühendisliği: Nedir? Ne Değildir?
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;968e&quot; name=&quot;968e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;800&quot; data-image-id=&quot;1*hezzTYRwbHCv2Y6AApM7tQ.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*hezzTYRwbHCv2Y6AApM7tQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;4208&quot; name=&quot;4208&quot;&gt;
      Bir süredir yeni gelecek arkadaşlara rehber olmasını dilediğim bir yazı yazmak istiyordum, tercih dönemiyle birleştirmek makul geldiği için adaylara ve yeni girişli arkadaşlara yardımcı olacak bir rehberle karşınızdayım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6881&quot; name=&quot;6881&quot;&gt;
      Bölümle ilgili anlamanız gereken ilk şey, herkesin kendisine has ve eşsiz tecrübelere sahip olduğu, farklı bakış açıları ve fikirler çerçevesinde bölümü deneyimlediği. Ben yazı boyunca çeşitli nesnel bilgiler verecek olsam da, pek çok noktada şahsi öznel yorumlarımı da katıyor olacağım; bana güvenmeyin, sizin tecrübeleriniz çok daha farklı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a83b&quot; name=&quot;a83b&quot;&gt;
      Bu küçük noktaları da aradan çıkardıktan sonra, eğitim ile başlayalım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b1cc&quot; name=&quot;b1cc&quot;&gt;
      Bölüm eğitimiyle ilgili söylenebilecek&#x2F;söylenen pek çok yorum var. Bana göre, kötü mü derseniz hayır, daha iyi olabilir mi derseniz kesinlikle evet. On yıllar içerisinde oturmuş, geçtiğimiz yıllarda çalıştığı deneysel olarak kanıtlanmış bazı öğretim metotlarının zamanla demode hala gelmeye başladığını görebiliyoruz. Hala sınavlarda kağıda elle kod yazılması, yeri geldiğinde 10 yıllık ödevlerin verilmesi, eski birtakım teknolojilerde ısrarcı olunması… Ancak Türkiye genelinde(pek çok üniversitedeki arkadaşlarımla konuşmalarımdan şahsi gözlemim) hiçbir üniversitede olmayan COW(Ceng on The Web) gibi öğrenci&#x2F;hoca&#x2F;mezun üçlüsünün direkt olarak açık bir forumda iletişim kurabildiği, iş&#x2F;staj ilanlarından tutun da kişisel problemlere kadar pek çok konuda konuşabildiği, beraber yorum yapabildiği bir platforma sahip bir departmandan bahsediyoruz. ODTÜ genelinde yayılmaya başlanmış, Türkiye’de hala emekleme çağlarında olan lisans araştırmalarının inanılmaz pozitif bir ivme ile büyüdüğü ve büyümeye devam edeceği, geçmiş yıllardaki mezunlarının dünyanın dört bir ucuna dağıldığı, Linkedin&#x2F;Mail üzerinden ulaştığınızda size anında samimi cevaplar verebildikleri bir bölüm hakkında konuşuyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;976a&quot; name=&quot;976a&quot;&gt;
      Elbette ki pek çok hata var, geliştirilebilecek binlerce şey var, ve bizim bölüm öğrencileri olarak yaptığımız en önemli şeylerden birisi bu tartışmaları başlatmak. Kendi içimizde konuştuğumuz problemleri dile getirmek, bölümü bizden sonra gelecekler için çok daha iyi hale getirmek, çok daha geliştirmek…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f8e6&quot; name=&quot;f8e6&quot;&gt;
      Daha somut kısımlara geçecek olursak.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;956a&quot; name=&quot;956a&quot;&gt;
       Bu bölüm fırsatların insanların önüne altın tepsi ile sunulduğu, tepiştirildiği bir bölüm değil. Rekabetin ve başarı eşiğinin yüksek olduğu, fırsat arayanların ve çabalayanların karşılığını alacağı bir bölüm. Başka özel üniversiteler öğrencileri için yurtdışı staj programları oluşturup direkt şirketlerle bağlantı kurarken, öğrencinin sağladığı özgeçmişi 100–150 şirkete direkt olarak ilettikleri bir ağ kurarken; bizim bölümde staj, iş her zaman öğrencinin kendi eforu ile çözülür. Günün sonunda öğretici ve faydalı da olsa, o arada harcanan zaman ve kişisel yıpranmaya yeri geldiğinde değmeyebilir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;47eb&quot; name=&quot;47eb&quot;&gt;
       Bölüm bilgisayarları yeni değişti(daha hiç kullanılmadılar hatta), dolayısıyla aşırı yorum yapamıyorum ancak gördüğüm kadarıyla son gelen bilgisayarlar gayet yeni ve performansları da kötü değil. Toplamda yaklaşık 100 bilgisayar içeren 3 farklı laboratuvar mevcut(Mera, Digital, İsmail Abi Laboratuvarları). Lablar genelde aşırı dolu olmasa da, dönemin yoğun olduğu ödev&#x2F;sınav haftalarında yer bulamadığınız olacaktır.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;21cd&quot; name=&quot;21cd&quot;&gt;
       Bölüm binası bazı kısımlar hariç aşırı eski(dış tarafı yeni yapıldı, içine de yeni — yine neredeyse daha hiç kullanılmayan çok güzel bir çalışma salonu yapıldı), ama bir kez içerisinde vakit geçirip bağlanmaya başladıktan sonra aşık olacağınız, çok ilginç bir mimari. Ben okuduğum 4 yılda en azından 40–50 gece bölümde uyumuşumdur&#x2F;sabahlamışımdır. Bölümden sabah 8.15&#x27;de uykulu bir şekilde çıkıp Çatı’da(ODTÜ’nün ünlü yemek mekanlarından — ilk yıl çok gideceksiniz, sonra sıkılırsınız yavaştan) omlet + çay ile yapacağınız bir kahvaltının tadını çok az şey verir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9769&quot; name=&quot;9769&quot;&gt;
       Daha önce de bahsettiğim gibi, bölüm fırsatların altın tepsi ile sunulduğu bir bölüm değil, ancak istekli, motive, çalışan ve araştıran öğrenciler için pek çok imkan var. Yurt dışı stajı yapanlar, hocalarla çalışanlar, yüksek lisans doktora yapanlar, 1–2. sınıfta part-time çalışıp kendi parasını kazanmaya başlayanlar… Pek çok farklı tipte insan kendi ilgi alanlarına farklı sektör ve pozisyonlarda çok hızlı şekilde çok başarılı hale gelebiliyor. Bu noktada mezunlardan, üst dönemlerden, kendi çevrenizden tavsiye almak, sorularınızı sormak, size sorulan sorulara cevap vermek aşırı önemli hale geliyor. Akranlarınız sizin için en değerli bilgi kaynakları olacak, siz onlar için en önemli destek ayakları olacaksınız. Hep birlikte geliştiğimiz, öğrendiğimiz, büyüdüğümüz bir atmosfer hepimiz için çok güzel ve faydalı olacaktır.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;fe85&quot; name=&quot;fe85&quot;&gt;
       İnanılmaz farklı düşüncelerde, zihniyetlerde, arka planlarda insanlarla tanışacaksınız. Evli sınıf arkadaşlarınız da olacak, 20 yaşında hala ailesi ile yaşayanlar da, tıpı bırakıp 25 yaşında okumaya gelen de, 55 yaşında 1. sınıf olan da… Bu insanlarla konuştukça, tanıştıkça, arkadaş oldukça hayat vizyonunuz açılacak. Üniversiteye gelene kadar hep kendi sosyokültürel&#x2F;sosyoekonomik çerçevenizden baktınız hayata, artık farklı insanları da görmeye, gözlerinizi gerçekten açmaya başlayacaksınız, bu fırsatı kaçırmayın.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a699&quot; name=&quot;a699&quot;&gt;
       ODTÜ Bilgisayar Topluluğu gibi köklü, içerisinde çok farklı dinamikleri, insanları bulunduran, Code Night gibi inanılmaz eğlenceli, kaynaştırıcı etkinliklerden Programlama Yarışması gibi daha köklü, oturmuş ve ciddi etkinliklere sahip güzel bir öğrenci topluluğunu da bölümde barındırıyoruz. Benim, ve pek çok diğer öğrencinin yolu geçmiştir, kesinlikle şans vermenizi, oradaki insanları ve ortamı görmenizi dilerim.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;d8d4&quot; name=&quot;d8d4&quot;&gt;
      Söylenecek daha çok şey var, ancak çok da sizleri sıkmadan sorularınızı sormaya davet ediyorum. Bana
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Keleesssss&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Twitter
      &lt;&#x2F;a&gt;
      ,
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.instagram.com&#x2F;keleesssss&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;www.instagram.com&#x2F;keleesssss&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       Instagram
      &lt;&#x2F;a&gt;
      veyahut mail(alpkeles99@gmail.com) üzerinden ulaşıp istediğiniz sorunuzu sorabilirsiniz. Aşağıya bölümle ilgili başka kaynaklar daha bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;d97f&quot; name=&quot;d97f&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;tanitim.ceng.metu.edu.tr&quot; href=&quot;https:&#x2F;&#x2F;tanitim.ceng.metu.edu.tr&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;tanitim.ceng.metu.edu.tr
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;42eb&quot; name=&quot;42eb&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZN9mR2ztGzw&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZN9mR2ztGzw&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=ZN9mR2ztGzw
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;773f&quot; name=&quot;773f&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BBprzB9yMIA&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BBprzB9yMIA&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=BBprzB9yMIA
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li graf--trailing&quot; id=&quot;776f&quot; name=&quot;776f&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pezlXkOI7jA&amp;amp;t=596s&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pezlXkOI7jA&amp;amp;t=596s&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=pezlXkOI7jA&amp;amp;t=596s
       &lt;&#x2F;a&gt;
       (bunda ben de varım 1. sınıfım daha)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;1ef8a24e8e9f&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-07-28T22:50:32.701Z&quot;&gt;
     July 28, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;odt%C3%BCde-bilgisayar-m%C3%BChendisli%C4%9Fi-nedir-ne-de%C4%9Fildir-1ef8a24e8e9f&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Vermek ve Almak: İlişkilere Yeni Bir Bakış Açısı</title>
        <published>2021-07-13T00:00:00+00:00</published>
        <updated>2021-07-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/vermek-ve-almak-iliskilere-yeni-bir-bakis-acisi/"/>
        <id>https://alperenkeles.com/posts/vermek-ve-almak-iliskilere-yeni-bir-bakis-acisi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/vermek-ve-almak-iliskilere-yeni-bir-bakis-acisi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;97a6&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;5fe5&quot; name=&quot;5fe5&quot;&gt;
      Vermek ve Almak: İlişkilere Yeni Bir Bakış Açısı
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6493&quot; name=&quot;6493&quot;&gt;
      Bundan birkaç ay önce, şans eseri “Giver, Taker, Matcher” adında insanların birbirleriyle olan ilişkilerine dair bir yazı okumuştum. O zamanlar teori bana ilgi çekici gelse de, aşırı vurucu olduğunu hissettiğimi hatırlamıyorum, yalnızca biraz heyecanlanmış idim. Aradan geçen zamandan sonra, insanlarla ilişkilerimden aldığım sonuçların şu anki ilişkilerime etkisini bu teori üzerinden değerlendirmeye başladım, ve teorinin asıl ortaya çıkışı olan Adam Grant tarafından yazılan “Give and Take: A Revolutionary Approach to Success” kitabını okumaya başladım. Araştırdığımda konu hakkında Türkçe detaylı bir kaynak göremediğimden dolayı(1–2 YT videosu var sanırım sadece), daha fazla insanın yararlanabileceği Türkçe bir özet sunmak istedim; karşınızdayım.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8c02&quot; name=&quot;8c02&quot;&gt;
      Hadi Başlayalım
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;94ac&quot; name=&quot;94ac&quot;&gt;
      İnsanları tanımlarken kullanılan pek çok psikolojik sınıflandırma yöntemi mevcut. En akla gelen, ana akım olanlardan bir tanesi Myers-Briggs kişilik indikatörü, diğer bir deyişle 16personalities. Adam Grant, insanları birbirleriyle olan ilişkilerindeki “alma ve verme” eylemlerine yaklaşımları üzerinden sınıflandırıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7422&quot; name=&quot;7422&quot;&gt;
      İlk grubumuz olan “Giver — Verici” insanlar diğerleriyle olan ilişkilerinde karşılık beklemeden verme yaklaşımında iken;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7072&quot; name=&quot;7072&quot;&gt;
      İkinci grubumuz olan “Taker — Alıcı” insanlar diğer insanlara “Kaz gelecek yerden tavuk esirgenmez.” bakış açısı ile yaklaşıyor, ancak karşılığında daha büyük bir şey alabileceklerini biliyorlar ise veriyorlar. Aynı şekilde veren insanları suistimal etme, düzenli bir şekilde alarak kendilerini yükseltme ve yüceltme çabası içerisindeler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b7d5&quot; name=&quot;b7d5&quot;&gt;
      Son grup ise, “Matcher — Eşitleyici” insanlar. Toplumun çoğunluğunu oluşturan bu grup ciddi bir adalet duygusuna sahip. İlişkilerinde aldıkları ve verdiklerinin eşit olması gerektiğine inanıyor, vericileri ödüllendiriyor, alıcıları ise cezalandırıyorlar.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;28b5&quot; name=&quot;28b5&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;628&quot; data-image-id=&quot;1*WEAXLlmHz70rri9SAec7hg.png&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*WEAXLlmHz70rri9SAec7hg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e712&quot; name=&quot;e712&quot;&gt;
      Herkesin hayatın farklı alanlarına aldığı tavırlar birbirinden farklı, çoğu insan yakın kişisel ilişkilerinde daha “Giver” davranırken, iş ortamlarında “Matcher” davranmayı tercih ediyor. Adam Grant ve ekibinin yanı sıra diğer bağımsız gruplarının da yaptığı araştırmalar sonucunda başarıyı “Çalışkanlık, Zeka, Azim, Hırs” gibi kavramlara ilaveten kurulan ilişkilerin nasıl etkilediğini de öğreniyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;247d&quot; name=&quot;247d&quot;&gt;
      En başarısız insan grubu, şaşırtıcı olmayan bir şekilde “Giver” lar. Kendi vakitlerinden ve enerjilerinden harcayıp diğer insanlara yardımcı olmaktan kendi işlerini bitirmeyi başaramayan diğerkam vericiler iş hayatındaki merdivenlerin en dibinde görülüyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5b94&quot; name=&quot;5b94&quot;&gt;
      Asıl şaşırtıcı olan ise, merdivenin en tepesinde yine “Giver” ların bulunması. “Matcher” ve “Taker” lar daha ortalarda bulunurken, en başarılı ve en başarısız insanların “Giver” olduğu gözlemleniyor. Bunun en temel sebebi de, toplumun çoğunluğu iş hayatında “Matcher” gibi davrandığından dolayı, suistimal edildiğini gördükleri “Taker” kişileri cezalandırıyor, itibarlarını düşürüyor, ilerlemelerine ket vuruyorlar. Diğer yandan, “Giver” lar “Matcher” lar tarafından ödüllendiriliyor, düzenli bir şekilde hep birlikte büyüyor, gelişiyor. Suistimal edilmesine mahal vermeyen, diğer insanlara yardım ederken kendinden yaptığı fedakarlıkları doğru seviyede limitleyebilen “Giver” lar bu sayede merdivenin en tepesine çıkabiliyorlar. Aşağıya bu konuda oluşturulmuş bir grafiği bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4891&quot; name=&quot;4891&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;540&quot; data-image-id=&quot;1*Fx4t2MBS_Vpw1M1Kg30-fw.png&quot; data-width=&quot;960&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Fx4t2MBS_Vpw1M1Kg30-fw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;40fe&quot; name=&quot;40fe&quot;&gt;
      İş hayatının pek çok noktasında da görülebildiği gibi, birlikte büyümek, birlikte gelişmek insanları en avantajlı duruma getirebiliyor. Tabii ki gerçek dünya bu kadar basit değil, kitapta “Giver” gibi davranıp kendisinin yücelten Sahtekar “Taker” lardan da bahsediliyor, “Giver” olmanın potansiyel tehlikelerinden de.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a9f9&quot; name=&quot;a9f9&quot;&gt;
      Bu yazıyı yazma sebebime gelir isek, keşfedilen en önemli bulgulardan birisi bilinç seviyesinde bu davranışların kontrol edilebileceği. Daha fazla insan bu fenomenden haberdar oldukça, daha fazla birlikte büyürsek, daha fazla birbirimize yardımcı, toksiklikten uzak, gelişime açık bir ortamda hep beraber gelişebileceğimize, büyüyebileceğimize, hem kendimizi, hem de çevremizi güzelleştirebileceğimize inanıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f0b2&quot; name=&quot;f0b2&quot;&gt;
      Kitabın 28 sayfalık ilk bölümü Adam Grant’in kendi internet sitesinde açıkça yayınlanıyor, ilginizi çekme ihtimaline karşın aşağıya bırakıyorum. Kitap Türkçeye de çevrilmiş durumda ancak ben şahsen orijinal dilde okuyorum, o yüzden çeviriye yorum yapamayacağım. Umarım okur, kendinize dair keşiflerde bulunur, bu yazıdan faydalanmış olursunuz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4f34&quot; name=&quot;4f34&quot;&gt;
      Sayfa Linki:
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.adamgrant.net&#x2F;book&#x2F;give-and-take&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;www.adamgrant.net&#x2F;book&#x2F;give-and-take&#x2F;&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;www.adamgrant.net&#x2F;book&#x2F;give-and-take&#x2F;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b3cc&quot; name=&quot;b3cc&quot;&gt;
      İlk Bölüm Linki:
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;88fca1f1-49b6-49f4-96b9-beb47d8e6947.filesusr.com&#x2F;ugd&#x2F;955681_ebab6db8cd814da5852483e441352a7e.pdf&quot; href=&quot;https:&#x2F;&#x2F;88fca1f1-49b6-49f4-96b9-beb47d8e6947.filesusr.com&#x2F;ugd&#x2F;955681_ebab6db8cd814da5852483e441352a7e.pdf&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;88fca1f1-49b6-49f4-96b9-beb47d8e6947.filesusr.com&#x2F;ugd&#x2F;955681_ebab6db8cd814da5852483e441352a7e.pdf
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;b191&quot; name=&quot;b191&quot;&gt;
      Tüm Kitap Linki(Amazon):
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;Give-Take-Helping-Others-Success&#x2F;dp&#x2F;0143124986&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.com&#x2F;Give-Take-Helping-Others-Success&#x2F;dp&#x2F;0143124986&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;www.amazon.com&#x2F;Give-Take-Helping-Others-Success&#x2F;dp&#x2F;0143124986
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;17841d152c44&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-07-13T16:06:17.265Z&quot;&gt;
     July 13, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;vermek-ve-almak-i%CC%87li%C5%9Fkilere-yeni-bir-bak%C4%B1%C5%9F-a%C3%A7%C4%B1s%C4%B1-17841d152c44&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Görüşürüz ODTÜ!</title>
        <published>2021-06-21T00:00:00+00:00</published>
        <updated>2021-06-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/gorusuruz-odtu/"/>
        <id>https://alperenkeles.com/posts/gorusuruz-odtu/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/gorusuruz-odtu/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;1ef7&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;8d2d&quot; name=&quot;8d2d&quot;&gt;
      Görüşürüz ODTÜ!
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;885f&quot; name=&quot;885f&quot;&gt;
      Bu yazıyı herhalde 6. yazışım, ancak her seferinde tekrar tekrar beğenmediğim için siliyor, siliyor, tekrar yazıyorum. Yaşadığım duyguları sözlerle ifade edemiyorum, bir türlü doğru kelimeleri bulamıyorum. Benim kadar çok konuşan bir insan için, cümle kuramadığını hissetmenin ne kadar farklı, ne kadar ilginç olduğunu hayal dahi edemezsiniz… Ama bunu yazmadığımda, gelecekte pişman olacağımı da biliyorum, hayatımın en önemli tecrübesine, en önemli zamanına veda etmezsem, hayatım boyunca keşke uğraşsaydın diyeceğimi biliyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a35a&quot; name=&quot;a35a&quot;&gt;
      ODTÜ, hepimiz için çok şey ifade ediyor. Bazılarımız için sadece bir okul, bazılarımız içinse bir ev, bir aile, bir arkadaş, bir korunak… Benim için de çok özel bir yerdi ODTÜ. Kendimi ilk defa ait hissettiğim, ilk defa benimsediğim yerdi, ilk defa fanatikliğini yaptığım, “benim okulum” diyebileceğim yerdi. Yaşadığım 4 şehirde, okuduğum 6 okulda başka hiçbir yerde kendimi bu kadar konforlu, bu kadar bağrına basılmış, bu kadar ait hissetmedim hiçbir zaman. Kazandığım andan, bitirdiğim ana kadar; onlarca, belki de yüzlerce farklı sorunla karşılaşmama rağmen, her birisini çözerken, yeri geldiğinde okula küfrederken, kavga ederken bile bir aile kavgasının içinde gibi hissettim hep. Benim okulumdu, iyileştirmek benim sorumluluğumdu, yeri geldiğinde başaramadığım çok fazla şey oldu, okula geldiğimden beri yapmaya çabaladığım 100 şeyden belki sadece 10 tanesini başarabildim, ancak hiçbirisinde vaktimin boşa gittiğine yanmadım bir kez bile. Çünkü burası günün sonunda benim okulum, benim ailem, benim okulum…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;d6ce&quot; name=&quot;d6ce&quot;&gt;
      Bu yazıyı yazarken çok düşünmemin bir diğer sebebi de, ne hakkında yazacağımı da bilmemem. Ne söylemeliyim, kime söylemeliyim, öğüt mü vermeliyim, iç mi dökmeliyim, keyfe keder anılarımdan mı bahsetmeliyim… Günün sonunda, bu yazıyı kendime yazdığımı fark ettim. 10 yıl sonra okuduğumda bu günleri tekrardan hatırlamak istiyorum, bu duyguları tekrardan yaşayabilmek istiyorum. O yüzden yolculuğumdan bahsedeceğim, ODTÜ’ye geldiğim günden, gittiğim güne. Bunun kime, nasıl faydası olur, gerçekten kimse okur mu, bilmiyorum. Belki de okulun yok edilmeye çalışılan kültürüne çok az da olsa bir katkısı dokunur, belki hiçbir etkisi olmaz.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;60cc&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;8a08&quot; name=&quot;8a08&quot;&gt;
      ODTÜ’ye Bilkent isteyerek geldim. 10. sınıfta bölümü gezmiş, beğenmemiştim, çok korkarak ODTÜ yazdım, hayatımdaki en iyi kararı verdiğimi tabii ki bilmiyordum. Sonrasında ekşi sözlükteki 300 sayfa ODTÜ yazılarını okumaya başladım Bilkent’in tutmadığını tahmin etmeye başladığım andan itibaren. Her okuduğum yazıda okulu daha çok sevmeye başladım. Kozmopolit, tartışmacı yapısı, kültürü, insanların anlattıkları, yaşadıkları, tecrübeleri… Günlerce sadece okudum, 250. sayfaya geldiğimde, doğru yere geldiğimi artık biliyordum. O kadar heyecanlıydım ki, okula geldiğim ilk gün, babamı 8. yurtta tek başına bırakıp Devrim’e insanlarla oturmaya geldim, orada tanıştığım insanların bazılarıyla 4 yıl sonra hala görüşürüm. Okul başladı, 1.5 hafta hazırlık okudum, ODTÜ tarihinde(en azından bildiğim kadarıyla) eşi görülmemiş bir olayla, yaklaşık 50 kadar diğer kişiyle birlikte hazırlığı atladım, bölüme başladım. Birlikte hazırlık okumuş 120 kişinin arasına o kadar kolay entegre olamadım, 1 dönemi hazırlık gibi geçirdim. Haftanın 3 günü münazara yapıyor, kalan vaktimde ya arkadaşlarımla eğleniyor, geziyor, ya da 19. yurdun mutfağında oturup robot yapıyorduk, 5 tane yeni girişli bilgisayar mühendisi olarak o mutfağın yakınında kalanlara az çektirmedik. Ses geçirmez müzik odasında matkapla alüminyum deldik, mutfakta tavada kurşun erittik, gece yurtta kaçak kaldık… Bir gün yanlışlıkla, Fizik 106 bonus puan veren ödevleri için oluşturulmuş “Mastering Trolls” ile tanıştık. Zamanı gelince
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;106.metutrolls.xyz&quot; href=&quot;http:&#x2F;&#x2F;106.metutrolls.xyz&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       http:&#x2F;&#x2F;106.metutrolls.xyz
      &lt;&#x2F;a&gt;
      e dönüşecek olan sistemin ilk temellerini o zaman attık. Geriye bakınca, yer yer yaptığımızın etiğini hala sorgularım, ama o zamanlar bizim için o denli heyecanlıydı ki… Bir anda 2000–2500 insana ulaşmaya başlamıştık, okulda hiç tanımadığım insanlar yürürken selam veriyor, “Troll’ler gelmiyor mu hala” diye soruyordu, ödevleri paylaşmadığımız haftalarda yapılma yüzdesi çok düşük olduğu için ödevler erteleniyordu. Hayatımız boyunca yaptığımız hiçbir şey çevremizdeki 10–15 kişiden daha fazlasını tek seferde etkilememişken, ODTÜ’de yaptığımız bu kadar basit bir şeyin bile bu kadar kitlesel bir etkisinin olması beni ilk kez o dönemde etkilemeye başladı, geçtiğimiz dönemki Pass&#x2F;Fail süreçlerine kadar oluşan motivasyonumun başlangıcını oluşturdu.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;73c9&quot; name=&quot;73c9&quot;&gt;
      Bir etkinliğinde katılımcı olarak yer aldıktan sonra, öğrenci organizasyonlarına duyduğum ilginin de etkisiyle IEEE ODTÜ ile tanıştım. ODTÜ’deki başıma gelen ikinci en büyük olay bu oldu. Görev ve sorumluluk bilincimin gelişmesi, organizasyon ve planlama yapmayı öğrenmem, sevmediğim insanlarla çalışmayı görmem, herhangi bir çalışma ortamında veyahut kurumda en sevdiğim ve en nefret ettiğim şeyleri öğrenmem gibi birbirinden değerli onlarca ders aldım. Çok öğrendim, çok eğlendim, çok üzüldüm, çok sinirlendim… IEEE ODTÜ’deki zamanımda defalarca hata yaptım, her hatadan dersler aldım, üzüldüm; çok güzel başarılarım oldu, bunların hepsinin mutluluğunu ayrı ayrı yaşadım. Ayrı bir yazıda bunların detaylıca paylaşıp, okula yeni gelen arkadaşlara topluluk nedir, nasıl yaşanırı daha iyi anlatmak istiyorum, burada uzatmayacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b961&quot; name=&quot;b961&quot;&gt;
      2. sınıfın yazında uzun problemler sonunda Almanya’ya staja gittim, bu da üçüncü en büyük tecrübemdi. Telefonumun şarjının bittiğini, dilini bilmediğim, en yakın tanıdığım insanın 800 kilometre uzakta olduğu bir anda, özgürlük kavramı ile tanıştım. Beklentilerin, yarattığımız sosyal çevrenin üzerimizdeki etkilerini daha iyi anladım, verdiğim kararların arkasında yatan motivasyonları sorgulamaya başladım. Gerçek yalnızlığı tecrübe ettim, bir tane bile insanla tanışmadığım günler yaşadım, yalnızlığı sevmeyi, benimsemeyi öğrendim. Almanya’dan döndüğüm günden itibaren çevremdeki değer verdiğim insanlara çok daha farklı bir gözle bakmaya başladım, hayatımdaki tecrübelere, harcadığım saatlere ve günlere çok daha değer vermem gerektiğini fark ettim. Toksik ilişkilerimden uzaklaştım, çevremi daha dikkatli seçmeye başladım. Yazı yazmaya da ilk o dönemde başladım, konuşacak kimseniz olmadığında gerçekten neler yapmak istediğinizi ilk kez düşünme fırsatı buluyor, kendinizi keşfetmeye, durup farklı tatlar almaya, yeni zevk aldığınız alanlar keşfetmeye başlıyorsunuz; hayatımda aldığım en önemli derslerden bazılarını bu dönemde aldım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5e19&quot; name=&quot;5e19&quot;&gt;
      Almanya dönüşü, üniversite hayatımın en konforlu dönemlerinden birisine giriş yaptım. Eğer hayatımız olduğu gibi kalsaydı, çok sevdiğim insanlarla, çok sevdiğim ortamlarda, düzenli, mutlu, stabil bir 2 yıl geçirecektim. Bu şekilde geçen yarım dönemden sonra, tam o sırada üniversite hayatımın en büyük 4. olayını yaşadım, aslında hepimiz yaşadık, Covid-19 geldi. Tüm kurduğum düzen, tüm arkadaşlıklarım, tüm kabullerim, tüm planlarım bir anda yerle bir oldu. 15 Mart’ta çıktığım öğrenci evinde 70 gün kalamadım, 7 yıl sonra aile evimde 20 günden fazla vakit geçirdim; görüşemediğim arkadaşlarımın bir kısmından uzaklaştım, bir kısmıyla yakınlaştım, 1.5 yıl sonra hala görüşemediğim, belki de veda edemeyeceğim arkadaşlarımı son kez gördüğümü bilemeden ayrıldım. Pandemiyi çoğu insandan çok farklı geçirdim, pek çok insanın hayatında unutmak isteyecekleri bir yıla dönüşmüş iken, benim hiçbir zaman unutmayacağım bir yıla dönüştü. Evde sosyalleşemediğim boş vaktimi üretkenliğe dönüştürdüm, yarışmalarda ödüller aldım, konferanslara kabul aldım, ilk kez televizyona çıktım, hiç okumadığım kadar okudum, hiç yazmadığım kadar yazdım, hiç yapmadığım kadar toplantı yaptım, profesyonel temelde yeni onlarca insanla tanıştım, hiçbir zaman edilmediğim kadar takdir edildim, ve bunların hiçbirisi sonrasında yaşayacaklarımın yanında zerre önemli olmadı. Üniversite hayatımın 5. en büyük olayını yaşadım, pandeminin ilk döneminde Pass&#x2F;Fail çalışmasına giriştim. Yüzlerce insanla konuştum, ilk kez bu kadar inandığım bir fikri bu kadar kitlesel bir ortamda sunmam, anlatmam, ikna etmem gerekti, yüzlerce kişiyi ikna etmeyi başardım. Hocalara, öğrencilere, dışarıdan insanlara hitap etmeyi öğrendim, yeri geldiğinde tüm ODTÜ ile mücadele ettiğim hissine kapıldım. Tüm okula ulaşmayı başardık, rektörlüğe ve senatoya 3000&#x27;den fazla mail attırdık, abartıyor olabilirim ancak belki de ODTÜ çapında son yıllardaki en büyük kitlesel yapılanmayı sağladık, ve bunu kimsenin birbirini yüz yüze görmediği, sadece mailler ve mesajlar vasıtasıyla yaptık. Günün sonunda, istediğimizi elde edemedik, tercih ettiğimiz ve önerdiğimiz sistem gelmedi, ama bir otoriteyle nasıl mücadele edilebildiğini, kitlelerin gücünü, sivil itaatsizliğe giden yoldaki ilk adımların nasıl oluştuğunu bir bir deneyimleme fırsatı buldum. Almanya’dan sonraki en büyük değişimi burada yaşadım, hocalara, akademiye, otoriteye, insanlara, kitlelere karşı tüm bakış açım değişti, kendimi bir kez daha keşfettim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9d4a&quot; name=&quot;9d4a&quot;&gt;
      Yaz döneminde, buradan aldığım motivasyonla ÖTK’yı yeniden canlandırma ve oluşturma gibi bir denemede bulunduk, başarısız olduk, 4 yıllık üniversite hayatımda yaşadığım onlarca başarısızlıktan birisi olarak ders aldım, hayatıma devam ettim. Pandeminin Pass&#x2F;Fail’dan sonraki en önemli etkisi olarak, tamamen yeni bir çevre edinmeye başladım. Daha önce hiç tanımadığım insanlarla tanıştım, yakınlaştım, öncesinde yakın olmadığım bazı insanlarla çok çok daha yakın hale geldim. Arkadaşlıklara dair olan bakış açım çok değişti, uzaklaştığım insanlarla neden uzaklaştığımı sorguladım, arkadaşlıklarımın kalitesini, değerini, bana olan etkisini defalarca sorguladım. Çevremdeki insanları, geçirdiğim vakti bir seçim haline getirdim, zorunlulukla verilen sözlere olan inancımı yitirdim, yalnızca beni mutlu edecek şekilde yaşamaya adadım kendimi. Vakit geçirdiğim her insanın, o an başka bir seçeneğim olmadığı için değil, o an o kişiyle birlikte olmak istediğim için olduğu şeklinde bir yaşam stiline geçiş yaptım, bunu o insanlara hissettirmeye çabaladım, ilişkilerimin ne kadar daha sağlamlaştığını, ne kadar daha kendimi mutlu, dinç ve rahat hissettiğimi fark ettim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a5e3&quot; name=&quot;a5e3&quot;&gt;
      Güz dönemiyle birlikte, tekrardan bir Pass&#x2F;Fail sürecine giriştik. Aslında sürecin başından itibaren amacımız hiçbir zaman Pass&#x2F;Fail değildi, Pass&#x2F;Fail bir güvenlik mekanizması olmalıydı, kötü ve problemli eğitimin kendisini değil, yarattığı etkilere karşı oluşturulan bir güvenlik. Asıl amacımız eğitimi düzeltmekti, ancak bir yandan Pass&#x2F;Fail’ın da son mekanizma olarak bulunması gerektiğini düşünüyorduk. Eğitimi düzeltmenin, düşündüğümüzün 100&#x27;de 1&#x27;i kadar kolay olmadığını gördük. Hocaların bakış açılarını, eğitim sistemini en temel problemlerini daha iyi anladık, onlarca hocayla, yüzlerce öğrenciyle görüştük, konuştuk, 5000&#x27;den fazla öğrencinin katıldığı bir anket yaptık, sonuçlarını inceledik, raporladık, tüm üniversite senatosuyla tek tek görüşmeler yapıp, sonuçları anlattık, aksiyon almalarını istedik. ODTÜ Rektörlüğü’nün o dönemde benim şahsen “fiyasko” olarak nitelendirdiğim birtakım aksiyonlarının yanı sıra, pek çok farklı sebepten dolayı, yaptığımızın etkilerini istediğimiz derecede göremedik, yine de az da olsa belli kazanımlar elde ettik, kalanların yokluğuyla üzülmek yerine onlardan ders aldık, kazanımlarımızdan da mutlu olduk. Bu dönemde ben ODTÜ kültürüne dair çok fazla şey öğrendim, o kültürün sönmeye yüz tutuşunu görmeye başladım. İnsanların yalnızca kendilerine faydası dokunacak şeyler için çabaladığı, başkasına faydası dokunan eylemlere karşı çıktığı onlarca vakayla karşılaştım. Biz bugün ODTÜ’de kaybolan bir kültürün son demlerinden yararlanmış, bu aşamada çok fazla şey öğrenmiş bireyleriz, umuyorum ki ODTÜ içinde bulunduğu kimlik savaşları, bireyselleşme, ötekileştirme süreçleri içerisinde kolektif doğasını ve yapısını kaybetmez, bizim öğrendiğimiz değerler sonraki dönemlerde de korunmaya devam eder, geliştirilir, büyür.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7e51&quot; name=&quot;7e51&quot;&gt;
      Bu konularda çok yazdım, çok çizdim, yeri geldiğinde çok güzel fırsatlar yakaladım. Yayınlara çıktım, farklı bölümlerin başkanlarıyla, dekanlarıyla, ders koordinatörleriyle saatlerce konuşup onlardan çok değerli bilgiler ve bakış açıları kazandım, ilk kez dışarıdan bir yazı teklifi aldım, ilk kez gazeteye çıktım, bu süreçlerin hepsinde gururlandım, mutlu oldum, ama aynı zamanda bunların hepsinin mutluluğunun geride kaldığını, maddi her başarının yalnızca belli bir süre bana mutluluk getirdiğini, asıl kazanımın her zaman tecrübeler ve öğrenimler olduğunu çok daha iyi öğrendim. Bana dünyayı verseler, aldığım önemli bir dersle yarışamayacağını gördüm.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fd84&quot; name=&quot;fd84&quot;&gt;
      ODTÜ’deki son dönemime geldim, bu döneme, 2 gün sonra tek finalime ve son sunumuma gireceğim, hayatımın şu ana kadarki en önemli parçasının biteceği döneme. Bu yazıda bahsedebildiklerim, önemsediklerimin %1&#x27;i bile değil, yalnızca okuyan birisine en faydalı olabileceğini düşündüğüm kısmı. Vedalaşmak çok zor; bu kadar anıya, bu kadar arkadaşa, bu kadar değere, bu kadar tecrübeye veda etmek, girdiğim zamanki halimle şimdiki halimi karşılaştırdığımda ne kadar büyüğümü gördüğümde tüm bu sürece veda etmek o kadar zor ki… Okulun her bir kenarında anılarım varken, onlarca mutluluk, onlarca hüzün, onlarca olay… Aşık olduğum, kalbimin kırıldığı, kalp kırdığım, en yakın arkadaşım dediğim insanlarla tanıştığım ve onları kaybettiğim, ihanete uğradığım, ihanet ettiğim, tüm etik yargılarımı sorguladığım, ölçemeyeceğim kadar değiştiğim bu 4 yıl… Bu zamana kadarki hayatımın en önemli kısmını kapatıyorum, ve buna hazır mıyım bilmiyordum, bu yazıyı yazdığımda gördüm ki değilim. Ama zaten hiçbir zaman hazır olmayacağım, bu vedanın da en güzel tarafı bu. Bu zamana kadarki tüm vedalarımda artık orayı bırakmaya, o insanları bırakmaya hazırdım, şu an değilim, bu da benim ne kadar değer verdiğimi, ne kadar bağlandığımı gösteriyor, her zaman bir parçamın ODTÜ’ye bağlı olacağını, her zaman ODTÜ’lü olmaya devam edeceğimi gösteriyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6c58&quot; name=&quot;6c58&quot;&gt;
      Ankara’da son 2 ayım, ODTÜ’de son 2 ayım, her bir gününü, her bir saatini değer verdiğim, beni mutlu eden insanlarla geçireceğim, her bir saatinin bu tecrübeyi bir tık daha unutulmaz kılacağını umduğum 2 ay.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ccdc&quot; name=&quot;ccdc&quot;&gt;
      Bir kapanış yazmak istemiyorum, bu yazının tamamı zaten benim için bir devrin kapanışı. Görüşmek üzere…
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;6825&quot; name=&quot;6825&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;440&quot; data-image-id=&quot;1*fPxgBv8jkH6E3881tW6qBg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;800&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*fPxgBv8jkH6E3881tW6qBg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;105e4e0bbebf&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-06-21T21:09:43.607Z&quot;&gt;
     June 21, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;g%C3%B6r%C3%BC%C5%9F%C3%BCr%C3%BCz-odt%C3%BC-105e4e0bbebf&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Uzaktan Eğitimle Geçen Bir Yılın Ardından</title>
        <published>2021-05-19T00:00:00+00:00</published>
        <updated>2021-05-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/uzaktan-egitimle-gecen-bir-yilin-ardindan/"/>
        <id>https://alperenkeles.com/posts/uzaktan-egitimle-gecen-bir-yilin-ardindan/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/uzaktan-egitimle-gecen-bir-yilin-ardindan/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;c468&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;a26c&quot; name=&quot;a26c&quot;&gt;
      Uzaktan Eğitimle Geçen Bir Yılın Ardından
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;388b&quot; name=&quot;388b&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazıyı okuyorsanız, öncelikle size teşekkür etmek istiyorum.
      &lt;&#x2F;strong&gt;
      Şu zor günlerde, psikolojimizin sınırlarının zorlandığı, kendimizi bazen en dipte hissettiğimiz, yeri geldiğinde umudumuzu kaybettiğimiz şu günlerde, umarım size değer veren birileri olduğunu, yalnız olmadığınızı, her daim sizi destekleyecek insanların bulunduğunu biliyorsunuzdur. Eğer ki böyle birisinin bulunmadığını düşünüyorsanız, bana ulaşın, gerek sadece dinlemek olsun, eğer ihtiyacınız varsa konuşmak, öneri vermek olsun, elimden geleni yapmaya çalışayım, şu dönemde yapabileceğimiz en güzel iyilik bu belki de.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b901&quot; name=&quot;b901&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazı, benim ODTÜ’ye veda mektubumun bir parçası. Yayınlandığı tarihin 19 Mayıs olması, her ne kadar bilinçsiz de olsa, Mustafa Kemal Atatürk’ün 100 yıl önce ortaya koyduğu yenilikçi ve inkılapçı prensiplerin 2021 Türkiye’sinde küçük de olsa bir temsilini yapma şansını bana verdiği için, gurur duyuyorum; bu vesile ile 19 Mayıs Atatürk’ü Anma, Gençlik ve Spor Bayramı’nızı kutlarım!
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;48fc&quot; name=&quot;48fc&quot;&gt;
      ODTÜ’de 4 yıldır yapmaya çalıştığım pek çok şey oldu, ancak çevrimiçi dönemde hayatına dokunduğumuz insanlardan duyduklarım kadar beni tatmin eden başka hiçbir şey yaşamadım. Bu sebeptendir ki, okuldan gittiğim 2021 Bahar dönemi itibariyle, 2021 Güz döneminin de çevrimiçi olacağını anladığım an veda mektubuma bu son anketi de eklemeye karar verdim.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önemli bir dipnot geçeyim, güz döneminin çevrimiçi olacağı yalnızca ben ve çevremin şahsi ön görüsü, bu bilginin bunun dışında herhangi bir dayanağı yoktur.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cc3f&quot; name=&quot;cc3f&quot;&gt;
      Bu anketi, bu dönem başında, 2021 bahar dönemine yetiştirebileceğimiz öneriler için hazırlamıştık, lakin yetiştiremedik. Her ne kadar güz döneminin uzaktan olacak olması beni öğrenci arkadaşlarım, akranların adına çok üzse de; en azından bu anketin işe yarayabileceğine seviniyorum.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Toplamda 1597 yanıt alan, yaklaşık 30 sorudan oluşan bu ankette, amacımız hem eski problemlerin geldiği noktaları anlamak, hem de çözülenlerin yerine ortaya çıkan diğer problemlere ışık tutmak, neler yapabileceğimize dair fikirler ortaya atmak oldu.
      &lt;&#x2F;strong&gt;
      Anketi aşağıdaki linkten inceleyebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bfa3&quot; name=&quot;bfa3&quot;&gt;
      Link:
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;forms.gle&#x2F;V9k8TV57MyYXP9pf6&quot; href=&quot;https:&#x2F;&#x2F;forms.gle&#x2F;V9k8TV57MyYXP9pf6&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;forms.gle&#x2F;V9k8TV57MyYXP9pf6
      &lt;&#x2F;a&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;abeb&quot; name=&quot;abeb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Raporun bölümlere göre katılım dağılımını aşağıda görebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;fc02&quot; name=&quot;fc02&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;293&quot; data-image-id=&quot;1*B6SSc9k9VAq_GxE8oy0uxA.png&quot; data-width=&quot;1702&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*B6SSc9k9VAq_GxE8oy0uxA.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Bölümlere Göre Dağılım Tablosu
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;07ad&quot; name=&quot;07ad&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Aynı şekilde, raporun sınıflara göre dağılımını da aşağıda görebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;ff3a&quot; name=&quot;ff3a&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;358&quot; data-image-id=&quot;1*vuuV7HMnfojjqFu9Xvpw1A.png&quot; data-width=&quot;930&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*vuuV7HMnfojjqFu9Xvpw1A.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Sınıflara Göre Dağılım Grafiği
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;beef&quot; name=&quot;beef&quot;&gt;
      Bu raporda, öncelikle anketteki soruları sınavlar(Sözlü Sınav, Sınavlarda Kamera, Kopya), dersler(Çevrimiçi Laboratuvarlar, Ders İşlenme Yöntemleri), ödevler, Maddi İmkanlar(AdımODTÜ Desteği, İnternet Erişimi, Burs Kesintileri), psikolojik destek, öğrenciler arası destek sistemleri, iletişim ve genel anlamda uzaktan eğitim başlıklarında değerlendireceğiz. Sonrasındaysa bu ve önceki anketlerden, şahsi tecrübelerden, görüşmelerden elde ettiğimiz bulgulardan vardığımız sonuçları yapılandırılmış şekilde sizlerle paylaşacağız.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Lütfen, bu raporu okumadan önce, daha önce yazdığımız raporu okuyun, buradaki pek çok bulgu ve düşünce ya temellerini orada atmış, ya da benzer bir temelden geliyor, o rapora pek çok referans da yapıyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;419d&quot; name=&quot;419d&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        ODTÜ’de Uzaktan Eğitim Dönemi Nasıl Geçiyor?
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        12 Mart 2020 Perşembe akşamı okulların 3 haftalık bir ara tatil dönemine girmesi ile başlayan uzaktan eğitim, 9 ay 12…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;6271d5b082115aa17cdad65184d2e69d&quot; data-thumbnail-img-id=&quot;1*sx_UsvU2-z8xwhRbmw2W5Q.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*sx_UsvU2-z8xwhRbmw2W5Q.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--mixtapeEmbed&quot; id=&quot;3e6a&quot; name=&quot;3e6a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Uzaktan Dönemde Sınavlar
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e999&quot; name=&quot;e999&quot;&gt;
      Sınav sistemlerine ve sınavlar hakkında yorumlara ilk raporumuzda ciddi bir yer ayırmış idik. Çevrimiçi eğitimin en çok tartışılan, en çok üzerine çalışılan tarafı olan sınavlara bu raporda aynı derecede detaylı yer vermeyi düşünmüyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sınavlar hakkında 3 farklı noktaya değinecek, bu noktaları anket sonuçlarımız üzerinden yorumlayacağız.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7b26&quot; name=&quot;7b26&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;362&quot; data-image-id=&quot;1*pM6rvraprR1YHu5LJJyBTQ.png&quot; data-width=&quot;944&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*pM6rvraprR1YHu5LJJyBTQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Sözlü Sınav Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b26c&quot; name=&quot;b26c&quot;&gt;
      İlk noktamız, çevrimiçi eğitimin en tartışmalı kararlarından birisi olan sözlü sınavlar. Şahsım adına sözlülere karşı ciddi bir pozitif bakış açım olsa da, yorumlardan gördüğümüz kadarıyla sözlülerin öğrencilere getirdiği çok ağır psikolojik bir yük var. Bu yükün sebeplerini, nasıl hafifletilebileceğini, sözlünün artılarını ve eksilerini tartışarak başlamak istiyorum. Öğrenci yorumlarına baktığımızda,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %57&#x27;lik bir kısım sözlü sınavlara çoğunlukla faydasız ve kesinlikle faydasız olarak bakarken, %14&#x27;lük bir kısım öğrenci sözlü sınavları faydalı görüyor.
      &lt;&#x2F;strong&gt;
      Açık uçlu yanıtları incelediğimizde en temel problemlerden birisinin sözlü sınavın “not düşürme” algısı olduğunu görebiliyoruz. Matematik bölümünde uygulanan belli sözlü sınavların toplanan puan yüzdesiyle çarpılarak ortalamaya katılması tepkinin ciddi bir kısmını topluyor. Sınavlara girilen haftaların farklı olmasından kaynaklı iş ve ders yüküne bağlı adaletsizlik, sözlü esnasında düşünecek vaktin olmaması gibi problemler mevcut. En ortak görülen şikayet ise sistemin öğrenci üzerindeki stres yükü. Bu stres yükünün azaltılması için akla gelen ilk fikir sınavın not ağırlığının azaltılması olsa da, incelendiğinde daha efektif yöntemler de bulunacaktır. Örnek vermek gerekirse, benim bir dersimde girdiğimde sözlü sınavda soru geldikten sonra 5 dakikalık bir kitaptan araştırma süresinin ardından soruya cevap veriyor idik. Her soru için mümkün olmamak ile birlikte, hızlı bir araştırma ihtimalinin de rahatlatacağı öğrenciler olacaktır.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sözlü sınav devam ettirilecek ise, bu tip farklı sözlü sınav metotları araştırılmalıdır.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7744&quot; name=&quot;7744&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;401&quot; data-image-id=&quot;1*jO9eEa_LUS-SkEZ-uVWF3Q.png&quot; data-width=&quot;934&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*jO9eEa_LUS-SkEZ-uVWF3Q.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Sınavlarda Kamera Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;0878&quot; name=&quot;0878&quot;&gt;
      İkinci noktamız, sınavlarda kamera uygulaması. Uzaktan eğitimin özellikle başlarında kamera ile ilgili ciddi tartışmalar dönmüşken, geldiğimiz nokta açıkçası benim için şaşırtıcı. Öğrencilerden aldığımız cevaplara göre,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %49&#x27;u tek kameranın en faydalı sınav metodu olduğunu düşünürken, öğrencilerin %28&#x27;i çift kameralı sistemi destekliyor, yalnızca %23&#x27;lük bir kesim kamerasız sınavların en iyi biçim olduğunu düşünüyor.
      &lt;&#x2F;strong&gt;
      Bunun arkasında pandemi sırasında ciddi bir şekilde gelişen kopya endüstrisinin ve gün geçtikçe daha da eriyen etik değerlere olan öfkenin olduğunu söyleyebiliriz diye düşünüyorum. Uzaktan eğitimin en ciddi tartışma konularından ikisi olan
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       sınavlar ve kopya, öğrencileri öyle bir bıktırmış durumda ki, pek çoğu kamera önlemlerini destekler
      &lt;&#x2F;strong&gt;
      hale gelmişler. Bu durumda, sınavlarda önlem almayan hocaların aldıkları kararları tekrardan değerlendirmelerinin iyi olabileceğini söyleyebiliriz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2b9c&quot; name=&quot;2b9c&quot;&gt;
      Son olarak, yine kısaca kopya konusuna değinmek gerek. Elbette geri dönememe, çift kamera, SEB gibi pek çok önlem var, ama maalesef ki bunların hiçbirisi hem kopyayı tam anlamıyla önlemeyi başaramıyor, hem de belli dezavantajlarla geliyorlar. Geri dönememenin yarattığı zaman yönetimini imkansız kılma, çift kameranın öğrenci için oluşturduğu gerilim ve bazen teknik bazen maddi yetersizlikler, SEB’in yalnızca Windows bilgisayarlarda düzgün şekilde çalışması gibi pek çok problem var. Elbette bunların hepsini belli bir noktaya kadar aşmaya çalışıyoruz, ancak pandemi başından beri söylendiği gibi,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       mümkün olan her derste take-home-exam’lere, proje ödevlerine geçilmesi gerek.
      &lt;&#x2F;strong&gt;
      Bu noktada daha fazla iş gücü gerekiyor, daha fazla asistan gerekiyor elbette. Bazı bölüm derslerinde uygulanan peer review metotları, okulun asistanlara daha fazla kaynak ayırması gibi yöntemler hariç maalesef bir öneride bulunamıyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Tek diyebileceğimiz, tüm hocalarımızdan ricamız, şunu bilin, ne yaparsanız yapın, kopya çeken öğrenciler olacak. Sınavını hocaya çözdüren, ikinci monitör alan, teknolojik hilelere başvuran… Bu öğrencileri de değerlendirmeye alarak notlandırma yapmaya, öğrencilere davranmaya çalışmanızı, ortalamaları buna göre değerlendirmenizi rica ediyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8e46&quot; name=&quot;8e46&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Dersler
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;605b&quot; name=&quot;605b&quot;&gt;
      Çevrimiçi dersler, maalesef ki değişimin ve inovasyonun en az olduğu, bizim de en az etkide bulunabildiğimizi hissettiğimiz konu.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Üniversite eğitiminin en önemli kısmı olan “eğitimin” bu dönemde gündem olarak bu kadar geriye atılması, baktığımızda üzücü olmasına rağmen, şaşırtıcı değil.
      &lt;&#x2F;strong&gt;
      Eğitimin kendisi çoğu zaman ölçülebilir olmayıp, sonuçları neredeyse her zaman “ölçüm” üzerinden anlaşılmaya çalışılıyor. Bu noktada odaklandığımız asıl değişim ödev ve sınav yöntemlerinde, onların daha adil, daha iyi nasıl ölçebileceklerine dair oluyor. Bu rapor ile bunu en azından biraz olsun değiştirebilmek, eğitimin iyileştirilmesine dair bazı fikirlerimizi de sunmak istiyoruz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;1573&quot; name=&quot;1573&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;381&quot; data-image-id=&quot;1*cQWp7u6x4Ubaek7Chy1VYA.png&quot; data-width=&quot;943&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*cQWp7u6x4Ubaek7Chy1VYA.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Ders İşlenim Tarzı Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;99e1&quot; name=&quot;99e1&quot;&gt;
      Bu noktadaki sonuçlarımıza anketimizdeki ders işleme usulü sorusu ile başlamak uygun olacaktır. Senkron&#x2F;Asenkron ders işleyişi üzerine
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       görüşlerin yarı yarıya bir eşitlik oluşturduğunu
      &lt;&#x2F;strong&gt;
      ;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       senkron soru çözümü(recitation) ların ise %72&#x27;lik bir baskınlıkla asenkron soru çözümüne göre tercih edildiğini görüyoruz.
      &lt;&#x2F;strong&gt;
      Bu noktada aslında bakarsanız recitation’ların dersin sağlıklı işlenimine dair önemi kendi başına bir tartışma konusu, pek çok derste recitation yapılmadığını, ya da yapılıyorsa da yeterli önem ve memnuniyetin her zaman sağlanamadığını önceki yıllardan net bir şekilde biliyoruz. Burada sorulacak soruların önden belirlenmiş, çözecek kişinin soruları önceden biliyor, çözümlere ve temellerindeki mantığa hakim oluyor olması soru çözümünün sağlıklı ilerlemesi için elzem bir gereklilik. Diğer noktada senkron bir soru çözümünün öğrencilere anlık olarak kafalarındaki soruları soruyor olma izni vermesi, bunun ana ders anlatımından ayrı olması ile öğrencilerin recitation’a ders videosunu izleyip gelmesi ve kafalarında daha net bir resim çizmesi gibi pek çok faydalı durum var.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Burada karmaşık olarak açıklamaya çalıştığımız şeyi kısaca ortaya koyarsak eğer, dersler senkron da asenkron da yapılsa, senkron bir soru çözüm saati konmasının faydalı olacağını düşünüyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a364&quot; name=&quot;a364&quot;&gt;
      İkinci bir nokta olarak, yine önceki raporda bahsettiğimiz, derslerin mümkün olduğunca hibrit kaynaklarla(okumalar, egzersizler, derslerin ses kayıtları, problem setleri…) öğrenciye alternatifler sunarak ilerlemesi, dersin öğrenci açısından sağlık seviyesini arttıran en önemli faktörlerden bir tanesi. Her alternatif farklı öğrencilerin dersten kopmasını engelliyor, dersin verimini arttırıyor, bu da günün sonunda öğreticinin moral ve motivasyonunun kırılmasını da engelliyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Hocanın öğrenciyi, öğrencinin hocayı beslediği bu sistemde zincirin her halkasının güçlendirilmesi hepimiz için çok önemli.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;67c2&quot; name=&quot;67c2&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;381&quot; data-image-id=&quot;1*TIAIjHevt4PKmvd5Gmvc2w.png&quot; data-width=&quot;951&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*TIAIjHevt4PKmvd5Gmvc2w.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Çevrimiçi Laboratuvarlar Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7c3e&quot; name=&quot;7c3e&quot;&gt;
      Son noktada ise, bu anketimizde odaklandığımız noktalardan birisi olan çevrimiçi laboratuvarlar hakkında konuşmak istiyoruz. Teorik dersler her ne kadar belli bir seviyeye kadar çok değişmeden uzaktan eğitime aktarılabilse de, pratik laboratuvar derslerinin aktarımı esnasında pek çok problem yaşandı, pek çok çeşitli çözüm önerileri ortaya konuldu, bu konuda öğrencilerin düşüncelerini de öğrenip hocalarımıza aktarmak istedik. Öğrencilere çevrimiçi laboratuvarlar hakkında sorduğumuz soruda yalnızca
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %14&#x27;lük bir kesim öğrenciden çoğunlukla faydalı ve kesinlikle faydalı cevabını alırken, %58 lik bir kesimin çevrimiçi laboratuvarları faydasız olarak gördüğünü anlıyoruz.
      &lt;&#x2F;strong&gt;
      Bunun sebebini daha iyi anlamak için açık uçlu yanıtları ve yorumları okuduğumuzda, bu görüşün sebebinin lablara dair olan “labların en temel amacı pratik kazandırmaktır, çevrimiçi lablarda bu yapılamaz” görüşünün yanı sıra lab uygulamalarındaki sıkıntılar olduğunu görüyoruz. Çevrimiçi laboratuvarların normal dönemdekinden çok daha fazla vakit istediğinden bahseden ciddi bir kesim öğrenci mevcut, diğer yandan lablardaki konuları ve görevleri anlamakta zorluk çeken de pek çok öğrenci var.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu problemler, maalesef ki ne sistemsel olarak çözülebilecek, ne de laboratuvarların doğası gereği tamamen yok olabilecek problemler değiller. Bir kısmı tamamen hoca&#x2F;asistan&#x2F;öğrenci arasındaki dinamiklere dayalı, bir kısmı ise içinde bulunduğumuz durumdan kaynaklı, yüz yüze olmadan çözülemeyecek problemler.
      &lt;&#x2F;strong&gt;
      Önümüzdeki dönemin de çevrimiçi olacağı tahmininde bulunurken labların yüz yüze olana kadar ertelenmesi seçeneğini destekleyemiyoruz. Kayda değer olarak bahsedebileceğimizi gördüğümüz en değerli yorum ise simülasyonlar olarak kendini gösteriyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Laboratuvarların kendisi yapılamasa da, günümüz teknolojisine uygun simülasyon programlarının öğrenilmesi en azından bir öğrencinin hayatında ihtiyaç duyacağı bir ustalığa kavuşmasına yardımcı oluyor, hem de laboratuvardaki deneyin ideal koşullarda da olsa yapılmasına imkan sağlıyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5017&quot; name=&quot;5017&quot;&gt;
      En genel olarak derslere baktığımızda, maalesef ki yine iç karartıcı bir yorumlar tablosuyla karşılaşıyoruz. Derslerin veriminin düşük, iletişimin zayıf, ders yükünün fazla olduğu görüşünü geçen dönemki anketimizden almış idik, bu dönem tablonun düzelmediğini, tam tersine karardığını görüyoruz. Belirsiz ve istikrarsız şekilde ilerleyen Covid-19 önlemlerinin de etkisiyle birlikte tüm eğitim öğretim bileşenlerinin moral ve motivasyonu her geçen gün daha kötüye gitmekte. Peki bu noktada neler yapabiliriz?
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;9c8f&quot; name=&quot;9c8f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Katılımı zorunlu tutmadığımız(altyapısal sebeplerden katılamayan öğrencileri mağdur etmemek amacıyla) senkron, mümkün olduğunca muhabbet havasında geçen, öğrencinin angajmanını yüksek tutacak, kopmasını engelleyecek bir ders işlenimi en verimi yüksek metot gibi durmakta. Anlayışlı, iletişim odaklı, içinde bulunduğumuz durumun farkında bir öğretime öğrenciler olarak ihtiyaç duyuyoruz. En çok odaklandığımız ölçüm, kopya gibi konuları bir kenara bırakıp, gerçekten öğretmeye çalıştığımız insanlar psikolojik olarak öğrenebilecek durumdalar mı diye de düşünmemiz gerekiyor. Arada sohbet edilebilecek basit saatler oluşturulup, öğrencileri daha iyi tanımak, onların hocayı daha iyi tanımasına izin vermek de dersin verimini arttıracaktır. Normal ders saatinin üstünde video yüklemek, ders yükünü, ödevleri ve sınavları arttırmak da amaçlananın aksine nerdeyse her zaman negatif sonuçlanıyor gibi gözüküyor. Bu noktada tüm derslerde farklı metotların farklı kalitelerle uygulanması, genel bir kalitenin ve standardın yakalanamaması da öğrenciyi yoran sebeplerden. Öğrenci her dersin beklentisi farklı olduğunda onlara karşı kendini ayarlamakta da zorluk yaşıyor, zaten negatif eksende olan psikolojisi daha da kötüye gidiyor.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;6f28&quot; name=&quot;6f28&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Maddi İmkanlar
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6ce9&quot; name=&quot;6ce9&quot;&gt;
      Hiç şüphesiz ki pandemi pek çoğumuzu aynı zamanda maddi açılardan da çok ciddi miktarda etkiledi. İşini kaybeden, maaşını alamayan çalışanlar, aylarca dükkan açamayan esnaf, serbest çalışanlar, kapalı dükkanlara ödenen kiralar… Bunların yanı sıra altyapısal olarak ODTÜ’de bize sunulan internet erişimine sahip olamayan, bulunduğu yer veyahut bütçe itibariyle derslere sağlıklı şekilde katılacak bir internet imkanını bulamayan öğrenci arkadaşlarımız da var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;af1b&quot; name=&quot;af1b&quot;&gt;
      Bunu 2 noktadan incelememiz gerekiyor,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cc3c&quot; name=&quot;cc3c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       - İnternet ihtiyacınız nasıl ortadan kaldırabiliriz?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dda7&quot; name=&quot;dda7&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       - İnternete ihtiyaç duyan öğrencilere nasıl internet sağlayabiliriz?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d598&quot; name=&quot;d598&quot;&gt;
      İlk sorunun cevabını önceki anket ve analimizde aslında vermiş idik. Zorunlu senkron derslerin azaltılması, mümkün olduğunca asenkron, ve aynı zamanda hibrit kaynakların oluşturulması bu yönde atılacak ilk adımlardan bir tanesi. Ders videolarının kaydedilmesinin yanı sıra, yalnızca ders videosu değil, egzersizler, okumalar, videoların ses kayıtları gibi ilave kaynakların da sunulması ile öğrencilerin istikrarsız internet bağlantılarıyla da derse sağlıklı şekilde devam etmeleri sağlanabilir. Senkron derslerin sağladığı pozitif noktaları elbette ki yok saymamakla birlikte, katılamayan bir öğrencinin dersin videosunu izleyememesi dersten kopma gibi çok daha ciddi bir probleme yol açmaktadır.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;2383&quot; name=&quot;2383&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;370&quot; data-image-id=&quot;1*Qwy7AJeud7d9tnybsNzeVw.png&quot; data-width=&quot;932&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Qwy7AJeud7d9tnybsNzeVw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       İnternet Erişim Verileri
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e424&quot; name=&quot;e424&quot;&gt;
      Ankette sorduğumuz soruda öğrencilerin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %98&#x27;inin bir internet bağlantısına sahip olduğunu, ancak bu öğrencilerin yaklaşık yarısının(totalde %47) bu bağlantıyı stabil olarak nitelendirmediklerini görmekteyiz.
      &lt;&#x2F;strong&gt;
      Bu bahsettiğimiz asenkron alternatiflerin sağlanması ile birlikte bu arkadaşlarımızın eğitim kalitesinde çok ciddi miktarda artış yaşanacaktır. Bir de anketimizde
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %1.3 oranında yer alan(20 kişi), evinde internet bağlantısına sahip olmayan arkadaşlarımız var.
      &lt;&#x2F;strong&gt;
      Bu kişilere gerek altyapısal, gerekse maddi desteklerin yapılması gerektiği açıkça ortadadır. Bununla ilgili 3 farklı noktadan bahsetmek istiyoruz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;f376&quot; name=&quot;f376&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;400&quot; data-image-id=&quot;1*vRchHv-kLqi7OjfV8FlGSg.png&quot; data-width=&quot;933&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*vRchHv-kLqi7OjfV8FlGSg.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       AdımODTÜ Desteği Hakkında Bilgi
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--figure&quot; id=&quot;d880&quot; name=&quot;d880&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;399&quot; data-image-id=&quot;1*21SfFk0EpTKDih5F-t3TuQ.png&quot; data-width=&quot;944&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*21SfFk0EpTKDih5F-t3TuQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       AdımODTÜ Desteği Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b344&quot; name=&quot;b344&quot;&gt;
      İlk noktamız
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       , AdımODTÜ Bilgisayar&#x2F;İnternet desteğinin okul genelinde gerek idare, gerek bölümler, gerekse hocalar tarafından öğrencilere tanıtılması, ihtiyaç duyan her öğrencinin kesinlikle bu destekten faydalanması için bilinçlendirme çabasının artması yönünde.
      &lt;&#x2F;strong&gt;
      Anket sonuçlarından öğrencilerin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %40&#x27;ının bu destekten haberdar olmadığını, bu haberdar olmayan %40&#x27;ın yaklaşık yarısının(totalde %20–292 kişi), bu destekten faydalanabileceğini söylediğini görüyoruz.
      &lt;&#x2F;strong&gt;
      Okuldaki öğrencilerin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %20&#x27;sinin ihtiyaç duyabileceği bir destek fonunun oluşturulması, büyütülmesi, duyurulması ODTÜ adına çok ciddi bir hizmet olacak,
      &lt;&#x2F;strong&gt;
      pek çok öğrencinin geleceğini etkileyecek, hayatlarına parıltı sağlayacaktır.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;fc70&quot; name=&quot;fc70&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;381&quot; data-image-id=&quot;1*Fg8R7m8LHS66cZKXj0rHVw.png&quot; data-width=&quot;935&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Fg8R7m8LHS66cZKXj0rHVw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Burs Kesilme Durumları
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;774e&quot; name=&quot;774e&quot;&gt;
      İkinci noktamız, bursu kesilen öğrencilerin burslarının geri başlatılması, gerekirse okul tarafından desteklenmesi ve restore edilmesi yönünde. Ankete katılanların
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %54&#x27;ünün burs aldığını, her burs alan 10 kişiden 1 tanesinin (totalde %5.5–88 kişi) ise bursunun pandemi döneminde kesildiğini öğreniyoruz.
      &lt;&#x2F;strong&gt;
      ODTÜ Mezunlar Derneğinden, ODTÜ Geliştirme Vakfından ve çeşitli farklı kurumlardan alınan bursların azaltıldığını veyahut kesildiğini görüyoruz. Öğrencilerin masraflarının uzaktan dönemde bitmediğini, aile evine dönmeyen&#x2F;dönemeyen öğrencilerin olduğunu, öğrencilerin bir kısmının ailesi itibariyle de maddi problemler çektiğini düşündüğümüzde, çevrimiçi dönemde burs vermeyelim gibi bir yaklaşımın çok da tutarlı olmadığını görebiliyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       ODTÜ’nün ilave burs fonları oluşturması, bahsi geçen(buraya yazmadığımız kurumları ayrıca bir liste olarak ODTÜ yönetimine yolluyor olacağız) kurumlarla iletişime geçip bursların devam ettirilmesi ile ilgili gerekli iletişimleri sağlaması gerektiğini düşünüyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;2b65&quot; name=&quot;2b65&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;407&quot; data-image-id=&quot;1*NpCNVGjQpLu3l478HUpkXQ.png&quot; data-width=&quot;937&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*NpCNVGjQpLu3l478HUpkXQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Yurtların Alt Kapasite Açılması Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e723&quot; name=&quot;e723&quot;&gt;
      Üçüncü ve son noktamız ise problemleri sadece para ile çözülemeyecek, bulundukları yer itibari ile
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       altyapısal ciddi problemleri bulunan öğrenciler için bir ya da birkaç yurdun kısıtlı kapasite ile açılması.
      &lt;&#x2F;strong&gt;
      Halihazırda yurtlarda kalan minimal sayıda öğrenci olduğunu biliyoruz, daha öncesinde Teknofest İstanbul gibi yarışmalarda ODTÜ’yü destekleyecek öğrencilere yurtlarda yer verilmesi, Jeoloji mühendisliğinde arazi çalışması yapacak öğrencilere yurt hakkı sağlanması gibi durumlar bizi yurtlarda öğrencilerin barındırılmasının mümkün olduğu sonucuna itiyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu noktada ihtiyaç sahibi öğrencilerin belirlenmesi, o öğrencilere yurt hakkı sağlanması gibi bir fırsatın bu öğrencilerin hayat kalitelerine çok ciddi bir etkide bulunacağı kanaatinde olup, bu belirleme aşamasında öğrenciler olarak verebileceğimiz her türlü faydayı vermeye hazırız.
      &lt;&#x2F;strong&gt;
      Bu noktada anketimizde sorduğumuz soruda öğrencilerin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %72 gibi bir yüzdesinin de bizle hemfikir olduğunu görüyor, %20 lik bir kararsız kitlenin ardından yalnızca %8 lik bir karşıt görüş olduğunu gözlemliyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;8841&quot; name=&quot;8841&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Zor durumda olan arkadaşlarımızın yanında tüm ODTÜ öğrencileri ile hep birlikte durmaktan, onların hayatını daha iyiye götürebilecek bir çözümün kamuoyunda yer almaktan gurur duyuyoruz.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;b84e&quot; name=&quot;b84e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Psikolojik Destek
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ac6d&quot; name=&quot;ac6d&quot;&gt;
      Ankette psikolojik destek ile ilgili 2 soru sormuş idik.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Öğrencilerin %70&#x27;i gibi çok yüksek bir oran psikolojik desteğe ihtiyaç duyduklarını düşündüklerini belirttiler.
      &lt;&#x2F;strong&gt;
      Yorumları incelediğimizde normal dönemde de psikolojik desteğe ihtiyaç duyduklarını belirten kişilerin yanı sıra pek çok kişinin pandemi döneminde yaşadıkları psikolojik çöküntü sebebiyle desteğe ihtiyaç duyduğundan bahsettiğini görmekteyiz. Yıllarca kampüste yaşanan bir hayattan aile yanında bir hayata geçişten negatif etkilenen, doğru çalışma, yaşama, eğlenme ortamını bulamayan pek çok öğrencinin yanı sıra, pandeminin getirdiği eve tıkılma, bütün günü bilgisayar başında geçirme durumunun da pek çok kişide psikolojik hasarlar oluşturduğunu görebiliyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Maalesef ki çok karamsar düşüncelere sahip, umudunu kaybetmiş çok ciddi bir kesimin olduğu açık.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;fce6&quot; name=&quot;fce6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;362&quot; data-image-id=&quot;1*56N2bM39uLTm45gwDJ6pgw.png&quot; data-width=&quot;908&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*56N2bM39uLTm45gwDJ6pgw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Psikolojik Destek İhtiyacı
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--figure&quot; id=&quot;4da9&quot; name=&quot;4da9&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;367&quot; data-image-id=&quot;1*0VM60VH0b-FY128ktWAxDA.png&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*0VM60VH0b-FY128ktWAxDA.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Psikolojik Destek Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;c186&quot; name=&quot;c186&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu noktada okul içerisindeki AYNA veya Mediko Kliniği gibi imkanların genişletilmesinin yanı sıra çevrimiçi mecralarda görünürlüklerinin arttırılmasının faydalı olabileceği kanaatindeyiz.
      &lt;&#x2F;strong&gt;
      Ankette sorduğumuz çevrimiçi terapi seanslarının ne derece faydalı olabileceğine dair olan sorumuzda yaklaşık
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %60 civarında Faydalı, Çok Faydalı ve Kesinlikle Faydalı yanıtlarını alırken, yalnızca %15&#x27;lik bir kesimin çok faydasız olduğuna
      &lt;&#x2F;strong&gt;
      dair yorumlarını görüyoruz. Açık uçlu yanıtları incelediğimizde ise, buradaki yararsızlığa dair sebeplendirmelerin çoğunun ihtiyaç duymamaktan değil, terapinin çevrimiçi olmasından veyahut aile evinde uygun bir terapi ortamı olmamasından kaynaklı olduğunu anlayabiliyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Her ne kadar bu etkenler terapinin etkisini azaltabilecek olsa da, günün sonunda bakıldığında birkaç öğrencinin bile hayatını biraz da olsa daha iyi hale getirebilmek bizim için dünyalara bedel bir fayda olacaktır.
      &lt;&#x2F;strong&gt;
      Bu konuda daha fazla inisiyatifin ortaya konulmasını, psikolojik destek birimlerine daha fazla yatırım yapılmasını ODTÜ öğrencilerinin ruh sağlığı açısından çok değerli görüyoruz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;abb8&quot; name=&quot;abb8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       ODTÜ Bileşenleri Arasındaki İletişim
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;070f&quot; name=&quot;070f&quot;&gt;
      ODTÜ olarak, idare&#x2F;hoca&#x2F;öğrenci üçlüsü arasındaki iletişim kanallarının güveni, sağlamlığı ve sürekliliği ciddi manada zedelenmiş durumda.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Taraflar arasındaki güven ve empati duygusunun ortadan kalkması, öğrencilerin hocaları kötü kalpli, hocaların öğrencileri tembel olarak görmesi, senelerdir geçip giden bu sürecin içerisinde öğrencilerin hiçbir şeyin değişmeyeceğine yönelik çok ciddi bir öğrenilmiş çaresizlik durumunun oluşması gibi bir problem mevcut.
      &lt;&#x2F;strong&gt;
      Ve maalesef ki, bizler de geçtiğimiz dönemlerde bunun etkilerini tek tek yaşadık, bunlardan muzdarip olduk. Yaptığımız anketlerdeki katılıma dair en büyük soru işaretlerinden birisi “zaten bir şey değişmeyecek ki” soru işareti olmakla birlikte, başardığımız bazı değişimlerin hocalar tarafından tanınmadığına şahit olduk. 1. sınıf öğrencisinin withdraw hakkını onaylamayan, idare tarafından açık bir şekilde takvimde “dersler işlenmeyecektir” ibaresi bulunan Spring Break’te ders işleyen hocalar oldu.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu hocalarımızla iletişim konusunda zorlanan öğrenci arkadaşlara kimi zaman destek olabildik, kimi zamansa olamadık.
      &lt;&#x2F;strong&gt;
      Bu noktada okul içi bileşenler arasındaki iletişimi 3 noktada incelemek istiyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9b73&quot; name=&quot;9b73&quot;&gt;
      İlk noktamız, öğrenci-öğrenci arası iletişim. Okul çapında iletişimin en temel gelişim noktaları öğrenci toplulukları ve bölüm içi iletişimler. Bu noktada geçtiğimiz yıllarda öğrenci topluluklarının işleyişini kolaylaştırmak yerine zorlaştıracak şekilde alınan KKM binasının ve okul içi çeşitli amfilerin öğrenci topluluklarına tesisinin zorlaşmasının yanı sıra, öğrenci topluluklarının işleyişini kolaylaştıracak pek çok yenilikçi kararın alınmaması, öğrenci topluluklarının düşük bütçeler ve zorlu sistemler ile çabalamak zorunda bırakılması gibi durumlar bizce öğrenci topluluklarının gitgide daha kötü bir hale gelmesine sebep oluyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Okul genelinde öğrenci toplulukları ile görüşmeler yapılması, toplulukların ihtiyaç duyduğu sistemsel değişikliklerin yapılması, öğrenci toplulukları yönetmeliklerinin güncel durumlara göre yenilenmesi gibi pek çok imkanın burada toplulukların işleyişini iyileştirebileceğini düşünüyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5949&quot; name=&quot;5949&quot;&gt;
      Öğrenci iletişiminin bir diğer kilit noktası ise bölüm içi iletişim. Bu iletişim çokça “whatsapp” grupları üzerinden sağlanıyor olup, geçmiş yıllarda öğrenciler olarak fark ettik ki yeri geldiğinde
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       siyasal gruplar ya da okul dışı kurum&#x2F;organizasyonlar yeni gelenlerin “whatsapp” gruplarını önden kurup, bu grupları kendi amaçları hedeflerine yönelik kullanabiliyor, bu da okula yeni gelen öğrencilerin entegrasyonunu ve güvenini zedeliyor.
      &lt;&#x2F;strong&gt;
      Bu noktada bölüm whatsapp gruplarının bölüm öğrencileri tarafından kurulup, bölüm başkanlığına iletilmesi, ve bölüm başkanlıklarının bu grupları yeni girişlilere mail ile iletmesi,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       hem gruplardan ciddi bir zaman boyunca haberdar olmayan öğrencilerin entegrasyonunu hızlandıracak, hem de bu tip problemlerden okul olarak kurtulmamızı sağlayacaktır.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;036d&quot; name=&quot;036d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;384&quot; data-image-id=&quot;1*yafko2i7xwFWqd9Y_C5KbA.png&quot; data-width=&quot;925&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*yafko2i7xwFWqd9Y_C5KbA.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Öğrencilerin Öğrencilere Yardımcı Olduğu Sistem Hakkında Görüşler
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;7057&quot; name=&quot;7057&quot;&gt;
      Öğrenciler arası iletişimdeki son bahsetmek istediğimiz nokta ise, Matematik bölümündeki hocalarımızdan duyduğumuz, beğendiğimiz, ankette de
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %86 gibi bir destek gören öğrenciler arasında derslerde birbirlerine yardımcı olacakları bir sistemin oluşturulması.
      &lt;&#x2F;strong&gt;
      Gönüllülük usulüne dayalı bu sistemin bölümler tarafından kendi teşvik sistemleri ile birleştirilerek daha güçlü ve daha efektif hale getirilebileceğini düşünüyoruz. Bu sistemle ilgili geçmiş tecrübelerden yararlanılması, daha detaylı bir sistem tanımı ve tasarımının herkese açık bir şekilde sağlanması ile, pek çok bölümün bundan yararlanabileceği kanaatindeyiz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d180&quot; name=&quot;d180&quot;&gt;
      İkinci noktamız, hoca öğrenci iletişiminin güçlendirilmesi. Bu noktada bölümlerin daha hoca-öğrenci etkileşimini sağlayacak daha fazla etkinlik yapması sonucunda, öğrencilerle hocaların 2 ayrı taraf olarak birbirinden uzak olmaktan ziyade, bir madalyonun iki yüzü misali birlikte gelişen ortak bir yapı olduğu bi kültürü sağlamamız gerekiyor. Biz bir okul olarak bir adım daha ileri gidecek isek eğer, bunu bir bütün olarak yapmamız şart. Eleştiri ve geri bildirim kültürünün bölüm çapında oturtulması, hem hocaların, hem de öğrencilerin hatalarının ve iyi yaptıklarının şeffaf, dürüst ve yapıcı bir şekilde ortaya konulması gerek, bu da ancak karşılıklı iletişimi arttırarak mümkün. Bizlerin Bilgisayar Mühendisliği Bölümü(CENG)’nde yaptığımız normal dönemlerde “Dönem Arası Toplantısı”, uzaktan dönemde “CENGChat” olarak anılan toplantılarımız, şahsi kanaatimce bu yönde okulda atılmış en güzel adımlardan bir tanesi. Geçtiğimiz dönem bir dersimde bir hocamızın “collaborative course design”(ortak ders tasarımı) yapmanın mantıksız olduğunu söylediğini hatırlıyorum, şahsen belli bir dereceye kadar haklı olduğunu düşünsem de, şu anda bulunduğumuz noktanın buradan ne kadar uzak olduğu açık.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Pek çok hocanın dersleri ile ilgili çok küçük geri bildirimlerde bile öğrencilere negatif tepkiler vermesi, kendi metotlarını değiştirmeye tenezzül etmemesi, sistemin de hocaları bu konuda açıkça destekliyor olması gibi problemlerimiz mevcut.
      &lt;&#x2F;strong&gt;
      Elbette ki hocalarımızın ders metotlarını herhangi bir dış müdahaleye maruz kalmadan seçebilmeleri, bu konuda özgürce ilerleyebilmeleri akademik ruh adına da çok önemli, ancak dersin 2 öznesinden birisi olan öğrencinin bu denli dışarıda bırakılmasının uzun vadede ODTÜ kültürü için çok ciddi etkileri olduğunu düşünüyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bunların hepsinin konuşulması, hoca öğrenci arasındaki iletişimin güçlendirilmesi, empatinin ve yapıcı geri bildirimin arttırılması gerek. Ancak bunları düzenli şekilde yaparak bu kültürü oturtabilir, kendimizi bir adım daha ileri taşıyabiliriz. Bu noktada idareden bölümlere doğru bu hoca&#x2F;öğrenci oturumlarının her bölümde düzenli yapılmasının sağlanmasının çok faydalı olduğunu düşünüyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d804&quot; name=&quot;d804&quot;&gt;
      Üçüncü noktamız ise idare öğrenci arasındaki iletişimin güçlendirilmesi. An itibariyle maalesef ki ODTÜ’de böyle bir kanal mevcut değil. Attığımız maillere cevap alıp alamayacağımıza dair olan şüphe ve belirsizlik, öğrenciler tarafında meşru bir temsiliyetin olmaması gibi durumlar bunun var olmasını engelliyor. Bu noktada bölüm yönetimleri ile olan iletişimin güçlendirilmesi için dönem ve bölüm temsilcisi seçimlerinin yapılması, bunların ardından okul genelinde yaşanan problemlere çözümler bulunması için öğrenci kurullarının ve temsillerinin oluşturulması gerek. Bu kurumların resmiyetinin olması, bu insanların bir seçim ile gelmesi, öğrencilerin şu an ayrık bir şekilde oluşturmaya çalıştığı kurul ve temsillerden çok daha meşru ve sistematik olacak, bu öğrencilerin sorumluluklarını daha ciddi bir şekilde ortaya koyacaktır.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ancak beraber çalışırsak ODTÜ’yü güzelleştirebilir, geliştirebilir, genişletebiliriz. İletişim kuramadığımızda, problemlerimizi aktaramadığımızda, çözüm önerilerini tartışamadığımızda gelişimimize ket vurmuş oluruz. Bu basit problemlerin çözülüp, okul çapında araştırma kültürünün nasıl oturtulabileceğini, nasıl daha üretken sınıflar, laboratuvarlar, öğrenciler, eğitim sistemleri tasarlayabileceğimizi konuşmamız için, öncelikle öğrenci, hoca ve idare bileşenleri arasında sağlıklı, sürekli ve düzenli bir iletişim kurmamız şart olmuştur.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2a53&quot; name=&quot;2a53&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Şahsi Tecrübelerimiz, Önerilerimiz, Yorumlarımız ve Kapanış
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;79cb&quot; name=&quot;79cb&quot;&gt;
      Zaten fazlasıyla uzun bir yazı oldu, daha da uzatıp sizleri de sıkmak istemiyorum, sadece kendi vizyonuma yönelik bazı yorumlar yapmak zorunda hissediyorum kendimi. Bu okul, hepimizin. Hep birlikte geliştirmeliyiz, hep beraber güzelleştirmeliyiz burayı. Bu da her zaman en temelde iletişimden geçiyor, özeleştiriden geçiyor, eleştiriden geçiyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;815b&quot; name=&quot;815b&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Canım hocalarım, lütfen biz öğrencileri anlayın. Ne kadar yorgun olduğumuzu, ne kadar bitap olduğumuzu anlayın. Kendimizde enerji bulmak için, motivasyon bulmak için ne kadar zorlandığımızı anlayın, bu dönemin sizleri yorduğu kadar, bizi de yorduğunu anlayın. Ödev verirken, sınav yaparken, not verirken, derse katılmayanlara kızarken, derse gelmeyenlere kızarken bunları hatırlayın. Bazılarımızın tek odalı köy evlerinde olduğunu hatırlayın, bazılarımızın hasta yatağında yattığını hatırlayın, bizim sizin öğrencileriniz olduğumuzu, bizim aslında sizin geleceğiniz, sizin bizim geçmişimiz olduğunu hatırlayın.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;c998&quot; name=&quot;c998&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Aynı şekilde, canım arkadaşlarım, canım akranlarım, hocalarımızın da bizim kadar zorlu, bizim kadar problemli bir süreçten geçtiğini hatırlayın. Bakmaları gereken çocukları olduğunu, aileleri olduğunu hatırlayın. Her gün biz bilgisayarın bir ucundayken diğerinde onların oturduğunu, bizler dinlerken onların konuştuğunu, bizim dinlememe gibi bir şansımızın olduğunu, ama onların her gün oturup konuşmak zorunda olduğunu hatırlayın. Hiçbirimiz kötü değiliz, hiçbirimiz şeytan değiliz, hiçbirimiz bir başkasına nefret dolu değiliz, şu an öyleysek de, olmamalıyız.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;da4f&quot; name=&quot;da4f&quot;&gt;
      Günün sonunda baktığımızda, maalesef ki görüyoruz öğrencilerin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %70&#x27;lik bir kesimi çevrimiçi eğitimden memnun değil, yalnızca %15&#x27;i memnun olduğunu belirtiyor.
      &lt;&#x2F;strong&gt;
      Bu noktada hepimizin payı, sorumluluğu, etkisi ve emeği var. Bunu değiştirmek de, olduğu gibi bırakmak da bizim elimizde.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;3440&quot; name=&quot;3440&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;368&quot; data-image-id=&quot;1*IejF4vpCyJOahnukFAjQsw.png&quot; data-width=&quot;926&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*IejF4vpCyJOahnukFAjQsw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Memnuniyet Dereceleri
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;5f64&quot; name=&quot;5f64&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Her ne olursa olsun, biz ODTÜ olarak bir toplumuz, bir kültürüz, bir aileyiz. Umarım bu sözlerim az da olsa birilerini etkiler, hayatını değiştirir, bir derse de olsa, bir hocaya da olsa, bir öğrenciye de olsa ilham verir. Buraya kadar okuduysanız, çok teşekkür ederim, hepinizi çok seviyorum, kendinize iyi bakın.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5a52&quot; name=&quot;5a52&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazıyı hazırlamamda bana yardım eden, benden sonra bu meşaleyi taşımaya, bizleri ve ODTÜ’yü aydınlatmaya devam edecek olan akranlarım;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;f26f&quot; name=&quot;f26f&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Türker Kerim Akpınar
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4770&quot; name=&quot;4770&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Anıl Utku Ilgın
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3528&quot; name=&quot;3528&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Taner Sarp Tonay
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c79a&quot; name=&quot;c79a&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Göktuğ Ekinci’ye de buradan teşekkür etmek istiyorum.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;ee71&quot; name=&quot;ee71&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Saygılarımla,
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;53fe&quot; name=&quot;53fe&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Alperen Keleş
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;46a4&quot; name=&quot;46a4&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;533&quot; data-image-id=&quot;1*LedPvKG4W2qDdG5sEM58BQ.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;936&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*LedPvKG4W2qDdG5sEM58BQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;1e63637c30e0&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-05-19T11:18:16.449Z&quot;&gt;
     May 19, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;uzaktan-e%C4%9Fitimle-ge%C3%A7en-bir-y%C4%B1l%C4%B1n-ard%C4%B1ndan-1e63637c30e0&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Doktora Başvuruları: Kapsamlı Rehber</title>
        <published>2021-04-13T00:00:00+00:00</published>
        <updated>2021-04-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/doktora-basvurulari-kapsamli-rehber/"/>
        <id>https://alperenkeles.com/posts/doktora-basvurulari-kapsamli-rehber/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/doktora-basvurulari-kapsamli-rehber/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;0792&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;01ea&quot; name=&quot;01ea&quot;&gt;
      Doktora Başvuruları: Kapsamlı Rehber
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;4b38&quot; name=&quot;4b38&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;315&quot; data-image-id=&quot;1*EzcaQNykPf64EkzcGzqDEg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*EzcaQNykPf64EkzcGzqDEg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;18f5&quot; name=&quot;18f5&quot;&gt;
      Daha önceki yazılarımda da kısaca bahsettiğim gibi, geçtiğimiz dönem içerisinde 7 doktora başvurusu yaptım, bunlardan 2 tanesinden ise kabul aldım, önümüzdeki dönem itibari ile University of Maryland, College Park ta doktora öğrencisi olarak başlayacağım. Neredeyse geçtiğimiz Ağustos ayından beri süren bu süreç, çoğu yerinde gergin, kaygı verici ve yorucu olsa da, ulaştığım sonuçlardan sonra bunların
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       hepsine değdiğini rahatlıkla söyleyebilirim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;982f&quot; name=&quot;982f&quot;&gt;
      Ancak her ne kadar ben bu süreci sancılı yürüttüysem de,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       sizler aynı hataları yapmak, aynı sıkıntıları yaşamak zorunda değilsiniz.
      &lt;&#x2F;strong&gt;
      Kendi tecrübelerimi, yeri geldiğinde güleceğiniz, yeri geldiğinde üzüleceğiniz şekilde önerilerle karılmış bir şekilde ortaya koymaya çalışacağım.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Umarım hem keyifli, hem de bilgilendirici bir yazı olur.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8ef5&quot; name=&quot;8ef5&quot;&gt;
      Öncelikle, asıl sorudan başlayalım, neden doktora? Genel olarak akademide kalma ile ilgili düşüncelerimi ve gözlemlerimi içeren bir yazımı aşağıda sizlerle paylaşıyorum.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu paragrafta bahsedeceğim asıl nokta, neden yüksek lisans değil de direkt doktora olacak.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;2062&quot; name=&quot;2062&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-2-neden-y%C3%BCksek-lisans-eef29823616&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-2-neden-y%C3%BCksek-lisans-eef29823616&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-2-neden-y%C3%BCksek-lisans-eef29823616&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Yüksek Lisans&#x2F;Doktora Başvuruları#2: Neden Yüksek Lisans?
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Lisans mezuniyeti, pek çoğumuz için hayatımızın en heyecan verici, en kaygı verici, en korkutucu zamanı. Lisanstan…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;99c1b01671fba32b6aa890fb2c1c0be4&quot; data-thumbnail-img-id=&quot;1*VGFrO9GRiBiFGbqaOdGWQA.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-2-neden-y%C3%BCksek-lisans-eef29823616&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*VGFrO9GRiBiFGbqaOdGWQA.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;7c02&quot; name=&quot;7c02&quot;&gt;
      Açıkça konuşmak gerekirse, en temel sebep finansal kaygılar. Direkt doktora dediğimiz sistem, Avrupa’da geleneksel olarak 4 yıl olan doktora sürecinin 6 yıla uzatıldığı,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       pratik olarak baktığınızda Yüksek Lisans + Doktorayı tek bir kalemde okuyor olduğunuz bir sistem.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4995&quot; name=&quot;4995&quot;&gt;
      Burada asıl önemli olay, yüksek lisans programları varsayılan halde burslu değil, dolayısıyla aşırı rekabetçi bir ortamda okula kabul almanın yanı sıra burs almak için de çabalamanız gerekiyor, ve her bölüm çok az sayıda öğrenciye kapsamlı(yaşama giderlerini de içeren) burs veriyor. Diğer yandan, doktora programları varsayılan olarak sizi bir araştırmacı olarak gördüğünden mütevellit,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       neredeyse her zaman(benim gördüğüm her programda bu şekildeydi) okul ücreti ödemiyor, üzerine öğretim veya araştırma asistanı olarak maaş alıyorsunuz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f76e&quot; name=&quot;f76e&quot;&gt;
      Döviz kurlarının durumu ortada iken, ilave bir finansal kaynağa ihtiyaç duymadan kendi kendinizi fonlayabiliyor olmanız, yüksek lisans direkt doktora karşılaştırmasında doktora için
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       çok ciddi bir avantaja dönüşüyor
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ec09&quot; name=&quot;ec09&quot;&gt;
      Şahsi gözlemlerime göre, bu sistem ülkemizde aşırı bilinmiyor(ki Türkiye’de de direkt doktora yapabiliyorsunuz), Amerika genelinde ve Avrupa’daki Amerikan ekolünü uygulayan(EPFL, MPI) gibi bazı okullarda yapabiliyorsunuz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1b6d&quot; name=&quot;1b6d&quot;&gt;
      Ayrıca, Avrupa’da başvurmak istediğiniz okul direkt doktora desteklemiyor ise(çoğu desteklemiyor olacak), hala o okula yüksek lisans dereceniz olmadan doktoraya gitme ihtimaliniz var.(anladığım kadarıyla aşırı düşük) Ben bu şekilde bir kabul almış idim, karşılaştırdığımda 4 yıllık bir doktora sürecinin benim için yeterli olmadığına karar verdiğim için vazgeçtim. Eğer ki çalışmak istediğiniz konudan eminseniz, danışman hocanız ile iyi çalışabileceğiniz bir geleceği belirli bir kesinlikle görebiliyorsanız,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       denemenizi tavsiye ederim, neden olmasın?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3037&quot; name=&quot;3037&quot;&gt;
      Peki, diyelim ki doktoraya başvurmaya karar verdiniz, o halde şu an ne yapmalısınız?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;80fb&quot; name=&quot;80fb&quot;&gt;
      Bir doktora başvurusunda, okula sağlamanız gereken 6 ana belge mevcut.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;066b&quot; name=&quot;066b&quot;&gt;
       Özgeçmiş
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;41af&quot; name=&quot;41af&quot;&gt;
       Niyet Mektubu(Statement of Purpose&#x2F;Research Statement)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;947f&quot; name=&quot;947f&quot;&gt;
       Referans Mektupları(2 ya da 3 adet)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2da5&quot; name=&quot;2da5&quot;&gt;
       Dil Sınavı Sonuçları(TOEFL, IELTS)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;cd3c&quot; name=&quot;cd3c&quot;&gt;
       GRE(Graduate Record Examination) Sonuçları(Her okul için değil)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;cf59&quot; name=&quot;cf59&quot;&gt;
       İlaveten bir de okulun başvuru formunu doldurmalısınız.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;3324&quot; name=&quot;3324&quot;&gt;
      Bunların yanında, çeşitli okullarda aşağıdaki belgeleri de genelde sizin isteğiniz doğrultusunda başvurunuzu desteklemek için yükleyebiliyorsunuz.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;3171&quot; name=&quot;3171&quot;&gt;
       Yazım örnekleri
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;7a16&quot; name=&quot;7a16&quot;&gt;
       Şahsi tecrübelerinizi anlatan çeşitli yazılar(Okuldan okula değişebiliyor içerikleri)
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--li&quot; id=&quot;d666&quot; name=&quot;d666&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1080&quot; data-image-id=&quot;1*LoW1oZYWfOH5wQS6-kRT9w.jpeg&quot; data-width=&quot;1920&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*LoW1oZYWfOH5wQS6-kRT9w.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;afb0&quot; name=&quot;afb0&quot;&gt;
      Özgeçmiş
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b016&quot; name=&quot;b016&quot;&gt;
      Özgeçmiş hazırlamak için, yine önceki zamanlarda staj başvuruları için yazdığım özgeçmiş hazırlama rehberine göz atabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;00a3&quot; name=&quot;00a3&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#1 — Özgeçmiş Hazırlama
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Hayal edin, hedefiniz olan şirkette bir insan kaynakları çalışanı olarak yer alıyorsunuz. Staj başvuru döneminin…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;e6b765db2b04bf39191d4639b6f5a174&quot; data-thumbnail-img-id=&quot;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*9MEJAHWPaiydFjVll90X3w.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;b813&quot; name=&quot;b813&quot;&gt;
      Ancak tabii ki o yazıda staj için hazırlanan bir özgeçmişten bahsediyordum, dolayısıyla çok temel bazı farklılıklar olacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0338&quot; name=&quot;0338&quot;&gt;
      Doktora başvurunuzda gönderdiğiniz özgeçmiş ve niyet mektubunda, en üstünde durmanız gereken tema, araştırma odaklı olması. Doktora başvurusu, her şey bir kenara bırakıldığında, sizin hayatınızın en azından 5 yılını araştırma yaparak geçirecek olduğunuza dair bir beyan. Dolayısıyla
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       yüklediğiniz her belgede, kurduğunuz her cümlede, sizi iyi bir araştırmacı yapacak olan özelliklerinizi vurgulamak, araştırma motivasyonlarınızı, araştırma tecrübelerinizi, araştırma iç görülerinizi ortaya koymak önemli.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eabc&quot; name=&quot;eabc&quot;&gt;
      csrankings.org sitesinde yer alan
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20200727191900&#x2F;https:&#x2F;&#x2F;pg.ucsd.edu&#x2F;PhD-application-tips.htm&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20200727191900&#x2F;https:&#x2F;&#x2F;pg.ucsd.edu&#x2F;PhD-application-tips.htm&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        şu makale
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
      de bahsedildiği gibi, eğer araştırma odaklı bir başvuru yapmadıysanız, tecrübeleriniz iyi de olsa, başvurunuz iyi bir doktora başvurusu olarak görülmeyebiliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0b5d&quot; name=&quot;0b5d&quot;&gt;
      Dolayısıyla özgeçmişinizi hazırlarken, araştırma projelerinizi, makale ve araştırma odaklı derslerinizi ön plana koymak, hangi detayları ekleyip hangilerini çıkaracağınıza karar verirken her zaman bu detay benimle ilgili bir araştırmacı olarak ne söylüyor sorusunu sormak çoğu zaman iyi bir fikir.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8322&quot; name=&quot;8322&quot;&gt;
      Niyet Mektubu(Statement of Purpose)
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;bbab&quot; name=&quot;bbab&quot;&gt;
      Türkçede her tipi niyet mektubu olarak geçse de, İngilizcede “Statement of Purpose(SoP)” diye geçen belge bir iş başvurusunda yazılacak “Cover Letter” ile tabii ki aynı yapıya sahip olmuyor. Kelime anlamıyla “Amaç Beyanı” anlamına gelen bu belgede, neden doktora yapmak istediğinizi, motivasyonlarınızı, tecrübelerinizi, sizi bu noktaya getiren yolu anlatmanız bekleniyor. Belgede kendinizden bahsetmenin yanı sıra, okulla olan uyumunuzu, o okulu seçmedeki motivasyonlarınızı da açıklamanız gerek. Başvurduğunuz bölümden hocaların profillerini ve projelerini incelemeli, ilginizi çeken 1 ila 3 arasında hocayla ilgili onlarla neden ilgilendiğinizi, hangi projelerinizden dolayı onlarla çalışmaya uygun olduğunuzu düşündüğünüzü, hocaların bulunduğu araştırma grubunda ilginizi çeken noktaları anlatabilirsiniz, anlatmalısınız.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Doktora, her ne kadar okul da seçimde çok önemli olsa da, lisansın aksine aşırı danışmana bağlı bir sisteme sahip olduğu için, yanına başvurduğunuz hocaların sizle iyi bir uyuma sahip olabilmesi gerekiyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;95bf&quot; name=&quot;95bf&quot;&gt;
      Dünyanın en iyi okullarından MIT(Massachusetts Institute of Technology), alım görevlilerinin ve öğrencilerin tecrübelerini anlattığı
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
       https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;
      &lt;&#x2F;a&gt;
      adlı bir bloga sahip. Bu blogda pek çok ilgi çekici yazı var, ancak benim de ilgimi çeken, tüm blogdaki en fazla okunan yazılardan biri olma onuruna sahip olmuş
      &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
        bir yazı
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;a&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
      &lt;&#x2F;strong&gt;
      mevcut. Bu yazı, bir mektubun içermesi gerekenleri bir alım görevlisinin bakış açısından anlatmanın yanı sıra, mektubun yapısına dair de güzel bir öneride bulunuyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;9dae&quot; name=&quot;9dae&quot;&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       “Here’s an organization I would recommend: (1) passion
      &lt;&#x2F;em&gt;
      ate hook; (2) segué to your background in the field; (3) specific classes by title and professors you have had (especially if well-known in the field); (4) related extracurricular activities (especially if they hint at some personal quality you want to convey); (5) any publications or other professional accomplishments in the field (perhaps conference presentations or public readings); (6) explanations about problems in your background (if needed); and (7) why you have chosen this grad school (name one or two professors and what you know of their specific areas or some feature of the program which specifically attracts you).”
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;aa21&quot; name=&quot;aa21&quot;&gt;
      Çevirecek olursam:
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bee5&quot; name=&quot;bee5&quot;&gt;
      1- İlgi çekici ve tutkulu bir giriş
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e074&quot; name=&quot;e074&quot;&gt;
      2- Alandaki arka planınıza dair bilgi
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e8a7&quot; name=&quot;e8a7&quot;&gt;
      3- O konuda aldığınız spesifik dersler
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;942b&quot; name=&quot;942b&quot;&gt;
      4- Ders dışı aktiviteler(özellikle sizin ortaya koymak istediğiniz şahsi bir özelliği vurguluyorlarsa)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c08d&quot; name=&quot;c08d&quot;&gt;
      5- Profesyonel makale ve başarılarınız(konferans sunumları, yazılar)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f1db&quot; name=&quot;f1db&quot;&gt;
      6- Arka planınızdaki problemlerin(eğer varsa) açıklamaları
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b106&quot; name=&quot;b106&quot;&gt;
      7- Neden bu programı seçtiniz?(1–2 hocadan, spesifik alanlarında ve bu programın sizi neden ilgilendirdiğinden bahsedin)
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;036c&quot; name=&quot;036c&quot;&gt;
      SoP, çoğumuz için hayatımızda yazdığımız en zor yazı. Çok ciddi bir miktarda bilgiyi 2 sayfalık bir metinde mümkün olduğunca araştırma odaklı yazmaya çalışmak, hiç kimse için kolay değil. Burada yapabileceğiniz en önemli, ve aynı zamanda kolay şey mümkün olduğunca geri bildirim almak.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Arkadaşlarınıza, hocalarınıza mektubu atın, yorum alın, ben twitter’da gördüğüm ilgilenen bir hoca ile bile görüşüp ondan bile yorum almıştım.
      &lt;&#x2F;strong&gt;
      Her yorumu tabii ki kendi filtrelerinizden de geçireceğiniz için, kötü yorum diye bir şey yoktur, atabildiğiniz herkese atın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9b68&quot; name=&quot;9b68&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bir de, mükemmel olmasına aşırı aşırı takılmayın.
      &lt;&#x2F;strong&gt;
      Tabii ki iyi bir mektup başvuru için çok önemli, ama her zaman iyileştirecek bir şeyler bulacaksınız, mükemmel mektup diye bir şey mümkün değil. Dolayısıyla bir noktadan sonra kendinizi gerilmiş, kaygılı ve mektubun 22. versiyonunu yazarken bulabilirsiniz(yaşanmış hikaye), yapmamanızı tavsiye ederim. İyi bir mektup hazırladıktan sonra daha fazla hoca araştırmaya, daha fazla okula başvurmaya odaklanmak, mektubu daha iyiye götürmeye çalışmaktan daha verimli bir çaba olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;06cd&quot; name=&quot;06cd&quot;&gt;
      Mektup hakkında son bir cümle, tabii ki her başvurunuz için ayrı ayrı mektuplar yazmayacaksınız. Çoğu zaman, başvuruya göre alan, ülke ve okul spesifik kısımları değiştirmeniz yeterli olacaktır. Mektubunuzu hazırlarken bunları değiştirebileceğiniz bir şema ile hazırlarsanız, çok daha fazla okula çok daha hızlı başvurabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;d35d&quot; name=&quot;d35d&quot;&gt;
      Referans Mektubu
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b837&quot; name=&quot;b837&quot;&gt;
      Dikkat etmeniz gereken diğer bir çok önemli nokta ise, referans mektupları. Hocalarımdan aldığım ve yine alım görevlilerinin yazılarından okuduğum bilgilere göre, referans mektupları başvuruda sizin niyet mektubunuz kadar, hatta daha da önemli. Dolayısıyla alacağınız iyi bir referans mektubu, sizin başvurunuzu
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       hayal etmediğiniz kadar ileri taşıyabilir, düşük bir ortalamanın etkisini nötrleyebilir, ya da sizin anlattığınız iyi noktaları destekleyebilir.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6f1b&quot; name=&quot;6f1b&quot;&gt;
      İyi bir referans mektubu almak, maalesef ki çoğu zaman başvuru yapmaya karar verdikten sonra yapabileceğiniz bir şey değil. İyi bir referans mektubu, birebir tanıştığınız, mümkünse akademik bir çalışma yaptığınız, makale yaptığınız, yanında staj ya da lisans araştırması yaptığınız bir hocadan gelen bir mektup olacaktır. Sizi tanıyan, ancak beraber çalışmadığınız bir hoca, derslerinden iyi notlar aldığınız, projelerinde emek gösterdiğiniz bir hoca da elbette size referans mektubu yazabilir, ancak hoca sizi ne kadar az tanırsa, sizle ilgili anlatabileceği somut şeyler ne kadar az olursa, mektubun etkisi o kadar azalacaktır. Avrupa’da genelde 2, Amerika’da genelde 3 mektup isteniyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Elbette her mektubun aynı derecede güçlü olmasına gerek yok, ama 3 mektubun en azından 1 tanesinin sizi çok iyi tanıyan bir hocadan gelmesi başvuru için ciddi derecede önemli.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;21f5&quot; name=&quot;21f5&quot;&gt;
      Bunun için, özellikle daha üniversitenin erken dönemlerindeyseniz ve akademik kariyer düşünüyorsanız, lisans araştırmaları yazımda bahsettiğim gibi çalışmalar yapın, stajlarınızı mümkünse akademik birimlerde yapmaya çalışın,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       AdımODTÜ, METU EEE Star gibi akademik araştırma projesi programlarına katılın.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;e06c&quot; name=&quot;e06c&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Lisans Araştırmaları: Giriş Rehberi
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bu yazıya küçük bir dipnotla başlamak iyi olacaktır diye düşünüyorum. Elbette ki kendime bir araştırmacı diyecek…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;4b8f7de82e38aff323239e698911e0ff&quot; data-thumbnail-img-id=&quot;1*tnQJtvXmetzuAesza8eqww.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*tnQJtvXmetzuAesza8eqww.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;c3f8&quot; name=&quot;c3f8&quot;&gt;
      Eğer ki bu yazıyı daha geç bir tarihte okuduysanız, mümkünse dersinde proje yaptığınız, birebir sohbet etme fırsatı bulduğunuz, sizi belli bir seviyenin üstünde tanıyan, eğer şanslıysanız başvurduğunuz alanda çalışan hocalardan mektup almaya çalışın.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;f2c5&quot; name=&quot;f2c5&quot;&gt;
      Benim Şahsi Tavsiyelerim
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5bd3&quot; name=&quot;5bd3&quot;&gt;
      Buraya kadar yazdığım pek çok şey, internette hızlı bir araştırma ile biraz dağınık da olsa bulabileceğiniz, genel olarak genel geçer bilgiler idi. Bu noktadan sonrası tecrübelerime dayalı, benim yaptığım bazı şeylerin yapın, pek çok şeyi de yapmayın temalı bir yazı olacak.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;31c5&quot; name=&quot;31c5&quot;&gt;
      Kendinize Bir Başvuru Yoldaşı Bulun
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;c03f&quot; name=&quot;c03f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Süreçte benim için en rahatlatıcı nokta, hiçbir zaman yalnız olmamamdı.
      &lt;&#x2F;strong&gt;
      Ağustos’ta her şeye başlarken yakın bir arkadaşımla süreci beraber geçirmek için anlaştık, ve aylarca hocaları beraber inceledik, mailleri, mektupları, özgeçmişleri, başvuruları beraber hazırladık. Yeri geldi beraber üzüldük, yeri geldi beraber sevindik. Ancak ben ne zaman bırakacak gibi hissetsem, onun varlığı sayesinde motivasyonumu geri kazanma fırsatı buluyordum, aynı şekilde ben de olabildiğim kadar destek oldum. Yalnız olmadığını hissetmek, her açıdan insanı psikolojik olarak destekleyen, bu yorucu süreci sizler için keyifli hale getirebilecek bir durum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;568f&quot; name=&quot;568f&quot;&gt;
      Her Şeyi Erken Halledin
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;34f4&quot; name=&quot;34f4&quot;&gt;
      Ben maalesef, karakterim gereği kafamda belli görevleri arka plana atıp, çok geç olana kadar erteliyorum. Bu sebepten 3 okula başvurumu kaçırdım, yapmayın.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Son teslim tarihlerini beklemeyin, başvurular açıldığı anda başvurmaya çalışın.
      &lt;&#x2F;strong&gt;
      Son teslim tarihinden önce başvurmanın bir diğer önemi ise hocalar referans mektuplarını siz başvuruyu yaptıktan sonra yüklüyor olacak, eğer geç yüklerlerse başvurunuz yanabilir, yanmasın. Bir şeyleri erken yapmak her zaman iyidir, doktorun dediğini yap yaptığını yapma misali, lütfen son dakikaya hiçbir şey bırakmayın.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;0e0d&quot; name=&quot;0e0d&quot;&gt;
      Her Şeyi 3 Kez Kontrol Edin
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2856&quot; name=&quot;2856&quot;&gt;
      Benim bir hocam, göndereceğim dediği referans mektuplarını 2 ay boyunca göndermedi. Tabii ki burada hocamın hatası yok mu, elbette var. Ancak ben hocamla daha öncesinde bunu birkaç kez teyit etmiş olsa idim, çok yüksek ihtimalle bu sıkıntıyı yaşamazdım. Aynı şekilde SoP ve özgeçmişin üzerinden geçin, bizim arkadaşımla 6 ay sonra fark ettiğimiz hatalar oldu.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Satır satır okuyun, sorgulayın.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;71f1&quot; name=&quot;71f1&quot;&gt;
      Mümkün Olduğunca Fazla Yere Başvurun
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;ee4b&quot; name=&quot;ee4b&quot;&gt;
      Başvurular, her ne kadar başarı ve başvuru kalitesi ile ilgili olsa da, aynı zamanda belli bir şans faktörünü de içinde bulunduruyor. Çok kaliteli adaylar reddedilebiliyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Burada yapabileceğiniz en iyi şey, mümkün olduğunca fazla hoca ve okul bulup, mümkün olduğunca fazla başvuru yapmak.
      &lt;&#x2F;strong&gt;
      Başvuru yapmaktan korkmayın, Amerika başvurularının pek çoğunda ciddi bir miktar ödemek gerekiyor maalesef(75–125$), ödeyebildiğiniz kadar ödeyin. Avrupada neredeyse her okulun doktora başvurusu ücretsiz, başvurabildiğiniz kadar başvurun. Amerika’da da, bazı okullar(Örnek CMU-Carnegie Mellon) döviz kurundan dolayı bizim için başvuru ücretini kaldırabiliyor, indirim yapabiliyor, veya özel bazı günlerde(Pi Günüde Northeastern başvuru ücretini kaldırmıştı) de indirim kodu verebiliyorlar.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Okula mail atın, indirim isteyin, yüzsüz olun.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;428c&quot; name=&quot;428c&quot;&gt;
      Sistematik İlerleyin
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2af1&quot; name=&quot;2af1&quot;&gt;
      Her zaman bir google sheets, excel tablonuz olsun. Her adımı, her okulu oraya yazın, yazdığınız her bilgiyi de en az 2 kez kontrol edin, ben bir okulun son teslim tarihini yanlış yazmıştım, o yüzden başvuruyu kaçırdım.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sistematik ilerlediğiniz sürece, hata riskiniz azalır, sonradan üzülmezsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;53cb&quot; name=&quot;53cb&quot;&gt;
      Hocalarınızla ve Üst Dönemlerinizle Konuşun
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;5aed&quot; name=&quot;5aed&quot;&gt;
      Hayatta her şey elbet bir noktada tecrübeye dayalı, ama bu başvurular neredeyse tamamen tecrübeye bağlı olarak değişebiliyor. Ben şu an başvuru yapıyor olsa idim, pek çok şey değişirdi. Üst dönemlerinizden bu süreçleri geçirenlerle ve hocalarınızla bol bol konuşun, soru sorun, öğrenin.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu süreçte yüzsüz olun, herkese her şeyi sorun, şu an yüzsüz olmak, 10 ay sonra pişman olmaktan iyidir.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;0de6&quot; name=&quot;0de6&quot;&gt;
      Yanına Başvurduğunuz Hocalarla Kesinlikle İletişime Geçin
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;95bb&quot; name=&quot;95bb&quot;&gt;
      Şu ana kadar konuştuğum öğrencilerin %90&#x27;ı daha öncesinde iletişime geçtikleri neredeyse tüm hocaların yanına kabul almış, iletişime geçmedikleri hiçbir yerden kabul alamamış. (Ben de dahilim buna) Dolayısıyla resmi olarak böyle bir şey olmasa da, şahsi tecrübem bunun sonucu etkilediği yönünde. Okula başvuruyu gönderdiğiniz sıralarda hocalarla görüşün, mümkünse yüz yüze görüşme&#x2F;mülakat yapmaya çalışın, sizi bir istatistiktense bir insan olarak görmeleri sonucu etkiliyor. Benim Avrupa’daki başvurumda, hoca benim niyet mektubuma kendisi önerilerde bulunmuş, okula göndermeden önce mektubun içeriğini %15&#x27;e yakın oranda değiştirtmişti.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Başvuru zaten çok zor ve şansa dayalı bir süreç olduğu için, sizin tarafınızda bulunan ilave birilerinin olması hiçbir zaman kötü bir şey değildir.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;1ab7&quot; name=&quot;1ab7&quot;&gt;
      Umudunuzu ve Motivasyonunuzu Kaybetmeyin
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;555f&quot; name=&quot;555f&quot;&gt;
      Başvurular 5–6 ay gibi bir sürece yayıldığından, bir başvuruyu yapmadan diğerinden kabul veya ret alma şansınız var. Bunun sizi yönlendirmesine izin vermeyin, okullardan alacağınız tekliflerin içerikleri değişebilir, sizin düşünceleriniz değişebilir, ret alırsanız motivasyonunuz kırılabilir.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Mümkünse ilk günmüş gibi başvurularınızı yapmaya devam edin,
      &lt;&#x2F;strong&gt;
      en son tüm başvurularınız bittikten sonra karar sürecine devam edin.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0176&quot; name=&quot;0176&quot;&gt;
      Bazı İlave Kaynaklar
     &lt;&#x2F;h3&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;9bfa&quot; name=&quot;9bfa&quot;&gt;
       azimliyazar.blogspot.com
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c805&quot; name=&quot;c805&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5KtmOlEIdTk&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5KtmOlEIdTk&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=5KtmOlEIdTk
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;82bc&quot; name=&quot;82bc&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;http:&#x2F;&#x2F;csrankings.org&#x2F;advice.html&quot; href=&quot;http:&#x2F;&#x2F;csrankings.org&#x2F;advice.html&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        http:&#x2F;&#x2F;csrankings.org&#x2F;advice.html
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;755c&quot; name=&quot;755c&quot;&gt;
       thegradcafe.com
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        (okullar kabulleri göndermeye başladığında öğrenciler bu sitede paylaşıyor, okulunuzun alım durumunu öğrenebilirsiniz)
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;3647&quot; name=&quot;3647&quot;&gt;
      Son
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;966e&quot; name=&quot;966e&quot;&gt;
      Son olarak, okula da önem verseniz de, okuldan daha çok hocaya önem verin. Hocanın çalışma alanının sizi ilgilendirdiğinden, bu konuda doktora yapmak istediğinizden emin olun.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Araştırın, okuyun, sorun.
      &lt;&#x2F;strong&gt;
      Yazıda GRE ve İngilizce sınavlarından çok bahsetmedim, erken girmeniz hariç başka bir önerim yok, zaten internette milyonlarca kaynak bulabilirsiniz hepsiyle ilgili.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1389&quot; name=&quot;1389&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Gerileceksiniz, gerilin, gerilmek iyidir, ama kaygınızı en düşük seviyede tutmaya çalışın.
      &lt;&#x2F;strong&gt;
      Hayatınızın en güzel tecrübelerinden birisi olacak bu süreç aynı zamanda, çok fazla şey öğreneceksiniz, belki de ilk kez bir konuda bilgi edinmenin ne kadar zor olabileceğini göreceksiniz, tadını çıkarın. Sonunda geldiğiniz nokta çok güzel oluyor. Yıllarca sürekli bir sürü yere sırayla başvurup bir yere kabul alabildikten sonra, ilk kez seçen siz olabiliyorsunuz, asıl onun tadını çıkarın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b433&quot; name=&quot;b433&quot;&gt;
      Bana her zaman
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       alpkeles99@gmail.com
      &lt;&#x2F;strong&gt;
      adresinden ya da buradaki yorumlardan ulaşabilirsiniz. En son okuduklarıma göre yorum yazarsanız yazının görünürlüğü artıyormuş, o sebeple eğer beğendiyseniz ya da sorularınız varsa buradan yorum olarak yazarsanız sevinirim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;c01c&quot; name=&quot;c01c&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;575&quot; data-image-id=&quot;1*LLxFyNW_bnf4kO7ErON3UQ.jpeg&quot; data-width=&quot;799&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*LLxFyNW_bnf4kO7ErON3UQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;fbe5ab8465c&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-04-13T06:49:03.148Z&quot;&gt;
     April 13, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;doktora-ba%C5%9Fvurular%C4%B1-kapsaml%C4%B1-rehber-fbe5ab8465c&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Lisans Araştırmaları Rehberi: AdımODTÜ Lisans Araştırmaları</title>
        <published>2021-04-03T00:00:00+00:00</published>
        <updated>2021-04-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/lisans-arastirmalari-rehberi-adimodtu-lisans-arastirmalari/"/>
        <id>https://alperenkeles.com/posts/lisans-arastirmalari-rehberi-adimodtu-lisans-arastirmalari/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/lisans-arastirmalari-rehberi-adimodtu-lisans-arastirmalari/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;5004&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;cb50&quot; name=&quot;cb50&quot;&gt;
      Lisans Araştırmaları Rehberi: AdımODTÜ Lisans Araştırmaları
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e760&quot; name=&quot;e760&quot;&gt;
      Lisans araştırmaları ile ilgili ilk yazımda, neden lisansta araştırma yapmamız gerektiğini, bu tecrübenin bize katacaklarını, ne tip insanların lisans araştırmalarından hoşlanacağını anlatmış idim.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bahsi geçen yazıyı aşağıya bırakıyorum.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;ad49&quot; name=&quot;ad49&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Lisans Araştırmaları: Giriş Rehberi
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bu yazıya küçük bir dipnotla başlamak iyi olacaktır diye düşünüyorum. Elbette ki kendime bir araştırmacı diyecek…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;4b8f7de82e38aff323239e698911e0ff&quot; data-thumbnail-img-id=&quot;1*tnQJtvXmetzuAesza8eqww.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*tnQJtvXmetzuAesza8eqww.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;4583&quot; name=&quot;4583&quot;&gt;
      AdımODTÜ Lisans Araştırma Projeleri ODTÜ’deki lisans öğrencileri için kesinlikle kaçırılmaması gereken bir fırsat. Bir danışman ile akademik bir projeye başlamanın yanı sıra, akademik proje sunumu, bütçe ve zaman planlaması gerekliliği, sonda belli bir ürün beklentisi gibi yanlarıyla birlikte, öğrencilere araştırma tecrübesini çok yönlü olarak yaşama şansı sunuyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;4000&quot; name=&quot;4000&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;488&quot; data-image-id=&quot;1*Ja8731Cedtm9eXH-Io2hnA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1185&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Ja8731Cedtm9eXH-Io2hnA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;77ce&quot; name=&quot;77ce&quot;&gt;
      Bu
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       yazıyı asıl yazma nedenim ise
      &lt;&#x2F;strong&gt;
      , önümüzdeki hafta ön elemeye kabul edilen projelerin sunum haftası, dolayısıyla pek çok kişinin kafasında sorular mevcut. Bu soruları bir nebze olsun cevaplayabilmek, belirsizlikten akranlarımı kurtarabilmek için aklımdakileri toplayıp paylaşmak istedim. Yazıda öncelikle AdımODTÜ Lisans Araştırmaları Projesi’ni daha önce duymamış olanlara yönelik birtakım bilgiler verip, sonrasında sunum için çeşitli püf noktaları ve merak edilen soruları cevaplıyor olacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eba9&quot; name=&quot;eba9&quot;&gt;
      AdımODTÜ Lisans Araştırmaları Projesi, ODTÜ’deki her disiplinden lisans öğrencilerinin akademik bir danışman eşliğinde projelerini gerçekleştirebilmeleri için oluşturulmuş bir projedir. Okulun bütçe değerlendirmesi yapılırken, lisans öğrencilerine ayrı bir araştırma bütçesi normal şartlar altında ayrılmaz. Dolayısıyla bölüm özel inisiyatif almadığı sürece, akademik çalışmanız için belli bir bütçeye ihtiyacınız var ise, onu bulmak için çabalamanız gerekir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3d5e&quot; name=&quot;3d5e&quot;&gt;
      AdımODTÜ Lisans Araştırmaları Projesi kapsamında her yıl Şubat-Mart aylarında proje tanımınız, (eğer varsa) danışman hocanız ve ekibinizle birlikte başvuru yaparsınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cf5f&quot; name=&quot;cf5f&quot;&gt;
      Bu başvuru adımının ardından 2–4 kişilik bir panele projenizi İngilizce sunar, gelen soruları cevaplarsınız. Sunumda dikkat etmeniz gereken noktalar aşağıdaki gibidir.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;43ed&quot; name=&quot;43ed&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Araştırma Motivasyonu:
       &lt;&#x2F;strong&gt;
       Araştırma projenizin amacı nedir? Bu proje sonunda varmak istediğiniz nokta nedir, bu noktaya nasıl geldiniz, nasıl karar verdiniz?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4f4e&quot; name=&quot;4f4e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Proje Kapsamında Yapılacaklar:
       &lt;&#x2F;strong&gt;
       Projede ne yapacaksınız? Tasarım, üretim, deney, ölçüm… Bu tarz yapacağınız aktiviteleri açık bir şekilde açıklamanız gerek.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;2a12&quot; name=&quot;2a12&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Proje Planlaması:
       &lt;&#x2F;strong&gt;
       Projenizi hem zamansal olarak, hem de finansal olarak planlamanız gerek. Yaptığınız işin ciddiyetinin ortaya konması ve sizin kendi motivasyonlarınızı daha net açıklamasından dolayı üzerine düşünülmüş ve çalışılmış bir zaman çizelgeniz olması bir artı olacaktır. Projeniz ne kadar beğenilse de, eğer finansal olarak gerçek dışı veyahut üzerine yeterince çalışılmamış beklentileriniz varsa, bu sizin beklediğinizin
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        altında bir miktar fon almanıza veyahut hiç fon alamamanıza sebep olabilir
       &lt;&#x2F;strong&gt;
       , genel olarak buradaki AdımODTÜ fonunun mezun bağışlarından geldiğini de unutmamak gerekir,
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        size gelen bir bütçe başka bir öğrenciye gidemeyecek demektir
       &lt;&#x2F;strong&gt;
       , lütfen aldığınız parayı hakkını vererek ve düzgün şekilde kullanmaya çalışın.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;3cdb&quot; name=&quot;3cdb&quot;&gt;
      Genel olarak sunumlarla ilgili daha söylenebilecek pek çok şey olsa da, bu konuda sizlere ilginizi çekebilecek
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       birkaç kaynak bırakmakla yetineceğim.
      &lt;&#x2F;strong&gt;
      Altta bırakacağım linklerden ilginizi çekenleri incelemenizi tavsiye ederim. Sadece bahsetmek istediğim küçük bir nokta, benle iletişime geçen birkaç hocamız sunum sonrasındaki soruların İngilizce olup olmadığıyla ilgili bir soru sordu. Varsayılan dil İngilizce olmakla birlikte kendinizi yeterli veyahut doğru olarak ifade edemediğinizi düşünüyorsanız her zaman hocanızla
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       konuşup durumunuzu açıklayabilirsiniz,
      &lt;&#x2F;strong&gt;
      karşınızdaki jüri üyeleri sizin bölümünüzden, belki de tanıdığınız hocalar olacaklar,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       onlardan korkmayın, onlara güvenin.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5286&quot; name=&quot;5286&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önceki Yılların Projeleri:
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;d68d&quot; name=&quot;d68d&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;proje&#x2F;lisans-arastirmalari-projesi&quot; href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;proje&#x2F;lisans-arastirmalari-projesi&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;proje&#x2F;lisans-arastirmalari-projesi
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;82f2&quot; name=&quot;82f2&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2018-Brosur.pdf&quot; href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2018-Brosur.pdf&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2018-Brosur.pdf
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e163&quot; name=&quot;e163&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2020-Brosur.pdf&quot; href=&quot;https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2020-Brosur.pdf&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;adimodtu.org.tr&#x2F;pdf&#x2F;AdimODTU-Lisans-Arastirmalari-2020-Brosur.pdf
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;1d5f&quot; name=&quot;1d5f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Nasıl İyi Sunum Yapılır:
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;b478&quot; name=&quot;b478&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Unzc731iCUY&amp;amp;t=2s&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Unzc731iCUY&amp;amp;t=2s&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Unzc731iCUY&amp;amp;t=2s
       &lt;&#x2F;a&gt;
       MIT’de bir hoca olan Patrick Winston’ın sunum ve konuşmalar ile ilgili 1 saatlik bir dersi, tavsiye ederim.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0882&quot; name=&quot;0882&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;hbr.org&#x2F;2013&#x2F;06&#x2F;how-to-give-a-killer-presentation&quot; href=&quot;https:&#x2F;&#x2F;hbr.org&#x2F;2013&#x2F;06&#x2F;how-to-give-a-killer-presentation&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;
        https:&#x2F;&#x2F;hbr.org&#x2F;2013&#x2F;06&#x2F;how-to-give-a-killer-presentation
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;c4cb&quot; name=&quot;c4cb&quot;&gt;
      Bir de, bir örnek görmek isteyebilecek arkadaşlar için, geçtiğimiz yıl hibe almaya hak kazandığımız
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       projenin sunum dosyasını
      &lt;&#x2F;strong&gt;
      bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;a221&quot; name=&quot;a221&quot;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;20b7&quot; name=&quot;20b7&quot;&gt;
      Umuyorum ki bu yazıyı okuyorsanız, sunumlarınızda, başvurularınızda başarılı olursunuz,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       şimdiden sizleri tebrik ederim
      &lt;&#x2F;strong&gt;
      . Eğer herhangi bir sorunuz olursa, benimle
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       alpkeles99@gmail.com
      &lt;&#x2F;strong&gt;
      adresinden iletişime geçebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;54da&quot; name=&quot;54da&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;512&quot; data-image-id=&quot;1*Hq9Ps2iyAgwWlfcG9zk13Q.jpeg&quot; data-width=&quot;1024&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Hq9Ps2iyAgwWlfcG9zk13Q.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;962800ec7582&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-04-03T23:49:54.591Z&quot;&gt;
     April 3, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-rehberi-ad%C4%B1modt%C3%BC-lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-962800ec7582&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Seçimler</title>
        <published>2021-03-29T00:00:00+00:00</published>
        <updated>2021-03-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/secimler/"/>
        <id>https://alperenkeles.com/posts/secimler/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/secimler/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;b335&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;c0c9&quot; name=&quot;c0c9&quot;&gt;
      Seçimler
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cdab&quot; name=&quot;cdab&quot;&gt;
      Bazen korkuyorum. Gelecek belirsiz, korkutucu, her bir tercihin kelebek etkisi gibi sonuçlarının bizleri nereye götüreceği o kadar belirsiz ki…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6a93&quot; name=&quot;6a93&quot;&gt;
      Bir gün evden 30 saniye geç çıktığımız için kaçırdığımız otobüste en yakın arkadaşımızla tanışmayacağımızı, girdiğimiz sınavdaki bir soruyu kaydırdığımız için üniversite, şehir, hayat değiştireceğimizi düşünün.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9725&quot; name=&quot;9725&quot;&gt;
      Her saniye kaçırdığımız fırsatları düşünün, milyon dolarlık ikramiyeyi almadığımız, hayatımızı değiştirecek olan o reklamı görmediğimiz, yanlış sınıfa girip hayatımızı değiştirecek olan insanlarla karşılaşmadığımız…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4de6&quot; name=&quot;4de6&quot;&gt;
      Herhangi bir seçimimizin etkisi gerçekten ne kadar hayatımıza? Saatlerimizi harcadığımız, artısını eksisini düşünürken saçlarımızı döktüğümüz, pişman olduktan sonra günlerce, haftalarca kafamızı duvarlara vurduğumuz o kararlar, gerçekten ne ifade ediyor?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8f4a&quot; name=&quot;8f4a&quot;&gt;
      Şu günlerde bir seçim yapmak istiyorum. Kafamı yoruyorum, düşünüyorum, tablolar hazırlıyorum, insanlarla konuşuyorum. Ama günün sonunda, iyi ya da kötü bir seçim olmayacağını görüyorum. Ben ne yaparsam yapayım, benim kontrolümün dışındaki koskoca bir dünyanın ortaya koyduğu kaotik bir sistem benim hayatımda benden çok daha büyük bir kontrole sahip olacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1c26&quot; name=&quot;1c26&quot;&gt;
      Nasıl seçeceğiz, ne seçeceğiz, seçimimizin gerçekten bir anlamı var mı, işte bunlar cevaplarını aradığım sorular…
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;d8ac&quot; name=&quot;d8ac&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;800&quot; data-image-id=&quot;1*d4RBW4JFLiUbudI0ICQbXg.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;800&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*d4RBW4JFLiUbudI0ICQbXg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;6ff5e2480556&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-03-29T22:17:45.318Z&quot;&gt;
     March 29, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;se%C3%A7imler-6ff5e2480556&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yurt Dışı Staj: Kabul Aldınız, Peki Ya Şimdi?</title>
        <published>2021-03-14T00:00:00+00:00</published>
        <updated>2021-03-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yurt-disi-staj-kabul-aldiniz-peki-ya-simdi/"/>
        <id>https://alperenkeles.com/posts/yurt-disi-staj-kabul-aldiniz-peki-ya-simdi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yurt-disi-staj-kabul-aldiniz-peki-ya-simdi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;688b&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;176b&quot; name=&quot;176b&quot;&gt;
      Yurt Dışı Staj: Kabul Aldınız, Peki Ya Şimdi?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;75ac&quot; name=&quot;75ac&quot;&gt;
      Staj başvuru süreçlerinin yavaştan bittiği ya da son zamanlarına yaklaşıldığı, asıl staja hazırlığın yapıldığı bir noktaya geldik.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Vizeler alınacak, evler bulunacak, uçak biletleri aranacak, tatil planları yapılacak…
      &lt;&#x2F;strong&gt;
      Asıl eğlenceli, zorlu, öğretici ve en temelde insanı geliştiren kısımların vakti geldi, bu yazıda da mümkün olduğunca o konularla ilgili yardımcı olmaya çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2505&quot; name=&quot;2505&quot;&gt;
      Başlamadan üstüne basmam gereken bir nokta, burada bahsedeceğim internet siteleri, kaynaklar, para miktarları hep kendi tecrübelerime göre olacak, mümkün olduğunca bu bilgilere ayrıca nasıl ulaşabilirsiniz onu da anlatmaya çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f8e7&quot; name=&quot;f8e7&quot;&gt;
      Önümüzdeki yıl kabul alacaklar için, giriş rehberini aşağıya bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;4ce7&quot; name=&quot;4ce7&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-geni%C5%9Fletilmi%C5%9F-rehber-9d4b0038dd1f&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-geni%C5%9Fletilmi%C5%9F-rehber-9d4b0038dd1f&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-geni%C5%9Fletilmi%C5%9F-rehber-9d4b0038dd1f&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Yurt Dışı Staj: Genişletilmiş Rehber
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        İlk yurt dışı stajıma gittiğimde, küçük çaplı bir yurt dışı staj yazısı yazmaya çabalamıştım, görece başarısız sonucumu…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;2a8c7e4bf49c3af1fc4f85f12eebc320&quot; data-thumbnail-img-id=&quot;1*S39Pb4BS3lHYvFquEwAoag.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-geni%C5%9Fletilmi%C5%9F-rehber-9d4b0038dd1f&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*S39Pb4BS3lHYvFquEwAoag.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--mixtapeEmbed&quot; id=&quot;e034&quot; name=&quot;e034&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;306&quot; data-image-id=&quot;1*xNbeUiWf5ta_fW8dN9EihQ.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;512&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*xNbeUiWf5ta_fW8dN9EihQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;a79c&quot; name=&quot;a79c&quot;&gt;
      Gidiş Süreci
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;770b&quot; name=&quot;770b&quot;&gt;
      Her şeyden önce, eğer vizesiz gidebilecek kadar şanslı değilseniz, acilen vize başvurusu yapmanız gerek. Pandemi önlemleri de hesabın içine katıldığında sürecin ne kadar süreceğinin bir garantisi yok, dolayısıyla
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       bulabildiğiniz ilk anda vize başvurunuzu yapın, geçe bırakmayın.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ad3e&quot; name=&quot;ad3e&quot;&gt;
      Uçak biletinizi alırken indikten sonraki süreci dikkatle planlamanız gerek.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Toplu taşıma rotaları, saatleri, kalacağınız yere giriş saatiniz
      &lt;&#x2F;strong&gt;
      gibi pek çok farklı etken aynı anda bu planlamada rol oynuyor olacak, yanlış bir planlamanın sonucunda indiğiniz saniye paniklemeniz staj için iyi bir başlangıç olmayacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;db42&quot; name=&quot;db42&quot;&gt;
      Yine Pandemi sebebiyle alınan ekstra önlemleri de şimdiden araştırıp, planlamalarınızı ona göre yapmak 2021 yazında staja gidecek herkes için çok önemli, her ülkenin regülasyonu birbirinden çok farklı,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       gitmeden önce o regülasyonlarla ilgili bilgi eksiğiniz olmamalı.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6cb4&quot; name=&quot;6cb4&quot;&gt;
      Gidiş süreciyle ilgili en kritik etmenlerden birisi ise barınma. Çok yüksek ihtimalle bütçenizin ciddi bir kısmını barınmaya harcayacaksınız, araştırmaya
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       ne kadar erken başlarsanız o kadar uygun fiyatlı bir yer bulabilirsiniz
      &lt;&#x2F;strong&gt;
      , ben şahsen hem geç başlamış hem de “hallederiz” mantığıyla ilerlemiştim, Almanya’daki ilk haftamı Airbnb’lerde sürünerek geçirmek zorunda kaldım, vermem gerekenin çok üstünde ücretler verdim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7d8b&quot; name=&quot;7d8b&quot;&gt;
      Benim gibi evsiz kalmamak için, çeşitli imkanlarınız var. İlk ve en önemlisi kesinlikle şirkete&#x2F;okula bunu önden sorun. Okulların 2–5 kişilik paylaşımlı öğrenci apartmanları olabiliyor, genelde de ciddi manada ucuz oluyorlar. Yaz süresince odasını veyahut evini kiralayan pek çok kişi var, bu kişiler evlerini internette kiralığa çıkarıyorlar. “&amp;lt;City Name&amp;gt; Flat Rent” gibi bir aramayla kendi şehriniz için pek çok kiralama sitesine ulaşabilirsiniz. Eğer mümkünse erkenden mailleşmeye, aramaya, mesaj atmaya çalışın; ayarlama ve anlaşma süreci hiçbir zaman kısa sürmüyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Kesinlikle ev işini geri planda bırakmayın, barınma gidiş esnasındaki problemlerin en tepesinde yerini almış durumda, kalan her probleminizi kolayca çözebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;151d&quot; name=&quot;151d&quot;&gt;
      Bahsettiğim kiralama sitelerinin pek çoğu orijinal dilde olacak, Google Chrome’un otomatik sayfa çevirme özelliği zamanında benim için çok faydalıydı, tavsiye ederim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;37e2&quot; name=&quot;37e2&quot;&gt;
      Bunlara ilaveten, Facebook’taki “&amp;lt;City Name&amp;gt; Erasmus”, “&amp;lt;City Name&amp;gt; 2021–2022 Erasmus”, “&amp;lt;City Name&amp;gt; Exchange” gibi grupları ve sayfaları inceleyebilirsiniz. Gideceğiniz şehrin ESN(Erasmus Student Network)’ü ile önden konuşmanız halinde onlar size yardımcı olabilir, eğer bir okula gidecekseniz okulun Erasmus ofisi de sizi doğru yönde yönlendirebilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;af4b&quot; name=&quot;af4b&quot;&gt;
      Eğer hiçbir şekilde bir çözüm bulamıyor iseniz, korkmayın. Mümkün olduğunca erken bir tarihte, gideceğiniz yerde 1–1.5 haftalık Airbnb ya da CouchSurf ayarlayıp,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       gittiğiniz zaman çok daha rahat şekilde kendinize ev arayışına girebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a7ac&quot; name=&quot;a7ac&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Son bir nokta, ev bulduktan sonra, bütçe planlaması yaparken depozitoyu da işin içine koymayı sakın unutmayın(unutandan tavsiyeler).
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b5c0&quot; name=&quot;b5c0&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;687&quot; data-image-id=&quot;1*rQ6R8omoU-_cPsQ1DGK6tQ.jpeg&quot; data-width=&quot;1400&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*rQ6R8omoU-_cPsQ1DGK6tQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;7462&quot; name=&quot;7462&quot;&gt;
      Gittikten Sonrası
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e2cf&quot; name=&quot;e2cf&quot;&gt;
      Gittikten sonra ayarlamanız gereken ilk şey ulaşım. Genelde her şehrin&#x2F;eyaletin kendine ait bir ulaşım kartı var, stajyer olarak pek çok yerde öğrenci kartı alabiliyorsunuz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu öğrenci kartı pek çok toplu taşımada(Tren, Metro, Otobüs…) sınırsız kullanım hakkı veriyor
      &lt;&#x2F;strong&gt;
      , normal bilete göre çok daha uygun oluyor. Ulaşım kartınızı ne kadar erken alırsanız, o kadar hızlı şehri rahatça gezmeye,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       stajınızın gerçekten tadını çıkarmaya başlayabilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d87d&quot; name=&quot;d87d&quot;&gt;
      Almanya’da benim aldığım kart NRW(North Rhine-Westphalia) eyaletinin nerdeyse tamamını gezmeme imkan veriyordu, iş çıkışlarında ve hafta sonlarında kahve içmek ya da yemek yemek için şehir değiştirdiğim çok oldu, tüm bir yaz
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       aynı yerde iki kez kahve içtiğim neredeyse olmadı, size de aynısını tavsiye ederim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2833&quot; name=&quot;2833&quot;&gt;
      Ulaşım ve barınmayı ayarladığınız takdirde, geriye şehre ve staja alışmak, daha da önemlisi plan yapmak kalıyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Benim şahsi tavsiyem, gezebildiğiniz kadar gezin, eğlenin.
      &lt;&#x2F;strong&gt;
      Flixbus, Blablabus gibi otobüs şirketleriyle erken aldığınız takdirde 4–5€ gibi fiyatlarla yüzlerce kilometre gidebilir, RyanAir’la 10–15€ civarında ücretlerle Avrupa’nın bir ucundan diğer ucuna uçabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;76ed&quot; name=&quot;76ed&quot;&gt;
      Diğer değişim(Exchange, Erasmus…) öğrencileriyle tanışın, onların tecrübeleri hem sizi eğlendirecek, hem de yaşamayı hatalardan değil insanlardan öğrenmenizi sağlayacaktır. Oryantasyon etkinlikleri, ESN’in düzenlediği faaliyetler gibi etkinlikleri de kesinlikle kaçırmayın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b2ff&quot; name=&quot;b2ff&quot;&gt;
      Yurt Dışı Stajı, maalesef ki eğer şanslı değilseniz yalnız geçebilir, bu tecrübe de kendi başına çok değerlidir ancak orada edineceğiniz arkadaşlıklar, tanışıklıklar sizin tecrübenizi çok daha değerli, çok daha unutulmaz kılacaktır, sosyalleşmeye, tanışmaya, insanlarla kaynaşmaya çalışın, yurt odanızda Netflix izlediğiniz izole bir yaz geçirmeyin, hikayelerle dönün.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fdbb&quot; name=&quot;fdbb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Yazıyı bitirmeden önceki son tavsiyem de, ucuz yaşayın, zengin gezin. Enerjinizi ve bütçenizi mümkün olduğunca gezmeye, eğlenmeye harcayın. Umarım sizlere yardımcı olabilmişimdir, umarım benim sayemde az da olsa daha kolay yaparsınız bir şeyleri.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;686c&quot; name=&quot;686c&quot;&gt;
      Eğer herhangi bir sorunuz olursa, daha da önemlisi güzel haberleri paylaşmak isterseniz, istediğiniz zaman bana
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       alpkeles99@gmail.com
      &lt;&#x2F;strong&gt;
      üzerinden ulaşabilirsiniz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Aşağıya gezdiğim bazı yerlerin fotoğraflarını bırakıyorum, belki sizlere de gezmek için motivasyon olur.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;3&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--p&quot; id=&quot;0731&quot; name=&quot;0731&quot; style=&quot;width: 34.766%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;505&quot; data-image-id=&quot;1*3JdWvoMsmNX-5Q7LFw3C-A.jpeg&quot; data-width=&quot;870&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*3JdWvoMsmNX-5Q7LFw3C-A.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;759a&quot; name=&quot;759a&quot; style=&quot;width: 30.387%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;340&quot; data-image-id=&quot;1*LPMCHnjdI9M5orv6Tv2Xug.jpeg&quot; data-width=&quot;512&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;400&#x2F;1*LPMCHnjdI9M5orv6Tv2Xug.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure&quot; id=&quot;29f0&quot; name=&quot;29f0&quot; style=&quot;width: 34.847%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;593&quot; data-image-id=&quot;1*czOX3p8i-qMlEoh-5uoLpg.jpeg&quot; data-width=&quot;1024&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*czOX3p8i-qMlEoh-5uoLpg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
    &lt;div class=&quot;section-inner sectionLayout--outsetRow&quot; data-paragraph-count=&quot;2&quot;&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRow is-partialWidth graf-after--figure&quot; id=&quot;284e&quot; name=&quot;284e&quot; style=&quot;width: 47.053%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3024&quot; data-image-id=&quot;1*M9QBrmfeDC9S_XMwZkVDVA.jpeg&quot; data-width=&quot;4032&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;600&#x2F;1*M9QBrmfeDC9S_XMwZkVDVA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--layoutOutsetRowContinue is-partialWidth graf-after--figure graf--trailing&quot; id=&quot;28dc&quot; name=&quot;28dc&quot; style=&quot;width: 52.947%;&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2304&quot; data-image-id=&quot;1*kyBhPXgWhjrlNzqJISwpig.jpeg&quot; data-width=&quot;3456&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*kyBhPXgWhjrlNzqJISwpig.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;796c5d63cbe3&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-03-14T15:06:13.031Z&quot;&gt;
     March 14, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-kabul-ald%C4%B1n%C4%B1z-peki-ya-%C5%9Fimdi-796c5d63cbe3&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yüksek Lisans Doktora Başvuruları#2: Neden Yüksek Lisans?</title>
        <published>2021-02-26T00:00:00+00:00</published>
        <updated>2021-02-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari2-neden-yuksek-lisans/"/>
        <id>https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari2-neden-yuksek-lisans/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari2-neden-yuksek-lisans/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;dc0e&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;a832&quot; name=&quot;a832&quot;&gt;
      Yüksek Lisans&#x2F;Doktora Başvuruları#2: Neden Yüksek Lisans?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;f736&quot; name=&quot;f736&quot;&gt;
      Lisans mezuniyeti, pek çoğumuz için hayatımızın en heyecan verici, en kaygı verici, en korkutucu zamanı. Lisanstan mezun olana kadar ne yapacağımız önümüze çok önceden çizilmiş durumda, çoğu zaman düz bir çizgide ilerliyoruz hayatımızda.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;1521&quot; name=&quot;1521&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;368&quot; data-image-id=&quot;1*VGFrO9GRiBiFGbqaOdGWQA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;760&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*VGFrO9GRiBiFGbqaOdGWQA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;3371&quot; name=&quot;3371&quot;&gt;
      Üniversite mezuniyeti bu düz çizgiyi karmaşıklaştırıyor, dallandırıyor, hayatımızda belki de ilk kez seçim hakkında sahip oluyoruz. Üniversite okurken pek çoğumuz okumama hakkına sahip değildik, tek seçim yer, ve şanslıysak okuduğumuz bölüm idi. Lisans mezuniyetinin ardından alabileceğimiz sayısız seçenek bize sonsuz farklı gelecek vadediyor. Çalışacağımız ya da okuyacağımız ülke, şehir, şirket, pozisyon, meslek, alan… İlk kez seçenekler sınırlandırılmış değil, daha da önemlisi yapılandırılmış değil. Neyi seçerseniz ne olacağını bilmiyorsunuz, çizgiler ilk kez daha önceden sizin için çizilmemiş.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;78c8&quot; name=&quot;78c8&quot;&gt;
      Bu durumda, korkmamız son derece normal, peki ne yapabiliriz? Sizi bilmem ama ben, size elimden geldiğince destek olmak, rehberlik etmek için buradayım. Ben şahsen lisans hayatıma doktorayla devam edeceğim, çevremde yüksek lisans yapacak arkadaşlarım da mevcut, şirketlerde devam edecekler de mevcut. Bu yazıda yüksek lisans yolunu seçmenin avantaj ve dezavantajlarından, hangi tip insanlar için bu yolun daha iyi olabileceğinden bahsetmeye çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;6fd7&quot; name=&quot;6fd7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;460&quot; data-image-id=&quot;1*k4HCCYMziFKHqcWKEyqbuw.jpeg&quot; data-width=&quot;690&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*k4HCCYMziFKHqcWKEyqbuw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b418&quot; name=&quot;b418&quot;&gt;
      Benim hayatımda uyguladığım ve inandığım çok temel bir ilke var, aşağıda bunu basit birkaç grafikle de açıklamaya çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8b43&quot; name=&quot;8b43&quot;&gt;
      Hayatta verdiğimiz en önemli kararlar, sınırlı kaynakların paylaştırılmasına dayanır. Bir ailenin market alışverişinde ön planda tuttuğu ürünü seçmesi onların aç kalmamasını sağlarken, bir şirketin bütçe planlaması önümüzdeki yıl iflas etmesini engelleyecektir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c8e4&quot; name=&quot;c8e4&quot;&gt;
      Ancak para gibi üretilmiş kaynaklar dışarıdan desteklenebilir, değiştirilebilir, etkilenebilir. İnsan hayatındaki en önemli sınırlı kaynak vakittir, zamandır. Bir gün 24 saattir, ortalama bir insan 600.000 saat yaşar, bu vakti istediğiniz kadar iyi değerlendirin, ancak belli bir dereceye kadar tasarruf edebilirsiniz, fazlası mümkün değildir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7f22&quot; name=&quot;7f22&quot;&gt;
      Peki biz bu en temel kaynakla neler yapabiliriz? Hobilerimize harcayabiliriz, sevdiklerimize harcayabiliriz, kariyerimize, öğrenimimize, uykumuza, dinlenmemize, tatilimize harcayabiliriz. Burada önemli olan bir diğer noktaysa, bunların hepsinin aynı anda mümkün olmadığıdır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4af3&quot; name=&quot;4af3&quot;&gt;
      Uyurken öğrenemezsiniz, çalışırken hobilerinizle ilgilenemezsiniz, sevdiklerinizle birlikteyken kariyerinize destek veremezsiniz. Tabii ki bir noktaya kadar melez çözümler üretilebilir, en yakın arkadaşlarımla birlikte en büyük hobimizi bir girişim haline getirip, tatile çıktığımız dağ evinde dinlenirken bir yandan şirket kurmaya çalışabiliriz, ama alttaki fikir değişmez, hayat pazarlıklarla doludur, bir yerden kazanırken bir yerden kaybetmekten kaçınamazsınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;af0d&quot; name=&quot;af0d&quot;&gt;
      Farklı kariyer seçenekleri vaktimizi farklı şekilde dağıtmamıza sebep olur. Bir şirketin yeni mezundan beklentisiyle, bir okulun yüksek lisans öğrencisinden beklentisi farklıdır, aynı şekilde yeni mezun olarak çalışmakla yüksek lisans yapmanın kişiye olan sonuçları da farklıdır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4ac5&quot; name=&quot;4ac5&quot;&gt;
      Yeni mezun birisi işe girdiğinde, önce öğrenir, sonra gelişir, derinleşir, en sonunda birkaç yıl sonunda bir konunun ehli olur. Bu süreçte yüksek lisans yapacak kişiye oranla daha iyi kazanır, hayatta daha düz bir çizgide istikrarla ilerler. Bir yeni mezunun öğrenme grafiği yaklaşık aşağıdaki gibidir.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;a63d&quot; name=&quot;a63d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;371&quot; data-image-id=&quot;1*bd9xqrRHM-IKRCTfoWKOWw.png&quot; data-width=&quot;1120&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*bd9xqrRHM-IKRCTfoWKOWw.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Tek Proje&#x2F;Konu’da Çalışan Yeni Mezunun Öğrenme Grafiği
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a0cf&quot; name=&quot;a0cf&quot;&gt;
      Başlangıç seviyesinde çok ciddi miktarda başlayan öğrenme, içinde bulunulan projede daha ilerlendikçe azalır, aynı konunun daha derin taraflarına doğru devam edilir. Burada asıl tehlike, ilk proje bittikten sonra ortaya çıkar. Ya yeni bir konuda sıfırdan öğrenmeye başlarsınız, ki bu durumda yukarıdaki gibi bir grafiği tekrardan yaşamış olursunuz, bunun bir örneğini de aşağıda bırakıyor olacağım. Ya da aynı konuda devam edersiniz, bu durumda bildiğiniz konuda çalışıyor olduğunuz için öğrenme miktarınız gitgide daha da azalır, bir noktadan sonra yaptığınız işin öğrenilebilecek çoğu detayını öğrenmiş, öğrenilemeyecek detaylarıyla ilgilenmeye başlamış olursunuz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;5f7f&quot; name=&quot;5f7f&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;376&quot; data-image-id=&quot;1*--DptRwixwlng8pCqrlMQQ.png&quot; data-width=&quot;1674&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*--DptRwixwlng8pCqrlMQQ.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Çeşitli Konularda Projelerde Yer Alan Yeni Mezunun Öğrenme Grafiği
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9162&quot; name=&quot;9162&quot;&gt;
      Artık asıl soru, peki yüksek lisans bize nasıl bir öğrenim eğrisi sağlar? Neden yüksek lisans yapmak bizim için yeni mezun olarak yukarıdaki ihtimallerle karşılaşmaktan daha iyidir, ya da iyi midir, kimler için iyidir?
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7ffc&quot; name=&quot;7ffc&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;375&quot; data-image-id=&quot;1*HbCLwQh1K9xtGZ7w67i5Pw.jpeg&quot; data-width=&quot;375&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*HbCLwQh1K9xtGZ7w67i5Pw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;710a&quot; name=&quot;710a&quot;&gt;
      Yüksek Lisans, lisans eğitimindeki konuların daha derinlemesine, daha ileri seviye noktalarıyla birlikte anlatıldığı derslerin, en temel konsept olarak “araştırma” odağıyla verilmesiyle geçer. Lisans eğitiminde gerek sektör ihtiyacı gerekse öğrenci sayısı sebebiyle mümkün olmayan daha proje odaklı, ucu açık araştırma problemleri içeren, ölçmekten ziyade öğretmeyi hedefleyen bir eğitim sistemi sağlar. Hakemli makalelerin okunmaya başlandığı, akademik problemlerin daha detaylı şekilde öğrenciye tanıtılıp son nesil araştırma problemlerinin ortaya konduğu, bir nevi akademisyen yetiştirme sürecinin başladığı bir dönemdir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;22cd&quot; name=&quot;22cd&quot;&gt;
      Akademisyen olma ihtimalinin yanı sıra, araştırma-geliştirme projelerinde de yüksek lisans mezunu olma şartının arandığı pek çok durum var. Araştırma projelerine ilgi duyan, bilinmeyenlere karşı meraklı, okumayı ve yazmayı seven kişilerin görece yüksek lisans sürecine daha uygun olacağına dair de şahsi bir görüşüm mevcut.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3e82&quot; name=&quot;3e82&quot;&gt;
      Yüksek lisansın öğrenim eğrisi, bir yeni mezunun öğrenim eğrisine göre çok daha farklı. 2 yılda alınan yaklaşık 7 dersin hepsi farklı konulara belli seviyeye kadar öğrenim sağlıyor, buna ilaveten seçilen tez konusunda daha derinlemesine bir okuma&#x2F;yazma&#x2F;proje yapma&#x2F;öğrenme süreci geçiriliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9d66&quot; name=&quot;9d66&quot;&gt;
      Yazının ortalarında, vaktimizi dağıtırken bedel ödememiz gerektiğinden bahsetmiştim. Yüksek lisans, öğrenim açısından çok ciddi faydalar sağlarken, parasal açıdan çalışmaya başlamaya göre ciddi dezavantajlara sahip. Ayrıca yüksek lisans sonrası sektörde devam etmeyi düşünen birisinin kendi akranlarına göre 2 yıllık bir iş tecrübesi eksikliği mevcut. Yine burada dikkat edilmesi gereken bir nokta da, yüksek lisans eğitiminin lisans eğitimiyle masada olmayacak çeşitli iş imkanlarına da kapılar açtığı.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;aa32&quot; name=&quot;aa32&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;405&quot; data-image-id=&quot;1*J8924gtca3YKKYXe8imzjQ.jpeg&quot; data-width=&quot;188&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*J8924gtca3YKKYXe8imzjQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;17f5&quot; name=&quot;17f5&quot;&gt;
      Yüksek lisans eğitimiyle ilgili bir diğer önemli nokta ise yurtdışı kapısının ciddi miktarda açıldığı. İyi bir ağa ya da çok iyi bir arka plana sahip olmadan bir yeni mezun olarak yurt dışında iş bulmak ciddi miktarda zor, ancak yüksek lisans için yurtdışına gitmek hem daha kolay, hem de sonrasında oradaki şirketlerle iletişime geçmek çok daha basit. Aynı şekilde Türkiye’de yüksek lisans yaptıktan sonra belli bir konuda uzmanlık seviyesinde bilgi sahibi olacağınız için, yurt dışındaki şirketlerle iletişime geçmek ve kabul almak da daha kolay olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;3cb4&quot; name=&quot;3cb4&quot;&gt;
      Tabii ki günün sonunda herkesin kendi içinde vermesi gereken pek çok farklı muhakeme savaşı olacaktır, ancak ben en azından kendi limitli bilgimle de olsa seçim yapacaklara seçimlerini daha bilgili şekilde yapabilmek için bir fırsat vermek istedim, umarım faydalı olmuştur.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;eef29823616&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-02-27T00:51:20.111Z&quot;&gt;
     February 27, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-2-neden-y%C3%BCksek-lisans-eef29823616&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yüksek Lisans Doktora Başvuruları#1: Şimdi Sizin Aklınızda 2 Soru Var</title>
        <published>2021-02-23T00:00:00+00:00</published>
        <updated>2021-02-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari1-simdi-sizin-aklinizda-2-soru-var/"/>
        <id>https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari1-simdi-sizin-aklinizda-2-soru-var/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yuksek-lisans-doktora-basvurulari1-simdi-sizin-aklinizda-2-soru-var/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;c7d6&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;39aa&quot; name=&quot;39aa&quot;&gt;
      Yüksek Lisans&#x2F;Doktora Başvuruları#1: Şimdi Sizin Aklınızda 2 Soru Var
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;a037&quot; name=&quot;a037&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;584&quot; data-image-id=&quot;1*wVvEDxvDXfBGlFCYw2gTBw.jpeg&quot; data-width=&quot;900&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*wVvEDxvDXfBGlFCYw2gTBw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--hasDropCapModel graf-after--figure&quot; id=&quot;7390&quot; name=&quot;7390&quot;&gt;
      Yüksek Lisans&#x2F;Doktora Nedir? Nasıl Yapılır?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2b8e&quot; name=&quot;2b8e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazı, maalesef ki bu soruların cevabını vermeyecek.
      &lt;&#x2F;strong&gt;
      Bu yazı serinin devamıyla ilgili bilgi verecek, hangi kategorilerde hangi yazıların hangi sırayla geleceğini açıklayacak bir yazı olacak. Yurtdışı&#x2F;Yurtiçi, Yüksek Lisans&#x2F;Doktora, Avrupa&#x2F;Amerika gibi birçok ikilem mevcut, bunları uygun bir şekilde kategorize edip sizlere aktarmaya çabalayacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;19a6&quot; name=&quot;19a6&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ancak bu kategorizasyondan önce, bu seriyi okuyan bir okuyucu ne kazanacak, biraz ondan bahsedelim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e1d0&quot; name=&quot;e1d0&quot;&gt;
      Ben 5 ay içinde ODTÜ’de lisanstan mezun oluyorum, dolayısıyla elbette bu süreçle ilgili anlatabileceklerim belli bir perspektife sınırlı olacak. Mümkün olduğunca hem yurtdışı hem yurtiçi fırsatlardan, zorluklardan, süreçle ilgili söylenmeyenlerden bahsetmeye çalışacağım.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Pek çok çeşitli okullara başvuran arkadaşlarım mevcut, onlardan kendi okullarıyla ilgili de bilgi alıp, elimden geldiğince süreci sizler için kolaylaştırmak için çabalayacağım.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ce28&quot; name=&quot;ce28&quot;&gt;
      İlk bilmeniz gereken şey şu, nasıl yurtdışında staj yapmak imkansız değilse, lisansta makale yazmak
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        imkansız değilse,
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      yurtdışında yüksek lisans yapmak da
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        imkansız değil.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Olay her zaman, yeteri kadar erken zamanda başlayıp, yeterli eforu sarf edip, gerekli arka planı kurmak ve çabalamak.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1272&quot; name=&quot;1272&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Lisans hayatınızda attığınız her bir adım, yüksek lisans başvurularında karşınıza çıkacak.
      &lt;&#x2F;strong&gt;
      Yanında asistanlık yaptığınız ya da dersindeki projeye ekstra çaba gösterip 100 üzerinden 105 aldığınız hocadan referans alabileceksiniz, okuduğunuz 2–3 makaleden hoşunuza giden bir konuyla ilgili bir hocayla iletişime geçip, onla iyi bir iletişim kurduğunuzda ortalamanız veya arka planınızla ilgili çeşitli dezavantajları dengeleme fırsatı bulabileceksiniz, gönüllü çalışmalarınızda kazandığınız tecrübeleri niyet mektubunuza yansıtıp, komite üyelerini belki de karakteriniz ve geçmişinizle etkileme fırsatı bulabileceksiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1101&quot; name=&quot;1101&quot;&gt;
      Tüm bu bahsettiğim etmenler başvurunuza farklı şekilde yansıyacak, ve evet belki de yeterli olmayacak, belki de geç kaldınız. Ama geç kalsanız bile sonraki yıllarda tekrar denemek, Türkiye’de yüksek lisansa başvurup yurtdışına doktoraya başvurmak gibi çeşitli ihtimaller mevcut.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ben bu yazıda vereceğim bilgilerin pek çoğunu geçen yıl bilmiyordum, bir kısmının kendi başvurularım esnasında da farkında değildim, umuyorum ki sizlere tecrübelerim sonucunda bir şeyler katabilir, kolaylık sağlayabilirim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;6c37&quot; name=&quot;6c37&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;480&quot; data-image-id=&quot;1*tND9NhGtY1N_F7-SlkAq5w.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;640&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*tND9NhGtY1N_F7-SlkAq5w.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;098c&quot; name=&quot;098c&quot;&gt;
      Bundan önceki tüm yazılarımda özellikle dikkat ettiğim bir nokta, mümkün olduğunca konu hakkında internette alelade bir aramayla bulunabilecek basit konseptleri tekrarlamaktan uzak durmaya çalışmak idi, bu seride bunu yapmak bazı açılardan problemler yaratacak. Yüksek Lisans&#x2F;Doktora farkı gibi bazı basit konseptler aslında az da olsa açıklanmaya ihtiyaç duyuyor, ancak ben ne bu konularda iyi bir anlatım yapabilirim, ne de var olan diğer kaynakların üzerine çıkabilirim. Bu sebeple bu yazıda önümüzdeki yazıların planladığım konularından kısaca bahsedip, konuyla ilgili bana zamanında yardımcı olmuş Türkçe&#x2F;İngilizce çeşitli kaynakları bırakacağım, ve sonrasında bitireceğim.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;f242&quot; name=&quot;f242&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;azimliyazar.blogspot.com&#x2F;p&#x2F;doktora.html&quot; href=&quot;https:&#x2F;&#x2F;azimliyazar.blogspot.com&#x2F;p&#x2F;doktora.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        Bilkent Mezunu bana da bu bloğu açmamda ilham olmuş şu an EPFL’de doktora yapan bir öğrencinin blogu
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ba1f&quot; name=&quot;ba1f&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;evrimagaci.org&#x2F;universite-ogrencilerinin-yuksek-lisans-master-ve-doktora-ile-ilgili-bilmesi-gerekenler-6978&quot; href=&quot;https:&#x2F;&#x2F;evrimagaci.org&#x2F;universite-ogrencilerinin-yuksek-lisans-master-ve-doktora-ile-ilgili-bilmesi-gerekenler-6978&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        Evrim Ağacı’nın konu ile ilgili ayrıntılı bir yazısı
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4ef5&quot; name=&quot;4ef5&quot;&gt;
       &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;www.arasindakifark.net&#x2F;master-doktora-arasindaki-fark-nedir&#x2F;#:~:text=Master%20ve%20Doktora%20arasındaki%20başlıca%20farklar%3B&amp;amp;text=Yüksek%20lisans%20eğitimi%2C%20kişinin%20branşta,yorum%20yapma%20yeteneği%20kazandırmak%20içindir.&quot; href=&quot;https:&#x2F;&#x2F;www.arasindakifark.net&#x2F;master-doktora-arasindaki-fark-nedir&#x2F;#:~:text=Master%20ve%20Doktora%20arasındaki%20başlıca%20farklar%3B&amp;amp;text=Yüksek%20lisans%20eğitimi%2C%20kişinin%20branşta,yorum%20yapma%20yeteneği%20kazandırmak%20içindir.&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;
        Kısaca Doktora&#x2F;Yüksek Lisans Farkını Öğrenmek İsteyenler için kısa bir yazı
       &lt;&#x2F;a&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;1fbb&quot; name=&quot;1fbb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Linkleri üstteki maddelerin üstüne gelirseniz görebilirsiniz, tıkladığınızda sayfalara gidecektir.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4ef8&quot; name=&quot;4ef8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bundan sonra hakkında yazacağım konular.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;342a&quot; name=&quot;342a&quot;&gt;
       Direkt Doktora(Bütünleşik Doktora)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;00dd&quot; name=&quot;00dd&quot;&gt;
       Amerika vs Avrupa
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;74f1&quot; name=&quot;74f1&quot;&gt;
       Doktora Başvuru Sistemleri ve Gereklilikleri
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d374&quot; name=&quot;d374&quot;&gt;
       Yüksek Lisans Başvuru Sistemleri ve Gereklilikleri
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;49f1&quot; name=&quot;49f1&quot;&gt;
       Kabul Şansı Nasıl Arttırılır(Projeler, Araştırmalar, Stajlar…)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;90d6&quot; name=&quot;90d6&quot;&gt;
       Niyet Mektubu(Statement of Purpose) Nasıl Yazılır
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d036&quot; name=&quot;d036&quot;&gt;
       Referans Nasıl&#x2F;Kimden İstenir, bir hocanın referans olması için öğrenciden ne gibi beklentileri vardır?
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ffa0&quot; name=&quot;ffa0&quot;&gt;
       Kendi başvurularım esnasında keşfettiğim çeşitli yararlı kaynaklar ve metodolojiler mevcut, bunları da ayrıca paylaşacağım.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;47b0&quot; name=&quot;47b0&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu şekilde uzun, karmaşık, yeri geldiğinde benim de fikrimi değiştireceğim, çevremden de hem bilgi hem tecrübe olarak alabildiğim kadar destek alacağım, yazması zor ve eğlenceli bir seri olacak.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;73c8&quot; name=&quot;73c8&quot;&gt;
      An itibariyle 8 başvurumun 2 tanesinden ret, 1.5 da kabul almış durumdayım, bundan sonraki yazılarda durumlar daha netleştikçe bunları da güncelleyip gelecekteki kendime okuduğum zamanlar için komik bir not da bırakmış olayım.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;88cba13981ce&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-02-23T22:01:31.449Z&quot;&gt;
     February 23, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;y%C3%BCksek-lisans-doktora-ba%C5%9Fvurular%C4%B1-1-%C5%9Fimdi-sizin-akl%C4%B1n%C4%B1zda-2-soru-var-88cba13981ce&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Staj Rehberi#4 — Eski Stajlar</title>
        <published>2021-02-17T00:00:00+00:00</published>
        <updated>2021-02-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/staj-rehberi4eski-stajlar/"/>
        <id>https://alperenkeles.com/posts/staj-rehberi4eski-stajlar/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/staj-rehberi4eski-stajlar/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;ac9b&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;5990&quot; name=&quot;5990&quot;&gt;
      Staj Rehberi#4 — Eski Stajlar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5a3a&quot; name=&quot;5a3a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Dünyanın en iyi pazarlamacısı, herkese her ürünü satabilir. Ancak, dünyanın en iyi hazırlanmış özgeçmişi bile, herkesi işe sokmaya yetmez.
      &lt;&#x2F;strong&gt;
      İşe alımda, kendinizi pazarlamak, tecrübenizle mümkündür, tecrübenin de en önemlisi iş tecrübesidir, dolayısıyla bir özgeçmişin en önemli kısımlarından birisi iş tecrübenizi nasıl bir şekilde aktardığınızdır.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8b1d&quot; name=&quot;8b1d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;900&quot; data-image-id=&quot;1*xMKGCwKy5dt1ERXqP__4YA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*xMKGCwKy5dt1ERXqP__4YA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;8281&quot; name=&quot;8281&quot;&gt;
      İlk stajınızı, zorluklarla elde ettiniz, belki araya tanıdıklar girdi, belki oturdunuz yirmi farklı şirkete başvurdunuz, belki çok çalışıp ortalamanızı yükselttiniz, belki şansınıza girdiniz, belki de uğraşıp çok güzel bir başvuru hazırladınız. Size kötü bir haberim var, sıradaki daha da zor olacak. İlk stajda, akranlarınız da sizinle aynı konumdaydı, sıfır noktasında. Artık hepiniz farklı noktalara, farklı bilgi seviyelerine ulaştınız, yarış çok daha kalabalık, çok daha çekişmeli hale geldi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;49f4&quot; name=&quot;49f4&quot;&gt;
      Bu esnada, dikkat etmeniz gereken en önemli noktalardan biri ise yine o kazandığınız tecrübeyi özgeçmişinize ve başvurunuza dökmek, tabir yerindeyse kendinizi parlatmak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5952&quot; name=&quot;5952&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Düşebileceğiniz ilk yanılgı, anlatacak bir şeyiniz olmadığı yanılgısı, hatalısınız.
      &lt;&#x2F;strong&gt;
      20 gün boyunca bir iş yerine giden herhangi bir insan, az da olsa bir şeyler öğrenmiştir, bu öğrendiğinizi güzelce çerçeveleyip özgeçmişinize koymamak büyük bir hata olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6bf0&quot; name=&quot;6bf0&quot;&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       Düşeceğiniz diğer bir yanılgı ise, işinizden bahsetme şekliniz. İşin en önemli kısmı çoğu zaman stajı nerede&#x2F;kimle yaptığınız değil.
      &lt;&#x2F;em&gt;
      Elbette şirket önemli, ama siz o şirkette nasıl bir görev aldınız? Nasıl bir projede, nasıl bir ekipte çalıştınız, neler öğrendiniz, neler yaptınız?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bd8c&quot; name=&quot;bd8c&quot;&gt;
      Şirketin&#x2F;departmanın kısa ve öz bir tanımının yanı sıra çalıştığınız esnada yaptığınız işi birkaç alt başlık halinde açıklamanız fazlasıyla yeterli olacaktır, aşağıda birkaç örnek bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;6c76&quot; name=&quot;6c76&quot;&gt;
      Yazı,m Stajyeri — X Şirketi
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;26e0&quot; name=&quot;26e0&quot;&gt;
      X Şirketi, Y konusunda yazılım geliştiren, Türkiye’nin önde gelen şirketlerinden birisi. Ben X şirketinin Z departmanında çalıştım. Stajım esnasında;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;8c80&quot; name=&quot;8c80&quot;&gt;
      A konusunda makaleler okudum
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;80d4&quot; name=&quot;80d4&quot;&gt;
      B alanında basit bir sistem geliştirdim
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;ebae&quot; name=&quot;ebae&quot;&gt;
      C tipi grafikleri okuyup yorumlamayı, raporlamayı öğrendim.
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;5f32&quot; name=&quot;5f32&quot;&gt;
      Yukarıdaki gibi basit bir şema üzerine kurulu bir staj anlatımı, fazlasıyla yeterli ve gerekli olacaktır. Aşağıda linkini atacağım, özgeçmiş, niyet mektubu ve proje yazılarından özgeçmiş yazısında kendi özgeçmişimi koymuş idim, oradaki staj açıklamalarından da yine kendinize bir şablon oluşturabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6781&quot; name=&quot;6781&quot;&gt;
      Serinin diğer yazılarına göre, çok daha kısa, belki de daha az bilgiye sahip, bir tık yetersiz olabilecek bir yazı oldu, bunun için sizlerden özür diliyorum. Serinin önceki yazılarını aşağıda bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;07d2&quot; name=&quot;07d2&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#1 — Özgeçmiş Hazırlama
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Hayal edin, hedefiniz olan şirkette bir insan kaynakları çalışanı olarak yer alıyorsunuz. Staj başvuru döneminin…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;e6b765db2b04bf39191d4639b6f5a174&quot; data-thumbnail-img-id=&quot;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*9MEJAHWPaiydFjVll90X3w.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--mixtapeEmbed&quot; id=&quot;e0a3&quot; name=&quot;e0a3&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#2 — Niyet Mektubu
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        İnternette hızlı bir arama, özgeçmişle ilgili dağınık da olsa pek çok kaynağa ulaşım sağlıyor. Gerekirse yeterli bir…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;63ee7a0cf9b3cf1a96e3a13d4142d01f&quot; data-thumbnail-img-id=&quot;1*fuZiiApXaaxpgfjMzo5koA.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*fuZiiApXaaxpgfjMzo5koA.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--mixtapeEmbed&quot; id=&quot;eb96&quot; name=&quot;eb96&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-3-projeler-5a71d007280e&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-3-projeler-5a71d007280e&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-3-projeler-5a71d007280e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#3 — Projeler
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bundan önceki iki yazıda, staj için iyi bir özgeçmiş ve iyi bir niyet mektubunun nasıl hazırlanacağından bahsetmiştim.
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;a8adcd9849e02977abf578caad131b68&quot; data-thumbnail-img-id=&quot;1*j7ft86S0PXYLLSJTdUwnBg.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-3-projeler-5a71d007280e&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*j7ft86S0PXYLLSJTdUwnBg.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed graf--trailing&quot; id=&quot;05bf&quot; name=&quot;05bf&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önceki yazılarda da bahsettiğim gibi, son zamanlarda amatör bir şekilde özgeçmiş&#x2F;niyet mektubu hazırlama konusunda kendimi finansal olarak desteklemek için danışmanlık yapıyorum uygun ücretlerle, eğer ilgileniyor iseniz veyahut başka türlü sorularınız için de benimle alpkeles99@gmail.com üzerinden iletişime geçebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;9c84a48489fb&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-02-17T23:53:00.885Z&quot;&gt;
     February 17, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;staj-rehberi-4-eski-stajlar-9c84a48489fb&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Staj Rehberi#3 — Projeler</title>
        <published>2021-02-07T00:00:00+00:00</published>
        <updated>2021-02-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/staj-rehberi3projeler/"/>
        <id>https://alperenkeles.com/posts/staj-rehberi3projeler/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/staj-rehberi3projeler/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;597a&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;ed03&quot; name=&quot;ed03&quot;&gt;
      Staj Rehberi#3 — Projeler
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;76bf&quot; name=&quot;76bf&quot;&gt;
      Bundan önceki iki yazıda, staj için iyi bir özgeçmiş ve iyi bir niyet mektubunun nasıl hazırlanacağından bahsetmiştim.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;2fdf&quot; name=&quot;2fdf&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#1 — Özgeçmiş Hazırlama
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Hayal edin, hedefiniz olan şirkette bir insan kaynakları çalışanı olarak yer alıyorsunuz. Staj başvuru döneminin…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;17e12c318df2554f4291caa5d1a9ecdf&quot; data-thumbnail-img-id=&quot;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*9MEJAHWPaiydFjVll90X3w.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--mixtapeEmbed&quot; id=&quot;37c8&quot; name=&quot;37c8&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#2 — Niyet Mektubu
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        İnternette hızlı bir arama, özgeçmişle ilgili dağınık da olsa pek çok kaynağa ulaşım sağlıyor. Gerekirse yeterli bir…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;63ee7a0cf9b3cf1a96e3a13d4142d01f&quot; data-thumbnail-img-id=&quot;1*fuZiiApXaaxpgfjMzo5koA.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*fuZiiApXaaxpgfjMzo5koA.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;d835&quot; name=&quot;d835&quot;&gt;
      İlk iki yazıyla ilgili en temel problem, özgeçmiş ve niyet mektubu, sizin için kendinizi şirkete sunma fırsatı. Ancak iyi bir sunum yapmanın en önemli noktası, sunumun biçiminin yanı sıra içeriğinin de kaliteli olmasıdır.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Yeri geldiğinde tersini savunacak çok kişi olsa da, karşınızdakine altın renginde bir ağaç kabuğu vermekle, altın bir külçe vermek arasında fark vardır.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;8ce3&quot; name=&quot;8ce3&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;307&quot; data-image-id=&quot;1*j7ft86S0PXYLLSJTdUwnBg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;512&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*j7ft86S0PXYLLSJTdUwnBg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;06e6&quot; name=&quot;06e6&quot;&gt;
      Günün sonunda, başvurunuzu güçlendirecek en önemli etken tabii ki sizsiniz. Kişiliğiniz, karakteriniz, tecrübeniz, yetenekleriniz… Ancak özellikle tecrübe ve yeteneğinizi göstermenin en önemli yollarından bir tanesi kaliteli projeler yapmak ve bu projeleri iyi bir şekilde sunabilmek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8c3e&quot; name=&quot;8c3e&quot;&gt;
      Yazıda genel olarak bilgisayar mühendisliği özelinde örnekler verecek olsam da, farklı alanlardan mümkün olduğunca projeleri çeşitlendirmeye çalışacağım.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Eğitim fakültesinde de olsanız, temel bilim de okusanız, işletmeci ya da malzeme mühendisi de olsanız, her daim alanınızla ilgili projeler yapabilir, kendinizi hem içsel olarak geliştirebilir, hem de başvuru sırasında farkınızı ortaya rahat bir şekilde koyabilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f10d&quot; name=&quot;f10d&quot;&gt;
      Başlamadan önce, bazı noktaları netleştirelim.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Proje demek, ürün demektir. Karşınızdakine gösterebileceğiniz bir emek demektir.
      &lt;&#x2F;strong&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       Bu yazıları yazdığım blog da bir projedir, instagram sayfası da bir projedir, kısa bir makale de bir projedir, sonuçlarını ortaya koyduğunuz bir anket de bir projedir…
      &lt;&#x2F;em&gt;
      Örnekler uzatılır, ancak en temelde anlamanız gereken şey proje derken bahsettiğim şeyin endüstriyel bir ürün olmaması. Kimse sizden kullanıcı dostu bilgisayar programları yazmanızı, antropolojik kitaplar yazmanızı beklemiyor, beklemeyecek.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önemli olan, eğitimizin, karakterinizin ve yeteneklerinizin bir karışımını ortaya belli bir emek sonucunda düşerek, onları somutlaştırmanız.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dd4e&quot; name=&quot;dd4e&quot;&gt;
      Örnek verecek olursam, her makine mühendisinin özgeçmişinde CAD(Computer Aided Design — Bilgisayar Yardımıyla Tasarım) araçlarından birisi bulunur, SolidWorks, AutoCAD, Siemens NX vb… Her makine mühendisi çizim dersi almıştır, peki çizim yapacak birisini ararken şirket kimi seçmelidir? Çizim dersinden aldığı notlara bakılabilir, ancak 2. sınıfta alınan bir ders mezun birisinin bilgisine dair yeterli bilgiyi sağlamaz, dersten geçme notunun bilgiyi kesinkes göstermediği de elbet açıktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;aaff&quot; name=&quot;aaff&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu durumda, bu programlarla yapılmış küçük de olsa bir çiziminiz varsa ve bunu özgeçmişinize eklerseniz, diğer tüm adaylarda bu eksik olduğundan dolayı, çok rahat bir şekilde öne geçebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;adda&quot; name=&quot;adda&quot;&gt;
      Bir bilgisayar mühendisi olarak, insanlara proje yapmalarını tavsiye ettiğimde genelde ilk aldığım tepki “Ama o iş sizde çok kolay, bizde öyle olmuyor.” oluyor, yukarıdaki örneği vermemin asıl sebebi de buydu.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Hangi fakültede, hangi bölümde olursanız olun, proje yapabilirsiniz, yapmalısınız.
      &lt;&#x2F;strong&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       İlerde üzerine kendinizi geliştirmek istediğiniz alana dair oyuncak projeler üzerinde çalışıp, küçük de olsa çeşitli projeler yaparak işe alım şansınızı katlarca arttırabilirsiniz.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fb9f&quot; name=&quot;fb9f&quot;&gt;
      Burada kastettiğimi en iyi anlayacak olanlar, mimarlık fakültesi öğrencileri olacaktır. Tüm okul hayatları kendilerine portfolyo hazırlamakla geçer, başvurularda da yine o portfolyoyu kullanırlar.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;cc42&quot; name=&quot;cc42&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Her zaman, her yerde, her durumda, bakın ben bunu yaptım diyerek bir ürün göstermek, ben şunu yapmayı biliyorum demekten daha iyidir.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--blockquote&quot; id=&quot;236e&quot; name=&quot;236e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;732&quot; data-image-id=&quot;1*c0pPPOF_mEOK0IrAXGCETg.png&quot; data-width=&quot;1302&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*c0pPPOF_mEOK0IrAXGCETg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;18e0&quot; name=&quot;18e0&quot;&gt;
      Küçük bazı örneklerle edelim, sonrasında proje oluşturmak için genel bir metodoloji sağlayıp projeler başka nerelerde yararlı olabilir onlardan bahsetmek istiyorum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;2f7d&quot; name=&quot;2f7d&quot;&gt;
      Örnek#1: Elektrik-Elektronik Mühendisliği
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;56aa&quot; name=&quot;56aa&quot;&gt;
      Basit bir akıllı ev projesi. Bir adet internet modülü ve röle kullanarak uzaktan kontrol edebileceğiniz bir priz yapabilirsiniz. Su ısıtıcısının siz eve gelmeden 5 dakika önce çalışması, ya da eve gelmeden yarım saat önce kombiyi uzaktan açmak gibi çeşitli projeleri deneyebilirsiniz. Basitten başlayın, tehlikeli şeylerden uzak durun, ilk denemeleriniz her zaman en en basit noktalarda olsun, örnek veriyorum LED ışık yakmaya çalışın, başarılı oldukça sonraki aşamalara geçebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;9b4c&quot; name=&quot;9b4c&quot;&gt;
      Örnek#2: Fen Bilgisi Öğretmenliği
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2556&quot; name=&quot;2556&quot;&gt;
      Fen bilgisi öğretmenliği bir kenara, genel olarak öğretmenlik hakkında bir fikrim olduğunu iddia etmek çok büyük bir iddia olur. Basitçe kendi aklıma gelen bazı fikirlerden bahsedeceğim sadece. Sevdiğiniz bir konuda basit bir ders materyali(ders notları, quizler, denemeler, ders videoları, ders projeleri…) hazırlayıp, bunu Udemy gibi bir platform üzerinden sunabilir, hem kendinizi bir eğitmen olarak geliştirip, hem de öğretim yeteneklerinize dair mezun olmadan bir gösterim yapmış olursunuz. Mesela ben şu an, kendi verdiğim özel ders materyallerini toplu bir hale getirip, bunları daha paylaşılabilir ve anlaşılabilir bir hale getirip ortaya koymayı planlıyorum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;de97&quot; name=&quot;de97&quot;&gt;
      Örnek#3: Sosyoloji
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;2dac&quot; name=&quot;2dac&quot;&gt;
      Derslerde ilginizi çeken basit bir teoriyi kendi çapınızda test etmeye çalışabilirsiniz. Yine sosyolojiden de çok uzak olduğum için, verdiğim örnek basit veyahut absürt kaçarsa özrünüzü diliyorum. Barnum&#x2F;Forer Etkisi olarak nitelendirilen ve genelde astrolojinin yalanlanması hususunda bahsi geçen bir fenomen mevcut. Şahıslar belli bir kişisel özellik kümesini duyduklarında, aslında verilen bilgiler genele uymasına rağmen, o özelliklerin kendilerini tasvir ettiğine inanmayı tercih ediyorlar. Bu konuda kendi çevreniz üzerinde basit bir deney tasarlayabilirsiniz. Bu küçük bir çevrimiçi anket olabilir, veya kendiniz yüz yüze sorabilirsiniz. Aldığınız cevapları notlandırıp, bunlar üzerinden çıkarabileceğiniz sonuçlara dair basit bir rapor hazırlayıp, bunu halka açık şekilde paylaşabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;c5dd&quot; name=&quot;c5dd&quot;&gt;
      Örnek#4: Akademik Projeler
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;44ea&quot; name=&quot;44ea&quot;&gt;
      Özellikle 3–4. sınıf derslerinden itibaren, daha günümüze yakın konularla ilgileniyoruz, bu da daha yakın tarihli makalelerle, kitaplarla ve teorilerle ilgilenmemize sebep oluyor. Bu fikirlerden birisi ilginizi çekiyorsa, o konuda daha çok okumalar yapabilir, belki bir lisans araştırmasına katılabilir, belki de bağımsız bir şekilde kendinizi geliştirebilirsiniz. Okuduğunuz makaledeki deneyleri tekrarlayabilir, onları daha geliştirebilirsiniz. Bu geliştirdiğiniz halini artık akademik bir makale olarak ortaya koymanız, bir konferansa göndermeniz mümkün olacaktır. İlginizi çekmesi haline karşın aşağıya lisans araştırmalarından bahsettiğim yazımı bırakıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;68ef&quot; name=&quot;68ef&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Lisans Araştırmaları: Giriş Rehberi
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Bu yazıya küçük bir dipnotla başlamak iyi olacaktır diye düşünüyorum. Elbette ki kendime bir araştırmacı diyecek…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;4b8f7de82e38aff323239e698911e0ff&quot; data-thumbnail-img-id=&quot;1*tnQJtvXmetzuAesza8eqww.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*tnQJtvXmetzuAesza8eqww.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--mixtapeEmbed&quot; id=&quot;82c6&quot; name=&quot;82c6&quot;&gt;
      Proje Nasıl Yapılır?
     &lt;&#x2F;h3&gt;
     &lt;ol class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--h3&quot; id=&quot;8384&quot; name=&quot;8384&quot;&gt;
       Alanınızda sevdiğiniz bir konu belirleyin, dersini aldığınız, alacağınız, almak istediğiniz, üstüne staj yapmak istediğiniz herhangi bir alan olabilir.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ebf8&quot; name=&quot;ebf8&quot;&gt;
       O konudaki derslerin ödevlerine&#x2F;projelerine bakın, endüstriyel ölçekte o alanda ne tip işlerin yapıldığını inceleyin.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;20ec&quot; name=&quot;20ec&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Hemen bir fikre atlamayın,
       &lt;&#x2F;strong&gt;
       hoşunuza giden 4–5 farklı fikir çıkarın, arkadaşlarınızla konuşun, çevrenizden fikir alın. Bu fikirlerden bir tanesini seçin.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;389e&quot; name=&quot;389e&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Ne seçtiyseniz, problemi basitleştirin, ilk ele aldığınız fikir yüksek ihtimalle yutabileceğinizden büyük olacaktır.
       &lt;&#x2F;strong&gt;
       Projede takıldığınız pek çok nokta olacak, bunların motivasyonunuzu kırmaması için küçük parçalar seçip onlara odaklanmak daha iyidir. Örneğin, elektrik mühendisliği öğrencisi olarak akıllı priz yapmak istiyorsanız, önce internet kullanarak bir devreyle haberleşin. Bu mini-projeyi bitirdiğinizde, sonraki adımlardan devam edebilirsiniz.
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Küçük başarılar, büyük başarısızlıklardan daha iyidir.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;95f7&quot; name=&quot;95f7&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Başlayın. Haftalarınızı planlamaya ayırmayın, şu geçsin de başlayayım demeyin, bahaneler uydurmayın, başlayın. Motivasyonlarınız çoğu zaman aşırı kırılgan olacak, pes etmek için yer arıyor olacaksınız, etmeyin.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;e25f&quot; name=&quot;e25f&quot;&gt;
       Ne kadar düzensiz bir insan olursanız olun, belli bir düzende çalışın. Gerekirse kendinize minimum bir çalışma saati belirleyin, gerekirse son teslim tarihleri belirleyin, ama bunları yaparken
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        her zaman önce kendinize bir hedef koyun, sonrasında hedefinizi yarıya indirin.
       &lt;&#x2F;strong&gt;
       Projeyi 8 günde bitirmeyi düşünüyorsanız, 16 yapın. Haftalık 10 saat çalışmak istiyorsanız, ona 5 deyin.
       &lt;em class=&quot;markup--em markup--li-em&quot;&gt;
        İlk düşünceleriniz her zaman abartılı olacaktır.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;153c&quot; name=&quot;153c&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Anlatın. İnsanlara anlatın, konuşun, fikir alın.
       &lt;&#x2F;strong&gt;
       Yeri geldiğinde güveninizi kıracaklar da olacaktır elbet, ama çoğu zaman anlatmak şevkinizin yerinde kalmasını sağlar. İnsanlarla konuştukça projeye daha çok bağlanacak, daha çok seveceksiniz, daha çok uğraşmak isteyeceksiniz,
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        elinizden geldiğince projeniz hakkında bağıra çağıra konuşun.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ol&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;1639&quot; name=&quot;1639&quot;&gt;
      Yarışmalar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3383&quot; name=&quot;3383&quot;&gt;
      Projeyi yaptıktan sonra, sadece iş ve yüksek lisans başvurularında kullanmayacaksınız elbette. Her gün pek çok farklı konuda pek çok farklı yarışma düzenleniyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Projeniz ne kadar iddialı ise, üzerinde ne kadar çok çalışırsanız, o kadar çok yarışmaya katılabilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c2e4&quot; name=&quot;c2e4&quot;&gt;
      Fikir üzerine kurulu Ideathonlar, kodlama üzerine kurulu Hackathonlar, veri bilimi için Kaggle yarışmalarının yanı sıra, eğer bahsettiğim gibi akademik bir proje yapıyorsanız bölümünüzdeki hocalarınızla da görüşüp daha düşük profilli bir konferansa gönderip
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       lisans döneminde yayınlanmış bir makaleye sahip olma onuruna kavuşabilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;15ec&quot; name=&quot;15ec&quot;&gt;
      Bu tarz yarışmalar için okulunuzdaki öğrenci toplulukları sayfalarını takip edin, onlar partnerlerinden aldıkları pek çok ilanı oralarda paylaşacaktır, aynı şekilde “Mühendislik Yarışmaları” tarzında farklı instagram&#x2F;linkedin sayfalarında da bu yarışmalara dair fikirler bulabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;177d&quot; name=&quot;177d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;467&quot; data-image-id=&quot;1*PzhWZ-dItDEXSELQ_dCdlg.jpeg&quot; data-width=&quot;1400&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*PzhWZ-dItDEXSELQ_dCdlg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;6069&quot; name=&quot;6069&quot;&gt;
      Bitiş
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2d8e&quot; name=&quot;2d8e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ne olursa olsun, korkmayın. Deneyin, başarısız olsun. Başarısızlık kötü bir şey değildir, utanılacak bir şey hiç değildir.
      &lt;&#x2F;strong&gt;
      Başaramadığınız projelerinizi de özgeçmişinize koyabilirsiniz, mülakatlarda bahsedebilirsiniz, bahsetmiyor bile olsanız, o projelerle uğraşırken öğrendiğiniz tecrübelerinizi hayatınızda kullanmayacağınızı düşünmek, en basit tabiriyle saflık olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;e9a8&quot; name=&quot;e9a8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önceki yazılarda da bahsettiğim gibi, son zamanlarda amatör bir şekilde özgeçmiş&#x2F;niyet mektubu hazırlama konusunda kendimi finansal olarak desteklemek için danışmanlık yapıyorum uygun ücretlerle, eğer ilgileniyor iseniz veyahut başka türlü sorularınız için de benimle alpkeles99@gmail.com üzerinden iletişime geçebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5a71d007280e&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-02-07T11:15:13.808Z&quot;&gt;
     February 7, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;staj-rehberi-3-projeler-5a71d007280e&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Staj Rehberi#2 — Niyet Mektubu</title>
        <published>2021-02-02T00:00:00+00:00</published>
        <updated>2021-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/staj-rehberi2niyet-mektubu/"/>
        <id>https://alperenkeles.com/posts/staj-rehberi2niyet-mektubu/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/staj-rehberi2niyet-mektubu/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;6928&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;108b&quot; name=&quot;108b&quot;&gt;
      Staj Rehberi#2 — Niyet Mektubu
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b51e&quot; name=&quot;b51e&quot;&gt;
      Bu yazıya başlamadan önce, konu hakkındaki Youtube videomu da izlemek isteyebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;4ead&quot; name=&quot;4ead&quot;&gt;
      &lt;iframe frameborder=&quot;0&quot; height=&quot;393&quot; scrolling=&quot;no&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;nXiZHCdwHrU?feature=oembed&quot; width=&quot;700&quot;&gt;
      &lt;&#x2F;iframe&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b706&quot; name=&quot;b706&quot;&gt;
      İnternette hızlı bir arama, özgeçmişle ilgili dağınık da olsa pek çok kaynağa ulaşım sağlıyor. Gerekirse yeterli bir arama sonucunda iyi özgeçmiş şablonları bulmak, bunlar üzerinden önerilere göre özgeçmiş hazırlamak mümkün.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b35e&quot; name=&quot;b35e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1250&quot; data-image-id=&quot;1*5eYQvVBLpWWidbguGlmGcg.png&quot; data-width=&quot;2000&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*5eYQvVBLpWWidbguGlmGcg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;d149&quot; name=&quot;d149&quot;&gt;
      Ancak özellikle akademik stajlarda veyahut yurtdışı stajlarında istenen, hakkında bilgi çok daha az olan niyet mektupları başvuruların en sancılı noktalarından bir tanesi.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bazılarımız yazmıyoruz, yazarsak da yanlış yazıyoruz, yetersiz yazıyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f57d&quot; name=&quot;f57d&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazıda, genel olarak bir niyet mektubunun ne olduğundan, ne durumlarda önemli olduğundan, içeriğini tasarlarken nelere dikkat etmemiz gerektiğinden bahsedeceğim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6c6b&quot; name=&quot;6c6b&quot;&gt;
      Başlamadan önce, eğer konuyla ilgili bir özgeçmiş hazırlamanın önemli noktalarından bahsettiğim aşağıdaki yazımı okumadıysanız, tavsiye ederim.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;c218&quot; name=&quot;c218&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Staj Rehberi#1 — Özgeçmiş Hazırlama
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Hayal edin, hedefiniz olan şirkette bir insan kaynakları çalışanı olarak yer alıyorsunuz. Staj başvuru döneminin…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;e6b765db2b04bf39191d4639b6f5a174&quot; data-thumbnail-img-id=&quot;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*9MEJAHWPaiydFjVll90X3w.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;481d&quot; name=&quot;481d&quot;&gt;
      Niyet mektubunun yanı sıra, bir “cover mail” nasıl atılır bu yazıda biraz ondan da bahsetmeye çalışacağım. Şirketle veyahut hocayla iletişime geçilecek olan ilk mail,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       başvuruların en önemli kısımlarından birisidir, kendi içinde kısa bir niyet mektubu görevi görür, yeterince ilgi çekici ve bilgilendirici olmalı, aşırı detaya girmeden okuyanın cevaplamak isteyeceği bir mail olmalıdır.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7563&quot; name=&quot;7563&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;395&quot; data-image-id=&quot;1*jXBAAoAx4cNl22JP1sE5vg.jpeg&quot; data-width=&quot;700&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*jXBAAoAx4cNl22JP1sE5vg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;1af6&quot; name=&quot;1af6&quot;&gt;
      Şimdi sizin aklınızda iki soru var. Niyet mektubu nedir, nasıl yazılır?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9029&quot; name=&quot;9029&quot;&gt;
      Niyet mektubu, başvurunuz esnasında kendinizi insanlaştırmanızı, başvurudaki ve özgeçmişinizdeki bilgileri belli bir bağlam içerisine yerleştirmenizi sağlar. Özgeçmişinizi inceleyen kişi, mektubunuzu okuduğunda sizle belli bir bağ kurma, bu bağın sonucunda sizi bir istatistikten ziyade siz olarak görebilme şansını yakalar.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       İyi bir mektup sayesinde, düşük bir ortalamanın veyahut akademik geçmişinizdeki eksiklerin etkisi azaltabilir, kabul alma şansınızı arttırabilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;982c&quot; name=&quot;982c&quot;&gt;
      Maalesef ki, akademik başvurularda çok daha ciddiye alınmakla birlikte, pek çok şirket staj başvurularında niyet mektubunu istememekte ya da zorunlu tutmamakta. Bunun sonucunda, gözlemlediğim kadarıyla bu mektuplar çok ciddiye alınmıyor, sonucu aşırı etkilemiyor. Ancak içinde bulunduğumuz yarışta her geçen gün sınırlar daha yukarıya çıkarken, an itibariyle aşırı önemli bir konumda olmasa da gelecekte niyet mektubunun daha önemli olacağını görmek zor değil.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Her geçen yıl rekabet artıyor, başarının sınırları tekrardan belirleniyor, belli bir zaman sonra şahsi fikrimce niyet mektupları başvurularda çok daha önemli yer kaplayacak, belki de kaplamaya başladı.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e190&quot; name=&quot;e190&quot;&gt;
      Niyet mektubunda bahsetmeniz gerekenler, sizin kim olduğunuz, motivasyonlarınız, yetenekleriniz ve donanımlarınız, başvurduğunuz şirket&#x2F;okul&#x2F;hoca ile neden uyumlu olacağınızı düşündüğünüz, bu fırsatın neden sizin için önemli olduğu… Bu bilgilerin hepsini, mümkün olduğunca kısa ve öz bir şekilde karşı taraftaki kişiye hem sizle empati kurmasını sağlayacak, size karşı bir sempati oluşturacak, eksiklerinizi değerlendirenin gözünde kapatacak, sizi şirkete aldırmak isteyecek şekilde vermelisiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;09df&quot; name=&quot;09df&quot;&gt;
      Başta söylediğim gibi, pek çok kişi başvurularda niyet mektubu yazmamayı tercih ediyor, bunun sebebini şu ana kadar anladığınızı tahmin ediyorum, bu süreç hem yorucu, hem de yeri geldiğinde yıpratıcı bir süreç.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Özgeçmiş hazırlamak gibi var olan bilgileri güzel bir formatta yerleştirip sunmak yetmiyor, bir anlatıma, bir duygusallığa da ihtiyaç var, karşılıklı iletişimin çok daha güçlü olduğu bir başvuru formu aslında niyet mektubu.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;34bc&quot; name=&quot;34bc&quot;&gt;
      Yazılan mektuplarda en sık yapılan hata ise, mektupları genele hitap edecek şekilde yazmak.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Yüzlerce şirkete başvurmak, başvuruların tamamı neredeyse aynı olduğunda çok kolay hale geliyor.
      &lt;&#x2F;strong&gt;
      Aşırı detaylı başvuru sistemleri&#x2F;formları olmadığı sürece, pek çok başvuru on dakikadan daha kısa bir sürede bitebiliyor, ancak her şirkete ayrı bir niyet mektubu yazmaya kalksa idik, başvuruları kesinlikle bitiremezdik.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Dolayısıyla genele hitap edecek tek bir mektup yazıp, bazen ad bile koymayarak her yere göndermeye çalışıyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e7ac&quot; name=&quot;e7ac&quot;&gt;
      Buradaki problem ise, yeteneğin işe alımdaki tek etken olmaması, motivasyon belki yetenek ve tecrübe kadar, belki de daha büyük bir etken.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       İşini seven bir insan yeterince çalışırsa öğrenebilir, fakat işini sevmeyen birisi kağıt üstünde çok iyi olsa da yeterli başarıyı gösteremeyecektir.
      &lt;&#x2F;strong&gt;
      Dolayısıyla mektuplarda başvurduğunuz yere dair spesifik motivasyonlarınızın yer alması, kabul alma şansınızı onlarca kat arttıracaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;951c&quot; name=&quot;951c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Tabii ki her şirkete özel ayrı ayrı yüz tane mektup hazırlamayacaksınız.
      &lt;&#x2F;strong&gt;
      Her başvuruda niyet mektubu yazmaya tabii ki gerek yok. Aynı şekilde, tüm mektubu değiştirmeye de gerek yok.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Size birazdan aşağıda sunacağım genel şemada şirket&#x2F;okul&#x2F;hoca’ya özel olan kısımları yalnızca gerçekten özel olarak motivasyonlarınızı ifade edebileceğiniz başvurularınızda yenileyip, onlara gönderebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;15e9&quot; name=&quot;15e9&quot;&gt;
      Hemen aşağıda, bir niyet mektubunun genel yapısını veriyorum.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;15df&quot; name=&quot;15df&quot;&gt;
      Sayın X Şirketi,
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;7ce4&quot; name=&quot;7ce4&quot;&gt;
      Ben Alperen Keleş, ODTÜ Bilgisayar Mühendisliği 4. sınıf öğrencisiyim. Şirketinizde Y konusunda yaz stajyeri olarak yer almak isterim.
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;a3d2&quot; name=&quot;a3d2&quot;&gt;
      Öncelikle size biraz kendimden bahsedeyim. ____________________________
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;3705&quot; name=&quot;3705&quot;&gt;
      ________________________________________________________________________________________________________________________________________________________________________________________________________.
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;86d6&quot; name=&quot;86d6&quot;&gt;
      Y konusuyla daha önceden ___________________________________________ şeklinde ilgim oluştu, ________________________________________________ şekilde tecrübelerim mevcut.
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;2423&quot; name=&quot;2423&quot;&gt;
      Şirketinizle ilgili _________________________________________ şeklinde bilgim mevcut, Y konusundaki Z bölümünüzün A, B, C projelerinizi _________
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;2a37&quot; name=&quot;2a37&quot;&gt;
      _____________________________ sebeplerinden dolayı beğeniyorum, bu projelerde yer almayı çok isterim.
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;7a80&quot; name=&quot;7a80&quot;&gt;
      Saygılarımla,
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;6cad&quot; name=&quot;6cad&quot;&gt;
      Alperen Keleş
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;26bd&quot; name=&quot;26bd&quot;&gt;
      Tabii ki kendinize göre özelleştireceğiniz bu genel altyapı, pek çok niyet mektubunda görebileceğiniz bir temele dayanıyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Kendinizi tanıttıktan sonra, motivasyonlarınızdan ve arka planınızdan bahsetmeli, başvurunuzun sebebini açıklamalısınız.
      &lt;&#x2F;strong&gt;
      Başvuru motivasyonlarınız okuyan kişi için önemli olmakla birlikte, sizin başvurunuzun diğer başvuruların yanında farklı bir şekilde durabilmesine yardımcı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;50ea&quot; name=&quot;50ea&quot;&gt;
      Aşağıda benim 2. sınıfta bir yaz stajı için yazdığım bir niyet mektubunu sizle paylaşacağım, bu mektup, genel altyapı itibariyle o zaman da beğenilmesine rağmen,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       en büyük problemi başvurduğum okulla ilgili yeterli detaya ve ilgiye sahip olmaması, aşırı genel yazılmasıydı,
      &lt;&#x2F;strong&gt;
      nitekim bu mektup sonucunda mülakata dahil alınmadım. Ancak nereden başlayacağını bilemeyenlere bir giriş olması amacıyla yine aşağıda iletiyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;93c7&quot; name=&quot;93c7&quot;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9944&quot; name=&quot;9944&quot;&gt;
      Doktora başvurularım daha sonuçlanmadığı için maalesef bu yıl doktora için yazdığım niyet mektuplarını paylaşamıyorum, ancak sonuçlar geldikten sonraki süreçte onları da bu yazıya ekliyor olacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5629&quot; name=&quot;5629&quot;&gt;
      Niyet mektupları, genel olarak aşırı öznel yapılar olup, kişiden kişiye nasıl yazılacağı, nelerin yazılacağı değişiyor, aynı şekilde okuyanın da beklentileri çok farklı oluyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Dolayısıyla kendinizi en iyi şekilde nasıl tanımlayacağını düşünürseniz, o şekilde bir mektup yazmanız en iyisi olur.
      &lt;&#x2F;strong&gt;
      Ben yine de, MIT Admission Blog üzerinde yüksek lisans başvuru mektupları için verilmiş olan bir şemayı sizle paylaşacağım, belki benim verdiğim şemanın üstüne biraz daha netleştirme şansı bulmuş olursunuz kafanızdaki sistemi.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;11af&quot; name=&quot;11af&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot; href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot; title=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Not in my own words. | MIT Admissions
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Between June 1st and today, I have: written 5 versions of my medical school personal statement completed two separate…
       &lt;&#x2F;em&gt;
       mitadmissions.org
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;16f897ac91db9c8a7a6a774e3afb35ef&quot; data-thumbnail-img-id=&quot;0*yl4xM2UH_24TL-oC&quot; href=&quot;https:&#x2F;&#x2F;mitadmissions.org&#x2F;blogs&#x2F;entry&#x2F;not-in-my-own-words&#x2F;&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;0*yl4xM2UH_24TL-oC);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;7d12&quot; name=&quot;7d12&quot;&gt;
      Yukarıdaki linkte, şu şekilde bir paragraf geçiyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;0eff&quot; name=&quot;0eff&quot;&gt;
      Here’s an organization I would recommend: (1) passionate hook; (2) segué to your background in the field; (3) specific classes by title and professors you have had (especially if well-known in the field); (4) related extracurricular activities (especially if they hint at some personal quality you want to convey); (5) any publications or other professional accomplishments in the field (perhaps conference presentations or public readings); (6) explanations about problems in your background (if needed); and (7) why you have chosen this grad school (name one or two professors and what you know of their specific areas or some feature of the program which specifically attracts you).
     &lt;&#x2F;blockquote&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--blockquote&quot; id=&quot;7838&quot; name=&quot;7838&quot;&gt;
       İlginç Giriş
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4dcc&quot; name=&quot;4dcc&quot;&gt;
       Alandaki arka plan bilgisi
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a86a&quot; name=&quot;a86a&quot;&gt;
       Aldığınız dersler ve bu dersleri aldığınız(özellikle alanında biliniyorsa) hocalar
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3409&quot; name=&quot;3409&quot;&gt;
       Alakalı ders dışı aktiviteler
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ce06&quot; name=&quot;ce06&quot;&gt;
       Makaleler, ödüller, profesyonel başarılar
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9a92&quot; name=&quot;9a92&quot;&gt;
       Arka planınızdaki problemler(boşluklar, kötü kısımlar) ile ilgili açıklamalar
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3bce&quot; name=&quot;3bce&quot;&gt;
       Neden bu okulu seçtiğiniz
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;a830&quot; name=&quot;a830&quot;&gt;
      Ben kendi mektuplarımı hazırlarken, bu şemadan yararlanmıştım, yukarda verdiğim şablon da bu şemanın basitleştirilmiş bir hali idi aslında.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;7033&quot; name=&quot;7033&quot;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;b708&quot; name=&quot;b708&quot;&gt;
      Aynı şekilde, yukarıdaki dosyada size bir mektubu yazarken kullanabileceğiniz bir metodoloji sağlanıyor, taslaklar, kendinize sormanız gereken sorularla ilgili. Bu konuda detaya girmeyeceğim, ilgili iseniz okumanızı tavsiye ederim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;698e&quot; name=&quot;698e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;538&quot; data-image-id=&quot;1*fuZiiApXaaxpgfjMzo5koA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1024&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*fuZiiApXaaxpgfjMzo5koA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;50c7&quot; name=&quot;50c7&quot;&gt;
      E Peki Niyet Maili Nedir?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;929e&quot; name=&quot;929e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Eğer resmi başvuru kanalları yerine, özel bir şekilde maille başvuruyorsanız, o zaman ilk yazdığınız mailin dikkate alınması için özel çaba göstermeniz gerekli.
      &lt;&#x2F;strong&gt;
      Maili yazarken, yine niyet mektubunda verdiğim şablonu kullanabilirsiniz, ancak dikkat etmeniz gereken şey bir mailin yarım sayfayı geçmemesi gerektiği.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;af2a&quot; name=&quot;af2a&quot;&gt;
      Mailinize özgeçmişinizi ve niyet mektubunuzu da eklediğinize, göndermeye hazırsınız demektir. İlk önce niyet mektubunuzu yazıp, sonrasında ondan detayları çıkarıp, o şekilde bir mail hazırlayabilirsiniz. Okuyucuyu sıkmadığınızdan, detaylara boğmadığınızdan emin olun, mümkün olduğunca kısa ve öz bir şekilde derdinizi açıklamaya çalışın.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;83b0&quot; name=&quot;83b0&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Yazdığınız mailin, kişiyle sizin aranızdaki ilk iletişim olduğunu, ilk izlenimlerin ikili iletişimde en önemli noktalardan birisi olduğunu unutmayın.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5dfc&quot; name=&quot;5dfc&quot;&gt;
      Bitiş
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;1d9d&quot; name=&quot;1d9d&quot;&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       Başlangıcında planladığım gibi bir yazı olmadı, yazarken birden fazla kez karar değiştirdim ne yazacağım ile ilgili, dolayısıyla yazıda anlamsal kopukluklar olma ihtimali var, bunun için sizden özür diliyorum
      &lt;&#x2F;em&gt;
      . Özgeçmiş yazısında da bahsettiğim gibi,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       gerek yurt dışı gerek yurt içi başvurularda niyet mektupları ve özgeçmişlerin düzenlenmesi, yorumlanması ve hazırlanması üzerine amatör bir danışmanlık hizmeti başlattım. Eğer ilgilenirseniz, veyahut başka herhangi bir sorunuz var ise, benimle alpkeles99@gmail.com üzerinden iletişime geçebilirsiniz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;461ee76e974b&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-02-03T02:19:06.223Z&quot;&gt;
     February 3, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;staj-rehberi-2-niyet-mektubu-461ee76e974b&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Staj Rehberi#1 —  Özgeçmiş Hazırlama</title>
        <published>2021-01-29T00:00:00+00:00</published>
        <updated>2021-01-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/staj-rehberi1-ozgecmis-hazirlama/"/>
        <id>https://alperenkeles.com/posts/staj-rehberi1-ozgecmis-hazirlama/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/staj-rehberi1-ozgecmis-hazirlama/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;0ca3&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;063c&quot; name=&quot;063c&quot;&gt;
      Staj Rehberi#1 — Özgeçmiş Hazırlama
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;032a&quot; name=&quot;032a&quot;&gt;
      Hayal edin, hedefiniz olan şirkette bir insan kaynakları çalışanı olarak yer alıyorsunuz. Staj başvuru döneminin sonlarına doğru, her gün önünüzden onlarca, belki de yüzlerce başvurunun geçtiği haftalar geçiriyorsunuz. Başvuruların neredeyse %90&#x27;ı benzer şablonlarla, benzer kalıplarla, benzer klişelerle hazırlanmış.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Özgeçmişler benzer, alınan dersler aynı, niyet mektupları ezbere yazılmış.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;058b&quot; name=&quot;058b&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1200&quot; data-image-id=&quot;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;2888&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*9MEJAHWPaiydFjVll90X3w.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--hasDropCapModel graf-after--figure&quot; id=&quot;e369&quot; name=&quot;e369&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Neden kendinizi işe almalısınız?
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;a2e0&quot; name=&quot;a2e0&quot;&gt;
      Bu süreci, bir oyun gibi düşünmelisiniz. Şirket de, siz de, diğer adaylarda da bu oyunda oyuncular, herkes kendi faydasını yükseltmeye çalışıyor.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Herhangi bir oyunu kazanmanın en iyi yolu, rakiplerinizi tanımak, onları anlamaktır.
      &lt;&#x2F;strong&gt;
      Diğer adayların başvurularında ne düşündüğünü anlamalı, aynı zamanda işe alımdan sorumlu kişinin düşüncelerini de yakalamalı, bu noktada kendinizi diğer adayların üstüne nasıl atabileceğinizi çözmelisiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fc40&quot; name=&quot;fc40&quot;&gt;
      Şanslısınız ki, bunları ilk yaşayan siz değilsiniz, son yaşayan da siz olmayacaksınız, o yüzden tekerleği sıfırdan keşfetmenize de gerek yok.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ben bu yazıda, özgeçmişinizi ve niyet mektubunuzu gören bir işe alım sorumlusunun düşüncelerine ışık tutmaya çalışıp, sizlere şansınızı arttırmak için neler yapabileceğinize dair tüyolar vermeye çalışacağım.
      &lt;&#x2F;strong&gt;
      Elbette her genelleme gibi, benim söyleyeceklerim de pek çok noktada yanlış olabilir, olacaktır da. Bu yazıdan alabileceğiniz en iyi sonuç, buradaki analizleri kendi tecrübeleriniz ve öğrendiklerinizle harmanlayıp, kendinize mümkün olduğunca fazla şey katmanız olacaktır.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b135&quot; name=&quot;b135&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;212&quot; data-image-id=&quot;1*iDVuTsf7mA8OFhhnsQnD8A.png&quot; data-width=&quot;1222&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*iDVuTsf7mA8OFhhnsQnD8A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;a07e&quot; name=&quot;a07e&quot;&gt;
      Nasıl Bir Özgeçmiş Yazmalıyız?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;db96&quot; name=&quot;db96&quot;&gt;
      Özgeçmişin biçimi konusunda yılları aşan, resimli&#x2F;resimsiz, renkli&#x2F;renksiz gibi tartışmalar mevcut, ben bu tartışmalardan elimden geldiğince kaçınacağım. Sonuçları tamamen başvuruyu inceleyen şirket&#x2F;birim&#x2F;kişi ye bağlı olduğundan, bu tarz konularda şirketten birilerine ulaşmanızın en doğru yöntem olduğunu söyleyebilirim sadece, en iyi bilgiye onlar sahip olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8a70&quot; name=&quot;8a70&quot;&gt;
      Benim bahsedeceğim konular çok daha somut ve ölçülebilir olacak, çeşitli özgeçmiş bölümlerinin öneminden, beklentilerden bahsedeceğim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cf5d&quot; name=&quot;cf5d&quot;&gt;
      Öncelikle çok önemli bir düstur ile işe başlayalım. Elinizdeki kağıt, sizin tuvaliniz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Nasıl bir ressam tuvalin her bir arşını tek tek özenle çiziyor, her bir detay üzerine pür dikkat düşünüyorsa, siz de öyle düşünmelisiniz.
      &lt;&#x2F;strong&gt;
      Koyacağınız her şey, başvurunuza faydalı olmalı. Koymadığınız her eksik bilgi gibi, eklediğiniz her fazlalık da başvurunuza zarar verecektir.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Okuyan kişinin dikkatini önemli detaylara vermesini ne kadar çok sağlarsanız, kabul alma ihtimaliniz o kadar artar.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;b7b6&quot; name=&quot;b7b6&quot;&gt;
      Eğitim
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;cc79&quot; name=&quot;cc79&quot;&gt;
      Üniversite, Bölüm, Sınıf, Not Ortalaması dörtlüsü olmazsa olmazları. En sık yapılan hatalardan birisi okuyan kişinin sınıfı zaten bileceğini varsayıp unutmak, başvuruya zarar veren bir etken. Ortalamanız düşük diye eklememek ise, ortalamanın gerçekten orada düşük olarak bulunmasından çok daha kötü bir izlenim veriyor okuyana.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4bce&quot; name=&quot;4bce&quot;&gt;
      Bu noktada, şahsi tecrübelerime dayanarak lisenin başvuru sonuçlarına çok da etkisi olmadığını gördüm, baştaki düsturumuza dayanarak, lisenizi eklemenin faydasız(hatta zararlı) olduğunu söyleyebilirim.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;40cd&quot; name=&quot;40cd&quot;&gt;
      Staj&#x2F;İş
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;75fb&quot; name=&quot;75fb&quot;&gt;
      Projeler ile birlikte, staj&#x2F;iş tecrübeleri özgeçmişin en önemli yanları. Tecrübenizi mümkün olduğunca detaylı ve dürüst şekilde aktarmanız, kullandığınız metotlardan&#x2F;araçlardan bahsetmeniz sizin onları gerçekten bildiğinize güzel bir kanıt, yazabildiğiniz kadar detaylı yazmanızı tavsiye ederim. Çok uzatmadan, kısa ama öz bir şekilde tüm bilgileri aktarmak önemli, okuyanı da sıkmamak gerek.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;c316&quot; name=&quot;c316&quot;&gt;
      Proje
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;f6e4&quot; name=&quot;f6e4&quot;&gt;
      Projeler konusunda, tamamen ayrı bir “Proje Nasıl Yapılır” yazısı hazırlıyorum, proje yapmak belki de başvurunuzu tek başına zirveye taşıyabilecek bir etken. X programlama dilini biliyorum, Y programını biliyorum demek yerine, o dilde&#x2F;programda&#x2F;metotta bir proje yapmanız demek, sizin güvenilirliğinizi kat be kat arttıracaktır. Eğer bildiğinizi iddia ettiğiniz programlarla ilgili, olduğunu iddia ettiğiniz yeteneklerinizle ilgili sizi destekleyecek hiçbir kanıtınız yoksa, karşınızdaki insanı inandırmanız çok da mümkün olmayacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;eabb&quot; name=&quot;eabb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Proje yapın, yaptırın, küçük demeyin, büyük demeyin, başaramam demeyin, korkmayın, deneyin. Kısa üniversite hayatınızda kariyeriniz için yapabileceğiniz belki de en iyi şeyi yapmış olacaksınız.
      &lt;&#x2F;strong&gt;
      Hem çeşitli konularda tecrübeler edinecek, hem de kabul şansınızı katlarca arttırmış olacaksınız.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;2720&quot; name=&quot;2720&quot;&gt;
      Yetenekler
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;af1d&quot; name=&quot;af1d&quot;&gt;
      Projelerle birlikte de bahsettiğim gibi, bu kısmın maalesef başka kanıtlarla desteklenmediğinde çok da bir etkisi olmayacaktır.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Gördüğüm on özgeçmişin dokuzunda MS-Office görüyorum, kim gerçekten MS-Office in hangi programını kullanmayı biliyor, yıllardır çözebilmiş değilim.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9935&quot; name=&quot;9935&quot;&gt;
      Bir diğer nokta da, burada bahsettiğiniz yeteneklerin yine sizi diğer adayların üstüne çıkaracak şekilde olması. İlgisiz yetenekleri oraya koyarak işe alım sorumlusunun dikkatini dağıtmayın, önemli kısımları göz önünde tutun. Eğer çalıştığınız yerde MS-Office kullanılmayacaksa, bilseniz bile eklemenizin çok bir faydası olmaz.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;adbe&quot; name=&quot;adbe&quot;&gt;
      Hobi
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;c067&quot; name=&quot;c067&quot;&gt;
      Bu kısım, genelde sizi daha insanlaştıran, ders çalışan bir makineden fazlası olduğunu gösteren kısım. Ama buraya “okuma, spor yapma” gibi günümüzde hobi dahi sayılamayacak aktiviteler eklediğinizde, sizi insanlaştırmaktan ziyade daha da klişe bir hale getirip, başvurunuza zarar veriyor. Eğer gerçekten severek yaptığınız bir hobiniz yoksa, eklemeyin, kimse size bunu eklemediğiniz için kızmayacaktır, kağıdınızdan yer de harcamamış olursunuz.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;0dc3&quot; name=&quot;0dc3&quot;&gt;
      Gönüllülük&#x2F;Kulüp&#x2F;Topluluk
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4 graf--trailing&quot; id=&quot;fabd&quot; name=&quot;fabd&quot;&gt;
      Üniversitelerdeki kariyer kulüplerinin sizi inandırmak istediklerinin aksine, insanlar sizi topluluk kariyerleriniz yüzünden işe almazlar. Topluluklar kazandığınız tecrübeler tabii ki sizi sonraki yıllarda hayal dahi edemeyeceğiniz kadar etkileyebilir, geliştirebilir(ben şahsen yaşadım); ancak özgeçmişinizin odak noktasının topluluklar olması sizi çok da ileri atmayacaktır. Eğer varsa ekleyin, yaptıklarınızı da tabii ki koyun, çok önemli tecrübeler, ancak merkeziyette tutmayın.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;c190&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;039f&quot; name=&quot;039f&quot;&gt;
      En sonunda baktığınızda, özgeçmişiniz sizi özgüvenli, etkileyici şekilde sunan bir doküman olmalı.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Gereksiz gördüğünüz detayları elediğinizde ve önemli kısımları daha büyük, daha kalın, daha çarpıcı bir şekilde ortaya koyduğunuzda, hazırsınız demektir.
      &lt;&#x2F;strong&gt;
      Aşağıdaki linkte birisi akademik, diğeri daha şirketlere yönelik olacak şekilde iki özgeçmişimi bırakıyorum, tabii ki onlar da mükemmel değil, çok daha iyileştirilebilirler, ama belki size de fikir verebilir.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--p&quot; id=&quot;c78c&quot; name=&quot;c78c&quot;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Üniversiteler İçin Hazırlanmış Özgeçmiş(Güncel)
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;figure class=&quot;graf graf--figure graf--iframe graf-after--figure&quot; id=&quot;dd61&quot; name=&quot;dd61&quot;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Şirketler İçin Hazırlanmış Özgeçmiş(Güncel Değil)
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;420a&quot; name=&quot;420a&quot;&gt;
      Özgeçmişimizi Nasıl Yazmalıyız?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9049&quot; name=&quot;9049&quot;&gt;
      Özgeçmiş hazırlamak için, pek çok site ve pek çok metot var. Benim yukarıda gönderdiğim iki örnek de Latex üzerinden yazıldı, ancak yeni başlayanların Latex ile sıkıntı yaşayabileceklerini tahmin ettiğimden, aşağıda kısa bir liste veriyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;2cce&quot; name=&quot;2cce&quot;&gt;
       Microsoft Word(Hazır şablonlar mevcut, sıfırdan yazmayın)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;047d&quot; name=&quot;047d&quot;&gt;
       Canva
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3aeb&quot; name=&quot;3aeb&quot;&gt;
       Europass
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d2db&quot; name=&quot;d2db&quot;&gt;
       Kickresume(ve benzeri siteler, fiyatları gayet uygun)
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c217&quot; name=&quot;c217&quot;&gt;
       Latex
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li graf--trailing&quot; id=&quot;8552&quot; name=&quot;8552&quot;&gt;
      Pek çok alternatif mevcut, benim hiç duymadıklarım da vardır, ama yukarıdakileri incelerseniz en azından birinde kendinize uyacak bir şablon bulabileceğinizden eminim.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;decf&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading graf--trailing&quot; id=&quot;809f&quot; name=&quot;809f&quot;&gt;
      Aslında daha çok şey denebilir, çok daha detaya girilebilir. Ancak bir noktada şahsi ön yargılarımın olayın içine aşırı miktarda girebileceğini düşündüğümden dolayı, bu kadarının sizler için daha iyi bir özgeçmiş hazırlama yolunda yeterli olacağını düşünüyorum, umuyorum.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;b68a9b642994&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-01-29T22:09:02.594Z&quot;&gt;
     January 29, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;staj-rehberi-1-%C3%B6zge%C3%A7mi%C5%9F-haz%C4%B1rlama-b68a9b642994&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Ödediğimiz Bedeller Mi, Ödeyeceklerimiz Mi?</title>
        <published>2021-01-22T00:00:00+00:00</published>
        <updated>2021-01-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/odedigimiz-bedeller-mi-odeyeceklerimiz-mi/"/>
        <id>https://alperenkeles.com/posts/odedigimiz-bedeller-mi-odeyeceklerimiz-mi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/odedigimiz-bedeller-mi-odeyeceklerimiz-mi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;7ee7&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;a68a&quot; name=&quot;a68a&quot;&gt;
      Ödediğimiz Bedeller
                            Mi, Ödeyeceklerimiz Mi?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8305&quot; name=&quot;8305&quot;&gt;
      Bir hapishanedeyiz.
                            Beklentilerimizden, hedeflerimizden ve hayallerimizden örülmüş parmaklıkların ardında.
                            Verdiğimiz karar, attığımız adım, belki de aldığımız nefes bile bu beklentilerin
                            zincirleriyle belirleniyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;69e8&quot; name=&quot;69e8&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;442&quot; data-image-id=&quot;1*OHj7KFhEj06F4BgdF8-aOg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;626&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*OHj7KFhEj06F4BgdF8-aOg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e822&quot; name=&quot;e822&quot;&gt;
      Hepimizin hayatta mutluluğu
                            bulma yolu birbirinden farklı, bazılarımız sevgi arıyor, bazılarımız ilgi, bazılarımız
                            başarı. Peki nereden biliyoruz neyin bizi mutlu ettiğini, daha da önemlisi yanılıyorsak ne
                            olacak, yanıldığımızı fark ettiğimiz gün neler yaşayacağız?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b089&quot; name=&quot;b089&quot;&gt;
      Ben, beni neyin mutlu ettiğini hep
                            bildim, en azından bildiğimi düşünerek yaşadım. Her adımımı kendimden emin attım, her
                            basamakta hedeflerime bir adım daha yaklaştım. İnsanların bazıları kısa vade zevkler için
                            uzun vade hedeflerini çarçur eder, bazıları da uzun oyunu kazanabilmek için andan
                            uzaklaşırlar. Bunun dengesini bulmak, başarılı olurken hayatımı zevk alarak yaşayabilmek
                            için çabaladım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8d23&quot; name=&quot;8d23&quot;&gt;
      Ama zaman, hiçbir insanın
                            yenemeyeceği bir rakip. Yer yer, kısa vade mutluluklarımla uzun vade hedeflerim birbiriyle
                            çatışıyordu, çatışmak zorundaydı. Bu noktada ben bir bedel ödemek, bir fedakarlık yapmak
                            zorundaydım, hepimiz zorundayız. Bu yaptığım fedakarlıklar, beni çok uzun süre rahatsız
                            etmedi, ancak üniversite hayatımın neredeyse %30&#x27;unu yaşayamadığım şu günlerde,
                            kararlarımı sıkça sorguluyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c370&quot; name=&quot;c370&quot;&gt;
      Belki siz de benzer durumdasınızdır,
                            belki benim söylediklerim size ilham verir, belki de sizin söyleyecekleriniz bana ilham
                            verir diye yazıyorum bu yazıyı da.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;962a&quot; name=&quot;962a&quot;&gt;
      Bugün bir arkadaşım, akademik
                            durumundan memnun olmadığını, önümüzdeki dönem hayatındaki kalan her şeyi bir kenara bırakıp
                            sadece derslere odaklanmayı düşündüğünü söyledi. Bu benim bazen günlerce, bazen haftalarca
                            uyguladığım, uygulamak zorunda kaldığım bir yöntemken, kendimi buna güçlü bir şekilde karşı
                            çıkarken buldum. 20&#x27;lerimiz bir daha gelmiyor, gelmeyecek. En büyük düşmanımız, her
                            zamanki gibi, zaman. Bugünlerin dinamikliği, enerjisi, atmosferi, ortamı bir daha
                            gelmeyecek. Bir daha üniversite öğrencisi oluyor olmayacağız, olsak bile 20 yaşında çiçeği
                            burnunda bir genç olmayacağız. Hayatın bizden beklentileri olacak, ailemizin, toplumun
                            bizden beklentileri olacak, bizim kendimizden beklentimiz olacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;401a&quot; name=&quot;401a&quot;&gt;
      Üniversitenin kapısından çıktığımız
                            anda, 14 gün yıllık izinle sınırlandırıldığımız, 168 saatlik haftanın 45–50 saatini
                            verdiğimiz hummalı bir iş hayatına atılacağız. Bugünlerin dinamikliği, rahatlığı, konforu
                            bir daha bizi bulmayacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6ab9&quot; name=&quot;6ab9&quot;&gt;
      Ama, bu demek değil ki, sadece anı
                            umursayalım. Her şeyi bir kenara bırakıp eğlenelim, gezelim. Bugün geleceğimize yaptığımız
                            her adım, yarın yapacağımız bir adımdan daha önemli, daha güçlü, daha faydalı. Erken atılan
                            adımların etkisi daha fazla, belki de bugün 2 saat çalışmak 2 yıl sonra 100 saat çalışmaya
                            bedel.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2ce2&quot; name=&quot;2ce2&quot;&gt;
      Peki bu aradaki denge nerede, onu
                            nasıl bulacağız? Bugün ödediğimiz bedelin, yıllar sonra ödeyeceğimiz bir bedelden daha
                            değerli olduğunu nasıl anlayabiliriz?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e14b&quot; name=&quot;e14b&quot;&gt;
      Anlayamayız. Bunu bilebilseydik,
                            belki de hayat, evren ve her şeye dair nihai sorunun cevabını da bilirdik, cevap belki de
                            kırk iki olabilir, ne dersiniz?
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;7d98&quot; name=&quot;7d98&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1360&quot; data-image-id=&quot;1*9y8xwUPauZ-L2JelQ3TfgQ.jpeg&quot; data-width=&quot;850&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*9y8xwUPauZ-L2JelQ3TfgQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;6d03742e2648&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-01-22T12:12:01.670Z&quot;&gt;
     January 22, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;%C3%B6dedi%C4%9Fimiz-bedeller-mi-%C3%B6deyeceklerimiz-mi-6d03742e2648&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>ODTÜ’de Uzaktan Güz Dönemi Nasıl Bitiyor.</title>
        <published>2021-01-16T00:00:00+00:00</published>
        <updated>2021-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/odtude-uzaktan-guz-donemi-nasil-bitiyor/"/>
        <id>https://alperenkeles.com/posts/odtude-uzaktan-guz-donemi-nasil-bitiyor/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/odtude-uzaktan-guz-donemi-nasil-bitiyor/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;0ad8&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;092f&quot; name=&quot;092f&quot;&gt;
      ODTÜ’de Uzaktan Güz Dönemi Nasıl Bitiyor.
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6a3c&quot; name=&quot;6a3c&quot;&gt;
      Merhabalar, ben Alperen, ODTÜ’de son yılım, okulumu daha iyi bir hale getirmek için çabalıyorum. Benle birlikte, yaklaşık 15 kişilik bir ekip de çalışmaya devam ediyor. Bu yazıda, aşağıda linkini verdiğim çalışmayı neden, nasıl yaptığımızı, sonrasında nasıl devam ettiğimizi, aldığımız destekleri, önümüze konulan duvarları, aldığımız sonuçları açıklamaya çalışacağım. Neden derseniz, bilinsin istiyorum, biz ne başarmış ya da başaramamış olursak olalım, insanlar süreci tüm şeffaflığıyla bilsin istiyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;47ed&quot; name=&quot;47ed&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;839&quot; data-image-id=&quot;1*mhUQgq0hD9sT_TM_h6ll5g.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*mhUQgq0hD9sT_TM_h6ll5g.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--figure&quot; id=&quot;6331&quot; name=&quot;6331&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        ODTÜ’de Uzaktan Eğitim Dönemi Nasıl Geçiyor?
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        12 Mart 2020 Perşembe akşamı okulların 3 haftalık bir ara tatil dönemine girmesi ile başlayan uzaktan eğitim, 9 ay 12…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;6271d5b082115aa17cdad65184d2e69d&quot; data-thumbnail-img-id=&quot;1*sx_UsvU2-z8xwhRbmw2W5Q.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*sx_UsvU2-z8xwhRbmw2W5Q.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;b309&quot; name=&quot;b309&quot;&gt;
      Gelin sizle gaz ve toz bulutundan bir yolculuğa başlayalım, en başa.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4dff&quot; name=&quot;4dff&quot;&gt;
      Her şey, Instagram’da iki adet anonim sayfanın benle iletişime geçmesi ile başladı. Öğrencilerin yaşadığı problemlerle ilgili çok sayıda mesaj almışlar, benim de daha önceden öğrenci problemleriyle ilgilendiğimi bildikleri için, başta Pass&#x2F;Fail olmak üzere acaba güz dönemini iyileştirmek için neler yapılabilir, bunu sordular.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c122&quot; name=&quot;c122&quot;&gt;
      Rektörlüğün dönem başında bu dönem Pass&#x2F;Fail uygulanmayacak mailini de göz önüne alarak, Pass&#x2F;Fail gelme ihtimalinin düşük olduğunu söyledim, ama yine de bu problemleri ortaya koymanın iyi olacağını düşünüp, hızlıca bir anket hazırladım. Anket üzerinde kısaca tartıştıktan sonra anketi paylaşmaya başladık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d8e2&quot; name=&quot;d8e2&quot;&gt;
      Anket, beklentimizin üstünde ciddi bir katılım aldı. Bu noktada, ben çalışmayı üzerime aldım, anketin linkini çevremde paylaşıp, beraber bu konuda çalışmak isteyenleri davet ettim, yaklaşık 15 kişilik bir ekip oluşturduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4d0f&quot; name=&quot;4d0f&quot;&gt;
      Bu ekip ile birlikte, 4500 anket cevabını aramızda bölüştük, teker teker tüm yorumları okuduk, istatistikleri yorumladık, anahtar problem ve çözümleri belirledik, bunları yukarıda linkini attığım yazıda paylaştık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;71db&quot; name=&quot;71db&quot;&gt;
      Bu yazı, yine beklediğimizin çok üstünde tepkiler aldı. An itibariyle yaklaşık 12400 kişi tarafından okunan yazı, farklı okullardaki gerek öğretim üyeleri, gerek öğrenciler tarafından beğenildi, yine ODTÜ’de pek çok öğretim üyesi ve öğrenci tarafından desteklendi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;edd0&quot; name=&quot;edd0&quot;&gt;
      Yazıyı ODTÜ’deki tüm senato üyeleriyle, üniversite yönetimiyle ve bölüm başkanlarıyla paylaştık, sonrasındaysa yazıdaki önerilerimizin üniversite çapında uygulanması için bir imza kampanyasının yanı sıra Twitter üzerinden
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       #ODTÜBizleKararVer
      &lt;&#x2F;strong&gt;
      diyerek Türkiye gündeminde 4. sıraya yerleştik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8734&quot; name=&quot;8734&quot;&gt;
      En sonunda, 5000 anket yanıtı, 1 analiz raporu, 4400 imza, 6000+ tweet’in ardından,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       olası bir senato toplantısında öğrencilerin argümanlarının iyi bir şekilde duyulması
      &lt;&#x2F;strong&gt;
      için senato hocalarıyla görüşmeler yapmaya başladık. İlk olarak, ODTÜ Uzaktan Eğitim Merkezi ile görüştük.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;efe8&quot; name=&quot;efe8&quot;&gt;
      UZEM ile olan toplantımız, bizim için yol haritamızın belirlenmesi anlamında önemli bir nokta oldu. Hocalarımızın dersle ilgili aldıkları konularda kürsü dokunulmazlığı kapsamında özerk olduklarını daha net bir şekilde anladık, bu sebeple çözüm önerilerimizden sınavlar, dersler ve ödevlerle ilgili olan, kopya gibi problemlere karşı oluşturulanları bir kenarda tutup, senato üyeleri ile Pass&#x2F;Fail ve Withdraw&#x2F;Drop haklarının neden önemli olduğunu, öğrenciye nasıl faydaları olabileceğini, ve bu hakların varlığına dair çeşitli argümanları anlatmaya başladık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8180&quot; name=&quot;8180&quot;&gt;
      Hocalarımızla olan toplantılarımızda, her zaman belirttiğimiz en önemli nokta, bizlerin herhangi bir hak talebinde bulunmaması idi.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bizim asıl istediğimiz, bu bahsettiğimiz hakların yapılacak senato toplantısında tartışılması, ve bizim argümanlarımızın ve fikirlerimizin o tartışma masasında yerini alması, öğrencilerin perspektifinin tartışmanın içerisinde bulunabilmesi idi.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ba46&quot; name=&quot;ba46&quot;&gt;
      Eğitim-öğretim bir yana, toplumsal hayatta yaşanan en büyük problemlerden birisinin çeşitli “tarafların” karşı tarafın bakış açısına uzak kalması, onların problemlerini ve problemlerinin sebeplerini anlayamaması, yeterli seviyede empati kuramaması olduğunu düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a6cb&quot; name=&quot;a6cb&quot;&gt;
      Bu sebepten dolayı,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       hocalarımızla aramızdaki iletişimi güçlendirmek, onları anlayabilmek, empati kurabilmek, onların da karşılıklı olarak bizim düşüncelerimizi daha iyi anlaması için ciddi bir çaba gösterdik, ve çok ciddi bir mutlulukla söyleyebilirim ki şahsi görüşüme göre bunu başardık.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5969&quot; name=&quot;5969&quot;&gt;
      Tüm toplantılarımızdan aşırı moralimiz yüksek derecede, dinlenildiğimizi hissederek ayrıldık. Hiçbir zaman bize üstten bakıldığını ya da bize karşıt bir tutum sergilendiğini görmedik, hissetmedik, toplamda senatodan 9 adet hocamızla Pass&#x2F;Fail, Withdraw&#x2F;Drop haklarının yanı sıra eğitimdeki problemlerin kök sebeplerine dair tartışmalar yaptık, öğrendik, kendimizi geliştirdik, fikirlerimizi ortaya döktük.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;feec&quot; name=&quot;feec&quot;&gt;
      Bu süreçte bizle görüşen, maillerimize cevap veren, ilgisini gösteren, bizlere vaktini ayıran tüm hocalarımıza, tekrardan teşekkür etmek istiyorum. Yalnızca senato üyeleri değil, çeşitli bölümlerden hocalarımız da bizlere ihtiyaç duyduğumuzda tavsiyeler verdiler, problemlerimizi dinlediler, onları da burada dışarıda bırakmanın haksızlık olacağını düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;20b3&quot; name=&quot;20b3&quot;&gt;
      Bu noktada, rektörlükten bir hocamızla görüşmemizin ardından, rektörlüğün hızlı bir karar ile “arttırılmış dersten çekilme hakkı” verdiğinden bahsetmek gerekiyor. Öğrencilere, normal dersten çekilme hakkına ekstra olarak, 1. sınıf derslerini de kapsayan, finallerin başlangıcına kadar süre verilen ve 2 dersten çekilme hakkı tanıyan bir paket sağlandı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3058&quot; name=&quot;3058&quot;&gt;
      Bu hak, her ne kadar bizim için mutluluk verici olsa da, sonrasındaki süreçte maalesef bizim argümanlarımıza karşı bir argüman olarak kullanıldı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9273&quot; name=&quot;9273&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Dersten çekilme hakkının sağlanmasını takip eden süreçte, üst düzey rektörlük yöneticilerine attığımız maillere cevap alamadık, görüşme ricalarımız reddedilmedi, direkt olarak cevapsız bırakıldı.
      &lt;&#x2F;strong&gt;
      Bu ricalarımızı hem çeşitli hocalarımız üzerinden, hem defalarca mail üzerinden iletmemize rağmen, bize herhangi bir dönüş sağlanmadı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;a688&quot; name=&quot;a688&quot;&gt;
      15 Ocak günü, yine bir senato üyesi hocamızla birlikte yaptığımız bir toplantı esnasında, daha önceden görüştüğümüz bir hocamızdan, rektörlükten dersten çekilme hakkı verilmesine dayandırılarak bu dönem Pass&#x2F;Fail hakkının verilmemesine karar verildiğine dair bir mail aldık. Hocamıza süreçteki tüm destekleri için çok teşekkür ettik, bu teşekkürümüzde de sonuna kadar samimiyiz, ancak içinde bulunduğumuz durumu bir tık daha net bir şekilde ortaya koymak gerek.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;eee4&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--leading&quot; id=&quot;ee86&quot; name=&quot;ee86&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        - Senato üyelerinin neredeyse yarısıyla, sınavlarımızın, ödevlerimizin, günlük yaşamımızdaki meşgalelerimizin arasında tek tek görüştük, argümanlarımızı açıkladık, problemlere ve çözümlere dair önerilerimizi dile getirdik
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       , onların fikirlerini dinledik ve ortak bazı sonuçlara varmayı başardık, toplantılarımızın tamamında olumlu dönüşler aldık.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;092a&quot; name=&quot;092a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        -
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       Üst düzey rektörlük makamına birkaç farklı günde ve saatte birkaç farklı mail attık, buna ekstra olarak yazılı bir dilekçe ilettik,
      &lt;&#x2F;em&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        bu süreçlerin hiçbirisinde bir dönüş alamadık.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote graf--trailing&quot; id=&quot;7bbc&quot; name=&quot;7bbc&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        - Bizim asıl ricamız, bir hakkın verilmesinden ziyade, bu hakkın tartışılması, ve tartışılırken bizim argümanlarımızın masada olması iken, Pass&#x2F;Fail hakkında bir senato toplantısı yapılmadı.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;7e99&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;0bfb&quot; name=&quot;0bfb&quot;&gt;
      Bu noktada, rektörlük makamına olan sitemimizi açıkça ortaya koymak gerektiğini düşünüyorum. Bizler öğrenciler olarak, büyük çevreler tarafından takdir edilmiş bir çalışma ardından, rasyonel temeller üzerine kurulu problemler ve çözüm önerilerini üniversite yönetimimizle paylaşmak istedik.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Çabalarımızı yanıtlayan pek çok hocamız oldu, ancak üst yönetimin iletişim çabalarımıza cevap vermemesinin ardından senato toplantısının yapılmaması, atılan 4421 imzayı, yanıtlanan 5000 anketi, atılan 6500 tweet’in görülmemesi demektir.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7038&quot; name=&quot;7038&quot;&gt;
      Bu süreçler sonucunda attığımız maillere yine dönüş yapılmayıp, iletişim çabalarımızın üst yönetim tarafından cevapsız bırakılması da, bizde öğrencilerin rektörlük tarafından yeterli saygıyı görmediği düşüncesini oluşturmakta, ODTÜ gibi Türkiye’de önde gelen bir eğitim kurumunda bu şekilde bir durumun düşüncesi bile korku uyandırmaktadır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9c10&quot; name=&quot;9c10&quot;&gt;
      Bu süreçleri, öğrenciler istedikleri olmayınca üslup ya da bakış açısı değiştirdiler gibi görmemek gerekir.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sürecin başından beri tamamen gönüllü şekilde diğer öğrencilerin hayat standartlarının iyileştirilmesi için çaba gösteren bir grup öğrenci, düşüncelerinin duyulmasını, fikirlerinin tartışılmasını şahsi fikrimce hak etmektedir.
      &lt;&#x2F;strong&gt;
      Bunun olmaması üzücü ve kaygı vericidir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7b8f&quot; name=&quot;7b8f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu süreçte, kaygı verici olan tek nokta, rektörlüğün tepkisi değil, maalesef ki aynı zamanda öğrencilerin inançsızlığı ve umursamazlığıdır.
      &lt;&#x2F;strong&gt;
      Diplomatik ve demokratik kanallar aracılığıyla yürütülen bu süreçte, ODTÜ öğrencisi yeterli desteği ve birleşimi bence gösterememiştir. 4.000 imzanın, ODTÜ gibi bir okulda 10.000 gibi sayıları aşabilmesi, Twitter üzerinden yürütülen kamuoyunun çok daha kalabalık olabilmesi gerekirdi. ODTÜ üzerindeki iletişim kanallarının, öğrencilerin birbirine, hocalara ve yönetime karşı olan bakış açılarının daha yapıcı şekilde geliştirilmesi, yapıcı yorumların okul genelinde daha sık, daha etkili ve daha ciddi şekilde yapılması gerekmektedir. Bizler ancak, bu süreçleri doğru şekilde yürütür ve ilerletirsek, bir okul olarak, özerk bir toplumsal yapı ve kültür olarak kendimizi geliştirebiliriz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;e99f&quot; name=&quot;e99f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Bu yazımı bitirirken, öncelikle benle birlikte bu süreci yürüten 15 kişiye, sonrasında bizle iletişime geçme nezaketini gösteren başta senato üyesi hocalarımız olmak üzere tüm hocalarımıza, süreç boyunca bizi destekleyen, imza&#x2F;anket&#x2F;twitter katılımı gösteren tüm öğrenci akranlarımıza teşekkür etmek istiyorum.
      &lt;&#x2F;strong&gt;
      Benim için öğretici, içimi doldurucu, mutluluk verici bir yolculuktu, sonucu ne olursa olsun pişman değilim, hepinize çok teşekkürler.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;384f93078eff&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-01-16T09:50:59.321Z&quot;&gt;
     January 16, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;odt%C3%BCde-uzaktan-g%C3%BCz-d%C3%B6nemi-nas%C4%B1l-bitiyor-384f93078eff&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Post-Covid Monologları#3: Yarını Kaçırmak</title>
        <published>2021-01-04T00:00:00+00:00</published>
        <updated>2021-01-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/postcovid-monologlari3-yarini-kacirmak/"/>
        <id>https://alperenkeles.com/posts/postcovid-monologlari3-yarini-kacirmak/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/postcovid-monologlari3-yarini-kacirmak/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;bff7&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;2125&quot; name=&quot;2125&quot;&gt;
      Post-Covid Monologları#3: Yarını Kaçırmak
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;4954&quot; name=&quot;4954&quot;&gt;
      Bugün günlerden 5 Ocak 2021, uyandığımdan beri projeler, ödevler ve derslerle boğuşuyorum. Peki ya sen? Sen ne yaptın bugün, ev temizliği, dizi, oyun, kitap, belki de sen de yazı yazıyorsundur?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6440&quot; name=&quot;6440&quot;&gt;
      Her gün, yaklaşık 16 saatlik bir maratonun içinde yorgun, bitmiş bir halde yaşıyoruz. Sorumluluklarımız, isteklerimiz, ihtiyaçlarımız bizi kontrol altına alıyor, içinde bulunduğumuz durumdan başka herhangi bir konuyla ilgilenmemizi imkansız hale getiriyorlar. Başımızı kaldıracak bir boşluk bulduğumuzda bir kenara yığılmak istiyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8076&quot; name=&quot;8076&quot;&gt;
      Tüm bu hengamede farkında olmadığımız en büyük şey ise, aslında bugünü yaşamaya çalışırken yarını kaçırıyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;583e&quot; name=&quot;583e&quot;&gt;
      Yıllardır duyduğumuz bir söz vardır, “Carpe Diem”, “Seize the day”, “Anı Yaşa”.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;318e&quot; name=&quot;318e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;573&quot; data-image-id=&quot;1*EuoidWDyfbfRMYygYGeeuw.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;626&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*EuoidWDyfbfRMYygYGeeuw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;e454&quot; name=&quot;e454&quot;&gt;
      Ünlü Romalı şair Quintus Horatius “Horace” Flaccus’a atıf edilen bu söz, sıklıkla geçmişi düşünerek kendini üzmek ya da gelecek için kaygı duyarak endişelenmek yerine, bulunduğu anın tadını çıkarmaya ve mutlu olmaya odaklan anlamında kullanılır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f1ab&quot; name=&quot;f1ab&quot;&gt;
      İçinde bulunduğumuz durumda yaşadığımız sıkıntı ise çok daha farklı, ne dünü düşünecek, ne de yarın için endişelenecek vaktimiz var. Toplumun üzerimize yerleştirdiği o kadar farklı yönden o kadar çok yükle boğuşuyoruz ki, karakterimizin en temel yapı taşlarını oluşturan “Ben kimim?”, “Neden yaşıyorum?”, “Hayat amacım ne?” gibi soruları sormuyoruz, akışın içinde kaybolmuşuz, ilerliyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ba6d&quot; name=&quot;ba6d&quot;&gt;
      Neyi sevdiğimizi bilmiyoruz, kime güvendiğimizi bilmiyoruz, kendimizi tanımıyoruz, tanıyamıyoruz. İçinde yaşadığımız toplumun da etkisiyle tüketim kültürünün büyüsüne kapılıyoruz, mutluluğu tüketerek elde etmeye çalışıyoruz, her aşamada sadece daha fazlasına sahip olmayı hedefliyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fd34&quot; name=&quot;fd34&quot;&gt;
      Oysaki, bir dakika düşünsek, kendimize sorsak, aynada kendimize baksak ve desek ki;
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;f56b&quot; name=&quot;f56b&quot;&gt;
      “Ben neden yaşıyorum, neyi seviyorum, beni ne ya da kim mutlu ediyor?”
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;7480&quot; name=&quot;7480&quot;&gt;
      Belki de mutluluğun ne kadar basit, ne kadar temel, ne kadar kolay olduğunu göreceğiz. Ve “yarın” buna göre uyanacağız, planlarımızı buna göre kuracağız, hayatımızı buna göre devam ettireceğiz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4a67&quot; name=&quot;4a67&quot;&gt;
      Kendimize vakit ayırmak, kendimizi tanımak gerek, her şeyden daha önemlisi, sormak gerek, neden yaşıyorum?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;ce48&quot; name=&quot;ce48&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Belki dünü kaçırdık, bugünü de kaçırıyoruz, yeter ki yarını kaçırmayalım.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;fb7d880fe935&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2021-01-04T22:06:56.510Z&quot;&gt;
     January 4, 2021
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;post-covid-monologlar%C4%B1-3-yar%C4%B1n%C4%B1-ka%C3%A7%C4%B1rmak-fb7d880fe935&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>ODTÜ’de Uzaktan Eğitim Dönemi Nasıl Geçiyor?</title>
        <published>2020-12-23T00:00:00+00:00</published>
        <updated>2020-12-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/odtude-uzaktan-egitim-donemi-nasil-geciyor/"/>
        <id>https://alperenkeles.com/posts/odtude-uzaktan-egitim-donemi-nasil-geciyor/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/odtude-uzaktan-egitim-donemi-nasil-geciyor/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;76cb&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;0f97&quot; name=&quot;0f97&quot;&gt;
      ODTÜ’de Uzaktan Eğitim Dönemi Nasıl Geçiyor?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;1798&quot; name=&quot;1798&quot;&gt;
      12 Mart 2020 Perşembe akşamı okulların 3 haftalık bir ara tatil dönemine girmesi ile başlayan uzaktan eğitim, 9 ay 12 gün sonra hala devam ediyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;77b0&quot; name=&quot;77b0&quot;&gt;
      Bir korku kitabının sayfalarından çıkmışçasına hayatımızı değiştiren Covid-19 süreci, her insana, her alana, her sektöre damgasını vurmakla birlikte, eğitimi, eğitilenleri ve eğitenleri hayal edemeyeceğimiz ölçülerde etkiledi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;47cd&quot; name=&quot;47cd&quot;&gt;
      Geçtiğimiz bahar döneminin büyük bir kısmını, yaz dönemini, sonbahar dönemini uzaktan eğitim süreciyle geçirdik ve belki de gelecek bahar döneminde de uzaktan eğitime, ya da karma eğitim sistemine devam edeceğiz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;72ac&quot; name=&quot;72ac&quot;&gt;
      Sonbahar döneminin sonuna gelmeden ODTÜ öğrencilerinin problemlerini anlamak, onların sunduğu çözüm önerilerini dinlemek ve bu önerilerle hem güz döneminin kalanında yaşanan ve yaşanılabilecek sorunları ortadan kaldırmak hem de potansiyel bir uzaktan bahar döneminin iyileştirilmesini sağlamak amacıyla öğrenciler olarak bir anket düzenledik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;397f&quot; name=&quot;397f&quot;&gt;
      Ankete 4500&#x27;den fazla öğrenci katıldı, yaklaşık 15 kişilik bir ekip olarak bu yanıtları değerlendirdik, bunlar üzerine okuyacağınız analiz raporunu hazırladık. Raporda mümkün olduğunca şeffaf, analitik, tarafsız ve yapıcı olmaya çabaladık, amacımız, gerekli mercilerin bu sıkıntıları daha net bir şekilde görmesini ve karşısında bizim çözüm önerilerimizi değerlendirmelerini, uygulamalarını sağlamak. Bölümlerin dağılımını aşağıda görebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;bd5d&quot; name=&quot;bd5d&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;295&quot; data-image-id=&quot;1*rpexxCEErEAQm5JLZlSUrg.png&quot; data-width=&quot;1532&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*rpexxCEErEAQm5JLZlSUrg.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;1e56&quot; name=&quot;1e56&quot;&gt;
      Ankete tüm bölümlerin tüm dönemlerinden insanların katıldığını, bu kadar geniş bir kitleye ulaşıp onların problemlerini dinleyebildiğimizi görmek bizi hem mutlu ediyor, hem de anketin sonuçlarına dair olan güvenimizi arttırıyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;bbb9&quot; name=&quot;bbb9&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Bu raporun bundan sonraki kısmında sırasıyla sağlık, internet erişimi ve teknolojik imkanlar, maddiyata dayalı problemler, uzaktan eğitim kalitesi ve geçen dönem uygulanan Pass&#x2F;Fail sistemi hakkında çeşitli istatistikleri ve bunlara dayanan yorumları ortaya koyup, genel yaşanan problemlerden ve çözüm önerilerimizden bahsedeceğiz.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;3ecb&quot; name=&quot;3ecb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Sağlık
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2b95&quot; name=&quot;2b95&quot;&gt;
      Anket sonuçlarına göre, öğrencilerin %13&#x27;ü kendisi Covid-19 geçirmiş, %27&#x27;sinin yaşadığı hanede Covid-19 geçirmiş bireyler mevcut, %32&#x27;si ise Covid-19 temaslısı olmaları sebebiyle 14 günlük karantinaya girmiş.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Her 3 ODTÜ Öğrencisinden biri salgından direkt olarak etkilenmiş,
      &lt;&#x2F;strong&gt;
      diğer
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
      &lt;&#x2F;strong&gt;
      tüm öğrenciler de her gün dolaylı şekilde etkilenmeye devam ediyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;e39a&quot; name=&quot;e39a&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3240&quot; data-image-id=&quot;1*rm3_4ET3YYT5wt85urYA_Q.png&quot; data-width=&quot;3240&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*rm3_4ET3YYT5wt85urYA_Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;0250&quot; name=&quot;0250&quot;&gt;
      Pek çoğumuzun gerek yaşadığı, gerekse çevresinde gözlemlediği üzere, 14 günlük karantina süreçleri hasta olma ihtimali, küçücük bir öksürüğü bile hastalık belirtisi gibi algılayabilme, aynı hane içinde bile izolasyon, aynı hanedeki bireylerin hasta olmasına sebep olma gibi psikolojik olarak ağır, moral ve motivasyon üzerinde ciddi negatif etkileri olan süreçler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7fda&quot; name=&quot;7fda&quot;&gt;
      Öğrenciler olarak bu aşamada derslere katılamıyor, katıldığımız dersleri anlayamıyor, çalıştığımız saatlerden verim alamıyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a75d&quot; name=&quot;a75d&quot;&gt;
      Karantina süreci bir yana olmakla birlikte, kendimizin Covid-19 olması sonucunda derslere uzun süre katılım gösteremediğimiz haftalar sonrasında bu arada kaçırdığımız ödevleri, dersleri ve sınavları yakalamak, derslerdeki eksiklerimizi kapatmak için ekstra çaba göstermemiz gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;76d9&quot; name=&quot;76d9&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Bu süreçlerin pek çoğunu normal dönemde de yer yer yaşıyoruz, ancak bu kadar büyük bir ölçekte bu kadar derin bir paranoyanın altında olduğumuz herhangi bir an, daha önce hiçbir zaman yaşanmadı.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;13bf&quot; name=&quot;13bf&quot;&gt;
      İnternet Erişimi ve Diğer Teknolojik İmkanlar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6f8b&quot; name=&quot;6f8b&quot;&gt;
      İnternet erişimi konusuna geldiğimizde, eğitimi yeri geldiğinde kesintiye uğratabilecek derece problemlerle karşı karşıya olduğumuzu görüyoruz.
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Öğrencilerin %65&#x27;i internet erişimi yüzünden sınavlar esnasında problem yaşadıklarını ortaya koyarken derslere katılımda sıkıntı yaşayanlarda bu oran neredeyse %75&#x27;e kadar yükseliyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;731c&quot; name=&quot;731c&quot;&gt;
      Dersler esnasında duraklamalar ve dersten düşmeler, internet ve elektrik kesintileri, düşük internet hızı sebebiyle ekranda yazılanları görmede problemler, aynı evde birden fazla kişinin ders için internet kullanması gerekmesi ve bu durumda interneti yalnızca bir kişinin kullanabilmesi gibi senkron derslere katılımda çok ciddi problemler, çok yüksek bir oranda görülüyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6b4b&quot; name=&quot;6b4b&quot;&gt;
      Senkron derslerin pek çok derste kaydedilip asenkron olarak sunulmasına karşın bu standardın okul genelinde oturtulamamış olması sebebiyle, ders kaydına sonradan ulaşamadığımız pek çok ders mevcut, bu da öğrencilerin bilgiye ve öğrenime ulaşımını kısıtlayan maalesef ciddi bir etken.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;cd3a&quot; name=&quot;cd3a&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Öğrencilerin %6&#x27;sının kendisine ait bir bilgisayarı dahi olmamakla birlikte, %38&#x27;i kendilerine teknolojik imkanlarını uzaktan eğitimdeki ihtiyaçları için yeterli görmediklerini belirtti.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;1591&quot; name=&quot;1591&quot;&gt;
      Bunlara ekstra olarak çeşitli derslerde gerekli görülen çift kamera&#x2F;cihaz sistemleri de öğrenciler üzerinde yeri geldiğinde ekstra ihtiyaçlara dönüşebiliyor, bunlar da öğrenciler üzerinde teknolojik imkansızlık olarak ekstra bir yük oluşturabiliyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;edfe&quot; name=&quot;edfe&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3240&quot; data-image-id=&quot;1*PfVWscwzMAbv7jTvR4bkFw.png&quot; data-width=&quot;3240&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*PfVWscwzMAbv7jTvR4bkFw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;7d69&quot; name=&quot;7d69&quot;&gt;
      Maddi Problemler
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6e0e&quot; name=&quot;6e0e&quot;&gt;
      Teknolojik imkansızlıklarla ilgili bahsettiğimiz problemlerin bir kısmı alt yapısal olmakla birlikte, pek çoğu aynı zamanda maddiyattan kaynaklanan problemler. Bu dönemde alınan ek paketler, teknolojik alt yapıyı güçlendirmek için alınan ekstra aksiyonlar ekstra maddi bir yüke sebep oluyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;97a7&quot; name=&quot;97a7&quot;&gt;
      Maalesef ki, bu artan yüke karşılık öğrencilerin maddi imkanları artmıyor, hatta ve hatta azalıyor. Burs alan öğrencilerin %33&#x27;ü burslarının kesildiğini belirtti, bunun yanında ise öğrencilerinin %51&#x27;inin salgın döneminde maddi sıkıntılar yaşıyor musunuz sorusuna evet cevabı verdiğini görebiliyoruz.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;9c1e&quot; name=&quot;9c1e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Maddiyattan kaynaklı problemler diğer imkanlara ulaşımı engellemekle birlikte, ev içi huzuru ve şahıs psikolojisini de kötü etkilemekte, öğrencileri içinde bulunduğu yarışta bir adım daha geriye düşürmekte, eğitimde fırsat eşitsizliğindeki uçurumun içinde bulunduğumuz durumda bir kıta daha atlamasına sebep olmakta.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--blockquote&quot; id=&quot;cf06&quot; name=&quot;cf06&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2100&quot; data-image-id=&quot;1*tLc7Nw3iAr7BSwO1sL2fsA.png&quot; data-width=&quot;3240&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*tLc7Nw3iAr7BSwO1sL2fsA.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;1401&quot; name=&quot;1401&quot;&gt;
      Uzaktan Eğitim Kalitesi ve Yoğunluğu
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b302&quot; name=&quot;b302&quot;&gt;
      Uzaktan eğitim, bir kriz anında ortaya bir çözüm olarak çıkmış, yeterli planlamaları ve alt yapısı ne öğrenciler, ne de öğretmenler tarafından maalesef anlaşılamamış bir sistem. Geleneksel eğitimden ölçüm, öğretim ve iletişim anlamında çok farklı olmasından kaynaklı olarak, içinde bulunduğumuz durumda tam manasıyla çözülememiş problemler barındırıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6e19&quot; name=&quot;6e19&quot;&gt;
      Uzaktan eğitimin kalitesi öğrencilere sorulduğunda,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       %1 den daha az bir kısmı çok iyi cevabını verirken,
      &lt;&#x2F;strong&gt;
      %7 kadar da iyi olduğunu düşünen öğrenciler görüyoruz. Öğrencilerin yaklaşık %30&#x27;u orta cevabını verirken,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       geriye kalan %62, eğitimin kötü olduğunu düşünen %40, ve çok kötü olduğunu düşünen %22 şeklinde ayrılıyor.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fc78&quot; name=&quot;fc78&quot;&gt;
      Elbette bu sayılar eğitimin gerçekten iyi ya da kötü olduğuna bir belirteç olmaktan uzak, biz öğrencilerin ön yargıları ve beklentilerinin bir sonucu olarak ortaya çıkan yorumlar. Ama ODTÜ gibi yeri geldiğinde dünya çapında çalışmalar ve başarılar ortaya koyan, Türkiye’nin en iyi okullarından birisinde öğrencilerin bu denli olumsuz bir görüşe sahip olması, düzeltecek, düzeltilebilecek pek çok nokta olduğunu açık bir şekilde bizlere gösteriyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b26f&quot; name=&quot;b26f&quot;&gt;
      Uzaktan eğitim dönemindeki ders yükünü karşılaştırdığımız durumda ise maalesef ki vahim bir tablo ile karşılaşıyoruz. Öğrencilerin %79&#x27;u normal bir döneme göre daha yoğun olduklarını belirtirken, %10&#x27;u ise aynı derecede bir yoğunluk tecrübe ettikleri cevabını veriyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;aa70&quot; name=&quot;aa70&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;3240&quot; data-image-id=&quot;1*HzZ-sretkWeuQh41xg4rBw.png&quot; data-width=&quot;3240&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*HzZ-sretkWeuQh41xg4rBw.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--figure&quot; id=&quot;c689&quot; name=&quot;c689&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Normal dönemde bizi deşarj eden, motive eden pek çok etkenden yoksun, beraber çalışma imkanları kısıtlanmış, stres oranı çok daha yüksek bir dönem geçiriyoruz. Belki de aynı derecede ders yükümüz var, ama pozitif etkenlerin yokluğu öğrencilerin pek çoğunda bu yoğunluğun algısını arttırıyor.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;7349&quot; name=&quot;7349&quot;&gt;
      Pass&#x2F;Fail
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e018&quot; name=&quot;e018&quot;&gt;
      Pass&#x2F;Fail, kısaca bahsetmek gerekirse, harf notlandırması sisteminin bir ya da daha fazla ders için geçme&#x2F;kalma şeklinde 2 notun olduğu bir sisteme dönüştürüldüğü, o dersin ortalamasının ise not ortalamalarına katılmadığı bir sistem.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;70ca&quot; name=&quot;70ca&quot;&gt;
      Geçtiğimizi dönem ODTÜ’de, tüm dönemin derslerinin pass&#x2F;fail olarak sayılabilmesi gibi bir şans verildi öğrencilere, bu dönem başında ise rektörlük tarafından gönderilen mailde notlandırmada herhangi bir sistem değişikliğine gidilmeyeceği belirtildi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9373&quot; name=&quot;9373&quot;&gt;
      Anketi yaparken, geçtiğimiz dönemdeki pass&#x2F;fail sisteminin öğrenciler tarafından bakış açısını ve bu dönem sistemin uygulanıp uygulanmamasına dair fikirlerini de öğrenmek istedik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f495&quot; name=&quot;f495&quot;&gt;
      Öğrencilerin %37&#x27;si geçtiğimiz dönemki sistemi çok faydalı bulurken, %31&#x27;i ise faydalı bulduğunu belirtti, %18&#x27;lik bir kısım ise sistemi faydasız, ya da çok faydasız buldu. İlk geldiği dönemde ciddi tepki alan bu sistemin
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       öğrencilerin 3&#x27;te 2&#x27;sinden daha fazlası
      &lt;&#x2F;strong&gt;
      tarafından faydalı olarak görülmesi, geçen dönem yaşanan sıkıntılara rahatlatıcı bir çözüm yöntemi olarak görüldüğünü gösteriyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;f152&quot; name=&quot;f152&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;2400&quot; data-image-id=&quot;1*SnLXsr-mkm8zhugrtYpBPQ.png&quot; data-width=&quot;3240&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*SnLXsr-mkm8zhugrtYpBPQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;616e&quot; name=&quot;616e&quot;&gt;
      Buna ekstra olarak, bu dönem pass&#x2F;fail uygulanması ne derece faydalı olur diye sorduğumuzda, toplam faydalı gören öğrenci oranının %76&#x27;ya çıktığını, öğrencilerin benzer bir sisteme bu dönem de ihtiyaç duyduklarını düşündüklerini görebiliyoruz.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;c984&quot; name=&quot;c984&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Ders bazında da olsa, dönem bazında da olsa, Boğaziçi Üniversitesi’nin uyguladığı gibi sadece tek bir derse uygulanabilecek de olsa, pass&#x2F;fail sistemi öğrencilere ortalamalarına dair ekstra bir esneklik sağlamasıyla, dönemde yaşanan psikolojik baskıya karşı kayda değer bir çözüm olabilir.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--blockquote&quot; id=&quot;1a83&quot; name=&quot;1a83&quot;&gt;
      Problemler ve Çözüm Önerileri
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;0b4a&quot; name=&quot;0b4a&quot;&gt;
      Buraya kadar, genel istatistikler üzerinden çeşitli yorumlar yapmaya, öğrencilerin yaşadığı sıkıntıları daha açık ve net şekilde, mümkün olduğunca sebepleriyle ve sonuçlarıyla ortaya koymaya çalıştık.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a4a9&quot; name=&quot;a4a9&quot;&gt;
      Aynı zamanda 4500 yanıtın hepsinin üstünden geçip, bu yanıtlarda bahsedilen spesifik problemleri ve bu problemlere oluşturulabilecek çözümleri de aşağıda listeliyoruz. Özellikle kopya, sınav düzeneği, ders işlenimi, sınav ve ödev sistemleri gibi alt yapıdan bağımsız problemlere odaklanmaya çalışmakla birlikte, alt yapısal ve maddi yardımlarla çözülebilecek problemlerle ilgili de çeşitli önerilerde bulunmaya çalışacağız.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5d97&quot; name=&quot;5d97&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h4-strong&quot;&gt;
       Problem#1: Kopya
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;e6b8&quot; name=&quot;e6b8&quot;&gt;
      Kopya problemi, uzaktan eğitime geçiş sürecinde hem hocaların, hem de öğrencilerin sıkıntısını en çok çektiği, çözümüne dair en çok kafa yorulan problemlerden bir tanesi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e9b1&quot; name=&quot;e9b1&quot;&gt;
      Kopya problemiyle birlikte ortaya çıkan bir diğer problem ise,
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Kopya Önlemleri Problemi
      &lt;&#x2F;strong&gt;
      .
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;492c&quot; name=&quot;492c&quot;&gt;
      Yanıtlarda pek çok öğrenci tarafından ortak görüş, önlemlerin kopyayı engellemekte başarısız olduğu, diğer kopya çekmeyen öğrenciler üzerindeki sınav stresini ekstra arttırdığı ve sınavlarda adaletli bir ortam oluşturmaktansa problemlere çeşitli ekler eklediği.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a783&quot; name=&quot;a783&quot;&gt;
      Buna karşı ortaya atılan önerileri inceledik, ve problemli görülen önlemleri sebepleriyle listeledik.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;4104&quot; name=&quot;4104&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        1- Sınav sürelerinin aşırı kısa tutulması.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c5d8&quot; name=&quot;c5d8&quot;&gt;
       Sınav süreleri öğrenciler arasındaki iletişimi minimize edip, “kopya çekmeye kalkarsanız vaktiniz yetmez” şeklinde bir ön kabul ile hareket ediyor, ancak dışarıdan yardım alan öğrenciler bu kısıtlamaya tabii olmadıklarından kopyayı önleme konusunda başarısız olduğu noktalar mevcut.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;91a2&quot; name=&quot;91a2&quot;&gt;
       Sınav süresinin kısa olması sınavı dürüst şekilde çözen öğrencilerin zaten yüksek seviyedeki stresini arttırıyor, sınavlarda başarılı olma ihtimallerini düşürüp, dışarıdan yardım alan öğrencilerle aralarındaki uçurumun açılmasına sebep oluyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0e6b&quot; name=&quot;0e6b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        2- Sınavlarda Sorular Arasında Geçiş Olmaması.
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;3ecc&quot; name=&quot;3ecc&quot;&gt;
       Zaman yönetimini engelleyen bu sistem, kopyayı engellediği kadar sınavların ölçücülüğüne de maalesef zarar vermekte.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6625&quot; name=&quot;6625&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        3- Masayı Gören Kamera
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;4452&quot; name=&quot;4452&quot;&gt;
       Alınan tüm önlemler arasında en faydalısı, kopyaya karşı en güvenlisi olmakla birlikte, sınav anında yaşanan bağlantı problemleri, öğrencinin gerekli düzeneği sağlayamaması gibi sıkıntıları mevcut.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--li&quot; id=&quot;1ba9&quot; name=&quot;1ba9&quot;&gt;
      Çözümler#1: Kopya
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;cbc6&quot; name=&quot;cbc6&quot;&gt;
      Pek çok diğer problem gibi, kopya ve kopyaya karşı önlemler de daha esnek yöntemlerle çözümlenebilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bd4a&quot; name=&quot;bd4a&quot;&gt;
      Bahsedildiği gibi masayı gören bir kamera pek çok problemi çözmekle birlikte, sınav sırasında internet problemleri, düzenek problemleri, özel odaya sahip olmama, düzgün bir çalışma ortamına sahip olmama gibi pek çok probleme sahip.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3ff5&quot; name=&quot;3ff5&quot;&gt;
      Bu noktada sağlanabilecek çözümler ise bu problemleri yaşayan öğrencilere alternatiflerle oluşturulabilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a13b&quot; name=&quot;a13b&quot;&gt;
      Çift kamera yerine önerilebilecek başka düzenekler(bilgisayardan ekran paylaşımı, sözlü sınav) gibi farklı şansların yanı sıra, ODTÜ kültüründe bulunan “telafi sınavına girilmez” bakış açısını yıkabilecek, öğrencilerin içinde bulunduğu durumları anlayışla karşılayan telafi sınavları düzenlenebilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;14e4&quot; name=&quot;14e4&quot;&gt;
      Geri dönüş olmaması ile ilgili ise, bu konudaki problemleri neredeyse temelinden çözdüğüne inandığımız, bazı derslerde çoktan uygulanan bir sistem mevcut.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;1d41&quot; name=&quot;1d41&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Sınavlardaki her bir sorunun, ayrı mini bir sınav(kendine özel bir başlangıç&#x2F;bitiş saatine has bir soru) olarak yüklenmesi sayesinde, geriye dönüş sağlanmadan, zaman yönetimi problemleri engellenebilir.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;b931&quot; name=&quot;b931&quot;&gt;
      Örnekleyerek açıklamak gerekirse, normalde 6 sorudan oluşan ve 100 dakika sürecek ve 17.00 — 18.40 arasında yapılacak olan bir sınavımız olsun.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1f82&quot; name=&quot;1f82&quot;&gt;
      Bu sınav,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;83d2&quot; name=&quot;83d2&quot;&gt;
      17.00 — 17.20 : 1. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;67b7&quot; name=&quot;67b7&quot;&gt;
      17.20 — 17.35 : 2. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b2fa&quot; name=&quot;b2fa&quot;&gt;
      17.35 — 17.50 : 3. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c9db&quot; name=&quot;c9db&quot;&gt;
      17.50 — 18.10 : 4. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2c9e&quot; name=&quot;2c9e&quot;&gt;
      18.10 — 18.25 : 5. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0786&quot; name=&quot;0786&quot;&gt;
      18.25 —18.40 : 6. Soru
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;35e9&quot; name=&quot;35e9&quot;&gt;
      şeklinde yapılabilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9ab6&quot; name=&quot;9ab6&quot;&gt;
      Görebildiğimiz kadarıyla, bu sistemdeki temel problem hocalar tarafında sorulara spesifik olarak dakikalar belirlenmesi ve buna göre sınavlar açılması olmakla birlikte, ön görülemeyen sıkıntılar için bu sistemi uygulayan hocalarla konuşulabilir ve bu problemler de çözülebilir.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;c79e&quot; name=&quot;c79e&quot;&gt;
      Problemler#2: Dersler
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;e8fb&quot; name=&quot;e8fb&quot;&gt;
      Gerek senkron, gerek asenkron derslerle ilgili ortaya çıkan çeşitli problemler mevcut. Bu problemleri ve çözümlerini aşağıda listeliyoruz.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;488f&quot; name=&quot;488f&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        1- Senkron Derslerde Yoklama Alınması
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;cb11&quot; name=&quot;cb11&quot;&gt;
       Pek çok senkron derste yoklama alınıyor, bu yoklamalar ise finale girme veyahut NA şartları ya da dersin not dağılımına bir not olarak kullanılıyor. Yukarıda bahsettiğimiz üzere senkron derslere farklı sebeplerden katılım sağlayamayan pek çok öğrenci mevcut, sadece dersten kalmamak için interneti elvermediği halde senkron derse katılan, katıldığı dersten bağlantı kalitesi sebebiyle verim alamayan bir öğrenci derse ekstradan 2 saat harcayıp senkron olarak girdiği dersi belki de asenkron olarak bir daha dinlemek gibi bir duruma düşebiliyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d1d8&quot; name=&quot;d1d8&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        2- Senkron Derslerin Yapılmaması
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c7dd&quot; name=&quot;c7dd&quot;&gt;
       Senkron derslere katılmayan&#x2F;katılamayan öğrenciler mevcutken, bir yandan da senkron dersi olmayan öğrenciler de var. Bu durumlarda hocalar önden kaydettikleri videoları göndermek, ya da ders notu atmak gibi yöntemlerle ilerliyor. Ancak hoca öğrenci arasındaki iletişimi zayıflatan bu süreç, öğrencilerin dersten kopmasını kolaylaştırıyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;6faf&quot; name=&quot;6faf&quot;&gt;
       Buna çözüm olarak, sanal ofis saatlerinin kullanımı veyahut tartışma forumu gibi öneriler ortaya atılıp denense de, ders anında akla gelen bir sorunun niteliğini maalesef çoğu zaman taşımıyor.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;55ea&quot; name=&quot;55ea&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        3- Senkron Derslerin Kaydedilmemesi
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d086&quot; name=&quot;d086&quot;&gt;
       Senkron derslerin kaydedilmediği derslerde, yukarıda bahsettiğimiz sebeplerle öğrenciler derse katılamadığında derse geri dönemiyor, tekrardan aktif şekilde devam edemiyorlar. Elbette, normal dönemde de bu mümkün değildi, ancak ODTÜ kütüphanesine kolay ulaşım, hocalarla ve öğrencilerle yüz yüze, efektif iletişim gibi imkanlar sayesinde öğrenciler eksiklerini daha hızlı kapatabiliyor, dersten kopmadan döneme devam edebiliyorlardı. Bu dönem bu tür pek çok mekanizma ortadan kalktığından dolayı, kayıtlı dersler öğrenciler için aşırı değerli bir kaynak durumunda.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--li&quot; id=&quot;d937&quot; name=&quot;d937&quot;&gt;
      Çözümler#2:Dersler
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;12e0&quot; name=&quot;12e0&quot;&gt;
      Bahsettiğimiz problemlere toplu bir şekilde çözüm getirebileceğimize inanıyoruz.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;0dfd&quot; name=&quot;0dfd&quot;&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       Alınan yoklamaların bonus puan olarak kullanıldığı, senkron derslerin yapıldığı, ancak katılımın zorunlu tutulmadığı, yapılan tüm derslerin mümkün olan en yüksek kalitede kolayca indirilip çevrim-dışı şekilde izlenebileceği bir ders sisteminin ideal bir çözüm olduğunu düşünüyoruz.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--blockquote&quot; id=&quot;335c&quot; name=&quot;335c&quot;&gt;
      &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
       Bunlara ek olarak, yazılı ders notları, benzer izlencelere sahip diğer okulların ekstra dersleri, tüm derslerde kullanılan veyahut önerilen kitapların ODTÜ Kütüphanesine dönem başladığı tarihte eklenmesi, derslerin podcast tarzında dinlenebilecek formatlarda da öğrencilere sunulması gibi öğrencilere öğrenme yolları için esneklik sağlayan çözümler ise, eğitim kalitesini arttıracaktır.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--blockquote&quot; id=&quot;b88a&quot; name=&quot;b88a&quot;&gt;
      Problemler#3: İletişim
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;da4b&quot; name=&quot;da4b&quot;&gt;
      Yanıtlarda gözlemlediğimiz en büyük problemlerden bir diğeri ise, iletişim. Öğrencilerin hocalarla ve asistanlarla iletişimlerinden paylaştığı kesitler yer yer hoca öğrenci arasındaki iletişimin ne kadar zayıfladığına dair korkutucu bir senaryo çiziyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a1fe&quot; name=&quot;a1fe&quot;&gt;
      Cevap verilmeyen maillerin yanı sıra, sınavların itirazlarının yapılmadığı, atılan maillere gelen “bu benim problemim değil” tarzında yeterli empatiyi ve çabayı gösteremeyen durumlar mevcut. Elbette ki hocalarımızın da bu dönemde çok yorulduğunun ve çaba gösterdiğinin de farkındayız, ama bu durumun sonucunun aradaki iletişimin bu denli kopması olmaması gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;4e3a&quot; name=&quot;4e3a&quot;&gt;
      Çözümler#3: İletişim
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;db91&quot; name=&quot;db91&quot;&gt;
      Hoca öğrenci arasındaki iletişimin güçlendirilmesi için, daha sık ve daha yapıcı geri besleme(feedback) seanslarının sağlanması gerekiyor. Düzenli olarak açık ve işleyen bir feedback sisteminin kurulması, öğrencileri ciddi anlamda rahatlatacaktır. Elbette bu tür problemler hocalara ders esnasında veyahut sonrasında mail ile iletilebilir, ancak hocaların bu tür yorumlara açık fikirle tarafsız yaklaşacaklarını öğrencilere açık şekilde beyan etmeleri, öğrencilerin bu yorumları daha tarafsız ve yapıcı yapabilmelerine yardımcı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;f4c1&quot; name=&quot;f4c1&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Buna ekstra olarak, Bilgisayar Mühendisliği bölümünde yapılan dönem ortası toplantıları tarzında hocaların ve öğrencilerin gerek toplu, gerekirse önden seçilmiş bir temsil kurulu ile bir araya geldikleri ve problemleri açık bir şekilde masaya koydukları demokratik iletişim sistemlerine ihtiyacımız var. Bu sistemler, tarafların birbirlerinden uzaklaşmalarını ve empati yoksunu bir duruma düşmelerini engelliyor, sıkıntıların hızlı bir şekilde keşfedilip çözülmesine dair adımlar atılmasını kolaylaştırıyor.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;a79c&quot; name=&quot;a79c&quot;&gt;
      Aynı şekilde toplantılar ve sistemler bölümler, fakülteler ve hatta okul çapında da tasarlanır ise öğrencilerin tecrübe ettiği problemler çok daha çevik şekilde çözüme kavuşabileceklerdir.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2500&quot; name=&quot;2500&quot;&gt;
      Genel Çeşitli Öneriler
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5944&quot; name=&quot;5944&quot;&gt;
      Bu kısımda, spesifik olarak üstünde durulan problemlere öneriler sunmak yerine, yanıtlarda verilen önerileri, veyahut sistemsel değişiklik önerilerini konuşacağız.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;57e6&quot; name=&quot;57e6&quot;&gt;
      Öneriler#1: Sınav Yerine Take Home Exam ve Projelerin Verilmesi
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;3745&quot; name=&quot;3745&quot;&gt;
      Pek çok derste, hala geleneksel sistemdeki sınav mantalitesi hakim. Derslerin bir kısmında sınavlar kapalı kitap(closed book), cevaplar ise çoktan seçmeli veyahut işlemsiz, sadece cevap kutucuğu olan sınavlar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9067&quot; name=&quot;9067&quot;&gt;
      Sınavlar, doğaları itibariyle öğretmeyi değil, ölçmeyi hedefleyen, kısıtlı bir sürede öğrencinin derste anlatılanları ne kadar kavradığına dair bir fikir edinmeyi amaçlayan, bu fikre dayalı notlandırma yapılan sistemler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2266&quot; name=&quot;2266&quot;&gt;
      Diğer yandan, THE ve Proje gibi sistemler öğrencinin pratik yeterliliğini ölçmenin yanı sıra, öğrenciyi araştırmaya ve öğrenmeye iten, 2 saatlik bir zaman diliminden ziyade 1 gün ila 1 ay arasında uzun sürelere yayılabilen sistemler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fbfd&quot; name=&quot;fbfd&quot;&gt;
      Uzaktan eğitimde sınavların ölçücülüğü gidiş yolundan puan alınmaması ve artan kopya oranları sebebiyle ciddi derecede düşmüş durumda. Bu noktada öğrenciler tarafında sıkça ortaya atılan bir öneri daha çok THE yapılması, derslerin daha proje odaklı olması. THE’lar kopya probleminden kurtulmuş olmamakla birlikte, cevapların bir sayıdan ziyade bir mantaliteye, bir çözüm yoluna odaklı olduğundan dolayı, hem kopya tespiti daha kolay, hem de kopyanın daha zor ve uğraştırıcı olduğu sistemler.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;441e&quot; name=&quot;441e&quot;&gt;
      Öneriler#2: Dönem Araları(Spring&#x2F;Fall Breaks)
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;f167&quot; name=&quot;f167&quot;&gt;
      Diğer pek çok okulda var olan, ancak ODTÜ’de bundan önceki yıllarda var olmayan bir kültür olarak, dönem arasında 1 haftalık bir tatil sağlanması.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;76ed&quot; name=&quot;76ed&quot;&gt;
      Bahsettiğimiz problemlerden pek çoğu, öğrencilerin psikolojik ve ruhsal durumlarıyla çok yakından ilintili. Bu problemlere karşı öğrencilere psikolojik destek sağlamak, daha esnek sistemler oluşturmak gibi pek çok faydalı fikir olmakla birlikte insanın psikolojisini rahatlatan en önemli etkenlerden bir tanesi ise boş bir zihin, boş bir hafta.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;4c67&quot; name=&quot;4c67&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Küçük bir ara, özellikle psikolojik yükün bu derece ağır olduğu dönemlerde, öğrencilerin kendilerini deşarj etmesini, stres seviyelerini azaltmasını, moral ve motivasyon kazanmasını sağlayabilir.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--blockquote&quot; id=&quot;7059&quot; name=&quot;7059&quot;&gt;
      Öneriler#3: Ekstra Dersten Çekilme&#x2F;Ders Silme Haklarının Verilmesi
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;300e&quot; name=&quot;300e&quot;&gt;
      Geçtiğimiz dönemde verilen öğrenciyi rahatlatıcı imkanlardan bir tanesi öğrenciye fazladan ders silme(drop) haklarının verilmesiydi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4a9b&quot; name=&quot;4a9b&quot;&gt;
      Bu dönem de, Boğaziçi Üniversitesi’nin sağladığı gibi ekstradan bir dersten çekilme, veyahut geçen dönem sağlanan ders silme imkanlarının verilmesi, öğrenciler üzerindeki psikolojik yükü azaltacaktır.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;8383&quot; name=&quot;8383&quot;&gt;
      Öneriler#4: Pass&#x2F;Fail
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;78b4&quot; name=&quot;78b4&quot;&gt;
      Bahsettiğimiz gibi pass&#x2F;fail sistemi, öğrencilerin çok önemli bir yüzdesinin geçen dönem faydalı bulduğu, bu dönem uygulanmasını da faydalı olarak gördüğü bir sistem.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a2a5&quot; name=&quot;a2a5&quot;&gt;
      Pass&#x2F;Fail sisteminin dünya çapında çok farklı uygulamaları olmakla birlikte, bizce öğrenciye seçme hakkı veren herhangi bir sistem öğrencinin korkularını hafifletecek, üzerindeki yükü azaltacaktır. Tasarlanacak sistemin önceki dönemden, diğer okullardan alınan tecrübeler sonucunda öğrencilere ivedilikle iletilmesi, bu konu üzerinde üniversite senatosunun hızlı bir süreç işletmesi öğrencileri final dönemine yaklaşan mental olarak ağır süreçte rahatlatacaktır.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;adbb&quot; name=&quot;adbb&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;768&quot; data-image-id=&quot;1*sx_UsvU2-z8xwhRbmw2W5Q.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1024&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*sx_UsvU2-z8xwhRbmw2W5Q.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;2634&quot; name=&quot;2634&quot;&gt;
      Son Söz
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;651c&quot; name=&quot;651c&quot;&gt;
      Bu yazıda pek çok problemden ve pek çok çözüm önerisinden bahsediyoruz. Bu ortaya atılan çözümler elbette öğrencilerin toplu bir iradesi değil, ancak buna mümkün olduğunca yakın bir şekilde oluşturulmaya çalışıldı, elbette yazarların da insan ve öğrenci olması neticesinde, belli ön yargılar, belli yönelimler olacaktır, bunun için hepinizden özür diliyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fa2b&quot; name=&quot;fa2b&quot;&gt;
      Yazı boyunca dikkat edilmesi gereken en önemli nokta, tüm öğrencilerin psikolojik olarak eşi benzeri görülmemiş bir yük altında bulunması. Covid-19 sebebiyle içinde bulunduğumuz durum, yaşadığımız her türlü stresi katlarca arttırıyor, motivasyonumuzu kırıyor, geleceğe dair umutlarımıza gem vuruyor. Bu süreçte, öğrencilerin seslerinin dinlendiğini hissetmesi, problemlerinin masaya koyulması, öğrencilerin de içine mümkün olduğunca katıldığı, şeffaf bir tartışmanın ortaya konulması, ve öğrencilerin önerdiği çözüm önerilerinin, mümkün olduğunca uygulanması, uygulanmaması durumunda sebeplerin yine açıkça belirtilmesi ile öğrencilerin görüşlerine değer verilmediği gibi bir bakış açısının ortaya çıkmaması gerekiyor.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p graf--trailing&quot; id=&quot;724c&quot; name=&quot;724c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--blockquote-em&quot;&gt;
        Bu sebeple, bu yazıyı paylaştığımız yetkili mercilerden, akademisyenlerimizden, bölüm başkanlarımızdan, dekanlarımızdan ve üniversite yönetiminden, yazıyı mümkün olduğunca yapıcı görmelerini, eleştirileri kişisel değil, sistemsel algılamalarını, öğrencileriyle bu konuda hızlıca iletişime geçip, görüşlerini almalarını ve önümüzdeki final dönemini, belki de uzaktan eğitimle geçecek bir dönemi daha iyi hale getirmek için çalışmalarını rica ediyoruz.
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;1dd5c809aaea&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-12-23T19:04:20.261Z&quot;&gt;
     December 23, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;odt%C3%BCde-uzaktan-e%C4%9Fitim-d%C3%B6nemi-nas%C4%B1l-ge%C3%A7iyor-1dd5c809aaea&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Lisans Araştırmaları: Giriş Rehberi</title>
        <published>2020-12-17T00:00:00+00:00</published>
        <updated>2020-12-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/lisans-arastirmalari-giris-rehberi/"/>
        <id>https://alperenkeles.com/posts/lisans-arastirmalari-giris-rehberi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/lisans-arastirmalari-giris-rehberi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;54b5&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;72b4&quot; name=&quot;72b4&quot;&gt;
      Lisans Araştırmaları: Giriş Rehberi
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;dc1c&quot; name=&quot;dc1c&quot;&gt;
      Bu yazıya küçük bir dipnotla başlamak iyi olacaktır diye düşünüyorum. Elbette ki kendime bir araştırmacı diyecek niteliklere sahip değilim. Bu işe benden çok daha vakit harcayan, içerdiği zorlukları ve fırsatları çok daha iyi bilen pek çok kişiyi de tanıma fırsatı buldum. Ben bu yazıda, kendi bakış açımdan sizlere faydalı olabileceğini düşündüğüm pek çok konudan bahsetmeye çalışacağım, her zaman haklı olmayabilirim ya da anlattığım doğru olmayabilir, bu durumlar için şimdiden sizlerden özür diliyor, böyle bir duruma düştüğümü fark ederseniz benle iletişime geçmenizi en içten duygularımla rica ediyorum.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;06b6&quot; name=&quot;06b6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;400&quot; data-image-id=&quot;1*tnQJtvXmetzuAesza8eqww.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*tnQJtvXmetzuAesza8eqww.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;5ad0&quot; name=&quot;5ad0&quot;&gt;
      Lisans Araştırması Nedir
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6c52&quot; name=&quot;6c52&quot;&gt;
      Bildiğiniz gibi her geçen yıl hem sektörde hem de hayatta standartlar daha da yükseliyor, başarının sınırları yeniden çiziliyor, bizden öncekilerden daha fazlasını bilmemiz, daha çok çalışmamız, daha iyi işler yapmamız bekleniyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;32fe&quot; name=&quot;32fe&quot;&gt;
      20 yıl önce bir lise diplomasının yettiği durumlara artık üniversite diploması istenirken, bir zamanlar staj gerekliliği yokken günümüzde 2 stajın yetersiz görülmesi, üzerine 3–4. stajların beklenmesi de köklü değişimin en ciddi örneklerinden bazıları.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6a9d&quot; name=&quot;6a9d&quot;&gt;
      Hal böyleyken, elbette akademi de eskiden bulunduğu yerde durmuyor. Bir zamanlar iyi bir ortalamayla mezun olmanın başarılı bir öğrenci olmak anlamına geldiği üniversitelerde artık yaptığımız projelerin yanı sıra, lisans araştırmaları denen görece yeni bir kavramla karşı karşıyayız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;23d2&quot; name=&quot;23d2&quot;&gt;
      Elbette önceki yıllarda da lisans araştırmaları kavramı mevcuttu, ancak bir zamanlar seçkin birtakım öğrencinin içinde bulunduğu bu komünite zamanla ana akım bir hal almaya başladı, önümüzdeki yıllardaysa iyi bir öğrenci sayılmak için en önemli gerekliliklerden birisi olacak gibi duruyor, yazının ilerisinde de bahsedeceğim gibi yüksek lisans&#x2F;doktora başvurularında vazgeçilmez bir noktaya çoktan gelmiş bulunmakta.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;780c&quot; name=&quot;780c&quot;&gt;
      Tarihinden ve öneminden bahsettik, biraz da ne olduğuna değinmek gerek. Lisans Araştırması, üniversite öğrencilerinin lisans öğrenimleri döneminde bölümlerindeki akademisyenlerle birlikte, onların projelerine katkıda bulundukları, onlarla birlikte akademik projeler üzerine çalıştıkları ve sonucunda makaleye doğru ilerleyen bir süreç.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1f59&quot; name=&quot;1f59&quot;&gt;
      Yüksek Lisans&#x2F;Doktora ve iş başvurularında öğrenciyi ciddi anlamda öne geçiren bir süreç olmasının yanı sıra hem öğretici, hem vizyon açıcı, hem yorucu, hem de eğlendirici bir süreç. Yazıya önce kendi yolculuğum hakkında biraz bilgi vererek başlayacağım, belki kendinizden korkular ya da benzer düşünceler görür, cesaret ve motivasyon kazanırsınız umuduyla.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;5ec1&quot; name=&quot;5ec1&quot;&gt;
      Benim Yolculuğum
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;badb&quot; name=&quot;badb&quot;&gt;
      Lise yıllarımda yaptığım TÜBİTAK projelerinin bana kattıkları sonucunda, 1. sınıfta ODTÜ’ye geldiğim andan itibaren bir araştırma projesinde yer almak için çaba gösterdim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;023a&quot; name=&quot;023a&quot;&gt;
      İlk 3 dönemim boyunca 1 hocamla konuşup her seferinde daha “erken” olduğu yorumunu aldıktan sonra, 4. dönemimde başka bir hocanın tecrübesizliğime rağmen ilgimi görerek beni kabul etmesi sonucu, ilk kez üniversite çapında akademik bir çalışmada bulunma imkanı buldum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;be83&quot; name=&quot;be83&quot;&gt;
      Bu çalışma, benim için hayatımda ciddi anlamda yeni bir çağın başlangıcı oldu. Beni çok ciddi şekilde geliştirmesinin yanında, hayal bile edemeyeceğim çok farklı kapılar açtı bana.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a314&quot; name=&quot;a314&quot;&gt;
      Almanya’daki ilk stajım, ilk yayınlanmış makalem, Amerika’daki ikinci stajım, ve şimdi de bir lisans öğrencisi olarak doktoraya başvurabilmem, bunların hepsi iyi niyetli yol gösterici bir hocamın bana duyduğu basit bir güvenin ardından ortaya çıkan çılgın, yorucu, bir o kadar da güzel ve mutluluk dolu bir yolculuğun sonuçları. Hayatımda aldığım en iyi kararlardan birisinin lisansta araştırma yapmak olduğunu düşünüyorum, kendinde bu motivasyonu bulabilecek olan herkese de her aklıma gelen vakitte tavsiye ediyorum, hatırlatıyorum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;90a7&quot; name=&quot;90a7&quot;&gt;
      Lisans Araştırması Yapmak Size Ne Katar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;c671&quot; name=&quot;c671&quot;&gt;
      Bu noktada fırsatları bir kenara bırakıp, kişilik olarak size neler kattığını, sizi nasıl değiştirdiğini anlatmaya çalışacağım biraz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e766&quot; name=&quot;e766&quot;&gt;
      Öncelikle gerçek bir araştırma problemiyle uğraşmaya başlamadan önce aklınıza tutmanız gereken bir şey var.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;bc97&quot; name=&quot;bc97&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Şu ana kadar üzerinde çalıştığınız tüm problemlerin bir çözümü vardı, artık yok.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;1c25&quot; name=&quot;1c25&quot;&gt;
      Araştırma problemleri, doğaları gereği yeni bir ufuk, yeni bir bakış açısı, daha önce keşfedilmemiş bir yol içerir. Bu yolda ilerlerken, yeri geldiğinde saçlarınızı yolacak, yeri geldiğinde bir çözüm bulduğunuzda sevinçten çığlıklar atacak, yeri geldiğinde elinizdeki kalemi bir kenara atıp pes edecek, yeri geldiğindeyse kendinizi toplayıp, bilimi bir adım daha ileri götürme fırsatı bulacaksınız.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;c7a8&quot; name=&quot;c7a8&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Okumanız, okuduğunuzu anlamanız, anladığınızı özümsemeniz gerekecek.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;98b3&quot; name=&quot;98b3&quot;&gt;
      Düşündüklerinizi somutlaştırmayı, başkalarına anlatmayı, hatalarınızı kabul etmeyi, yapıcı eleştiriyi kabul etmeyi ve yapıcı eleştiri verebilmeyi öğreneceksiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c133&quot; name=&quot;c133&quot;&gt;
      Sizden yıllarca daha tecrübeli insanların bakış açılarını birebir görebilme, onlardan öğrenebilme fırsatınız olacak. Belki de hayatınızda ilk kez kendinize mentör dediğiniz birilerini bulacaksınız, siz ne zaman hata yaptım deyip kabuğunuza çekilmeye kalksanız, sizi cesaretlendirip bir adım daha atabilmenizi sağlayacaklar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;80fd&quot; name=&quot;80fd&quot;&gt;
      Hayatınızda gördüğünüzden çok daha kompleks teoriler okuyacak, anlamaya ihtimal bile vermeyeceğiniz konuları anlayacaksınız, kendinizi o kadar geliştireceksiniz ki, hayallerinizin bile ötesinde başarılara sahip olabilme şansınızın olduğunu görecek, yarınınıza dair umutlarınızı güçlendirecek, gözlerinizi dünyaya daha bir geniş açacaksınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9dee&quot; name=&quot;9dee&quot;&gt;
      Lisansta araştırma yapmanın insana sağladığı fırsatlar, faydalar saymakla bitmez, ancak elbette bilmek gerek ki bunların hiçbirisi bedelsiz gelmeyecek. Bu motivasyona sahipseniz kendinizi yormanız, vaktinizi ve enerjinizi harcamanız gerekecek, gelin biraz da bundan bahsedelim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;4481&quot; name=&quot;4481&quot;&gt;
      Lisans Araştırması Yapmak Size Ne Kaybettirir
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;99dc&quot; name=&quot;99dc&quot;&gt;
      Üniversite yüzlerce farklı fırsata sahip, sizi kararsız bırakan, yeri geldiğinde pişmanlığa uğratan bir ortam. Topluluklara katılıp turnuvalara gidebilir, yardım kampanyalarına yardım edebilir, sizle aynı ilgiye sahip insanlarla eğlenebilir, binlerce kişinin katılacağı etkinliklerin organizasyonunda yer alabilirsiniz; erken yaşta işe atılabilir, kazandığınız parayla pek çok kişinin hayal edemeyeceği kadar güzel ve rahat bir üniversite hayatı yaşayabilirsiniz; derslerinize düzenli ve odaklı şekilde ilerleyip, mezuniyetten sonra iyi bir şirkette işe girme şansınızı arttırabilirsiniz; gençlik yıllarım bir daha mı gelecek deyip, kendinizi eğlenmeye, dinlenmeye, kendinizi keşfetmeye ayırabilirsiniz; benim yazımı okuyup, bu da güzel bir şeymiş aslında deyip lisansta araştırma yapmaya atılabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;blockquote class=&quot;graf graf--blockquote graf-after--p&quot; id=&quot;238d&quot; name=&quot;238d&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--blockquote-strong&quot;&gt;
       Ama bunların hepsini aynı anda yapamazsınız.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;blockquote&gt;
     &lt;p class=&quot;graf graf--p graf-after--blockquote&quot; id=&quot;7066&quot; name=&quot;7066&quot;&gt;
      Her ne olursa olsun, gün 24 saat haftaysa 7 gün. Derslerinizi geçmeniz, hayatınızı yaşamanız, sosyal hayatınızı dengelemeniz gerek. Bu zaman yönetimi herkes için farklı olmakla birlikte, önceliklerinizi belirlerken lisans araştırmalarına ciddi bir önem vermezseniz, maalesef sonunda bir noktaya gelmeniz çok da mümkün olmayabilir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;85d4&quot; name=&quot;85d4&quot;&gt;
      Lisans araştırması, ciddi bir şahsi motivasyonun yanı sıra iyi bir gelişim için ciddi bir vakit gerektirmekle birlikte, kısa vadede sonuçlarını çok da fark edebileceğiniz bir süreç değil. Bu sürece ciddi emek gösterip, kendi vaktinizden harcadığınızda, iyi sonuçlar alabileceğinizi şahsi gözlemlerimle çok yüksek ihtimallerle garanti edebilsem de, elbette sonunda alacağınız karar sizin.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;608f&quot; name=&quot;608f&quot;&gt;
      Bu yüzden, lisans araştırması gibi bir sürece adım atmadan önce, kendi kendinize öz eleştiri yapmanızı, geleceğe dair umutlarınızı değerlendirmenizi, bunun sürecinde hocalarınızla iletişime geçip bir sürece başlamanızı tavsiye ediyorum, böylesi bence çok daha yararlı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;44f8&quot; name=&quot;44f8&quot;&gt;
      Yüksek Lisans &#x2F; Doktora ile Lisans Araştırması İlişkisi
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;b8d2&quot; name=&quot;b8d2&quot;&gt;
      Bir lisans araştırmasına giriş sürecine geçmeden önce, son bir dem motivasyon üzerine konuşalım. Lisans Araştırmaları, yüksek lisans&#x2F;doktora başvurularındaki en önemli faktörlerden bir tanesi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a452&quot; name=&quot;a452&quot;&gt;
      Lisansta araştırma yapmak, okulun alım komitesine sizin akademi ile daha önce ilgilendiğinizi, kararınızı gözü kapalı bir seçimden ziyade belli bir tecrübe üzerine verdiğinizi gösterir. Buna ek olarak, projenizin sonuçlarının halka açık bir proje olarak paylaşılması, sizin daha önceden yaptığınız işlerin şeffaf şekilde sunulmasını özgeçmişinizde yazan 2 cümleden çok daha derin ve detaylı şekilde sağlar.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4548&quot; name=&quot;4548&quot;&gt;
      Bu başvurularda, iki ya da üç farklı kişiden referans istenir, bu referansların akademiden olması ve sizi iyi tanıması çok ciddi faydalıdır. Staj yaptığınız iş yerindeki mentörünüzdense, dersini aldığınız, sonrasında birlikte çalışma yaptığınız profesörünüzün size yazdığı referans mektubu, sizi çok daha ileri atacaktır. Aynı şekilde, son dakika referans mektubu arayışına kapılan pek çok kişi daha önce iyi notlar aldıkları ya da derste parladıklarını düşündükleri hocalarıyla iletişime geçecekken, sizin sizi birebirde tanıyan, karakterinizi ve düşüncelerinizi bilen, sizle ilgili samimi, gerçekçi ve güçlü bir referans mektubu yazabilecek bir hocaya sahip olmanız, hem sizin motivasyonunuzu ve özgüveninizi arttıracak, hem de başvurunuzu güçlendirecektir.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;2aec&quot; name=&quot;2aec&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;700&quot; data-image-id=&quot;1*g7MD3G5Uwdhvf7w9pyrHZg.jpeg&quot; data-width=&quot;1000&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*g7MD3G5Uwdhvf7w9pyrHZg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;5b78&quot; name=&quot;5b78&quot;&gt;
      Konu ve Hoca Seçimi
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;e965&quot; name=&quot;e965&quot;&gt;
      Bu noktada, artık araştırma yapmak istediğinizi, bu konuda kendinizi motive ettiğinizi varsayalım. Bölümünüzde pek çok akademisyen var, çoğunu tanımıyorsunuz, konularına baktığınızda size hem yabancı, hem de korkutucu geliyor, hangi akademisyenle çalışmalısınız, kimle iletişime geçmelisiniz?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dc58&quot; name=&quot;dc58&quot;&gt;
      Özellikle 1 ve 2. sınıfta, spesifik konularda ders almamış bir lisans öğrencisi olarak bir alan seçimi yapmanız ciddi anlamda zor. Üçüncü sınıfta bile konuların yalnızca giriş derslerini almış, ileri seviyede branşlaşmaya karşı genelde pek de bilgi sahibi olmuyoruz, bu sebeplerden dolayı hoca seçiminin yanı sıra konu seçimi de ciddi bir problem haline geliyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fc7d&quot; name=&quot;fc7d&quot;&gt;
      Bu noktada alabileceğiniz birkaç aksiyon var. Bunlardan en basiti üst dönemlerden konularla ve alanlarla ilgili bilgi almak. Belki şanslıysanız daha önce araştırma yapan birilerine denk gelirsiniz(ben gelmiştim) ve onlardan konular ve hocaların yanı sıra sizin bölümünüzde bu süreçlerin işlenmesi üzerine bilgi alabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3032&quot; name=&quot;3032&quot;&gt;
      Bir sonraki noktada, tanıdığınız mezun varsa onlarla konuşabilir, diğer durumlarda internetten bölümünüzden çıktığınızda yapabileceklerinize dair blogları, videoları, bilgilendirici yazıları araştırabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d93c&quot; name=&quot;d93c&quot;&gt;
      Bu iki yöntem daha az korkutucu olmakla birlikte, elbette her zaman mümkün olmayabilir. Bu noktada daha önce dersini aldığınız herhangi bir hocayla ya da lisans danışmanınızla iletişime geçerseniz, size çok yüksek ihtimalle seve seve yardım edecektir. Hocalar alan önermenin yanı sıra, size kendileriyle birlikte çalışma fırsatı verebilir, ya da diğer hocaları önerebilirler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3ddf&quot; name=&quot;3ddf&quot;&gt;
      Bu süreçteki en önemli noktalardan birisi ise pes etmemeniz gerek, pek çok mesajınız, e-postanız cevapsız kalabilir, dürtmeye, başkalarını arayıp yazmaya devam edin. Benim twitter üzerinden yurt dışındaki pek çok hocayla bile konuşmuşluğum, danışmışlığım var defalarca. Genel kanının aksine, pek çok akademisyen egoist olmaktan bir o kadar uzak, çok da mütevazi, fedakar ve yardımsever insanlar. İlgili ve samimi bir öğrenciye yardım etmekten çekinmeyeceklerine size garanti verebilirim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;e150&quot; name=&quot;e150&quot;&gt;
      Hocalarla İletişime Geçmek
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;72bb&quot; name=&quot;72bb&quot;&gt;
      Belki günlerce araştırdınız, yeterli cesareti bulmak için haftalarınızı harcadınız ve sonunda anlaşabileceğinizi düşündüğünüz, belki konularının, belki de kendisinin sizin için uygun olduğunu gördüğünüz bir hoca buldunuz, ne yapmalısınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;14e5&quot; name=&quot;14e5&quot;&gt;
      Yapabileceğiniz ilk ve en iyi şey kendisiyle en kısa sürede yüz yüze konuşmak. Bir dersinin çıkışında olur, bahçede çay içerken karşılaştığınızda, bölümde otururken aklınıza geldiğinde odasının kapısına tıklayarak. Bu konuşmadaki amaç, bir sonraki aşamada atacağınız mailin bir yüz ile eşleştirilmesini, hocanın sizinle ilgili bir ön izlenim sahibi olmasını sağlamak olmalı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bef3&quot; name=&quot;bef3&quot;&gt;
      Hocaya böyle bir ilginiz olduğundan, onun için uygun olan herhangi bir günde görüşmenizin sizin için çok faydalı olabileceğinden bahsedin, ve eğer onun için de uygunsa mail ile iletişime geçip geçemeyeceğinizi sorun.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2cc1&quot; name=&quot;2cc1&quot;&gt;
      Bu görüşmenin sonunda eğer pozitif bir cevap alırsanız, hocayla iletişime geçebilir, uygun bir günde buluşma ayarlayabilirsiniz. Bu buluşmada, mümkün olduğunca samimi olmalı, kendinizi olmadığınız biri gibi göstermekten, yapmadığınız şeyleri yapmış ya da bilmediklerinizi biliyormuş gibi görünmeye çalışmaktan kesinlikle kaçınmalısınız. Pek çok kez unutulsa da, o zamana kadar binlerce öğrenci tanımış, sizin üzerinize yaklaşık 30 yıllık bir hayat tecrübesine sahip, en az sizin kadar, yüksek ihtimalle sizden çok daha zeki bu insanları kandırmaya çalışmak, çoğu zaman beyhude olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8f2d&quot; name=&quot;8f2d&quot;&gt;
      Eğer reddedilirseniz, pes etmeyin. Farklı hocalarla iletişime geçmeye devam edin, motivasyonunuzu kaybetmeyin, hatta ve hatta bunu diyecek kadar ileri gideyim beni hatırlayın. 3 dönem boyunca aynı hocaya sorup reddedildikten sonra, şanslı bir anda başka bir hocayla çalışmamın benim yolumu nasıl değiştirdiğinizi hatırlayın, siz de kendi yolunuzu değiştirin, kendinize çok daha iyi, çok daha parlak bir gelecek çizin.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;72e3&quot; name=&quot;72e3&quot;&gt;
      Eğer yüz yüze görüşme şansınız hiç yoksa, hocanıza ilginizi ve alakanızı sebepleriyle uzatan az ve öz bir mail ile ulaşabilirsiniz, cevap gelmezse 1 haftaya yakın bir süre sonra dürtme maili atmaktan çekinmeyin, kaba olarak görülmekten ziyade bir nezaket olarak görülür.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6c68&quot; name=&quot;6c68&quot;&gt;
      Mail Taslağı
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;69ad&quot; name=&quot;69ad&quot;&gt;
      Sizlere küçük bir mail taslağı verip, son sözlerimi yazıp yazımı bitireyim.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;cc1a&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;8343&quot; name=&quot;8343&quot;&gt;
      Merhabalar Sayın __ Hocam,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d9f5&quot; name=&quot;d9f5&quot;&gt;
      Ben Alperen Keleş, ODTÜ Bilgisayar Mühendisliği 4. sınıf öğrencisiyim. Yakın zamanlarda bir lisans öğrencisi olarak akademik çalışmalarda rol alabileceğimizi öğrendim, bölümümüzdeki branşlaşma imkanlarını araştırdığımda sizin alanınız olan ____’in benim için uygun olabileceğini düşündüm. Eğer sizin için de uygun olursa müsait bir zamanınızda sizle görüşmeyi, sizin çalışmalarınıza rol almayı çok isterim. Eğer ilgilenirseniz transkript ve özgeçmişimi de mailime ekliyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0a5d&quot; name=&quot;0a5d&quot;&gt;
      Saygılarımla,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;ff78&quot; name=&quot;ff78&quot;&gt;
      Alperen Keleş
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;2077&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;44c9&quot; name=&quot;44c9&quot;&gt;
      Yukarıdaki gibi basit bir mailin ne kadar güçlü olduğunu bilseniz şaşırırsınız. Kendinize göre kişiselleştirin, gerekli detayları ekleyin, ve hocalarınızla iletişime geçin. Bu noktada tek uyarım, lütfen ve lütfen insanları spamlamayın. Karşınızdaki insanlar da birbirleriyle iletişim halinde, bunu yaptığınızda fark edecek kadar da zeki insanlar, ilginizi çeken hocalara mail atmanız pekala yeterli olacaktır.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2827&quot; name=&quot;2827&quot;&gt;
      Kapanış
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;efa7&quot; name=&quot;efa7&quot;&gt;
      Lisans araştırması, yazıda defalarca bahsettiğim gibi bir insanın girebileceği en güzel ve önü en açık yollardan birisi. Kendinizde farklı yönler keşfedecek, hayatı farklı açılardan görme fırsatı yakalayacak, normalde tanımayacağınız pek çok insanla tanışacak, hayal etmeyeceğiniz imkanlarla karşılaşacaksınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;17a6&quot; name=&quot;17a6&quot;&gt;
      Normalde bu yazıya, araştırmaya başladıktan sonraki süreçle ilgili bilgileri de koyacaktım, ancak bunu bir giriş rehberi yapmanın daha uygun olacağına karar verdim. En kısa zamanda devamını da yazıp, sizlere akademiye girişteki zorlukları yenmeyi, önünüzdeki görmediğiniz fırsatları görmeyi göstermeye çalışacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;a56c&quot; name=&quot;a56c&quot;&gt;
      Buraya kadar okuduğunuz, benle olduğunuz için çok teşekkürler. Yorumlarınız ve sorularınız için bana her zaman alpkeles99@gmail.com adresinden ulaşabilirsiniz.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;b43751605de3&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-12-17T20:39:31.168Z&quot;&gt;
     December 17, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;lisans-ara%C5%9Ft%C4%B1rmalar%C4%B1-giri%C5%9F-rehberi-b43751605de3&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Post-Covid Monologları#1: Unutulan Vedalar</title>
        <published>2020-12-12T00:00:00+00:00</published>
        <updated>2020-12-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/postcovid-monologlari1-unutulan-vedalar/"/>
        <id>https://alperenkeles.com/posts/postcovid-monologlari1-unutulan-vedalar/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/postcovid-monologlari1-unutulan-vedalar/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;f568&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;731a&quot; name=&quot;731a&quot;&gt;
      Post-Covid Monologları#1: Unutulan Vedalar
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;1822&quot; name=&quot;1822&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;938&quot; data-image-id=&quot;1*Sqwzlii_QwykSTp9ztfCAg.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1405&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*Sqwzlii_QwykSTp9ztfCAg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;fa8e&quot; name=&quot;fa8e&quot;&gt;
      Salgının 9. ayını geçirdiğimiz şu günlerde, her geçen gün bir öncekinden daha ağır, daha yorucu, daha zor geçiyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;077d&quot; name=&quot;077d&quot;&gt;
      Geçmişte alınmayan önlemlerin, bilinçsizce yapılan hareketlerin yanı sıra, bilime doğru zamanda yapılmayan yatırımların da bedelini ödüyoruz şu an. Okullarımız kapalı, evlerimizde dört duvar arasına tıkılmış, ne dışarıda yürüyüşe, ne markete alışverişe gidemeyecek bir hale geldik.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cab6&quot; name=&quot;cab6&quot;&gt;
      Peki bu yolun sonu nereye gidecek diye sormak istiyor insan, üç haftalık bir ara tatil olarak çıktığımız yolculuğa çevrim içi bir döneminden ardından uzaktan stajlarla devam ettik, bazılarımız uzaktan eğitimle mezun oldular, bir kısmımız ise acaba biz de mi mezuniyetimizi göremeyeceğiz korkusuyla devam ediyoruz hayatlarımıza.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3045&quot; name=&quot;3045&quot;&gt;
      Hep denir, hep deriz, yarın ne olacağını bilemezsin. Her insanı bir son görüşümüz vardır mesela, o çok sevdiğiniz öğretmeninizle son görüşmenizi hatırlıyor musunuz, ya da lisede o mezuniyetten sonra bir daha hiç görmediğiniz, konuşmadığınız, aslında çok sevdiğiniz ama samimi olmadığınız arkadaşlarınızla vedalaştığınız anı?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a196&quot; name=&quot;a196&quot;&gt;
      O son gün, o günlerden birisiydi işte. Çok net hatırlıyorum o anı, bir yurt kantininde arkadaşımın doğum gününü kutluyorduk, aynı masada gülüyorduk, eğleniyorduk, sarılıyorduk… Hayal bile edemezdik bugünü, sorsalar güler geçer, dalgaya vururduk.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;655f&quot; name=&quot;655f&quot;&gt;
      Anılar, yaşanmışlıklar, daha da önemlisi yaşanamayanlar üzüyor beni. Hayatımın en güzel yıllarının esaret içinde geçmesi üzüyor, yarını bilememek üzüyor, bir mucizeye bel bağlamak üzüyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;dc7e&quot; name=&quot;dc7e&quot;&gt;
      Kaybedilen umutlar, kaçırılan fırsatlar, bir daha gelmeyecek anılar, her şeyden daha önemlisiyse, unutulan vedalar üzüyor.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;685f87f1835a&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-12-12T22:28:20.468Z&quot;&gt;
     December 12, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;post-covid-monologlar%C4%B1-1-unutulan-vedalar-685f87f1835a&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yurt Dışı Staj: Genişletilmiş Rehber</title>
        <published>2020-12-09T00:00:00+00:00</published>
        <updated>2020-12-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yurt-disi-staj-genisletilmis-rehber/"/>
        <id>https://alperenkeles.com/posts/yurt-disi-staj-genisletilmis-rehber/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yurt-disi-staj-genisletilmis-rehber/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;a6da&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;9a20&quot; name=&quot;9a20&quot;&gt;
      Yurt Dışı Staj: Genişletilmiş Rehber
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8179&quot; name=&quot;8179&quot;&gt;
      İlk yurt dışı stajıma gittiğimde, küçük çaplı bir yurt dışı staj yazısı yazmaya çabalamıştım, görece başarısız sonucumu şuradan görebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;f700&quot; name=&quot;f700&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1nda-staj-2fb07a69362&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1nda-staj-2fb07a69362&quot; title=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1nda-staj-2fb07a69362&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        Yurt Dışında Staj
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        Öncelikle merhabalar, bu yazıyı okuyorsanız, bu demektir ki hayatta şu ana kadar kurduğunuz konfor alanının dışına…
       &lt;&#x2F;em&gt;
       alpkeles99.medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;0462b55fc311f93970f1fc3a81cb14d1&quot; data-thumbnail-img-id=&quot;1*_WTxR0xmEcGUKLBmnlQgRQ.png&quot; href=&quot;https:&#x2F;&#x2F;alpkeles99.medium.com&#x2F;yurt-d%C4%B1%C5%9F%C4%B1nda-staj-2fb07a69362&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*_WTxR0xmEcGUKLBmnlQgRQ.png);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;8a76&quot; name=&quot;8a76&quot;&gt;
      Şimdiki denememde, geçen 2 yılın yazı ve staj tecrübelerinin yanı sıra çevremin tecrübelerini de kullanacağım, iyi okumalar.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;318f&quot; name=&quot;318f&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1042&quot; data-image-id=&quot;1*S39Pb4BS3lHYvFquEwAoag.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1875&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*S39Pb4BS3lHYvFquEwAoag.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;ab62&quot; name=&quot;ab62&quot;&gt;
      Ben
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a9a3&quot; name=&quot;a9a3&quot;&gt;
      Yazıya başlamadan önce, bu yazıyı neden yazıyorum, neden yazdıklarım bir anlam ifadeli etmeli kısaca ondan bahsedeyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;29b9&quot; name=&quot;29b9&quot;&gt;
      ODTÜ Bilgisayar Mühendisliği 4. sınıf öğrencisiyim, adım Alperen Keleş, 2. sınıfta Almanya’da bir startup’ta, 3. sınıftaysa Amerika’da bir üniversitenin laboratuvarında yaz stajı yaptım, hayatımdaki başarıların pek çoğunu bu stajların bana kazandırdığı ivme, vizyon ve bilgilere borçluyum. Herkesin bu tecrübeye sahip olma şansını ve bu konuda bilgilendirilmeyi hak ettiğini düşünüyorum, yeterli ilgiye sahip herkesin yurt dışına staja gidebileceğine inanıyorum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6b11&quot; name=&quot;6b11&quot;&gt;
      Ne
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9f1e&quot; name=&quot;9f1e&quot;&gt;
      Bu yazı nedir, ne değildir, öncelikle onu çerçeveleyerek başlamak gerek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dbbe&quot; name=&quot;dbbe&quot;&gt;
      Bu yazı, yaz stajını yapmayı düşünmekte olan herkese faydalı olabilecek olmakla birlikte, mühendislik öğrencileri(özellikle bilgisayar mühendisliği) için fazladan tecrübe ve öneriler içerecek olup, staja gittiğiniz ana kadar olan aşamaları kapsayan kısa bir rehberdir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0622&quot; name=&quot;0622&quot;&gt;
      Staj ve sonrasına dair ayrı bir yazı ilerleyen tarihlerde gelecek.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--hasDropCapModel graf-after--p&quot; id=&quot;bccb&quot; name=&quot;bccb&quot;&gt;
      Neden
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ba1e&quot; name=&quot;ba1e&quot;&gt;
      Yazının ve sürecin ilerisinde göreceğiniz üzere, bu süreç pek çok insanın yarıda bıraktığı veyahutta başlamaya bile kalkışmadığı ağır ve yorucu bir süreç. Neden bununla vaktimi harcayıp uğraşmalıyım sorusunu şu an sormuyorsanız da, yeter deyip bırakmayı düşündüğünüz anlar olacak. Bu bölümün amacı, bu anlarda sizi biraz da olsa motive etmeye çabalamak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;31eb&quot; name=&quot;31eb&quot;&gt;
      Bu motivasyonu, çeşitli alt başlıklar altında örneklendirmek faydalı olacaktır.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;c9e1&quot; name=&quot;c9e1&quot;&gt;
      Yurt Dışı Tecrübesi ve Kültür Şoku
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;6716&quot; name=&quot;6716&quot;&gt;
      Eğer benim gibi daha önce yurt dışında bulunmamış&#x2F;yaşamamış biriyseniz, ilk çıkışınızda 3 aylık bir staja gidiyor olmak size korkutucu geliyor olabilir, en azından bana geliyordu. Bu tecrübenin ne derece öğretici ve değerli olduğunu birtakım örneklerle anlatmaya çabalayacağım.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ebe2&quot; name=&quot;ebe2&quot;&gt;
      Hayatımız boyunca, içinde bulunduğumuz kültüre, inançlara, sistemlere bağlı bir fanusun içinde yaşıyoruz. Yaşadığımız durumlara karşı çok temel belli ön kabullerimiz var. Somut örneklendirmek gerekirse, Türkiye’de herhangi bir market zincirinin pazar günü açık olmamasını ya da her yerin akşam 6 da kapanmasını hayal etmek çok da mümkün değil. Restoranlarda suyun ücretsiz olmasını, marketlerde ise fahiş fiyatlarda satılmasını ya da metro girişlerinde turnike olmamasını düşünmek…
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;aac0&quot; name=&quot;aac0&quot;&gt;
      Bu örnekleri ayrı ayrı aldığımızda çok bir anlam ifade etmiyorlar, ancak toplu bir şekilde tüm hayatım boyunca farkında olmadan kabullendiğim pek çok şeyin sonradan oluşturulmuş yapılar olduğunu, taşa kazınmadığını fark etmek, benim şahsen hayata olan bakış açımı ciddi seviyede değiştirdi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0084&quot; name=&quot;0084&quot;&gt;
      Farklı milletlerden, kültürlerden insanlarla tanıştıkça, farkındalık seviyem gittikçe artmaya başladı. Ortaya konan kabullere, fikirlere çok daha ciddi bir şüpheyle bakmaya başladım. Bu elbette ki sadece bende değil, birlikte gittiğimiz pek çok arkadaşımda da yaşandı, dolayısıyla herkesin gitmesini, gözlerini bu farkındalığa açmasını tavsiye ediyorum.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5111&quot; name=&quot;5111&quot;&gt;
      Konfor Alanı
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;558c&quot; name=&quot;558c&quot;&gt;
      Yurt dışında yaşamak, bizim için yıllarca demir attığımız bir limandan ayrılmak gibi. Türkiye’deki yaşamımızda her şey bilindik, yıllar boyunca özenle ilmek ilmek kurduğumuz alışkanlıklarımıza ölesiye bağlıyız. En sevdiğimiz kısa yol, bayıldığımız kahveci, iki haftada bir gitmezsek sonraki gidişimizde fırça kayan ciğerci… Bir kez yurt dışına çıktığımız anda, tüm bilgilerimiz yok oluyor. Her caddeyi, her insanı, her mekanı ilk kez görüyoruz. Türkiye’de sevebilme ihtimalimizin olduğunu düşünmeyeceğimiz mekanları, aktiviteleri deneyip, sevmeye başlıyoruz. Küçük bir örnek vermek gerekirse, üniversite hayatımın başından itibaren ben hiç gezme alışkanlığına sahip değildim; üç yıl Ankara’da okumama rağmen hiçbir yeri gezmemiştim bile. Ancak Almanya’ya gittiğim andan itibaren, sürekli çevre illeri gezmeye başladım. Akşam yemeğine yarım saatlik trenle Dortmund’da gidip, kahve içmeye Wuppertal’e gittiğim günler oluyordu.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ce54&quot; name=&quot;ce54&quot;&gt;
      Bunları yapabilmemin bir diğer sebebi de, beni burada bağlayan herhangi bir şeyin orada olmamasıydı. Arkadaşlara ya da aileye ayırılan bir zaman, benim yapacaklarımı kendi kafamda limitleyen, beni zincirleyen alışkanlıklar olmayınca, bir anda kendi kendimi tanımaya, keşfetmeye başladım, bunların hiçbirisini tek başıma yabancı bir ülkede olmasaydım ne fark edebilirdim, ne de tahmin.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5310&quot; name=&quot;5310&quot;&gt;
      Uzun Staj Tecrübesi
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;9e4e&quot; name=&quot;9e4e&quot;&gt;
      Bu kısımda şahsi tecrübem ve yakın arkadaşlarımın yoğunluğundan dolayı, mühendislik özelinde yoğunlaşacağım. Kendi çevremden gözlemlediğim kadarıyla, pek çok (özellikle kurumsal) şirket uzun dönem stajlarını tercih etmiyor, birden fazla staj dönemi oluşturup daha fazla stajyer almayı tercih ediyorlar. Maalesef ki 20–30 iş günü süren bir stajda ciddi bir proje üzerine çalışmak, veyahut çalıştığımız konuda çok bir şey öğrenmek de mümkün değil.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8647&quot; name=&quot;8647&quot;&gt;
      Yurt dışı stajları, doğası itibariyle genelde uzun staj niteliğinde bulunduğundan dolayı, hem daha ciddi bir proje üzerine çalışma şansınız yüksek, hem de yüksek ihtimalle çok daha fazla şey öğreneceksiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b61e&quot; name=&quot;b61e&quot;&gt;
      Türkiye’de uzun dönem staj yapıyor bile olsanız, hayatınızın monotonluğu içerisinde 8–5 çalışan bir memura dönüşmektense, her akşam dışarıda gezip yeni sokaklar görebileceğiniz, yeni insanlar tanıyacağınız bir ortamda olabilme şansı, sizin stajdan sıkılma ihtimalinizi de düşürüyor, veriminizi arttırıyor diye düşünmekteyim.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;794f&quot; name=&quot;794f&quot;&gt;
      Ön Yargısız Bir Başlangıç
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;6d5d&quot; name=&quot;6d5d&quot;&gt;
      Buradaki maddeler arasında en subjektifi bu olmakla birlikte, bir kenara not etmenin faydalı olduğuna inanıyorum. Türkiye’de staj yapan arkadaşlarımın çoğuyla konuştuğumda, şirkette bir stajyer olarak fikirlerinin aşırı dikkate alınmadığını, ya da verilen işlerin kapasitesinin altında kalabildiğini gözlemledim. Bunun sebebininse ülkede genel olarak stajyerlere karşı olan toplu bir bilmiyor&#x2F;öğrenecek bakışından kaynaklı olduğunu düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9d21&quot; name=&quot;9d21&quot;&gt;
      2 yazdır yaptığım stajlarda, kendi staj danışmanlarımın ağzımdan çıkan her bir kelimeyi teker teker dinlediğine, benim söylediklerimi dikkate alarak kararlar verdiklerine şahit oldum. 2. sınıf stajımın 1. ayının sonlarına doğru danışmanım beni bir yüksek lisans öğrencisiyle tanıştırdı, o zamana kadar çalıştıklarımdan bahsetmemi istedi, en şaşırtıcı olan kısımsa, ben bahsetmeye başladığımda karşımdaki öğrenci bir anda defter çıkarıp söylediklerimi not almaya başladı. Hayatımda fikirlerime bu kadar değer verildiğini hissettiğim başka bir an hatırlamıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b4f3&quot; name=&quot;b4f3&quot;&gt;
      Dediğim gibi ben şanslı olabilirim, bu yorumlar aşırı subjektif ve tekil maalesef. Ama giden diğer arkadaşlarımdan da duyduğum yorumlar hep benzer şekildeyken, Türkiye’de staj yapan arkadaşlarımdan hiç bu tip yorumlar duyduğumu hatırlamıyorum, aklınızın bir kenarında bulundurmakta çare var.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;5e6f&quot; name=&quot;5e6f&quot;&gt;
      Gelecek Fırsatlar
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;e3e0&quot; name=&quot;e3e0&quot;&gt;
      Eğer bir stajyer olarak iyi performans gösterirseniz, (Türkiye’de de böyledir) şirket sizle sonrasında devam etmek isteyecektir. Türkiye’deki döviz kurunu düşündüğünüz zaman, yurt dışında bir şirkette&#x2F;laboratuvarda çalışmanın ne kadar karlı olduğunu kendi kendinize çözebileceğinizi düşünüyorum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0f66&quot; name=&quot;0f66&quot;&gt;
      Nasıl
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ec70&quot; name=&quot;ec70&quot;&gt;
      Eğer yazıda buraya kadar sıkılmadan geldiyseniz, demektir ki sizi yurt dışında staj yapmanın iyi bir şey olduğuna ikna etmeyi başarmışım. Gelin o halde nerelerde nasıl staj yapabilirsiniz, buna bakalım.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;515d&quot; name=&quot;515d&quot;&gt;
      Üniversite Laboratuvarları
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;787a&quot; name=&quot;787a&quot;&gt;
      Hem Amerika’da, hem de Avrupa’da pek çok farklı üniversitede çeşitli araştırma laboratuvarları yaz staj programları düzenliyor. Aşağıda sizler için bazı örnekler ekledim.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;8e96&quot; name=&quot;8e96&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        EPFL
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a12b&quot; name=&quot;a12b&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        UMD
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;19fe&quot; name=&quot;19fe&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        NYU
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;ccc7&quot; name=&quot;ccc7&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        Purdue
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;a35d&quot; name=&quot;a35d&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;
        MPI
       &lt;&#x2F;strong&gt;
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;fc9d&quot; name=&quot;fc9d&quot;&gt;
      Bu saydıklarım, dünya çapında ününü duyurmuş, ciddi anlamda başarılı hocalara ve laboratuvarlara sahip üniversiteler. Lab isimlerini spesifik lablara yoğunluk olmaması açısından vermemeyi tercih etmekle birlikte, kısa araştırmalarla bulabileceğinizi düşünmekteyim. Bunlar gibi pek çok farklı üniversitede yaz staj programları bulup bunlara başvurabilirsiniz, kabul alma şansınızı yükseltecek etmenleri sonlara doğru ayrı bir kısımda toplayacağım için burada detaya girmiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b979&quot; name=&quot;b979&quot;&gt;
      Bu programların en büyük artısı, pek çoğunun ücretli staj programı olması. Hem dünyanın en iyi üniversitelerinde staj yapma fırsatı buluyorsunuz, hem de üzerine ücret alarak rahat bir şekilde yurt dışında 3 ay yaşama fırsatı buluyorsunuz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a5a9&quot; name=&quot;a5a9&quot;&gt;
      Açık yaz staj programlarına ekstra, hocaların bireysel olarak öğrenci aldıkları da pek çok durum var. Bu durumlarda ücretli staj bulmak maalesef biraz zor, hocanın iyi bir fonlaması olması gerekiyor. Eğer kendinizi başka yollardan finansa etme imkanınız varsa, çeşitli üniversitelerden hocalarla iletişime geçerek onların yanında staj yapmanız da pekala mümkün.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;d994&quot; name=&quot;d994&quot;&gt;
      Girişimler(Startup)
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;dd01&quot; name=&quot;dd01&quot;&gt;
      Yurt dışında neredeyse her konuda çeşitli girişimler bulmanız mümkün. Bu girişimler genelde iş gücüne aç olduklarından dolayı, eğer onların çalıştığı konuyla ilgili daha önceden tecrübeniz varsa eğer, alınma olasılığınız da çok yüksek. Çok fazla sayıda ve konuda girişimlerin olması da sizin kendinize uygun bir yer bulabilme ihtimalinizi arttırıyor elbette. Eğer akademiden uzak bir kariyer hayaliniz varsa, girişimlerde kendinize bir gelecek bulabilme ihtimaliniz çok yüksek olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;cff2&quot; name=&quot;cff2&quot;&gt;
      Özellikle görece küçük yeni girişimlerle çalışırken, ücretli stajyer olarak kabul almanız çok da kolay olmayabilir. Bu konuda not etmeniz gereken önemli bir noktaysa bir stajyer olarak ücretsiz çalışıyor olsanız dahi, beğenilirseniz döndüğünüzde uzaktan çalışma ihtimalinizin çok yüksek olması.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;92b5&quot; name=&quot;92b5&quot;&gt;
      Girişimlerin pek çoğu kuluçkalarla (incubator) çalışıyorlar. Eğer ki bu pek çok girişimi nereden bulabilirim derseniz, çeşitli konularda çalışan girişimleri programına alan kuluçka organizasyonlarını inceleyebilirsiniz, aşağıda teknoloji tabanlı girişimlerle ilgilenen 50&#x27;den fazla kuluçka organizasyonunun olduğu bir liste içeren bir blog yazısı paylaşıyorum.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;e164&quot; name=&quot;e164&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; title=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        60 ACCELERATORS AND INCUBATORS IN GERMANY
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        The Entrepreneurship in Berlin is going to one of the center of the world and in Germany there are many accelerators…
       &lt;&#x2F;em&gt;
       medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;3447d8f3ae064b591635107f3290a912&quot; data-thumbnail-img-id=&quot;1*-U2gZoQgpeZtynAjhqoPIg.jpeg&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*-U2gZoQgpeZtynAjhqoPIg.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--mixtapeEmbed&quot; id=&quot;327c&quot; name=&quot;327c&quot;&gt;
      Kurumsal Şirketler
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;d80d&quot; name=&quot;d80d&quot;&gt;
      Elbette, büyük kurumsal şirketlerin(Bloomberg, Google, Facebook…) kendi stajyer alım süreçleri de mevcut. Bu süreçler şirketlerin kendi sitelerinden oluşturdukları başvuru sistemleri ya da indeed.com veyahut glassdoor gibi siteler üzerinden işleyen süreçler oluyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;ec3c&quot; name=&quot;ec3c&quot;&gt;
      Maalesef ki başvuru sayısı aşırı yüksek olduğundan dolayı çok iyi imkanları olmasına rağmen kurumsal şirketlere kabul alma oranı ve şansı çok daha düşük, burada sizin için şansı arttırabilecek en büyük etkense şirketten birisinden referans bulmanız, referans sahibi olmanız sizi bu tarz süreçlerde çok ciddi miktarda öne atarak şansınızı arttırabiliyor.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8271&quot; name=&quot;8271&quot;&gt;
      Bazı Karşılaştırmalar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;44a6&quot; name=&quot;44a6&quot;&gt;
      Nedenlerden ve Nasıllardan bahsettikten sonra, biraz da çeşitli kavramlar arasında karşılaştırma yapıp bazı noktaları daha açık hale getirmenin faydalı olacağını düşündüm.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;51b6&quot; name=&quot;51b6&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;290&quot; data-image-id=&quot;1*QjyqweRAMJpNVrJ3AdsY5A.png&quot; data-width=&quot;841&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*QjyqweRAMJpNVrJ3AdsY5A.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--figure&quot; id=&quot;42b0&quot; name=&quot;42b0&quot;&gt;
      Amerika vs Avrupa
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;1317&quot; name=&quot;1317&quot;&gt;
      Amerika’ya gitmek, genelde daha zor. Bunun en temel sebebi Amerika’ya giderken sizi çağıran şirketin bir tür sponsorluk sürecine girmesi gerekiyor. Pek çok şirket de dışarıdan bir yabancı için bu süreçlerle uğraşmak yerine, Amerika içinden kişileri almayı tercih ediyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5a67&quot; name=&quot;5a67&quot;&gt;
      Burada bir istisna olarak üniversite labları mevcut. Üniversitelerin bu konudaki altyapısı ve kapasiteleri daha gelişkin olsa gerek, Amerika dışından pek çok stajyer alabiliyorlar, dolayısıyla Amerika’ya gitmek istiyorsanız üniversite laboratuvarlarına başvurmanızı tavsiye ederim.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;98bd&quot; name=&quot;98bd&quot;&gt;
      Lab vs Startup vs Kurumsal Şirket
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;85f2&quot; name=&quot;85f2&quot;&gt;
      Genel olarak baktığımızda, aralarındaki farkları yazının ilk kısımlarında bir dereceye kadar açıkladığımı düşünüyorum, yine de küçük bir kıyastan zarar gelmeyecektir.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;bfca&quot; name=&quot;bfca&quot;&gt;
       En kolay kabul alma şansı startup ve üniversite hocalarında
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;eaba&quot; name=&quot;eaba&quot;&gt;
       Ücretli staj şansı lab stajlarında ve kurumsal şirketlerde çok daha yüksek
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1dcb&quot; name=&quot;1dcb&quot;&gt;
       Lab stajları akademik düşünenler için aşırı uygun, sektörel bir gelecek isteyenlerin startup ve kurumsal şirketlere yönelmeleri daha mantıklı
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f860&quot; name=&quot;f860&quot;&gt;
       Kabul alması en zor olansa kurumsal şirketler, referans neredeyse kesinlikle gerekli
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--li&quot; id=&quot;191c&quot; name=&quot;191c&quot;&gt;
      2. Sınıf vs 3. Sınıf vs 4. Sınıf
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;825b&quot; name=&quot;825b&quot;&gt;
      Tabii ki farklı yıllarda gitmek hem sizin için hem de karşısı için farklı durumlara yol açıyor. En basit manada baktığınızda, tecrübeniz arttıkça kabul alma şansınızın yanı sıra ücretli kabul alma şansınız da artacak.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;08a9&quot; name=&quot;08a9&quot;&gt;
      Ancak burada önemli bir nokta, bazı şirketler ve lablar stajınızın sonrasında öğrenime dönmenizi zorunlu tutuyor, dolayısıyla 4. sınıf olarak staja gidemeyeceğiniz yerler olacaktır.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;21e3&quot; name=&quot;21e3&quot;&gt;
      Ücretli vs Ücretsiz
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;75a7&quot; name=&quot;75a7&quot;&gt;
      Yine bundan önceki paragraflarda defalarca yaptığımız bir karşılaştırma, basitçe toplayalım.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;8bbf&quot; name=&quot;8bbf&quot;&gt;
       Ücretli staj lab ve kurumsal şirketlerde daha sık
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;64bd&quot; name=&quot;64bd&quot;&gt;
       Girişimlere ve hocaların yanına ücretli kabul almak her zaman çok daha zor
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;3f0c&quot; name=&quot;3f0c&quot;&gt;
      Erasmus+ Stajı
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;dc6e&quot; name=&quot;dc6e&quot;&gt;
      Süreçlerine ve ne olduğuna dair ayrı bir yazı yazılabilecek olsa da, kısaca Erasmus+ Stajının ne olduğundan bahsedeyim, ilgisi olanlar kendi okulunun Erasmus ofisiyle görüşüp ya da sitesini inceleyip daha fazla bilgi sahibi olabilir, gerekirse benle de iletişime geçebilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2dcf&quot; name=&quot;2dcf&quot;&gt;
      Erasmus+ Stajı, aynı Erasmus+ Öğrenimi ile öğrenci değişimi programı gibi, Avrupa Birliği tarafından fonlanan bir program. Okuldan okula süreçler değişebilmekle birlikte, genelde şu şekilde işliyor.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;f8c4&quot; name=&quot;f8c4&quot;&gt;
       Bir staj yeri bulun
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;61f2&quot; name=&quot;61f2&quot;&gt;
       Staj yerinizi bölümünüze onaylatın
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;f2d6&quot; name=&quot;f2d6&quot;&gt;
       Staj yerinizi Erasmus Ofisine onaylatın
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;bf54&quot; name=&quot;bf54&quot;&gt;
       Erasmus+ için İngilizce sınavına girin
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;fcc6&quot; name=&quot;fcc6&quot;&gt;
       Sınavdan aldığınız notun ağırlıklı not ortalamanızla ortalamasına göre bir sıralamaya yerleşin
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;fc09&quot; name=&quot;fc09&quot;&gt;
       Sıralamada hibe almaya hak kazanırsanız, staja gittiğiniz ülkeye göre farklı miktarlarda güne dayalı hibe almaya hak kazanıyorsunuz.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;p class=&quot;graf graf--p graf-after--li&quot; id=&quot;6f8b&quot; name=&quot;6f8b&quot;&gt;
      Burada dikkat edilmesi gereken bazı durumlar var.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;6979&quot; name=&quot;6979&quot;&gt;
       Mümkün olduğunca uzun kalın, hibeyi günlük aldığınız için tek seferlik(uçak bileti, depozito, tabak&#x2F;çanak) gibi harcamaların total paranıza olan etkisini azaltırsınız, finansal olarak daha rahat yaşarsınız.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;0a84&quot; name=&quot;0a84&quot;&gt;
       Erasmus Ofisine ve görevliye göre değişmekle birlikte, sistem size yardım etmek için tasarlanmıyor. Sürekli olarak sormalı, her şeyi önden halletmelisiniz, hiçbir şeyi son dakikaya bırakmayın.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;dba9&quot; name=&quot;dba9&quot;&gt;
       Gitmeden hibenin %80&#x27;ini alıyorsunuz, para hesabınızı ona göre yapın.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;3044&quot; name=&quot;3044&quot;&gt;
      Hoca&#x2F;Lab&#x2F;Startup&#x2F;Şirket Bulmak
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9cce&quot; name=&quot;9cce&quot;&gt;
      Yukarıda girişimler için bir site vermiştim, onu tekrardan aşağıda ekleyeyim.
     &lt;&#x2F;p&gt;
     &lt;div class=&quot;graf graf--mixtapeEmbed graf-after--p&quot; id=&quot;bbba&quot; name=&quot;bbba&quot;&gt;
      &lt;a class=&quot;markup--anchor markup--mixtapeEmbed-anchor&quot; data-href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; title=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot;&gt;
       &lt;strong class=&quot;markup--strong markup--mixtapeEmbed-strong&quot;&gt;
        60 ACCELERATORS AND INCUBATORS IN GERMANY
       &lt;&#x2F;strong&gt;
       &lt;br&#x2F;&gt;
       &lt;em class=&quot;markup--em markup--mixtapeEmbed-em&quot;&gt;
        The Entrepreneurship in Berlin is going to one of the center of the world and in Germany there are many accelerators…
       &lt;&#x2F;em&gt;
       medium.com
      &lt;&#x2F;a&gt;
      &lt;a class=&quot;js-mixtapeImage mixtapeImage u-ignoreBlock&quot; data-media-id=&quot;3447d8f3ae064b591635107f3290a912&quot; data-thumbnail-img-id=&quot;1*-U2gZoQgpeZtynAjhqoPIg.jpeg&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;mentornity-blog&#x2F;50-accelerators-and-incubators-in-germany-9e8e22116205&quot; style=&quot;background-image: url(https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;fit&#x2F;c&#x2F;160&#x2F;160&#x2F;1*-U2gZoQgpeZtynAjhqoPIg.jpeg);&quot;&gt;
      &lt;&#x2F;a&gt;
     &lt;&#x2F;div&gt;
     &lt;p class=&quot;graf graf--p graf-after--mixtapeEmbed&quot; id=&quot;1437&quot; name=&quot;1437&quot;&gt;
      Farklı ülkeler için ‘Accelerators in country X’ şeklinde aratırsanız bu tarz blog postları bulabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0273&quot; name=&quot;0273&quot;&gt;
      Hoca ve Lab bulmak için, maalesef toplu herhangi bir yer yok, en azından ben bulamadım, bulan olursa iletirse sevinirim kendimi de güncellemiş olurum. US Times Higher Education listesinde en yukardan aşağıya doğru gidip üniversitelerin sizi ilgilendiren departmalarının laboratuvarlarına veya hocalarına teker teker bakmanız gerekiyor maalesef.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9e8e&quot; name=&quot;9e8e&quot;&gt;
      Bazı hocalar, spesifik olarak stajyer aradıklarını yazacaktır, onlarla kesinlikle ve kesinlikle iletişime geçin. Buna ekstra olarak, Türk hocalarla iletişime geçmek de işe yarayabiliyor, şansınızı istatistiksel olarak arttırdığını gözlemledik şu ana kadar kendi çevremde.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e0fc&quot; name=&quot;e0fc&quot;&gt;
      Şirket bulmak içinse, yine yukarıda kısaca bahsettiğim indeed veya glassdoor gibi sitelerde gezinebilir, gördüğünüz ilanlara bolca başvurabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;25dd&quot; name=&quot;25dd&quot;&gt;
      Birtakım Post-Covid Öngörüleri
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8cff&quot; name=&quot;8cff&quot;&gt;
      Kendi çevremden gördüğüm kadarıyla, Covid-19 sonrası dönemde girişimlerin çokça sayıda stajyere ve çalışana ihtiyaç duyacak. Özellikle ücretsiz stajyer olarak başvurduğunuz girişimlerden kabul alma ihtimalinizin önceki yıllara göre yüksek olabileceğine inanıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1ab0&quot; name=&quot;1ab0&quot;&gt;
      Kötü bir haber ise, bu yıl uzaktan yapılan stajların önümüzdeki yıl yüz yüze olarak devam etme ihtimali bulunduğundan dolayı, eldeki slotların bir kısmının şimdiden dolduğunu düşünebilirsiniz, erken davranıp hızlı olmanın çok ciddi bir avantaj olduğunu söylememe gerek yoktur diye düşünmekteyim.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;9399&quot; name=&quot;9399&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;484&quot; data-image-id=&quot;1*aBmCQz7CSK3Khh8pIcCInw.jpeg&quot; data-width=&quot;700&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*aBmCQz7CSK3Khh8pIcCInw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;1a34&quot; name=&quot;1a34&quot;&gt;
      Formül
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;7b15&quot; name=&quot;7b15&quot;&gt;
      Buraya kadar geldiniz, neredeyse 10 dakikadır okuyor olmalısınız, eğer karşınızda olsaydım beni bu kadar uzun süre dinleyebildiğiniz için sizi tebrik ederdim. Dolayısıyla size elimden geldiğince bir kabul alma formülü hediye etmek istiyorum.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;15a0&quot; name=&quot;15a0&quot;&gt;
       Deneyin. Yazabildiğiniz kadar hocaya ve girişime yazın, başvurabildiğiniz kadar laba ve şirkete başvurun. Size her türlü danışmanlığı verebilir, öz geçmişinizi elimle yazabilir, mektuplarınızı proofread’leyebilirim, ama size bundan daha iyi bir tavsiye veremem. Umudunuzu kaybetmeyin, yeterince denerseniz kabul alacaksınız.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;d537&quot; name=&quot;d537&quot;&gt;
       Başvuru mektuplarınızda ve maillerinizde mümkün olduğunca kendine güvenli, ilgili ve spesifik bir dil kullanın. Şirketi&#x2F;Üniversiteyi&#x2F;Hocayı araştırın, onların çalışmalarına spesifik kavramlardan bahsedin. Gerçekten o yerde staj yapmak istediğinize ikna ettiğiniz zaman birisini, kabul alma ihtimaliniz çok artacaktır.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;9f1f&quot; name=&quot;9f1f&quot;&gt;
       Her yer için ayrı mektup&#x2F;mail yazmak elbette mümkün değil, siz de insansınız. Mektuplarınızı yazarken parçalara ayırın, 1–2 paragrafını o spesifik şirket&#x2F;üniversite ye ayırın.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;e225&quot; name=&quot;e225&quot;&gt;
      Kabul Alma Şansını Yükseltmek
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;8248&quot; name=&quot;8248&quot;&gt;
      Yukarıda
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Formül
      &lt;&#x2F;strong&gt;
      kısmında kabul alma ihtimalinizi yükseltmek için bazı yöntemlerden bahsettim, burada da uzun vadede sağlamanız gereken bazı etkenlerden bahsedeceğim.
     &lt;&#x2F;p&gt;
     &lt;ul class=&quot;postList&quot;&gt;
      &lt;li class=&quot;graf graf--li graf-after--p&quot; id=&quot;b21e&quot; name=&quot;b21e&quot;&gt;
       Proje yapın, elinizden geldiğince kodlayın, tasarlayın, yarışmalara katılın, öz geçmişinize yazabilecek projelerinizi olabildiğince fazla tutmaya çalışın.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;1881&quot; name=&quot;1881&quot;&gt;
       Lisansta araştırma projesi yapmaya çalışın, bu konuda ayrı bir yazı yazacağım, ama hocalarınızla iletişime geçip samimi bir şekilde ben sizle araştırma yapmak istiyorum dediğinizde reddedilme ihtimaliniz ciddi anlamda düşük, lisansta yapabileceğiniz en iyi şey bir hocayla akademik çalışmak yapmak olacaktır.
      &lt;&#x2F;li&gt;
      &lt;li class=&quot;graf graf--li graf-after--li&quot; id=&quot;c400&quot; name=&quot;c400&quot;&gt;
       Ortalamanızı yüksek tutun. Her ne olursa olsun, 2 aynı kişiden ortalaması yüksek olan her zaman önde olacaktır. Kesinlikle ön planda bir etken değil, ama sizin için her daim faydalı.
      &lt;&#x2F;li&gt;
     &lt;&#x2F;ul&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--li&quot; id=&quot;f0a6&quot; name=&quot;f0a6&quot;&gt;
      Kabul Aldıktan Sonra Yapılacaklar
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;dca3&quot; name=&quot;dca3&quot;&gt;
      Bu yazı an itibariyle 10 dakikayı geçtiğinden dolayı, bu kısmı ayrı bir yazıya bırakmaya karar verdim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;ec64&quot; name=&quot;ec64&quot;&gt;
      Sonuç
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;96c9&quot; name=&quot;96c9&quot;&gt;
      Benim için yazması aşırı zevkli bir yazıydı, umarım okuması da zevklidir. Her türlü yorumunuzu, sorunuzu alpkeles99@gmail.com adresine bekliyorum, buradan da yazabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;7dde&quot; name=&quot;7dde&quot;&gt;
      En temelde, kabul almak bir ilgi ve çaba işi, kendi çevremde 4.0 la Türkiye’de staj yapan da var, 3 ortalamayla yurt dışına kabul alan da. Yeterince ve doğru şekilde uğraştığınız takdirde, güzel sonuçlara ulaşacaksınız. İnanmıyor olabilirsiniz, ben de başta inanmamıştım, şans eseri denedim ve başardım, siz de başarabilirsiniz.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;9d4b0038dd1f&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-12-09T23:02:23.691Z&quot;&gt;
     December 9, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yurt-d%C4%B1%C5%9F%C4%B1-staj-geni%C5%9Fletilmi%C5%9F-rehber-9d4b0038dd1f&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Atam Ne Derdi</title>
        <published>2020-11-10T00:00:00+00:00</published>
        <updated>2020-11-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/atam-ne-derdi/"/>
        <id>https://alperenkeles.com/posts/atam-ne-derdi/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/atam-ne-derdi/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first&quot; name=&quot;6960&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;0c83&quot; name=&quot;0c83&quot;&gt;
      Atam Ne Derdi
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;7138&quot; name=&quot;7138&quot;&gt;
      Her 9 Kasım akşamı, hikayeler, gönderiler, fotoğraflarla doluyor sosyal medya. Dün akşam da farklı değildi benim için, bir farklılık oluşturmak, içimdekileri dökmek istedim, karşınızdayım.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;bbae&quot; name=&quot;bbae&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;426&quot; data-image-id=&quot;1*jMSCGKEObi_1qWOzpDgE5Q.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;770&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*jMSCGKEObi_1qWOzpDgE5Q.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;3edb&quot; name=&quot;3edb&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Her yıl 10 Kasım saat 9.05’te, saatlerimiz duruyor, gözümüz doluyor, bir kez daha Atatürk gençliği olduğumuzu hatırlıyoruz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;88b2&quot; name=&quot;88b2&quot;&gt;
      Bu ülkenin kuruluşu için can veren niceleri geliyor aklıma. Diyorum ki: şu halimizi görseler, ne derlerdi?
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;cc38&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;413a&quot; name=&quot;413a&quot;&gt;
      İnsanların karşısındakine baktığı ama görmediği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;863b&quot; name=&quot;863b&quot;&gt;
      Karşısındakini duyduğu, ama dinlemediği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;af70&quot; name=&quot;af70&quot;&gt;
      Karşısındakiyle konuştuğu, ama anlamadığı,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;daa3&quot; name=&quot;daa3&quot;&gt;
      Hayatta kaldığı, ama yaşamadığı,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6ae9&quot; name=&quot;6ae9&quot;&gt;
      Şu günleri görse, Atam ne derdi?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;4731&quot; name=&quot;4731&quot;&gt;
      Üzülür müydü dersiniz?
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;0048&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;a377&quot; name=&quot;a377&quot;&gt;
      Riyakarlığın her kademede, her seviyede kendini gösterdiği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;62ca&quot; name=&quot;62ca&quot;&gt;
      Liyakatin anlamsızlaştığı, torpilin yüceltildiği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5e5d&quot; name=&quot;5e5d&quot;&gt;
      Çalışmanın küçümsendiği, böbürlenmenin takdir edildiği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3072&quot; name=&quot;3072&quot;&gt;
      Hak edenin değil, çalanın, çırpanın kazandığı,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9b14&quot; name=&quot;9b14&quot;&gt;
      Şu günleri görse, Atam ne derdi?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;68a2&quot; name=&quot;68a2&quot;&gt;
      Öfkelenir miydi dersiniz?
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body&quot; name=&quot;4e2a&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;bf5c&quot; name=&quot;bf5c&quot;&gt;
      Eğitim kurumlarının eğitmediği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3023&quot; name=&quot;3023&quot;&gt;
      Bilime hakaret edildiği, bilim insanlarının aşağılandığı,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6ab7&quot; name=&quot;6ab7&quot;&gt;
      Demokrasinin alaşağı edildiği,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2b12&quot; name=&quot;2b12&quot;&gt;
      Halka hesap vereceklerin, halktan hesap sorduğu,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b815&quot; name=&quot;b815&quot;&gt;
      Şu günleri görse, Atam ne derdi?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p graf--trailing&quot; id=&quot;1749&quot; name=&quot;1749&quot;&gt;
      Umutsuzluğa kapılır mıydı dersiniz?
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
  &lt;section class=&quot;section section--body section--last&quot; name=&quot;033d&quot;&gt;
   &lt;div class=&quot;section-divider&quot;&gt;
    &lt;hr class=&quot;section-divider&quot;&#x2F;&gt;
   &lt;&#x2F;div&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;p class=&quot;graf graf--p graf--leading&quot; id=&quot;af59&quot; name=&quot;af59&quot;&gt;
      Dün akşam sordum bunları kendime,
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d8a2&quot; name=&quot;d8a2&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Atam üzülür müydü?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f47e&quot; name=&quot;f47e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Atam öfkelenir miydi?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9e03&quot; name=&quot;9e03&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Atam umutsuzluğa kapılır mıydı?
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f8ae&quot; name=&quot;f8ae&quot;&gt;
      Fark ettim ki sonra, bu soruların muhatabı başkası değil, biziz, Türk gençliği.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;836c&quot; name=&quot;836c&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Biz umutsuzuz. Biz öfkeliyiz. Biz üzgünüz.
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0682&quot; name=&quot;0682&quot;&gt;
      Yapabileceğimiz ise bana göre tek bir şey var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;6259&quot; name=&quot;6259&quot;&gt;
      20 Ekim 1927&#x27;de yazılmış o umut dolu meşaleyi eline almak, ve onu yarınlara taşımak.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;b142&quot; name=&quot;b142&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;400&quot; data-image-id=&quot;1*bcaeBbTchsPbeYivoywSoA.jpeg&quot; data-width=&quot;600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*bcaeBbTchsPbeYivoywSoA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure graf--trailing&quot; id=&quot;e9ef&quot; name=&quot;e9ef&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Ey Türk Gençliği! Birinci vazifen, Türk istiklâlini, Türk Cumhuriyeti’ni, ilelebet muhafaza ve müdafaa etmektir…
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;5ea7b656eaa7&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-11-10T18:30:56.991Z&quot;&gt;
     November 10, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;atam-ne-derdi-5ea7b656eaa7&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Karantina Günlerinde Akademik Dürüstlük</title>
        <published>2020-06-05T00:00:00+00:00</published>
        <updated>2020-06-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/karantina-gunlerinde-akademik-durustluk/"/>
        <id>https://alperenkeles.com/posts/karantina-gunlerinde-akademik-durustluk/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/karantina-gunlerinde-akademik-durustluk/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;bd51&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;c22c&quot; name=&quot;c22c&quot;&gt;
      Karantina Günlerinde Akademik Dürüstlük
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a65f&quot; name=&quot;a65f&quot;&gt;
      İnsanlık tarihinde oluşturduğumuz tüm sistemler, bir çeşit güven duygusuna, güven inancına dayanıyor.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;1020&quot; name=&quot;1020&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1064&quot; data-image-id=&quot;1*sROeiATt4xYwf_JRqdT2iA.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;1260&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*sROeiATt4xYwf_JRqdT2iA.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;1273&quot; name=&quot;1273&quot;&gt;
      Bugün ortaya çıkardığımız eğitim, hukuk, sağlık, askeriye sistemleri, ailesel büyüklükten toplumsal büyüklüğe tüm yapılar, ikili ilişkiler, devletler, şirketler… İnsanlığın yarattığı herhangi bir sistemin arkasında bir güvene ihtiyaç var, bir dürüstlük algısına ihtiyaç var.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;651a&quot; name=&quot;651a&quot;&gt;
      Burada ortaya konulması gereken temel bir fark, daha da temelinde varoluşsal bir soru ise bu dürüstlüğü o sistemin çarklarında sağlayan mekanizmanın kendisi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;b096&quot; name=&quot;b096&quot;&gt;
      İnsanları dürüst olmaya iten etkenin ne olduğu hakkında pek çok yazı yazılmıştır, ancak hayatta çözülemeyecek bazı problemler mevcutsa, tahminim odur ki bu soru onlardan bir tanesidir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e165&quot; name=&quot;e165&quot;&gt;
      Korku mudur dürüstlüğe iten bizi, yoksa vicdan mıdır? Adalet duygusu mudur, yoksa empati midir? Kabullenilme isteği midir, yoksa sisteme duyulan inanç mıdır? Belki gururdur, belki de kendine saygı?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0f4d&quot; name=&quot;0f4d&quot;&gt;
      Bu seçeneklerden bir ya da birkaç tanesini seçebileceğimizi sanmıyorum, herhangi birisinin bir insan üzerinde tek başına etkili olduğuna da inanmıyorum. Ama insanların etik pusulalarını bu gibi etkenlerin bir kısmı üzerine kurduklarına ve her insan için bu pusulanın farklı olduğuna inanıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;afe0&quot; name=&quot;afe0&quot;&gt;
      Sistemleri bir çeşit güven inancına göre inşa ettiğimizden bahsetmiştim, burada dikkat etmemiz gereken şey ise bu sistemleri inşa ederken hangi pusulayı varsaydığımız. Eğer bizim varsayımımız olan pusula toplumsal profile uymazsa, orada sistemimizin sonu gelmiş demektir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;0bc2&quot; name=&quot;0bc2&quot;&gt;
      Buna örnek olarak toplumuzdaki suçluları örnek göstermek gerek. Sistemleri oluştururken ortaya konulan en basit varsayım herkesin korku duygusuna sahip olmasıdır. Evde ailemizin uyguladığı en basit “ders çalışmazsan oyun oynayamazsın” seviyesindeki ödül&#x2F;ceza sisteminden suçlulara idam cezasına kadar tüm ödül&#x2F;ceza sistemleri kişilerin cezadan korktuğu, bu korkunun ise kişiyi kurallara uymaya ittiği varsayımına dayalıdır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d84d&quot; name=&quot;d84d&quot;&gt;
      Bir sistemi korkuya dayandırmanın ise iki temel sıkıntısı vardır. İlki zaten kuralların dışına çıkan insanların pek çoğunun yakalanacağına inanmamasıdır, çok az kişi ben yakalanırım diye düşünerek suç işler. İkincisi ise bazen insanlar sistemin cezasını kural dışına çıktığında kazanacaklarından az görür, veyahut cezayı düşünmeden hareket ederler.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;3b3f&quot; name=&quot;3b3f&quot;&gt;
      Bundan dolayıdır ki, saf korku üzerine kurulu her sistem, cezanın etkisi ya da suçun yakalanılabilirliği azaldıkça kırılır. Bu sistemleri tasarlayanlar da bunun farkında olduklarından, soyut etik kavramlarını kültürel olarak toplumlara, sistemlere yaymaya çalışmışlardır, ne derece başarılı olmuşlardır tartışılır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7cf1&quot; name=&quot;7cf1&quot;&gt;
      Nedir bu soyut etik kavramları? Bu kavramlar bahsettiğim onur, şeref, vicdan, dürüstlük gibi bizlere toplumsal düzeni korumamız için öğretilen kavramlardır. Yakalanmayacağımızı bile bile yerdeki 100 lirayı almamamız, bulduğumuz cüzdanları geri vermemiz bu sebeplerdendir, çoğunun temelinde empati duygusu yatar, size yapılmasını istemeyeceğiniz hiçbir şeyi yapmamak yeteri kadar güzel ve basit bir etik pusuladır çoğu zaman.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2c17&quot; name=&quot;2c17&quot;&gt;
      Akademik Dürüstlük
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;8387&quot; name=&quot;8387&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1066&quot; data-image-id=&quot;1*D2VNxqvOpBJ_-ZjkifR4zQ.jpeg&quot; data-width=&quot;1600&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*D2VNxqvOpBJ_-ZjkifR4zQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;9d49&quot; name=&quot;9d49&quot;&gt;
      E peki bu anlattıklarımın hepsinin akademik dürüstlükle ne alakası var? Akademik dürüstlük de yukarda bahsettiğim gibi bir soyut etik kavramıdır ve en azından lisans seviyesindeki tecrübelerime dayanarak söyleyebilirim ki günümüzdeki lisans akademik camiasına kesinlikle oturtulamamış bir kültürdür.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;463d&quot; name=&quot;463d&quot;&gt;
      Orta Doğu Teknik Üniversitesi Etik İlkeleri der ki:
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;3df9&quot; name=&quot;3df9&quot;&gt;
      “Orta Doğu Teknik Üniversitesi’nin tüm bireyleri, güvenilir, sorumluluk sahibi ve onurlu kişiler olarak, yalnız hak ettikleri başarı ve saygınlığı sahiplenirler; olgu, veri ve belgelerin kullanım, değerlendirme ve sunumunda dürüst davranırlar.”
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a9e2&quot; name=&quot;a9e2&quot;&gt;
      Bizler tüm ödevler, sınavlar ve görevlendirmelerimize bu etik ilkelere bağlı olarak, onların sorumluluğu altında gireriz. Bize öğretilen akademik dürüstlük düsturları ile birleştirildiğinde okulda kopya olmamasını beklersiniz değil mi?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a58a&quot; name=&quot;a58a&quot;&gt;
      İnsanlığa olan inancı yıllardır çok yüksek olmayan bir birey olarak, ben şahsen beklemiyordum, ama sanıyorum ki içinde bulunduğumuz uzaktan eğitim dönemi sonrasında hiç kimse beklemeyecek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a10f&quot; name=&quot;a10f&quot;&gt;
      Uzaktan eğitim dönemiyle ilgili atılan bazı halka açık bilgilendirmeleri burada paylaşmak istiyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;e65f&quot; name=&quot;e65f&quot;&gt;
      “It is clear to us that holding “online exams&#x2F;quizzes” or “take-home exams&#x2F;quizzes” would not be suitable. The reason is that there is no way for us to prevent possible cheating attempts, at least for this course.”
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf--startsWithDoubleQuote graf-after--p&quot; id=&quot;0f0a&quot; name=&quot;0f0a&quot;&gt;
      “Bu derste çevrimiçi sınav yapamıyoruz, çünkü kopya girişimlerini engelleme şansımız yok.”
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a71c&quot; name=&quot;a71c&quot;&gt;
      Bu yorumun yapıldığı dersi ODTÜ’nün tüm mühendislik öğrencilerinin aldığını, tümünün girdiği tüm sınavlarda etik koda uyacağım metnini imzaladığını hatırlamak gerek. Açıkça görülüyor ki hocaların, yani aslında sistemin kendisinin, toplumun(öğrencilerin) akademik dürüstlüğüne güveni yok.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;fee7&quot; name=&quot;fee7&quot;&gt;
      Burada çizgiyi kesin şekilde çizmek gerek, yorumum kesinlikle ODTÜ özelinde ya da bahsedilen açıklama özelinde değil, tüm eğitim sistemimizin hiçbir yerinde öğrencilere “gerçekten” güvenilmiyor, ancak içinde bulunduğumuz durumdan dolayı bu güvenin olmadığı ortamda çevrimiçi notlandırma yöntemlerine(anlık durumda sınavlara) mecburuz. Normal şartlar altında fiziksel eğitimde ciddi bir noktaya kadar engellenebilen kopya girişimleri, çevrimiçi eğitimde yakalanma korkusunun olmaması neticesinde tavana vurmuş durumda.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9f14&quot; name=&quot;9f14&quot;&gt;
      Burada insanların kopya çekmesinin iki temel sebebi var aslında, ilki aslında birçok kişinin kopyaya karşı herhangi bir soyut etik algısının bulunmaması, ortadaki yakalanma sonucu ceza alma korkusunun yok olmasının sistemi kırması.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;76a7&quot; name=&quot;76a7&quot;&gt;
      İkincisiyse, sistemin adaleti sağladığına dair olan inancı sebebiyle kopya çekmeyen pek çok insanın var olması. Normal şartlar altında etik olarak kopyaya karşı olan pek çok insanın şu dönemde kopya çekmesinin açıklamalarından bir tanesi de bu bence. Sistem adaleti sağlayamadığı zaman içerisinde bulunduğumuz sıfır toplamlı oyunda(zero-sum-game) adaletsiz şekilde önümüze geçenler bizleri geriye düşürmüş oluyor. Bu da insanın kendi etik değerlerini ve sistem olan inancını sorgulamasına yol açıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;87a9&quot; name=&quot;87a9&quot;&gt;
      Hala kopya çekmeyen öğrenciler yok mu, tabii ki var. Bu öğrencilerin inancı ise öz saygı, onur, hileyle öne geçeni düşünmek yerine o insanın yerinde olduğunda haksız şekilde önüne geçeceği insanları düşünmekten kaynaklanıyor. Gerçek akademik dürüstlüğe sahip bu gruptaki insanların sayısı daha fazla olsaydı, bugün bu yazıyı yazmama bile gerek kalmazdı.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1951&quot; name=&quot;1951&quot;&gt;
      Toplumu analiz ederken, sistemi analiz etmeden de olmaz tabii ki. Yukarda bahsettiğim çevrimiçi sınavlar bu ders için uygun olmaz açıklamasının yapıldığı derste, çevrimiçi sınavlar yapılacak. Bu demektir ki bu sınavda kopya çekileceğini bile bile, bu sınavın herhangi bir ölçücülüğünün olmadığını bile bile bizler bu sınava gireceğiz, kopya çekildiğini bile bile sınavı akademik dürüstlüğümüzü koruyarak çözeceğiz, haksız yere bizden daha yüksek puan alanlar olduğunu bile bile bize verilen harf notunu kabul edeceğiz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;450b&quot; name=&quot;450b&quot;&gt;
      Bu paragraf açık bir şekilde sistemin ne kadar kırılgan olduğunu göstermektedir. Açıkça görülmektedir ki sistemlerimiz çevrimiçi eğitime uygun şekilde tasarlanmamıştır, bunun sonucunda ise büyük bir grup öğrenci mağdur olacaktır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;e30d&quot; name=&quot;e30d&quot;&gt;
      Burada asıl üzücü olansa, bu gerçeği değiştirmek için yeterli çabanın gösterilmemesidir. “Burada dur, hocalarımız çevrimiçi eğitime geçiş için ne kadar emek veriyor biliyor musun?” diyecekler olduğunu biliyorum, o yüzden bu çabanın niteliğini açarak devam edeceğim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;9e9c&quot; name=&quot;9e9c&quot;&gt;
      Son 3 aydır harcanan eforun pek çoğu, geleneksel fiziksel sistemlerin dijital dönüşümü üzerine harcanmıştır. Çevrimiçi dersler oluşturulmuş ve kaydedilmiş, ders notları daha detaylı şekilde hazırlanmış, çevrimiçi sınavların bir noktaya kadar da olsa güvenilir hale getirilmesi ve akademik dürüstlüğün bir dereceye kadar öğrenciye zorlanması üzerine çalışılmıştır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;1a98&quot; name=&quot;1a98&quot;&gt;
      Buradaki problem ise inovasyon eksikliğidir. Geleneksel sistemlerin dijital dönüşümü yapılmaya çalışılmış, yerlerine yeni sistemlerin geliştirilmesi üzerine yeterince çalışılmamıştır. Öğrencilerin üzerindeki psikolojik yükün arttırılmasının öğrencinin etik değerlerine zarar vereceği hesaba katılmamış, fiziksel eğitimdeki yükle eşdeğer seviyede ders yükü oluşturulmuş, kopya çekilememesi için aşırı kısa “yıldırım sınavlar” hazırlanmış, “Zor zamanlar zor önlemler gerektirir, okul döneminden daha çok çalışmalısınız, zaten evde oturuyorsunuz boş vaktiniz bol.” şeklinde mailler atılmıştır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;515f&quot; name=&quot;515f&quot;&gt;
      Sınavların okulda yapılmasının en temel sebebi incelenmemiş, ödevlerin ölçücülüğün yanında öğreticilik gibi de bir fonksiyonu varken tamamen ödev odaklı bir sisteme geçmek üzerine çalışmalar yetersiz kalmıştır.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;80fa&quot; name=&quot;80fa&quot;&gt;
      Günün sonunda baktığımızda ise, ne akademik dürüstlük kalmıştır ortada, ne hoca-öğrenci arasındaki güven duygusu kalmıştır, ne öğretim kalmıştır, ne öğrenim kalmıştır, ne ölçücülük kalmıştır… Eski sistemin külleri üzerine oturtulmuş paslanmış demirler ile oluşmuş bir sistemde bu dersleri alan öğrencilerin gelecekte bu derslerde öğrenmeleri gerekenlerle karşılaştıklarında neler yaşayacağını, tarih bize gösterecektir.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p graf--trailing&quot; id=&quot;aafc&quot; name=&quot;aafc&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1280&quot; data-image-id=&quot;1*lWP-r-9UGP19G8IYEjHfDg.jpeg&quot; data-width=&quot;1920&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*lWP-r-9UGP19G8IYEjHfDg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;60d5fbe21447&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2020-06-05T16:04:33.195Z&quot;&gt;
     June 5, 2020
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;karantina-g%C3%BCnlerinde-akademik-d%C3%BCr%C3%BCstl%C3%BCk-60d5fbe21447&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Kır Aynaları</title>
        <published>2019-07-27T00:00:00+00:00</published>
        <updated>2019-07-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/kir-aynalari/"/>
        <id>https://alperenkeles.com/posts/kir-aynalari/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/kir-aynalari/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;7226&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;9e16&quot; name=&quot;9e16&quot;&gt;
      Kır Aynaları
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;b6f7&quot; name=&quot;b6f7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;450&quot; data-image-id=&quot;1*DDz2isp1Lu-LB1qE9ux6Kw.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;700&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*DDz2isp1Lu-LB1qE9ux6Kw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;6ad5&quot; name=&quot;6ad5&quot;&gt;
      Hayatta bazı kavramlar vardır; toplumun, insan psikolojisinin, insan evriminin en temelinde yer alır, köklerine dokunurlar. Doğduğumuz andan itibaren bize öğretilir, hayatımızda kilit rollerde bulunurlar. Bu yazı, bu kavramlardan güven, öz güven, arkadaşlık, benlik ve özgürlüğü ele almaktadır. Daha doğrusu, onları birbirine bağlayan başka bir kavramı, aslında hayatımızın içerisinde bu kavramlar kadar, belki de daha temel bir şekilde yer alan
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       yalan
      &lt;&#x2F;em&gt;
      kavramını ele almaktadır.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;a0f4&quot; name=&quot;a0f4&quot;&gt;
      Yalan
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;6805&quot; name=&quot;6805&quot;&gt;
      Tanımlamakla başlayalım o halde yalanı. Yalan, kandırmaktır birisini, gizlemektir gerçeği, maskelerin arkasında saklanmaktır insanlardan. Ama yalnızca başkasından mı, kendimizden de gizleyemez miyiz gerçeği, kendi kendimize yalan söyleyemez miyiz? Söyleriz elbette, her an, her saniye kandırırız kendimizi; en büyük maskeyi, aynada kendimize takarız aslında.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;c200&quot; name=&quot;c200&quot;&gt;
      Ne olduğu kadar, belki çok daha önemli bir soru vardır yalan hakkında. Bu soruyu daha sık sorsak, başka soruları çok daha az sorarız aslında hayatımızda.
     &lt;&#x2F;p&gt;
     &lt;h4 class=&quot;graf graf--h4 graf-after--p&quot; id=&quot;8fbe&quot; name=&quot;8fbe&quot;&gt;
      Neden?
     &lt;&#x2F;h4&gt;
     &lt;p class=&quot;graf graf--p graf-after--h4&quot; id=&quot;329a&quot; name=&quot;329a&quot;&gt;
      Herkes söylüyor, kendine de söylüyor, arkadaşına da, kardeşine de, ailesine de… Bazen karşımızdakine soruyoruz aslında, neden yalan söyledin bana diye suçluyoruz onları. Bunu neden gizliyorsun ki diye şaşırıyoruz yeri geldiğinde. Ama sıra kendimize geldiğinde, en büyük yalanı bence o zaman söylüyoruz bence. “Haklıyım söylemekte, haklı olmasam söylemem.” diyoruz, neden sorusundan sıyrılıyoruz; farklı bir tartışma ekseninde kendi jürimiz, yargıcımız oluyoruz, kendi kendimizi
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       güya
      &lt;&#x2F;em&gt;
      haklı çıkartıyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a75b&quot; name=&quot;a75b&quot;&gt;
      Gelin bugün burada soralım o soruyu, motivasyonlarımız ne yalan söylerken? En son ne zaman yalan söyledik, ne kazandık bundan?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bc99&quot; name=&quot;bc99&quot;&gt;
      Bu sorunun komik bir yanı var, insanların neredeyse tamamı bu soruya
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       yanlış
      &lt;&#x2F;em&gt;
      cevap verecekler. Şaşırtıcı bir şekilde bu cevap yalan olmayacak, çoğunluk hatırlamıyor olacak — ne kadar çok yalan söylediğimizi buradan çıkarabiliriz belki de — kalan insanlar da o hafta içinde söyledikleri bir yalandan bahsedecekler.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;7fc7&quot; name=&quot;7fc7&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1185&quot; data-image-id=&quot;1*g1sc6GGif_wSPtoINL3ziQ.jpeg&quot; data-width=&quot;972&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*g1sc6GGif_wSPtoINL3ziQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a6e6&quot; name=&quot;a6e6&quot;&gt;
      Çünkü aslında biz en büyük yalanı ya aynada kendimize bakarken, ya da başkalarına kendimizi anlatırken söylüyoruz. Birisi ne istediğimizi sorduğunda söylüyoruz. Çünkü bizim en büyük yalanımız, olduğumuz kişi, bizim benliğimiz. Benliğimizi kabullenilmek üzerine geliştirdik. Birisi bize bir soru sorduğunda, onun neyi duymak istediğini düşündüğümüz göre şekillendiriyoruz cevabımızı, kendimizi. İnek olmaktan kaçıyoruz bazen, çalışmak kötü bir şeymiş, çalışmadan yapıyormuşuz gibi davranıyoruz. Başka zaman çalışkan, akıllı, efendi çocuk olmamız bekleniyor, kopya çektiğimiz zamanları siliyoruz geçmişimizi yazdığımız defterden. Farklı insanlarla, ortamlarla, mekanlarla biz de farklı versiyonlarımız haline geliyoruz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;8389&quot; name=&quot;8389&quot;&gt;
      Eğer şu an olduğumuzu sandığımız kişi bir yalansa, bizim en büyük yalanımızsa, biz kimiz o halde? Tüm o maskelerin altında nasıl birisi yatıyor, neler düşünüyor, neden yukarı çıkmıyor? Peki ya aynada gördüğümüz o kişi kim o halde? Yalnızken hangi biz kendisini gösteriyor?
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;b768&quot; name=&quot;b768&quot;&gt;
      Biz
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;77e3&quot; name=&quot;77e3&quot;&gt;
      Bence o
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       biz
      &lt;&#x2F;em&gt;
      korkuyor, ölesiye korkuyor hem de. Fark edilmekten korkuyor, ezilmekten korkuyor, bir kez ortaya çıksa oluşacak sonuçlardan korkuyor, en çok da sevilmemekten korkuyor. Bu korku o o kadar derin ki içimizde, aynada bile kendimize yalan söylüyoruz. Yalnız başımızayken bile hala bizi sevmesini, bizi kabul etmesini istediğimiz insanlar oradaymış gibi davranmak zorunda hissediyoruz kendimizi.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;06cd&quot; name=&quot;06cd&quot;&gt;
      Nasıl keşfedebiliriz peki o altta yatan kişiliği? Eğer aynaya bakarken bile görmekten korkuyorsak, ne zaman onla karşılaşacak kadar toplayabiliriz cesaretimizi?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5d66&quot; name=&quot;5d66&quot;&gt;
      Keşke bilseydim bu soruların cevaplarını, ama bilmiyorum. Tahminlerim, varsayımlarım var birazdan bahsedeceğim, ancak bunlar merak eden herhangi bir kişinin tahmininden daha iyi değiller, ben de keşfetmeyi başaramadım o
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       beni.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;8b5c&quot; name=&quot;8b5c&quot;&gt;
      Çözüm?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;273f&quot; name=&quot;273f&quot;&gt;
      Bir problemi çözmekteki ilk adım varlığını kabul ederek sorunu anlamak, sonrasında ise kaynağını tanımlamaktır. Burada asıl kaynağın biz olduğumuzu iddia edebiliriz, kabullenilme arzumuz olduğunu. Ancak bence suçlanabilecek başka bir özne daha mevcut, o da bizi kabul edecek insanlar. Eğer kimsenin bizi sevmesi, kabul etmesi hakkında endişelenmez isek neden kendimizi beğendirmek için farklı bir insana dönüşmeye çalışalım ki?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;bdd3&quot; name=&quot;bdd3&quot;&gt;
      Burada ise uç bir durumda buluyoruz kendimizi. Kime beğendirmeye çalışmayız ki kendimizi? Kimin bizi sevmesini istemeyiz ki? Umursamadığımız insanların yanında olmamız gerekir bunun için ancak, ya da yanında olduğumuz insanları umursamamayı öğrenmemiz gerek. İki seçenek de birbirinden kötü değil mi? Umursamıyorsak neden beraberiz, neden zaten sınırlı, kısa, değerli vaktimizi o insanlarla harcayalım ki?
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;46bd&quot; name=&quot;46bd&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;1828&quot; data-image-id=&quot;1*rXVedzTqzhe-a0a3Je1WKg.jpeg&quot; data-width=&quot;2595&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*rXVedzTqzhe-a0a3Je1WKg.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;2abb&quot; name=&quot;2abb&quot;&gt;
      Elalem Ne Der?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;979f&quot; name=&quot;979f&quot;&gt;
      Bence burada bir seçenek daha var ilk bakışta görmediğimiz, ütopya gibi geliyor çünkü bize, varlığına inanmayı bırakın varlığını düşünmek bile imkansız çoğu zaman. Peki ya bizi gerçekten yargılamayan insanlarla birlikte olsaydık? Bir Hollywood klişesi gibi “Sizi olduğunuz gibi seven insanlara gidin” değil bu. Yargılamak sadece şahsı yargılamakla olmaz çünkü. Düşünceleri, ideolojileri, fikirleri yargılarız aslında biz. Ve yanımızdaki arkadaşımız karşıdan gelen bir insanı yargılıyorsa, bizle başkaları hakkında dedikodu yapıyorsa o fikri, o zihniyeti yargılıyor demektir. Bu durumda biz de kendimizi o ideolojiye karşı bir tavır almış halde bulmasak bile, pozitif bir tavır almaya çekinir hale gelebiliriz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;abfb&quot; name=&quot;abfb&quot;&gt;
      Elalem Susarsa
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;ad0f&quot; name=&quot;ad0f&quot;&gt;
      O yüzden, yargılamayan insanları bulmalıyız, hayatımıza yerleştirmeliyiz ama çok daha önemlisi, yargılamamalıyız. Biz yargılamadıkça, yargılamayan insanlar da bizi bulur belki. Belki günün birinde olduğumuz insan olabiliriz, yanımızda yine o içteki en temel benliğini yaşayan arkadaşlarımızla, sevdiklerimizle, özgür oluruz belki de sonunda üzerimize konan tüm o kurallardan, beklentilerden…
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;7c007e3fc414&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2019-07-27T21:06:51.516Z&quot;&gt;
     July 27, 2019
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;k%C4%B1r-aynalar%C4%B1-7c007e3fc414&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Kaos ve Düzen</title>
        <published>2019-07-17T00:00:00+00:00</published>
        <updated>2019-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/kaos-ve-duzen/"/>
        <id>https://alperenkeles.com/posts/kaos-ve-duzen/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/kaos-ve-duzen/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;915c&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;7d86&quot; name=&quot;7d86&quot;&gt;
      Kaos ve Düzen
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;205f&quot; name=&quot;205f&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;373&quot; data-image-id=&quot;1*0vAE2pAQzUVIhWGIQ4Kclw.jpeg&quot; data-width=&quot;560&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*0vAE2pAQzUVIhWGIQ4Kclw.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;1d0f&quot; name=&quot;1d0f&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Önemli Not:
      &lt;&#x2F;strong&gt;
      &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
       Bu yazı yazarın bir farkındalık yaşadığı andaki adrenalini sonucu yazılmıştır. Gerçekleri ve bilgileri değil, yazarın kişisel gözlem ve terübelerini içermektedir. İnanmayınız, evde denemeyiniz.
      &lt;&#x2F;em&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;7e69&quot; name=&quot;7e69&quot;&gt;
      Bu yazı, ilginç bir yazı; okuyucu açısından değil de benim açımdan ilginç. Anlık bir heyecanla yeni bir keşif yaptığımı düşünmemin ardından pek çok farklı bakış açısından pek çok farklı fikirle karşı karşıya buldum kendimi, dolayısıyla karmaşıklık için şimdiden uyarıyorum.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f93d&quot; name=&quot;f93d&quot;&gt;
      Artık boş yapmayı bırakıp girişi yapmalıyım değil mi? Haklısınız, soruyorum o halde size, küçük rutinleriniz, düzenleriniz var mı yaşamlarınızda? Her gün, her hafta, her ay yapmayı sevdiğiniz… Her çarşamba gittiğiniz bir kahveci var mı mesela, ya da cumartesi akşamları arkadaşlarınızla gittiğiniz bir restoran? Sabahları derse ya da işe giderken kullanmayı sevdiğiniz bir rota? Favori yemekleriniz var mı, gittiğiniz yerlerde “her zamankinden mi?” sorusunu duymayı seviyor musunuz?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;df83&quot; name=&quot;df83&quot;&gt;
      Eğer cevabınız evetse(tabii ki evet olduğu için soruyorum) siz de bendensiniz, ve yüksek ihtimalle birkaç milyon insanla aynı cevabı verdiniz. Neden seviyoruz peki bu düzenleri, hiç sorguladınız mı bunu?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;911c&quot; name=&quot;911c&quot;&gt;
      Bu yazı, bu sorunun cevabını sorguladığımız,bulamadığımız, ama yaklaştığımızı sandığımız bir yazı olacak. Tabii ki insan psikolojisi kadar karmaşık bir oluşumu burada 3–5 satırda çözebileceğimize inanacak kadar cüretkar değilizdir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;61a6&quot; name=&quot;61a6&quot;&gt;
      Önceki yazıyı okuyanlar bilir, Almanya’da staj yapıyorum şu an. Bugün bir şeyi fark ettim, bu stajda benim vermem gereken önemli bir karar mevcut. Kendime evdeki gibi yeni bir düzen oluşturabilirim, aynı yerlerde aynı yemekleri yiyebilir, düzenli olarak her hafta gittiğim bir kahveci bulabilirim; ya da tam aksini yapabilirim, her gün yeni yerler keşfedebilirim, düzensizliği bir düzen haline getirebilirim. İşte bu konuda kendimle sürekli kavga ediyorum. Sabah kalktığımda, akşam yemek yerken, yürüyüşe çıkarken… İçgüdülerim bana bir düzen oluşturmamı söylüyor, akşamları aynı mekanda yememi, kahvaltılarda aynı yemekleri hazırlamamı, yürüyüşe aynı rotalarda çıkmamı, aynı müzikleri dinlememi… Ama bilincimin başka bir parçası bunu istemiyor, farklı şeyler denememi, görmediklerimi görmemi; düzenden, bilinenden uzaklaşmamı istiyor. Peki neden böyle zıt 2 fikir bir savaş halinde, ve daha önemlisi neden bir sonuca varamıyorlar?
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2793&quot; name=&quot;2793&quot;&gt;
      Bu yazıyı yazmaya işte tam bu soruyu sorduğumda karar verdim. Aynı anda bir soru daha sordum kendime, peki hangi fikir kazanmalı? Hangi karar benim için doğru karar? Yazının sonlarına doğru açıklayacağım kendi kararımı, belki de ben size söyleyene kadar siz çoktan anlamış olacaksınız ne düşündüğümü, ancak sizden bir şey daha yapmanızı isteyeceğim, kendi cevabınızı düşünmenizi.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;afbc&quot; name=&quot;afbc&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;720&quot; data-image-id=&quot;1*7Jzei7nKxuHeE-ngutr2Ag.jpeg&quot; data-is-featured=&quot;true&quot; data-width=&quot;960&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*7Jzei7nKxuHeE-ngutr2Ag.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;3177&quot; name=&quot;3177&quot;&gt;
      Düzen
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;cbac&quot; name=&quot;cbac&quot;&gt;
      Düzen, nedir düzen? Güven değil midir aslında en temelde? Bilinmezlikten kaçmak değil midir? Günlerin, yerlerin, varlıkların, insanların, fikirlerin birbirine benzemesi değil midir düzen? Çok iyi bildiğiniz bir yer düşünün, sayamayacağınız kadar çok defa geçtiğiniz, okulunuz, eviniz, iş yeriniz… Gözünüzü kapatın, orada olduğunuzu hayal edin, kafanızda betimleyin çevrenizi, oturuyor musunuz? Kalkın oturuyorsanız da, kapıya doğru yürümeye başlayın, korkmadan, hata yapmadan gidebildiniz değil mi? Peki ya aynı şeyi bilmediğiniz bir yerde yapmaya çalışsaydınız ne olurdu? Nasıl yapabilirim ki diyorsunuzdur muhtemelen. Düzen aslında bizlere bu güvenceyi sağlıyor baktığınızda. Gözlerinizi bile kapatarak yürüyebileceğiniz yollar, 2. kez düşünmeden alabileceğiniz kararlar. Hızlandırıyor işleri, kolaylaştırıyor.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;dd34&quot; name=&quot;dd34&quot;&gt;
      Peki ya problemleri yok mu düzenin? Sıkılmıyor musunuz hep aynı şeyleri yaptığınızda? Hep aynı yemeği yediğinizde? Marjinal fayda azalmıyor mu düzen devam ettikçe. Neden biliyor musunuz? Çünkü düzende eksik bir şey var, o da heyecan. Düzen güvenli, ama heyecansız. Mutlak düzen o kadar statik ki, insanlar mutlak bir düzende yaşamayı hayal bile edemezler. Düşünebiliyor musunuz, her bir gününüzün tamamen aynı geçtiğini? Bu noktada aklıma bir soru daha geliyor tabii, geçmiyor mu pek çok günümüz aynı? Küçücük farklar o kadar da çok etkiliyor mu sizce hayatımızı?
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;84a4&quot; name=&quot;84a4&quot;&gt;
      Kaos
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;094a&quot; name=&quot;094a&quot;&gt;
      Madalyonun öbür yüzüne geliyoruz şimdi de, kaos nedir peki? Kaos bilinmezliktir, bir çeşit kumardır aslında kaos. Atacağın adımları bilemezsin, daha önemlisiyse, çevrendekilerin atacakları adımları da bilemezsin. Gözünü kapatırsan, yürüyemezsin, çünkü üstteki örneğin aksine, kaos içinde yollar bile değişir, gözünü her an açık tutmak, her bir detaya dikkat etmek zorundasındır. Çok korkutucu duruyor değil mi böyle deyince? Ama baktığınızda hayattan en fazla zevki aldığınız anlar kaos anları, bilinmezlik anları değil midir? Sürprizler neden bu kadar mutlu eder bizi? Gözlerimizi en çok açtığımız anda fark etmez miyiz en fazla detayı? O zaman öğrenmez miyiz, o zaman değişmez miyiz, gelişmez miyiz? Düzen yerimizde kalmamızı sağlarsa, kaos ileri gitmemizi sağlar. Tehlikelidir ama kaos, her an görmediğiniz bir yerlerden yenilikler, anlamadığınız, bilmediğiniz şeyler çıkabilir. İleri giderken kendinizi bir anda düşmüş, hareket edemez halde bulabilirsiniz. O yüzdendir biz insanlar severiz, ama korkarız kaostan. Küçük dozlarda izin veririz ona hayatımızda. Düzenden sıkıldıkça sığınırız kaosa, hayatımızı güvende geçirmek isteriz, ama sıkılmaktan, durmaktan da ölesiye korkarız.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;ac06&quot; name=&quot;ac06&quot;&gt;
      Denge
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;44ec&quot; name=&quot;44ec&quot;&gt;
      &lt;img alt=&quot;Ying-Yang Image&quot; class=&quot;graf-image&quot; data-height=&quot;768&quot; data-image-id=&quot;1*dphAYFx6IHDqfJvw8OnEtg.png&quot; data-width=&quot;768&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*dphAYFx6IHDqfJvw8OnEtg.png&quot;&#x2F;&gt;
      &lt;figcaption class=&quot;imageCaption&quot;&gt;
       Denge, her şeydir. Kaosun içinde düzen, düzenin içinde kaos belirir.
      &lt;&#x2F;figcaption&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;6de0&quot; name=&quot;6de0&quot;&gt;
      Kaos ve düzen, güven ve heyecan, birlikte gider hayatımızda. Hiçbirimiz kendimizi bir tarafa teslim edemeyiz, edemeyeceğiz.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;fe27&quot; name=&quot;fe27&quot;&gt;
      Seçim
     &lt;&#x2F;h3&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--h3&quot; id=&quot;376e&quot; name=&quot;376e&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;800&quot; data-image-id=&quot;1*CaswHX3Z98VxBYnwDu7fgQ.jpeg&quot; data-width=&quot;1200&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*CaswHX3Z98VxBYnwDu7fgQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure graf--trailing&quot; id=&quot;2311&quot; name=&quot;2311&quot;&gt;
      Peki ya ben neyi seçiyorum? Ben bu sefer kaosu seçiyorum, bilinmezliği seçiyorum. Her gün farklı yerleri görmeyi, farklı hayatlar yaşamayı seçiyorum. Düzensizliği düzenim yapmayı seçiyorum. Neden biliyor musunuz? Düzen her ne kadar bize düşmemeyi garantilese de, hayat düşmekten korkmak için çok kısa değil mi sizce de? Mutluluk, yorucu da olsa, korkutucu da olsa, mutluluk değil mi yine de?
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;669004cfa949&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2019-07-17T22:15:18.652Z&quot;&gt;
     July 17, 2019
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;kaos-ve-d%C3%BCzen-669004cfa949&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Yurt Dışında Staj</title>
        <published>2019-06-16T00:00:00+00:00</published>
        <updated>2019-06-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Alperen Keles
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://alperenkeles.com/posts/yurt-disinda-staj/"/>
        <id>https://alperenkeles.com/posts/yurt-disinda-staj/</id>
        
        <content type="html" xml:base="https://alperenkeles.com/posts/yurt-disinda-staj/">&lt;article class=&quot;h-entry&quot;&gt;
 &lt;section class=&quot;e-content&quot; data-field=&quot;body&quot;&gt;
  &lt;section class=&quot;section section--body section--first section--last&quot; name=&quot;1634&quot;&gt;
   &lt;div class=&quot;section-content&quot;&gt;
    &lt;div class=&quot;section-inner sectionLayout--insetColumn&quot;&gt;
     &lt;h3 class=&quot;graf graf--h3 graf--leading graf--title&quot; id=&quot;343d&quot; name=&quot;343d&quot;&gt;
      Yurt Dışında Staj
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;ce8c&quot; name=&quot;ce8c&quot;&gt;
      Öncelikle merhabalar, bu yazıyı okuyorsanız, bu demektir ki hayatta şu ana kadar kurduğunuz konfor alanının dışına çıkmayı, akranlarınızın hayallerinin ötesinde hedefler koymayı başarmışsınız.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5de6&quot; name=&quot;5de6&quot;&gt;
      Yazıma, sizlere çıkacağınız uzun yolculukta başarılar dileyerek başlamak istiyorum. Yeri geldiğinde yorulacaksınız, bırakmak isteyeceksiniz, vazgeçmenin kolay geleceği pek çok durumda kalacaksınız, umuyorum ki karşınıza çıkan engellerin hepsini aşıp hayallerinize ulaşırsınız, bu kadar ummak yeter, biraz da yardımcı olalım.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;ce68&quot; name=&quot;ce68&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;600&quot; data-image-id=&quot;1*_WTxR0xmEcGUKLBmnlQgRQ.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;800&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*_WTxR0xmEcGUKLBmnlQgRQ.png&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;a3fe&quot; name=&quot;a3fe&quot;&gt;
      Bu Yazı Nelerden Bahsedecek?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;5d5e&quot; name=&quot;5d5e&quot;&gt;
      Yazıyı yazmaya başladığım tarihte daha staja gitmeme 3 hafta var, dolayısıyla stajı yaşamadan pek çok şey eksik kalacak, ancak bu zamana kadarki yaklaşık 1 yıllık bir süreçte neler yaptığımdan, ne tip yollar denediğimden, arkadaşlarımın neler yaptığından… gibi pek çok farklı konudan bahsedeceğim.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0fb3&quot; name=&quot;0fb3&quot;&gt;
      Motivasyon Girişi
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;19c3&quot; name=&quot;19c3&quot;&gt;
      Yazının bundan sonrasına devam ederken daha dikkatli olmanız, umutlarınızın daha yükselmesi için, sizlere bu yılki küçük bir istatistikten bahsedeceğim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;4f0e&quot; name=&quot;4f0e&quot;&gt;
      2019 yazında, yalnızca benim tanıdığım insanlar arasında ODTÜ Bilgisayar Mühendisliğinden 4, ODTÜ Elektrik ve Elektronik Mühendisliğinden 11 kişi Almanya’da yaz stajı yapıyor. Bu kişilerden 11 tanesi Berlin, 1 tanesi Bochum, 1 tanesi Karlsruche, 2 tanesi ise Munich’te stajlarını gerçekleştirecek. Bu sayı 1,2,3 hatta belki 5 bile olsa idi bu insanların sıradışı belli yeteneklere, donanımlara sahip olduğu, bu özelliklerinin onlara bu stajı bulmalarında yardımcı olduğu savunulabilirdi. Ancak yalnızca benim tanıdığım 15 kişinin yurt dışında staj yapabiliyor olması bu işin belli özelliklerden çok azme dayalı bir iş olduğunu gözler önüne seriyor.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;31f9&quot; name=&quot;31f9&quot;&gt;
      Neden?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;3a6d&quot; name=&quot;3a6d&quot;&gt;
      Eğer ki yurt dışı stajı yapmak üzerine düşünme, nedenlerini arama evresini geçmiş ve yapmaya karar vermişseniz, yazının bu kısmını atlayabilirsiniz.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f14a&quot; name=&quot;f14a&quot;&gt;
      Eğer ki nedene ihtiyacınız varsa, ya da benimkileri merak ediyorsanız, sizleri bir alt satıra davet etmekteyim.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;d8d7&quot; name=&quot;d8d7&quot;&gt;
      Sizlere stajınızı ülke dışında yapmak için mükemmel sebepler sunmayacağım, sunamam da zaten. Her insanın hayata bakış açısı, olaylardan aldığı dersler ve olaylara ve fikirlere verdiği önem farklı olduğundan dolayı hiç kimse size mükemmel sebebi veremeyecektir, benim yapabileceğim naçizane şey ise sizlere kendi fikir sürecimi bir nebze olsun yaşatabilmek, bir nebze olsun kendimden sonra gelenlere yol gösterebilmektir.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;b244&quot; name=&quot;b244&quot;&gt;
      Benim Nedenlerim Nelerdi?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;a130&quot; name=&quot;a130&quot;&gt;
      Ben, hayatta sürekli bir hedefi olan insanlardanım. Bu hedef çılgın farklı uzun vadeli bir hedef değil, basit ve — söylemeyi sevdiğim haliyle — zarif. Konfor alanımın dışına çıkmak, onu genişletmek. Yaşadığım her günü içinde rahat, korkmadan yaşadığım o alanı genişletip, bulunmaktan korktuğum yeni suları keşfetmeye çalışarak yaşıyorum. Yurt dışı stajı da benim için en temelde bu yolda giden bir adım, farklı bir kültürün içinde, çevremde farklı bir dil, farklı insanlar… Türkiye’de yapacağım bir staj belki benim açımdan finansal olarak daha makul, kısa vadede daha yararlı, teknik ve akademik olarak daha öğretici olabilir, ancak beni kişilik olarak şu an bulunduğum halimden ne kadar ileriye götüreceği şu anki bakış açımdan şüpheli.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;2001&quot; name=&quot;2001&quot;&gt;
      İlk Adım
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;9b69&quot; name=&quot;9b69&quot;&gt;
      İlk adım, hayatın her alanında atması en zor olan adımdır. Çünkü yukarıda bahsettiğim şu anki konfor alanının dışına ilk adımdır aslında, bir kez dışarı adım attıktan sonra atılan her adım yürümeyi kolaylaştırır, bir zaman sonra yeni bir
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       ilk adım
      &lt;&#x2F;strong&gt;
      için hazır oluruz. Yurt dışı stajında ilk adımın ne olduğunu hayal edersiniz? Ülke seçmek mi? Yoksa alan mı? Şirket mi üniversite mi? Hiçbirisi değil aslında, bizim için ilk adım şu olmalı, gerçekten gitmek istiyor muyum? Çünkü bir kez gitmeye karar verdikten sonra tüm süreç kendi kendine akmaya başlıyor, kapı kapıyı açıyor.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;ed7b&quot; name=&quot;ed7b&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       İkinci Adım
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;934f&quot; name=&quot;934f&quot;&gt;
      İnanmak başarmanın yarısıdır demiş birileri yüzyıllar önce, artık ikinci yarıyla devam etmenin vakti gelmiş demektir kararımızı verdikten sonra. Ortaya çıkacak en temel soru, hayatın çoğunda yakamızı bırakmadığı için şaşırmayacaktır elbet kimse, para problemi. Şirketlerin çoğu vize sponsorluğu konusundan kaynaklı olarak yurt dışından stajyer almak gibi bir yüke girmek istemiyor eğer sıra dışı yeteneklere sahip bir dahi değilseniz. Üniversite ve araştırma merkezlerindeki stajlarda da genelde ücretli bulma şansınız çok yüksek değil. Dolayısıyla stajımı yaparım maaşımı da alırım gibi bir şansa çoğu zaman sahip değiliz. Burada üç farklı şansınız var, ya kendi paranızla gidersiniz, ya Erasmus Stajı gibi hibeyle gidersiniz, ya da ücretli staj bulmak için ücretsiz için uğraşacağınız efordan daha fazlasını sarf edersiniz. Türk Lirasının şu anki durumunda(Ben bu yazıyı yazarken 0.17 ABD Doları) ilk seçeneği tercih edebilecek insanların burada bu yazıyı okuyacak kadar çaresiz bir araştırma sürecine girmediğini varsayarak iki ve üçüncü opsiyonlar üzerine yoğunlaşacağım, ama söyleyeceklerim zaten bağlantılı olduğu için senin de işine yarar gönlü de cebi kadar zengin olduğunu umduğum iyi kalpli okuyucum.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;0b00&quot; name=&quot;0b00&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Erasmus Stajı
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;091d&quot; name=&quot;091d&quot;&gt;
      Erasmus, AB tarafından desteklenen bir değişim programı. Türkiye ve Avrupa çapında üniversiteler arası öğrenci değişimiyle genelde bilinen bu programın bizim için de çok yararlı, çünkü(vereceğim rakamlar ODTÜ özelinde) günlük 20 euro gibi bir hibe her ne kadar tüm gideri kaplamasa da en azından kayda değer bir gelir.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;2760&quot; name=&quot;2760&quot;&gt;
      Bildiğim kadarıyla bazı okulların staj için de anlaşması olan kurumlar mevcut, ancak ODTÜ’de böyle bir fırsat olmadığı için hem ben hem de arkadaşlarım çeşitli üniversitelerdeki farklı farklı hocalara mail atarak kabul aldık staja. Bir kez kabul aldıktan sonra Erasmus programının formaliteleri bir şekilde hallediliyor Uluslararası İşbirliği Ofisi(ICO) danışmanları yardımıyla.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;7175&quot; name=&quot;7175&quot;&gt;
      Ücretli Staj
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;2f03&quot; name=&quot;2f03&quot;&gt;
      Ücretli bir staj bulmak için mümkün olduğunca şirketlerle iletişime geçmek gerekiyor, çünkü genelde üniversitelerin yurt dışından gelen bir stajyere para verecek kadar bütçeleri mevcut değil. Bazı araştırma merkezlerinde de fondan küçük bir miktar ayrılarak ücret verildiği durumlar olduğunu biliyorum. Ancak maaş aldığınız durumda çalışma izni vizesi gibi durumların da işin içine girdiğini bilmek önemli, dolayısıyla formalite süreçleri biraz daha sancılı geçebilir.
     &lt;&#x2F;p&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--p&quot; id=&quot;6919&quot; name=&quot;6919&quot;&gt;
      Nasıl?
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3&quot; id=&quot;0785&quot; name=&quot;0785&quot;&gt;
      E iyi güzel diyorsun da kardeşim, nasıl buluyoruz bu stajı diye soruyorsunuzdur yazının şu aşamasına geldiğinizde diye düşünüyorum. Aslında bu denklem görece çok basit:
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a048&quot; name=&quot;a048&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        Sabır + Umut+ Şans = Başarı
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a804&quot; name=&quot;a804&quot;&gt;
      Hayatın pek çok yerinde kendisini gösteren bir denklem bu, tam basit, zarif ancak bir o kadar da yorucu aslında.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;af44&quot; name=&quot;af44&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;449&quot; data-image-id=&quot;1*JCuBNXDLMbWfqa5aOYno8w.jpeg&quot; data-width=&quot;800&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*JCuBNXDLMbWfqa5aOYno8w.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;p class=&quot;graf graf--p graf-after--figure&quot; id=&quot;a0e1&quot; name=&quot;a0e1&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Sabır
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;f9d9&quot; name=&quot;f9d9&quot;&gt;
      Tüm süreçte sabırlı olmanız çok önemli, çünkü sabrınız sizin umudunuzu kaybetmenizi engelleyip size devam etme gücünü verecek, azminizi körükleyecek en büyük etken. Onlarca, belki yüzlerce mail atacaksınız. Zamanın %90&#x27;ında, özür dileyerek söylemeliyim ki, cevap alamayacaksınız. Kalan %8&#x27;de ret cevabı alacaksınız, önemli olan sabırlı bir şekilde %2&#x27;ye ulaşana kadar devam etmeye devam etmek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;5910&quot; name=&quot;5910&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Umut
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;a739&quot; name=&quot;a739&quot;&gt;
      Sabrınızın umudunuzu koruyacağından bahsetmiştim. Bunun önemli olmasının temel sebebi, ümit etmezseniz başaramayacak olmanız. Eğer gerçekten yapabileceğinize inanmazsanız yeterli eforu hiçbir zaman vermeyeceksiniz. Kendinize inanmanız, umudunuzu sonuna kadar koruyup %98 ihtimalle cevap alamayacak olmanıza rağmen elinizdeki
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       &lt;em class=&quot;markup--em markup--p-em&quot;&gt;
        2
       &lt;&#x2F;em&gt;
      &lt;&#x2F;strong&gt;
      &#x27;ye sonuna kadar tutunmanız gerekecek.
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;868d&quot; name=&quot;868d&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;
       Şans
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;p&gt;
     &lt;p class=&quot;graf graf--p graf-after--p&quot; id=&quot;57b4&quot; name=&quot;57b4&quot;&gt;
      Yine, hayatın her yerinde olduğu gibi, şans çok büyük bir etken. Benim 2 ay boyunca maillerimin neredeyse hiçbirisine cevap gelmemişken, gelen 3–5 reddin ardından mail attığım hocanın 3 saat sonra kabul etmesi sizlere belki bu noktada umut verebilir, sabır seviyenizi yükseltebilir. Denemeye devam edin arkadaşlar, başaracaksınız.
     &lt;&#x2F;p&gt;
     &lt;figure class=&quot;graf graf--figure graf-after--p&quot; id=&quot;e37f&quot; name=&quot;e37f&quot;&gt;
      &lt;img class=&quot;graf-image&quot; data-height=&quot;600&quot; data-image-id=&quot;1*c6A4HPd4WYb4c9dEYTE9rQ.jpeg&quot; data-width=&quot;1400&quot; src=&quot;https:&#x2F;&#x2F;cdn-images-1.medium.com&#x2F;max&#x2F;800&#x2F;1*c6A4HPd4WYb4c9dEYTE9rQ.jpeg&quot;&#x2F;&gt;
     &lt;&#x2F;figure&gt;
     &lt;h3 class=&quot;graf graf--h3 graf-after--figure&quot; id=&quot;3a5e&quot; name=&quot;3a5e&quot;&gt;
      &lt;strong class=&quot;markup--strong markup--h3-strong&quot;&gt;
       Çiçekler ve Öpücükler
      &lt;&#x2F;strong&gt;
     &lt;&#x2F;h3&gt;
     &lt;p class=&quot;graf graf--p graf-after--h3 graf--trailing&quot; id=&quot;9a5c&quot; name=&quot;9a5c&quot;&gt;
      Pek çok yazının ilki olmasını umduğum bu yazının sonuna gelirken buraya kadar sıkılmadan inmeyi başarmış herkese çok teşekkürler. Umuyorum ki denersiniz, umuyorum ki başarırsınız, umuyorum ki her sorununuzda burada sorar, başarılı olduğunuzda da mutluluğunuzu bizle paylaşırsınız. Kendine iyi bak koca yürekli okur.
     &lt;&#x2F;p&gt;
    &lt;&#x2F;div&gt;
   &lt;&#x2F;div&gt;
  &lt;&#x2F;section&gt;
 &lt;&#x2F;section&gt;
 &lt;footer&gt;
  &lt;p&gt;
   By
   &lt;a class=&quot;p-author h-card&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&quot;&gt;
    Alperen Keleş
   &lt;&#x2F;a&gt;
   on
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;p&#x2F;2fb07a69362&quot;&gt;
    &lt;time class=&quot;dt-published&quot; datetime=&quot;2019-06-17T00:39:20.352Z&quot;&gt;
     June 17, 2019
    &lt;&#x2F;time&gt;
   &lt;&#x2F;a&gt;
   .
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   &lt;a class=&quot;p-canonical&quot; href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@alpkeles99&#x2F;yurt-d%C4%B1%C5%9F%C4%B1nda-staj-2fb07a69362&quot;&gt;
    Canonical link
   &lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
  &lt;p&gt;
   Exported from
   &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&quot;&gt;
    Medium
   &lt;&#x2F;a&gt;
   on March 27, 2024.
  &lt;&#x2F;p&gt;
 &lt;&#x2F;footer&gt;
&lt;&#x2F;article&gt;
</content>
        
    </entry>
</feed>
