
{"id":132306,"date":"2026-02-04T08:13:16","date_gmt":"2026-02-04T08:13:16","guid":{"rendered":"https:\/\/mycryptomania.com\/?p=132306"},"modified":"2026-02-04T08:13:16","modified_gmt":"2026-02-04T08:13:16","slug":"be-wrong-and-proud","status":"publish","type":"post","link":"https:\/\/mycryptomania.com\/?p=132306","title":{"rendered":"Be Wrong and Proud"},"content":{"rendered":"<p>Chronicles of Python Series\u200a\u2014\u200aPart\u00a02<\/p>\n<p>Has anyone else felt like they\u2019re losing their mind learning to code, or is it just\u00a0me?<\/p>\n<p>Photo by <a href=\"https:\/\/unsplash.com\/@cebbinghaus?utm_source=medium&amp;utm_medium=referral\">Christopher Robin Ebbinghaus<\/a> on\u00a0<a href=\"https:\/\/unsplash.com\/?utm_source=medium&amp;utm_medium=referral\">Unsplash<\/a><\/p>\n<p>In my <a href=\"https:\/\/medium.com\/@onyinyembieli_81599\/down-the-rabbit-hole-learning-python-on-chromeos-to-build-decentralized-identity-60606d5cad1d\">last piece<\/a>, I told you about falling down the Python rabbit hole on my Chromebook, building decentralized identity systems, wrestling with unsaved files, and celebrating every successful JWT signature. I showed you the victories. But today? Today we\u2019re talking about the stumbles.<\/p>\n<p>Here\u2019s what I\u2019ve discovered: the communities I\u2019ve joined are filled with people who struggled with the same things I\u2019m struggling with right now. There\u2019s something deeply comforting in knowing that thousands of developers have stared at the same error messages, questioned the same concepts, and felt the same frustration when their code didn\u2019t run because they forgot to save\u00a0(again).<\/p>\n<p>When you\u2019re learning something new\u200a\u2014\u200awhether it\u2019s Python, blockchain, or anything else, it\u2019s okay to do what works for <em>you<\/em>. Practice makes you better. Learn publicly if that\u2019s your style. Sure, there will always be people asking, \u201cWhy are you sharing this?\u201d But there\u2019s also that crucial 1% cheering you on for doing something hard in public. Plus, it holds you accountable.<\/p>\n<p>I\u2019ve learned to be wrong and proud. When I started, I tortured myself reading stories of people who learned Python in three weeks or mastered blockchain in a month. But we\u2019re all walking different paths at different paces, and that\u2019s the truth worth remembering.<\/p>\n<p>So let\u2019s get back to basics. While I\u2019m building DID systems and wrestling with cryptographic primitives, I want to share the foundational concepts I wish someone had explained to me when I started. Because even when you\u2019re working on complex projects, you\u2019re still using these fundamentals every single\u00a0day.<\/p>\n<p>So let\u2019s talk about the fundamentals, but not the way you\u2019ve seen them before, as I have added a little\u00a0twist.<\/p>\n<h3>Variables: The Art of Naming Things You Don\u2019t Understand Yet<\/h3>\n<p>Here\u2019s what nobody tells you about variables when you\u2019re starting: <strong>you\u2019re going to name things badly, and that\u2019s fine. You are kinda supposed to do that, that\u2019s part of learning.<\/strong><\/p>\n<p>Python<br \/>x = &#8220;did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb1&#8221;<\/p>\n<p>Versus:<\/p>\n<p>Python<br \/>issuer_decentralized_identifier = &#8220;did:ethr:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb1&#8221;<\/p>\n<p>When I started, I obsessed over having the \u201cperfect\u201d variable name before I even understood what the variable would do. Here\u2019s the secret: <strong>your variable names will evolve as you better understand your\u00a0problem.<\/strong><\/p>\n<p>Start with x. Then rename it to user_did. Then, realize it&#8217;s specifically an issuer&#8217;s DID and rename it again. Each rename is proof that you&#8217;re understanding the problem more deeply and finding solutions more\u00a0quickly.<\/p>\n<p>Variables aren\u2019t just storage containers. They\u2019re the words you use to think about your problem. And just like learning a new language, you\u2019ll start with broken grammar before you get to poetry. Don\u2019t quote me\u00a0here.<\/p>\n<p>The evolution is the\u00a0point.<\/p>\n<h3><strong>Data Types: Reality Has Structure (And So Does Your\u00a0Code<\/strong>)<\/h3>\n<p>Python has data types. Strings, integers, lists, dictionaries, booleans. Don\u2019t act brand new, you\u2019ve seen the tutorials. But here\u2019s what clicked for\u00a0me:<\/p>\n<p><strong>Data types aren\u2019t arbitrary categories\u200a\u2014\u200athey\u2019re different ways reality manifests in\u00a0code.<\/strong><\/p>\n<p>A string is language. A number is a quantity. A boolean is true or false. A list is a sequence. A dictionary is a relationship.<\/p>\n<p>I keep trying to store everything as strings because it feels \u201csafe.\u201d Then I realized: this isn\u2019t how information actually exists. Information has structure.<\/p>\n<p>A dictionary isn\u2019t just a \u201cdata structure.\u201d It\u2019s the recognition that things have properties, and properties have names, and relationships matter.<\/p>\n<p>Here\u2019s where it gets interesting: <strong>choosing the wrong data type is often the first sign you don\u2019t fully understand your problem\u00a0yet.<\/strong><\/p>\n<p>I spent two days trying to manage multiple credentials as separate variables\u200a\u2014\u200acredential_1, credential_2, credential_3. The frustration of managing credential_47 is what taught me I needed a list. The problem taught me the solution.<\/p>\n<p><strong>Every data type exists because someone had a problem that previous types couldn\u2019t elegantly solve.<\/strong><\/p>\n<p>Tuples exist because sometimes order matters but change doesn\u2019t. Sets exist because sometimes presence matters but duplicates don\u2019t. Understanding <em>why<\/em> these types exist is more valuable than memorizing their\u00a0syntax.<\/p>\n<h3>If Statements: The Art of Branching Reality<\/h3>\n<p>If statements are decision trees. But here\u2019s what made them click for\u00a0me:<\/p>\n<p><strong>Every <\/strong><strong>if statement is you anticipating a future you can&#8217;t\u00a0predict.<\/strong><\/p>\n<p>When I verify a credential, I don\u2019t know if it\u2019s valid. So I write code now, in the present, for a situation that will happen later when I\u2019m not here, and I don\u2019t know which branch of reality will\u00a0take.<\/p>\n<p>That\u2019s profound when you think about\u00a0it.<\/p>\n<p>Here\u2019s where beginners and experienced developers diverge: beginners learn if\/else syntax. Experienced developers learn <strong>what questions to\u00a0ask.<\/strong><\/p>\n<p>The difference isn\u2019t syntax. It\u2019s paranoia. Don\u2019t laugh, I am onto something. It\u2019s the accumulated weight of every time your code broke because you assumed data would be clean, present, and\u00a0correct.<\/p>\n<p><strong>If statements are where you encode your distrust of the\u00a0future.<\/strong><\/p>\n<p>And the beautiful part? Each if statement you write is a tiny prediction. When your code runs and takes the else branch, you predicted that possibility. You were ready for it. That&#8217;s not just programming; that&#8217;s foresight.<\/p>\n<h3>Loops: Doing Boring Things So You Don\u2019t Have\u00a0To<\/h3>\n<p>Loops are repetition. Everyone knows this. But here\u2019s the\u00a0reframe:<\/p>\n<p>When I needed to generate 100 test DIDs for my system, I could have written generate_did() a hundred times. Or I could write a loop and let the computer do\u00a0it.<\/p>\n<p>That for loop isn&#8217;t just &#8220;efficient code.&#8221; It&#8217;s the recognition that <strong>your time is finite and valuable, and the computer&#8217;s isn&#8217;t.<\/strong><\/p>\n<p>But here\u2019s where it gets deeper: loops taught me about\u00a0<strong>scale<\/strong>.<\/p>\n<p>Generating one DID? Easy. Generating 100? You need a loop. Generating a million? You need to think about memory. Generating a billion? You need to rethink your entire approach.<\/p>\n<p><strong>Loops are where you learn that scale changes everything.<\/strong><\/p>\n<p>The patterns that work at a small scale break at a large scale. And that\u2019s not a bug in Python, that\u2019s a fundamental truth about\u00a0systems.<\/p>\n<h3>Functions: Creating Words That Didn\u2019t\u00a0Exist<\/h3>\n<p>Functions are \u201creusable code blocks.\u201d That\u2019s what every tutorial says. But that\u2019s not what they\u00a0<em>are<\/em>.<\/p>\n<p><strong>Functions are how you name your intentions.<\/strong><\/p>\n<p>When I write verify_credential_signature(credential, public_key), I&#8217;m creating a word that didn&#8217;t exist before. Now, every time I want to verify a signature, I don&#8217;t have to think about JWTs or ECDSA algorithms. I just think: &#8220;verify.&#8221;<\/p>\n<p>The mistake beginners make is thinking they need to understand the implementation before they can use the abstraction. You don\u2019t. That\u2019s <em>why<\/em> the function\u00a0exists.<\/p>\n<p>And here\u2019s the meta-lesson: <strong>as you write more code, you\u2019re not just building a program\u200a\u2014\u200ayou\u2019re building a language.<\/strong> Your functions are the vocabulary. Your modules are the\u00a0grammar.<\/p>\n<p>Good code reads like a well-written essay.<\/p>\n<h3>Django: When Your Code Becomes A\u00a0World<\/h3>\n<p>Everyone learns Django as a \u201cweb framework.\u201d But here\u2019s what Django actually is: <strong>an opinionated answer to the question \u201chow should a web application be structured?\u201d<\/strong><\/p>\n<p>Django doesn\u2019t just give you tools. It gives you a <em>worldview<\/em>.<\/p>\n<p><strong>Django\u2019s structure is the accumulated wisdom of thousands of developers who built web apps before\u00a0me.<\/strong><\/p>\n<p>The separation of models, views, and templates isn\u2019t about being \u201ccorrect.\u201d It\u2019s about what happens six months later when you need to change your database schema without touching your URL routing. Or redesign your frontend without breaking your\u00a0API.<\/p>\n<p>The structure is for future-you.<\/p>\n<p>Here\u2019s the part that blew my mind: <strong>Django models are executable documentation.<\/strong> They simultaneously define your database schema, document your domain model, and provide an API for interacting with your\u00a0data.<\/p>\n<p>One class. Three functions. That\u2019s\u00a0elegant.<\/p>\n<p><strong>Django taught me that good architecture makes the implicit explicit.<\/strong><\/p>\n<h3>The Meta-Lesson: Code Is Thinking Made\u00a0Visible<\/h3>\n<p>Here\u2019s what ties all of this together:<\/p>\n<p>Variables force you to name things. Data types force you to understand structure. If statements force you to anticipate. Loops force you to recognize repetition. Functions force you to abstract. Django forces you to organize.<\/p>\n<p><strong>Every programming concept is a different lens for looking at problems. Remember\u00a0this.<\/strong><\/p>\n<p>Learning to code isn\u2019t about memorizing syntax. It\u2019s about <strong>developing a taste for which abstraction fits which problem and then solving\u00a0it.<\/strong><\/p>\n<p>And yes, you\u2019ll choose wrong. A lot. I\u2019ve written functions that should have been classes. Django projects that should have been Flask. Flask projects that should have been\u00a0Django.<\/p>\n<p><strong>Being wrong is how you develop\u00a0taste.<\/strong><\/p>\n<p>Be wrong. Be proud. Then be different next time. Be\u00a0better<\/p>\n<h3>Where I Am\u00a0Now<\/h3>\n<p>I still write variables namedx and y. I still overcomplicate solutions before finding the simple one. I still question whether I&#8217;m doing things &#8220;the right\u00a0way.&#8221;<\/p>\n<p>But I also structure applications that separate concerns. I write code that future-me will understand.<\/p>\n<p>The gap between \u201cI don\u2019t understand this\u201d and \u201cI built this\u201d isn\u2019t talent. It\u2019s time plus reflection. It\u2019s being willing to write bad code and then make it\u00a0better.<\/p>\n<p><strong>It\u2019s being wrong, out loud, until you\u2019re less\u00a0wrong.<\/strong><\/p>\n<p>The tutorials that show you perfect code are lying. Perfect code doesn\u2019t exist on the first try, or the tenth. What exists is iteration, refinement, and the slow accumulation of understanding.<\/p>\n<p>So write messy code. Use terrible variable names. Fight your framework. Then step back, reflect, and make it\u00a0better.<\/p>\n<p>The stumbles are the point. The confusion is the curriculum. The frustration is proof you\u2019re pushing against the edge of your understanding.<\/p>\n<p>Be wrong. Be proud. Be better tomorrow.<\/p>\n<p>That\u2019s the only path through the rabbit\u00a0hole.<\/p>\n<p><a href=\"https:\/\/medium.com\/coinmonks\/be-wrong-and-proud-1a04f818a646\">Be Wrong and Proud<\/a> was originally published in <a href=\"https:\/\/medium.com\/coinmonks\">Coinmonks<\/a> on Medium, where people are continuing the conversation by highlighting and responding to this story.<\/p>","protected":false},"excerpt":{"rendered":"<p>Chronicles of Python Series\u200a\u2014\u200aPart\u00a02 Has anyone else felt like they\u2019re losing their mind learning to code, or is it just\u00a0me? Photo by Christopher Robin Ebbinghaus on\u00a0Unsplash In my last piece, I told you about falling down the Python rabbit hole on my Chromebook, building decentralized identity systems, wrestling with unsaved files, and celebrating every successful [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":132307,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-132306","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-interesting"],"_links":{"self":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/132306"}],"collection":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=132306"}],"version-history":[{"count":0,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/posts\/132306\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=\/wp\/v2\/media\/132307"}],"wp:attachment":[{"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=132306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=132306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mycryptomania.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=132306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}