<?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>DEV Community: Alfredo Moraleja</title>
    <description>The latest articles on DEV Community by Alfredo Moraleja (@alfredo_moraleja_bfc6169c).</description>
    <link>https://dev.to/alfredo_moraleja_bfc6169c</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1526219%2F2a1a68d5-8a4e-46ed-b556-7ddb75657d96.png</url>
      <title>DEV Community: Alfredo Moraleja</title>
      <link>https://dev.to/alfredo_moraleja_bfc6169c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alfredo_moraleja_bfc6169c"/>
    <language>en</language>
    <item>
      <title>How to return to Python without repeating a beginner course</title>
      <dc:creator>Alfredo Moraleja</dc:creator>
      <pubDate>Thu, 20 Aug 2026 17:04:21 +0000</pubDate>
      <link>https://dev.to/alfredo_moraleja_bfc6169c/how-to-return-to-python-without-repeating-a-beginner-course-4i3b</link>
      <guid>https://dev.to/alfredo_moraleja_bfc6169c/how-to-return-to-python-without-repeating-a-beginner-course-4i3b</guid>
      <description>&lt;p&gt;Coming back to Python after working in another language—or after a long break—creates an awkward problem: beginner tutorials move too slowly, while advanced references assume your Python instincts are already fresh.&lt;/p&gt;

&lt;p&gt;A useful catch-up plan should rebuild those instincts in layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Refresh syntax through small decisions
&lt;/h2&gt;

&lt;p&gt;Do not spend days rereading syntax. Use short exercises that force you to choose between comprehensions, generators, unpacking, pattern matching, and ordinary control flow. The goal is not memorization; it is recovering fluency.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Revisit Python's object and data model
&lt;/h2&gt;

&lt;p&gt;Experienced developers often know how to make Python code work but still carry assumptions from Java, C#, JavaScript, or Go. Spend time on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mutability and aliasing&lt;/li&gt;
&lt;li&gt;equality versus identity&lt;/li&gt;
&lt;li&gt;iterators and generators&lt;/li&gt;
&lt;li&gt;context managers&lt;/li&gt;
&lt;li&gt;dataclasses and value boundaries&lt;/li&gt;
&lt;li&gt;dunder methods that support composable APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These topics explain why idiomatic Python looks different from a direct translation of another language.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Treat typing as API design
&lt;/h2&gt;

&lt;p&gt;Type hints are most useful when they clarify boundaries. Practice protocols, callables, generics, and narrow return types, but avoid adding annotations that merely repeat the implementation. A good exercise is to design a small public API first and then make several implementations satisfy it.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Learn concurrency from workload constraints
&lt;/h2&gt;

&lt;p&gt;Do not start by choosing a library. Start with the workload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;threads for blocking I/O and shared-memory coordination&lt;/li&gt;
&lt;li&gt;processes for CPU-bound isolation&lt;/li&gt;
&lt;li&gt;asyncio for large numbers of cooperative I/O tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then practice the failure cases: cancellation, deadlines, backpressure, task ownership, and shutdown. Production concurrency is mostly about what happens when work must stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Add production behavior explicitly
&lt;/h2&gt;

&lt;p&gt;A script becoming a service introduces new responsibilities. Practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bounded retries with jitter&lt;/li&gt;
&lt;li&gt;circuit breakers and dependency protection&lt;/li&gt;
&lt;li&gt;structured logging and useful metrics&lt;/li&gt;
&lt;li&gt;deterministic tests&lt;/li&gt;
&lt;li&gt;startup and shutdown ordering&lt;/li&gt;
&lt;li&gt;one clear graceful-shutdown deadline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important question is not only “Does it run?” but also “Can it fail, recover, and stop predictably?”&lt;/p&gt;

&lt;h2&gt;
  
  
  6. End every topic with an executable lab
&lt;/h2&gt;

&lt;p&gt;Reading creates recognition; small labs expose the gaps. Keep exercises short enough to finish in one sitting and finish each module with a realistic integration task.&lt;/p&gt;

&lt;p&gt;I built a free browser-based course around this sequence: &lt;strong&gt;Python Production Catch-up&lt;/strong&gt;. It contains 122 short lessons and executable labs covering syntax, object semantics, typing, exceptions, the data model, threads, processes, asyncio, cancellation, backpressure, retries, observability, testing, and graceful lifecycle design:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pythoncatchup.hola.cloud/" rel="noopener noreferrer"&gt;https://pythoncatchup.hola.cloud/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full disclosure: I created the course. I would especially value feedback from experienced developers on unclear explanations or production topics that deserve a deeper lab.&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>career</category>
    </item>
  </channel>
</rss>
