<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Maria Zaitseva</title>
    <description>The latest articles on Forem by Maria Zaitseva (@tailcall).</description>
    <link>https://forem.com/tailcall</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F93034%2Fcebf020c-29c8-4531-8584-2db9b15861cc.png</url>
      <title>Forem: Maria Zaitseva</title>
      <link>https://forem.com/tailcall</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tailcall"/>
    <language>en</language>
    <item>
      <title>Which programming languages I like</title>
      <dc:creator>Maria Zaitseva</dc:creator>
      <pubDate>Fri, 26 Jan 2024 02:53:47 +0000</pubDate>
      <link>https://forem.com/tailcall/which-programming-languages-i-like-5ekf</link>
      <guid>https://forem.com/tailcall/which-programming-languages-i-like-5ekf</guid>
      <description>&lt;h1&gt;
  
  
  The Beginning: A Nostalgic Trip Down Memory Lane
&lt;/h1&gt;

&lt;p&gt;I've journeyed through various programming languages, each with its own charm and challenges. My first encounter was with a BASIC interpreter on an 8-bit computer during my childhood. This wasn't just any childhood adventure; it was the spark that ignited my enduring programming itch. Despite BASIC often being criticized for its simplicity, I found it to be elegantly straightforward. It's like the comfort food of programming languages – uncomplicated, yet satisfying.&lt;/p&gt;

&lt;h1&gt;
  
  
  My Undying Love for Scheme
&lt;/h1&gt;

&lt;p&gt;Fast forward to today, and my heart belongs to Scheme. There's a galaxy of Scheme implementations out there, but the stars that shine the brightest for me are GNU Guile and Racket. They represent the modern and practical side of Scheme, seamlessly blending classic ideas with contemporary needs.&lt;/p&gt;

&lt;p&gt;What captivates me about Scheme is its simplicity and orthogonality – it's like a Zen garden, minimal yet profoundly beautiful. The hygienic macros and &lt;code&gt;call-with-current-continuation&lt;/code&gt; features in Scheme are, in my opinion, nothing short of revolutionary. They're like discovering a secret passage in a castle, leading to rooms you never knew existed.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Bittersweet Relationship with Common Lisp
&lt;/h1&gt;

&lt;p&gt;On the other hand, there's Common Lisp. Oh, Common Lisp – the language that's as majestic as it is quirky. Working in SBCL (Steel Bank Common Lisp) using Emacs with &lt;code&gt;slime-mode&lt;/code&gt; is like witnessing a sunrise; it's breathtakingly beautiful. The way every value is inspectable and the debugger allows on-the-fly code fixes is like having a conversation with your code.&lt;/p&gt;

&lt;p&gt;However, my love for Common Lisp is complicated. Its dual namespace system, a relic of the 1970s, often feels like trying to dance to a song with an irregular beat. The need to prefix function names with &lt;code&gt;#'this-thing&lt;/code&gt; is an eccentric quirk that never quite won me over. The standard library, a true product of its time, seems to cater more to Lisp programmers from the late 80s. While Scheme names a function &lt;code&gt;append&lt;/code&gt;, Common Lisp sticks to &lt;code&gt;nconc&lt;/code&gt;. It's like going to a retro party – fun, but somewhat out of step with contemporary tastes.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Tribute to 6502 Assembly Language
&lt;/h1&gt;

&lt;p&gt;Let's not forget the 6502 assembly language – a language that's like the vinyl record of the programming world. Its popularity can be attributed to the sheer joy of programming for the chip. The 6502 CPU, with its mere three directly usable registers (A, X, Y), is like playing a challenging yet addictive puzzle game. The limited scope of availability and the mysterious Zero Page add layers of intrigue to the experience.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion: A Programmer's Eclectic Palette
&lt;/h1&gt;

