<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Career | AkitaOnRails.com</title><link>https://akitaonrails.github.io/en/tags/career/</link><description>Fabio Akita's blog — tech, career, and assorted geek topics. English edition.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 19 Oct 2026 23:20:51 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/en/tags/career/index.xml" rel="self" type="application/rss+xml"/><item><title>We're Living in the Future: Cars Fly and We Don't Have to Write HTML/CSS Anymore</title><link>https://akitaonrails.github.io/en/2026/10/16/living-in-the-future-cars-fly-no-more-html-css/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2026/10/16/living-in-the-future-cars-fly-no-more-html-css/</guid><pubDate>Fri, 16 Oct 2026 02:00:00 -0300</pubDate><description>&lt;p&gt;It&amp;rsquo;s past two in the morning and I&amp;rsquo;m still awake because I just watched the new Tesla Roadster climb a vertical ramp live, stop upside down, then spin in midair and land in one piece on another run.&lt;/p&gt;
&lt;p&gt;I expected a fast car. I didn&amp;rsquo;t expect one with ten compressed-air propulsion nozzles using SpaceX-derived technology, plus an underbody suction system capable, &lt;a href="https://paultan.org/2026/10/16/tesla-roadster-revealed-flies-on-spacex-air-thrusters-0-96-km-h-in-0-81s-production-2028/"target="_blank" rel="noopener"&gt;according to Elon Musk, of pulling up to 2 G&lt;/a&gt;. During the demo, Tesla announced zero to 60 miles per hour, nearly 97 km/h, in 0.81 seconds. It did not disclose the measurement protocol.&lt;/p&gt;</description><content:encoded><![CDATA[<p>It&rsquo;s past two in the morning and I&rsquo;m still awake because I just watched the new Tesla Roadster climb a vertical ramp live, stop upside down, then spin in midair and land in one piece on another run.</p>
<p>I expected a fast car. I didn&rsquo;t expect one with ten compressed-air propulsion nozzles using SpaceX-derived technology, plus an underbody suction system capable, <a href="https://paultan.org/2026/10/16/tesla-roadster-revealed-flies-on-spacex-air-thrusters-0-96-km-h-in-0-81s-production-2028/"target="_blank" rel="noopener">according to Elon Musk, of pulling up to 2 G</a>. During the demo, Tesla announced zero to 60 miles per hour, nearly 97 km/h, in 0.81 seconds. It did not disclose the measurement protocol.</p>
<p>This is the future I wanted to see.</p>
<p>The entire demonstration is in <a href="https://livestream.tesla.com/"target="_blank" rel="noopener">Tesla&rsquo;s official livestream</a>. <a href="https://www.roadandtrack.com/news/a74151425/the-air-assisted-tesla-roadster-flies-in-demo-hits-0-60-in-08-seconds/"target="_blank" rel="noopener">Road &amp; Track measured and described the maneuvers</a>, while <a href="https://techcrunch.com/2026/10/15/tesla-reveals-spacex-powered-roadster-that-flies-and-falls-with-style/"target="_blank" rel="noopener">TechCrunch detailed the three versions</a>: Performance with active aerodynamics and suction, Thrust with rear thrusters, and Rocket with a ten-nozzle propulsion system and a single seat.</p>
<p>Of course, we watched a prototype in a controlled demonstration. Tesla expects production to begin in 2028, and the Rocket version is not approved for public-road use. Still, an actual car left the ground, rotated, and landed. I watched it live from my office. It was spectacular.</p>
<p>While Musk was landing rockets and making cars fly, I was doing something far smaller and more mundane: fiddling with my websites.</p>
<h2>Six sites in about a day<span class="hx:absolute hx:-mt-20" id="six-sites-in-about-a-day"></span>
    <a href="#six-sites-in-about-a-day" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Before the Tesla event, I spent the entire day redesigning six sites:</p>
<ul>
<li><a href="https://ailair.akitaonrails.com/"target="_blank" rel="noopener">Akita&rsquo;s AI Lair</a>, now matching the look of my new book, <em>Competent Enough</em>;</li>
<li><a href="https://aimemory.sh/"target="_blank" rel="noopener">ai-memory</a>;</li>
<li><a href="https://aijail.io/"target="_blank" rel="noopener">ai-jail</a>;</li>
<li><a href="https://themakitachronicles.com/"target="_blank" rel="noopener">The M.Akita Chronicles</a> newsletter;</li>
<li>the <a href="https://blog.themakitachronicles.com/"target="_blank" rel="noopener">newsletter archive</a>;</li>
<li>and this blog, <a href="https://akitaonrails.com/"target="_blank" rel="noopener">AkitaOnRails.com</a>.</li>
</ul>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/10/redesign-seis-sites-stitch.jpg" alt="The six redesigned sites in production: Akita’s AI Lair, ai-memory, ai-jail, The M.Akita Chronicles, the newsletter archive, and AkitaOnRails"  loading="lazy" /></p>
<p>They all started with variations of that default theme Claude makes. Dark background, purple or blue gradient, huge sans-serif type, rounded cards, a glow behind something. It works. It has also become so common that you can spot a &ldquo;site made by Claude&rdquo; before reading the title.</p>
<p>I had already tried asking Claude for different designs. It changed the color, moved the cards around, and delivered the same visual grammar. I posted <a href="https://x.com/AkitaOnRails/status/2110809199890300986"target="_blank" rel="noopener">some screens and the result of the change on Twitter</a>. I&rsquo;m no web designer, and for a while I accepted &ldquo;it works.&rdquo; Yesterday I got tired of it.</p>
<p>Someone suggested <a href="https://stitch.withgoogle.com/"target="_blank" rel="noopener">Stitch by Google</a>. It&rsquo;s an experimental Google Labs tool that turns instructions and images into editable interfaces and front-end code. The <a href="https://developers.googleblog.com/en/stitch-a-new-way-to-design-uis/"target="_blank" rel="noopener">first version launched in 2025</a> on top of Gemini; the <a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/"target="_blank" rel="noopener">current version</a> has become a design canvas with an agent, prototypes, and export to a <code>DESIGN.md</code> that other agents can follow.</p>
<p><a href="https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/10/stitch-ai-native-canvas-google.webp" alt="The Google Stitch canvas with multiple interfaces, visual variations, and design-system controls"  loading="lazy" /></a></p>
<p>I signed up, got the API token, and went to work. Stitch generated visual directions. Claude Code and Codex brought those directions into the real repositories, adapted the components, fixed responsiveness, replaced images, adjusted SEO, tested, and deployed. When one quota ran out, I continued with the other.</p>
<p>The six sites come from five repositories. Looking at them side by side made one thing clear: Stitch responds much better when it receives a concrete metaphor, the audience, and what the product needs to communicate. ai-memory became a memory archive. ai-jail became a cinematic prison. AI Lair adopted a 1950s and 1960s world&rsquo;s fair, drawn from my book cover. The newsletter became a late-night broadcast, and this blog became an editorial archive. Five different identities instead of five variations of Claude&rsquo;s same gradient.</p>
<p>The pretty prototype is the easy part. The job only ends when the visual language reaches internal pages, the article, the book reader, email, legal pages, error states, and mobile. That&rsquo;s what the agents did inside the repositories. On ai-memory, for example, verification covered 102 pages in six languages, light and dark themes, desktop and mobile. On The M.Akita Chronicles, the same design had to work across signup, archive, newsletter detail, podcast, and the email template. A Stitch mockup solves none of that by itself.</p>
<p>Each site went through several rounds of prototypes. Some looked awful. Others had one good idea surrounded by bad decisions. I told the agents to throw them away, preserve one part, mix it with another attempt, and start over. Code is cheap now, so there is no reason to fall in love with the first version.</p>
<p>The result won&rsquo;t win a design award. A professional designer would still find hundreds of things to improve. I know I could take it further by spending a few more days. It looks much better than it did, though, and for now it is competent enough.</p>
<p>Six existing sites redesigned, responsive, with SEO, image generation and replacement, HTML, CSS, and JavaScript adjustments, testing, and production deployment. One person. About a day. A year ago, that package would have taken weeks or months.</p>
<p>Keep the scale in perspective: these are small sites, mostly landing pages and content pages. Nobody is rebuilding Amazon.com&rsquo;s entire collection of pages and systems in a day. The experiment shows how much repetitive work has already moved out of the way within a scope that one experienced person can understand and review. Large projects remain large, full of private rules, old integrations, strange states, and decisions that do not fit in a prompt.</p>
<h2>Even the first proofreading pass can be automated<span class="hx:absolute hx:-mt-20" id="even-the-first-proofreading-pass-can-be-automated"></span>
    <a href="#even-the-first-proofreading-pass-can-be-automated" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>As part of the same process, I had agents review the sites as different readers. This wasn&rsquo;t grammar correction. I wanted to know what someone would understand in the first few seconds, where they would get lost, which promise would sound suspicious, and whether they could complete a task without already knowing the product.</p>
<p>On ai-jail, I used two isolated sessions. One played a skeptical engineer who approves every prompt and had never heard of the project. The other was a non-engineer managing eight developers, trying to decide whether to approve the tool for the company. On ai-memory, I used three: an engineer learning AI tools, a manager evaluating a pilot, and a parent with no agent experience who worried about AGI and jobs. Each one read the site without seeing the others&rsquo; reports.</p>
<p>Anyone can do the same thing. Run the application locally or open a preview deployment, start fresh sessions, and give each agent a concrete task. A basic prompt can look like this:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Open this site on desktop and mobile: [URL].
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You are [persona], know [context], and have never seen this product.
</span></span><span class="line"><span class="cl">Your goal is [specific decision or task].
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Navigate as this person. Do not read code or internal documentation first.
</span></span><span class="line"><span class="cl">Record:
</span></span><span class="line"><span class="cl">- what you understood in the first ten seconds;
</span></span><span class="line"><span class="cl">- what you think the product does and who it is for;
</span></span><span class="line"><span class="cl">- where you did not know the next step;
</span></span><span class="line"><span class="cl">- contradictory, absolute, or hard-to-believe promises;
</span></span><span class="line"><span class="cl">- terms the site uses before explaining them;
</span></span><span class="line"><span class="cl">- reading, keyboard, contrast, touch, and responsiveness problems;
</span></span><span class="line"><span class="cl">- what would stop you from trying, buying, or approving it.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">For every finding, show the page and visible evidence.
</span></span><span class="line"><span class="cl">Separate factual bugs, usability problems, and subjective preferences.
</span></span><span class="line"><span class="cl">Do not propose a broad redesign. Suggest the smallest change that solves the problem.</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I prefer three independent sessions over an agent roundtable. Once one reads another&rsquo;s report, it starts agreeing by inertia. A separate session can then consolidate repeated points, discard matters of taste, and check every claim against the code and product documentation. A review can flag a sentence as wrong; it has no authority to invent the right one.</p>
<p>The most useful results tend to fall into four groups: positioning, information order, path to the first action, and trust. Traditional automated tests still handle broken links, contrast, accessibility, overflow, and error states. The persona tells you that a technically accessible button appeared five screens below where the person needed it.</p>
<p>During the <a href="https://github.com/akitaonrails/ai-jail-web/blob/main/docs/research/PROOFREAD-2026-10-15-BRIEF.md"target="_blank" rel="noopener">ai-jail proofreading</a>, both profiles agreed that the site took too long to show a concrete risk and started speaking like engineering documentation too early. The threat of a poisoned page moved directly below the hero. New sections explained &ldquo;What changes on day one&rdquo; and &ldquo;For the person who must approve this,&rdquo; including operating cost, limitations, and the keys a company actually exposes. The review also caught a technically incorrect claim repeated across several pages: the network does not stay entirely off by default. The agent&rsquo;s own API host and, on Linux, registries remain accessible. This kind of reading catches documentation bugs too.</p>
<p>The <a href="https://github.com/akitaonrails/ai-memory-web/blob/main/docs/research/persona-review.md"target="_blank" rel="noopener">ai-memory report</a> found permissions described in contradictory ways, privacy promises that were too absolute, and the basic explanation buried under advanced features. During the second round, the profiles noticed that remote-access instructions told users to use HTTP before requiring TLS, that an unauthenticated <code>curl</code> promised the wrong response, and that important choices appeared far too late on mobile. The collection guide moved from about 4,364 pixels from the top to 1,617; the individual and team paths moved from 5,300 to 2,489. That&rsquo;s an objective improvement born from simulated reading.</p>
<p>In the <a href="https://github.com/akitaonrails/ai-toolkit-web/pull/4"target="_blank" rel="noopener">AI Lair redesign</a>, the new-reader review reorganized the entry path. A <a href="https://github.com/akitaonrails/ai-toolkit-web/commit/c2a5237e876f662a8b53450f23f0162fdc1d4a76"target="_blank" rel="noopener">later revision</a> made it explicit that my setup with multiple agents and two monitors is a mature configuration, not a requirement for starting. One person, one project, and one agent are enough. It also produced a pilot plan for managers: a reversible task, non-sensitive data, an acceptance criterion, deadline, budget, and measurement. The next audit found invalid ARIA and an animation that hid the opening copy from assistive technologies; the <a href="https://github.com/akitaonrails/ai-toolkit-web/pull/5"target="_blank" rel="noopener">fix</a> took axe-core from four serious violations to zero.</p>
<p>Simulated personas still fall far short of human feedback. They carry the models&rsquo; same biases, may agree with the prompt, never feel the irritation of someone who lost twenty minutes, and never take the risk of entering their own credit card. The reports serve as hypotheses. A real user will always find the case that I, the agent, and the test suite failed to imagine.</p>
<p>Before the first user exists, however, the alternative is usually no review at all. Two or three independent readings already catch contradictory promises, unexplained jargon, buried information, and a flow that only makes sense to its author. These readings cost little and make the product less stupid before it reaches actual people.</p>
<h2>HTML was never programming<span class="hx:absolute hx:-mt-20" id="html-was-never-programming"></span>
    <a href="#html-was-never-programming" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>For years, I watched people perform some remarkable mental gymnastics to argue that &ldquo;HTML is a programming language&rdquo; and therefore anyone who writes HTML is a programmer.</p>
<p>HTML is markup: it describes a document&rsquo;s structure. CSS describes presentation. That has value, requires knowledge, and can become terribly complex. Accidental complexity does not turn markup into programming.</p>
<p>There is no shame in that. I started building sites in the 1990s. I received a Photoshop layout and turned it into HTML. I sliced images, built tables, adjusted pixels, opened the result in multiple browsers, went back, and tried again. It was honest work and paid my bills.</p>
<p>It was also basically mechanical work: copy, paste, adjust, look, repeat. Exactly the category computers should automate.</p>
<p>Today I still chose the visual direction, rejected bad proposals, decided what each site needed to communicate, and recognized when the result was good enough. The agents handled the grunt work. This should have happened years ago.</p>
<h2>The bubble delayed automation<span class="hx:absolute hx:-mt-20" id="the-bubble-delayed-automation"></span>
    <a href="#the-bubble-delayed-automation" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>For much of the 2010s, <a href="https://fred.stlouisfed.org/series/EFFR"target="_blank" rel="noopener">US interest rates stayed near zero</a>. Cheap money flooded funds, startups, and large companies. Hiring more people was easy, and the market absorbed any amount of manual labor disguised as engineering.</p>
<p>Low rates explain only part of tech&rsquo;s expansion. A field breaking hiring records has little incentive to eliminate its own repetitive work. If you can put fifty more people to work assembling screens, you put fifty more people to work assembling screens.</p>
<p>Anyone who attended my talks at tech events in the 2010s may remember <strong>Constraint == Innovation</strong>. Yes, the original title used two equal signs. I gave that talk at DevConf 2019, the <a href="https://www.slideshare.net/slideshow/devconf-2019-so-carlos/143923367"target="_blank" rel="noopener">83 slides are on my SlideShare</a>, and I had already written the same argument in 2013 in <a href="https://startupi.com.br/restricoes-sao-libertadoras-menos-e-mais/"target="_blank" rel="noopener">&ldquo;Constraints are liberating: less is more&rdquo;</a>.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/V0D3PuTLOZ8"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>It&rsquo;s the old maxim: <strong>necessity is the mother of invention</strong>. Constraints force choices. Choices force priorities. When the conventional path cannot fit the money, deadline, or available capacity, someone has to find another path. That&rsquo;s where real innovation often comes from.</p>
<p>Money funds expensive research, buys equipment, and gives people time to experiment. Excess money without pressure for results does something else: it hides inefficiency with brute force. There is no need to automate, simplify, or discover a better solution while you can keep hiring and growing the spreadsheet. Too much abundance turns a technical problem into an operating expense and postpones the difficult decision.</p>
<p>I <a href="/en/2026/02/08/rant-ai-killed-programmers/">repeated this warning at the beginning of 2026</a>: the programming bubble managed to replace efficiency with volume. Constraints returned when cheap money ended. Coincidentally, agents arrived at the same time and gave companies a practical way to automate the mechanical work they had spent a decade scaling through hiring.</p>
<p>That&rsquo;s how we spent a decade recreating the same admin dashboard and calling it innovation. Every week brought the next front-end savior: React, Angular, Vue, Svelte, another <em>bundler</em>, another framework on top of the framework. They are useful tools in the right context, but none addressed the obvious question: why is a human still hand-writing the thousandth variation of the same form?</p>
<p>The hiring bubble burst in 2022 and ended the party. At the end of that year, ChatGPT brought language models to the public. GPT-2, just to keep the chronology straight, had come out in 2019. Four years after ChatGPT, agentic programming became a normal work tool.</p>
<p>Any task that consists of copying a pattern, adapting an example, running it, looking at the error, and trying again is already within these agents&rsquo; reach. Front-end is the most visible target because it accumulated an absurd amount of this work. The rest of programming has no mystical shield. Plenty of back-end work is CRUD, glue between APIs, and repetitive configuration. That will be automated too.</p>
<p>Fine by me. Programming was never about typing code. Programming is making a computer do something useful.</p>
<h2>VS Code is the new punch card<span class="hx:absolute hx:-mt-20" id="vs-code-is-the-new-punch-card"></span>
    <a href="#vs-code-is-the-new-punch-card" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I wrote about exactly this in April in <a href="/en/2026/04/11/vs-code-is-the-new-punch-card/">&ldquo;VS Code Is the New Punch Card&rdquo;</a>.</p>
<p>For decades, the interface between intention and computer kept changing. First you connected wires and switches. Then you punched cards. Then you wrote Assembly, C, high-level languages, frameworks, and configuration. Each generation looked at the previous one and automated another layer of manual work.</p>
<p>No sane person would argue today that operating a card punch was the essence of computer science. It was the available interface. Typing every tag and CSS rule into VS Code was also the available interface.</p>
<p>Now I describe the intention, show references, evaluate the result, and tell the agent to fix it. I still need to understand browsers, networks, caching, accessibility, semantics, responsiveness, and SEO. Without the fundamentals, I couldn&rsquo;t tell whether the agent delivered a solution or a pretty time bomb. The keyboard lost importance; judgment gained it.</p>
<p>Today, every Tier A model I test, from Claude to Kimi, can reliably execute the mechanical front-end work that appeared in these six projects. I can say without hesitation that any front-end task that merely turns an already-made decision into code is automatable. They needed direction to create the six designs. None required me to hand-write the flexbox, breakpoint, or component I had already explained.</p>
<p>That covers an enormous share of the work while leaving the most valuable part. Someone still has to know the framework&rsquo;s tradeoffs, understand the browser, choose the architecture, notice when a library is being forced against its design, and find out why an apparently correct solution breaks under a particular combination of device, language, state, and real data. The agent writes the code; an experienced professional provides direction, limits the damage, and owns the result.</p>
<p>Front-end still exists. The excess mechanical work and the people hired only to follow a finished recipe lose value. A great front-end professional can direct agents and deliver far more than they could alone. A mediocre professional who spent years mistaking component typing for engineering will compete for fewer openings. The market gets smaller and more selective, with its best professionals producing more. The goal remains what it always was: get close to the top, where judgment and experience still make a difference.</p>
<p>And it doesn&rsquo;t stop at the browser. <a href="/en/2026/10/11/are-there-better-languages-for-programming-with-llms/">Pick the framework</a>: Android with Flutter or Kotlin, iOS with Swift and SwiftUI, desktop with Rust/Tauri, Flutter, C#, or Electron. Modern agents generally know the components, build tools, tests, and peculiarities of these platforms. They still need direction, feedback, and verification, just as they do on the web front-end. The mechanical part is already automatable.</p>
<p>I tested this in my own small open-source projects. <a href="https://github.com/akitaonrails/FrankYomik"target="_blank" rel="noopener">FrankYomik</a> has a Flutter client for Android and Linux, plus the server and extension. <a href="https://github.com/akitaonrails/FrankSherlock"target="_blank" rel="noopener">Frank Sherlock</a> is a Rust/Tauri desktop app that produces an AppImage for Linux, a DMG for macOS, and a <code>.exe</code> installer for Windows. I also built <a href="https://github.com/akitaonrails/frank_karaoke"target="_blank" rel="noopener">Frank Karaoke</a> in Flutter for Android and <a href="https://github.com/akitaonrails/frank_mangaplus"target="_blank" rel="noopener">FRANK MANGA+</a> in Rust/Tauri for desktop. There are several others on <a href="https://github.com/akitaonrails?tab=repositories"target="_blank" rel="noopener">my GitHub</a>.</p>
<p>None came out perfect from the first prompt. Flutter and Tauri gave me trouble, especially on the early projects. Reliable means the agent can move forward, receive a correction, create tests, fix what broke, and reach a working application without making me take over the manual typing. After testing web, Android, and desktop across different stacks, I&rsquo;m very satisfied with the result. The pattern repeats: mechanical work became agent work.</p>
<p>At two in the morning, I had agents making the final adjustments to this blog without losing pace. That&rsquo;s what I need.</p>
<h2>When the web still didn&rsquo;t know what it was<span class="hx:absolute hx:-mt-20" id="when-the-web-still-didnt-know-what-it-was"></span>
    <a href="#when-the-web-still-didnt-know-what-it-was" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>At the peak of the dot-com bubble, career designers were creating websites. The web had not yet decided how a page should work, so there was real room to experiment. It was often ugly and almost always heavy, but actual creation was happening.</p>
<p>The iPhone opened another window in 2007. Suddenly everything had to fit on a small screen, respond to touch, and work without a mouse. Years of experimentation followed before the market settled on a reasonably stable grammar for navigation, gestures, forms, and content.</p>
<p>Today nobody needs to rediscover a menu, a list, a checkout, or an article page. The patterns are documented, millions of examples are public, and models have seen more interfaces than any person could study in a lifetime.</p>
<p>The most valuable work remains: understanding the product, the person who will use it, the constraints, and what deserves to appear first. Converting a finished decision into hundreds of predictable lines has become a perfect candidate for automation.</p>
<h2>Jobs disappear. Others appear<span class="hx:absolute hx:-mt-20" id="jobs-disappear-others-appear"></span>
    <a href="#jobs-disappear-others-appear" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>The world has never stopped to preserve a job function.</p>
<p>Punch-card operators entered data and programs on paper cards. Telephone operators physically connected calls. Typists kept offices running. Linotype operators cast lines of hot metal to print newspapers. Technology reduced or eliminated these occupations at scale. The Bureau of Labor Statistics&rsquo; <a href="https://www.bls.gov/emp/tables/fastest-declining-occupations.htm"target="_blank" rel="noopener">current list of fastest-declining occupations</a> still includes data entry keyers, typists, and telephone operators. Nobody proposes bringing them back to protect jobs.</p>
<p>At the same time, jobs appeared that a person in 1926 could not even name: mobile developer, SRE, experience designer, Internet video creator, cloud specialist, machine learning engineer. The web itself killed old work and opened an entire industry.</p>
<p>The real story is messier than the caricature. The <a href="https://www.ilo.org/publications/generative-ai-and-jobs-refined-global-index-occupational-exposure"target="_blank" rel="noopener">ILO shows that technology tends to automate tasks without necessarily eliminating entire occupations</a>. Some functions shrink, others change, and new jobs appear. That statistical consolation does nothing for the person who became obsolete today. The individual has to react before the economic average reacts for them.</p>
<p>Compare 2026 with 1926, three years before the crash of 1929. It looks like another planet, even though a century is very little on history&rsquo;s scale. No contract guarantees that your current function will survive the next ten years, much less the next forty.</p>
<h2>How does a junior gain experience now?<span class="hx:absolute hx:-mt-20" id="how-does-a-junior-gain-experience-now"></span>
    <a href="#how-does-a-junior-gain-experience-now" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>It will get harder. The old ladder began with someone paying a beginner to assemble simple screens, fix CSS, and copy components. An agent does much of that faster and cheaper. No company has an obligation to preserve inefficient work as a training program.</p>
<p>Beginners will have to build their own ladder with real projects and problems they are responsible for. That includes reading the code the agent generated, breaking and repairing it, studying documentation and source code, writing tests, and contributing to open projects. An agent gives any student access to an amount of practice that once required a team. Anyone who uses that access only to generate code they do not understand will remain a junior for a long time.</p>
<p>The market will reward people who make that extra effort. It always has. When someone asks how a junior can gain experience without the easy tasks, the hidden question is often different: &ldquo;how do I get a better salary without doing the hard work of getting good?&rdquo; The easy position, with rising pay and little pressure, was a distortion of the bubble. Adapting includes accepting that entry has become more competitive.</p>
<h2>My career never stayed in one place<span class="hx:absolute hx:-mt-20" id="my-career-never-stayed-in-one-place"></span>
    <a href="#my-career-never-stayed-in-one-place" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><a href="/2023/02/14/akitando-138-meu-comeco-de-carreira-durante-a-bolha-1997-a-2002-bug-do-milenio-crash/">I started with multimedia and static websites</a>. Then I worked in a digital agency, enterprise consulting, SAP integration, startups, video, education, and now AI. In my <a href="/2018/12/26/akitando-34-voce-nao-sabe-nada-de-enterprise-conhecendo-a-sap/">Akitando episode about SAP</a>, I tell part of that phase when I had to learn a world completely different from what I had done before.</p>
<p>I lived through the dot-com crash, the 2008 crisis, and the end of the zero-rate bubble. I survived because I never treated my current function as a permanent identity. I kept studying, gaining experience, and changing direction.</p>
<p>A productive career should not consist of repeating the same mechanical task for decades. If your value depends on the market continuing to pay someone to push tags and pixels by hand, the problem did not begin with AI. The problem was betting that the present would last forever.</p>
<p>Many people understand &ldquo;being prepared&rdquo; as studying the bare minimum required for today&rsquo;s open position. That&rsquo;s the fastest recipe for becoming obsolete. Do the short-term work, but study beyond it. Learn the things that seem useless today. Fundamentals, operating systems, networks, databases, business, economics, history. You don&rsquo;t know which combination will save your career five years from now.</p>
<p>I spent years talking about this on Akitando. Revisit the <a href="https://www.youtube.com/playlist?list=PLdsnXVqbHDUehzKjiRruy--gncHz9Injy"target="_blank" rel="noopener"><strong>I Warned You</strong></a> and <a href="https://www.youtube.com/playlist?list=PLdsnXVqbHDUd6wEL932R7dW9Zazt2oNWF"target="_blank" rel="noopener"><strong>Which course should I take?</strong></a> playlists. If you have to start with one video, start with the <strong>Definitive Guide to Learning How to Learn</strong>. No course can save someone who still outsources their own learning.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/oUPaJxk6TZ0"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>The world has no shortage of opportunity. Most people feel they never get one because they are always unprepared when it appears. Once the opportunity lands in front of you, it is too late to start preparing.</p>
<p>So I won&rsquo;t mourn the fact that this package of six small sites, which used to take weeks or months, fit into about a day. I&rsquo;m happy as hell. I gained time to think about what to build, experiment more, and throw away bad versions without wasting weeks of my life.</p>
<p>Today I watched a car spin in midair and land. In about a day, I put six sites with new designs into production without writing most of the HTML and CSS. The future I wanted did not arrive perfect, cheap, or evenly distributed. It arrived far enough for me to work with it.</p>
<p>Accept what ended. Study what comes next. Be ready before the next opportunity appears.</p>
]]></content:encoded><category>artificial-intelligence</category><category>frontend</category><category>automation</category><category>career</category></item><item><title>RANT: Did AI Kill Programmers?</title><link>https://akitaonrails.github.io/en/2026/02/08/rant-ai-killed-programmers/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2026/02/08/rant-ai-killed-programmers/</guid><pubDate>Sun, 08 Feb 2026 14:29:18 +0000</pubDate><description>&lt;p&gt;Anyone who only watched clips and hot takes, without watching my &lt;a href="https://www.youtube.com/watch?v=UDrDg6uUOVs&amp;amp;list=PLdsnXVqbHDUeowsAO0sChHDY4D65T5s1U&amp;amp;pp=sAgC"target="_blank" rel="noopener"&gt;videos about AI&lt;/a&gt; on my channel, or at least the &lt;a href="https://www.youtube.com/watch?v=sf4Gxf0LiKo"target="_blank" rel="noopener"&gt;podcast on Flow&lt;/a&gt;, thinks I said the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;AIs will NEVER replace ANY programmer&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And that&amp;rsquo;s wrong. Watch the video with the explanation (or look for the transcript). But in short, what I said was:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;AIs will never replace programmers LIKE ME — I will never be replaced&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another thing I stated and keep stating is:&lt;/p&gt;</description><content:encoded><![CDATA[<p>Anyone who only watched clips and hot takes, without watching my <a href="https://www.youtube.com/watch?v=UDrDg6uUOVs&amp;list=PLdsnXVqbHDUeowsAO0sChHDY4D65T5s1U&amp;pp=sAgC"target="_blank" rel="noopener">videos about AI</a> on my channel, or at least the <a href="https://www.youtube.com/watch?v=sf4Gxf0LiKo"target="_blank" rel="noopener">podcast on Flow</a>, thinks I said the following:</p>
<blockquote>
  <p>&ldquo;AIs will NEVER replace ANY programmer&rdquo;</p>

</blockquote>
<p>And that&rsquo;s wrong. Watch the video with the explanation (or look for the transcript). But in short, what I said was:</p>
<blockquote>
  <p>&ldquo;AIs will never replace programmers LIKE ME — I will never be replaced&rdquo;</p>

</blockquote>
<p>Another thing I stated and keep stating is:</p>
<blockquote>
  <p>&ldquo;AGIs are not possible in the current architecture: it&rsquo;s not going to happen. A new discovery needs to show up — one we obviously don&rsquo;t know yet — to break past the current barrier, which is insurmountable.</p>

</blockquote>
<p>And that&rsquo;s where I derived this line from:</p>
<blockquote>
  <p><strong>&ldquo;Your excitement about AI is inversely proportional to your knowledge about AI&rdquo;</strong> — and it still holds just as well.</p>

</blockquote>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/akita%20camiseta.jpg" alt="akita camiseta"  loading="lazy" /></p>
<h2>The Programming Bubble Already Popped<span class="hx:absolute hx:-mt-20" id="the-programming-bubble-already-popped"></span>
    <a href="#the-programming-bubble-already-popped" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><a href="https://www.youtube.com/@Akitando"target="_blank" rel="noopener">My channel</a> started in 2018 and ran until early 2024, with a single purpose:</p>
<blockquote>
  <p>Helping to prepare real programmers to survive the imminent popping of the bubble (which started around 2014).</p>

</blockquote>
<p>I have a whole playlist titled <a href="https://www.youtube.com/watch?v=wpPv1dJWjDs&amp;list=PLdsnXVqbHDUehzKjiRruy--gncHz9Injy&amp;pp=sAgC"target="_blank" rel="noopener"><strong>I TOLD YOU SO</strong></a>.</p>
<p>In short, in recent years, &ldquo;programming&rdquo; became the &ldquo;profession of the future&rdquo;, and <a href="https://www.youtube.com/watch?v=V7oUDL7E1g4"target="_blank" rel="noopener">it seemed easy</a>. It got obvious when all you saw was ads for every kind of course and bootcamp, with promises like: <em>&ldquo;become a programmer in 2 months, earn a Google salary, and you barely even have to work.&rdquo;</em></p>
<p>I called this kind of programmer the &ldquo;instant noodle chef&rdquo;. Just because you know how to boil water and make instant noodles doesn&rsquo;t make you a chef. It should be obvious, but that&rsquo;s how programming was sold. None of those courses produced any &ldquo;programmer&rdquo;, let alone a &ldquo;software engineer&rdquo;.</p>
<p>But &ldquo;software engineer&rdquo; is not real engineering. There&rsquo;s no CREA, CRM, OAB, or any equivalent body that certifies anyone as a &ldquo;software engineer&rdquo;. It&rsquo;s a made-up title anyone can slap on their LinkedIn.</p>
<p>The Black Swan of the Pandemic was something I didn&rsquo;t predict, but it only helped inflate the final phase of the bubble even further, which popped at the end of 2022 when mass layoffs began across every big tech. And that was BEFORE the advent of LLMs for programming. Coincidentally, ChatGPT showed up around the same time in 2022, but it was not the cause; it was just the last nail in the coffin. The popping of that bubble and the layoffs would have happened anyway.</p>
<p>That&rsquo;s why <a href="https://www.youtube.com/@Akitando"target="_blank" rel="noopener">my channel</a> must be the only one that, to this day, offers the content someone who actually wants to be a programmer needs. Imagine the other channels that only pushed the narrative that becoming a programmer was easy — they aged VERY badly.</p>
<p>So yes, I agree with Anthropic&rsquo;s CEO: those &ldquo;software engineers&rdquo; will become completely obsolete. Nobody becomes an &ldquo;engineer&rdquo; in a 1-month bootcamp. That was <strong>bullshit</strong> and you had to be really dumb to believe it. Notice how all those snake-oil sellers VANISHED. Where are they?</p>
<p>Don&rsquo;t know where to start on my channel? Two suggestions:</p>
<ul>
<li>Playlist <a href="https://www.youtube.com/watch?v=D3L8IOncLkg&amp;list=PLdsnXVqbHDUd6wEL932R7dW9Zazt2oNWF&amp;pp=sAgC"target="_blank" rel="noopener">&ldquo;What courses should I take?&rdquo;</a></li>
<li>Playlist <a href="https://www.youtube.com/watch?v=A2-yU3YjB1U&amp;list=PLdsnXVqbHDUcAWAN3cXHWnM9JEw2gjIN9&amp;pp=sAgC"target="_blank" rel="noopener">&ldquo;Career&rdquo;</a></li>
</ul>
<h2>The AI &ldquo;Ceiling&rdquo;<span class="hx:absolute hx:-mt-20" id="the-ai-ceiling"></span>
    <a href="#the-ai-ceiling" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I finished recording videos for my channel exactly when the AI wave started. I considered that everything I wanted to say had already been said and it all remains available on the channel. My goal was accomplished.</p>
<p>During 2024 and 2025 I took part in podcasts like <a href="https://www.youtube.com/watch?v=25DG7ivZq_o&amp;list=PLdsnXVqbHDUcjqXfKo42h6Cm-HCcUNOnV&amp;pp=sAgC"target="_blank" rel="noopener">Flow</a> and <a href="https://www.youtube.com/watch?v=RKDCQUqXGg4&amp;list=PLdsnXVqbHDUdrzeKMb3QOwKW6rMvVHPeq&amp;pp=sAgC"target="_blank" rel="noopener">Inteligência Ltda</a> talking a lot about AIs and things like <a href="https://www.youtube.com/watch?v=_Hl9wiLkns4&amp;pp=ygUdZmFiaW8gYWtpdGEgaW50ZWxpZ2VuY2lhIGx0ZHM%3D"target="_blank" rel="noopener">quantum computing</a> (and how it too is just hype that won&rsquo;t amount to anything practical in our day-to-day).</p>
<p>The main point: since the transformers paper <a href="https://arxiv.org/abs/1706.03762"target="_blank" rel="noopener">Attention is all you need</a>, no other &ldquo;breakthrough&rdquo; has appeared that surpasses that milestone. Everything we have today, from OpenAI to Anthropic, and from open sources like DeepSeek, Qwen3, GLM, MiniMax, etc., is based on exactly the same foundation, the same &ldquo;architecture&rdquo;.</p>
<p>And I theorized — correctly — that the evolution of this architecture would follow an <strong>S-curve</strong>:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/Screenshot-2023-10-29-at-1.50.57-PM.jpg" alt="curva S"  loading="lazy" /></p>
<p>GPT-1 to 2 was a quantum leap. GPT-2 to 3 was a gigantic leap. GPT-3 to 4 was excellent, but, notably, not in the same proportion. GPT-4 to 5, most regular people barely noticed the difference.</p>
<p>Of course, nobody stood still; every computer scientist, mathematician, engineer kept doing what we always do: <strong>optimizing</strong>. Better training methods showed up, the idea of &ldquo;reasoning&rdquo;, the idea of agents working together (one giving feedback to another), new forms of alignment and instruction. But none of that changes the foundational architecture.</p>
<p>The problem: training each new generation of LLMs gets considerably more expensive (in hardware and, mainly, in energy consumption) to produce a version that isn&rsquo;t much better than the previous one. That&rsquo;s the ceiling of the curve. And I reaffirm: until a NEW ARCHITECTURE appears, we&rsquo;ll only get closer and closer to that ceiling, without crossing it, while spending absurd levels of more memory and more energy.</p>
<p>That&rsquo;s why there&rsquo;s an <a href="https://research.aimultiple.com/ai-energy-consumption/"target="_blank" rel="noopener">energy shortage</a>: with the increase in usage demand (inference), they have to split between spending energy on training new versions and serving demand. They can&rsquo;t do both.</p>
<p>Worse, that&rsquo;s why <a href="https://www.techradar.com/computing/memory/more-ram-misery-the-bad-news-keeps-coming-as-analyst-firm-warns-of-an-unprecedented-and-record-breaking-surge-with-price-hikes"target="_blank" rel="noopener">RAM prices exploded</a> and your PC will get much more expensive too. There are no more resources to train models so big that, proportionally, deliver less and less result (the definition of &ldquo;diminishing returns&rdquo;). It&rsquo;s the fate of every innovation: hitting the ceiling of the S-curve until another one comes along to replace it.</p>
<p>The focus now is on using the versions we already have better. In the programming case, you get GPT Codex or Claude Code, which are strategies for using agents, MCPs, skills, and other tools and forms of orchestration to squeeze the maximum out of what we already have today.</p>
<h2>LLM Strategies<span class="hx:absolute hx:-mt-20" id="llm-strategies"></span>
    <a href="#llm-strategies" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Everyone already knows it&rsquo;s impossible to just write a prompt and have any LLM spit out a perfect system in the end. It will come out very bad; it stays that way and will stay that way in this architecture.</p>
<p>Every LLM has a context (memory) limit. It&rsquo;s impossible to load the entire source code of a giant ERP like Totvs&rsquo;s or SAP&rsquo;s. It doesn&rsquo;t fit, and even if it did, it wouldn&rsquo;t be possible to give &ldquo;attention&rdquo; to all of it. There are limits: the more memory you load, the worse inference gets; the result gets worse. Like everything in software, it&rsquo;s a &ldquo;trade-off&rdquo;.</p>
<p>Instead, the best thing is to create scripts that walk through your code and extract specific chunks on each run. If you&rsquo;re working on the shopping cart, you don&rsquo;t need to load the code that handles the store&rsquo;s landing page, for example. It&rsquo;s similar to what a human programmer would do: <strong>divide and conquer</strong> (as Napoleon would say).</p>
<p>Every LLM specialized in code, like Codex or Opus, was trained to do <strong>&ldquo;tool calling&rdquo;</strong>, which is sending a request to the &ldquo;chat&rdquo; so it can fetch information (such as code) and load snippets into the context. For that, it has it run tools like &ldquo;rg&rdquo; <a href="https://github.com/BurntSushi/ripgrep"target="_blank" rel="noopener">ripgrep</a> (in Codex&rsquo;s case) or &ldquo;grep&rdquo; (in OpenCode&rsquo;s case).</p>
<p>If, by chance, the model wasn&rsquo;t trained on information that only recently came out on the Web, it can do <strong>&ldquo;agentic fetch&rdquo;</strong>, which is executing commands like &ldquo;curl&rdquo; to literally go to Google, Stack Overflow, etc., and pull web pages in to use as part of the context (the trade-off is that this will use up the limited context space).</p>
<p>When the context is about to run out (the 200k token range, in Claude&rsquo;s case, or 1 million, in Gemini&rsquo;s case), the &ldquo;chat&rdquo; that orchestrates (Claude Code, OpenCode, etc.) triggers a summary of the current context, to &ldquo;compact&rdquo; the understanding and restart with a new context based on that summary.</p>
<p>To make sure the generated code &ldquo;works&rdquo;, tool calling asks it to run local tools like linters, compilers, or LSPs (like an IDE, like VSCode, would). This produces feedback (and burns more context). If it errors, the &ldquo;chat&rdquo; can automatically ask it to redo the work, taking this new information into account.</p>
<p>Also, to go &ldquo;faster&rdquo;, the &ldquo;chat&rdquo; can fire off multiple agents in parallel. Each agent is a new context — and none of this is free, remember: tokens per second. So, it could send one agent to comb through all the code relevant to the database and, at the end, produce a summary. Another agent combs through all the payment code and, at the end, generates a summary. Another agent combs through the cart front-end code and produces a summary. Then the &ldquo;chat&rdquo; takes those summaries and goes back to the previous context to execute some task.</p>
<p>What I call &ldquo;chat&rdquo; is just to make it easier to visualize. Think of the simple chat interface everyone uses day to day, but with additional features. That&rsquo;s what a Codex or a Claude Code does. There&rsquo;s no secret, every tool like this, as well as open source ones like OpenCode or Crush, do the same thing: they set up a <strong>&ldquo;Harness&rdquo;</strong>:</p>
<ul>
<li>They start with a system prompt detailing exactly how they want the LLM to respond. This <a href="https://github.com/Piebald-AI/claude-code-system-prompts"target="_blank" rel="noopener">GitHub</a> has several examples of these prompts the tool sends without you knowing.</li>
<li>LLMs are trained with tool calling and the tool knows how to respond to those calls (executing bash, curl, ripgrep, sed, diff, git, etc.)</li>
<li>The tool is capable of running multiple agents in parallel (think multiple &ldquo;chats&rdquo; in parallel)</li>
<li>The tool asks the LLM to produce a &ldquo;plan&rdquo; first and enumerate tasks. Then it can orchestrate the sequential execution of those tasks, each in a different agent, for example.</li>
<li>The tool is capable of managing context limits and knowing when to trigger a summary, and how to start a new context and continue executing the remaining tasks</li>
<li>The tool is responsible for creating a container and preventing badly formed commands from affecting your system (this is optional; not all of them do it or care by default. Watch out!)</li>
</ul>
<p>I&rsquo;ve documented this in several posts on this blog:</p>
<ul>
<li><a href="/en/2025/04/25/llm-hello-world-building-your-own-local-ai-chat/">LLM Hello World: building your own AI chat that runs locally</a></li>
<li><a href="/en/2025/05/01/rant-llms-will-evolve-forever-demystifying-llms-in-programming/">Rant — Will LLMs evolve forever? Demystifying LLMs in programming</a></li>
<li><a href="/en/2025/05/01/when-llms-dont-work-for-coding-a-more-realistic-use-case/">When Don&rsquo;t LLMs Work for Programming? A more realistic use case.</a></li>
<li><a href="/en/2026/01/10/ai-agents-locking-down-your-system/">AI Agents: Locking Down Your System</a></li>
<li><a href="/en/2026/01/11/ai-agents-comparing-top-llms-on-the-zig-challenge/">AI Agents: Comparing the main 2026 LLMs on the Zig Challenge</a></li>
<li><a href="/en/2026/01/21/ai-agents-installing-lsps-for-crush/">AI Agents: Installing LSPs for Crush</a></li>
<li><a href="/en/2026/01/24/ai-agents-which-is-best-opencode-crush-claude-code-codex-copilot-cursor-windsurf-antigravity/">AI Agents: Which one is best? OpenCode, Crush, Claude Code, GPT Codex, Copilot, Cursor, Windsurf, Antigravity?</a></li>
<li><a href="/en/2026/01/28/vibe-code-built-a-little-app-fully-with-glm-4-7-tv-clipboard/">Vibe Code: I built a little app 100% with GLM 4.7 (TV Clipboard)</a></li>
<li><a href="/en/2026/01/29/vibe-code-which-llm-is-best-lets-be-real/">Vibe Code: Which LLM is the BEST?? Let&rsquo;s talk for REAL</a></li>
<li><a href="/en/2026/02/01/frankmd-markdown-editor-vibe-code-part-1/">Vibe Code: I built a Markdown Editor from scratch with Claude Code (FrankMD) PART 1</a></li>
<li><a href="/en/2026/02/01/frankmd-markdown-editor-vibe-code-part-2/">Vibe Code: I built a Markdown Editor from scratch with Claude Code (FrankMD) PART 2</a></li>
</ul>
<h2>The End of Stack Overflow<span class="hx:absolute hx:-mt-20" id="the-end-of-stack-overflow"></span>
    <a href="#the-end-of-stack-overflow" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Back in the GPT-3 and GPT-4 days, I was already writing code using LLMs and it worked well. But they still had lots of annoyances. Hallucinations were very frequent. There was a lot of &ldquo;agentic loop&rdquo; (when the LLM &ldquo;thinks&rdquo; it already fixed something, but it didn&rsquo;t, and it stays in a loop, not knowing what to do). Attention to context was easily lost (it improved a lot with Flash attention). Basically, several &ldquo;rougher&rdquo; issues have been ironed out to the point that they don&rsquo;t show up as often. It&rsquo;s not &ldquo;solved&rdquo;; it still happens, but it keeps getting better.</p>
<p>The more training data and alignment improved, the more those problems disappeared. The problem is we&rsquo;ve already reached the point where the training data in the world has <strong>run out</strong>. Everything that could be used has already been used. It&rsquo;s not just the lack of energy and hardware. The information to train on is gone.</p>
<p>The solution was to massage existing data to squeeze the maximum possible out of it and add lots of synthetic data (generated by the AI itself). Again, this already hits a &ldquo;diminishing returns&rdquo; ceiling.</p>
<p><a href="https://blog.pragmaticengineer.com/stack-overflow-is-almost-dead/"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/stackoverflow.png" alt="stackoverflow dead"  loading="lazy" /></a></p>
<p>On top of that, several sites used to extract LLM training data are falling into disuse. The most notable example is the venerable Stack Overflow. Look at how its traffic has dropped.</p>
<p>Some clueless people might just think: <em>&ldquo;ah, it&rsquo;s fine, people started asking dumb questions to LLMs instead, no more piles of people posting basic questions in forums.&rdquo;</em></p>
<p>It&rsquo;s true, it seems like progress. But even a &ldquo;dumb question&rdquo; is relevant training data. If the LLM &ldquo;sees&rdquo; that certain topics have higher probability, when it gets the same question, it &ldquo;tends&rdquo; to give the most popular answer. If this data disappears, so does the relevance of lots of new topics. Now, each LLM will depend on using the questions asked in its own chat as new training data, except OpenAI will only have questions asked to it, and it won&rsquo;t know which are the most popular questions asked in Claude, which shrinks the sources of relevant information more and more.</p>
<p>What every platform must be doing now is collecting every question you ask it, every answer the LLM produced, every bit of feedback you or your tools give on whether it was a success or an error, and stacking it up to train the next version, GPT-6 or Sonnet-5. Let&rsquo;s see how much you can evolve with just that — remembering that &ldquo;volume&rdquo; of information doesn&rsquo;t equal &ldquo;quality&rdquo; for training. That&rsquo;s still the Achilles heel.</p>
<blockquote>
  <p>The point is: at least temporarily, most of the relevant data on the Web has run out, and we&rsquo;re producing less than before.</p>

</blockquote>
<h2>Constraint == Innovation<span class="hx:absolute hx:-mt-20" id="constraint--innovation"></span>
    <a href="#constraint--innovation" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Yes, I also believe an entire category, which called itself &ldquo;software engineer&rdquo;, is going to stop existing because of AIs.</p>
<p>That weird &ldquo;specialization&rdquo; of &ldquo;front-end who doesn&rsquo;t touch any back-end&rdquo; or &ldquo;back-end who doesn&rsquo;t touch any infra&rdquo; will no longer exist. Front-end, in particular, is the easiest to replace, because it was a huge volume of low-value-added code with lots of duplication. It wasn&rsquo;t hard to automate, but nobody wanted to: it was &ldquo;cooler&rdquo; to keep inventing new frameworks every week that do the same thing in slightly different ways. That circus is finally over.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/V0D3PuTLOZ8"
    title="Restrição == Inovação - Fabio Akita"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>I lectured for years on Constraint == Innovation and how innovation doesn&rsquo;t happen when you have money to burn, which is what happened in the last Programming Bubble: why automate things, be efficient, if there&rsquo;s money to spare? Just hire more and more people to do simpler and simpler grunt work.</p>
<p>In the Internet Bubble, there was so much money to burn that a &ldquo;website cataloguer&rdquo; profession existed: people who spent all day manually typing in every new site that appeared on the newly launched Web. It took years for an Altavista and then a Google to show up and figure out how to automate this. Back then, there were no &ldquo;web admins&rdquo; to publish new products in an e-commerce site: someone edited the HTML of Submarino.com&rsquo;s homepage every day, with new deals. All high-volume, low-value-added work. We automated all of that, and now, with LLMs, we&rsquo;ve just gone one step further.</p>
<p>Even before LLMs, it made no sense to need people exclusively to churn out disposable HTML/CSS all day. The slightly more automatic tools, like a SquareSpace.com of the world, weren&rsquo;t all that good.</p>
<p>The thing is: something simple, like a &ldquo;Web Admin&rdquo; to edit content without needing to know HTML, didn&rsquo;t exist in the 90s. Someone had to build the first versions of that kind of software so we could understand what works and what doesn&rsquo;t. Anyone from the 90s will remember expensive commercial software like the famous <a href="https://en.wikipedia.org/wiki/Vignette_Corporation"target="_blank" rel="noopener">Vignette Story Server</a>. Today, any open source Wordpress does the same thing better.</p>
<p>Nobody remembers software and companies that no longer exist. Especially young people think the world showed up with the Web ready-made, with social networks ready-made and e-commerce platforms ready-made. The feeling must be that, in Ancient Egypt, people already shopped on Amazon, ordered delivery on iFood, and everyone chatted on WhatsApp. I made a video called <a href="https://www.youtube.com/watch?v=Qb5b8ZE9tIY"target="_blank" rel="noopener">The Dimension of Time</a>, <a href="https://www.youtube.com/watch?v=0KNGiOp7eoE"target="_blank" rel="noopener">My Time Machine</a> and <a href="https://www.youtube.com/watch?v=ksZjJQiaK2Y"target="_blank" rel="noopener">My First Five Years</a> to try to give some perspective on this.</p>
<blockquote>
  <p>The point is: everything LLMs know how to do either already exists or already existed.</p>

</blockquote>
<p>They&rsquo;re not capable of inventing whatever it is, be it the &ldquo;Vignette of the 2030s&rdquo; or the &ldquo;Instagram of the 2030s&rdquo;. And I don&rsquo;t mean that in the sense of the &ldquo;next content manager&rdquo; or &ldquo;next social network&rdquo;. I mean in the sense that &ldquo;social network&rdquo; was a term that didn&rsquo;t exist in the 2000s and &ldquo;content manager&rdquo; didn&rsquo;t exist in the 80s, for example. What&rsquo;s the new category that will show up in the 2030s?</p>
<p>I don&rsquo;t know; if I did, I&rsquo;d obviously be building it to launch and become a billionaire. Nobody knows, much less LLMs. They can derive a lot of things from training, but what&rsquo;s not in the model&rsquo;s probabilities won&rsquo;t &ldquo;spontaneously&rdquo; appear. That&rsquo;s not how AIs work.</p>
<p>We can stay forever just redoing everything that&rsquo;s already been done the same way it exists today. But not much more than that. But the whole point of my talks was exactly that innovations are not born from just having tons of money and tons of brute force.</p>
<h2>Programmers in the LLM Era<span class="hx:absolute hx:-mt-20" id="programmers-in-the-llm-era"></span>
    <a href="#programmers-in-the-llm-era" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>The conclusion is very simple: programmers like me will always exist. What always stops existing are professions that only have volume but low added value. That&rsquo;s the concept.</p>
<p>As I said in my videos, during my career I&rsquo;ve already survived the end of the microcomputer bubble in the early to mid 90s, the internet bubble from the mid 90s to the early 2000s, the 2001-2008 programming recession, the financial housing bubble that popped in 2008 but gave birth to the programming bubble, especially from 2014 to 2022, and now the AI bubble.</p>
<p>Don&rsquo;t fool yourself: it&rsquo;s always like this, and this is nothing more than another episode.</p>
<p>Who&rsquo;s the programmer that survives all these bubbles? This one:</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/oUPaJxk6TZ0"
    title="Guia DEFINITIVO de Aprendendo a Aprender | A maior BRONCA da sua vida [RATED R]"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>The ceiling of LLMs is already here and what they&rsquo;re delivering now isn&rsquo;t going to change much: the process is going to be the same. It&rsquo;ll get a bit faster. It&rsquo;ll generate a few less errors and small tweaks like that. But the process will keep being the same until some new architecture or some new discovery we don&rsquo;t know about yet shows up.</p>
<blockquote>
  <p>No AI-generated code will be automatically perfect to be put into production without any kind of review or human intervention. — Anyone who thinks otherwise either has never tested an LLM in practice or has never worked on real projects.</p>

</blockquote>
<p>As I said on Flow, this is the SECOND AI Bubble. The first was in the 60s because of the inventor of neural networks, Frank Rosenblatt. Just like Sam Altman or Dario Amodei, he also hyped neural networks and computers that were going to get much smarter than human beings &ldquo;very soon&rdquo;, and every newspaper at the time wrote about it. The promises died as promises and that generated the &ldquo;AI Winter&rdquo; in the 70s, where tons of investment was made, the result was not proportional, and AI research stagnated for the following decades, crawling at a turtle&rsquo;s pace.</p>
<p>That only really started to change with the advent and popularization of the Web, the rise of social networks, the emergence of Big Data, and now, with huge volumes of data to kick off a new era of research on neural networks, with a lot more training material. And now with the existence of GPUs to accelerate processing. That&rsquo;s when AlexNet showed up, from Geoffrey Hinton, Yann LeCun, and Ilya Sutskever, the &ldquo;breakthrough&rdquo; of convolutional neural networks (CNNs) and parallel processing via GPUs.</p>
<p>Without that, we wouldn&rsquo;t have moved on to transformers, diffusers, and things like Nano Banana and Sora. This is a type of area where LLMs won&rsquo;t contribute: cutting-edge research and new discoveries. In that field, we&rsquo;ll still need computer scientists, mathematicians, theoretical physicists, etc. If you have a calling for research, it&rsquo;ll still be a fertile area for many years. The bar only went up, which is a good thing.</p>
<p>About the Claude that managed to build a C compiler:</p>
<blockquote>
  <p>A C compiler is the easiest to build; it&rsquo;s literally college material, because C is one of the &ldquo;simplest&rdquo; languages (it started as Assembly macros).</p>

</blockquote>
<p><a href="https://www.anthropic.com/engineering/building-c-compiler"target="_blank" rel="noopener"><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/screenshot-2026-02-08_12-58-46.png" alt="gcc claude"  loading="lazy" /></a></p>
<p>As Anthropic&rsquo;s own article — which nobody read, of course — says, they used GCC for comparison.</p>
<p>Of course, GCC exists; it&rsquo;s the main compiler used to compile the Linux kernel. If you copy GCC, you&rsquo;ll arrive at another GCC, no matter what other language you write it in — that&rsquo;s not the hard part, because every language can do everything another language can (they&rsquo;re all Turing Complete: it can be slower, it can be less safe, it can be more work, but I can write a C compiler in Visual Basic if I want, that&rsquo;s not impressive).</p>
<p>No LLM has replaced Linus Torvalds, nor Richard Stallman, nor any of the great programmers whose names you&rsquo;ve heard. They can copy what&rsquo;s already been done, and that&rsquo;s it. Yes, they are &ldquo;stochastic parrots&rdquo;, regardless of what a Geoffrey Hinton tries to propagandize in his own favor (everyone has biases). By the way, as I&rsquo;ve already said on podcasts: fuck Geoffrey Hinton. Stop falling for the <strong>Appeal to Authority Fallacy</strong>.</p>
<h2>A Word to Companies<span class="hx:absolute hx:-mt-20" id="a-word-to-companies"></span>
    <a href="#a-word-to-companies" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This should be obvious, but I&rsquo;m going to put it on the record just so I can say &ldquo;I TOLD YOU SO&rdquo; later.</p>
<ul>
<li>No LLM is going to write code on its own. It needs a senior to spec it out.</li>
<li>Every LLM-generated piece of code needs review. It needs a senior to review it.</li>
<li>Part of the generated code needs to be rewritten. It needs a senior to know that.</li>
<li>Another part of the code will have bugs the LLM will miss. It needs a senior to know that.</li>
<li>Knowing what these bugs are, you can have the LLM fix them.</li>
</ul>
<p>With that said, some things LLMs do very well:</p>
<ul>
<li>Exploratory analysis of legacy code</li>
<li>Refactoring parts of legacy code</li>
<li>Adding unit tests to parts of legacy code</li>
<li>Suggesting improvements to parts of legacy code</li>
<li>Finding some security or performance holes in legacy code</li>
</ul>
<p>Notice how I say &ldquo;parts&rdquo; or &ldquo;some&rdquo;. There&rsquo;s no guarantee it can do this on any legacy codebase or any part. Again, it needs a good senior evaluating each step.</p>
<p>Everything is done <strong>STEP BY STEP</strong>. An attempt, a check, an adjustment, repeat. It&rsquo;s the famous PDCA cycle: Plan, Do, Check, Act. That&rsquo;s the process that works. Every new tested adjustment becomes a &ldquo;git commit&rdquo; and we move on to the next step. Always one step at a time, systematically, in an organized manner. Never something generic like <em>&ldquo;Fix everything in this legacy system&rdquo;</em>.</p>
<p>Another thing LLMs are very good at is rewriting code from one language to another (translations in general). But I don&rsquo;t recommend it, and not just because it&rsquo;s an LLM:</p>
<blockquote>
  <p>I never recommend rewriting from scratch as a first option.</p>

</blockquote>
<p>There&rsquo;s no guarantee a newer language is &ldquo;better&rdquo; than an older one. &ldquo;Better&rdquo; always &ldquo;depends&rdquo; on your definition of &ldquo;better&rdquo;.</p>
<p>It&rsquo;s trendy now to rewrite everything in Rust because supposedly it has fewer security problems. That&rsquo;s incorrect. Rust is good for certain categories of security, not all of them. And there&rsquo;s a whole category of <strong>functional</strong> problems that don&rsquo;t show up in any compiler. Rewriting something complex, like a Linux kernel, in Rust is a gigantic illusion and a waste. If it &ldquo;seems easy&rdquo; to have an LLM rewrite it in Rust, it&rsquo;s equally easy for it to fix a small bug in C precisely, without touching the rest that already works.</p>
<blockquote>
  <p>Rewriting is indeed a guarantee that several new bugs will appear and you won&rsquo;t detect them right away; it&rsquo;ll be a new time bomb. To fix one known bug, you ended up creating several other unknown bugs. Rewriting, by definition, always adds new bugs.</p>

</blockquote>
<p>And no, when you ask the LLM: <em>&ldquo;find all the security bugs in this code&rdquo;</em>, it&rsquo;s going to find some, but never all of them.</p>
<p>Understand Portuguese: it&rsquo;ll always say something like <em>&ldquo;Here are all the bugs I found&hellip;&rdquo;</em> Even today&rsquo;s LLM won&rsquo;t try to say <em>&ldquo;Here are all the bugs that exist&rdquo;</em> anymore.</p>
<p>No AI is built to give 100% correct, unambiguous answers. On the contrary, it&rsquo;s always a probabilistic machine that will give the answer based on the probabilities of the model generated by training. What&rsquo;s not in that model, it doesn&rsquo;t know. And even giving it context, there are no guarantees of &ldquo;complete understanding&rdquo;, only of &ldquo;some understanding&rdquo;. Always work with probabilities below 100%.</p>
<p>Programming languages, by their very nature, are not deterministic. There&rsquo;s no way to write a mathematical equation where I can feed it the program and it guarantees the absence of bugs. This is a mathematical impossibility; it&rsquo;s not &ldquo;a matter of time&rdquo;. Time is not relevant to that definition.</p>
<blockquote>
  <p>Bug detection (functional, security, performance, etc.) is always a stochastic process, a heuristic, never an algorithm. This is something every computer scientist or mathematician understands, but nobody who&rsquo;s never studied can understand. For regular people, heuristic is the same as algorithm. That&rsquo;s a mistake that can be fatal.</p>

</blockquote>
<p>So, every LLM, by its very foundation and architecture, will always have these and other limitations built in. But that&rsquo;s not a problem, that&rsquo;s just the nature of the tool. Hammers aren&rsquo;t meant to turn screws, and that&rsquo;s not a flaw. It should be obvious, but hitting a hammer on a nail and not turning it is a natural characteristic. It&rsquo;s neither an advantage nor a defect. <strong>It depends on what problem you want to solve.</strong></p>
<p>Overall, LLMs will be very good at handling grunt work: adding tests, refactoring code, tweaking front-end, creating new screens from old screens, creating new reports from old reports. Creating Portuguese-to-Spanish translations of your system&rsquo;s screens. For that kind of nail, LLMs are the perfect hammer.</p>
<p>Now, precise interpretation of laws, business rules, individual cases and exceptions to the rule, relaxing certain rules — everything that&rsquo;s part of decision-making in a company. Never fully trust any LLM: you&rsquo;ll need an experienced human to approve or reject. No matter how much it has memorized all the country&rsquo;s laws, there&rsquo;s no guarantee it knows when to use or not use them, and how that can vary in the most diverse cases, especially in the exceptions.</p>
<blockquote>
  <p>Never ask a hammer how you should run your company.</p>

</blockquote>
<h2>&ldquo;How do you get seniors if there won&rsquo;t be juniors anymore?&rdquo;<span class="hx:absolute hx:-mt-20" id="how-do-you-get-seniors-if-there-wont-be-juniors-anymore"></span>
    <a href="#how-do-you-get-seniors-if-there-wont-be-juniors-anymore" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Notice that the premise is that, at minimum, you&rsquo;ll always need a senior instructing and reviewing the LLM&rsquo;s work.</p>
<p>But if LLMs can perform all the grunt tasks that used to go to interns and juniors, how are they going to grow into seniors?</p>
<p>It&rsquo;s the billion-dollar question and I&rsquo;ll say upfront I don&rsquo;t know the full answer. Nobody does.</p>
<p>The start is easy. It&rsquo;s what I said in every video on the channel: it&rsquo;s how I made my entire career: having a solid education and &ldquo;learning to learn&rdquo; for real. Easier said than done; that&rsquo;s why I spent 5 years of videos trying to explain it in every way I could, to see if anyone would get it.</p>
<p>The next part is the hard one: how do you learn if LLMs already do everything?</p>
<p>This question starts from a false premise: LLMs don&rsquo;t do everything. They do what they&rsquo;re asked to do. If the request is well specified, it&rsquo;ll come out like a gourmet dish from a 3-Michelin-star restaurant. If the request is lame, from someone clearly inexperienced, it&rsquo;ll come out as instant noodles. It&rsquo;s that simple.</p>
<blockquote>
  <p>The LLM&rsquo;s result is directly proportional to the work of instruction, evaluation, and follow-up from the human in control.</p>

</blockquote>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/frankmd/2026/02/s-l960.jpg" alt="cartão perfurado"  loading="lazy" /></p>
<p><em>&ldquo;How is someone going to be a programmer if they don&rsquo;t even know how to punch a card?&rdquo;</em> — It&rsquo;s a fair question to ask someone in the 60s.</p>
<p><em>&ldquo;How is someone going to be a programmer if they don&rsquo;t even know how to save to a cassette tape?&rdquo;</em> — Another fair question, if it&rsquo;s someone from the 80s.</p>
<p><em>&ldquo;How is someone going to be a programmer if they don&rsquo;t even know how to edit code in a text editor like Emacs and needs Eclipse?&rdquo;</em> — Another fair question, if it&rsquo;s someone from the 90s.</p>
<p><em>&ldquo;How is someone going to be a programmer if they don&rsquo;t even know how to code for the Web?&rdquo;</em> — A good question for someone in the early 2000s.</p>
<p><em>&ldquo;How is someone going to be a programmer if they can&rsquo;t even build a mobile app?&rdquo;</em> — If it&rsquo;s someone in the 2010s.</p>
<p><em>&ldquo;How is someone going to be a programmer if they have LLMs?&rdquo;</em> — The question of the 2020s. Good luck.</p>
<p>Every generation has similar questions. None of them have an exact solution. Look at the facts: we&rsquo;re still here. In 2026, I know things about programming I never dreamed I&rsquo;d know when I entered college in 1995. Everything has changed. Everyone who &ldquo;learned how to learn&rdquo; knew how to <strong>ADAPT</strong> and use the knowledge they already had to learn new ways of working.</p>
<blockquote>
  <p>It&rsquo;s all about adaptation: those who don&rsquo;t adapt go extinct. That&rsquo;s the law.</p>

</blockquote>
<p>There&rsquo;s not much more to say about this. But in practice:</p>
<p>If you&rsquo;re a programmer, use LLMs. Learn their strengths and weaknesses, the different results they produce depending on your own knowledge, and never stop studying and training.</p>
<p>If you&rsquo;re a senior/company, keep hiring juniors. Your seniors aren&rsquo;t immortal. At the very least, eventually they&rsquo;ll retire. More realistically: eventually they&rsquo;ll change jobs. The second most important task of any senior is mentoring juniors and creating replacements. A senior incapable of creating their own replacement isn&rsquo;t a senior, they&rsquo;re a <strong>liability</strong>.</p>
<p>Mentoring is the same thing as always: training with follow-up and feedback, continuous improvement, with the difference that, besides operating system, text editor and IDEs, CI systems, etc., now there&rsquo;s LLMs in the toolbox. That&rsquo;s it. Don&rsquo;t try to complicate what doesn&rsquo;t need to be complicated and don&rsquo;t suffer in advance.</p>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><em>&ldquo;Ugh, but you said the AI bubble is going to burst.&rdquo;</em></p>
<p>Yes, and I still say so. But you&rsquo;re misunderstanding again. From 1994 to 2001 there was the <a href="https://en.wikipedia.org/wiki/Dot-com_bubble"target="_blank" rel="noopener">Internet Bubble</a>, and it burst!</p>
<p>Understand: the &ldquo;Internet Bubble&rdquo; burst. But the &ldquo;Internet&rdquo; still exists to this day. Is that clear?</p>
<p>Same thing: the &ldquo;AI Bubble&rdquo; is going to burst, many companies are going to go bankrupt, many people in the field are going to lose their jobs, etc. But AIs will keep existing. The AI bubble of the 60s burst, but AIs kept existing and even formed a new bubble now. Economic cycles have nothing to do with technological cycles.</p>
<blockquote>
  <p>It just means: <em>&ldquo;don&rsquo;t bet all your chips on the same horse, especially if your life/career depends on it.&rdquo;</em></p>

</blockquote>
<p>LLMs will keep existing, roughly in the same form, a bit faster and more efficient, but with the same process behind them and the same way of working. Just like the Web of 2026 isn&rsquo;t much different from the technology of the 90s, but is more refined and optimized.</p>
<p>I was never an AI &ldquo;hater&rdquo;; on the contrary, I&rsquo;m someone who was already risking writing code with GPT-2. And it&rsquo;s always improving. It&rsquo;s now at a point where it&rsquo;s easy to recommend even to non-programmers playing with systems that aren&rsquo;t going to production and aren&rsquo;t mission-critical.</p>
<p>Since I started with programming, at the end of the 80s, thankfully I&rsquo;ve never had a single moment when I thought our field was &ldquo;boring&rdquo; or &ldquo;monotonous&rdquo;. For me, this is just another chapter in this story, and I&rsquo;m expecting new chapters.</p>
<p>What I say that &ldquo;sounds like hate&rdquo; is just arguing and explaining the current limitations and the unrealistic expectations, illusions, or even blind bets I know aren&rsquo;t going to pan out. I&rsquo;m warning about what&rsquo;s real. But I&rsquo;m always saying: &ldquo;there needs to be a new discovery&rdquo;. With the expectation that something more is coming in the future, and not that &ldquo;nothing&rsquo;s going to work out&rdquo;.</p>
<p>At the end of the day, the Java of the 90s didn&rsquo;t replace the Cobol and Fortran of the world, as was intended. The Web didn&rsquo;t turn into a peaceful utopia of pure knowledge as people wanted. Mobile didn&rsquo;t replace other forms of computing as people wanted. VR didn&rsquo;t become the new wave. None of that invalidates the qualities of Java, the Web, Mobile, or even VR.</p>
<p>The last Programming Bubble was a boring period for me in terms of innovation: because everything was being replaced by cheap programmers. For me, the bursting of that bubble was expected and makes me very happy. Because we finally came out of the drudgery of idiotic courses to talk about cutting-edge technology again. Programmers going back to being real programmers.</p>
<p>I only see good things in this.</p>
]]></content:encoded><category>artificial-intelligence</category><category>llms</category><category>career</category><category>off-topic</category></item><item><title>Appearing on Podcasts</title><link>https://akitaonrails.github.io/en/2017/06/02/participando-em-podcasts/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2017/06/02/participando-em-podcasts/</guid><pubDate>Fri, 02 Jun 2017 10:34:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Update 10/11/17&lt;/strong&gt;: one more podcast on Ruby Rogues, titled &lt;a href="https://devchat.tv/ruby-rogues/rr-331-30-days-elixir-crystal-back-ruby-fabio-akita"target="_blank" rel="noopener"&gt;&amp;ldquo;RR 331: 30 days to Elixir then Crystal and back again to Ruby with Fabio Akita&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;By complete coincidence, this year I had the chance to appear on 3 podcast channels. I want to thank Paulo Silveira, Charles Max Wood, Lucas Caton, Fellipe Azambuja, and Ramon Sanches.&lt;/p&gt;
&lt;p&gt;The first one actually came out late last year, in November, on &lt;a href="https://devchat.tv/ruby-rogues/"target="_blank" rel="noopener"&gt;Ruby Rogues&lt;/a&gt; with the topic &lt;a href="https://devchat.tv/ruby-rogues/285-rr-ruby-conf-brazil-and-building-communities-with-fabio-akita"target="_blank" rel="noopener"&gt;&amp;ldquo;Ruby Conf Brazil and Building Communities&amp;rdquo;&lt;/a&gt; where Charles Wood and I talked a bit about the history of the Ruby community in Brazil — how I tried to get it started, what I attempted, the blog, talks, events. We also covered more specific points like a small overview of the Ruby language and my view on not limiting yourself to a single language or technology. If you&amp;rsquo;re new to the Ruby community, it might help give you an idea of how we got to where we are today.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Update 10/11/17</strong>: one more podcast on Ruby Rogues, titled <a href="https://devchat.tv/ruby-rogues/rr-331-30-days-elixir-crystal-back-ruby-fabio-akita"target="_blank" rel="noopener">&ldquo;RR 331: 30 days to Elixir then Crystal and back again to Ruby with Fabio Akita&rdquo;</a></p>
<p>By complete coincidence, this year I had the chance to appear on 3 podcast channels. I want to thank Paulo Silveira, Charles Max Wood, Lucas Caton, Fellipe Azambuja, and Ramon Sanches.</p>
<p>The first one actually came out late last year, in November, on <a href="https://devchat.tv/ruby-rogues/"target="_blank" rel="noopener">Ruby Rogues</a> with the topic <a href="https://devchat.tv/ruby-rogues/285-rr-ruby-conf-brazil-and-building-communities-with-fabio-akita"target="_blank" rel="noopener">&ldquo;Ruby Conf Brazil and Building Communities&rdquo;</a> where Charles Wood and I talked a bit about the history of the Ruby community in Brazil — how I tried to get it started, what I attempted, the blog, talks, events. We also covered more specific points like a small overview of the Ruby language and my view on not limiting yourself to a single language or technology. If you&rsquo;re new to the Ruby community, it might help give you an idea of how we got to where we are today.</p>
<p>The second one came out in February, on Paulo Silveira&rsquo;s podcast <a href="http://hipsters.tech"target="_blank" rel="noopener">Hipsters Ponto Tech</a>, and the topic was <a href="http://hipsters.tech/carreira-em-tecnologia-hipsters-31/"target="_blank" rel="noopener">&ldquo;Carreira em Tecnologia&rdquo;</a>. The legendary Guilherme Silveira and Sérgio Lopes joined in, and in that conversation we touched on the main aspects for anyone starting a programming career. Take a look at the comments too, since several other points of view, opinions, and tips came in from listeners. Fun fact: this one was a bit of work because we recorded an earlier version, but since Paulo was still in the early days of the podcast, he refined the process and asked us to re-record the one that ended up being released. The format and topics changed a bit to be more focused, which made the conversation better. Some of the topics I covered in the first attempt I ended up revisiting in the podcasts later in this list.</p>
<p>The third came out in mid-May at the invitation of Lucas Caton, who introduced me to Montanha and Ramon from the podcast <a href="http://devnaestrada.com.br"target="_blank" rel="noopener">Dev na Estrada</a>, and the topic was <a href="http://devnaestrada.com.br/2017/05/18/vale-a-pena-ruby-on-rails.html"target="_blank" rel="noopener">&ldquo;Vale a pena? Ruby on Rails com Lucas Caton e Akita&rdquo;</a> where I again revisit some of the history of the international Ruby community and why Ruby on Rails is different from every other community, and why it&rsquo;s still worth investing your time in this ecosystem.</p>
<p>The fourth came out at the end of May when Charles Wood invited me back to Ruby Rogues with the title <a href="https://devchat.tv/ruby-rogues/ruby-story-fabio-akita"target="_blank" rel="noopener">&ldquo;My Ruby Story&rdquo;</a>, but this time for me to tell a bit of my personal story. How I started my career. How I got into Ruby specifically. The historical context in the tech world over the past 20 years.</p>
<p>The fifth and most recent came out today, early June. I&rsquo;m back again with Montanha from Dev na Estrada in an <a href="http://devnaestrada.com.br/2017/06/02/entrevista-fabio-akita.html"target="_blank" rel="noopener">&ldquo;Interview&rdquo;</a> to revisit some of the Ruby Rogues theme about the beginning of my career. But while on Ruby Rogues I move very quickly over the beginning and jump to the last 10 years where I focused more on Ruby, in this one with Montanha I focus much more on the very start of my career, particularly the 90s and a brush over 30 years ago up to 10 years ago. The earlier ones are long (about 1h each on average), but this one in particular is VERY long (almost 2h!) — apologies for the length. But Montanha started with &ldquo;tell us from the beginning&rdquo;&hellip; I tried to summarize and only mention a few points, but even so it ended up REALLY long!</p>
<p>Did anyone get to listen to any of the podcasts? What did you think? Leave your comments below.</p>
]]></content:encoded><category>interviews</category><category>career</category><category>personal</category></item><item><title>[Off-Topic] Talking with a University Professor</title><link>https://akitaonrails.github.io/en/2014/12/08/off-topic-conversando-com-um-professor-universitario/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/12/08/off-topic-conversando-com-um-professor-universitario/</guid><pubDate>Mon, 08 Dec 2014 19:56:00 -0200</pubDate><description>&lt;p&gt;A few days ago, professor Rosenclever Gazono, from the University Center of Volta Redonda, sent me an email asking for some opinions that I thought were worth sharing. I&amp;rsquo;ve already met many professors during my visits to several universities around the country, and many have the same questions, so I hope this helps a little.&lt;/p&gt;
&lt;p&gt;Below, I&amp;rsquo;ll transcribe the professor&amp;rsquo;s questions and my answers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Professor:&lt;/strong&gt; My name is Rosenclever, I&amp;rsquo;m a university professor currently teaching Object-Oriented Analysis and Design (basically UML, Design Patterns, and Agile methodologies) and Object-Oriented Programming 2 (Java for Web with JPA and JSF)&lt;/p&gt;</description><content:encoded><![CDATA[<p>A few days ago, professor Rosenclever Gazono, from the University Center of Volta Redonda, sent me an email asking for some opinions that I thought were worth sharing. I&rsquo;ve already met many professors during my visits to several universities around the country, and many have the same questions, so I hope this helps a little.</p>
<p>Below, I&rsquo;ll transcribe the professor&rsquo;s questions and my answers.</p>
<p><strong>Professor:</strong> My name is Rosenclever, I&rsquo;m a university professor currently teaching Object-Oriented Analysis and Design (basically UML, Design Patterns, and Agile methodologies) and Object-Oriented Programming 2 (Java for Web with JPA and JSF)</p>
<p>Well, since you&rsquo;re a developer who today also plays the role of an entrepreneur, and I, on the other hand, am in academia trying to prepare professionals to work in the market, I always try to update my content with market demand, and it&rsquo;s very common to hear from IT managers, through the media, that there&rsquo;s a very big gap between what&rsquo;s taught in academia and what the market needs&hellip;</p>
<p>So I&rsquo;d like to ask for your contribution so that I can help my students leave better prepared for the market. I&rsquo;d like to know your opinion on the syllabuses of the courses I mentioned at the beginning of this email&hellip;</p>
<p><strong>Professor:</strong> 1) Does it make sense today to master UML diagrams?</p>
<p><strong>AkitaOnRails:</strong> &ldquo;Master&rdquo; perhaps not (in the sense of knowing every little detail of every diagram). But knowing they exist, having a general notion of each, and knowing the most useful ones like Use Cases, Sequence Diagram, State Diagram, Class Diagram, I think is appropriate and useful. And never as a way to design ALL the software, but a few parts that maybe become clearer if you diagram first.</p>
<p>Adding here in the post: plenty of people who never programmed professionally think that &ldquo;any and every&rdquo; type of diagramming and planning is unnecessary. They still imagine (without knowing it) that the so-called &ldquo;corporate&rdquo; world runs on mountains of diagrams and plans. That&rsquo;s almost never true.</p>
<p>Of course there are exceptions, but in the common case a programmer needs to communicate an idea through something beyond code. That matters most when explaining a complex architecture to the team before starting to code.</p>
<p>It doesn&rsquo;t mean diagramming 100% of the classes, 100% of the states, 100% of the sequences. It means diagramming what&rsquo;s most critical and hardest to understand, and letting the rest emerge naturally during programming.</p>
<p><strong>Professor:</strong> 2) Which Design Patterns and Agile concepts do you consider fundamental to be taught in academia? Or is that also not considered important?</p>
<p><strong>AkitaOnRails:</strong> Design Patterns are important, but as a reference. They&rsquo;re possible solutions, and they need to be evaluated case by case. In Agile, only worry about Extreme Programming, because all XP techniques matter. Scrum and Kanban can be introduced, but they&rsquo;re dispensable. About patterns:</p>
<ul>
<li><a href="/en/2013/05/10/a-lingua-portuguesa-brasileira-e-pessima-standard-vs-pattern">Brazilian Portuguese Can Confuse Us: Standard vs Pattern</a></li>
<li><a href="http://www.akitaonrails.com/2007/07/30/gof-design-patterns-sobreviveu-ao-teste-do-tempo"target="_blank" rel="noopener">GoF Design Patterns - Did it survive the test of time?</a></li>
<li><a href="http://www.akitaonrails.com/2006/10/30/design-patterns-representam-defeitos-nas-linguagens"target="_blank" rel="noopener">Design Patterns represent defects in Languages</a></li>
</ul>
<p>Adding here in the post: the important thing is to teach that nobody needs to invent everything from scratch all the time. That would be a redundant effort, since someone has probably already solved the problem before.</p>
<p>At the same time, it&rsquo;s worth explaining that what we know today is just what seems to work best, and none of it is final. If someone has a result that beats what we know, great, show it to everyone.</p>
<p>It became fashionable to talk about &ldquo;Inversion of Control,&rdquo; and few people know what it really means. They only know it seems to improve &ldquo;modularization,&rdquo; also without understanding why modularizing is a benefit in some cases and not so much in others.</p>
<p>And speaking of Agile, I recommend reading these posts of mine:</p>
<ul>
<li><a href="/en/2014/03/27/off-topic-lean-esta-morto-longa-vida-a-eficiencia">Lean is Dead, Long Live Efficiency</a></li>
<li><a href="/en/2014/09/28/off-topic-agile-a-verdade-por-tras-do-metodo">Agile: the Truth Behind the Method</a></li>
</ul>
<p><strong>Professor:</strong> 3) Does the OO Analysis and Design discipline still make sense today? What would be interesting to be addressed in it?</p>
<p><strong>AkitaOnRails:</strong> Of course, but today you have to emphasize that OO (object orientation) is one approach among several, and not always the &ldquo;best.&rdquo;</p>
<p>By the way, OO only gets interesting in academia through the eyes of languages that really explore OO, like Smalltalk and Ruby. It&rsquo;s worth showing the whole landscape: class-oriented programming in Java and C#, functional in Lisp and Scheme, prototype-oriented in JavaScript and Io, and programming with concurrency and actors in Go, Scala, and Elixir/Erlang.</p>
<p>Adding to the post: this is the kind of subject with no &ldquo;right&rdquo; answer. Any attempt to measure the strength of one side or the other always turns into a flamewar or a mediocre bikeshedding.</p>
<p>The reality is that software factories will keep using languages with good commercial tooling support, like IBM Websphere and Microsoft Visual Studio.NET. Tech startups and smaller, more &ldquo;best of breed&rdquo; technology-oriented companies will prefer open source solutions that sometimes look like a &ldquo;patchwork quilt.&rdquo;</p>
<p>Agencies and small producers will keep using whatever delivers in the shortest possible time, even if it&rsquo;s dirty. Advertising campaigns last very little, so you&rsquo;re left with the &ldquo;quick and dirty,&rdquo; the WordPress derivatives, and so on.</p>
<p><strong>Professor:</strong> 4) Is it definitely still worth teaching Java in academia? Do you think Ruby and Rails or even Python and Django are more appropriate?</p>
<p><strong>AkitaOnRails:</strong> Yes, it&rsquo;s worth it, as long as Java comes in as what it really is: the commercially most viable language. It isn&rsquo;t the only solution to everything nor the best example of an OO language.</p>
<p>Ruby and Python can be explored as dynamically typed languages, taking the chance to explain the difference between static and dynamic typing. But in academia, especially in Computer Science, I&rsquo;ve always been in favor of teaching dead languages like Smalltalk, Lisp, and Eiffel. That keeps the student from falling into the temptation of staying only with the language they learned in college. A bachelor&rsquo;s degree should prioritize foundation, and commercial use is the job of technical and technologist schools.</p>
<p>Adding to the post: Academia, especially in Computer Science chairs, must emphasize science. Going 100% toward the market creates a generation that becomes obsolete very quickly and, worse, that never learns to update itself on its own.</p>
<p>In a hypothetical scenario, if 100% of universities turned 100% toward what the &ldquo;market&rdquo; wants, in ten years we&rsquo;d have our entire computing field junked. Universities need to elevate the &ldquo;Science&rdquo; of Computer Science.</p>
<p>Let me leave posts I wrote about university and career topics:</p>
<ul>
<li><a href="/en/2009/04/17/off-topic-devo-fazer-faculdade">Should I go to college?</a></li>
<li><a href="/en/2014/05/02/off-topic-carreira-em-programacao-codificar-nao-e-programar">Career in Programming - Coding isn&rsquo;t Programming</a></li>
<li><a href="/en/2013/10/31/traducao-carta-para-um-jovem-programador-considerando-uma-startup">Letter to a Young Programmer Considering a Startup</a></li>
</ul>
<p><strong>Professor:</strong> Sorry for the long email, but unfortunately there was no opportunity for us to talk at the event&hellip;</p>
<p><strong>AkitaOnRails:</strong> Not at all, if the subject is relevant, it&rsquo;s worth discussing it. And I encourage everyone who attends events I&rsquo;m at to call me if they want to discuss ways we can help improve education. This subject will never be irrelevant.</p>
]]></content:encoded><category>learning</category><category>programming-languages</category><category>career</category><category>off-topic</category></item><item><title>[Off-Topic] DO NOT Do What You ("THINK") You Love</title><link>https://akitaonrails.github.io/en/2014/09/13/off-topic-nao-faca-o-que-voce-acha-que-ama/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/09/13/off-topic-nao-faca-o-que-voce-acha-que-ama/</guid><pubDate>Sat, 13 Sep 2014 17:04:00 -0300</pubDate><description>&lt;p&gt;Today I read a &lt;a href="http://www.businessinsider.com/andreessen-whatever-you-do-dont-follow-your-passion-2014-5"target="_blank" rel="noopener"&gt;series of tweets from Marc Andreessen&lt;/a&gt; where he starts by saying:&lt;/p&gt;
&lt;blockquote&gt;
"Do what you love"/"Follow your passion" is dangerous advice and can destroy your career.
&lt;/blockquote&gt;
&lt;p&gt;Another recognized celebrity in the US is Mark Cuban, owner of the Dallas Mavericks, who, in 2012, &lt;a href="http://blogmaverick.com/2012/03/18/dont-follow-your-passion-follow-your-effort/"target="_blank" rel="noopener"&gt;said the same thing&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
"Don't follow your passion, follow your effort."
&lt;/blockquote&gt;
&lt;p&gt;Apparently, the famous Confucius was the first to say the phrase that would become one of the biggest clichés for young people coming out of adolescence and having to face adult life with real responsibilities:&lt;/p&gt;</description><content:encoded><![CDATA[<p>Today I read a <a href="http://www.businessinsider.com/andreessen-whatever-you-do-dont-follow-your-passion-2014-5"target="_blank" rel="noopener">series of tweets from Marc Andreessen</a> where he starts by saying:</p>
<blockquote>
"Do what you love"/"Follow your passion" is dangerous advice and can destroy your career.
</blockquote>
<p>Another recognized celebrity in the US is Mark Cuban, owner of the Dallas Mavericks, who, in 2012, <a href="http://blogmaverick.com/2012/03/18/dont-follow-your-passion-follow-your-effort/"target="_blank" rel="noopener">said the same thing</a>:</p>
<blockquote>
"Don't follow your passion, follow your effort."
</blockquote>
<p>Apparently, the famous Confucius was the first to say the phrase that would become one of the biggest clichés for young people coming out of adolescence and having to face adult life with real responsibilities:</p>
<blockquote>
"Do what you love and the money will follow."
</blockquote>
<p>By the way, Confucius is kind of a generic for everything: don&rsquo;t know who said it? Say it&rsquo;s from Confucius. (And the usual disclaimer: just because I quoted people doesn&rsquo;t mean I agree with them or with everything they say; they&rsquo;re mere references!)</p>
<p>Besides Mark Cuban and Marc Andreessen, several others have raised the subject before, and I recommend you read <a href="https://medium.com/@rachelnabors/dont-do-what-you-love-41312c943e2"target="_blank" rel="noopener">&ldquo;Don&rsquo;t do what you love.&rdquo;</a> by cartoonist Rachel Nabors, where she concludes with a new phrase:</p>
<blockquote>
"Just don't do what you hate."
</blockquote>
<p>On the renowned site Slate, Miya Tokumitsu also wrote <a href="http://www.slate.com/articles/technology/technology/2014/01/do_what_you_love_love_what_you_do_an_omnipresent_mantra_that_s_bad_for_work.2.html"target="_blank" rel="noopener">&ldquo;In the Name of Love&rdquo;</a> where she begins with the excellent subtitle to the article:</p>
<blockquote>
Elites embrace the "do what you love" mantra. But it devalues work and hurts workers.
</blockquote>
<p>I have to say I was even a little surprised that this subject is also in Brazil. In March 2014, Daniela Carasco wrote the article &ldquo;5 reasons why &lsquo;do what you love&rsquo; is not the solution,&rdquo; published by EXAME.com, talking about Bárbara Castro, a sociologist specialized in work issues and professor of the sociopsychology course at the Fundação Escola de Sociologia e Política de São Paulo (FESPSP). And she also already identified the obvious that many still remain blind to:</p>
<blockquote>
According to her, the big problem with the "love what you do" narrative is that it's tied to a discourse of happiness that means "being at the top of the rollercoaster all the time." As if a normal, day-to-day, routine life couldn't be a life of satisfaction. All of this makes this scenario worrying.
</blockquote>
<p>Finally, blogger Dani Arrais analyzed the subject in February 2014 in her post <a href="http://web.archive.org/web/20140707104721/http://contente.vc/blog/a-armadilha-do-faca-o-que-voce-ama/"target="_blank" rel="noopener">&ldquo;THE TRAP OF &lsquo;DO WHAT YOU LOVE&rsquo;&rdquo;</a>, who coincidentally is also a friend of the same sociologist Bárbara Castro (something tells me I should try to meet her), and she says:</p>
<blockquote>
Do we need to be happy all the time with the work we do? Even if we love what we do? Can't we suffer with the contradictions that this work imposes on us? Why can't we admit that it doesn't make sense? Who does this interest?
</blockquote>
<p>You may be confused reading all this. I imagine the vast majority of my readers have always identified with the &ldquo;Do what you love&rdquo; mantra. After all, if you&rsquo;re on a blog that talks about Ruby and, with less emphasis, technology in general and Entrepreneurship, it&rsquo;s probably because you &ldquo;love&rdquo; the subjects of Ruby, Technology or Entrepreneurship.</p>
<p>And you probably read what I post because you assume that I&rsquo;m &ldquo;passionate&rdquo; about these subjects. And here comes the important part:</p>
<ul>
<li>I don&rsquo;t love Ruby or programming</li>
<li>I don&rsquo;t love entrepreneuring or owning a company</li>
<li>I don&rsquo;t love technology or the equipment I buy</li>
<li>I don&rsquo;t love writing or the time I spend on it</li>
</ul>
<p>And to be honest, over the years, because of this so-often-repeated mantra, so many brainwashing attempts, a few times I almost succumbed and believed in this idea, but fortunately I always managed to bring myself back. And I have no problem saying that I don&rsquo;t love any of these things.</p>
<p>But if that&rsquo;s the case, you might want to ask me:</p>
<ul>
<li>Why so much effort writing so much about these subjects? (1000 posts!)</li>
<li>Why so much effort working in programming? (almost 20 years!)</li>
<li>Why so much effort organizing events? (7 Rubyconf Brazil!)</li>
<li>Why so much effort traveling the country to evangelize these subjects? (more than 100 talks!)</li>
<li>Why so much effort creating a company? (6 years in consulting, 3 years in my own!)</li>
</ul>
<p>I&rsquo;ll try to answer at the end. And there&rsquo;s nothing wrong with what you think you like, love, or are passionate about. The idea of the article isn&rsquo;t to say why that&rsquo;s &ldquo;wrong&rdquo;; it&rsquo;s just the way the phrase is used that I want to explore within my own personal context.</p>
<p>First of all, don&rsquo;t follow advice blindly. The first time I understood this concept consciously was watching the famous viral video from the beginning of the century, <a href="https://www.youtube.com/watch?v=xfq_A8nXMsQ"target="_blank" rel="noopener">Everybody&rsquo;s Free to Wear Sunscreen</a>, where one of the parts says:</p>
<blockquote>
Be careful whose advice you buy, but be patient with those who supply it.
</blockquote>
<blockquote>
Advice is a form of nostalgia. Dispensing it is a way of fishing the past from the disposal, wiping it off, painting over the ugly parts, and recycling it for more than it's worth.
</blockquote>
<p>That said, I don&rsquo;t want to advise you on what to do, but I want to explain a few points that may go unnoticed.</p>
<h2>First, the Obvious.<span class="hx:absolute hx:-mt-20" id="first-the-obvious"></span>
    <a href="#first-the-obvious" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>First of all, if you think &ldquo;Do what you love,&rdquo; you&rsquo;re actually thinking &ldquo;Do ONLY what you love.&rdquo;</p>
<ul>
<li>&ldquo;I don&rsquo;t love waking up early&rdquo;</li>
<li>&ldquo;I don&rsquo;t love obeying orders&rdquo;</li>
<li>&ldquo;I don&rsquo;t love sitting in traffic&rdquo;</li>
</ul>
<p>And this list will grow, because there are millions of things we need to do but obviously don&rsquo;t &ldquo;love.&rdquo; Deep down, the most generic would be: &ldquo;I don&rsquo;t like doing anything (working).&rdquo; I just don&rsquo;t know how that derives into the other great cliché of our times:</p>
<blockquote>
"I'll become my own boss to follow my own passions and not someone else's dream."
</blockquote>
<p>The irony is that if someone believes this, they&rsquo;re already following the dream of whoever made that phrase for the first time. You&rsquo;re already living someone else&rsquo;s dream, whether you want to or not. Think about it.</p>
<p>Phrases like that naturally lead to other self-help fallacies. One of the most famous would certainly be the dreadful and dangerous <a href="http://en.wikipedia.org/wiki/The_Secret_%28book%29"target="_blank" rel="noopener">&ldquo;The Secret&rdquo;</a>, whose definition is as follows (according to Wikipedia):</p>
<p>The Secret states that the law of attraction is a natural law that determines the complete order of the universe and our personal lives through the process of &ldquo;like attracts like.&rdquo; The author claims that the way we think and feel, a matching frequency is sent to the universe and that attracts back events and circumstances of the same frequency. (&hellip;) and if you think positively, you&rsquo;ll attract positive events and circumstances. The proponents claim that desirable results like health, wealth, and happiness can be attracted by changing your thoughts and feelings.</p>
<p>The idea of &ldquo;doing what you love&rdquo; is unequivocally linked with &ldquo;thinking positive to attract positive,&rdquo; even though, rationally, trying things like &ldquo;dropping everything to pursue what you love&rdquo; has the same odds of working out as winning the lottery. And whoever thinks this way should look at the child in the photo below and tell them:</p>
<blockquote>"You certainly aren't thinking positive enough."</blockquote>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/472/29261592-CA3A-44F4-B812-BC70D802F154_cx0_cy5_cw0_mw1024_s_n.jpg" alt="Hungry Child"  loading="lazy" /></p>
<p>Exaggeration? Not so much, it&rsquo;s the same result: you believed an idea blindly, without thinking about it. We do this every day, and I know it takes a conscious, big effort not to be a victim of it. I myself almost believed these ideas before.</p>
<p>Hold what you want to troll in the comments right now: I&rsquo;m not saying that thinking positive is wrong, that pursuing your dreams is wrong, or that doing what you like is wrong! Follow to the end.</p>
<h2>Second, What Do You Love?<span class="hx:absolute hx:-mt-20" id="second-what-do-you-love"></span>
    <a href="#second-what-do-you-love" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>What&rsquo;s the difference between Passion and Love? And what is Passion? And what is Love?</p>
<p>These are questions humanity has already spent millennia exploring and will have to explore for more millennia. How many poems, literature, songs, paintings, sculptures, speeches, revolutions have already happened because of Passion and Love? This post on a mere blog will not be where you find an answer, and this author doesn&rsquo;t even presume to imagine he knows the answer.</p>
<p>But for the sake of continuing this text, I like this <a href="http://www.differencebetween.net/miscellaneous/difference-between-love-and-passion/"target="_blank" rel="noopener">brief summary</a>:</p>
<ul>
<li>Love is a state of way of life, while passion is a state of being.</li>
<li>Passion lasts for a short time, but Love lasts longer.</li>
<li>In Love, deep understanding is the essence, while passion doesn&rsquo;t require it.</li>
</ul>
<p>Reread the phrase &ldquo;Do what you Love,&rdquo; or similar ones like &ldquo;Follow your passion.&rdquo;</p>
<p>You are passionate about or love many things at the same time. And this changes over time. You rarely find something or someone you&rsquo;ll love forever (and you&rsquo;ll only know it close to your death).</p>
<p><strong>ONLY</strong> following something that changes all the time is a race without purpose. And the only guaranteed result is that you&rsquo;ll get frustrated in a worse way.</p>
<p>But does that mean we should ignore our passions? Of course not. I&rsquo;m just saying that thinking your life should be filled only with what you&rsquo;re passionate about, ignoring the rest of the world, is an absolutely childish stance.</p>
<p>It&rsquo;s like any child excited about the Nintendo 64, who goes days without bathing, without sleeping, without talking to anyone, without wanting to go to school, because they&rsquo;re deeply passionate about it. And, as we all know, most get bored in a few days. Weeks later, the so-passionate object of desire is in a corner of the closet gathering dust, and the child is already looking for what to love next, every children&rsquo;s day, birthday, and Christmas.</p>
<div class='embed-container'>

<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/pFlcqWQVVuU"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>
</div>
<p>Doing &ldquo;ONLY&rdquo; what you &ldquo;THINK&rdquo; you &ldquo;LOVE&rdquo; (note the emphases in this phrase) means simply ignoring the real world. Ignoring brushing your teeth, ignoring going to school, ignoring working, ignoring responsibilities, which is what every adult would call &ldquo;still being a child.&rdquo;</p>
<h2>Third, What Do I Love?<span class="hx:absolute hx:-mt-20" id="third-what-do-i-love"></span>
    <a href="#third-what-do-i-love" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Talking this way sounds like another cliché: that an adult is a child who has set their passions aside. That&rsquo;s perhaps where the later evolution comes from, with 30-year-old &ldquo;adults&rdquo; still trying to be the same children they once were.</p>
<p>This usually means being irresponsible, egocentric, and anti-social, since the so-called &ldquo;adult world&rdquo; demands responsibility, collaboration, interaction, and commitments. No one &ldquo;loves&rdquo; that kind of thing, no one loves &ldquo;negotiating middle ground.&rdquo; Every child wants all or nothing.</p>
<p>If you&rsquo;re a reader who has followed me for the last 8 years, up to this post 1001 (which my friends have affectionately pre-nicknamed as the &ldquo;Bombril post, of 1,001 uses&rdquo;), maybe you have an idea of what I want to say now.</p>
<p>And here comes a disclaimer: don&rsquo;t quote me as saying this is the solution or the answer. What I&rsquo;m about to say is absolutely personal.</p>
<p>I do indeed pursue some of my &ldquo;passions.&rdquo; Like every human being, I get passionate very easily about a lot of things. It means I also get frustrated a lot, all the time. I&rsquo;m human: cut me and I bleed. And much of what I like is superfluous, and the difference is perhaps that I&rsquo;ve long understood that they&rsquo;re superfluous. That is, I make mistakes, trip, fall, all the time, and I learn how to get up every time.</p>
<p>I&rsquo;m passionate about technology, programming, methods, processes. And at the same time they frustrate me, upset me, leave me frustrated, leave me irritated and wanting to throw it all away. As every passion always is.</p>
<p>I&rsquo;m passionate about communication, sociology, people, sharing knowledge, whether writing or speaking. And again, this leaves me tired, stressed, frustrated when I&rsquo;m not understood, upset when people assume things without asking, but again, it&rsquo;s how a passion should be.</p>
<p>But as I said at the beginning, I don&rsquo;t Love any of these things. They aren&rsquo;t my &ldquo;life goals&rdquo; or definitions of my identity or any philosophical thing of that kind. They are things I like, that I pursue, that bring me both pleasure and suffering at the same time, and that are means to another end, which isn&rsquo;t to make me &ldquo;happy&rdquo; (in the sense of being comfortable in the short term, as it is for everyone).</p>
<p>Being happy all the time is the realm of LSD addicts. Have you ever seen someone who is honestly happy 100% of the time? That&rsquo;s impossible. And thinking your work should be your greatest passion will only bring as a result a state of misery and frustration that&rsquo;s the realm of psychologists and psychiatrists, the realm of tranquilizers and antidepressants.</p>
<p><img src="http://akitaonrails.s3.amazonaws.com/files/tumblr_mm91vjRkJx1rr5fnmo1_500.gif" alt="Pokemon LSD"  loading="lazy" /></p>
<p>(By the way, if I were neurotic, I&rsquo;d almost conclude that self-help phrases like the one discussed here are a Psychiatrists&rsquo; Conspiracy to generate more Depressives. #troll)</p>
<p>No one should ever be &ldquo;comfortable&rdquo; or &ldquo;happy&rdquo; 100% of the time. Passions, Love, Happiness are always a dynamic balance between things that satisfy you and things that don&rsquo;t satisfy you. You can&rsquo;t have Light without Darkness existing. You can&rsquo;t have satiety without hunger existing. You can&rsquo;t have warmth without cold existing.</p>
<p>Another derived phrase is <em>&ldquo;Love what you do,&rdquo;</em> but that&rsquo;s an exaggeration. I think of it another way that I think my mother told me for the first time and that is true:</p>
<blockquote>
"It doesn't matter what you're doing, but since you're doing it, do the best you can."
</blockquote>
<p>Confucius didn&rsquo;t only say the phrase that gives origin to this post. Perhaps you remember Confucianism and that the ancient Easterners may have already defined this better: <a href="http://en.wikipedia.org/wiki/Yin_and_yang"target="_blank" rel="noopener">Yin and Yang</a>, the concept of how opposite or contrary forces are actually complementary, interconnected, and interdependent in the natural world, and how one gives rise to the other. Yin and Yang can be seen as complementary rather than opposite, interacting in a dynamic system where the whole is greater than the sum of the parts.</p>
<p>Without ever having suffered, how is it possible to know what happiness is?</p>
<h2>My Conclusion<span class="hx:absolute hx:-mt-20" id="my-conclusion"></span>
    <a href="#my-conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>In the end, Ruby, programming, technology, projects, entrepreneurship, talks, blog, and all of this are just means that don&rsquo;t define what I really like and always liked: learning and improving myself, purely.</p>
<p>If you&rsquo;ve at least once heard of Agile, Lean, Kanban, Toyota (recurring themes on this blog), you&rsquo;ll remember the Japanese concept of <a href="http://en.wikipedia.org/wiki/Kaizen"target="_blank" rel="noopener">Kaizen (改善)</a> or &ldquo;continuous improvement.&rdquo; For me it&rsquo;s something conscious. I remember as a kid seeing a very simple thing in an allegory: how does a ninja jump so high and even over a tree (in cartoons)? Simple: he starts by jumping a little bush on the ground, then a small shrub, and so on.</p>
<p>Perfection isn&rsquo;t an achievable goal; continuous improvement is the infinite process for an unreachable goal. And what I love is the challenge of improving one aspect at a time in each of the capabilities I have today (programming, communicating, teaching, producing).</p>
<p>My foundation is that I&rsquo;m passionate about producing, and everything I produce is nothing more than a draft of the knowledge I have today, and always worse than I can produce tomorrow. My only, true &ldquo;passion&rdquo; is the certainty that I will never really be &ldquo;good&rdquo; and that I am today a little better than I was yesterday. That&rsquo;s all. It doesn&rsquo;t matter now whether I&rsquo;m doing a programming project or writing this post or if tomorrow I decide to paint paintings.</p>
<p>Learning means I don&rsquo;t like easy things. Anything that everyone says is hard, boring, that they would never do, or that they can&rsquo;t do, naturally attracts me. Because I like to solve problems, which is one of the best ways to test what I know. Doing what everyone already knows gives me no pleasure.</p>
<p>In particular I like producing something that is useful to someone. Whether it&rsquo;s a post or a talk that helped someone learn something, or a work opportunity someone can use for their own goals, or a project a client can use to reach their goals.</p>
<p>Deep down, I have the impression that if I could summarize it, I love and am passionate not about the &ldquo;what&rdquo; I do but the &ldquo;how&rdquo; I do it. Especially when there are obstacles in what would be the &ldquo;ideal how&rdquo; and how I can solve that problem to reach the &ldquo;what.&rdquo; The &ldquo;what&rdquo; isn&rsquo;t the part that interests me most.</p>
<p>The phrase &ldquo;Do what you love&rdquo; is always taken as &ldquo;Do &lsquo;only&rsquo; what you love,&rdquo; and what I wanted to summarize was: &ldquo;Don&rsquo;t do &lsquo;only&rsquo; what you &rsquo;think&rsquo; you love.&rdquo; That&rsquo;s all.</p>
<p>My <strong>only</strong> inviolable principle is to live through voluntary exchanges for mutual benefit. That&rsquo;s why nothing I say is absolute and inviolable truth, but rather teachings on how to think, how to counter-argue, how to be conscious, how to be an individual who doesn&rsquo;t live by others&rsquo; clichés. I don&rsquo;t want blind followers in the same way that I don&rsquo;t want and don&rsquo;t need charismatic idols to follow.</p>
<p>I hope this can be my legacy.</p>
]]></content:encoded><category>career</category><category>philosophy</category><category>personal</category><category>off-topic</category></item><item><title>[Off-Topic] Career in Programming — Coding Isn't Programming</title><link>https://akitaonrails.github.io/en/2014/05/02/off-topic-carreira-em-programacao-codificar-nao-e-programar/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/05/02/off-topic-carreira-em-programacao-codificar-nao-e-programar/</guid><pubDate>Fri, 02 May 2014 15:57:00 -0300</pubDate><description>&lt;p&gt;A subject I always discuss is the training of programmers. The vast majority of articles you find on the internet today only list &amp;ldquo;techniques&amp;rdquo;: how to be an assembler, how to take existing pieces and snap them together. There&amp;rsquo;s value in that, but it&amp;rsquo;s a tiny fraction of the &amp;ldquo;programming&amp;rdquo; career, not the whole career.&lt;/p&gt;
&lt;p&gt;You can take some initial knowledge, say web and HTML, throw in a few frameworks and libraries (Rails, Django, WordPress), and actually put something functional online. But that&amp;rsquo;s little. Very little.&lt;/p&gt;</description><content:encoded><![CDATA[<p>A subject I always discuss is the training of programmers. The vast majority of articles you find on the internet today only list &ldquo;techniques&rdquo;: how to be an assembler, how to take existing pieces and snap them together. There&rsquo;s value in that, but it&rsquo;s a tiny fraction of the &ldquo;programming&rdquo; career, not the whole career.</p>
<p>You can take some initial knowledge, say web and HTML, throw in a few frameworks and libraries (Rails, Django, WordPress), and actually put something functional online. But that&rsquo;s little. Very little.</p>
<p>The fact that it&rsquo;s so simple, bordering on trivial, to put &ldquo;something functional&rdquo; online hides all the potential in a programming career. Worse, the immediacy of the result creates the illusion that this alone is enough and that any more advanced knowledge is unnecessary.</p>
<p>The result shows up in the growth of technical programming courses and the low demand for Computer Science bachelor&rsquo;s degrees. The fewer people we have working on the fundamentals, at the origin of everything, the more the market decays from here on.</p>
<p>You have a coder job today: Photoshop cutter, HTML assembler, WordPress plugin-sticker. Stop and think about how your career is going to evolve from here. Are you always going to be just an assembler? Are you going to take the easy path and become a half-baked &ldquo;manager&rdquo; of assemblers?</p>
<p>In a single post it&rsquo;s impossible to list and explain every important aspect of Computer Science. But I want to try naming at least some of the subjects most people think are unnecessary, just to provoke you into digging further.</p>
<h2>Learn to at least &ldquo;READ&rdquo; English fluently<span class="hx:absolute hx:-mt-20" id="learn-to-at-least-read-english-fluently"></span>
    <a href="#learn-to-at-least-read-english-fluently" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I love the Portuguese language, and it will always be my first language. But pseudo-patriotism and laziness don&rsquo;t change one fact: if you don&rsquo;t commit right now to reading English fluently, you&rsquo;ll live behind, at a sorry level.</p>
<p>The first reason is that in the Western world, everything new comes out in English first. (I&rsquo;m leaving out the East because I don&rsquo;t read Chinese, and the market there is enormous too.) Waiting for someone to bother translating it costs work and time.</p>
<p>If you rely on the Portuguese version, you&rsquo;ll be reading stale material. And by the time the subject finally grabs you, it may already be obsolete. At that point the gap stops being one step and turns into hundreds of kilometers.</p>
<p>The second reason is that the internet is globalized. It&rsquo;s common to pick up code written in other countries and carry it forward, and it&rsquo;s common for the code you write to be shared with programmers abroad. Do yourself a favor: don&rsquo;t embarrass yourself.</p>
<h2>Religious Wars<span class="hx:absolute hx:-mt-20" id="religious-wars"></span>
    <a href="#religious-wars" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Programming is science. It has no horoscope, no guru, no soccer team, no numerology, no astrology. Remember the name: Computer <strong>SCIENCE</strong>. Nobody calls it Computer <strong>Astrology</strong>.</p>
<p>Everyone has subjective tastes. Turning taste into dogma is stupid. The laziness of having to learn something new produces the famous <em>&ldquo;I&rsquo;m good at Clipper, this language will evolve in the future and will always exist, I just have to defend it tooth and nail no matter what comes along later.&rdquo;</em></p>
<p>Swap &ldquo;Clipper&rdquo; for anything else: Cobol, Basic, Pascal, Algol, Eiffel, Smalltalk, all the way to the newest ones like Java, C#, JavaScript, Python. Something existing today guarantees nothing about tomorrow. Think about how ridiculous whoever said that line must feel now.</p>
<p>Don&rsquo;t play that role. In Science we&rsquo;re not loyal to &ldquo;teams&rdquo;: we root for whoever is winning and switch the moment they&rsquo;re proven wrong. That&rsquo;s why Science always evolves.</p>
<p>And surprises happen. In the 80s and 90s nobody gave Objective-C a second look; it seemed doomed to failure. Then, in 2007, the iPhone shows up and, surprise, you needed to know Objective-C. Suddenly it became one of the most successful languages of the end of the first decade of the 21st century. Every ten years the market transforms in some way. It&rsquo;s <a href="http://en.wikipedia.org/wiki/Bell%27s_law_of_computer_classes"target="_blank" rel="noopener">Bell&rsquo;s Law</a>.</p>
<h2>Accept It: Your Solutions Today Are Bad<span class="hx:absolute hx:-mt-20" id="accept-it-your-solutions-today-are-bad"></span>
    <a href="#accept-it-your-solutions-today-are-bad" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Back to the theme of <strong>&ldquo;Ignore the Religious Wars&rdquo;</strong>: how do you figure out what to do? Stick to the principles. Throw out what the gurus say, don&rsquo;t idolize anyone, don&rsquo;t blindly follow anyone. Go down to the fundamental questions and the more obvious direction shows up.</p>
<p>When you know how things work, strip the varnish, pop the hood, take the engine apart, understand the chemistry of combustion, only then do you master the craft. If you barely remember what the hell changing the oil is for, you&rsquo;ll always be a mediocre driver, at best. What&rsquo;s your goal? If it&rsquo;s to be the car&rsquo;s engineer, listening to gurus talk about the color of the steering wheel won&rsquo;t take you far.</p>
<p>Computer Science usually gets ignored because learning Math looks both boring and useless.</p>
<p>Let&rsquo;s run through a few examples. If I ask a beginner how to search for words inside a text, the most obvious things that should come to mind are:</p>
<ul>
<li>use substring functions and a loop to scan the text (brute-force solution)</li>
<li>use a regular expression, or in a database use a &ldquo;LIKE&rdquo; (generic solution)</li>
<li>install a SOLR or Elasticsearch (correct solution in many cases, but &ldquo;black magic&rdquo; in terms of understanding)</li>
</ul>
<p>Most people wouldn&rsquo;t even think of the third solution. And whoever does doesn&rsquo;t know why. What if I told you that, in an absolutely raw and boiled-down way, the solution is to turn the document and the search terms into vectors and compute the relevance between them by <a href="http://en.wikipedia.org/wiki/Cosine_similarity"target="_blank" rel="noopener">cosine similarity</a>? That&rsquo;s exactly what the <a href="http://en.wikipedia.org/wiki/Vector_space_model"target="_blank" rel="noopener">Vector Space Model</a> (VSM) means, which you&rsquo;ll find in several search engines.</p>
<style>.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; height: auto; } .embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style><div class='embed-container'>

<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/o5nflzfX5tw"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>
</div>
<p>The knowledge behind that is called <a href="http://en.wikipedia.org/wiki/Linear_algebra"target="_blank" rel="noopener"><strong>Linear Algebra</strong></a>. Remember it, from the FIRST year of Computer Science? On this topic I recommend a talk I gave, <a href="https://www.eventials.com/akitaonrails/como-nao-fazer-pesquisas-usando-like/"target="_blank" rel="noopener">&ldquo;How not to do searches using LIKE&rdquo;</a>.</p>
<p>And when you need to build a process to filter inappropriate content? Most people would think like this:</p>
<ul>
<li>create a blacklist of words and keep adding to it as offensive words come to mind. And use the first or second option I listed before to search for those words.</li>
</ul>
<p>As you can already imagine, the most &ldquo;obvious&rdquo; or &ldquo;simple&rdquo; answer (given the lack of knowledge) is usually the wrong one, and here it also isn&rsquo;t the most efficient.</p>
<p>Get to know machine learning and one of its simplest forms, the <a href="http://en.wikipedia.org/wiki/Naive_Bayes_classifier"target="_blank" rel="noopener">Naive Bayes Classifier</a>. Someone might think <em>&ldquo;damn, but this machine learning stuff is way too advanced for the day-to-day.&rdquo;</em> Not at all. In fact, any cheap anti-spam filter you find on a free-downloads site uses a classifier.</p>
<p>The idea is that isolated words aren&rsquo;t enough to tell whether content is inappropriate. The way sentences are built, the &ldquo;tone&rdquo; of the writing, all of that forms a pattern that can be classified and learned. The more inappropriate content gets classified, the more efficient the algorithm becomes.</p>
<p>If you want to try a simple version <a href="http://web.archive.org/web/20140423094927/http://blog.logankoester.com/bayesian-classification-on-rails"target="_blank" rel="noopener">in Ruby, see this blog</a>. If you want to learn about more advanced classifiers, see the <a href="https://mahout.apache.org/"target="_blank" rel="noopener">Apache Mahout</a> project.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/OhLosjXM-Fg"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>And what is that? It&rsquo;s a subject of <a href="https://www.khanacademy.org/math/probability"target="_blank" rel="noopener"><strong>Statistics and Probability</strong></a>. The fundamentals for understanding it are, again, in the FIRST year of Computer Science.</p>
<p><em>&ldquo;Oh, but you&rsquo;re talking about things nobody needs to know. To make websites this is unnecessary.&rdquo;</em></p>
<p>A good web framework needs to map routes to the underlying programming (the controllers) efficiently. Ruby on Rails has a routing component called <a href="https://github.com/rails/journey"target="_blank" rel="noopener">Journey</a>, which we configure through the &ldquo;config/routes.rb&rdquo; file. Below is an excerpt:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">ImageUploadDemo</span><span class="o">::</span><span class="no">Application</span><span class="o">.</span><span class="n">routes</span><span class="o">.</span><span class="n">draw</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">  <span class="n">devise_for</span> <span class="ss">:admin_users</span><span class="p">,</span> <span class="no">ActiveAdmin</span><span class="o">::</span><span class="no">Devise</span><span class="o">.</span><span class="n">config</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">resources</span> <span class="ss">:photos</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">authenticated</span> <span class="ss">:user</span> <span class="k">do</span>
</span></span><span class="line"><span class="cl">    <span class="n">root</span> <span class="ss">:to</span> <span class="o">=&gt;</span> <span class="s1">&#39;photos#index&#39;</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl">  <span class="n">root</span> <span class="ss">:to</span> <span class="o">=&gt;</span> <span class="s2">&#34;photos#index&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="n">devise_for</span> <span class="ss">:users</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nb">require</span> <span class="s1">&#39;sidekiq/web&#39;</span>
</span></span><span class="line"><span class="cl">  <span class="n">mount</span> <span class="no">Sidekiq</span><span class="o">::</span><span class="no">Web</span> <span class="o">=&gt;</span> <span class="s1">&#39;/sidekiq&#39;</span>
</span></span><span class="line"><span class="cl">  <span class="no">ActiveAdmin</span><span class="o">.</span><span class="n">routes</span><span class="p">(</span><span class="nb">self</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>How hard can this be? What might most people imagine?</p>
<ul>
<li>Easy, just make a set of arrays or a hash (dictionary), and when the URL arrives, break the terms with a regular expression and find the controller, passing the parameters to run it.</li>
</ul>
<p>Let me repeat myself: yes, this works, for very small applications. Anything much bigger than the example above already runs into performance problems.</p>
<p>How about a look at a snippet of the Journey code?</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Journey</span><span class="o">::</span><span class="no">Parser</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">token</span> <span class="no">SLASH</span> <span class="no">LITERAL</span> <span class="no">SYMBOL</span> <span class="no">LPAREN</span> <span class="no">RPAREN</span> <span class="no">DOT</span> <span class="no">STAR</span> <span class="no">OR</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">rule</span>
</span></span><span class="line"><span class="cl">  <span class="n">expressions</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="n">expressions</span> <span class="n">expression</span>  <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Cat</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">first</span><span class="p">,</span> <span class="n">val</span><span class="o">.</span><span class="n">last</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">expression</span>              <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="n">val</span><span class="o">.</span><span class="n">first</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="ow">or</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">expression</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="n">terminal</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">group</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">star</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">group</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">LPAREN</span> <span class="n">expressions</span> <span class="no">RPAREN</span> <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Group</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="ow">or</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="n">expressions</span> <span class="no">OR</span> <span class="n">expression</span> <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Or</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="o">[</span><span class="n">val</span><span class="o">.</span><span class="n">first</span><span class="p">,</span> <span class="n">val</span><span class="o">.</span><span class="n">last</span><span class="o">]</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">star</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">STAR</span>       <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Star</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="no">Symbol</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">last</span><span class="p">))</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">terminal</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="n">symbol</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">literal</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">slash</span>
</span></span><span class="line"><span class="cl">    <span class="o">|</span> <span class="n">dot</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">slash</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">SLASH</span>              <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Slash</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">symbol</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">SYMBOL</span>             <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Symbol</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">first</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">literal</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">LITERAL</span>            <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Literal</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">first</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="n">dot</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span> <span class="no">DOT</span>                <span class="p">{</span> <span class="n">result</span> <span class="o">=</span> <span class="no">Dot</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">first</span><span class="p">)</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>In plain English, now <strong>you&rsquo;re screwed</strong>. Part of Journey uses <a href="https://github.com/tenderlove/racc"target="_blank" rel="noopener">Racc</a>, a parser generator.</p>
<p>If you made it at least through the SECOND year of Computer Science, then you went through <a href="http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs"target="_blank" rel="noopener"><strong>Algorithms and Data Structures</strong></a> and Assemblers. And if you reached the THIRD year, you learned about <a href="http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools"target="_blank" rel="noopener"><strong>Compilers</strong></a> (and saw the famous Dragon book). Racc should have reminded you of Yacc, Flex, Bison.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/QPCC2sbukeo"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>To wrap up, you probably think you know what <a href="http://c2.com/cgi/wiki?NobodyAgreesOnWhatOoIs"target="_blank" rel="noopener"><strong>Object Orientation</strong></a> is, right? I bet you consider your favorite language (whether Java, C#, or JavaScript) object-oriented. If I ask you to define what that means, it&rsquo;s on the tip of your tongue:</p>
<ul>
<li>My language supports Encapsulation, Inheritance, and Polymorphism, therefore it&rsquo;s object-oriented.</li>
</ul>
<p>And what if I told you that procedural, imperative, and functional languages also support encapsulation, inheritance (via delegation or not), and polymorphism? And if that&rsquo;s the case, then <a href="http://c2.com/cgi/wiki?NobodyAgreesOnWhatOoIs"target="_blank" rel="noopener">what defines object orientation?</a></p>
<p>Whoever got into the subject might remember <a href="http://en.wikipedia.org/wiki/Alan_Kay"target="_blank" rel="noopener">Alan Kay</a>, who coined the term &ldquo;object orientation.&rdquo; But how many stopped to research the Simula 67 language? What did Simula introduce in 1967? Objects, classes, inheritance, subclasses, virtual methods, <a href="http://en.wikipedia.org/wiki/Coroutine"target="_blank" rel="noopener">coroutines</a>, discrete event simulation, garbage collection.</p>
<p>And how many have heard of the creators of Simula 67, <a href="http://en.wikipedia.org/wiki/Kristen_Nygaard"target="_blank" rel="noopener">Kristen Nygaard</a> and <a href="http://en.wikipedia.org/wiki/Ole-Johan_Dahl"target="_blank" rel="noopener">Ole-Johan Dahl</a>?</p>
<p>You don&rsquo;t know who they are? I&rsquo;m sure you don&rsquo;t. Well, let me introduce you to the fathers of object orientation.</p>
<h2>On the Shoulders of Giants<span class="hx:absolute hx:-mt-20" id="on-the-shoulders-of-giants"></span>
    <a href="#on-the-shoulders-of-giants" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>What I mentioned in the previous section is a drop of water on the tip of the iceberg. What matters is for you to realize that everything you think you know is close to nothing. I want you to accept that everything you think you know is either wrong or totally incomplete.</p>
<p>That matters because whoever thinks they already know everything, or close to it, will never learn anything. You need to empty the cup to fill it. (by Bruce Lee)</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/406/big_quote-emptiness-the-starting-point-in-order-to-taste-my-cup-of-water-you-must-first-empty-your-cup-bruce-lee-246247.jpg" alt="Bruce Lee Quote"  loading="lazy" /></p>
<p>Beyond that, I want you to understand you&rsquo;re not alone. Before you came dozens of great minds. And I&rsquo;m not talking about those superficial gurus who merely teach techniques and tools. Forget them, everyone will forget them soon too.</p>
<p>Everyone knows who Linus Torvalds, Bill Gates, Steve Jobs, Zuckerberg are. Forget them for now. Stick to the immortals, the names who really made a difference in the history of Computer Science. A few examples:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Charles_Babbage"target="_blank" rel="noopener">Charles Babbage</a></li>
<li><a href="http://en.wikipedia.org/wiki/Ada_Lovelace"target="_blank" rel="noopener">Ada Lovelace</a></li>
<li><a href="http://en.wikipedia.org/wiki/George_Boole"target="_blank" rel="noopener">George Boole</a></li>
<li><a href="http://en.wikipedia.org/wiki/Alan_Turing"target="_blank" rel="noopener">Alan Turing</a></li>
<li><a href="http://en.wikipedia.org/wiki/Alonzo_Church"target="_blank" rel="noopener">Alonzo Church</a></li>
<li><a href="http://en.wikipedia.org/wiki/John_von_Neumann"target="_blank" rel="noopener">John von Neumann</a></li>
<li><a href="https://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29"target="_blank" rel="noopener">John McCarthy</a></li>
<li><a href="http://en.wikipedia.org/wiki/Niklaus_Wirth"target="_blank" rel="noopener">Niklaus Wirth</a></li>
<li><a href="http://en.wikipedia.org/wiki/Bertrand_Meyer"target="_blank" rel="noopener">Bertrand Meyer</a></li>
<li><a href="http://en.wikipedia.org/wiki/Dan_Ingalls"target="_blank" rel="noopener">Dan Ingalls</a></li>
<li><a href="http://en.wikipedia.org/wiki/Donald_Knuth"target="_blank" rel="noopener">Donald Knuth</a></li>
<li><a href="http://en.wikipedia.org/wiki/Edsger_Dijkstra"target="_blank" rel="noopener">Edsger W. Dijkstra</a></li>
</ul>
<p>And that&rsquo;s just a sample. Science is a broad field, where one scientist&rsquo;s work complements the previous one&rsquo;s. Step by step, always moving forward. It&rsquo;s a cumulative work of tens, hundreds of years. Our advantage? Hundreds of people already walked this path in the past, and we can use what they learned and left us, instead of making the same mistakes ourselves until we learn on our own.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/6dME3wgaQpM"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>Almost everything you see out there called <a href="http://web.archive.org/web/20140506054007/http://startups.ig.com.br/2013/restricoes-sao-libertadoras-menos-e-mais/"target="_blank" rel="noopener">&ldquo;innovation&rdquo;</a> is the rediscovery of things already documented in the past, but that were ahead of their time. It was like that with the mouse: <a href="http://en.wikipedia.org/wiki/Douglas_Engelbart"target="_blank" rel="noopener">Douglas Engelbart</a>, who created it in 1968, had to wait sixteen years, until Steve Jobs launched the Macintosh, to see his invention go mainstream. Stop and think: how many discoveries are sitting in the past, just waiting for someone to dig them up and finally make them real?</p>
<p>Want to know about the immortal books of Computer Science? Here are a few:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs"target="_blank" rel="noopener">Structure and Interpretation of Computer Programs (SICP)</a></li>
<li><a href="http://en.wikipedia.org/wiki/The_C_Programming_Language"target="_blank" rel="noopener">The C Programming Language (K&amp;R)</a></li>
<li><a href="http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs"target="_blank" rel="noopener">Algorithms + Data Structures = Programs</a></li>
<li><a href="http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools"target="_blank" rel="noopener">Compilers: Principles, Techniques and Tools</a>, the Dragon book</li>
<li><a href="http://en.wikipedia.org/wiki/Modern_Operating_Systems"target="_blank" rel="noopener">Modern Operating Systems</a></li>
<li><a href="http://en.wikipedia.org/wiki/Computer_network"target="_blank" rel="noopener">Computer Networks</a></li>
<li><a href="http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming"target="_blank" rel="noopener">The Art of Computer Programming</a>, which even I haven&rsquo;t read, and I don&rsquo;t know anyone who has read and understood it, but I&rsquo;ll leave it here because of its importance.</li>
</ul>
<p><a href="http://www.akitaonrails.com/en/2009/04/17/off-topic-devo-fazer-faculdade"target="_blank" rel="noopener">Don&rsquo;t want to go to college?</a> No problem, try to follow the material MIT makes available online on <a href="http://web.archive.org/web/20140430225124/http://ocw.mit.edu/courses/"target="_blank" rel="noopener">Electrical Engineering and Computer Science</a>. If you&rsquo;re still a complete amateur even in the programming world, see this introductory Computer Science course on <a href="http://web.archive.org/web/20140517025706/https://www.coursera.org/course/cs101"target="_blank" rel="noopener">Coursera</a>.</p>
<p>Note that I&rsquo;m not citing in this article any of the names many might expect, like Martin Fowler, Bruce Eckel, Robert Martin, Michael Feathers, Kent Beck, Steve McConnell, Tom DeMarco, Dave Thomas. Forget them for now. Without the earlier ones, these make little difference.</p>
<p>Don&rsquo;t put the cart before the horse. Go one step at a time.</p>
<h2>Career in Programming<span class="hx:absolute hx:-mt-20" id="career-in-programming"></span>
    <a href="#career-in-programming" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>One thing I always repeat is this:</p>
<blockquote>"Programming isn't writing any code, the same way cooking isn't throwing any ingredient into a pan."</blockquote>
<p>Understand: writing code is very simple. Anyone with the minimum motor coordination not to try shoving a square peg through a round hole, or who has at least stacked one Lego brick on top of another, is capable of writing code. There&rsquo;s no merit in it at all.</p>
<p>Downloading a Twitter Bootstrap, using a Yeoman generator, installing MySQL on Ubuntu, copying and pasting a jQuery snippet: anyone can do it.</p>
<p>In career terms, what &ldquo;anyone&rdquo; can do is a mere <a href="http://en.wikipedia.org/wiki/Commodity"target="_blank" rel="noopener">&ldquo;commodity&rdquo;</a>. Being a commodity means the value the market is willing to pay will only drop. Every so often some novelty shows up trying to create a differentiation (<em>&ldquo;look, Angular JS,&rdquo;</em> <em>&ldquo;look, HTML 5&rdquo;</em>), but it quickly dissolves into the downward trend in value.</p>
<p>Value lives in the creativity of the solution: extracting the greatest result for the lowest cost. And creativity only exists when you master all the elements around you. When one hour of work swaps an idiotic word-search algorithm for a vector space model, cuts your fleet from ten machines to two, and answers your user in a fifth of the time, that&rsquo;s applied knowledge. And knowledge like that has value, and it grows.</p>
<p>A full toolbox makes you a &ldquo;jack-of-all-trades with many tools.&rdquo; The engineer or architect capable of building the next World Trade Center or Freedom Tower is a different thing.</p>
<p>But, like everyone who wants to grow, we all start as jacks-of-all-trades. There&rsquo;s nothing wrong with that. Just don&rsquo;t fool yourself into thinking that a box with more tools turns you into anything different from that.</p>
]]></content:encoded><category>career</category><category>learning</category><category>computer-science</category><category>off-topic</category></item><item><title>[Off-Topic] The New Generation's Dilemma: start a company or get a job?</title><link>https://akitaonrails.github.io/en/2014/02/20/off-topic-o-dilema-da-nova-geracao-empreender-ou-arranjar-um-emprego/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2014/02/20/off-topic-o-dilema-da-nova-geracao-empreender-ou-arranjar-um-emprego/</guid><pubDate>Thu, 20 Feb 2014 06:00:00 -0300</pubDate><description>&lt;p&gt;First published on &lt;a href="http://web.archive.org/web/20150110212840/http://startupi.com.br/2014/02/o-dilema-da-nova-geracao-empreender-ou-arranjar-um-emprego/"target="_blank" rel="noopener"&gt;2014-02-20T09:00:09+00:00&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Recently a blog article kicked up some buzz. Titled &lt;a href="http://web.archive.org/web/20140221150137/https://medium.com/apple-daily/f5f8c807d868"target="_blank" rel="noopener"&gt;I wanted to work at Apple really bad, and now not so much&lt;/a&gt;, it&amp;rsquo;s a vent from the author himself. The summary is simple: in his opinion, his boss treated him and his team badly, to the point where he dropped everything and walked out.&lt;/p&gt;
&lt;p&gt;The more generic discussions ran along the lines of how Apple must really be a horrible place to work, and that the upper ranks still practice the legendary &amp;ldquo;Steve Jobs style&amp;rdquo; of kicking people to squeeze out results. Some even went so far as to say &amp;ldquo;the only way out is to start your own thing, chase your own dreams without a boss like that stepping on you.&amp;rdquo;&lt;/p&gt;</description><content:encoded><![CDATA[<p>First published on <a href="http://web.archive.org/web/20150110212840/http://startupi.com.br/2014/02/o-dilema-da-nova-geracao-empreender-ou-arranjar-um-emprego/"target="_blank" rel="noopener">2014-02-20T09:00:09+00:00</a></p>
<p>Recently a blog article kicked up some buzz. Titled <a href="http://web.archive.org/web/20140221150137/https://medium.com/apple-daily/f5f8c807d868"target="_blank" rel="noopener">I wanted to work at Apple really bad, and now not so much</a>, it&rsquo;s a vent from the author himself. The summary is simple: in his opinion, his boss treated him and his team badly, to the point where he dropped everything and walked out.</p>
<p>The more generic discussions ran along the lines of how Apple must really be a horrible place to work, and that the upper ranks still practice the legendary &ldquo;Steve Jobs style&rdquo; of kicking people to squeeze out results. Some even went so far as to say &ldquo;the only way out is to start your own thing, chase your own dreams without a boss like that stepping on you.&rdquo;</p>
<p>And that&rsquo;s the point of this article. With the current frenzy around startups, this is an attitude I see more and more often.</p>
<p>Let me put the common complaint about bosses in perspective. No boss you&rsquo;ve ever run into, even the worst of the worst, comes close to Henry Clay Frick, who ran the operations of legendary Andrew Carnegie&rsquo;s steel mills. Working conditions in the late 19th century were terrible, and maybe not even the worst conditions today match the worst of that era.</p>
<p>Several of the great industrial magnates of the period, including Carnegie, Rockefeller, Vanderbilt, and <a href="http://en.wikipedia.org/wiki/Robber_baron_%28industrialist%29"target="_blank" rel="noopener">many others</a>, exploited workers to the edge of misery. One example of how far it went was the famous <a href="http://en.wikipedia.org/wiki/Homestead_Strike"target="_blank" rel="noopener">Homestead Strike</a>. The result? Seven workers killed and eleven wounded.</p>
<p>Believe me, you would not want someone like Frick as your boss.</p>
<p>That was an extreme example, and it doesn&rsquo;t mean there aren&rsquo;t bad bosses today. I&rsquo;ll keep the context to the world of tech startups we&rsquo;re part of, and leave out public service, the military, and other areas outside that frame.</p>
<p>The big difference between today and Carnegie&rsquo;s time is that today there are options. Back then, either you put up with terrible conditions and terrible pay, or you lived in misery with no job at all. Today any good professional has plenty of alternatives. People come and go from companies hundreds of times a day, across hundreds of companies, and you only have to look at the proliferation of job and recruiting sites to see it.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/503/Homestead_riot_harpers_3c26046v.jpg" alt="Homestead Strike"  loading="lazy" /></p>
<p>If you&rsquo;re a student or a fresh graduate, understand a hard truth: you are just like the hundreds of people who graduated alongside you and enter the market every single day. The first job is always hard. And not just the first: the second, the third, and probably the ones after that too. What you &ldquo;think&rdquo; you&rsquo;re capable of is worth nothing until you have a run of concrete results to prove it. That&rsquo;s what we call a résumé.</p>
<p>I&rsquo;ve heard plenty of young people say things like &ldquo;I need to change jobs, I&rsquo;m not learning anything here anymore.&rdquo; If you&rsquo;ve been at the same company for ten years, it&rsquo;s probably past time. In the first or second year? That&rsquo;s nonsense. The company has plenty to teach you; the problem is you don&rsquo;t want to learn.</p>
<p>A programmer, for instance, doesn&rsquo;t have &ldquo;programming&rdquo; as their only job. In August 2013 I wrote that the <a href="/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas">hardest thing for a Software Engineer</a> is to grasp that software problems often have no solution in software. Learning to negotiate, <a href="/en/2013/11/02/off-topic-programadores-sao-pessimos-comunicadores-udp-vs-tcp">communicating so others actually understand</a>, managing expectations, working in teams, convincing others that your ideas are good: all of that is part of the job.</p>
<p>In other words, a lot of things that have nothing to do with code. And this holds for any profession, whether you&rsquo;re a designer, a writer, a cook, or a race car driver. Everyone has to learn and practice these skills to grow.</p>
<p>There are catchphrases repeated thoughtlessly, like &ldquo;it&rsquo;s not worth living someone else&rsquo;s dream as a company employee.&rdquo; If that&rsquo;s the thinking, better to resign. A company isn&rsquo;t a charity: it exists to turn a profit, not to babysit employees. And unless we&rsquo;re talking about a non-profit, no employee is there as an unpaid volunteer.</p>
<p>Between company and employee there&rsquo;s a work contract. Both agreed to the terms. If you don&rsquo;t agree, don&rsquo;t accept it; if you accepted, honor it; if you think the situation has changed, renegotiate. Renegotiating is an option, and the company can say no. If you&rsquo;re not satisfied, resign, honor the terms to the end, and leave like any good professional. Walking off the job, like in the blog account, is a unilateral breach of contract. It&rsquo;s wrong.</p>
<p>You have several reasons <a href="/en/2011/04/25/off-topic-mea-culpa-organizacoes-democraticas-nao-funcionam">to hold a job</a>. There&rsquo;s the salary to pay the bills at the end of the month, assuming you&rsquo;ve grown a spine and stopped sponging off mom and dad. And there&rsquo;s the learning: you&rsquo;re paid not only to do your job, but to explore everything established companies have already figured out, which you soak up &ldquo;for free.&rdquo; Every criticism you get, every complaint, is a chance to sharpen something you didn&rsquo;t even know you were missing. &ldquo;No pain, no gain.&rdquo;</p>
<p>The very fact that you struggle to find another company willing to hire you already shows you&rsquo;re still short on skills. Another common line is &ldquo;I&rsquo;d do more, but nobody gives me a chance (or pays me more).&rdquo; If you&rsquo;ve caught yourself saying that, you still have a lot to learn. And even to be an entrepreneur, this is the most basic lesson: nobody gives you anything for free, everything is a voluntary trade for mutual benefit. No benefit, no deal.</p>
<p>And I&rsquo;ll tell you the worst place in the world to learn all of this: your own first company. The most common outcome when someone completely inexperienced decides to open their own shop? Becoming exactly the kind of boss described by the blog author who worked at Apple.</p>
<blockquote>PS: there were plenty of ways the blog author could have solved his internal problem. A company the size of Apple, with more than 80 thousand employees, surely has several paths to solving a problem like that. Not knowing how to find them only shows there's still a lot to learn. After all, the squeaky wheel gets the grease.</blockquote>
]]></content:encoded><category>career</category><category>startups</category><category>business</category><category>off-topic</category></item><item><title>[Off-Topic] Remote Work — Small Office, Home Office (SoHo)</title><link>https://akitaonrails.github.io/en/2013/11/18/off-topic-trabalho-remoto-small-office-home-office-soho/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/11/18/off-topic-trabalho-remoto-small-office-home-office-soho/</guid><pubDate>Mon, 18 Nov 2013 19:11:00 -0200</pubDate><description>&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; This is a more complicated subject, and some points may need more explanation. Later I&amp;rsquo;ll see if I write an addendum or a follow-up post. Until then, if anyone disagreed, it may be along the lines that &lt;a href="https://twitter.com/porcelli/status/402555629371678720"target="_blank" rel="noopener"&gt;@porcelli also disagreed&lt;/a&gt; and I tried to explain over Twitter, though it&amp;rsquo;s more a case of us agreeing to agree than any real disagreement :-) The main point is simple: I&amp;rsquo;m not against remote work, quite the opposite. The TL;DR is that I don&amp;rsquo;t believe it&amp;rsquo;s the &amp;ldquo;only&amp;rdquo; solution, and the point here is to walk through a few scenarios. I know excellent professionals who work remotely. I myself, as I say in the article, have geographically separated teams, so that isn&amp;rsquo;t the point up for debate.&lt;/p&gt;</description><content:encoded><![CDATA[<p><em>Update:</em> This is a more complicated subject, and some points may need more explanation. Later I&rsquo;ll see if I write an addendum or a follow-up post. Until then, if anyone disagreed, it may be along the lines that <a href="https://twitter.com/porcelli/status/402555629371678720"target="_blank" rel="noopener">@porcelli also disagreed</a> and I tried to explain over Twitter, though it&rsquo;s more a case of us agreeing to agree than any real disagreement :-) The main point is simple: I&rsquo;m not against remote work, quite the opposite. The TL;DR is that I don&rsquo;t believe it&rsquo;s the &ldquo;only&rdquo; solution, and the point here is to walk through a few scenarios. I know excellent professionals who work remotely. I myself, as I say in the article, have geographically separated teams, so that isn&rsquo;t the point up for debate.</p>
<p>For a change, <a href="http://en.wikipedia.org/wiki/Small_office/home_office"target="_blank" rel="noopener">SoHo</a> is one of those subjects most of us only think about at the surface before deciding &ldquo;it&rsquo;s good&rdquo; or &ldquo;it&rsquo;s bad.&rdquo; It&rsquo;s bad that <a href="http://www.huffingtonpost.com/2013/04/19/marissa-mayer-work-from-home_n_3117352.html"target="_blank" rel="noopener">Marissa Mayer banned Home Office</a>. It&rsquo;s good that <a href="https://web.archive.org/web/20131122102549/http://37signals.com/remote/"target="_blank" rel="noopener">37signals is evangelizing Home Office</a>. It&rsquo;s bad that <a href="http://www.hanselman.com/blog/WorkingRemotelyConsideredDystopian.aspx"target="_blank" rel="noopener">Microsoft agrees with Home Office, but with a possibly dystopian view</a>. Worth remembering that the industry has been chewing on SoHo practically since the personal computer showed up in the mid-80s. There&rsquo;s nothing new about it.</p>
<p>A disclaimer: I own a software shop, a company that offers development services. The core of the company is programmers hired not only in São Paulo, where I live and have clients, but also in Porto Alegre, Fortaleza, and Natal. I don&rsquo;t intend to get into my process in this article.</p>
<p>I thought about dissecting the book <strong>Remote</strong>, which is the reference of the moment. But there isn&rsquo;t much to dissect. If you read the table of contents, you basically know everything the book says already, and the rest is filler. Look:</p>
<ul>
<li>
<p><strong>The Time Is Right for Remote Work:</strong> it lists everything we already know as the downside of big offices, the long meetings, the interruptions, the commute, the quality of life. Without reading the chapter, we already know what bugs us. The problem is that this is hard to argue against, because <em>any place</em> has things you like and things you don&rsquo;t. Listing only what you dislike isn&rsquo;t the most relevant thing. If you have a girlfriend or you&rsquo;re married, did you make a list of your partner&rsquo;s traits stacked up against Miss Universe or Mr. Universe? Is it the set of things that annoy you that matters, or the set of things you love?</p>
</li>
<li>
<p><strong>Dealing with Excuses:</strong> again, the &ldquo;arguments,&rdquo; the &ldquo;demagoguery,&rdquo; the &ldquo;rhetoric&rdquo; assumed to be the <em>excuses</em> managers and company owners use to block remote work. Half of them don&rsquo;t even come out of the companies&rsquo; mouths; they come from the motivational self-help crowd, along the lines of &ldquo;working close together boosts information exchange and therefore creativity.&rdquo; The other half are policies like data security, customer service, loss of control. Those items are secondary. As a company owner, almost all of them are easy to handle and agree with. The industry isn&rsquo;t that bad, and none of these points slipped by unnoticed over the past few decades. There are still leftovers, no doubt, but compare today with 20 years ago and you&rsquo;ll see the difference.</p>
</li>
<li>
<p><strong>How to Collaborate Remotely:</strong> it sums up what we already know, that technology shrank distances. Skype/Hangout, Basecamp/Tracker/Asana, Github/Bitbucket, IRC/Campfire. On top of that, plenty of outsourced services are already remote. An accountant is a good example, and I&rsquo;ll circle back to it later, so hold that thought.</p>
</li>
<li>
<p><strong>Beware the Dragons:</strong> the one part that &ldquo;balances&rdquo; the book and admits remote work isn&rsquo;t always a bed of roses. Not feeling lonely, not working more hours than you should, keeping healthy habits. These are tips that apply to remote work and to anybody&rsquo;s routine. Bottom line: use common sense, but you already knew that.</p>
</li>
<li>
<p><strong>Hiring and Keeping the Best:</strong> in short, and here I agree, there are excellent professionals in every corner of the world. That&rsquo;s my reason for looking beyond São Paulo. Again, it&rsquo;s easy to evangelize an argument without weighing every angle. I agree with the idea and I&rsquo;ll come back to it later.</p>
</li>
<li>
<p><strong>Managing Remote Workers:</strong> once more, management common sense. Good managers already know this. We&rsquo;ve had multinationals running on every continent for decades, and we&rsquo;re good at it. A lot of people believe companies reject remote work because they don&rsquo;t know how to manage people at a distance. That doesn&rsquo;t hold up: look at the massive movement of outsourcing services to countries like India. Like the newspapers, we only look at the bad news, but we know how to do this, and it keeps getting simpler. Outsourcing to individuals looks more complicated than outsourcing to branches in other countries, but overall the process is the same.</p>
</li>
<li>
<p><strong>Life as a Remote Worker:</strong> more common sense for anybody. Have discipline, build a balanced routine, set aside time for your family. The only genuinely relevant bit is the last one, &ldquo;make sure you aren&rsquo;t being ignored.&rdquo; That&rsquo;s my central point for the rest of the article, so hold on to it.</p>
</li>
</ul>
<p>To wrap up: of the 37signals books I&rsquo;ve read, this is easily the weakest. When reading the table of contents is enough to grasp the whole book, the conclusion comes easy. That doesn&rsquo;t make it wrong or bad, but a blog post could carry the same message: yes, there are plenty of advantages to remote work. And, of course, by pure coincidence they sell tools for exactly what the book describes. It&rsquo;s a terrific piece of self-marketing, and it&rsquo;d be dumb not to do it.</p>
<h2>The Truth About Remote Work<span class="hx:absolute hx:-mt-20" id="the-truth-about-remote-work"></span>
    <a href="#the-truth-about-remote-work" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Now for the other side of the coin. In my recent article <a href="http://www.akitaonrails.com/en/2013/10/30/off-topic-matematica-trolls-haters-e-discussoes-de-internet"target="_blank" rel="noopener">Math, Trolls, Haters and Internet Discussions</a> I tried to get across a simple but important idea: an incomplete formula is useless. To recap, a procedure, a methodology, or a process only becomes a &ldquo;formula&rdquo; once it defines the &ldquo;domain&rdquo; of the problem.</p>
<p>I&rsquo;ll assume 37signals is arguing that <strong>service professionals</strong> could work remotely. I&rsquo;m restricting it to computing because plenty of other fields simply don&rsquo;t work that way, like airline pilots, firefighters, doctors. The domain is limited to services, never production, and whose output doesn&rsquo;t need physical media, meaning it travels over the Internet. Musicians, programmers, writers, accountants, lawyers, architects (partly). Simple enough to define. For my purposes, I&rsquo;ll stick to software development services.</p>
<p>The biggest problem with books and people who evangelize about human behavior is ignoring Sociology, Psychology, and the fields that already studied this thing to death. The book Remote is convenient for 37signals&rsquo; domain and works there. The way it&rsquo;s described, it works only there. That&rsquo;s the first tell for separating serious research from self-help: <em>&ldquo;It worked for me, so it can work for you.&rdquo;</em> That&rsquo;s how they sell diets.</p>
<p>For several reasons, 37signals did very well as a product company. Among them, the ones <a href="http://vimeo.com/53494258"target="_blank" rel="noopener">Zed Shaw explains in this talk</a> and the capital injection from Jeff Bezos. Good for them, but it means the problem domain is &ldquo;product company that brings in revenue and profits very nicely.&rdquo; And that already knocks a huge slice of the market out of the equation. If you don&rsquo;t know the numbers, we&rsquo;re talking about a much bigger universe, one that in Brazil came close to <a href="https://web.archive.org/web/20131027022456/http://corporate.canaltech.com.br/noticia/profissional-de-ti/Brasil-deve-liderar-aumento-de-investimentos-no-mercado-de-TI-em-2013/"target="_blank" rel="noopener"><strong>R$ 37 billion</strong></a>. Way bigger than the narrow universe of tech startups.</p>
<p>Worth understanding another thing that both Getting Real and Remote try to argue, and could have simplified. Highly centralized structures, with heavy top-down control and little or no regard for the workforce, tend to be bad places to work. The hasty conclusion is that full decentralization is the best form. Worse still is picturing 37signals as a decentralized company just because everyone is remote and there&rsquo;s no rigid hierarchy. In practice it&rsquo;s centralized, with intermediate levels of decentralization.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/390/big_Screen_Shot_2013-11-18_at_3.35.48_PM.png" alt="Jason Fried, DHH at the center"  loading="lazy" /></p>
<p>It gives the impression of a decentralized organization because it uses <a href="http://www.catb.org/esr/writings/homesteading/"target="_blank" rel="noopener">open source processes</a> for execution. But the chain of command is clearly centralized in Jason Fried and David Hansson. There&rsquo;s nothing wrong with that, and it&rsquo;s exactly how it should be.</p>
<p>With that in mind, I want to show a chart I pulled from a <a href="http://www.youtube.com/watch?v=wadBvDPeE4E"target="_blank" rel="noopener">Nicholas Christakis</a> lecture. He cites a study on Broadway shows. Some are big hits, others are box-office flops, and the researchers wanted to know whether there was any correlation between the type of social network in the show&rsquo;s organization and the success rates.</p>
<p>Picture on the X axis the density of relationships among the show&rsquo;s team professionals. 0 is the highly centralized network, where people at the edges don&rsquo;t even talk to each other; 100 is the highly decentralized network, where anyone talks to anyone. Level 0, intuition already flags as bad, and the correlation confirms it: it shows up in the shows that flopped. The counterintuitive part is that fully decentralized networks flop just as much. The successful shows sit in the intermediate networks, with some decentralization and some centralization.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/389/big_Screen_Shot_2013-11-18_at_3.30.02_PM.png" alt="Success is in the middle"  loading="lazy" /></p>
<p>37signals isn&rsquo;t fully centralized, since the remote programmers talk over chat, via Github, and so on. And it isn&rsquo;t fully decentralized, because there&rsquo;s some level of specialization and, of course, a central strategic command.</p>
<p>I&rsquo;m testing different scenarios, and the first step, in my case, starts with this other diagram:</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/391/big_Screen_Shot_2013-11-18_at_3.43.24_PM.png" alt="Codeminer 42"  loading="lazy" /></p>
<p>But, as I said, I won&rsquo;t stray from the main subject here. Just a hint.</p>
<h2>The Career Problem<span class="hx:absolute hx:-mt-20" id="the-career-problem"></span>
    <a href="#the-career-problem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I keep repeating that defining the domain matters because, in 37signals&rsquo; case, you can raise people&rsquo;s salaries almost indefinitely. The product already hit a scale where revenue is orders of magnitude larger than costs and expenses. Well, if you can bankroll racing at <a href="https://web.archive.org/web/20130307181816/http://www.alms.com/drivers/david-heinemeier-hansson"target="_blank" rel="noopener">Le Mans</a>, you can pay programmers 5 or 6 figures.</p>
<p>Keep evolving the product, build new products carefully, keep old customers happy, do good marketing to draw new ones, in short, what a good company should do, and you can keep growing for a good while.</p>
<p>Except a product company like that isn&rsquo;t common. It&rsquo;s actually the rarest case in the industry, and the same rules don&rsquo;t apply to service companies, which are the majority. And the reason is structural, tied to the fundamentals of the industry.</p>
<p>From that comes the reasoning: <strong>&ldquo;That&rsquo;s why opening a service company isn&rsquo;t worth it, better to go straight to products.&rdquo;</strong> My answer is simple: &ldquo;good luck.&rdquo; The obvious premise is that product companies pan out right away. I already covered this in my previous article <a href="http://www.akitaonrails.com/en/2013/11/14/off-topic-tech-startups-superlotacao-de-b2c-boring"target="_blank" rel="noopener">Tech Startups, B2C overcrowding. Boring.</a>.</p>
<p><em>&ldquo;Oh, just follow Lean Startup, Agile processes, Business Canvas,&rdquo;</em> and the whole little package they sell today, with instructions any kid can follow and batteries included, and <strong>boom</strong>, automatic success&hellip; does anyone really buy that nonsense?</p>
<p>Now back to reality. The biggest problem with hiring home-office programmers is HR and career management, not just control. We&rsquo;re reaching a maturity level in software development where programming with good practices, good technology, efficiency, predictability, and easy future maintenance stopped being a <em>Premium</em> and became the norm. I won&rsquo;t offer a client a cheaper programmer because they&rsquo;re low quality. I want my junior to move up to mid-level fast, the client to get the same technical level no matter who does the work, and the quality to stay above average, because the industry average is still below the poverty line.</p>
<p>Except, if that&rsquo;s the norm, how does a company give programmers raises? Up to a point, technical ability makes a big difference. But cases of very high, still-experimental technology, where few people know what to do, are rare, in services and in products alike. The rest gets commoditized fast. The open source world all but guarantees that once a hard problem is solved, it gets replicated in no time. If making a responsive, halfway good-looking web front-end was once &ldquo;complicated,&rdquo; a Foundation or a Bootstrap already flattened most of that curve.</p>
<p>This is the core of the issue: just programming is too little for 90% of software projects. I discussed in another article, <a href="http://www.akitaonrails.com/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas"target="_blank" rel="noopener">Estimates Are Promises. Promises Must Be Kept.</a>, that the hardest thing in a Software Engineer&rsquo;s career is realizing that much of a software project isn&rsquo;t solved with software. A &ldquo;senior&rdquo; professional is defined less by the prettiest code and more by managing client expectations, whether corporate or consumer, and by taking on responsibility.</p>
<p>Again, I won&rsquo;t get hung up on exceptions like research centers or established products. Inside a group, properties emerge that only exist inside a group. (See the Christakis talk again, or others like <a href="http://www.youtube.com/watch?v=B0vu3UVl8QY"target="_blank" rel="noopener">Duncan Watts</a>, to start getting a feel for these properties.) These are activities that usually don&rsquo;t happen solo: peer-to-peer training, where a junior gets to learn from someone more senior, plus the exercise of communication, negotiation, responsibility, and teamwork.</p>
<p>All of that is possible while remote, just much slower and much less obvious, because each individual really is isolated. A geographical cluster also influences the market and the local community around it, so it isn&rsquo;t confined to your primary group: secondary groups emerge. And each cluster relates the way Remote itself describes, with online tools and the occasional in-person trip.</p>
<p>In practice, how much more productive and efficient is a good senior developer than a junior? Ten times, tops? Meaning if a junior earns 1000, a senior earns 10,000 at most? And after that? Now, a good professional who trains, mentors, and self-scales from 1 to 3 has already climbed orders of magnitude. They easily reach 20,000 or more that way. Do this across clusters and soon you have a more resilient network.</p>
<p>I&rsquo;m not saying mentoring only happens in person, but the people who can pull it off remotely are still the exception, not the rule. We hire folks with little experience, or fresh out of college, and mentoring that person at a distance, while not impossible, is tricky. In the end, it always comes down to the person.</p>
<p>So is an individual working remotely <em>wrong</em>? Of course not. That&rsquo;s another problem with this kind of argument: it makes it look like there are only two paths. As with everything in sociology, there are many scenarios for many configurations. What the evidence flags as the most inefficient are precisely the two extremes, fully centralized and fully decentralized. In the range between them lives a whole series of different opportunities.</p>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>So yes, there&rsquo;s nothing wrong with what&rsquo;s in Remote. The mistake is treating it as the <em>only</em> solution. I could hire isolated home-office individuals with no problem at all. It&rsquo;s just that I still can&rsquo;t picture how to make them grow, expose them to more than coding, and I could hardly delegate responsibility beyond the code. The great advantage of working in the services market is having access to more companies and more situations than any employee of a single company or a single product ever would. Remote and isolated, very few of those opportunities are left.</p>
<p>And again, there are exceptions: big names in the open source world who work as freelancers, alone, doing great, their reputation only climbing. I&rsquo;ll fire back with a question: is that the rule or the exception? Exceptions exist, and if you can pull it off, being the exception is better. But evangelizing the exception&rsquo;s path all the time is deeply irresponsible.</p>
<p>Working from home is an experience worth trying. It is by no means automatically better than working inside a group, even counting the &ldquo;wasted time&rdquo; on the commute, which, by the way, is a lousy excuse. A lot depends on whether your region has options. If they&rsquo;re scarce, then remote becomes a good alternative. Just keep in mind there are always pros and cons.</p>
<!-- youtube video unavailable (deleted/blocked): dW9ztSUGY_Q -->
]]></content:encoded><category>career</category><category>management</category><category>off-topic</category></item><item><title>[Off-Topic] Programmers Are Terrible Communicators (UDP vs TCP)</title><link>https://akitaonrails.github.io/en/2013/11/02/off-topic-programadores-sao-pessimos-comunicadores-udp-vs-tcp/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/11/02/off-topic-programadores-sao-pessimos-comunicadores-udp-vs-tcp/</guid><pubDate>Sat, 02 Nov 2013 13:49:00 -0200</pubDate><description>&lt;p&gt;We programmers live in the Matrix: we think we know what we&amp;rsquo;re doing and that the rest of the world is too dumb to understand us. After all, we all know how to get on Github, read code, and argue on Hacker News and Reddit, while the rest of the world only knows how to post on Instagram and Facebook. So, &lt;em&gt;obviously&lt;/em&gt;, we&amp;rsquo;re the better ones, and whoever doesn&amp;rsquo;t understand us is the one who has to make the effort to change.&lt;/p&gt;</description><content:encoded><![CDATA[<p>We programmers live in the Matrix: we think we know what we&rsquo;re doing and that the rest of the world is too dumb to understand us. After all, we all know how to get on Github, read code, and argue on Hacker News and Reddit, while the rest of the world only knows how to post on Instagram and Facebook. So, <em>obviously</em>, we&rsquo;re the better ones, and whoever doesn&rsquo;t understand us is the one who has to make the effort to change.</p>
<p>Having lived on every side for a long time, I have news for you: programmers are <strong>terrible</strong> communicators. There&rsquo;s a communication impedance that is turning into a serious disability. Inside programming communities the impression is that code is the only universal language.</p>
<p>But <em>&ldquo;show me the code&rdquo;</em> isn&rsquo;t everything. Some time ago I <a href="https://www.quora.com/Software-Engineering/What-is-the-hardest-thing-you-do-as-a-software-engineer/answer/Fabio-Akita?share=1"target="_blank" rel="noopener">answered on Quora</a> that the hardest thing for every Software Engineer to understand is that 90% of a project&rsquo;s problems aren&rsquo;t solved with code.</p>
<p>Without wanting to generalize, just to illustrate: in the open source world it gives the impression that it&rsquo;s the opposite. But note that the vast majority make small, sporadic contributions, and even those who take part more actively still live a fragmented experience. The software is ready only when it&rsquo;s ready. And in the end, the vast majority of open source projects fail.</p>
<p>For every jQuery that makes it, dozens of other JavaScript libraries never get recognized, even with some technically better aspects. The big, best-coordinated ones, with brute force and contributors to spare, tend to fare better. But brute force only looks like efficiency. And the ones that grow show a very different organization, with release dates and feature roadmaps, converging toward what we know as real &ldquo;projects.&rdquo;</p>
<p>In the real world, time is short, people are few, the direct risks are much greater, and we want more control over the results. I won&rsquo;t get into the merits of the best ways to do it, but deep down, in the real world, communication is the difference between failure and success.</p>
<h2>Informing Isn&rsquo;t Communicating!<span class="hx:absolute hx:-mt-20" id="informing-isnt-communicating"></span>
    <a href="#informing-isnt-communicating" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>The first thing to understand is simple: just because the information &ldquo;exists,&rdquo; or you dropped it somewhere shared, that doesn&rsquo;t mean you communicated.</p>
<p>Communication has 4 ends: the communicator, the recipient, the message, and the medium of transmission. Programmers usually take on only 2, the communicator (themselves) and the message, and ignore the rest. Let&rsquo;s define this better:</p>
<blockquote>
"Communication only happens when the recipient receives and understands the message. If that didn't happen, no communication existed."
</blockquote>
<p>Let&rsquo;s go down a level and speak &ldquo;geek&rdquo;: there&rsquo;s a client, a server, a protocol, and a medium of transmission. If you packaged the message according to the protocol, opened the connection to the server, and tried to send it, but the transmission never finished and came back with an error, we know communication didn&rsquo;t happen.</p>
<p>In the <a href="http://web.archive.org/web/20131105125105/http://packetlife.net:80/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/"target="_blank" rel="noopener">TCP/IP</a> world, first we send a SYN, which initiates communication. We get back a SYN-ACK, the server&rsquo;s acknowledgement that it received the SYN, and we send an ACK to signal the connection is established. With this handshake, we manage to sequence the sending and receiving of packets and guarantee that everything sent was received in full.</p>
<p>In this metaphor, I&rsquo;d say most programmers understand UDP better. They fire off datagrams of information and don&rsquo;t worry whether the recipient got all the packets, they just keep sending. It really gives the impression that programmers think in UDP, just look:</p>
<ul>
<li>they don&rsquo;t want to wait for a handshake to make sure the connection was established</li>
<li>they send small packets of fragmented information, little protocol overhead</li>
<li>TCP worries about <a href="https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm"target="_blank" rel="noopener">congestion control</a> and does throttling, UDP keeps sending even if the router drops the packets</li>
<li>if a packet is lost, UDP doesn&rsquo;t bother resending</li>
<li>it figures broadcast and multicast look more efficient</li>
</ul>
<p>It works fine for communicating to large groups, in broadcast, where it&rsquo;s enough for a percentage to get the message. I&rsquo;d say UDP works reasonably well in the fragmented open source world. But in a world where establishing a connection and guaranteeing delivery of the message matters, we go with TCP.</p>
<p>TCP works because, even with a bad connection, even with a half-baked server, you control the data stream and make sure everything arrived, in the correct sequence, with 100% of what was sent received. In UDP, if the medium is bad, if the server gets corrupted information, it doesn&rsquo;t care and keeps sending.</p>
<p>Both protocols are useful. But if we need to be sure the information was received correctly and in full, we need TCP. In the open source world, using UDP to communicate, cut latency, and be more &ldquo;efficient&rdquo; is fine. Outside the open source world, and that goes far beyond software, we need to be more TCP. The advantages of TCP?</p>
<ul>
<li>making sure the connection was established before sending information</li>
<li>guaranteeing the order of the information, rearranging packets if necessary</li>
<li>moderating the transmission speed so as not to flood the other side</li>
<li>guarantee of message delivery, not just transmission</li>
<li>error checking, to make sure the information wasn&rsquo;t corrupted</li>
<li>&ldquo;acknowledgment,&rdquo; making sure the other side received and understood the information</li>
</ul>
<p>See the difference? It looks like it takes longer, but it&rsquo;s the old story: delivering fast and then having to redeliver several times ends up slower than making sure the message got through the first time. It&rsquo;s like writing code without tests, it looks faster, but then come the consequences.</p>
<p>So, programmers, adjust your protocols. Be more TCP than UDP.</p>
]]></content:encoded><category>communication</category><category>career</category><category>off-topic</category></item><item><title>[Translation] Letter to a Young Programmer Considering a Startup</title><link>https://akitaonrails.github.io/en/2013/10/31/traducao-carta-para-um-jovem-programador-considerando-uma-startup/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/10/31/traducao-carta-para-um-jovem-programador-considerando-uma-startup/</guid><pubDate>Thu, 31 Oct 2013 15:25:00 -0200</pubDate><description>&lt;p&gt;Recently I shared an article &lt;a href="https://www.facebook.com/akitaonrails/posts/10151953794484837?comment_id=27965547&amp;amp;offset=0&amp;amp;total_comments=3&amp;amp;notif_t=share_comment"target="_blank" rel="noopener"&gt;criticizing Lean Startup&lt;/a&gt;, and by now this is turning into a hobby. The great &lt;a href="https://www.facebook.com/alexandre.porcelli"target="_blank" rel="noopener"&gt;Alexandre Porcelli&lt;/a&gt; shared a &lt;a href="https://www.youtube.com/watch?v=4Wb0CGGhjE4#t=0"target="_blank" rel="noopener"&gt;talk by none other than Alex Payne&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alex Payne was one of the earliest engineers at Twitter. I know him from Scala and his posts on NoSQL and other tech topics. Beyond being a programmer and a book author, he&amp;rsquo;s a seasoned startup investor.&lt;/p&gt;
&lt;p&gt;His view on startups lines up with mine. I recommend watching the talk, which grew out of a post on his blog with the same title as this article. I decided to translate that post into Portuguese because Brazilians need to hear more of the other side of the coin.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Recently I shared an article <a href="https://www.facebook.com/akitaonrails/posts/10151953794484837?comment_id=27965547&amp;offset=0&amp;total_comments=3&amp;notif_t=share_comment"target="_blank" rel="noopener">criticizing Lean Startup</a>, and by now this is turning into a hobby. The great <a href="https://www.facebook.com/alexandre.porcelli"target="_blank" rel="noopener">Alexandre Porcelli</a> shared a <a href="https://www.youtube.com/watch?v=4Wb0CGGhjE4#t=0"target="_blank" rel="noopener">talk by none other than Alex Payne</a>.</p>
<p>Alex Payne was one of the earliest engineers at Twitter. I know him from Scala and his posts on NoSQL and other tech topics. Beyond being a programmer and a book author, he&rsquo;s a seasoned startup investor.</p>
<p>His view on startups lines up with mine. I recommend watching the talk, which grew out of a post on his blog with the same title as this article. I decided to translate that post into Portuguese because Brazilians need to hear more of the other side of the coin.</p>
<p>From here on, these are Alex&rsquo;s words:</p>
<p><em>I regularly receive emails from young people, usually those interested in programming, who are trying to make decisions about school and/or their professional futures. This post is for those young people.</em></p>
<p>If you&rsquo;re in your late teens or early 20s, you&rsquo;ve grown up in a world that idealized startups, their founders, and the people who work at them.</p>
<p>If you&rsquo;re in school, you may have felt pressure or have been <a href="http://www.thielfellowship.org/"target="_blank" rel="noopener">encouraged to drop out</a> and join or start your own company. If you&rsquo;re already out in the working world, you may feel that your non-startup job is somehow inadequate, or that you&rsquo;re missing out on valuable experience and potential wealth.</p>
<p>The generation you grew up in has, in recent years, teetered on the brink of becoming &ldquo;lost.&rdquo; Jobs are scarce, entering a university offers no guarantee of employment. Big, old corporations are no longer a guarantee of safe harbor for building a career. Startups appear, through the lens of the media, as the only sign of life in a dying world. I understand the appeal.</p>
<p>Everyone&rsquo;s background is different, and your choices are only yours. That said, you&rsquo;re not making decisions in a vacuum. Here are some things to consider that, in my experience, you&rsquo;re less likely to hear about if you&rsquo;re working in startups.</p>
<h2>A startup is only a means to an end.<span class="hx:absolute hx:-mt-20" id="a-startup-is-only-a-means-to-an-end"></span>
    <a href="#a-startup-is-only-a-means-to-an-end" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I recently interviewed a young guy. I asked him where he saw himself in four years. &ldquo;Running my own company,&rdquo; he said without hesitation. I asked him why. &ldquo;Because entrepreneurship is in my blood,&rdquo; he answered. There was no mention of what his hypothetical company would do, what problems he would solve for people. His goal was a company just for the sake of having a company. That&rsquo;s what he studied for, after all.</p>
<p>People are satisfied in their jobs when they operate with a sense of purpose. So much of our understanding of the psychology of success revolves around goals and keeping those goals top of mind: visualizing the moment of achievement, tracking progress, having others hold us accountable to reach them. Goals shape our individual futures.</p>
<p>Maybe a startup is the best way to reach that goal, and maybe it isn&rsquo;t. If the goal of the young guy described above is to own a business — any business! — then maybe a startup really is the best path. For others, however, I always wonder if they&rsquo;re adapting their goals into the shape of a startup because that&rsquo;s the most applauded, admired, and easily understood (if not easily achieved) approach.</p>
<p>Maybe the best way to reach your goal is starting a non-profit organization or going into politics. Maybe it&rsquo;s doing research at a university or making art. Maybe the answer is joining a large, stable company with formidable resources you can leverage to reach your goal. Maybe your goal is best reached by building a stable, pressure-free career that leaves enough time for your family, friends, community, and self-improvement.</p>
<p>A startup is only a means to an end. Consider the end, and try not to celebrate the means. What do you care about? Who do you want to help? Does a startup make it easier or harder to reach this goal? Where will this leave you when your goal is reached? Where will it leave you if it isn&rsquo;t?</p>
<h2>A job at a startup is the new office job. Startup culture is the new corporate culture.<span class="hx:absolute hx:-mt-20" id="a-job-at-a-startup-is-the-new-office-job-startup-culture-is-the-new-corporate-culture"></span>
    <a href="#a-job-at-a-startup-is-the-new-office-job-startup-culture-is-the-new-corporate-culture" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Startups are portrayed as being exciting, risky, and even subversive alternatives to traditional corporate employment. Startups are seen as freer, more open, more flexible. Some companies really do start like that, but some interviews at late-stage startups make it clear how fast they ossify into structures that resemble the organizations that came before them.</p>
<p>Just as in the first dot-com bubble, there&rsquo;s currently a proliferation of <a href="http://www.businessweek.com/small-business/startup-rates-surge-in-the-us-and-abroad-01202012.html"target="_blank" rel="noopener">startups</a>, <a href="http://www.xconomy.com/national/2011/08/12/theres-an-incubator-bubble-and-it-will-pop/?single_page=true"target="_blank" rel="noopener">incubators</a>, <a href="http://www.businessweek.com/articles/2013-03-14/waiting-for-the-accelerator-bubble-to-pop"target="_blank" rel="noopener">accelerators</a>, <a href="http://navfund.com/blog/the-angel-bubble-or-why-i-would-rather-be-a-vc"target="_blank" rel="noopener">angel investors</a>, and so on. In order for the &ldquo;startup community&rdquo; to replicate itself, nanobot-style, the mechanics of &ldquo;doing a startup&rdquo; have been reduced to an easily transportable sequence of actions accompanied by a shared set of values, norms, and language. As a result, the culture of most startups is uniform, even in style of dress and accessories that help &ldquo;startup guys&rdquo; — and they&rsquo;re mostly &ldquo;the&rdquo; guys — stay with their herd (so they&rsquo;re not <a href="http://www.vanityfair.com/culture/2013/05/silicon-valley-cougar-nights-love"target="_blank" rel="noopener">preyed on by cougars</a>).</p>
<p>Business school graduates like the young guy I interviewed are going <a href="http://www.businessweek.com/articles/2013-03-26/college-startups-the-new-masters-degree"target="_blank" rel="noopener">straight from university to startups</a>, and that&rsquo;s if they even finish school. Business graduates, traditionally risk-averse, now say they don&rsquo;t want to work for big companies. But startups are the new big companies. They are, as I&rsquo;ll describe below, the office cubicles of a distributed workforce aggregated by venture capitalists and their associated institutions.</p>
<p>There&rsquo;s nothing inherently wrong with an office job. Just understand what you&rsquo;re joining. When the company-supplied beer kegs run dry, when the free snacks are making you fat, and playing Xbox in the chill room isn&rsquo;t as fun anymore, what then? When you find out you now report to a politicking middle manager and not the inspiring CEO who interviewed you, will you still want to be there? Is it an environment with enough toys and novelties to sustain you? When every place you consider working looks more or less the same, how long does the novelty last?</p>
<p>Startups have been systematized, mythologized, culturally and socially de-risked; reduced to formulas and recipes. And yet, there is no sustainable formula for creativity and rebellion. When we try to industrialize innovation, we tear out exactly what we&rsquo;re trying to cultivate: the <a href="http://en.wikipedia.org/wiki/Creative_destruction"target="_blank" rel="noopener">creative destruction</a> that keeps the fire of capitalism burning.</p>
<h2>Startups are part of the system, not a rebel wrench in the gears.<span class="hx:absolute hx:-mt-20" id="startups-are-part-of-the-system-not-a-rebel-wrench-in-the-gears"></span>
    <a href="#startups-are-part-of-the-system-not-a-rebel-wrench-in-the-gears" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Funding for startups — that is, the money that pays your salaries — comes from somewhere. Wealthy individuals and institutions invest in startups like any other <a href="https://en.wikipedia.org/wiki/Asset_classes"target="_blank" rel="noopener">asset class</a>. The futurist Bruce Sterling recently <a href="http://nextberlin.eu/2013/04/bruce-sterling-fantasy-prototypes-and-real-disruption/"target="_blank" rel="noopener">joked</a> that &ldquo;startups are full of young people working hard to make other people rich — Baby Boomer financiers, mostly.&rdquo; Even though this may be a generalist and cynical statement, it&rsquo;s by no means untrue.</p>
<p>In broad strokes, and excluding areas like biotech, venture-backed startups are a machine where relatively small amounts of capital are inserted on one side and, ideally, a lot comes out the other side. (In reality this machine <a href="http://www.forbes.com/sites/timworstall/2013/02/22/venture-capital-returns-are-beaten-by-nasdaq-sp-and-djia/"target="_blank" rel="noopener">seems to not work anymore</a>, although the effectiveness of VC as an asset class and the VCs themselves is <a href="http://www.bothsidesofthetable.com/2013/05/25/as-populist-as-it-may-feel-98-of-vcs-arent-dumb/"target="_blank" rel="noopener">open to discussion</a>). The salient point: what&rsquo;s in the middle of the machine is you. <em>You</em> make it run.</p>
<p>The machine isn&rsquo;t interested in you. In fact, the machine is designed with the understanding that most startups will fail, or at most offer mediocre returns to investors. Most companies in many VC portfolios are recognized as straw men. One or two &ldquo;10x&rdquo; companies are what give value to the portfolio. In the best case, founders of failing startups get another push at the slot machine. In the worst case, their failures <a href="http://www.businessinsider.com/jody-sherman-ecomom-2013-4?op=1"target="_blank" rel="noopener">lead them to despair</a>.</p>
<p>There&rsquo;s nothing inherently disruptive about a venture-backed startup. The startup system is just another system; an alternative to the corporate ladder but with as many rungs. Some startups may end up dramatically reshaping the market, but so can any other operator already in the game or active regulator.</p>
<p>The now perennial celebration of startup-driven disruption raises the question: if we accept that disruption is indeed happening, are we better off in the resulting disrupted market? Did we solve a problem, or did we just move the problem around? Are we creating value while increasing fairness and equality, creating positive change that will last? Or did we just make one group of rich people a little richer at the cost of another group of rich people? Are we creating a better future, or just reshuffling the present?</p>
<h2>Startups have an ongoing interpersonal cost.<span class="hx:absolute hx:-mt-20" id="startups-have-an-ongoing-interpersonal-cost"></span>
    <a href="#startups-have-an-ongoing-interpersonal-cost" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No startup story is complete without a scene or two of macho heroes: nights spent programming to exhaustion, weeks away from home trying to raise money in humiliating pitch after humiliating pitch. Startups appeal to a desire for daring that is lost in many forms of modern work, and we hear stories of the rewards waiting when personal lives are sacrificed on the altar of the launch schedule.</p>
<p>Less often we hear about the damage startups do to people&rsquo;s lives. In extreme cases, like with the entrepreneur whose story of failure and suicide is linked above, the &ldquo;community&rdquo; may take a day or two to reflect and lament in blogs and tweets. Then they&rsquo;re back to &ldquo;the grind,&rdquo; and more importantly, making a public show of how hard you&rsquo;re working to satisfy the investors and the intimidating competition.</p>
<p>I&rsquo;ve seen firsthand the damage startups can do to relationships. I&rsquo;ve seen marriages and friendships destroyed, I&rsquo;ve seen children and partners being sidelined, and I&rsquo;ve failed those in my life in every way when work came first. I would listen as people who are the picture of a successful startup — visible in the press and social media, leading conferences, eternally founding and exiting — confided their total loneliness despite seemingly being the social center of the entrepreneurial community.</p>
<p>When you&rsquo;re young, relationships seem like a renewable resource. Friendships exist in abundance and come easily. Just leaving home and into the world, you&rsquo;re eager to escape the constant presence of family. Being pulled into work makes you feel important, independent, an adult. The work itself provides a new community and new friendships, and the bonds formed during intense collaborative work are strong.</p>
<p>I made many friends through work at early-stage companies. Ironically, these relationships are easier to maintain and enjoy when I&rsquo;m not working at a startup.</p>
<h2>Parting Thoughts.<span class="hx:absolute hx:-mt-20" id="parting-thoughts"></span>
    <a href="#parting-thoughts" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I&rsquo;ve worked in startups for half my life now. This work has brought me financial freedom, and I&rsquo;ve put money I earned at a startup into other startups. If there is, as I&rsquo;ve argued above, a modern &ldquo;startup system,&rdquo; I&rsquo;m part of it.</p>
<p>I won&rsquo;t mince words: I am deeply skeptical of this system. I&rsquo;m skeptical of this system&rsquo;s slavery, self-congratulatory fetishization of &ldquo;disruption,&rdquo; while at the same time becoming so obviously the kind of impassive institution it wants to replace. I&rsquo;m skeptical of the short-term vision of the startup community. And I&rsquo;m particularly skeptical of its disregard for the lives of the people who participate in it and the lives of those who live in the world that startups seek to reshape. Let&rsquo;s not even start to discuss the <a href="http://en.wikipedia.org/wiki/Collusion"target="_blank" rel="noopener">collusion</a>, <a href="http://en.wikipedia.org/wiki/Price_fixing"target="_blank" rel="noopener">cartelization</a>, and other market corruption activities that are so common in the VC world. The point being: it&rsquo;s a bad game, and a fraudulent game.</p>
<p>And yet. There are startups I wouldn&rsquo;t want to see disappear. There are people working at and founding these startups who are good, kind, with balanced personal and professional lives, concerned about the impact of their work. Just as we throw slander and accusations of corruption at other systems like politics, mass media, entertainment, and professional sports, we must also admire those who operate ethically and effectively in them. We should celebrate even more those who pioneer new and alternative systems, because they work in the shadows of the community that has a constant hand on the crank of the publicity machine.</p>
<p>Now, you could say that I&rsquo;m laying too much responsibility at the feet of the startup world. Although this system spreads every day over itself as the savior of everything, from capitalism to culture, of course we can accept that business is business and ideals are better left at home. As a VC from a top firm on Sand Hill Road told me during a pitch many years ago when I was describing a conceptual feature in <a href="http://www.simple.com/"target="_blank" rel="noopener">Simple</a> that would make it easier for users to more easily and regularly donate a portion of their savings to charity, &ldquo;let&rsquo;s not waste time on that stuff, we&rsquo;re here to make money.&rdquo;</p>
<p>You may be able to stomach that conduct, but I hope your idealism hasn&rsquo;t been worn down while still so young. I hope you want your work to have meaning, purpose, and value no matter what form that work takes. More than that, I hope you want your life to be defined by more than your work.</p>
<p>Young programmer, I urge you to consider both sides of the startup coin. There are so many ways to leave a mark on the world.</p>
<h2>A Note about Feedback<span class="hx:absolute hx:-mt-20" id="a-note-about-feedback"></span>
    <a href="#a-note-about-feedback" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If you are part of the audience of this post, I&rsquo;d love to hear your feedback and answer your questions, preferably by email. My address is easy to find <a href="https://al3x.net/2013/05/23/letter-to-a-young-programmer.html"target="_blank" rel="noopener">on this site</a>.</p>
<p>If you are <strong>not</strong> part of the audience of this post and are <strong>really, really angry</strong> that a stranger on the Internet has a different opinion from yours, I encourage you to direct your energy into an alternative argument that someone young (or, really, anyone at a career transition point) could benefit from reading. They are your future employees, coworkers, or founders. They are the ones you need to convince, not me.</p>
<p>— May 23, 2013</p>
]]></content:encoded><category>startups</category><category>career</category><category>business</category><category>off-topic</category></item><item><title>[Off-Topic] Estimates Are Promises. Promises Must Be Kept.</title><link>https://akitaonrails.github.io/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/08/23/off-topic-estimativas-sao-promessas-promessas-devem-ser-cumpridas/</guid><pubDate>Fri, 23 Aug 2013 16:15:00 -0300</pubDate><description>&lt;p&gt;Browsing Quora, I found a simple but interesting question: &lt;a href="https://www.quora.com/Software-Engineering/What-is-the-hardest-thing-you-do-as-a-software-engineer/answer/Fabio-Akita"target="_blank" rel="noopener"&gt;&amp;ldquo;Software Engineering: What is the hardest thing for a software engineer&amp;rdquo;&lt;/a&gt;. It&amp;rsquo;s a subject I&amp;rsquo;ve been reflecting on for many years. I answered there in English, and it&amp;rsquo;s worth republishing a Portuguese version here too.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a software engineer and, after twenty years across different companies, markets, and teams, I see a pattern. Practically every engineer I&amp;rsquo;ve met starts with the premise that &amp;ldquo;code&amp;rdquo; is the goal and the solution to every problem.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Browsing Quora, I found a simple but interesting question: <a href="https://www.quora.com/Software-Engineering/What-is-the-hardest-thing-you-do-as-a-software-engineer/answer/Fabio-Akita"target="_blank" rel="noopener">&ldquo;Software Engineering: What is the hardest thing for a software engineer&rdquo;</a>. It&rsquo;s a subject I&rsquo;ve been reflecting on for many years. I answered there in English, and it&rsquo;s worth republishing a Portuguese version here too.</p>
<p>I&rsquo;m a software engineer and, after twenty years across different companies, markets, and teams, I see a pattern. Practically every engineer I&rsquo;ve met starts with the premise that &ldquo;code&rdquo; is the goal and the solution to every problem.</p>
<p>The truth is that, in the market at large, software problems aren&rsquo;t solved with software. I&rsquo;m not talking about the exceptional cases of research and development or academia. This is the first and hardest thing every engineer struggles to understand, and fights against.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/380/houseofcardskevinspacey.jpg" alt="Francis Underwood"  loading="lazy" /></p>
<blockquote>
  <p>Linda Vasquez: I know he made you a promise, but circumstances have changed.</p>

</blockquote>
<blockquote>
  <p>Francis Underwood: The nature of promises, Linda, is that they remain immune to changing circumstances.</p>

</blockquote>
<blockquote>
  <p>&ndash; House of Cards</p>

</blockquote>
<p>One thing a lot of people cite as the hardest is &ldquo;estimating,&rdquo; because you so rarely land on the right estimate. And that&rsquo;s where the problem lives: the phrase itself is confusing.</p>
<p>Estimates, by definition, will never be &ldquo;correct.&rdquo; If they were, we&rsquo;d call them &ldquo;predictions,&rdquo; and they&rsquo;re two separate words for exactly that reason. In a prediction the variables are known and fixed, the path is predictable and automatic. That&rsquo;s the lab scenario: <em>&ldquo;given ideal conditions of temperature and pressure, in a vacuum, with zero friction, a toy car at a constant speed of 10 meters per second, for 10 seconds, travels 100 meters.&rdquo;</em> And estimates?</p>
<p>Outside the lab, we have estimates, and estimates are <strong>PROMISES</strong>.</p>
<p>Promises are made to be kept. A promise doesn&rsquo;t resolve itself. You have to make a deliberate effort to reach it and keep your word. With estimates it&rsquo;s the same: you estimate and then you work hard to deliver what you promised.</p>
<p><em>&ldquo;But the manager/client/investor/boss keeps pressuring me to add more things, make changes all the time, breaking my concentration with irrelevant problems all day long.&rdquo;</em></p>
<p>Yes, they do this, and they&rsquo;ll keep doing it, yesterday, today, and always. The most common reaction is to get defensive. To avoid committing, people decide to give no estimate at all, or throw out a number so out of proportion that any &ldquo;extra&rdquo; is sure to fit. That&rsquo;s a terrible default.</p>
<p>Say you promise your daughter you&rsquo;ll be at her school presentation. You blow it and show up two hours after the whole thing is over. That failure is yours, and yours alone.</p>
<p>It wasn&rsquo;t traffic, it wasn&rsquo;t the surprise meetings, it wasn&rsquo;t the weather. You made the promise and didn&rsquo;t prepare for the bumps along the road: leaving earlier, getting ahead of the problems, building in slack for the unexpected. You left everything for the last hour, walked out at the last minute, and, of course, <em>shit happens.</em></p>
<p>With estimates it&rsquo;s the same. You said a number with no commitment, no sense of responsibility, and did nothing to get there beyond sitting down and writing code. You never went digging to explain the problems.</p>
<p>Saying it once, your way, doesn&rsquo;t mean the other end understood. Whoever starts the communication is responsible for finding a way to get the message across; without that, communication didn&rsquo;t happen. To communicate is to be understood, and being understood is the responsibility of the person talking.</p>
<p>So you failed at communicating, at managing your own time, at helping your peers with the problems. All of it was your responsibility. Writing code was the smallest part.</p>
<p>Having a sense of responsibility is exactly the second hardest thing every engineer faces. If the starting premise is that they only answer for &ldquo;writing code,&rdquo; they don&rsquo;t see the broken communication as their own failure. So they rarely own the outcome: it&rsquo;s much easier to blame everything else. And that comes straight from the first difficulty, the wrong premise that your only goal in life is to write code and that every problem is solved with code.</p>
<p>This doesn&rsquo;t apply to software alone. It applies to the musician, the cook, the builder. As a working professional, sure, you&rsquo;re expected to be great at your craft. But that&rsquo;s the bare minimum of the foundation, and there&rsquo;s nothing exceptional about being technically good, however impressive the skill may look.</p>
<p>There&rsquo;s no point writing the most elegant, perfect code if it solves the wrong problem. It&rsquo;s like composing the most perfect Beethoven-style classical piece for a job that called for music at a kids&rsquo; birthday party. So one of two things: either you don&rsquo;t take the kids&rsquo; party, or you write the best pop tune you can. If you took it and stayed, either you deliver with exceptional quality, within expectations, or you own the fact that you can&rsquo;t and step aside, without getting in the way of whoever can solve what you couldn&rsquo;t.</p>
<p>Anyone offering a service needs to understand one thing: the goal is to implement the best possible solution, but for the right set of problems. And the hardest part is finding that right set. Clients come to professionals precisely because they don&rsquo;t know either. It&rsquo;s on us to help find those problems, to judge whether keeping the promise is within our reach, and then to keep it, managing every obstacle that shows up along the way.</p>
<p>It sounds simple put like this, but even experienced engineers fail to grasp this truth, and plenty get away with breaking promises using tricks to hide the hole they dug.</p>
<p>So learn the first and hardest truth in the world: software is normally not solved with software, it&rsquo;s solved with human capabilities. On a Pareto distribution, I&rsquo;d say 80% of every software problem only gets solved when you invest the remaining 20% in communication, articulation, clear and rational thinking, breaking ambiguities, negotiation, and commitment.</p>
<p>Given all that, it can look easier to never promise anything. Except that never promising means never committing, and never committing means never being a professional. That&rsquo;s exactly what separates the amateur or hobbyist from the professional: making promises and working to keep them. It also happens that you don&rsquo;t hold up your side because it depended on the client, the boss, or whoever holding up their side first. A mutual exchange of promises is the whole reason there&rsquo;s a referee called Justice, and the instrument that records those two promises has a name: a contract.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/381/Promise-Quotes.jpg" alt="Promises"  loading="lazy" /></p>
<p>All that said, can you keep every promise? No, unfortunately you can&rsquo;t. But it&rsquo;s our responsibility as professionals to always chase that ideal, instead of inventing ways to dodge it.</p>
<p>I&rsquo;ve said more about what I consider a professional to be in a 2011 post, <a href="/en/2011/05/04/off-topic-opinioes-verdades-democracia-e-etica/">&quot;[Off-Topic] Opinions, Truths, Democracy, and Ethics&quot;</a>.</p>
]]></content:encoded><category>career</category><category>management</category><category>software-engineering</category><category>off-topic</category></item><item><title>[Off-Topic] Comfort Zone: Taking to the Streets Isn't the Only Solution</title><link>https://akitaonrails.github.io/en/2013/07/23/off-topic-zona-de-conforto-sair-as-ruas-nao-e-a-unica-solucao/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2013/07/23/off-topic-zona-de-conforto-sair-as-ruas-nao-e-a-unica-solucao/</guid><pubDate>Tue, 23 Jul 2013 14:20:00 -0300</pubDate><description>&lt;p&gt;First published on &lt;a href="http://web.archive.org/web/20150404181526/http://startupi.com.br/2013/07/zona-de-conforto-sair-as-ruas-nao-e-a-unica-solucao/"target="_blank" rel="noopener"&gt;2013-07-23T09:17:20+00:00&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Taking to the streets isn&amp;rsquo;t the only solution.&lt;/p&gt;
&lt;blockquote&gt;"Never in the history of the world has anyone ever achieved anything good and valuable by means of prayers and supplications" – J.P. Morgan&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/509/34strikebloody-thursday-fighting.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to judge or analyze the #vemprarua (&amp;ldquo;come to the streets&amp;rdquo;) movements that took over the country&amp;rsquo;s streets in the recent past. It&amp;rsquo;s a tangle I&amp;rsquo;ll leave for political scientists and historians to untangle. What I want to elaborate on is a mindset that comes out of this kind of movement and shows up in our day-to-day: &lt;em&gt;&amp;ldquo;claiming,&amp;rdquo;&lt;/em&gt; the act of &lt;em&gt;&amp;ldquo;complaining, demanding.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>First published on <a href="http://web.archive.org/web/20150404181526/http://startupi.com.br/2013/07/zona-de-conforto-sair-as-ruas-nao-e-a-unica-solucao/"target="_blank" rel="noopener">2013-07-23T09:17:20+00:00</a></p>
<p>Taking to the streets isn&rsquo;t the only solution.</p>
<blockquote>"Never in the history of the world has anyone ever achieved anything good and valuable by means of prayers and supplications" – J.P. Morgan</blockquote>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/509/34strikebloody-thursday-fighting.jpg" alt=""  loading="lazy" /></p>
<p>I don&rsquo;t want to judge or analyze the #vemprarua (&ldquo;come to the streets&rdquo;) movements that took over the country&rsquo;s streets in the recent past. It&rsquo;s a tangle I&rsquo;ll leave for political scientists and historians to untangle. What I want to elaborate on is a mindset that comes out of this kind of movement and shows up in our day-to-day: <em>&ldquo;claiming,&rdquo;</em> the act of <em>&ldquo;complaining, demanding.&rdquo;</em></p>
<p>It&rsquo;s very common for this new generation to fall into the trap of thinking that demanding is the best solution to problems. They&rsquo;re wrong. Barring extreme cases, that&rsquo;s always the worst possible solution. In the daily life of the common man, demanding is just a declaration of your own incompetence.</p>
<p>Let&rsquo;s consider our tech market in general:</p>
<ul>
<li>Demanding better working conditions: nobody works anymore in dirty, smoky factories, alongside rats and sewage. Come on, nobody even works 8 hours a day nonstop, at most 4 hours stretched over 8.</li>
<li>Demanding better salaries: it&rsquo;s a free market, with dozens of tech companies of all sizes and categories. Mobility is easy. Of course, only someone with the ability to do it manages to move from one company to another for more money. Whoever stays put, unhappy, and only knows how to &ldquo;demand&rdquo; a raise is already showing their low character.</li>
<li>Demanding investments: it seems startup &rsquo;entrepreneurs&rsquo; today are turning into &lsquo;professional beggars,&rsquo; convinced they can only move forward once an investor hands them money.</li>
</ul>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/508/10.jpg" alt=""  loading="lazy" /></p>
<p>The &ldquo;demanding&rdquo; mindset leads to another one, the &ldquo;cheap complainer,&rdquo; the person who blames everyone but themselves.</p>
<ul>
<li>&ldquo;What they&rsquo;re asking is impossible to do in this time and cost.&rdquo; The thinking behind it: &ldquo;I can&rsquo;t picture a way, so it must be impossible.&rdquo;</li>
<li>&ldquo;The product&rsquo;s users are stupid, the problem isn&rsquo;t the product.&rdquo; The thinking: &ldquo;if I made it, it can only be good; if they&rsquo;re complaining, they&rsquo;re the stupid ones.&rdquo;</li>
<li>&ldquo;The market is unfair: I know more and earn less than I should.&rdquo; The thinking: &ldquo;I know I&rsquo;m really good, so why don&rsquo;t they pay me what I want?&rdquo;</li>
<li>&ldquo;They only criticize me, and what about the other guy who also didn&rsquo;t do it?&rdquo; Nobody likes being criticized, but without criticism there&rsquo;s no progress. Worse still when the first reaction to criticism is to compare it with someone else&rsquo;s mistake or to justify it by blaming others. That profile will never go far. Praise doesn&rsquo;t help anyone evolve, cheap praise least of all.</li>
</ul>
<p>The &ldquo;Me me me&rdquo; Generation is the most sensitive I&rsquo;ve ever seen. It should be called the &ldquo;Porcelain Generation,&rdquo; because it breaks way too easily.</p>
<p>In the Industrial Revolution people were literally hard as iron. There was no option: many died in the factories, and the concept of &ldquo;working conditions&rdquo; didn&rsquo;t even exist. In the agricultural era, people worked from sunrise to sunset, earning very little and carrying tons on their backs.</p>
<p>Now this digital era has a stereotypically Emo resilience (nothing to do with the origins of hardcore punk): scratch a fingernail and they panic. Adolescence is being stretched, and adulthood only shows up after 30 (back in the day, 16 was a good age to take on an adult role).</p>
<p>That should actually be a good thing, because it means we&rsquo;ve raised comfort to a level never seen in millennia of human history. But there&rsquo;s a side effect: the new generation grew up without understanding how hard it was to get here.</p>
<p>All of this can lead to a question: &ldquo;so I&rsquo;m supposed to swallow everything I don&rsquo;t like?&rdquo; Not at all. And here&rsquo;s a hook back to my previous article <a href="http://www.akitaonrails.com/2013/04/01/off-topic-restricoes-sao-libertadoras-menos-e-mais"target="_blank" rel="noopener">&ldquo;Constraints are Liberating: less is more&rdquo;</a>.</p>
<p>Always assume this premise: nobody is ever going to give you what you want or need, much less anything beyond that. If you haven&rsquo;t earned it, you don&rsquo;t deserve what you&rsquo;re asking for, and nobody has any obligation even to listen to what you have to say. It&rsquo;s on you, and only you, to solve your own problem, with your own sweat and your own tears.</p>
<p>To me, the difference between a child and an adult is simple: an adult solves their own problems with their own hands and never expects them to be solved for free. And &ldquo;solving&rdquo; means actually solving, without blaming others, without demanding, without sweeping the problem under the rug.</p>
<p><img src="https://akitaonrails.s3.amazonaws.com/assets/image_asset/image/507/340857.jpg" alt=""  loading="lazy" /></p>
<p>And when the problem looks &ldquo;impossible&rdquo; is exactly when you get the best chance to innovate. Innovation comes precisely out of an impossible situation. A thing is impossible when you can&rsquo;t pull it off with what we know today. You can only solve it down a different path, one nobody knows yet.</p>
<p>The teenagers graduating from colleges today see this trendy &ldquo;Startup&rdquo; wave and want to be &ldquo;entrepreneurs.&rdquo; All they learn to do is put together PowerPoints for Demo Days. They believe their &ldquo;education&rdquo; (which is thin, no matter the MBA or PhD) and their &ldquo;idea&rdquo; are enough to crown themselves &ldquo;entrepreneurs.&rdquo; That&rsquo;s little, extremely little.</p>
<p>An &ldquo;entrepreneur&rdquo; who takes low risk and makes low sacrifice is just an average employee with a fancy title. An &ldquo;idea&rdquo; and a possible investment solve very little.</p>
<p>First, go work in a real industry to learn how it works and, who knows, find a solution nobody has tried yet. Because here&rsquo;s another truth: whatever idea you have, someone has probably had it before and already tried it in all sorts of ways. The odds of you having a truly original idea are low.</p>
<p>Only when you land in an impossible situation, where everything has already been tried, does the chance to try something new and maybe innovative show up. As you try to solve it, you might end up finding a solution that already existed and discover that your &ldquo;impossible&rdquo; was just not knowing what was already known. Then you move on to the next problem.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/gR7oHh-fXUw"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>I was watching the History Channel series <a href="http://web.archive.org/web/20130717090520/http://www.seuhistory.com/programas/gigantes-da-industria.html"target="_blank" rel="noopener">&ldquo;The Men Who Built America&rdquo;</a>, which shows, in a romanticized way, part of the story of how the United States conquered and earned its place as the biggest economic power in the world. The story starts like ours: nobody gave them anything, everything had to be earned. It has some good examples I like to cite.</p>
<ul>
<li>It was impossible to transport goods across the entire country by horse or even by ship; it became more and more necessary to find ways to shorten that time. It was the railroads of <a href="http://pt.wikipedia.org/wiki/Cornelius_Vanderbilt"target="_blank" rel="noopener">Vanderbilt</a> that connected all the states of the country.</li>
<li>It was impossible to have a corporation as large and massive as <a href="http://en.wikipedia.org/wiki/Standard_Oil"target="_blank" rel="noopener">Standard Oil</a> once was, but Rockefeller innovated what we know today as corporate structures, many of his practices later deemed illegal. If you&rsquo;ve ever filled your tank at an Esso station here in Brazil, it&rsquo;s worth remembering where it all started.</li>
<li>It was impossible to cross the great Mississippi River with an iron bridge. Connecting the East and West of the country seemed impossible. It took an Andrew Carnegie to execute the idea of an affordable steel industry at large scale to solve this problem. <a href="http://en.wikipedia.org/wiki/Carnegie_Steel_Company"target="_blank" rel="noopener">Carnegie Steel</a> was formed, which would later become US Steel.</li>
<li>It was impossible to have electricity distributed to every home in the country. It literally took the <a href="https://en.wikipedia.org/wiki/War_of_Currents"target="_blank" rel="noopener">&ldquo;blood&rdquo;</a> of geniuses like Edison, Tesla, Westinghouse, and Morgan to reach this goal. Today we don&rsquo;t even think about it, because everyone assumes electricity is something &ldquo;natural.&rdquo; It wasn&rsquo;t.</li>
<li>It was impossible to improve the brutal working conditions in factories and have productivity at the same time. <a href="http://pt.wikipedia.org/wiki/Henry_Ford"target="_blank" rel="noopener">Henry Ford</a> changed that with the refinement of his production line. By the way, remember the model that made him famous was the Ford Model T; to get to &ldquo;T&rdquo; he started at model &ldquo;A.&rdquo;</li>
</ul>
<p>These and other <a href="http://en.wikipedia.org/wiki/Self-Made_Men"target="_blank" rel="noopener">&ldquo;self-made men&rdquo;</a> changed the world one way only: by solving one problem at a time, without claiming, complaining, or demanding. And the more &ldquo;impossible&rdquo; the problem was, the more &ldquo;revolutionary&rdquo; the solution turned out to be. That&rsquo;s how great entrepreneurs are made: solving their own problems with their own hands.</p>
<p>The opening quote of the article sums up its content, and the next one defines it:</p>
<blockquote>"Vision without execution is hallucination" – Thomas Edison</blockquote>
]]></content:encoded><category>career</category><category>startups</category><category>tech-market</category><category>off-topic</category></item><item><title>[Off-Topic] A Vent III, Reflecting on 2007</title><link>https://akitaonrails.github.io/en/2012/12/30/off-topic-um-desabafo-iii-refletindo-sobre-2007/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2012/12/30/off-topic-um-desabafo-iii-refletindo-sobre-2007/</guid><pubDate>Sun, 30 Dec 2012 21:30:00 -0200</pubDate><description>&lt;p&gt;For the record, this article doesn&amp;rsquo;t have an alternative version to the TL;DR :-)&lt;/p&gt;
&lt;p&gt;In 2007 I wrote two articles on &amp;ldquo;consultancies,&amp;rdquo; &lt;a href="http://www.akitaonrails.com/en/2007/03/14/off-topic-um-desabafo"target="_blank" rel="noopener"&gt;A Vent&lt;/a&gt; and &lt;a href="http://www.akitaonrails.com/en/2007/06/19/um-desabafo-parte-ii"target="_blank" rel="noopener"&gt;A Vent II&lt;/a&gt;. They&amp;rsquo;re worth a read to understand the context. I like to reread my stuff to see whether I&amp;rsquo;d still write the same thing today.&lt;/p&gt;
&lt;p&gt;The first is a set of tips for a consultant to improve themselves. In the second I describe the greatest sin of a consultancy. I wrote both when I already had a few years at companies in different industries, the most recent being several years at a consultancy.&lt;/p&gt;</description><content:encoded><![CDATA[<p>For the record, this article doesn&rsquo;t have an alternative version to the TL;DR :-)</p>
<p>In 2007 I wrote two articles on &ldquo;consultancies,&rdquo; <a href="http://www.akitaonrails.com/en/2007/03/14/off-topic-um-desabafo"target="_blank" rel="noopener">A Vent</a> and <a href="http://www.akitaonrails.com/en/2007/06/19/um-desabafo-parte-ii"target="_blank" rel="noopener">A Vent II</a>. They&rsquo;re worth a read to understand the context. I like to reread my stuff to see whether I&rsquo;d still write the same thing today.</p>
<p>The first is a set of tips for a consultant to improve themselves. In the second I describe the greatest sin of a consultancy. I wrote both when I already had a few years at companies in different industries, the most recent being several years at a consultancy.</p>
<p>The first article is very simple, and what I recommended back then is what I still recommend today: continuous improvement. Two points from the original text:</p>
<blockquote>
It's no use just changing jobs, for two reasons: a new project won't necessarily bring new things (the chances of being just another form are high). And leaving learning only for when you need it, on a project, is already too late. You'll be overtaken by others who know what you should have already known. It's a good programmer's obligation to know things before, not after: after a terrible quality product goes into production, the result will be bad both for your client and for your reputation.
</blockquote>
<blockquote>
Stop complaining. Complaining creates a negative mentality, irritates others, and doesn't lead to any solution. Complaining is just another excuse, a noise that hides the real problem. The problem is this: you're complaining about the job, about the project, about the boss, but in reality you'd like to be complaining about yourself. Complaining is just the externalization of the frustration of being what you are and not being able to be more. And that's not a physical inability, it's just mental laziness.
</blockquote>
<p>For me, the great advantage of working at a consultancy instead of staying at a single company? It&rsquo;s being exposed to different projects, different companies, different people, and different ways of dealing with each type of problem.</p>
<p>Look at it this way: a consultant is seen as a &ldquo;pariah.&rdquo; A company&rsquo;s employee, in particular, has no reason to like a consultant, because they&rsquo;re usually called in to do the employee&rsquo;s job, in less time, with better quality, and earning more. In practice, if the consultant succeeds it&rsquo;s because the employees were doing a terrible job before. It&rsquo;s not always like that, but that&rsquo;s the general view.</p>
<p>From the consultant&rsquo;s point of view, it&rsquo;s a hard job. They have to step into a context the employee had months to absorb, figure out what needs to be done and why it hasn&rsquo;t been, and produce more than everyone else with less authority and less knowledge. A consultant is effectively a <em>mercenary</em>: we&rsquo;re called in for the work nobody else could pull off.</p>
<p><em>Note:</em> anticipating the freedom to interpret the &ldquo;mercenary&rdquo; metaphor, let me clarify I mean <em>&ldquo;the one called in to solve the problem no one else could&rdquo;</em> and not <em>&ldquo;being paid to do whatever they&rsquo;re asked, including the wrong thing.&rdquo;</em> With the metaphor clarified, let&rsquo;s move on.</p>
<p>That&rsquo;s what I like. And that&rsquo;s why a good consultant can&rsquo;t regress to the standard-employee mind, the same way a mercenary doesn&rsquo;t compare themselves to the private soldier: they need to be the soldier and the general. When I was a consultant, what pleased me most was being aware of this position, walking into a client knowing I&rsquo;d have to solve the problems the insiders wouldn&rsquo;t.</p>
<p>It was feeling the pressure of walking the front line without knowing what I&rsquo;d face in the middle of the jungle. Talking to the subordinates, to their bosses, to the surrounding departments, and mapping the terrain to find the best path through the minefields. Being able to disagree directly with the client and, at the same time, offer a better solution than anyone had thought of. That&rsquo;s the exercise of every good consultant.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/image_asset/image/321/expendables2.jpeg" alt="The Expendables 2"  loading="lazy" /></p>
<p>The second article, <a href="http://www.akitaonrails.com/en/2007/06/19/um-desabafo-parte-ii"target="_blank" rel="noopener">A Vent II</a>, revolves around a problem I&rsquo;ve seen at many small and medium consultancies: <strong>poor financial health</strong>. That&rsquo;s &ldquo;The&rdquo; main problem:</p>
<blockquote>
When a consultancy shows signs of financial problems, it's the red signal: jump out as soon as possible. Don't think twice. If the client decides to throw a tantrum, if the client decides to delay the invoice, if the client decides to stall, none of that is the consultant's problem: that's exactly what we pay this insurance to the consultancy for — so that it places itself between the client and you. The consultant, correctly working the hours billed, has the right to receive on the dates in the relevant contracts.
</blockquote>
<p>A large consultancy, with an established name for at least a decade, can get a sale price (rate to the client) up to 5 times higher than the buy price (rate to the consultant), or more. But that&rsquo;s the exception in most of the market. In my case, the maximum is 50% of the buy rate, and almost 2/3 of gross revenue goes to payroll.</p>
<p>That&rsquo;s the reality of the services market. With a tight margin, not counting other operational costs and investments, commercial and financial control is fundamental. You know a consultancy is competent when you&rsquo;ve never had to complain about your payment, in a sector where clients never pay on time.</p>
<p>There are several advantages to working alongside a good consultancy instead of going it alone as an autonomous worker or freelancer, and being paid on the right dates is one of the main ones. If payment comes in unstable, or turns into a stiff, the freelancer option gets attractive again. So when I decided to start my consultancy, this was one of the main concerns. The rule I never broke: everyone gets what&rsquo;s in the contract, on the stipulated dates.</p>
<p>And after more than 1 year, one of the most unstable periods in a services company, that rule held intact.</p>
<p>But that&rsquo;s not all a good consultancy offers. The word &ldquo;consultancy&rdquo; is a big umbrella, unfortunately distorted by misuse. I split the definition into at least three big niches.</p>
<p>The first is agencies. Here the consultancy is about marketing and advertising, at most, and the software part usually carries low value in the total budget, sometimes handed over more as a &ldquo;freebie.&rdquo; Execution is low quality because the pieces are volatile, temporary, and don&rsquo;t need to last long. Anything different from that, done in agency style, rarely works well.</p>
<p>The second niche is the infamous <a href="http://web.archive.org/web/20130311025629/http://info.abril.com.br/noticias/rede/gestao20/software/fabrica-de-software-e-uma-besteira/"target="_blank" rel="noopener">software factories</a>. In them, most people work as pure &ldquo;procedural executors,&rdquo; never quite reaching &ldquo;consultant.&rdquo; The fundamental trait is missing: direct contact between the programmer and the client.</p>
<p>The executor works inside a defined process, receives work orders, clocks a fixed number of hours, and their only task is to deliver what&rsquo;s already been detailed, in fixed roles. There are variations, but in general the factory is driven by a process that tries to be deterministic. For that, the kinds of software tend to be limited: forms, registration screens, and form flows, especially company intranets or integrations with back office.</p>
<p>The third niche, &ldquo;consultancies,&rdquo; where &ldquo;consultants&rdquo; actually exist, is rare. The assumption is that the kind of professional at a consultancy is superior to the one at an agency or a factory.</p>
<p>To understand this niche, we need to see what the <em>disadvantage</em> of being a freelancer is. A freelancer has to be a mini-consultancy: doing their own personal marketing, cultivating relationships and a commercial network, negotiating rates, scopes, and deadlines, closing contracts (and most close them verbally, because they don&rsquo;t know how contracts work), issuing invoices, billing, and so on. Oh, and in the middle of all that they still have to program.</p>
<p>Their compensation tends to be higher because of that overhead, but it&rsquo;s precisely because of it that productivity and quality tend to drop. And when the overhead isn&rsquo;t handled well, the result is low-trust deals closed verbally, the way you should never do it.</p>
<p>A good consultancy removes that overhead and does it in a superior way. It&rsquo;s a service exchange, my ideal concept of <a href="http://www.akitaonrails.com/en/2011/04/25/off-topic-mea-culpa-organizacoes-democraticas-nao-funcionam"target="_blank" rel="noopener"><em>&ldquo;voluntary exchanges for mutual benefit&rdquo;</em></a>. The alternative to being at a consultancy is acting as a freelancer or becoming an employee at a company whose <em>core business</em> isn&rsquo;t necessarily software. And here&rsquo;s a parenthetical: even at a tech startup, I&rsquo;d say the core business is rarely the software itself, reflect on that.</p>
<p>&ldquo;Services&rdquo; is a free market where exchanges are essentially voluntary: service in exchange for compensation, as it should be.</p>
<p>There are companies where software is the <em>core business</em>, like software consultancies. And others where it isn&rsquo;t, like commerce companies, where software is accessory and not the main business. Or hosting companies, where the core is unquestionably infrastructure and operations.</p>
<p>That&rsquo;s another thing I learned as a consultant: identifying the core business. If a company sees software as &ldquo;profit,&rdquo; that&rsquo;s where it invests, that&rsquo;s where the future is. If it sees software as &ldquo;cost,&rdquo; it tends not to invest, and to swap what it has for cheaper alternatives.</p>
<p>And that makes sense. Why invest in software at a company whose core is sales? Or finance? There, software and programmers are cost, like a Word or Excel license. If the goal is to grow professionally, look for companies where software is part of the core. If you want a quiet job, routine and few activities, accepting the invisible risk of going obsolete fast and being subject to cuts, look for companies where the core isn&rsquo;t software.</p>
<p>Back to the difference with a freelancer: the consultant doesn&rsquo;t have to worry about marketing, contract negotiation, legal, billing, cash flow, or HR. Like a good mercenary, they get a mission and carry it out. More than that, the consultancy closes projects that would never be within a freelancer&rsquo;s reach, and offers a delivery security a freelancer can&rsquo;t provide.</p>
<p>A good consultancy also doesn&rsquo;t end the contract with the consultant just because a project wrapped up. That&rsquo;s another freelancer pain point: when a project ends, a sales cycle begins that usually drags. A good project takes 1 to 2 months of negotiation to sign, from first contact through proposals and adjustments. The consultant doesn&rsquo;t carry that weight; they just deliver with consistency and quality, while the consultancy handles the overhead of keeping a healthy pipeline of projects always coming in.</p>
<p>Now, the key point: <em>&ldquo;like a mercenary.&rdquo;</em> That&rsquo;s the most undefined part of the model. I believe a good consultant doesn&rsquo;t need an &ldquo;operational boss,&rdquo; the traditional &ldquo;manager&rdquo; who defines work orders, takes over communication with the client, does the internal politicking, and tells each &ldquo;employee&rdquo; what to do.</p>
<p>Of course there are senior and junior consultants, and juniors will always mirror and learn from the seniors, but that doesn&rsquo;t make them &ldquo;bosses.&rdquo; A good consultant is like a good mercenary: either they know what needs to be done, or they figure out how to do it, the right way.</p>
<p><strong>&ldquo;Autonomy&rdquo;</strong> is the buzzword everyone learned to repeat like a cuckoo clock. Everyone only remembers the &ldquo;freedom&rdquo; part of the word, and conveniently forgets the &ldquo;responsibility&rdquo; part.</p>
<p><em>&ldquo;Oh, but I am responsible.&rdquo;</em> You aren&rsquo;t. Your name isn&rsquo;t on the company&rsquo;s articles of incorporation. If the company takes a loss, goes under, or has to deal with its own debts, the one who pays is the partner, not the hired consultant. Legally, you&rsquo;re never responsible, until you become a partner.</p>
<p>And that&rsquo;s a real possibility for whoever turns into an excellent senior. At my company it exists, and it was recently exercised with the entry of 2 new partners.</p>
<p>If the consultancy gives you the &ldquo;freedom&rdquo; to run a project the way a consultant needs to, no intermediaries, no operational boss, no short leash, it&rsquo;s because there&rsquo;s far greater trust than any company would give an employee. If something goes wrong, the consultant has zero risk and the consultancy bears 100% of it.</p>
<p>That&rsquo;s another crucial factor some don&rsquo;t get. It&rsquo;s like insurance: would you drive a new car with no coverage? The consultancy is the consultant&rsquo;s <em>insurance</em>. There they train on projects where they technically have no &ldquo;responsibility&rdquo; and still gain knowledge, capability, and networking, at zero risk.</p>
<p>That&rsquo;s what I liked most about the consultancy where I worked between 2002 and 2007. I came in as a junior programmer, practically a trainee, even though I already had at least 5 years of prior experience. It was all new, so it meant taking a few steps back to learn. And I learned.</p>
<p>On some projects the challenge was purely technical, building software on platforms, tools, or languages I&rsquo;d never used. On others, it was coordinating the work with colleagues the best way possible. On others, it was talking to the client to find out what they needed and executing the best solution. In the end, the challenge turned into selling, convincing the client of the right solution.</p>
<p>I never held the title of &ldquo;manager,&rdquo; &ldquo;pre-sales,&rdquo; or &ldquo;architect,&rdquo; but I acted in all those roles, switching from project to project as the situation demanded. At one moment I was the only developer assigned for a short stretch to solve a technical problem nobody could. At another, I was the one putting together a team of 10 people, hiring and coordinating. In all of them I did what I knew I should do: <strong>solve problems</strong>. A consultant who creates problems has stopped being a consultant and become just another employee.</p>
<p>A consultant&rsquo;s compensation is also different from an employee&rsquo;s. Part of why employees grow more slowly is that their pay rises almost automatically, nearly independent of individual performance. Even the best-equipped companies, with formal reviews and all, end up at the mercy of the ones who, instead of working toward growth, work to find holes in the system and do less. Public-servant profile, pejoratively: automatic annual raises, scheduled title changes, a bad environment for anyone chasing growth.</p>
<p>A consultant, like a freelancer, grows by performance, by delivery, and by how much the clients themselves recognize they deserve more. I&rsquo;ve seen plenty of excellent consultants who, on switching consultancies, took the client along because of their exceptional performance. Today I don&rsquo;t see that anymore, just unethical ex-employees trying to negotiate with the consultancy&rsquo;s client on the side, in talk only. And what good client falls for the sales pitch of an ex-employee who clearly doesn&rsquo;t deliver results?</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/image_asset/image/322/Chuck-Norris-in-The-Expendables-2.jpeg" alt="Chuck Norris"  loading="lazy" /></p>
<p>The biggest problem at a consultancy is when the consultant regresses to the standard-employee stage. The symptom: instead of chasing results, they chase excuses not to do the work as they should.</p>
<p>There&rsquo;s a big difference between the one who complains and keeps delivering good, consistent results, which is what they committed to when signing the service contract with the consultancy, and the one who complains and delivers less and less at lower quality, already going against what was agreed when hired.</p>
<p>The clearest sign shows up in <a href="http://akitaonrails.com/en/2009/09/09/off-topic-direitos-do-homem"target="_blank" rel="noopener">&ldquo;unionization&rdquo;</a> movements (in quotes, pejoratively, because unionizing in a market that isn&rsquo;t monopolized or cartelized makes no sense). It&rsquo;s the one who produces little and starts stirring up the people around them to create &ldquo;movements,&rdquo; smoke screens to pull attention away from themselves. It&rsquo;s the one who spreads <a href="http://web.archive.org/web/20130116143931/http://www.advogado.adv.br/artigos/2000/barroso/caldifaminjuria.htm"target="_blank" rel="noopener">slander, insult, and defamation</a> about colleagues, clients, and the company they work for. Easy to spot: it&rsquo;s always the one who wants to <em>&ldquo;speak for you, for the good of the group.&rdquo;</em></p>
<p>Exactly because of this, every consultancy has a <a href="http://pt.wikipedia.org/wiki/Rotatividade_de_pessoal"target="_blank" rel="noopener">turnover rate</a> higher than that of ordinary companies, and it needs to. It&rsquo;s the sector&rsquo;s dilemma: a services company holds its intellectual capital in its people. Letting go of an employee, much less a consultant, means losing an important asset of work and relationships.</p>
<p>That&rsquo;s why, when a services company lets someone go, it&rsquo;s a conscious decision, aimed at admitting a hiring mistake and taking a step back to take two forward right after. Part of this I described in the article <a href="http://akitaonrails.com/en/2009/03/30/off-topic-net-negative-producing-programmer"target="_blank" rel="noopener">Net Negative Producing Programmer</a>.</p>
<p>The only dismissal that actually harms a company is the one that happens after there are already signs of financial weakness, in the form of delayed salaries. Either way, not everyone was born or wants to be a &ldquo;consultant,&rdquo; and some only find that out over time. It&rsquo;s all a matter of perspective.</p>
<p>To start with, a good consultant speaks for themselves and doesn&rsquo;t need intermediaries. And they should know that everyone knows everyone in this market, where reputation and credibility are currency. Just think: what company would hire someone who defames the places they passed through?</p>
<p>Sometimes the consultant doesn&rsquo;t understand the advantages of their own position. More autonomy always comes with more responsibility, and more responsibility always brings more challenges and more difficulty. Everyone asks for <em>&ldquo;more challenges,&rdquo;</em> but few take them on when they show up and say <em>&ldquo;let me handle it.&rdquo;</em></p>
<p>Many look for a job as an &ldquo;employee,&rdquo; in the sense of deferring responsibility (the famous <em>&ldquo;I just work here&rdquo;</em>). Technically there&rsquo;s nothing wrong with that, not everyone was born to be a problem solver. Some prefer to work on one thing, to be around a smaller group of people for longer, to limit their perspectives because they have no interest in cultivating (and maintaining, since knowing isn&rsquo;t enough) a large network.</p>
<p>What many are after is at least a &ldquo;false illusion&rdquo; of &ldquo;stability,&rdquo; a word that lost its meaning in the 90s, after outsourcing and globalization. Or a &ldquo;false illusion&rdquo; of &ldquo;purpose,&rdquo; signing on to an &ldquo;idea.&rdquo;</p>
<p>I could write a whole article about &ldquo;signing on to ideas or ideologies,&rdquo; but I&rsquo;ll sum it up like this: mostly it&rsquo;s a false expectation, from a lack of experience and exposure to a broader perspective. As I said, the advantage of a consultancy is giving you that time of exposure to different ideas, people, situations, and perspectives, which trims the rough edges off illusions and teaches you how the real world works.</p>
<p>The thing is, there&rsquo;s that annoying factor called &ldquo;time.&rdquo; Most young people today have less and less patience and are more impatient for instant results than I was back in my day. The irony is that my seniors used to call me <em>impatient</em>, and even so, for me it was always natural to take one step back to walk two forward.</p>
<p>On those who want to open their <a href="http://web.archive.org/web/20130107123337/http://www.agoradicas.com.br/mitos-e-verdades-sobre-empreender-parte-i/"target="_blank" rel="noopener">own business</a>, many justify themselves with lines like <em>&ldquo;I&rsquo;m going to work for me and not for others.&rdquo;</em> That line is a huge <strong>false premise</strong>. In practice you <em>&ldquo;never&rdquo;</em> worked <em>&ldquo;for others.&rdquo;</em> Have you ever worked for free, with no compensation at all?</p>
<p>If you got paid, then by definition you worked for <strong>yourself</strong>, trading your capacity and the quality of your service for <a href="http://www.akitaonrails.com/en/2011/02/03/off-topic-a-revolta-de-atlas-dinheiro-e-a-raiz-de-todo-o-mal"target="_blank" rel="noopener">money</a>. When you open your own company, you&rsquo;ll make the same trade again. The earlier and the more inexperienced you do it, the proportionally greater the chance it won&rsquo;t work out. It shouldn&rsquo;t be a hard line to grasp, but understanding comes with knowledge and experience, and not with recklessness.</p>
<p>And what defines a &ldquo;consultancy&rdquo; for me? I like to think of it, philosophically, as a &ldquo;meta-company&rdquo;: a company that carries parts of other companies and needs to be better than them. It doesn&rsquo;t mean it always will be better, but that&rsquo;s the &ldquo;mission&rdquo; to be pursued without letup. A career in general is exactly that, and being a consultant is taking on that mission more explicitly.</p>
<p>In the end, my goal was always not to repeat what I described in my 2007 Vent: to build a financially healthy company, win clients and close contracts a freelancer couldn&rsquo;t, with security for both sides. To create a routine that doesn&rsquo;t require working more than 8 hours a day and 5 days a week. And to build teams as cells exclusive to each client, without the intermediation of an &ldquo;operational boss,&rdquo; giving each consultant the chance to learn all the non-technical functions I mentioned above.</p>
<p>2012 was a year of learning and experimentation, with far more problems than I could foresee. Fortunately, my years in consulting gave me the foundation to close out every one of them. Honestly, I can&rsquo;t picture myself in 2002, when I started in consulting, handling today&rsquo;s situations and making the same hard decisions.</p>
<p>If I had opened a consultancy in 2002, or any company, I would have closed it, unless I&rsquo;d had &ldquo;luck.&rdquo; And betting on games of chance isn&rsquo;t what makes a good consultant.</p>
<p>Happy New Year! See you in 2013.
</content></p>
]]></content:encoded><category>career</category><category>personal</category><category>business</category><category>off-topic</category></item><item><title>[Off-Topic] Wake up Call</title><link>https://akitaonrails.github.io/en/2010/02/14/off-topic-wake-up-call/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2010/02/14/off-topic-wake-up-call/</guid><pubDate>Sun, 14 Feb 2010 09:38:00 -0200</pubDate><description>&lt;p&gt;This week I watched the excellent film &lt;a href="http://www.imdb.com/title/tt1193138/"target="_blank" rel="noopener"&gt;Up in the Air&lt;/a&gt; (recommended). I identify a lot with the way Ryan Bingham thinks, but that&amp;rsquo;s not what this article is about. The film tells the story of a &amp;ldquo;career transition&amp;rdquo; professional, a euphemism for &amp;ldquo;the guy who fires people.&amp;rdquo; It doesn&amp;rsquo;t set out to preach a moral, but there&amp;rsquo;s a scene worth sharing:&lt;/p&gt;
&lt;video controls&gt;
&lt;source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-UpInTheAirDemisso383.mp4"&gt;
Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-UpInTheAirDemisso383.mp4)
&lt;/source&gt;&lt;/video&gt;
&lt;p&gt;Everyone knows I steer clear of self-help, but every now and then I figure a little of it doesn&amp;rsquo;t hurt ;-) One thing I always tell just about everyone who has worked with me in recent years: a job isn&amp;rsquo;t for life. You never know where you&amp;rsquo;ll be tomorrow, and you should never assume you&amp;rsquo;ll be in the same place.&lt;/p&gt;</description><content:encoded><![CDATA[<p>This week I watched the excellent film <a href="http://www.imdb.com/title/tt1193138/"target="_blank" rel="noopener">Up in the Air</a> (recommended). I identify a lot with the way Ryan Bingham thinks, but that&rsquo;s not what this article is about. The film tells the story of a &ldquo;career transition&rdquo; professional, a euphemism for &ldquo;the guy who fires people.&rdquo; It doesn&rsquo;t set out to preach a moral, but there&rsquo;s a scene worth sharing:</p>
<video controls>
<source src="https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-UpInTheAirDemisso383.mp4">
Your browser does not support the video tag. [Direct Link](https://s3.us-east-2.amazonaws.com/blip.tv/Akitaonrails-UpInTheAirDemisso383.mp4)
</source></video>
<p>Everyone knows I steer clear of self-help, but every now and then I figure a little of it doesn&rsquo;t hurt ;-) One thing I always tell just about everyone who has worked with me in recent years: a job isn&rsquo;t for life. You never know where you&rsquo;ll be tomorrow, and you should never assume you&rsquo;ll be in the same place.</p>
<p>While you&rsquo;re at a job, you should absolutely do everything you can to deliver your best work, even when that often means pulling all-nighters, putting in extra hours, and carrying heavy responsibilities. Up to the limit of what&rsquo;s tolerable and stops short of abuse.</p>
<p>And unless you&rsquo;re the company owner, a partner, or a sizable shareholder, that limit <strong>must</strong> be short. Whether you make R$40k or R$250k a year makes no difference. The result is always the same: the longer you stay in the same place, doing the same thing, the less you&rsquo;re worth. There&rsquo;s only one person you owe blind loyalty to: yourself.</p>
<p>The most important part: what&rsquo;s your goal? Why are you doing what you&rsquo;re doing? Does what you do today move you toward where you want to go? If it doesn&rsquo;t, why keep doing it? <em>&ldquo;But I don&rsquo;t have any particular goal&hellip;&rdquo;</em> Then find one.</p>
]]></content:encoded><category>career</category><category>film-and-pop-culture</category><category>off-topic</category></item><item><title>[Off-Topic] The Problem of Credentials</title><link>https://akitaonrails.github.io/en/2009/11/04/off-topic-o-problema-das-credenciais/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/11/04/off-topic-o-problema-das-credenciais/</guid><pubDate>Wed, 04 Nov 2009 19:21:00 -0200</pubDate><description>&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/logical-fallacy1_original.jpg?1257376626" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Everyone already knows I&amp;rsquo;m a strong proponent &lt;a href="https://akitaonrails.github.io/en/2008/04/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema"&gt;against certifications&lt;/a&gt;, specifically in IT. The intention behind them is good, but the practical effect ends up more harmful than the benefits. As they say, &lt;em&gt;&amp;ldquo;the road to hell is paved with good intentions.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d go further and put an umbrella term over it: I&amp;rsquo;m against &lt;em&gt;&amp;ldquo;Credentials&amp;rdquo;&lt;/em&gt; in general, especially when used out of context. And I like to argue about argumentation itself. I&amp;rsquo;ve been mentioning fallacies whenever I can for a long time. I&amp;rsquo;m far from a complete grasp of the subject, but I keep trying to expand that understanding, and I think everyone should.&lt;/p&gt;</description><content:encoded><![CDATA[<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/logical-fallacy1_original.jpg?1257376626" alt=""  loading="lazy" /></p>
<p>Everyone already knows I&rsquo;m a strong proponent <a href="/en/2008/04/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema">against certifications</a>, specifically in IT. The intention behind them is good, but the practical effect ends up more harmful than the benefits. As they say, <em>&ldquo;the road to hell is paved with good intentions.&rdquo;</em></p>
<p>I&rsquo;d go further and put an umbrella term over it: I&rsquo;m against <em>&ldquo;Credentials&rdquo;</em> in general, especially when used out of context. And I like to argue about argumentation itself. I&rsquo;ve been mentioning fallacies whenever I can for a long time. I&rsquo;m far from a complete grasp of the subject, but I keep trying to expand that understanding, and I think everyone should.</p>
<p>A simple example. I love the work of a Martin Fowler, or a Robert Martin. I find their insights very valuable and their recommendations excellent, people who genuinely work hard to be above average. The problem is they&rsquo;re also human beings and, as such, they have flaws. That&rsquo;s an indisputable fact we need to accept in every argument. Just because an Uncle Bob said something, that doesn&rsquo;t automatically make it true.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/circular-reasoning1_original.jpg?1257376638" alt=""  loading="lazy" /></p>
<p>It should be obvious, but plenty of people get &ldquo;dazzled&rdquo; by celebrities. They literally turn into &ldquo;cheerleaders.&rdquo; Because the guy worked at some renowned company, or wrote a book, or simply because he&rsquo;s a foreigner, anything he says takes on the weight of truth. And that&rsquo;s a huge danger.</p>
<p>Everything the big names say has to go through the same scrutiny as what someone with no renown says. No exceptions. I repeat a lot of what a Fowler says because it holds up in practice: you can test it, discuss it, and above all refine and evolve it. His name is not what gives the argument its weight.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/cheerleader_original.jpg?1257377862" alt=""  loading="lazy" /></p>
<p>This is the <a href="https://en.wikipedia.org/wiki/Appeal_to_authority"target="_blank" rel="noopener">appeal to authority</a> fallacy: because A said B, and because A is considered an authority, therefore B is true. Pay attention, because we use this every single day. This one and a dozen other fallacies (see the list below) show up daily, and we fall for them all the time.</p>
<p>The opposite holds too. Just because Philippe Kruchten helped create RUP doesn&rsquo;t mean he&rsquo;s bad (kidding, the guy is very good). This is another thing that bugs me a lot: attacking a technology or a practice by attacking whoever created it. Something like <em>&ldquo;Rails is bad because David is arrogant.&rdquo;</em> That&rsquo;s the fallacy known as the <a href="https://en.wikipedia.org/wiki/Straw_man"target="_blank" rel="noopener">Straw Man</a>, which in more general form means bringing up an irrelevant subject to pull attention away from the main point.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/strawman-240x300_original.jpg?1257376657" alt=""  loading="lazy" /></p>
<p>Both cases are bad. It also feeds the tendency to ignore whoever has no renown. Your most experienced employee, the one who actually understands the problem, sometimes gets ignored because someone with more renown, but completely out of context, dropped a few &ldquo;truths.&rdquo; Now that &ldquo;truth&rdquo; is law. No further questions.</p>
<p>And the reverse exists too: believing your most senior employee just because he&rsquo;s the most senior. Neither of those is a good justification. The person is secondary. What counts is the argument, as long as it follows the scientific method.</p>
<p>The fact is most of us are lazy about thinking. Plain, simple laziness. On top of that, we were raised with authority figures who would always be more right than we are, something I&rsquo;d chalk up to low self-esteem. So when someone in a position of authority shows up, the tendency is to accept what comes from them, especially if we&rsquo;re already comfortable with that understanding. It&rsquo;s the old problem of leaving the comfort zone.</p>
<p>Most people weren&rsquo;t trained for change, they were trained for stability. That&rsquo;s why anything different gets side-eyed. Most people only hear what they want to hear and only see what they want to see. Nobody from outside can easily change that in another person, which is pretty sad.</p>
<p><a href="http://www.fallacyfiles.org/taxonomy.html"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/TaxonomyC_original.png?1257376665" alt=""  loading="lazy" /></a></p>
<p>A few Wikipedia articles on argumentation:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Argument"target="_blank" rel="noopener">Argument</a></li>
<li><a href="https://en.wikipedia.org/wiki/Argumentation_theory"target="_blank" rel="noopener">Argumentation Theory</a></li>
<li><a href="https://en.wikipedia.org/wiki/Burden_of_proof"target="_blank" rel="noopener">Burden of Proof</a></li>
<li><a href="https://en.wikipedia.org/wiki/List_of_fallacies"target="_blank" rel="noopener">List of Fallacies</a></li>
</ul>
<p>A person who doesn&rsquo;t like to argue, by definition, cannot be a decision-maker. Many use other people&rsquo;s credibility inappropriately (<em>&ldquo;because so-and-so said, out of context, but said&hellip;&rdquo;</em>). Worse still is when a decision is made by shouting, by force of the job title. That&rsquo;s the attitude of someone with a clear inability to argue and, therefore, to understand the subject.</p>
<p>Of course, on many occasions we&rsquo;re forced to decide &ldquo;by instinct.&rdquo; If we spent the whole day arguing every tiny decision, we&rsquo;d get nothing done. Imagine debating whether to wear the red shirt or the yellow one, and why. I&rsquo;m not talking about micro-argumentation, which, like micromanagement, doesn&rsquo;t work.</p>
<p>But decisions that involve people and diverging points of view deserve more care. If, even after arguing, you still can&rsquo;t draw a logical conclusion from any of the premises, in the end it&rsquo;s instinct that guides the solution. Argumentation sits in the humanities: it uses scientific principles to build better arguments, without the precision of an exact science.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/humor-penguin-logic_original.jpg?1257376650" alt=""  loading="lazy" /></p>
<p>Still on fallacies, plenty of people believe in the &ldquo;dictatorship of the majority,&rdquo; in <em>&ldquo;if the majority said it&rsquo;s true, then it must be.&rdquo;</em> One form of this fallacy is the <a href="https://en.wikipedia.org/wiki/Argumentum_ad_populum"target="_blank" rel="noopener">argumentum ad populum</a>, that sneaky way of opening a sentence with <em>&ldquo;Everyone knows that&hellip;&rdquo;</em> I always say I admire the Founding Fathers of America for having insights advanced for their time that people to this day don&rsquo;t quite understand. Quoting Thomas Jefferson:</p>
<blockquote>
  <p>All, too, will bear in mind this sacred principle, that though the will of the majority is in all cases to prevail, that will, to be rightful, must be reasonable; that the minority possess their equal rights, which equal laws must protect, and to violate would be oppression.</p>

</blockquote>
<p>So it isn&rsquo;t that &ldquo;the majority wins in all cases,&rdquo; but that &ldquo;the majority wins in the cases that don&rsquo;t violate the rights of the minority.&rdquo; The difference is subtle. Picture the majority deciding your property should be taken, and concluding that, being the majority, it&rsquo;s in the right. Every individual has a right to their own property, and government exists to protect it. The majority&rsquo;s will to take someone&rsquo;s property is voided because a fundamental right is being violated. That, by definition, is called oppression. Democracy is something else.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/sci_original.gif?1257376644" alt=""  loading="lazy" /></p>
<p>Thinking is hard. It takes study, takes culture, takes practice. Thinking hard isn&rsquo;t something most &ldquo;busy&rdquo; people feel like doing. Most prefer ready-made, canned answers, or picking something fast &ldquo;by instinct.&rdquo;</p>
<p>There&rsquo;s also <em>&ldquo;I chose right before, so I&rsquo;ll always choose right&rdquo;</em> or <em>&ldquo;it worked somewhere before, so it works here too.&rdquo;</em> That&rsquo;s the good old <a href="https://en.wikipedia.org/wiki/Post_hoc_ergo_propter_hoc"target="_blank" rel="noopener">Post hoc ergo propter hoc</a> fallacy.</p>
<p>&ldquo;Post hoc ergo propter hoc&rdquo; is exactly why self-help books, magical methodologies, &ldquo;advanced&rdquo; recipes, and every kind of canned procedure sell so well. They take the work of thinking off people&rsquo;s hands and hand them ready-made answers, &ldquo;that already worked in dozens of places,&rdquo; or something along those lines.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/I_detect_fail-1_original.jpg?1257376676" alt=""  loading="lazy" /></p>
<p>Some of these recipes, after prudent research and experimentation, really are good. Most, though, remind me of an allegory about medicine. Imagine if every doctor acted this way. You walk into the office and say:</p>
<ul>
<li>Doctor, I&rsquo;m in a lot of pain.</li>
<li>My son, take this medicine every day and the pain goes away. You can leave.</li>
<li>But doctor, aren&rsquo;t you even going to examine me, diagnose me?</li>
<li>What for? I already gave this medicine to the last 3 patients and they all got better. Why would it be different with you?</li>
</ul>
<p>Funny? It shouldn&rsquo;t be. Look back at the decisions you make, or that the people around you make, and you&rsquo;ll notice they look <strong>a lot</strong> like that allegory. And like most of the fallacious arguments I mentioned in this article. I catch myself falling for that kind of trick many times. Even the most vigilant person falls. Argumentation is an art. So is understanding.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/11/4/Logical-Fallacies_original.jpg?1257376609" alt=""  loading="lazy" /></p>
<p>So the only thing to do is what I say all the time: <strong>Be Skeptical. Always question the Status Quo.</strong></p>
]]></content:encoded><category>philosophy</category><category>career</category><category>off-topic</category></item><item><title>[Off-Topic] The Damn Regulation Law Is Back!</title><link>https://akitaonrails.github.io/en/2009/08/22/off-topic-maldita-lei-de-regulamenta-o-est-de-volta/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/08/22/off-topic-maldita-lei-de-regulamenta-o-est-de-volta/</guid><pubDate>Sat, 22 Aug 2009 17:01:00 -0300</pubDate><description>&lt;p&gt;&lt;strong&gt;Update 09/08/2009:&lt;/strong&gt; A brief mention in a &lt;a href="http://web.archive.org/web/20090919011125/http://br.noticias.yahoo.com:80/s/02092009/25/tecnologia-projeto-quer-exigir-diploma-profissao.html"target="_blank" rel="noopener"&gt;Yahoo! News&lt;/a&gt; story on this subject.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 08/26/2009:&lt;/strong&gt; Excellent historical analysis of a good legislative proposal that had already been rejected once, via &lt;a href="http://web.archive.org/web/20090828015946/http://www.gizmodo.com.br:80/conteudo/made-brazil-regulamentacao-de-analistas-de-sistemas-ja-foi-discutida-pelo-congresso-e-o-qu-0"target="_blank" rel="noopener"&gt;Gizmodo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: 08/25/2009:&lt;/strong&gt; I just added a long argumentative text about the Law in this article.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s in the &lt;a href="http://web.archive.org/web/20090826104306/http://www.tiinside.com.br:80/News.aspx?ID=143390&amp;amp;C=265"target="_blank" rel="noopener"&gt;news&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The proposal that regulates the practice of the systems analyst profession was approved this Wednesday, the 19th, by the Senate&amp;rsquo;s Committee on Constitution, Justice and Citizenship (CCJ). The bill (&lt;a href="http://www.senado.gov.br/sf/atividade/Materia/Detalhes.asp?p_cod_mate=82918"target="_blank" rel="noopener"&gt;PLS 607/07&lt;/a&gt;), authored by Senator &lt;a href="http://www1.folha.uol.com.br/folha/brasil/ult96u582101.shtml"title="PR-RO"target="_blank" rel="noopener"&gt;Expedito Júnior&lt;/a&gt;, now goes to the Committee on Social Affairs (CAS) for a terminal decision.&lt;/p&gt;</description><content:encoded><![CDATA[<p><strong>Update 09/08/2009:</strong> A brief mention in a <a href="http://web.archive.org/web/20090919011125/http://br.noticias.yahoo.com:80/s/02092009/25/tecnologia-projeto-quer-exigir-diploma-profissao.html"target="_blank" rel="noopener">Yahoo! News</a> story on this subject.</p>
<p><strong>Update 08/26/2009:</strong> Excellent historical analysis of a good legislative proposal that had already been rejected once, via <a href="http://web.archive.org/web/20090828015946/http://www.gizmodo.com.br:80/conteudo/made-brazil-regulamentacao-de-analistas-de-sistemas-ja-foi-discutida-pelo-congresso-e-o-qu-0"target="_blank" rel="noopener">Gizmodo</a></p>
<p><strong>Update: 08/25/2009:</strong> I just added a long argumentative text about the Law in this article.</p>
<p>It&rsquo;s in the <a href="http://web.archive.org/web/20090826104306/http://www.tiinside.com.br:80/News.aspx?ID=143390&amp;C=265"target="_blank" rel="noopener">news</a>:</p>
<blockquote>
  <p>The proposal that regulates the practice of the systems analyst profession was approved this Wednesday, the 19th, by the Senate&rsquo;s Committee on Constitution, Justice and Citizenship (CCJ). The bill (<a href="http://www.senado.gov.br/sf/atividade/Materia/Detalhes.asp?p_cod_mate=82918"target="_blank" rel="noopener">PLS 607/07</a>), authored by Senator <a href="http://www1.folha.uol.com.br/folha/brasil/ult96u582101.shtml"title="PR-RO"target="_blank" rel="noopener">Expedito Júnior</a>, now goes to the Committee on Social Affairs (CAS) for a terminal decision.</p>
<p>Under the substitute bill previously approved by the Committee on Science, Technology, Innovation, Communication and Information Technology (CCT) and adopted by the CCJ rapporteur, Senator <a href="http://g1.globo.com/Noticias/Politica/0,,MUL67360-5601,00.html"title="PSDB-GO"target="_blank" rel="noopener">Marconi Perillo</a>, only professionals with a university degree in systems analysis, computer science or data processing will be allowed to practice the systems analyst profession.</p>

</blockquote>
<p>I recommend everyone reread <a href="/en/2008/04/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema">my article from last year</a> on this topic. This law is a complete farce, created by this <a href="http://www1.folha.uol.com.br/folha/brasil/ult96u582101.shtml"title="PR-RO"target="_blank" rel="noopener">Expedito Júnior</a> and embraced by this <a href="http://g1.globo.com/Noticias/Politica/0,,MUL67360-5601,00.html"title="PSDB-GO"target="_blank" rel="noopener">Marconi Perillo</a>.</p>
<h2>The Text of the Proposed Law<span class="hx:absolute hx:-mt-20" id="the-text-of-the-proposed-law"></span>
    <a href="#the-text-of-the-proposed-law" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I decided to go through the text more carefully. The original proposal was the failed Bill No. 1,947 of 2003 by Eduardo Paes, thankfully shelved. Not satisfied, Expedito Júnior introduced the <strong>disastrous</strong> Bill No. 607 of 2007. I recommend reading the original version first, available as a PDF <a href="http://www.senado.gov.br/sf/atividade/Materia/getTexto.asp?t=11569&amp;c=RTF"target="_blank" rel="noopener">at this link</a>.</p>
<p>The first review was by the Committee on Science, Technology, Innovation, Communication and Information Technology, published on <strong>03/05/2008</strong>. It isn&rsquo;t entirely bad, but it has several flawed points of interpretation, and I&rsquo;d rather not decide whether that comes down to bad faith or laziness. The report opens by citing the SBC, the Brazilian Computing Society:</p>
<blockquote>
  <p>According to information disclosed by the SBC itself, what matters in regulating the profession is the observance of certain principles such as the free exercise of activities related to the information technology field. Thus, no professional council should create any obstacle or restriction to the above principle, and the field should be self-regulated.</p>

</blockquote>
<p>That&rsquo;s correct, and I think everyone in the field agrees with it. But the very next paragraph gets the interpretation wrong, obviously written by someone from outside the field:</p>
<blockquote>
  <p>In this case, that is not the issue, because art. 2 establishes that professionals &ldquo;may&rdquo; practice the profession of Systems Analyst, Computer Science or Data Processing, which greatly expands the possibilities for professional classification, covering practically all university courses in the information technology field.</p>

</blockquote>
<p>To be clear, art. 2 states the following:</p>
<blockquote>
  <p>Art. 2. The following may practice the profession of Systems Analyst in the country:</p>
<p>I – holders of a university degree in Systems Analysis, Computer Science or Data Processing, issued by official or accredited schools;</p>
<p>II – graduates of foreign schools recognized by the laws of their country who have had their diplomas revalidated in accordance with current legislation;</p>
<p>III – those who, at the time this Law takes effect, can demonstrate that they have practiced the role of Systems Analyst for a minimum of five years</p>

</blockquote>
<p>In other words, the interpretation leaves out self-taught individuals and students who chose not to get a formal degree for various reasons (see my article <a href="/en/2009/04/17/off-topic-devo-fazer-faculdade">Should I Get a Degree?</a>). The article excludes a good chunk of the most qualified professionals.</p>
<p>Even item III doesn&rsquo;t spell out what &ldquo;demonstrated five or more years of practice&rdquo; means. Does an employment record count? Does an invoice for IT services billed to a client count? What are the criteria?</p>
<p>The analysis continues with the assertion:</p>
<blockquote>
  <p>Art. 4 of the bill, in establishing what the activities and attributions are, does not restrict the activities of other professionals. Nor is any exclusivity established or is it stated that any particular activity or attribution will be reserved for holders of degrees in the aforementioned professions.</p>

</blockquote>
<p>Article 4 defines activities such as definition, management and coordination of software projects, explicitly including &ldquo;coding.&rdquo; That is, everything project managers, architects, programmers and the like do. And the same article gives us:</p>
<blockquote>
  <p>Sole paragraph. Technical responsibility for projects and systems for data processing, information technology and automation, as well as the issuance of technical opinions, reports or assessments, are <strong>exclusive</strong> to the Systems Analyst.</p>

</blockquote>
<p>I may be misreading it, but that paragraph looks clearly exclusive to me and, once again, leaves out self-taught programmers. The analysis then falls back on some <a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"target="_blank" rel="noopener">FUD</a>:</p>
<blockquote>
  <p>One cannot imagine that the data processing center of a public body, financial system institutions, or even private companies could do without the technical accountability of a professional character, given the interface and synergy created with citizens, clients and consumers.</p>

</blockquote>
<p>This is the wrong justification behind most arguments in favor of the law: that a formally trained professional is always far superior to a more experienced self-taught one. It&rsquo;s the entire basis of my argument in <a href="/en/2008/04/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema">my article from last year</a>. I recommend reading it carefully.</p>
<p>To be fair to the analysis, it did at least suggest cutting the most serious parts:</p>
<ul>
<li>suppression of articles 7 through 33, which create the Federal Council and Regional Councils of Informatics;</li>
<li>exclusion, in item III of art. 2, of the clause &ldquo;… and who must register with the Regional Councils of Informatics&rdquo;;</li>
<li>exclusion, in item II of art. 3, of the clause &ldquo;… and who must register with the Regional Councils of Informatics&rdquo;;</li>
</ul>
<p>Which brings us to the latest mess: the approval in the Committee on Constitution, Justice and Citizenship, published on 08/19/2009. The proposal passed with all the modifications suggested by the Committee on Science and Technology listed above.</p>
<p>Fortunately, the suppression of articles 7 through 33 was maintained:</p>
<blockquote>
  <p>… there is <strong>unconstitutionality</strong> of a formal nature in the provisions dealing with the supervision and exercise of the profession, as well as the registration of professionals and the payment of fees … These articles are therefore tainted by unconstitutionality, since parliamentary initiative to create public bodies and assign them functions is prohibited, by virtue of the aforementioned provision of the Constitution …</p>

</blockquote>
<p>In plain terms, this <strong>removes</strong> the chapters that created the oversight bodies: the Federal Council of Informatics, the Regional Councils, professional registration and oversight, annual fees, emoluments and rates and, finally, infractions and penalties. Those would have been the most harmful parts if implemented. I really hope they stay out.</p>
<h2>The Seventh Element<span class="hx:absolute hx:-mt-20" id="the-seventh-element"></span>
    <a href="#the-seventh-element" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Since 08/20/2009 the substitute bill has been awaiting a rapporteur at the Committee on Social Affairs, where it can be approved or shelved. The way things are going, it looks like it&rsquo;ll pass without much trouble, which is <strong>terrible</strong>!</p>
<p>My arguments in the article <a href="http://www.akitaonrails.com/en/2008/04/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema"target="_blank" rel="noopener">Let&rsquo;s Stop the Regulation</a> from last year still hold. Even after giving up the articles that created the whole bureaucratic machine and the penalties, it&rsquo;s still a terrible law for the market. Worse: art. 7 of the current substitute bill makes me <strong>very</strong> uneasy:</p>
<blockquote>
  <p><strong>Art. 7.</strong> The Executive Branch will be responsible for supervising and overseeing the practice of the Systems Analyst profession, and for the registration of IT professionals.</p>

</blockquote>
<p>This single article replaces articles 7 through 33 without defining anything, leaving it open and arbitrary what the Executive will do about supervising and registering professionals. Deep down, everything that was removed is still implicitly valid.</p>
<p>This article didn&rsquo;t exist in the 2008 version from the Committee on Science and Technology. It was the only thing added in the version approved by the CCJ on 08/19/2009 and is, in my opinion, what made the text regress the most. The report reads:</p>
<blockquote>
  <p>On the other hand, to give viability to the objective of this initiative, we also wish to add an article aimed at delegating to the Executive Branch the function of deliberating on the matters dealt with in the articles suppressed herein. Thus, we accept the Substitute offered by the Committee on Science and Technology, with the addition of a provision.</p>

</blockquote>
<h2>Conclusion<span class="hx:absolute hx:-mt-20" id="conclusion"></span>
    <a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If the Committee on Social Affairs approves this law, it will be an enormous setback for the national IT market. It has the potential to be even more destructive than the market-reservation laws for IT from the 1980s, which left us almost a decade behind the First World in modernization.</p>
<p>As the SBC itself pointed out, this market should be free and self-regulated, which it already is in practice. There&rsquo;s no need whatsoever for regulation of this kind.</p>
<p>I&rsquo;ve said before that we can discuss a more realistic text. But this particular one is far too harmful to be considered. It would need to be rewritten from scratch by experienced professionals active in the field, together with the entire new generation of developers.</p>
<p>I know of no parallel to this law anywhere in the world (if anyone does, please comment here). It restricts the activity by starting from the <strong>wrong premise</strong> that formally trained professionals are always better than self-taught ones, which, from personal experience, is very false. Some of the best people I&rsquo;ve worked with over these past 15 years had no degree.</p>
<p>Most people in favor fall into two groups: those who have read the bill and its proceedings, and those who haven&rsquo;t. Those who haven&rsquo;t simply don&rsquo;t know what they&rsquo;re talking about.</p>
<p>Those who have read it and still agree are exactly the bad professionals who can&rsquo;t compete with self-taught people and want to lean only on the force of &ldquo;credentials&rdquo; as the criterion. This market self-regulates as bad professionals get naturally pushed into lower-value activities.</p>
<p>There&rsquo;s also a confusion between the careers of &ldquo;coder&rdquo; and &ldquo;developer.&rdquo; The coder is a commodity, close to a typist, who just translates diagrams and requirements into code with no attention to quality. The developer is a born architect, with total control over their own creation. One is a commodity; the other is the &ldquo;cream of the crop,&rdquo; rising in the market through pure meritocracy and natural selection via networking. With some exceptions, I&rsquo;d say it&rsquo;s a reasonable implementation of <a href="http://en.wikipedia.org/wiki/Laissez-faire"target="_blank" rel="noopener">laissez-faire</a>.</p>
<p>Our field doesn&rsquo;t even have a consolidated working methodology. We&rsquo;re still moving from the Taylorist-Fordist Classical Software Engineering based on Waterfall to the post-Toyotist Agile movement of Lean, Scrum, XP and others. Our tools today and the ones from ten years ago are quite different, and the internet completely changed the course of the profession.</p>
<p>These changes are too sudden to try to regulate. In a scenario like this, the free market is the best way to deal with the problem.</p>
<p>For all of this, I remain vehemently opposed to this proposal and hope there are sensible people on the Committee on Social Affairs, with the good sense to ask society and us, the affected category, before shelving this text once and for all.</p>
]]></content:encoded><category>law-and-regulation</category><category>career</category><category>tech-market</category><category>off-topic</category></item><item><title>[Translation] What Makes a Good Programmer?</title><link>https://akitaonrails.github.io/en/2009/07/23/tradu--o-o-que-faz-um-bom-programador/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/07/23/tradu--o-o-que-faz-um-bom-programador/</guid><pubDate>Thu, 23 Jul 2009 10:35:00 -0300</pubDate><description>&lt;p&gt;Many people have asked me how to become a good programmer. They&amp;rsquo;re usually more concerned with which language to learn, which course to take, which technical books to read. But, just like the authors of these two articles I&amp;rsquo;m going to translate, I&amp;rsquo;d say there are more important qualities to consider.&lt;/p&gt;
&lt;p&gt;The first article is &lt;a href="http://web.archive.org/web/20090723103949/http://www.techfounder.net/2009/07/22/what-makes-a-good-programmer/"target="_blank" rel="noopener"&gt;What makes a good programmer?&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;An Analytical Thinker&lt;span class="hx:absolute hx:-mt-20" id="an-analytical-thinker"&gt;&lt;/span&gt;
&lt;a href="#an-analytical-thinker" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Programmers need to be problem solvers. The process of programming requires that we systematically break complicated problems down, plan and implement solutions and find / eliminate small inconsistencies in code (bugs).&lt;/p&gt;</description><content:encoded><![CDATA[<p>Many people have asked me how to become a good programmer. They&rsquo;re usually more concerned with which language to learn, which course to take, which technical books to read. But, just like the authors of these two articles I&rsquo;m going to translate, I&rsquo;d say there are more important qualities to consider.</p>
<p>The first article is <a href="http://web.archive.org/web/20090723103949/http://www.techfounder.net/2009/07/22/what-makes-a-good-programmer/"target="_blank" rel="noopener">What makes a good programmer?</a></p>
<h3>An Analytical Thinker<span class="hx:absolute hx:-mt-20" id="an-analytical-thinker"></span>
    <a href="#an-analytical-thinker" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Programmers need to be problem solvers. The process of programming requires that we systematically break complicated problems down, plan and implement solutions and find / eliminate small inconsistencies in code (bugs).</p>
<p>Analytical thinking also manifests in the ability to follow complicated logic through disparate code segments and understand it. It allows us to grasp abstract concepts such as Object Oriented methodology and design patterns and implement it in practice.</p>
<h3>Has Clear Priorities<span class="hx:absolute hx:-mt-20" id="has-clear-priorities"></span>
    <a href="#has-clear-priorities" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>If I would ask you to rate the following according to priority, how would you order them?</p>
<ul>
<li>Security</li>
<li>Maintainability</li>
<li>Usability</li>
<li>Performance</li>
<li>LOC (lines-of-code) count</li>
</ul>
<p>Take a moment to think about that, and then consider:</p>
<ol>
<li>If you picked <strong>LOC count</strong> first, you failed big time in my book. In fact, LOC optimization can often go directly against the other metrics (such as maintainability). A lower LOC count should never be a goal, only a result of careful application of well factored architecture.</li>
<li>If you picked <strong>performance</strong> first, you are probably the guy who keeps writing articles about how you should use a <em>while</em> loop instead of a <em>for</em> loop since it came out a few milliseconds faster in your benchmarks. You might be inflicted with a case of premature optimization.</li>
</ol>
<blockquote>
  <p>We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. – <a href="http://en.wikipedia.org/wiki/Optimization_%28computer_science%29#When_to_optimize"target="_blank" rel="noopener">Donald Knuth</a></p>

</blockquote>
<p>Performance should only be good enough to satisfy the requirements of the application. Aside from caveats to well-known pitfalls (such as executing queries in each iteration of a long loop), performance optimizations should be deferred to the very last and even then should be used appropriately (profile &hellip; profile &hellip; profile &hellip; optimize).</p>
<p>The only exception to this is if you are primarily developing performance dependent applications (such as low-level system drivers).</p>
<ol start="3">
<li><strong>Security</strong> is on somewhat of a middle ground. Depending on the application and distribution model it can be completely useless or mission critical. It&rsquo;s mostly somewhere in between, and thus can&rsquo;t be ranked as number one.</li>
<li><strong>Maintainability</strong> is definitely one of the most important attributes of a software application. High maintainability allows you to improve other attributes (such as performance), <em>when it is needed.</em></li>
</ol>
<p>Maintainability is the single most important factor for keeping productivity up and costs down. For a long time I strongly believed this to be <strong>the</strong> most important attribute of software design. However…
5. The most important attribute is <strong>usability</strong>. In the end, the worth of your application is only as much value as it delivers to the end-user.</p>
<p>We should always remember - software is not written to serve its developers or the systems they run on. They are written to solve problems. If those problems are not solved, then the project is a failure.</p>
<p>I wrote usability here as a more general term than just UI/UX effectiveness. Even a command line application or a background service has its usability factor in the sense of how well it answers a specific need.</p>
<h3>Gets Things Done<span class="hx:absolute hx:-mt-20" id="gets-things-done"></span>
    <a href="#gets-things-done" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><blockquote>
  <p>In principle, it&rsquo;s simple. You&rsquo;re looking for people who are</p>
<ol>
<li>Smart, and</li>
<li>Get things done.</li>
</ol>
<p><a href="http://web.archive.org/web/20090727035257/http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html"target="_blank" rel="noopener">Joel Spolsky</a></p>

</blockquote>
<p>Quite possibly the single most important trait in a developer. You can excel at all the previous attributes and still be a mediocre programmer if you just <strong>can&rsquo;t get things done.</strong> One average but productive developer could easily replace several highly talented but slowly moving developers, depending on his responsibilities.</p>
<p>At the end of the day you definitely want more highly-productive developers than those who are high on theory but not actual work.</p>
<h3>Does More Than &ldquo;Just Enough&rdquo;<span class="hx:absolute hx:-mt-20" id="does-more-than-just-enough"></span>
    <a href="#does-more-than-just-enough" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Getting things done is important. Getting things done &ldquo;the right way&rdquo; is even more important.</p>
<p>Constantly paying off your technical debt is crucial - if you keep accruing debt by &ldquo;hacking&rdquo; quick fixes that work now but are not maintainable, you only create the appearance of progress. In reality, the cost of getting rid of a large technical debt could become prohibitive before you know it.</p>
<p>Taking the time to constantly refactor code into a more maintainable state is the best way to prevent the spiral into project oblivion.</p>
<h3>Accountable<span class="hx:absolute hx:-mt-20" id="accountable"></span>
    <a href="#accountable" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A person could be a very capable programmer on technical ability alone, however if he does not own up to his mistakes and does not respect deadlines he could become a liability very quickly.</p>
<p>Responsibility also means to know where to let go of your ego for the good of the project. We developers often have large egos as we consider ourselves experts on many things. Putting the project first is a sign of a good developer.</p>
<h3>Good Human Relations<span class="hx:absolute hx:-mt-20" id="good-human-relations"></span>
    <a href="#good-human-relations" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Another all-around useful trait, this one applies to programmers as well. There is some stereotype that programmers are reclusive, unsociable creatures - programmers are still <em>people</em>.</p>
<p>In order to be a part of a team or handle clients, a programmer must have above basic social skills. Rudeness, arrogance, short-temper - do not have a place in a professional work environment. All it takes is one bad apple to ruin the mood for everybody.</p>
<h3>That&rsquo;s It<span class="hx:absolute hx:-mt-20" id="thats-it"></span>
    <a href="#thats-it" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>If you answer to all of the above, you are probably a pretty good programmer.</p>
<p>You might notice I didn&rsquo;t mention passion or technological diversity as qualifying traits. Simply put, I don&rsquo;t think they&rsquo;re very relevant to the quality of a programmer.</p>
<p>Passion is nice to have, however I&rsquo;ve known many very professional and high-quality developers who were just content to go about their work professionally from 9 to 5 and then go home and have a meaningful and fulfilling family life. A programmer can definitely be completely professional without being passionate about programming.</p>
<p>Technological diversity is another nice to have but not a prerequisite - as long as you are in command of the technologies you work with, a lack of diversity shouldn&rsquo;t affect you too much. Decision makers need to be well aware of all the options before starting a project, however nowadays the choice of technology simply is not that important.</p>
<p>You can achieve good results regardless of the programming language and database engine among other consideration. The biggest consideration should be the type of skills available to your personnel.</p>
<h2>[Translation] Why Good Programmers Are Lazy and Dumb<span class="hx:absolute hx:-mt-20" id="translation-why-good-programmers-are-lazy-and-dumb"></span>
    <a href="#translation-why-good-programmers-are-lazy-and-dumb" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><strong>Source:</strong> <a href="http://blogoscoped.com/archive/2005-08-24-n14.html"target="_blank" rel="noopener">blogoscoped</a></p>
<p>I realized that, paradoxically enough, good programmers need to be both <em>lazy</em> and <em>dumb</em>.</p>
<p><strong>Lazy</strong>, because only lazy programmers will want to write the kind of tools that might replace them in the end. Lazy, because only a lazy programmer will avoid writing monotonous, repetitive code – thus avoiding redundancy, the enemy of software maintenance and flexible refactoring. Mostly, the tools and processes that come out of this endeavor fired by laziness will speed up the production.</p>
<p>Of course, this is only half the truth; for a lazy programmer to be a good programmer, he (or she) also must be incredibly unlazy when it comes to learning how to stay lazy – that is, which software tools make his work easier, which approaches avoid redundancy, and how he can make his work be maintained and refactored easily.</p>
<p>Second (and I will elaborate a bit more on this because I find the concept to be less known than the first) a good programmer must be <strong>dumb</strong>. Why? Because if he&rsquo;s smart, and he knows he is smart, he will:</p>
<p>a) stop learning
b) stop being critical towards his own work</p>
<p>Point a) will make it hard for him to try to find new techniques to allow him to work faster. Point b) will give him a hard time debugging his own work, and refactoring it. In the endless battle between a programmer and the compiler, it&rsquo;s best for the programmer to give up early and admit that it&rsquo;s always him and never the compiler who&rsquo;s at fault (unless it&rsquo;s about character encoding issues, which is the part even the compiler gets wrong).</p>
<p>But there&rsquo;s a more crucial point why a good programmer must be dumb. That&rsquo;s because for him to find the best solutions to problems, he must keep a fresh mindset and manage to think out of the box (or rather, know its <em>actual</em> shape). In a way, this leads to the mindset of a child; incredibly creative because he never heard &ldquo;no&rdquo; for an answer.</p>
<p>The direct opposite approach would not be very constructive; to be knowledgeable about the parameters at hand, and accept them. Because who knows how many limits you think are there for real? The less you know, the more radical will your approaches be; the better the tools you develop, and the better the product you develop <em>with</em> them.</p>
<p>I know from my work that a good programmer, when confronted with a problem from management, will adopt this mindset of being <em>dumb</em>; he will start asking the most simple, child-like questions. Because he doesn&rsquo;t accept the parameters suggested to him that someone <em>thinks</em> make up the problem. Here&rsquo;s a typical conversation from the lost land of web development:</p>
<ul>
<li>&ldquo;Since yesterday, our client can&rsquo;t see the logo on the web site.&rdquo;</li>
<li>&ldquo;Did he restart his browser?&rdquo;</li>
<li>&ldquo;Yes.&rdquo;</li>
<li>&ldquo;Did he restart his computer?&rdquo;</li>
<li>&ldquo;Yes.&rdquo;</li>
<li>&ldquo;Did he empty his cache?&rdquo;</li>
<li>&ldquo;Yes.&rdquo;</li>
<li>&ldquo;Does he run Internet Explorer 6?&rdquo;</li>
<li>&ldquo;Yes.&rdquo;</li>
<li>&ldquo;Is he sure he can&rsquo;t see it?&rdquo;</li>
<li>&ldquo;Yes.&rdquo;</li>
<li>&ldquo;Did he look at the web site on the screen?&rdquo;</li>
<li>&ldquo;What?&rdquo;</li>
<li>&ldquo;Well, he might have printed it out.&rdquo;</li>
<li>&ldquo;No, he was looking on it on the screen.&rdquo;</li>
<li>&ldquo;Did he also not see other images besides the logo?&rdquo;</li>
<li>&ldquo;What? Well, I will ask him.&rdquo;</li>
</ul>
<p>For the sake of argument (and this was entirely hypothetical) let&rsquo;s say the client indeed turned off images in his browser. Or his son did. Whatever the case, this answer could not have been found if you would work in &ldquo;smart&rdquo; mode<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. None of the questions asked by the programmer required any programming skills. No; simply because the problem is so stupid, only stupidity can tackle it.</p>
<blockquote>
  <p><sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> Some years ago, I had a long telephone discussion about the whole web site being messed up since my last update&hellip; it turned out the guy disabled stylesheets in his browser. Back then, I would have suspected everything but such a simple solution and was listening to half an hour of complaints about quality standards etc. In the end, the assumption that my update was at fault was just that&hellip; an assumption. You better listen to facts only if you start debugging, and never to what people think might be the reason.</p>

</blockquote>
<p>In similar fashion, when one of my co-programmers asks me: &ldquo;Why isn&rsquo;t this working?&rdquo; most of the time it&rsquo;s because they&rsquo;re working on the wrong file (e.g., they linked to library 1 but they&rsquo;ve altered library 2, and their revision isn&rsquo;t showing, or they simply didn&rsquo;t link the library at all). When you ask a colleague for help, particularly in programming, you want him to know less about your project&hellip; so he will ask the stupid questions you sub-consciously avoided asking yourself because you thought you knew the answer, when in fact you didn&rsquo;t.</p>
<p>There&rsquo;s another side to it. The too-stupid person will just run off and, without a second thought, do something wrong. The too-smart person will sit down and plan something right, without taking any action. A pragmatic programmer is sort of in-between; he knows making the wrong decision 1 out of 10 times doesn&rsquo;t hurt the goal as bad as making only right decisions 5 out of 10 times, and making no decision at all the other 5 times.</p>
<p>It&rsquo;s like the story of the centipede. The centipede was very good at walking with its hundred legs. It never spent a thought on just how it could walk. Until one day, when a big black bug asked the centipede &ldquo;How can you manage to walk with all those feet? Don&rsquo;t you find it hard to coordinate their rhythm?&rdquo; The black bug already left, when the centipede was still sitting down, pondering how it could walk, wondering, and (for the first time in his life) even worrying a little bit. From that day on, the centipede couldn&rsquo;t walk anymore.</p>
<p>So you better not think too much if you want to achieve something. And of course this is only half the truth, too&hellip;</p>
]]></content:encoded><category>software-engineering</category><category>career</category><category>learning</category><category>off-topic</category></item><item><title>Off-Topic: Should I Go to College?</title><link>https://akitaonrails.github.io/en/2009/04/17/off-topic-devo-fazer-faculdade/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/04/17/off-topic-devo-fazer-faculdade/</guid><pubDate>Fri, 17 Apr 2009 20:41:00 -0300</pubDate><description>&lt;p&gt;I don&amp;rsquo;t know if it was a coincidence, but today I got an email asking for my opinion on this topic at the same time that &lt;a href="http://web.archive.org/web/20100930182801/http://www.michelazzo.com.br/textos/steve-jobs-e-burro-sera"target="_blank" rel="noopener"&gt;Paulino Michelazzo&lt;/a&gt; blogged about something similar.&lt;/p&gt;
&lt;p&gt;The short answer? When in doubt, go. Okay, let&amp;rsquo;s get to the longer answer.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/usp.jpg_original.jpeg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;Today&amp;rsquo;s Colleges&lt;span class="hx:absolute hx:-mt-20" id="todays-colleges"&gt;&lt;/span&gt;
&lt;a href="#todays-colleges" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Like Paulino, most people have the sense that college &lt;em&gt;&amp;ldquo;doesn&amp;rsquo;t prepare students for the job market.&amp;rdquo;&lt;/em&gt; Others say exactly the opposite: that the problem is colleges focusing only on the job market and neglecting the academic side.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I don&rsquo;t know if it was a coincidence, but today I got an email asking for my opinion on this topic at the same time that <a href="http://web.archive.org/web/20100930182801/http://www.michelazzo.com.br/textos/steve-jobs-e-burro-sera"target="_blank" rel="noopener">Paulino Michelazzo</a> blogged about something similar.</p>
<p>The short answer? When in doubt, go. Okay, let&rsquo;s get to the longer answer.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/usp.jpg_original.jpeg" alt=""  loading="lazy" /></p>
<h2>Today&rsquo;s Colleges<span class="hx:absolute hx:-mt-20" id="todays-colleges"></span>
    <a href="#todays-colleges" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Like Paulino, most people have the sense that college <em>&ldquo;doesn&rsquo;t prepare students for the job market.&rdquo;</em> Others say exactly the opposite: that the problem is colleges focusing only on the job market and neglecting the academic side.</p>
<p>For me there are two types of college. The first are the traditional, serious ones, like the federal universities and a few state ones: USP, Unicamp, UFRJ, ITA. These are seen as the ones that <em>&ldquo;don&rsquo;t prepare students for the real job market.&rdquo;</em></p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/0471785989.jpg_original.jpeg" alt=""  loading="lazy" />The second type are the commercial ones, with their fast-food two-year degrees or less, instant diplomas, do-two-courses-in-one deals. I won&rsquo;t name names because they&rsquo;re obvious. These are seen as the ones that <em>&ldquo;focus, barely, on the job market.&rdquo;</em></p>
<p>A college&rsquo;s goal should be much bigger than preparing someone for &ldquo;the job market.&rdquo; It&rsquo;s the final stage of the formal educational process that starts in grade school and prepares a person &ldquo;for life.&rdquo; Preparing them to grow on their own, to value self-knowledge, respect for others, civic duty. Building a taste for discovery, for rational and independent thought, for systematic trial and error in the name of continuous improvement. Over more than ten formal years, the system should teach students to think and act on their own, aware of their own actions, with the scientific method above all.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/9788126501205.jpg_original.jpeg" alt=""  loading="lazy" />Instead, students leave the educational system with a different proposition: I&rsquo;ll do whatever I&rsquo;m told to do, everything I&rsquo;m told is true and needs no verification, and everything I&rsquo;ve learned so far is enough to consider myself a good professional. In short, the student leaves college with their values completely corrupted. Half the blame goes to the system, the other half I place on the student, because I went through the same system myself.</p>
<p>The colleges considered top-tier, like USP, still have a more academic scope, and therefore a more experimental, more challenging, and more interesting one. If the student is willing, that can genuinely open doors. Students at these schools have more time, usually more purchasing power, and, with the right mindset, access to professors and material with far more depth. I&rsquo;m generalizing: not all professors are good, not all students are engaged. But that&rsquo;s not the norm there.</p>
<p>Commercial colleges have a single objective: being diploma factories. They present, in an absolutely superficial and disposable way, all the technical terms and basic procedures that entry-level jobs tend to ask for. They&rsquo;re pieces of a cruel puzzle whose only goal is to trivialize education and the craft. Again, I&rsquo;m generalizing: good professors and well-meaning people exist. They&rsquo;re just not the norm.</p>
<p>The traditional educational system as a whole is built on <strong>dogmatization</strong> far more than on actual <strong>learning</strong>. Through the end of high school, every student is a memorization machine. Commercial colleges keep the same rhythm: memorize, take the tests, get a diploma. Simple, easy, no effort (I repeat: no effort).</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/862_man_learning_computer_programming_and_reading_a_dummies_book_while_sitting_at_a_computer.jpg_original.png" alt=""  loading="lazy" /></p>
<h2>My Experience<span class="hx:absolute hx:-mt-20" id="my-experience"></span>
    <a href="#my-experience" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I&rsquo;ve told this story before. About six years ago I decided to try a certain renowned commercial college, just for kicks. I scheduled the entrance exam for a Saturday, spent the previous Friday night hopping through three or four clubs with no sleep at all, and took the test literally still in post-club mode. I finished in half an hour, because it was absolutely trivial, and obviously passed. Let&rsquo;s just say this college&rsquo;s name is recognized by every company in the market.</p>
<p>It was so frustrating that I decided I wasn&rsquo;t going to waste my time somewhere that easy to get into. I didn&rsquo;t even bother to enroll.</p>
<p>Fifteen years ago I took the entrance exams for Fuvest, Unicamp, and Fatec, only those three, and passed all three. It was much harder: a full year at the same frantic pace of study, at least ten hours every day, weekends and holidays included. Thousands of exercises and practice tests, and even then I didn&rsquo;t reach the top of the list.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/unix_plate.jpg_original.jpeg" alt=""  loading="lazy" /></p>
<p>Spending some time at USP was a great experience, even though I dropped out three years in. My reasons are personal and apply only to me, which is why I say I don&rsquo;t recommend anyone copy me. I left because I was certain I could learn the rest of the curriculum on my own, and faster. But don&rsquo;t get me wrong: I never thought what I was learning was unimportant. I had already been a programmer for at least five years. The first years at USP massively accelerated what I already knew and helped me take much bigger steps.</p>
<p>Even though I was at IME (Institute of Mathematics and Statistics), my best friends back then were electrical engineering students at Politécnica. That&rsquo;s the crowd that taught me Unix: guys who played with assembler over lunch, did computer graphics in their spare time, and still had time to design microprocessors before dinner. I watched Java, Delphi, HTML, and JavaScript being born alongside those people. And I had broadband internet access fifteen years ago, thanks to the university.</p>
<p>That crowd left a strong impression on me: students only a year or two older than me who seemed to have ten more years of experience.</p>
<h2>Talent and Effort<span class="hx:absolute hx:-mt-20" id="talent-and-effort"></span>
    <a href="#talent-and-effort" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>For me, college was extremely valuable and a hugely important step toward who I am today. I didn&rsquo;t finish by choice. Now comes the hard part: software development is not a repeatable manual craft. Like advertising, music, literature, medicine, architecture, and every great profession, it demands <strong>innate talent</strong>. Nobody learns to be a great musician: you&rsquo;re born with the talent and learn to refine it. You don&rsquo;t learn to be Da Vinci, or Mozart, or Niemeyer, or Villa Lobos. Either you&rsquo;re born Da Vinci or you aren&rsquo;t. Sure, you can always learn the techniques, but you won&rsquo;t get very far.</p>
<p>College won&rsquo;t make you a talented person; at best it helps <strong>shape</strong> your talent. Many people discover in college that they&rsquo;re on the wrong path, and many only find out much later. Unfortunately that&rsquo;s common. Some people are aware they still don&rsquo;t know what they want. Worse: many don&rsquo;t even know that they don&rsquo;t know yet.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/linus.jpg_original.jpeg" alt=""  loading="lazy" /></p>
<p>Something else that matters: a talented person is never satisfied with what the system hands them, with what college or some course teaches. They always want more, much more. People like a Linus Torvalds, who creates a kernel from scratch. Like a Miguel de Icaza, who creates platforms from scratch. Like a Joe Armstrong, who challenges the status quo and creates a language like Erlang; like a Damien Katz, who creates different ways of handling old problems like databases, creating CouchDBs. People like Don Chamberlin and Raymond Boyce, who created the original SQL. People like Alonzo Church, who went deeper into mathematical disciplines like lambda calculus and opened up new forms of programming. People like John von Neumann, who literally laid the first brick in the foundation of computing.</p>
<p>Education is much more than learning a micro-trade, a series of mechanized tasks that can be repeated. There&rsquo;s a place for that kind of work, sure. But if you&rsquo;re reading this article, we&rsquo;re definitely not talking about painting walls or stacking bricks.</p>
<p>Many of the best programmers were already programmers before college. It&rsquo;s not a requirement, but it&rsquo;s common, especially nowadays, for the urge to program to show up well before entrance exams. That makes things easier, because there are fewer doubts. In that case, invest as much as you can in the talent you believe you have and get into a college capable of shaping what you know.</p>
<p>The biggest mistake I see is great potential entering bad colleges just to grab a diploma. They believe they&rsquo;re already good (they aren&rsquo;t yet, they only have potential) and that therefore they don&rsquo;t need college. That&rsquo;s two mistakes. The first: a bad college makes you waste time chasing a diploma with no value at all. I personally don&rsquo;t hire anyone based on a diploma, and neither does anyone truly serious who values knowledge.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/job2_original.jpeg" alt=""  loading="lazy" /></p>
<p>The second mistake is reducing <strong>software development</strong> (including web development) to a mere set of specific pieces of knowledge. Thinking that knowing JavaScript, HTML, Linux, Apache adds up to a sufficient collection. Think about the painter again: a great painter either knows how to paint the whole work or doesn&rsquo;t know how to paint at all. A good chef either knows how to make every dish or none. A musician either knows how to compose a complete piece or nothing. There&rsquo;s no knowing the pieces, however well, and thinking you know enough.</p>
<h2>The Worker and the Artist<span class="hx:absolute hx:-mt-20" id="the-worker-and-the-artist"></span>
    <a href="#the-worker-and-the-artist" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>That mistake is fatal, because the individual will readily believe they know enough and give little or no attention to everything else. Software development is an art like any other. You&rsquo;ll never be perfect in all of its aspects, and the peculiarity of all these creative fields is precisely that they prize the <em>&ldquo;pursuit of perfection.&rdquo;</em> What counts is the rung above the one you&rsquo;ll be on tomorrow, and the wisdom that this ladder has no end. What matters is the journey, and the journey in pursuit of perfection is the engine of continuous improvement.</p>
<p>As they said of Socrates: <em>&ldquo;the more I learn, the less I know.&rdquo;</em> Stop for a moment and think about that again: most of us forget this principle. Diplomas and certificates do harm precisely because they discourage the long-term journey in exchange for false short-term trophies.</p>
<p><a href="http://en.wikipedia.org/wiki/Difference_engine"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/10301732.jpg_original.jpeg" alt=""  loading="lazy" /></a></p>
<p>You think you really don&rsquo;t need college? Do you know probability and statistics? Because without them you can&rsquo;t build the most advanced anti-spam and anti-virus mechanisms. Think you understand linear algebra and calculus? Without them you&rsquo;ll never create anything in computer graphics. Do you really think you understand algebra? Without it you&rsquo;ll never grasp how cryptography mechanisms work. Did you actually learn boolean logic? Without it you don&rsquo;t understand the foundation of modern computing. Think quantum physics is irrelevant? Without it you can&rsquo;t even begin to imagine the possibilities of future <a href="http://en.wikipedia.org/wiki/Quantum_computing"target="_blank" rel="noopener">quantum computing</a>. Before the cynics take this too literally: I&rsquo;m not asking for expertise in any of these areas, and I don&rsquo;t have it myself. But I know where to look to solve each problem involving each of them.</p>
<p>Plenty of people find all of this very irrelevant. After all, why would a programmer need to know all this nonsense to be a mere &ldquo;form coder&rdquo;? The thing is, in the end, the bulk of &ldquo;the job market&rdquo; is building forms: forms in Visual Basic, forms in HTML, it&rsquo;s all forms. For that I don&rsquo;t need Da Vinci; a house painter will do.</p>
<p>If your purpose as a &ldquo;programmer&rdquo; stops there, this article ends here and I&rsquo;m wasting my time. I build forms too, but I&rsquo;m not content with that and I keep inventing different ways to build them. A Da Vinci doesn&rsquo;t choose or plan when or how his Mona Lisa will come out. It&rsquo;s the result of a long, laborious, difficult journey. The Mona Lisa began to be painted in 1503, he put the final touches on it until shortly before his death, around 1519, and that journey took him from Italy to France in 1516. It only started becoming truly famous in the mid-19th century. He made hundreds of other paintings along the way, some better known, some ignored.</p>
<p><a href="http://en.wikipedia.org/wiki/Eniac"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/1946_eniac_large.jpg_original.jpeg" alt=""  loading="lazy" /></a></p>
<p>On top of that, knowing every aspect of the profession makes even the task of &ldquo;coding forms&rdquo; more interesting. A mediocre coder will code forms the same way for the rest of his life. A good programmer always looks for different approaches, experiments with new techniques, refines the ones he already knows, exactly as they did in the Renaissance. That&rsquo;s where the whole school of software architecture came from, the best practices, the best architectures, the entire process and discipline later taught as rote memorization to the mediocre.</p>
<p>Data structures, basic algorithms, relational databases, compilers, assemblers, operating systems, protocols: these are all disciplines that should be considered trivial. The challenge lies elsewhere. For an artist it&rsquo;s the same as knowing how to hold a brush or handle a piano&rsquo;s keys: what makes the difference is how you use them. That takes talent, that takes experience. Even the most talented person will need years of practical experimentation, thousands of hours of practice, trial and error, refinement, before reaching expert status. A good programmer should aspire to become a <a href="http://en.wikipedia.org/wiki/Polymath"target="_blank" rel="noopener">polymath</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Polymath"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/180px-Leonardo_self.jpg_original.jpeg" alt=""  loading="lazy" /></a>By polymath I mean knowing programming, some administration, some marketing, general culture, communication, and various other areas that add to your main craft. The current &ldquo;social networks&rdquo; craze makes much more sense once you become familiar with the work of scholars like <a href="http://web.archive.org/web/20101224050752/http://www.nd.edu/~alb/Public%20Relations/NextBigThing%28Barabasi%29_NDMag,Vol36,No1,49-53%28Sprg07%29.pdf"target="_blank" rel="noopener">Albert-László Barabási</a> on scale-free networks, a discipline that didn&rsquo;t originate in computing but precisely explains the evolution of this kind of natural formation. For those leaning toward a management career, understanding <a href="http://books.google.com/books?id=4qM7yJKC_nkC&amp;printsec=frontcover&amp;dq=inauthor:Frederick&#43;inauthor:Winslow&#43;inauthor:Taylor&amp;ei=mSjpSdujDpeSkASGk-3xBg"target="_blank" rel="noopener">Frederick Taylor</a> gives you another perspective. More &ldquo;modern&rdquo; topics like agility or lean make much more sense after you&rsquo;ve seen the work of others like <a href="http://web.archive.org/web/20090428130356/http://deming.org/"target="_blank" rel="noopener">W. Edwards Deming</a> or Taiichi Ohno.</p>
<p>My point: you won&rsquo;t pull anything useful out of your own head alone. Forget that idea. You only sharpen what you know, at genuinely high speed, by standing on the shoulders of giants. In my case, I think I just absorbed that insight and consciously changed my attitude by going through college, in an environment that let me experience my own smallness before decades of cultural and academic evolution. You need to feel like a dwarf in order to pursue surpassing giants.</p>
<p>Today&rsquo;s traditional and commercial environments of teaching and work are unfortunately terrible places for that, I&rsquo;d say the worst in the world. In them you live the illusion of achieving more without pushing for more, in a predatory environment that rewards the fast and the superficial. Fast-food culture is completely hostile to the concept of continuous improvement, which by definition depends on time and disciplined effort. Today everyone wants a short college that&rsquo;s easy to get into, easy to pass, preferably cheap and low-effort. Courses and certificates follow the same path: in no time you get to call yourself a &ldquo;sage&rdquo; in some field. Instead of a meritocratic environment that values learning and wisdom, we have an opportunistic one that values smallness, minimal effort, and low culture.</p>
<p><a href="http://web.archive.org/web/20101224050752/http://www.nd.edu/~alb/Public%20Relations/NextBigThing%28Barabasi%29_NDMag,Vol36,No1,49-53%28Sprg07%29.pdf"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/caldarelli1_original.gif" alt=""  loading="lazy" /></a></p>
<h2>A Recipe?<span class="hx:absolute hx:-mt-20" id="a-recipe"></span>
    <a href="#a-recipe" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>With all of that:</p>
<ul>
<li>
<p>If you&rsquo;re still of school age, in high school, do everything you can to figure out what you think you like. You&rsquo;ll rarely be certain, but you need to try.</p>
</li>
<li>
<p>If you&rsquo;re past school age and still don&rsquo;t know what you want to do, I&rsquo;m sorry: few people leave that condition for a position of distinction. Rare isn&rsquo;t impossible, but in that case understand that you&rsquo;ll need to work much harder than average, much harder than most naturally talented people. It will literally cut to the bone, it will hurt, and there&rsquo;s no guarantee of any return.</p>
</li>
<li>
<p>If you know what you want, go for it. But really go. Understand that the journey is long and has no end, that you&rsquo;ll never reach the top, and that there will always be many people above you, with the aggravating detail that they keep climbing fast. The reward: if you engage with the journey, you&rsquo;ll never have to separate work from fun. Let others decide whether what you&rsquo;re doing is work.</p>
</li>
</ul>
<p>Now the most complicated part of the equation: few people have the conditions for any of this. Most aren&rsquo;t just opportunists; they&rsquo;re in a situation of real financial distress, sometimes with even graver family problems. It&rsquo;s that terrible situation of having to choose between what you want and what others want, where either choice will be a bad one.</p>
<p>I have no magic solution for that, nor do I have that life experience. But I know up close, in detail, cases of people who managed to escape the negative cycle and became far more successful than me. There&rsquo;s a price: it will hurt. No great reward comes for free. No great value comes in the short term.</p>
<p><a href="http://en.wikipedia.org/wiki/Self-pity"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/DavidHasselhoffsaysyousuck.jpg_original.jpeg" alt=""  loading="lazy" /></a></p>
<p>What I see most are people wasting a lot of time feeling <strong>sorry for themselves</strong>. I hate that type, acting like the victim of everything: the system is to blame, the company, the parents, everybody but themselves. There are always people in much worse situations than yours. Never assume you&rsquo;ve hit rock bottom, because you have no idea how deep that pit goes. And if you&rsquo;re here reading this blog, I can assure you that you&rsquo;re very far from that bottom, so you have no excuse.</p>
<p>The old saying still holds: <em>&ldquo;no pain, no gain.&rdquo;</em> The important thing is not to be a conformist. Most people who criticize me when I say these things start from the wrong premise: they separate what is work from what isn&rsquo;t. That person <strong>already is</strong> a conformist: they&rsquo;ve already accepted that their job is something they don&rsquo;t want to take home. And I&rsquo;m not talking about taking paperwork home to do at midnight. I mean the journey, the mindset, the thinking, the reflection. What&rsquo;s the right balance? Each person knows their own.</p>
<h2>Outliers<span class="hx:absolute hx:-mt-20" id="outliers"></span>
    <a href="#outliers" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>As Malcolm Gladwell tells it in his recent <a href="http://www.amazon.com/Outliers-Story-Success-Malcolm-Gladwell/dp/0316017922"target="_blank" rel="noopener">Outliers</a>, the Beatles went to Hamburg five times between 1960 and 1962. They played eight hours a night, seven days a week, trying to win over an audience that didn&rsquo;t speak their language and was more interested in the strippers. That was 270 nights in Hamburg. When &ldquo;I Want to Hold Your Hand&rdquo; finally broke in America in January 1964, the Beatles had already performed some 1,200 times. That&rsquo;s far more experience than most new artists accumulate in a lifetime.</p>
<p>You don&rsquo;t need to become the Beatles; that&rsquo;s nearly impossible. Nor a Bill Gates, a Steve Jobs, a Ray Kroc, a Henry Ford. It makes no sense to try to imitate them, follow their footsteps, take the same courses, do the same things, wear the same clothes. It&rsquo;s futile and it gets you nowhere: a biography comes nowhere near being a recipe for success. You need to absorb what drove them to the journey, not what they did during it.</p>
<p><a href="http://en.wikipedia.org/wiki/Ray_Kroc"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2009/4/17/0427_18innova.jpg_original.jpeg" alt=""  loading="lazy" /></a></p>
<p>What they all have in common is talent, <strong>a lot of hard work</strong>, and a lot of experience. Mozart started composing at six, but it was only after his twenties that he finally composed a work of art: more than ten thousand hours of practice later.</p>
<p>So I return to the question: <em>&ldquo;Is college worth it?&rdquo;</em> Certainly, if it&rsquo;s a good college, with the intent of sharpening what you know and learning more. Very much worth it, as long as you understand that college is only a fraction of your journey of at least ten years of learning before you can finally say you know something.</p>
<p>My journey in computing began timidly in 1986 and picked up steam from 1989. My &ldquo;formal&rdquo; résumé starts around 1997. I&rsquo;m still very much a novice in many areas I&rsquo;d like to know more about. My journey has barely begun. Don&rsquo;t think yours is already over.</p>
<h2>Do You Need a College?<span class="hx:absolute hx:-mt-20" id="do-you-need-a-college"></span>
    <a href="#do-you-need-a-college" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>After all of that, you don&rsquo;t expect an easy answer, do you? :-)</p>
<p>To be mediocre, by definition doing what everyone else does, yes: you&rsquo;ll definitely need a college, any college, grab your diploma, and be just another one in a crowd of millions. Good luck, you&rsquo;ll need it.</p>
<p>To be above average, the only path worth taking, it depends. If you think you can learn everything on your own, that works too. I know several cases like that, of extraordinary people who never went to college (or went to a bad one, just for appearances, without letting it influence them) and who know every aspect of the field. Understand: knowledge is not a secret. There&rsquo;s nothing you&rsquo;ll only see after opening some secret door inside a college. All the information is out there. It&rsquo;s up to you to decide whether you&rsquo;ll go after all of it on your own. If you don&rsquo;t think you will, go to college, but a decent one, not one of these disposable commercial operations on every corner. I think it&rsquo;s worth it.</p>
<p>But if the question you really wanted to ask was <em>&ldquo;Is college decisive for a successful career?&rdquo;</em>, then the answer is no. Success depends solely and exclusively on the individual. If you succeed, the credit is all yours; if you fail, the blame belongs to no one else either. And once more, for the cynics (whom for some reason I suspect are intelligent and love pulling things out of context): no, nothing I said here is new. I&rsquo;m just repeating what should already be common sense.</p>
]]></content:encoded><category>career</category><category>learning</category><category>off-topic</category></item><item><title>[Off-Topic] Net Negative Producing Programmer</title><link>https://akitaonrails.github.io/en/2009/03/30/off-topic-net-negative-producing-programmer/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2009/03/30/off-topic-net-negative-producing-programmer/</guid><pubDate>Mon, 30 Mar 2009 01:25:00 -0300</pubDate><description>&lt;p&gt;During the Encontro de TI event last Saturday, I had the chance to trade ideas with Guilherme Chapiewski. We landed on the subject of the &lt;strong&gt;Net Negative Producing Programmer&lt;/strong&gt; (NNPP). I first read about this term in &lt;a href="http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html"target="_blank" rel="noopener"&gt;Jay Fields&amp;rsquo; article&lt;/a&gt;. Other bloggers explored the subject too, like &lt;a href="http://web.archive.org/web/20130314122455/http://blog.kriskemper.com/2008/08/07/preventing-the-net-negative-producing-programmer/"target="_blank" rel="noopener"&gt;Kris Kemper&lt;/a&gt;. There&amp;rsquo;s also a paper by &lt;a href="http://web.archive.org/web/20100215102916/http://www.pyxisinc.com/NNPP_Article.pdf"target="_blank" rel="noopener"&gt;G. Gordon Schulmeyer&lt;/a&gt; that digs even deeper.&lt;/p&gt;
&lt;p&gt;The executive summary, in Schulmeyer&amp;rsquo;s own words, is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Taking a poor performer off the team can often be more productive than adding a good one.&amp;rdquo;&lt;/p&gt;</description><content:encoded><![CDATA[<p>During the Encontro de TI event last Saturday, I had the chance to trade ideas with Guilherme Chapiewski. We landed on the subject of the <strong>Net Negative Producing Programmer</strong> (NNPP). I first read about this term in <a href="http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html"target="_blank" rel="noopener">Jay Fields&rsquo; article</a>. Other bloggers explored the subject too, like <a href="http://web.archive.org/web/20130314122455/http://blog.kriskemper.com/2008/08/07/preventing-the-net-negative-producing-programmer/"target="_blank" rel="noopener">Kris Kemper</a>. There&rsquo;s also a paper by <a href="http://web.archive.org/web/20100215102916/http://www.pyxisinc.com/NNPP_Article.pdf"target="_blank" rel="noopener">G. Gordon Schulmeyer</a> that digs even deeper.</p>
<p>The executive summary, in Schulmeyer&rsquo;s own words, is this:</p>
<blockquote>
  <p>&ldquo;Taking a poor performer off the team can often be more productive than adding a good one.&rdquo;</p>

</blockquote>
<p>Found out you have a bad programmer? <strong>Fire him</strong>, as fast as possible. There&rsquo;s no other solution. Many managers assume that bad or <a href="http://www.akitaonrails.com/2008/9/13/off-topic-matando-a-m-dia"target="_blank" rel="noopener">mediocre</a> programmers are, at worst, just slower than the good ones. That assumption is absurdly <strong>wrong</strong>: a single bad programmer causes irreparable damage to a project and literally puts the team in reverse.</p>
<p>The damage isn&rsquo;t always obvious. Most of them are accumulators of <a href="/en/2008/12/18/tradu-o-d-vida-t-cnica/">Technical Debt</a> (note 2012: this post talks more about technical software problems, but generalize to problems in general, like low team morale, dissatisfied clients, etc). Maintainability and extensibility end up deeply compromised.</p>
<p>One thing is certain: spotting a bad programmer is very hard, especially if you, the manager, aren&rsquo;t a programmer yourself. Worse: you need to be a <strong>good programmer</strong> to recognize the bad one. In a reasonably balanced team, with programmers at least slightly above average and only one or two bad elements, the team itself separates the wheat from the chaff and expels the rotten apple from its midst (if they&rsquo;re smart).</p>
<p>That&rsquo;s a double-edged sword. If you, as a programmer, think your colleague is the bad one, who guarantees the others don&rsquo;t think the bad one is you? If you&rsquo;re a programmer, make sure your work speaks for itself.</p>
<p>I tend to separate &ldquo;coders&rdquo; from &ldquo;developers.&rdquo; Both are programmers, but the first group clocks in at the door, does only what they&rsquo;re told, goes home at the same time every day, and worries about nothing else. The second group is made of true artists, people who understand that software is art and, as such, demands dedication and constant study, with no regard for business hours. As I like to put it: it&rsquo;s the difference between a house painter and Da Vinci.</p>
<p>A manager needs to be very conscious of this: every software development team needs <strong>Senior Technical Leaders</strong>. Tip: look in Open Source communities, your odds of finding the best programmers are better there. Don&rsquo;t look in educational institutions and, above all, be suspicious of any programmer who leads with the certifications they have.</p>
<p>I liked what Kris Kemper wrote on his blog about how ThoughtWorks hires: the candidate goes through a battery of tests. One or two interviews won&rsquo;t cut it: they need to get past several senior engineers and show code that other seniors will review. They have to truly earn the seat. They need to demonstrate experience (following Malcolm Gladwell in Outliers, I&rsquo;d say you should only hire programmers approaching their 10,000 hours of experience, at least for roles with less important tasks), they need to show resourcefulness and excellent communication skills, they need to show code, and good code, code that wouldn&rsquo;t embarrass them in front of Martin Fowler. (note 2012: that model isn&rsquo;t bad, but today I think there&rsquo;s a better way, which is a topic for another post.)</p>
<p>Now, I&rsquo;ve seen very bad situations where an <strong>entire team</strong> is made of NNPPs. In those cases there&rsquo;s nothing to do: dissolve the entire team. Be very careful not to fall for the <a href="/en/2007/08/19/a-falcia-do-custo-perdido/">Sunk Cost</a> fallacy. Many think like this: <em>&ldquo;but I&rsquo;ve already invested so much time and resources in this team, it would be a waste to throw all that away.&rdquo;</em> No. What&rsquo;s wasteful is keeping them around while they create more and more technical debt that you&rsquo;ll be the one paying for. It&rsquo;s cheaper to dissolve the team, form a new and better one, and restart the project from scratch if necessary. You&rsquo;ll stop for 6 months, but at least you won&rsquo;t go bankrupt in 2 years.</p>
<p>Another thing every manager always gets wrong: immediate results versus long-term results. This is a constant in every company I&rsquo;ve been through: the manager loves the cowboy programmer, the guy who solves every problem thrown at him. All cowboys are devotees of what we call POG in Brazil, <a href="http://desciclo.pedia.ws/wiki/POG"target="_blank" rel="noopener">&ldquo;Workaround-Oriented Programming&rdquo;</a> (in Portuguese). It would be funny if it weren&rsquo;t tragic: it exists, and it&rsquo;s practically the norm in most software teams. I&rsquo;d risk saying that at least 4 out of every 5 programmers do POG daily.</p>
<p>So if you&rsquo;re a manager, be suspicious of magical results, unexpected software behavior, constant bugs fixed instantly. You know the pattern? A problem blows up today, you send an email to the team, they reply an hour later saying <em>&ldquo;everything&rsquo;s fine now.&rdquo;</em> And this repeats every single day. That&rsquo;s a very strong POG signal. Cowboy programmers are &ldquo;coders&rdquo; who think they&rsquo;re &ldquo;developers&rdquo;: an insane house painter who thinks he&rsquo;s Van Gogh. It&rsquo;s the most dangerous type, because the house painter knows his limitations and would never claim to paint portraits, but the cowboy genuinely believes he&rsquo;s Van Gogh. And the worst part, paradoxically, is that managers love them because they solve all the problems.</p>
<p>Now for the shocking part: managers love cowboys because they solve all the problems they created themselves. The penny hasn&rsquo;t dropped yet: all the merit credited to the cowboy is generated by the problems he created. If you&rsquo;re this type of manager and it just clicked that you have cowboys, <strong>fire them</strong> too. There&rsquo;s even the classic dilemma: <em>&ldquo;but I can&rsquo;t let him go, he&rsquo;s the only one who knows how the system works!&rdquo;</em> Exactly. That&rsquo;s an even stronger reason to let him go: he is, literally, a massive <a href="http://en.wikipedia.org/wiki/Single_point_of_failure"target="_blank" rel="noopener"><strong>Single Point of Failure</strong></a> (SPOF). Real developers don&rsquo;t hide things, don&rsquo;t mask results, don&rsquo;t stall the process. Want a symptom? Is there any software whose source code lives only on your programmer&rsquo;s machine? Watch out: you just found a cowboy.</p>
<p>One more motivator: when you swap a bad programmer for a truly good one, the effective gain is <strong>1 for 10</strong>, as the good old Frederick Brooks put it in <a href="https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"target="_blank" rel="noopener">The Mythical Man Month</a>. For 30 years we&rsquo;ve known that a good programmer can be 10 times better. On top of being faster, he writes quality code, which makes maintenance, extension, and knowledge transfer to other programmers easy.</p>
<p>And these days there are several symptoms that expose cowboys who should be fired. Does your programmer wrinkle his nose when <a href="http://www.extremeprogramming.org/rules/pair.html"target="_blank" rel="noopener">Pair Programming</a> comes up? Does he scoff at <a href="http://www.extremeprogramming.org/rules/collective.html"target="_blank" rel="noopener">Collective Code Ownership</a> and prefer to keep some code hidden? Does he think <a href="http://www.extremeprogramming.org/rules/unittests.html"target="_blank" rel="noopener">testing</a> is optional, something to do later? Worse, does he defend the use of practices or technologies without being able to explain, technically, why he&rsquo;s using them? All of those are symptoms. Even one of them is reason enough to have the dismissal paperwork ready and start interviewing new candidates.</p>
<p>By the way, I might sound like I&rsquo;m joking when I say &ldquo;fire them,&rdquo; but I&rsquo;m dead serious. Another thing that&rsquo;s very important for a company is staff turnover. When the same people stay together for years, they get too comfortable with each other and start turning a blind eye more often, drastically dropping service quality. One goal worth adopting: renew 10% to 20% of the staff every year. Keep the true developers and fire the NNPPs, unless, of course, you have money to burn.</p>
<p><strong>Update 03/30:</strong> I forgot to mention a few more things, responding to some of the comments as well. As I already said in my <a href="http://www.akitaonrails.com/2008/9/13/off-topic-matando-a-m-dia"target="_blank" rel="noopener">Killing the Average</a> talk, the market as a whole benchmarks everyone from the bottom. So a good programmer, even being up to 10 times better than a bad one, never earns 10 times more. Sometimes the difference barely reaches 10%, which is truly sad. Of course when I say &ldquo;fire them,&rdquo; I mean it, but it&rsquo;s also a provocation. Given Brazilian laws that protect the underperforming professional, in practice it gets difficult. So the pragmatic approach is: fire whenever you can and, more importantly, hire with great care. It&rsquo;s always better to take longer and hire someone truly good than to assume someone might have &ldquo;potential&rdquo; based on credentials alone.</p>
<p>One important thing: don&rsquo;t read this as an attack on newcomers, juniors, and recent graduates. There are many young folks with lots of potential, especially those who know they&rsquo;re early in their career and want to learn, make an effort to learn, change course when they receive feedback, and know at least how to start arguing their positions. A cowboy can be a recent graduate or someone with 20 years of career, it doesn&rsquo;t matter. Good juniors should be well taken care of and given adequate coaching so they don&rsquo;t go down the cowboy path.</p>
<p>One more thing: <em>&ldquo;I want to be a good programmer, but my boss pressures me to deliver everything early, he even encourages POG.&rdquo;</em> Alright, here we go. In aviation there&rsquo;s the so-called <a href="http://web.archive.org/web/20100114073158/http://www.crm-devel.org/resources/paper/PACE.PDF"target="_blank" rel="noopener">co-pilot&rsquo;s Catch-22</a>. A few decades ago many planes crashed because the captain made wrong decisions and the co-pilot, even knowing this, stayed silent because of hierarchy: someone of lower rank must not contradict someone of higher rank. The aviation world evolved and now there&rsquo;s a procedure called <strong>PACE</strong> (Probing, Alerting, Challenging, and Emergency Warning). If the co-pilot knows the captain is wrong, there&rsquo;s a procedure for him to assess the situation, alert the captain, challenge him if he doesn&rsquo;t understand and, if the error persists, the co-pilot <strong>must</strong> notify the control tower and take control of the aircraft. That culture shift in the cockpit helped bring aviation accidents down drastically.</p>
<p>A good programmer <strong>must</strong> say <strong>no</strong> to a boss who is pushing the team off a cliff. If the company punishes that kind of initiative, that company isn&rsquo;t good for you. Skip the childish move of going around your boss to gossip with his boss: face the man and discuss the problem like an adult. Here&rsquo;s a passage from the <a href="http://web.archive.org/web/20100114073158/http://www.crm-devel.org/resources/paper/PACE.PDF"target="_blank" rel="noopener">PACE</a> paper:</p>
<blockquote>
  <p>For the actual announcement of change of command on the flight deck, the Co-pilot could use a phrase
such as <em>&ldquo;Captain (Jones), I must take over control of the airplane. (Jerry), take your hands off the controls.
NOW!&rdquo;</em> This use of a personal first name or a nickname can very effective to break the perceptual
narrowing of the Captain. A third crew member, if present, can use terminology such as, <em>&ldquo;Captain (Jones),
you must give control of the airplane to (Barry) immediately.&rdquo;</em></p>

</blockquote>
<p><strong>Update: 03/31</strong> I think it&rsquo;s worth digging a bit more into the &ldquo;Cowboy&rdquo; concept, since it can be misread. Again: the newcomer gaining experience and the senior learning new things are not cowboys. Those are the ones worth investing in. The problem is the Lemmings, the suicidal ones: the guy is bad, everyone knows he&rsquo;s bad, everyone warns him he&rsquo;s heading toward a cliff, but the damn fool has it in his head that he can&rsquo;t change, won&rsquo;t change, or doesn&rsquo;t know how to change, and therefore he won&rsquo;t. That&rsquo;s the guy who keeps going off the cliff and drags everyone around him along. That&rsquo;s exactly the NNPP: negative productivity, guaranteed damage. After being warned once, twice, there&rsquo;s no point anymore: he has to go, because at that point it&rsquo;s him or you.</p>
]]></content:encoded><category>software-engineering</category><category>career</category><category>management</category><category>off-topic</category></item><item><title>Off-Topic: The Power of Myth, Redux</title><link>https://akitaonrails.github.io/en/2008/09/20/off-topic-o-poder-do-mito-redux/</link><guid isPermaLink="true">https://akitaonrails.github.io/en/2008/09/20/off-topic-o-poder-do-mito-redux/</guid><pubDate>Sat, 20 Sep 2008 05:56:00 -0300</pubDate><description>&lt;p&gt;&lt;a href="http://web.archive.org/web/20090216184030/http://locaweb.com.br:80/railssummit/"target="_blank" rel="noopener"&gt;&lt;img src="http://s3.amazonaws.com/akitaonrails/assets/2008/8/1/468x60.gif" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In recent &lt;a href="http://web.archive.org/web/20231004031021/https://www.akitaonrails.com/2008/9/13/off-topic-matando-a-m-dia"target="_blank" rel="noopener"&gt;posts&lt;/a&gt; I explained why &amp;ldquo;mediocre&amp;rdquo; thinking is a problem and why there is no such thing as &amp;ldquo;average&amp;rdquo; in the real world.&lt;/p&gt;
&lt;p&gt;Some readers already asked me for book recommendations, and I dropped a few important ones in recent posts. &lt;a href="http://web.archive.org/web/20080915035007/http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;amp;ProdTypeId=1&amp;amp;CatId=11682&amp;amp;ProdId=21389447&amp;amp;ST=BV11682"target="_blank" rel="noopener"&gt;The Black Swan&lt;/a&gt; is at the top of the list. It explains how we ignore &amp;ldquo;black swans&amp;rdquo; and why trying to predict the long-term future from past events is an exercise in futility. The core point: we instinctively &amp;ldquo;reduce&amp;rdquo; and &amp;ldquo;simplify&amp;rdquo; everything to make it digestible, and that is a problem.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="http://web.archive.org/web/20090216184030/http://locaweb.com.br:80/railssummit/"target="_blank" rel="noopener"><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/8/1/468x60.gif" alt=""  loading="lazy" /></a></p>
<p>In recent <a href="http://web.archive.org/web/20231004031021/https://www.akitaonrails.com/2008/9/13/off-topic-matando-a-m-dia"target="_blank" rel="noopener">posts</a> I explained why &ldquo;mediocre&rdquo; thinking is a problem and why there is no such thing as &ldquo;average&rdquo; in the real world.</p>
<p>Some readers already asked me for book recommendations, and I dropped a few important ones in recent posts. <a href="http://web.archive.org/web/20080915035007/http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;ProdTypeId=1&amp;CatId=11682&amp;ProdId=21389447&amp;ST=BV11682"target="_blank" rel="noopener">The Black Swan</a> is at the top of the list. It explains how we ignore &ldquo;black swans&rdquo; and why trying to predict the long-term future from past events is an exercise in futility. The core point: we instinctively &ldquo;reduce&rdquo; and &ldquo;simplify&rdquo; everything to make it digestible, and that is a problem.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/21/Picture_1.png" alt=""  loading="lazy" /></p>
<p>Now I want to explain how the modern hero has trivialized the great myths.</p>
<h2>Modern Heroes<span class="hx:absolute hx:-mt-20" id="modern-heroes"></span>
    <a href="#modern-heroes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/51319.jpg" alt=""  loading="lazy" /></p>
<p>Another book I recommend, not directly related to the subject, is <a href="http://web.archive.org/web/20060308022045/http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;ProdTypeId=1&amp;ProdId=51319&amp;ST=SE"target="_blank" rel="noopener">The Power of Myth</a> by the great Joseph Campbell. It&rsquo;s a fantastic book and it describes, among other things, the <strong>Hero&rsquo;s Journey</strong>. Every civilization had its myths, populated with heroic figures.</p>
<p>The short version: the <strong>Hero&rsquo;s Journey</strong> starts with someone just like most of us, at the &ldquo;average&rdquo; or below it. The road is packed with danger, temptation, and trials. In the end the hero completes the journey and returns to preach what he learned. It&rsquo;s one reason myths like Buddha&rsquo;s or Jesus&rsquo; are still told today: they are heroic allegories baked into every culture.</p>
<p>Every Star Wars fan knows George Lucas is a Campbell disciple. Luke Skywalker&rsquo;s story is the hero&rsquo;s tale beat for beat: a poor kid from the backwaters of Tatooine faces trials and the temptations of the Dark Side of the Force until he transcends himself and returns to his people as a hero. It&rsquo;s one reason Star Wars is a classic to this day.</p>
<p>The modern world still has its heroic stories. These days some of the heroes are successful businessmen: Steve Jobs, Jack Welch, Henry Ford, and many others.</p>
<p>We all like having these &ldquo;heroes&rdquo;. Their stories inspire us and, as a side effect, sell mountains of books and merchandise, like courses and certifications.</p>
<p>Today&rsquo;s self-help is a poor man&rsquo;s version of ancient mythology. And in this market bent on manufacturing the next heroes, pitiful copies fight over the spot of the next Perseus.</p>
<h2>Charlatans<span class="hx:absolute hx:-mt-20" id="charlatans"></span>
    <a href="#charlatans" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>All this hero talk was the setup for the point that matters: how easily charlatans fool us, and how to break the cycle.</p>
<p>Ask Campbell, but the need for heroes to model ourselves on is probably in our nature. Nothing wrong with that: the names I mentioned above are reasonably worthy of the &ldquo;modern hero&rdquo; title.</p>
<p>The problem is the charlatans selling themselves as heroes, and plenty of them pull it off. Today&rsquo;s &ldquo;Leader&rdquo; is yesterday&rsquo;s &ldquo;Hero&rdquo;. I searched for &ldquo;leader&rdquo; on Submarino&rsquo;s site and the results alone show the size of the gold rush: a flood of books on the same theme, <em>&ldquo;How to become a leader&rdquo;</em>. Probably the best-selling category in corporate self-help.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/51JSQ66A63L.jpg" alt=""  loading="lazy" /></p>
<p>First things first: self-help is a giant exercise in futility. If you can avoid it, avoid it, because almost all of it is a waste of time. Publishers were never good filters, so there will always be a mountain of worthless books. The job is separating the wheat from the chaff.</p>
<p>Plenty of people say you should read a lot of books, and they&rsquo;re right. They just forget to add that not every book counts. Reading bad books makes you dumber; if those were the only books around, I&rsquo;d tell you to stop reading. Remember Pareto: maybe 20% of all books are worth anything.</p>
<p>A book titled <em>&ldquo;How to Be&hellip;&rdquo;</em>? Skip it, waste of time. To see why, ask the most obvious question: did any of history&rsquo;s great leaders need a self-help book, course, or lecture to become memorable? Can you picture John Kennedy, Martin Luther King, or Abraham Lincoln reading <em>&ldquo;How to Become a Leader&rdquo;</em> backstage? Hardly.</p>
<p>Now the second question: how many people around you actually became good leaders because of that material? I&rsquo;ll go further: there are dozens of project management &ldquo;methodologies&rdquo; promising miracles, and everyone buys in.</p>
<h2>The Great Fallacy<span class="hx:absolute hx:-mt-20" id="the-great-fallacy"></span>
    <a href="#the-great-fallacy" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>The logic goes like this: you apply the technique or methodology and, if the project succeeds, the method gets all the credit. <em>&ldquo;Of course it worked, thanks to the revolutionary methodology.&rdquo;</em></p>
<p>If the project fails, it&rsquo;s your fault, because you obviously didn&rsquo;t follow the methodology properly. Had you followed it, everything would have worked!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/Dilbert_10-26-07_smaller.gif" alt=""  loading="lazy" /></p>
<p>See the absurdity? All those management, leadership, and results books and courses hide this exact trick: they list dozens of people and companies that benefited from their &ldquo;techniques&rdquo;. I&rsquo;d bet those projects succeeded because of the quality of the teams, the <strong>people</strong> who executed them. The methodology only showed up afterwards to take the credit.</p>
<p>These were teams full of people able to route around every obstacle, who subverted the &ldquo;methodology&rdquo; until they hit the goal. They would have gotten there with or without the recipe, and probably sooner without the magic-formula baggage.</p>
<p>I personally like the <a href="http://agilemanifesto.org/"target="_blank" rel="noopener">Agile philosophy</a>. Many people prefer to say Agile &ldquo;methodologies&rdquo;, but I prefer &ldquo;philosophy&rdquo;. Methodology implies a systematic recipe you can repeat in any scenario, which isn&rsquo;t true. If the team lacks awareness and discipline in the philosophy, you can implement the techniques all you want and the project will never be truly Agile. Writing on sticky notes, slapping them on the wall, and timing 15-minute meetings doesn&rsquo;t make any company agile.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/dilbert98071208557.gif" alt=""  loading="lazy" /></p>
<p>In the modern age we think we&rsquo;re smarter, sharper. Are we? We chase the heroes who beat the odds and, as Nassim Taleb would say, we want to take their experience and their recipes and apply them to our own projects. In other words, we plan our future based on the past success of the people we call heroes.</p>
<p>Worse, we still &ldquo;adapt&rdquo; those recipes, convinced we know better. Take the reputation of the so-called &ldquo;Waterfall process&rdquo;, the staircase process, considered one of the worst ever created for software development.</p>
<p>Waterfall was described in the paper <a href="http://web.archive.org/web/20250913023017/https://leadinganswers.typepad.com/leading_answers/files/original_waterfall_paper_winston_royce.pdf"target="_blank" rel="noopener">Managing the Development of Large Software Systems</a>, from 1970, by Winston Royce. That&rsquo;s the paper with the famous staircase diagram. What few people know is that Royce himself wrote in it: <em>&quot;&hellip;the implementation described above is risky and invites failure.&quot;</em> He already proposed running the process at least twice, which means he knew it would evolve into something iterative.</p>
<p>We love leaning on past successful projects, on masters and scholars with magic solutions. The vast majority simply doesn&rsquo;t do the homework and falls for the fairy tale like naive kids.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/Picture_1.png" alt=""  loading="lazy" /></p>
<p>Here&rsquo;s another thing almost nobody questions: has anyone empirically checked how many of these training-formed managers go on to have consistently successful careers? I never met one. I also never saw a single credible number on it, from a credible institution, in any relevant independent study.</p>
<h2>Manufacturing Managers<span class="hx:absolute hx:-mt-20" id="manufacturing-managers"></span>
    <a href="#manufacturing-managers" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>I&rsquo;ve sat through every kind of lecture and course on managing projects, dealing with people, being a leader. In a Gaussian world, where the whole educational system incentivizes the average, students hit the job market and suddenly there&rsquo;s a shortage of people above average.</p>
<p>Of course there is. We raise people in a paternalistic, protectionist way, the worst way to raise anyone. In school we only study what we&rsquo;re handed, only do the homework we&rsquo;re assigned, only study to scrape a passing grade. We&rsquo;re so used to taking orders that the outcome is plain for everyone to see: excellent factory workers, few thinking professionals, and very few great leaders.</p>
<p>I like to say that <em>&ldquo;leaders aren&rsquo;t formed, leaders form themselves.&rdquo;</em> The way to encourage future leaders, starting in childhood, is to rip out the average mindset and raise them in a <strong>meritocratic</strong> environment: one where merit gets rewarded far more than mediocrity. And when I say &ldquo;far more&rdquo;, I mean absolutely unequal.</p>
<p>A democratic, evolving civilization was never about forcing equality, artificially lifting the weak and dragging down the strong until everyone lands on the average. &ldquo;Equality&rdquo; simply means nobody will stop you from rising above the average. Most people confuse that with making everyone the same.</p>
<p>The correct solution is the opposite: keep a high level of inequality based on merit. That&rsquo;s how the real world works: the successful are orders of magnitude wealthier than those who barely try. Wealth in capital, but also in recognition and influence.</p>
<p>Companies keep doing the opposite: they rerun the grade-school playbook, stick employees in a classroom, and expect great leaders to walk out.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/DilbertLeadership.gif" alt=""  loading="lazy" /></p>
<p>I know how this works: I&rsquo;m a PMP-certified Project Manager, certified by the <a href="http://www.pmi.org/"target="_blank" rel="noopener">PMI</a>, the &ldquo;renowned&rdquo; Project Management Institute. And I&rsquo;ll say it out loud: it&rsquo;s one more of the great corporate lies so common these days.</p>
<p>It works like this: you&rsquo;re required to sit through 2 or 3 months of classes to learn the &ldquo;trade&rdquo; of being a manager. You learn to break a project into a WBS, build a Gantt chart, calculate slacks, draw a project chart, analyze risks (in Gaussian fashion!), and so on.</p>
<p>You get a workbook, you do homework every week, just like grade school. At the end comes the &ldquo;entrance exam&rdquo;: the certification test, 200 questions. Beat the cut score, barely more than half, and you get a handsome PMP diploma, a lapel pin, a signature template for your business card, and the right to sign your emails &ldquo;Fabio Akita, PMP&rdquo;.</p>
<p>Does any of that make you a better manager? If you were truly awful, at least you climb out of absolute awfulness and land near the average. Don&rsquo;t be too proud of that.</p>
<p>But does it create good managers? Absolutely not. At best it proves you can read well enough to get slightly more than half the questions right in 4 hours, which proves exactly nothing. After the brainwashing and the rote memorization, anyone gets good at passing tests. Anyone who survived a cram school knows: a management course is the same deal.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/pmp_1.jpg" alt=""  loading="lazy" /></p>
<p>I&rsquo;ve met many project managers, more than I&rsquo;d like, who are notoriously terrible. And they passed the PMP exam! When you get certified you&rsquo;re happy, of course, I was. But if you&rsquo;re smart, you start feeling embarrassed about the title once you see the other bad PMPs out there. That&rsquo;s when I stopped using mine, even after a process that cost me around R$ 5,000 (a piece of paper doesn&rsquo;t come cheap), plus dozens of hours of mock exams.</p>
<p>Oh, and we become Leaders with an expiration date. Mine expires in 2009&hellip;</p>
<h2>Manufacturing Leaders<span class="hx:absolute hx:-mt-20" id="manufacturing-leaders"></span>
    <a href="#manufacturing-leaders" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Anyway, if your resume is weak and you know you can&rsquo;t deliver, go ahead and get certified in as many things as possible. The certification market exists because people never learned in school how to actually learn.</p>
<p>Everyone only learned to study what they&rsquo;re handed and to pass the test, at the average. I&rsquo;ve met few truly <strong>self-taught</strong> people with real street smarts. Those are exactly the ones who couldn&rsquo;t care less about certifications. A very smart acquaintance of mine, one I unfortunately had little contact with, put it to me straight: &ldquo;good people don&rsquo;t get manufactured.&rdquo; Indeed.</p>
<p>And by the way, acing a test and being intelligent are two very different things. You can get perfect scores across the board and still be far from smart. I&rsquo;ve known plenty of straight-A nerds who turned into slightly-better-than-average factory workers.</p>
<p>Our concept of the hero has changed a lot. For me, the Hero figure was always a strong influence on how I act: outliers who single-handedly went from zero to empire. I always admired the great Renaissance artists, like Leonardo da Vinci, who broke barriers as a painter, sculptor, inventor, philosopher, anatomist, physicist, and mathematician. And other giants like Thomas Edison, Benjamin Franklin, Carl Sagan, Stephen Hawking, and Charles Babbage, all of whom I met reading encyclopedias in junior high. Yes, encyclopedias were not made to be decoration.</p>
<p>Luckily, my upbringing always pushed me past the average. If I came home with a 9, my mother would say: <em>&ldquo;the test goes up to 10; if you&rsquo;re missing 1 point, you didn&rsquo;t try hard enough.&rdquo;</em> If I got a 5, the average, I was grounded. My father, for his part, always prized self-knowledge: he bought books and science magazines, and once gave me a world globe for my birthday.</p>
<p>You&rsquo;re a company and you want to grow great leaders? Put big challenges in their hands, push them to the limit, squeeze out everything they have. Be a tyrant without being a dictator. Demand perfection, and know how far each person can go. Only those who overcome extraordinary obstacles are extraordinary people. Leaders are Heroes, by definition!</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/the-office-spoilers.jpg" alt=""  loading="lazy" /></p>
<p>Now, you don&rsquo;t earn &ldquo;leader&rdquo; from a job title. Subordinates&rsquo; respect through sheer hierarchy is worth nothing, zip, zero. A structure where the only form of command is the old &ldquo;chain of command&rdquo;, where the subordinate obeys because his job depends on it, is a company extracting a tiny fraction of what it could. That&rsquo;s why I&rsquo;m against hierarchical organizations. As I mentioned in the other post, hierarchies are one more Gaussian form of control through the average, and it doesn&rsquo;t work. Insisting on the mistake only makes everything more wrong.</p>
<h2>The Death of Heroes<span class="hx:absolute hx:-mt-20" id="the-death-of-heroes"></span>
    <a href="#the-death-of-heroes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here is the problem with Gaussian thinking: in a world that incentivizes the average, there&rsquo;s little room left for Heroes. By that logic, the heroes who do exist are &ldquo;accidents&rdquo;: Gaussian probability says the odds of a hero appearing are so small they&rsquo;re nearly zero, something no &ldquo;normal&rdquo; person could ever reach. Not even worth considering. The &ldquo;safe&rdquo; move is staying at the average.</p>
<p>Except heroes exist, and new ones show up every day. Open Forbes and look at the list of the world&rsquo;s richest people. Take the top 500: the last name on that list is already infinitely richer than any of us. Stretch it to the 10,000 richest and the last one is still far richer than anyone you&rsquo;ve ever met. Keep going down and you realize there are thousands of small heroes: people who left the &ldquo;normal&rdquo; path and won. And not only in money.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/leadership.gif" alt=""  loading="lazy" /></p>
<p>There&rsquo;s another problem in the world of the average: plenty of people know the &ldquo;trick&rdquo;. People would even like to be heroes, but it&rsquo;s work. Everyone knows the hero&rsquo;s path takes a monumental, highly risky effort: the middle of the Journey is packed with trials, dangers, and the devil&rsquo;s temptations. Nobody likes suffering for an uncertain future. People are naturally short-term thinkers; they love to &ldquo;say&rdquo; they plan for the future, but that&rsquo;s just rhetoric.</p>
<p>And the people who know this trick best are precisely the ones who invent the magic recipes, the methodologies, the step-by-step procedures for becoming a hero in 24 hours, no sweat, no effort, no risk. For a small fee and a few hours of your day, anyone becomes a hero, certificate included! Companies hire these fast-food heroes, hand them command positions, and subordinates obey through the sheer force of the title. Could it get any easier?</p>
<p>As I said, there&rsquo;s no empirical data proving these methods work. Companies simply &ldquo;believe&rdquo; they do. The trainers&rsquo; pedigree looks good, other companies swear by it, the references are great. Why doubt it?</p>
<p>![](<a href="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/the_office_nbc_image"target="_blank" rel="noopener">http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/the_office_nbc_image</a> <strong>3</strong>_ medium_.jpg)</p>
<p>Everyone falls for the <strong>fallacy</strong> of showcasing only the projects that succeeded, where the people did the heavy lifting, and &ldquo;forgetting&rdquo; to list the ones that applied the methodology and sank.</p>
<p>It sounds so smart when the trainer says: <em>&ldquo;as a Leader, you need to motivate your team.&rdquo;</em> He just forgets to explain, step by step, how you actually &ldquo;motivate&rdquo; someone. Of course nobody explains it. Worse: as Taleb describes, people get reduced to <strong>stereotypes</strong> and roles, inanimate puppets that, according to the magic recipe, are predictable and easy to control. Just &ldquo;motivate&rdquo;, just &ldquo;incentivize&rdquo;, just &ldquo;be communicative&rdquo;. Building attractive, empty rhetoric is easy. Actually leading a project to success is hard.</p>
<p>An acquaintance of mine used to say: <em>&ldquo;He who can, does. He who cannot, teaches.&rdquo;</em></p>
<p>And according to Pareto, that&rsquo;s normal. At least 80% of the population, companies, and professionals will think this way. Great news for the other 20%: less competition.</p>
<p>The world was not made to be fair or equal. The real world is, by nature, highly <strong>unfair</strong> and unequal. In it, true heroes are battle-scarred, thick-skinned from taking so many hits, and they rise solely and exclusively through their own effort. The real world runs on meritocracy. Many will fool themselves for a while, thinking they&rsquo;ve found a place that will stay stable and equal forever, but that period is temporary and doomed to disappear, replaced by a merit-based system that will crush them without mercy. Most people are terrified of that, terrified of losing their comfort zone.</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/dilbert-17-04-2004.gif" alt=""  loading="lazy" /></p>
<p>All these cake recipes dressed up as self-help, masquerading as serious courses, are cheap mythology in homeopathic doses. I won&rsquo;t describe them as anything more than what they really are. They all come loaded with &ldquo;advice&rdquo;, and the best definition of advice I&rsquo;ve ever seen is in the famous <a href="https://www.youtube.com/watch?v=sTJ7AzBIJoI"target="_blank" rel="noopener">Sunscreen</a> video:</p>
<p><em>&ldquo;Advice is a form of nostalgia. Dispensing it is a way of fishing the past from the disposal, wiping it off, painting over the ugly parts and recycling it for more than it&rsquo;s worth.&rdquo;</em></p>
<p>Campbell&rsquo;s Heroes don&rsquo;t live in the comfort zone: leaving the common path is the hero&rsquo;s routine. The journey begins exactly when he decides to challenge what everyone else considers impossible. The hero becomes a myth when he conquers the impossible, and the impossible never yields to &ldquo;normal&rdquo; paths.</p>
<p>Myths are rare, unfortunately (or fortunately).</p>
<p><img src="http://s3.amazonaws.com/akitaonrails/assets/2008/9/20/the-office-nbc.jpg" alt=""  loading="lazy" /></p>
]]></content:encoded><category>philosophy</category><category>career</category><category>learning</category><category>off-topic</category></item></channel></rss>