&lt;p&gt;In conclusion, my journey through various programming languages has been like exploring different countries, each with its own culture, challenges, and beauty. From the simplicity of BASIC to the elegance of Scheme, the complexity of Common Lisp, and the raw charm of 6502 assembly, each language has enriched my programming palette in its own unique way. It's a journey that's far from over, but one I'm excited to continue. Stay tuned for more stories from my coding adventures!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Things I learned after 5 years of iOS development</title>
      <dc:creator>Maria Zaitseva</dc:creator>
      <pubDate>Sat, 07 Oct 2023 04:57:43 +0000</pubDate>
      <link>https://forem.com/tailcall/things-i-learned-after-5-years-of-ios-development-45e1</link>
      <guid>https://forem.com/tailcall/things-i-learned-after-5-years-of-ios-development-45e1</guid>
      <description>&lt;p&gt;"I will try Swift for a week to see what it feels like," I thought one day and switched my careers to become a full-time iOS engineer. Now my laptop costs more than it should and I have an opportunity to say "Sorry, I don't know how to use Windows" whenever someone asks me to fix their computer. Feigning ignorance is so much easier when you use a technology almost no one uses in your country.&lt;/p&gt;

&lt;p&gt;So today I'm going to share with you my &lt;strong&gt;Top 5 Things I Learned After Working 5 Years as an iOS Engineer&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thing 1: Get Your Own Mac
&lt;/h1&gt;

&lt;p&gt;I usually say that for a programmer, their computer is like a sword for a samurai or something like that. It's your tool which you need to learn well and preferably have complete ownership over.&lt;/p&gt;

&lt;p&gt;Get an M1 machine if you can. I have an Intel based mac and I feel like such a loser because I purchased it right before the M1 has been released. Woe is me. I still like my mac though, it's alright.&lt;/p&gt;

&lt;p&gt;Learn macOS. It's Unix(-like) under the hood, so exploring the command line capabilities is a good educational experience and a nice way to spend a quiet evening.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thing 2: Xcode is a Witch, so Pick Up Some Witchcraft
&lt;/h1&gt;

&lt;p&gt;I don't &lt;em&gt;love&lt;/em&gt; Xcode. The amount of features is frightening and you never know where things are until you stumble upon them. But that's okay. It's a computer program, not your spouse. You can get over the inconvenience (if Xcode ever strikes you as inconvenient like it does for me). I put sticky notes with hotkeys on my wall because memorizing them is painful and not using them is even more painful. So learning Xcode feels kinda like a deal with the Devil in a way because you sacrifice your soul in exchange for increased productiveness.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thing 3: I'm Just Trying to be Objective, See?
&lt;/h1&gt;

&lt;p&gt;It might seem like Objective-C is an outdated language now and you don't need to touch it unless you want to work with legacy code. It's not really the case: the majority of iOS runtime is written in Objective-C, and so it's useful to understand its quirks and its programming model if you want to be efficient with these APIs. Even more so if you want to develop Mac apps:  some APIs seem so antiquated you wonder if it's even legal to use them in modern apps. Also some good libraries are written in Objective-C, and you will want to use them and understand their code as you debug weird issues that will eventually surface in your app.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thing 4: Architectures
&lt;/h1&gt;

&lt;p&gt;So. Many. Of. Them. Look at the job postings, some will want you to know MVVM, some others will require MVP, or MVVM-C, or VIP. Personally, VIPER makes me weep. In most codebases, you will write &lt;em&gt;a lot&lt;/em&gt; of classes and structs and protocols. Not because you want it or because it's logical and makes sense, but because that's how things are done. I may sound grumpy when I say it, but I'm actually a big fan of well-structured and organized code: it's just that it's a not very exciting topic that you still have to be proficient in.&lt;/p&gt;

&lt;p&gt;Hint: most architectures are variants of MVC. MVC is a classic and you should read the original MVC 1988 paper whether you're an iOS developer or not. I can't find a link right now, sorry.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thing 5: Swift is Getting Bigger Every Year
&lt;/h1&gt;

&lt;p&gt;Ah, I remember early Swift. The compiler was slow and stupid, new versions broke old code easily, there was no SPM, but the language was good and it got me hooked even if the dev experience was a bit compromised. Today the dev experience of Swift is brilliant. This came at the cost of the language itself becoming increasingly hard to master. So many things are hard to get right: memory management, concurrency, types (if your protocol has an &lt;code&gt;associatedtype&lt;/code&gt;, at some point it will be painful to use). And now Swift is even more complex: it has &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt;, macros, that thing where you put &lt;code&gt;any&lt;/code&gt; before a type name (I still haven't learned this feature well), and I suspect Swift will only get more complex down the line. More studying, yay! 📚&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;iOS is a cool platform, and you're a cool person if you're developing for it. Thanks for reading.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>listicle</category>
      <category>ios</category>
      <category>xcode</category>
    </item>
  </channel>
</rss>
