<?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: Adam Schmideg</title>
    <description>The latest articles on Forem by Adam Schmideg (@offcode).</description>
    <link>https://forem.com/offcode</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%2F227561%2Fc2ca84a5-a0a3-4d96-852f-d6c1e5197479.jpeg</url>
      <title>Forem: Adam Schmideg</title>
      <link>https://forem.com/offcode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/offcode"/>
    <language>en</language>
    <item>
      <title>The Grasshopper's Rebellion</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Sun, 26 May 2024 11:09:57 +0000</pubDate>
      <link>https://forem.com/offcode/the-grasshoppers-rebellion-4p8d</link>
      <guid>https://forem.com/offcode/the-grasshoppers-rebellion-4p8d</guid>
      <description>&lt;h2&gt;
  
  
  The grasshopper and the ants
&lt;/h2&gt;

&lt;p&gt;It was time for the weekly team meeting. Michael handed out printed copies of his presentation slides. There were many pages. Samantha felt how thick the stack was - 27 pages. She sighed quietly to herself.&lt;/p&gt;

&lt;p&gt;Michael began speaking about his presentation. Samantha nodded, pretending to listen carefully. But soon, her pen started moving by itself to draw on her notepad. Lines and shapes appeared. &lt;/p&gt;

&lt;p&gt;Samantha drew a bright green grasshopper playing a tiny violin. Around the grasshopper, she drew twelve ants marching in a line. The ants wore business suits and carried briefcases. It looked silly and funny. Samantha fit her drawings inside the boxes on a printed Excel spreadsheet page.&lt;/p&gt;

&lt;p&gt;Samantha's coworkers saw her doodling from the corners of their eyes. They smiled a little. Everyone knew Samantha's habit of doodling during meetings. They thought it was amusing, as long as Michael didn't notice.&lt;/p&gt;

&lt;p&gt;"Any other questions before we continue?" Michael's voice droned on.&lt;/p&gt;

&lt;p&gt;Suddenly, Michael's phone rang and made a buzzing sound. "Excuse me, I need to take this call." He left the meeting room. The coworkers looked at each other.&lt;/p&gt;

&lt;p&gt;Samantha kept doodling. She added a family of turtles to her scene. She did not see Michael come back into the room. &lt;/p&gt;

&lt;p&gt;"Sorry about that interruption, it was -" Michael stopped speaking. He looked at Samantha's notepad. Her colorful doodles were out in the open for anyone to see.&lt;/p&gt;

&lt;p&gt;No one said anything for an awkward, uncomfortable moment. Michael stared at the grasshopper playing violin and the ants dressed in suits. Samantha's coworkers waited silently to see how Michael would react.&lt;/p&gt;

&lt;p&gt;But Michael just cleared his throat. "Well then, where were we..." He acted like nothing unusual happened. &lt;/p&gt;

&lt;p&gt;The meeting continued. But Michael had clearly seen Samantha's doodles. Samantha did not know if he was okay with it or not. &lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking the silence
&lt;/h2&gt;

&lt;p&gt;The meeting was finally over. People started gathering their things and leaving the room. Samantha collected her notepad and pen. She hadn't touched her pen since Michael caught her doodling. &lt;/p&gt;

&lt;p&gt;Samantha was about to leave too, but Michael made a small gesture with his hand, asking her to stay behind. Some of her teammates noticed and glanced at her curiously as they filed out.&lt;/p&gt;

&lt;p&gt;Soon, it was just Samantha and Michael alone in the room. An awkward silence hung in the air.&lt;/p&gt;

&lt;p&gt;"So...why were you drawing during the presentation?" Michael asked, breaking the tension.&lt;/p&gt;

&lt;p&gt;Samantha didn't respond at first, unsure of how to explain herself.&lt;/p&gt;

&lt;p&gt;"Do you not find value in these status meetings?" Michael pressed. "The presentation covers important priorities and plans."&lt;/p&gt;

&lt;p&gt;"No, I understand the value," Samantha replied carefully. But her eyes shifted slightly, hinting there was more she wasn't saying.&lt;/p&gt;

&lt;p&gt;Michael could sense she wasn't being fully transparent. He pressed on, "Was there something about my presentation specifically that made you...distracted?"&lt;/p&gt;

&lt;p&gt;Samantha weighed how much to reveal. A certain phrase Michael used seemed to unlock her honesty. "I...can't always pay attention," she admitted.&lt;/p&gt;

&lt;p&gt;"Because it's boring?" Michael stated bluntly.&lt;/p&gt;

&lt;p&gt;Samantha knew she was caught. After the doodling incident, she figured it couldn't get any worse. "Yes," she confessed. "The presentations can be...quite boring."&lt;/p&gt;

&lt;p&gt;Samantha couldn't hold back any longer. The words came tumbling out. "Don't you find it ironic? You're always asking us for innovative, creative solutions. But then you plan it all out in spreadsheets using the same old, stale techniques that get called 'innovation best practices.'"&lt;/p&gt;

&lt;p&gt;She gestured to her doodled notepad. "This...this is how I tap into my real creativity. My doodles help me think differently, make unexpected connections. But I have to do it in secret, like it's something to be ashamed of."&lt;/p&gt;

&lt;p&gt;Michael furrowed his brow, considering her outburst. After a moment, he nodded slowly. "Okay, let's explore your approach then. If everyone just pursued what they found personally interesting, how would we ensure we actually deliver on what matters to our customers and stakeholders?"&lt;/p&gt;

&lt;p&gt;Samantha opened her mouth to respond, but Michael kept going. "If you want to draw little creatures, that's fine. But that's what hobbies are for - creative outlets separate from work." &lt;/p&gt;

&lt;p&gt;He leaned back in his chair. "I rebuild vintage motorcycles in my free time, for instance. It's my passion. But I don't mix that hobby with my professional responsibilities here. There's a line between interests and important work."&lt;/p&gt;

&lt;p&gt;Samantha felt her cheeks flush with a mix of embarrassment and defiance. Michael's dismissive attitude toward her doodling ignited something within her. This wasn't just a hobby to be compartmentalized.&lt;/p&gt;

&lt;p&gt;"My doodles ARE my work," she stated firmly. "They're how my mind explores problems and imagines new possibilities. Treating it as a separate 'hobby' is what stifles true innovation."&lt;/p&gt;

&lt;h2&gt;
  
  
  The CEO of the brain
&lt;/h2&gt;

&lt;p&gt;Michael could sense Samantha's defiance over treating her doodles as mere hobbies. He decided to take a different tack, tapping his knuckle on the polished conference table.&lt;/p&gt;

&lt;p&gt;"You know, this table is made of solid oak. Took years of patient growth for that oak tree to develop its hard, sturdy interior." He ran his hand along the smooth wood.&lt;/p&gt;

&lt;p&gt;Michael then pointed to his own forehead. "What do you think is behind this?" He raised an inquisitive eyebrow at Samantha.&lt;/p&gt;

&lt;p&gt;Before she could respond, he continued, "The frontal cortex - the mastermind behind our most advanced brain functions. It's the control center that allows us to plan, reason, and make conscious choices rather than just going with our first impulsive urges."&lt;/p&gt;

&lt;p&gt;He swiveled his chair to better engage Samantha. "Imagine it as the CEO of your brain - integrating information from all other regions to decide the best course of action. Without it, you'd just drift aimlessly based on whatever thought or stimuli captured your attention at the moment. The frontal cortex is what lets you concentrate on work instead of browsing YouTube."&lt;/p&gt;

&lt;p&gt;Michael swiveled his chair toward the glass windows overlooking a playground outside. A group of children shrieked with laughter, chasing each other across the jungle gym.&lt;/p&gt;

&lt;p&gt;"To a child, every moment is about following their interests. Playing, running around, doing whatever feels fun and stimulating in that instant." Michael mimed drawing in the air with an imaginary crayon.&lt;/p&gt;

&lt;p&gt;"They live totally in the present, their frontal cortexes all soft and malleable. That's why kids love to doodle and draw - it's an impulsive creative outlet with no deeper purpose."&lt;/p&gt;

&lt;p&gt;He turned to Samantha. "When was the last time you visited the dentist?"&lt;/p&gt;

&lt;p&gt;Samantha was caught off-guard. "Uh...six months ago, I think?"&lt;/p&gt;

&lt;p&gt;Michael nodded. "Exactly. We become adults. Our frontal cortexes mature, and we have to make hard decisions against our childish impulses."&lt;/p&gt;

&lt;p&gt;"A child would never willingly go to the dentist, because it's not fun. But we adults understand the important responsibilities - like basic hygiene and preventative care. We delay the gratification of eating sweets, because we know the consequences if we don't."&lt;/p&gt;

&lt;p&gt;Samantha couldn't help but smirk at the dentist analogy, though Michael's metaphor rang true.  &lt;/p&gt;

&lt;p&gt;"That's the crux of this dilemma. Your doodles may feel like creative indulgences. But I need my team to embrace the bigger picture - our professional obligations to this company and its customers. Even if that means... delaying gratification."&lt;/p&gt;

&lt;h2&gt;
  
  
  Balancing acts
&lt;/h2&gt;

&lt;p&gt;"But there are whole communities out there not based on these 'important' responsibilities you speak of," Samantha countered. "People who choose to live for their interests and passions, without being forced into pursuits they find dull or constricting."&lt;/p&gt;

&lt;p&gt;She leaned forward, a hint of wistfulness in her voice. "Don't you think the world would be a happier place if we gave the 'interesting' things a bigger share of our lives? Instead of always having to delay gratification for what society deems important?"&lt;/p&gt;

&lt;p&gt;Michael considered her point, nodding slowly. "You're not entirely wrong. With primitive hunter-gatherer tribes, that divide between interesting and important pursuits wasn't so starkly defined."&lt;/p&gt;

&lt;p&gt;"But their lives were a constant struggle for survival," he added pragmatically. "The agricultural revolution, when humans transitioned to settled societies, was in many ways the maturation of our species."&lt;/p&gt;

&lt;p&gt;Michael tented his fingers, gathering his thoughts. "It allowed us to delay gratification, plan long-term, and ultimately build civilization's greatest achievements. As glorious as a nomadic existence following your every whim may sound, it lacks the stability and focus to reach our full potential."&lt;/p&gt;

&lt;p&gt;He fixed Samantha with a measured look. "The frontal cortex's ability to override impulsive urges in favor of responsibilities - as tedious as they can feel at times - is what separates us from plucky grasshoppers endlessly playing their violins while the industrious ants do the hard work of preparing for the future."&lt;/p&gt;

&lt;p&gt;Samantha: But there are exceptions in our current society to this rigid separation of interests from responsibilities. What about people with ADHD or other neurological conditions? For them, it can be extremely difficult, maybe even impossible, to always prioritize what's deemed important over their personal interests and creative pursuits.&lt;/p&gt;

&lt;p&gt;Michael: That's a fair point. I can see how brain chemistry differences would make delaying gratification and overriding impulsive urges towards interests more challenging.&lt;/p&gt;

&lt;p&gt;Samantha: Exactly. And what about artists, journalists, entertainers? Their work is literally following and expressing their creative interests and passions. Yet they're often considered less serious or trustworthy for that.&lt;/p&gt;

&lt;p&gt;Michael: Well, I would argue that for truly successful creatives at the highest levels, their interests have effectively become important professional and financial responsibilities.&lt;/p&gt;

&lt;p&gt;Samantha: Sure, but that's only after they've "made it" and their interests become work obligations. Before that, while they're still struggling, society tends to dismiss their passions as frivolous indulgences distracting from more important practical concerns.&lt;/p&gt;

&lt;p&gt;Michael: I can't deny there's a double standard there. We celebrate creative success after the fact, but are quick to criticize those same pursuits as impractical whimsies beforehand.&lt;/p&gt;

&lt;p&gt;Samantha: It's an unfair, privileged way of looking at it. The financially stable can more easily embrace their interests over responsibilities without facing the same potential consequences as others.&lt;/p&gt;

&lt;p&gt;Michael was silent for a moment, taking in Samantha's perspective. He nodded slowly, his expression softening. "You're right, I haven't fully considered the nuances." Michael leaned forward. "If we're going to truly question this dichotomy between responsibilities and creative interests, what would your suggestion be? How could we create more space for 'interesting' work and innovative pursuits, while still meeting our professional obligations?"&lt;/p&gt;

&lt;p&gt;He spread his hands in a gesture of openness. "I may have been too dismissive earlier. But I'm listening now - what's your vision for finding a better balance?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawing attention
&lt;/h2&gt;

&lt;p&gt;Samantha sat at her desk, watching at the meeting agenda. She had drawn a small grasshopper surrounded by dozens of ants in business suits, each holding a tiny briefcase. The office was noisy with the sound of keyboards, ringing phones, and people talking.&lt;/p&gt;

&lt;p&gt;Michael’s door opened with a quiet creak. He stepped out, his eyes scanning the room until they landed on Samantha. He gave a brief nod, then went back into his office. Samantha felt a rush of nervous energy. She gathered her sketches and sketchbook, slipping them into a folder.&lt;/p&gt;

&lt;p&gt;As she walked towards Michael’s office, the sounds of the office faded. Her footsteps seemed louder in her ears. She passed her colleagues, who were busy at their desks, not noticing her. The air felt heavier, filled with anticipation.&lt;/p&gt;

&lt;p&gt;She stopped at Michael’s door, took a deep breath, and knocked lightly before pushing it open. Inside, the office was plain and practical, the fluorescent lights casting a harsh glare. Michael sat behind his desk, a fortress of paper and files, his expression serious.&lt;/p&gt;

&lt;p&gt;Samantha stepped inside, the door clicking shut behind her. The room felt smaller, the walls closer. She approached the desk and placed her folder on it. Michael watched her with a calm, unreadable gaze, his hands folded neatly in front of him.&lt;/p&gt;

&lt;p&gt;She opened the folder and spread out her sketches. The grasshopper, surrounded by ants in business suits, was a tiny act of rebellion against the boring meetings. Samantha straightened, meeting Michael’s eyes. The room was silent except for the distant hum of the office outside.&lt;/p&gt;

&lt;p&gt;Michael picked up one of the sketches, examining it closely. His face remained impassive, but there was a flicker of something in his eyes—curiosity, perhaps, or a slight hint of amusement. Samantha stood still, her heart pounding, waiting for his reaction.&lt;/p&gt;

&lt;p&gt;Michael set the sketch down and looked at her. For a moment, the distance between manager and employee, the line between duty and creativity, seemed to blur. Samantha felt the weight of the moment, the fragile possibility of change hanging in the air.&lt;/p&gt;

&lt;p&gt;He leaned back in his chair, tapping a finger on the desk. Samantha held her breath, ready for whatever came next. Samantha snapped her fingers. Somewhere, a projector clicked on, and the image of the grasshopper and the ants appeared on the wall behind Michael, magnified ten times. One of the ants' briefcases landed right over Michael's face, who turned in his swivel chair and watched the presentation on the wall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond boredom: a presentation
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. Introduction
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: Integrate interestingness of tasks into the Agile process to enhance engagement and motivation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Roles&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Product Manager&lt;/strong&gt;: Defines the importance and business value of tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interestingness Owner&lt;/strong&gt;: Explains why tasks are interesting and ensures tasks are engaging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Members&lt;/strong&gt;: Vote on the interestingness of tasks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Roles and Responsibilities
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Product Manager (PM)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Prioritize tasks based on business needs and deadlines.&lt;/li&gt;
&lt;li&gt;Communicate the importance and customer/business value of each task.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interestingness Owner (IO)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Assess tasks for their interestingness and potential for creative problem-solving.&lt;/li&gt;
&lt;li&gt;Present tasks in a way that highlights their interesting aspects.&lt;/li&gt;
&lt;li&gt;Modify tasks to increase their interestingness if they are initially deemed dull.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Members&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Vote on the interestingness of tasks during planning sessions.&lt;/li&gt;
&lt;li&gt;Provide feedback on what aspects make a task interesting or dull.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Task Evaluation Process
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task Identification&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Tasks are initially identified and listed by the Product Manager.&lt;/li&gt;
&lt;li&gt;Each task includes a description, priority, estimated effort, and deadline.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interestingness Assessment&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;The Interestingness Owner reviews each task to identify and highlight interesting aspects.&lt;/li&gt;
&lt;li&gt;Tasks are presented to the team with both business value (by PM) and interestingness (by IO).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Voting on Interestingness
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voting Mechanism&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;During sprint planning or task review sessions, team members vote on the interestingness of each task.&lt;/li&gt;
&lt;li&gt;Voting scale: Interesting (Yes) or Dull (No).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marking Tasks&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;A task is marked as interesting if at least one team member votes 'Yes'.&lt;/li&gt;
&lt;li&gt;Tasks with unanimous 'No' votes are flagged for further review.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Managing Dull Tasks
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review by Interestingness Owner&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Tasks marked as dull by all team members are reviewed by the Interestingness Owner.&lt;/li&gt;
&lt;li&gt;The IO attempts to identify ways to make these tasks more engaging.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modification or Removal&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;If the IO can enhance the interestingness, the task is modified and re-presented to the team.&lt;/li&gt;
&lt;li&gt;If the task remains dull but is still important, it may be revisited in subsequent sessions.&lt;/li&gt;
&lt;li&gt;Tasks that cannot be made interesting and are not crucial may be removed from the list.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Maybe
&lt;/h2&gt;

&lt;p&gt;When Samantha finished her presentation, the room became very quiet. The light from the projector made strange shapes on the walls, and everyone looked serious. Michael was at the front, looking like he was thinking very hard. &lt;/p&gt;

&lt;p&gt;Samantha felt both excited and scared. She really wanted Michael to like her idea, but she wasn't sure if he did. She looked around the room, and all her colleagues were there, even though she had started talking just to Michael. It made her feel nervous, like all eyes were on her.&lt;/p&gt;

&lt;p&gt;After Samantha concluded her presentation, the room fell silent. The projector's light danced across the walls, adding to the tension in the air. Michael sat at the head of the table with an unreadable expression.&lt;/p&gt;

&lt;p&gt;Samantha's heart was beating fast as she waited for Michael's response. She had put a lot of effort into this proposal, hoping to change their approach to work. But now, she was uncertain if her ideas would be accepted or rejected.&lt;/p&gt;

&lt;p&gt;Michael leaned forward and looked at the gathered team. "Thank you, Samantha, for sharing your ideas," he began, speaking in a calm tone. "Your perspective is certainly thought-provoking."&lt;/p&gt;

&lt;p&gt;Everyone in the room waited with anticipation for Michael's decision. Samantha held her breath, hoping for a positive outcome.&lt;/p&gt;

&lt;p&gt;"But," Michael continued cautiously, "as with any new idea, there are risks and uncertainties to consider."&lt;/p&gt;

&lt;p&gt;Samantha felt a little disappointed, but she did not want to give up on her vision. She knew from the start that change would not be easy, but she was ready to fight for her ideas.&lt;/p&gt;

&lt;p&gt;"As a team," Michael went on, "we need to carefully weigh the potential benefits against the potential drawbacks of integrating new ideas into our work process."&lt;/p&gt;

&lt;p&gt;Samantha nodded slowly, thinking about questions and doubts. Had she failed to explain her case clearly enough? Were her ideas too different from their current practices?&lt;/p&gt;

&lt;p&gt;But despite the uncertainty, Samantha felt determined. She may not have convinced them today, but she refused to give up on her vision. She would continue to promote creativity and innovation, even if others doubted or were skeptical.&lt;/p&gt;

&lt;p&gt;As the meeting ended and her colleagues left, Samantha stayed for a moment and exchanged a meaningful look with Michael. In that brief moment, she saw a hint of curiosity in his eyes, a silent acknowledgment that her ideas might have some value.&lt;/p&gt;

&lt;p&gt;As Samantha gathered her notes and sketches, she couldn't shake the feeling that this was only the beginning of something truly remarkable.&lt;/p&gt;

</description>
      <category>agile</category>
      <category>leadership</category>
      <category>creativity</category>
    </item>
    <item>
      <title>Love at First Compile</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Mon, 08 Jan 2024 15:51:44 +0000</pubDate>
      <link>https://forem.com/offcode/love-at-first-compile-2ji6</link>
      <guid>https://forem.com/offcode/love-at-first-compile-2ji6</guid>
      <description>&lt;p&gt;Not only with women have I fallen in love,&lt;br&gt;
but with programming languages too.&lt;br&gt;
Embarrassing to look back now&lt;br&gt;
and admit I was in love with Java.&lt;br&gt;
It started with a flirt in the office.&lt;/p&gt;

&lt;p&gt;We were a Microsoft shop, &lt;br&gt;
dedicated to everything Windows and Visual Basic,&lt;br&gt;
everything click and drag-and-drop.&lt;br&gt;
Maybe this is why I got excited&lt;br&gt;
when I heard a lecture about Java at the university.&lt;br&gt;
White code written in chalk on the blackboard.&lt;br&gt;
Almost like typing in a terminal.&lt;br&gt;
Background color should not play a role&lt;br&gt;
when choosing between programming languages.&lt;br&gt;
The logos of the companies behind them should be irrelevant.&lt;br&gt;
But Sun, the creator of Java, designed a magical logo&lt;br&gt;
that read Sun from all four directions.&lt;br&gt;
A sexy logo in the finest shade of purple.&lt;br&gt;
Besides personality, we fall in love&lt;br&gt;
with brown eyes, with blue eyes.&lt;/p&gt;

&lt;p&gt;It was half past five, the office&lt;br&gt;
was empty, except for me and my friend.&lt;br&gt;
I entered sun.com/java in the browser,&lt;br&gt;
an easy to remember URL.&lt;br&gt;
The link to the installer sat on the top of the page,&lt;br&gt;
no need to scroll down, just click and wait.&lt;br&gt;
Modern technology always takes long to download.&lt;br&gt;
The proverbial fifteen minutes of&lt;br&gt;
"make a coffee, smoke a cigarette, and it will be ready."&lt;br&gt;
Downloading was not enough, you had to install it.&lt;br&gt;
Answer questions that should not be asked.&lt;br&gt;
I did not know yet how many times&lt;br&gt;
I would answer these same questions&lt;br&gt;
and accept the default in every case.&lt;/p&gt;

&lt;p&gt;We used an integrated environment to write BASIC code,&lt;br&gt;
the keywords were displayed&lt;br&gt;
in bold and in a darker shade of carmine.&lt;br&gt;
Here is how you count to ten without using your fingers:&lt;br&gt;
&lt;code&gt;FOR I = 1 TO 10&lt;/code&gt;&lt;br&gt;
And imagine the colors.&lt;br&gt;
You click on the yellow arrow icon to run the program.&lt;br&gt;
We had no editor for Java.&lt;br&gt;
It probably didn't even exist yet, the language was so new.&lt;br&gt;
We used what we had.&lt;br&gt;
Our BASIC editor automatically checked our Java code&lt;br&gt;
and highlighted all the errors.&lt;br&gt;
Imagine writing in German&lt;br&gt;
and running it through an English spell checker.&lt;br&gt;
I knew the code was correct,&lt;br&gt;
I just copied it from the notes I had taken at the class.&lt;/p&gt;

&lt;p&gt;Clicking the yellow arrow wouldn't make sense either.&lt;br&gt;
I had to leave our integrated environment behind&lt;br&gt;
and open a terminal.&lt;br&gt;
Type &lt;code&gt;javac Counter.java&lt;/code&gt;.&lt;br&gt;
The whole world was black and white now,&lt;br&gt;
the whole screen.&lt;br&gt;
The command I typed and the error message&lt;br&gt;
I received a few seconds later.&lt;br&gt;
A semicolon is missing on line 8.&lt;br&gt;
Go back to the editor and fix it.&lt;/p&gt;

&lt;p&gt;It took us more than half an hour to make our first Java program work&lt;br&gt;
and do some very basic stuff.&lt;br&gt;
Count to ten and print the numbers.&lt;br&gt;
This doesn't sound like the beginning of a love story.&lt;br&gt;
But what is love if not sweat and tears?&lt;br&gt;
I may tell you later about the tears.&lt;/p&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>terminal</category>
      <category>nostalgia</category>
    </item>
    <item>
      <title>Espresso Yourself: Explain Object-Oriented Programming to Your Barista</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Thu, 14 Dec 2023 19:13:56 +0000</pubDate>
      <link>https://forem.com/offcode/espresso-yourself-explain-object-oriented-programming-to-your-barista-1n53</link>
      <guid>https://forem.com/offcode/espresso-yourself-explain-object-oriented-programming-to-your-barista-1n53</guid>
      <description>&lt;p&gt;"How many times do you have to draw a heart with milk foam before you get it right?" I ask.&lt;/p&gt;

&lt;p&gt;The barista at my local cafe gazes upwards, pondering. "Took me about thirty, maybe fifty tries," she finally says. "The thing you really need to focus on is..." She then dives into a brief yet insightful explanation about this particular skill in the art of coffee making.&lt;/p&gt;

&lt;p&gt;Sharing your enthusiasm with others can double the joy. But when you can't, it often leads to a sense of loneliness.&lt;/p&gt;

&lt;p&gt;Alright, now it's my turn to share something. It's time for me to explain object-oriented programming to her.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not all dates are the same
&lt;/h2&gt;

&lt;p&gt;Big ideas like Darwin's evolution and Einstein's relativity theory often remind us of what we feel we should know. But honestly, I haven't delved into these topics deeply. Books on such subjects gathered dust on my shelf, unopened.&lt;/p&gt;

&lt;p&gt;Then came Object-Oriented Programming (OOP). Intrigued, I bought a book about it, only to be baffled by jargon like classes, objects, and inheritance. The more I read, the less I understood, feeling lost in a loop of concepts. Frustrated, I shelved the book next to an unread tome on quantum theory.&lt;/p&gt;

&lt;p&gt;It was a standard application – the kind with windows, text fields, dropdown menus. There was an OK button that set things in motion and a Cancel button that, predictably, did not. To a user, it was as ordinary as any software they'd encounter in their daily digital life. &lt;strong&gt;But for me, this was new ground, my first functional software from the initial line of code to the last&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The palette in the editor was like a toolbox filled with all the gadgets I needed. If I ever needed something new, I could theoretically create it, but figuring out how to add a new component to that palette was a skill way beyond my level – that was advanced stuff, meant for the pros.&lt;/p&gt;

&lt;p&gt;Then, a colleague pointed out something: the system I was working with was built on object-oriented programming principles. The text fields, the buttons, the windows – they were all "objects."&lt;/p&gt;

&lt;p&gt;I revisited the OOP book, and while some parts still baffled me, others began to click. Yet, it mostly echoed what I had already figured out using the program's components. &lt;/p&gt;

&lt;p&gt;As I worked on the application, I initially convinced myself that the pre-installed components were sufficient. But &lt;strong&gt;deep down, I knew this wasn't entirely true&lt;/strong&gt;, and I had to face that reality. A key feature of the application allowed users to select a date range – something you'd typically do when booking a hotel room or a flight, choosing both a start and an end date. The challenge was, there wasn't a single component designed for this specific task.&lt;/p&gt;

&lt;p&gt;What I had at my disposal was a basic date selector. To create a makeshift solution, I placed two of these side by side – one labeled as the 'start date' and the other as the 'end date'. It was a quick fix, but far from ideal. It was clunky and not user-friendly.&lt;/p&gt;

&lt;p&gt;This approach was also a headache for development. Every time I needed a date range selector elsewhere in the application, I found myself copying and pasting this pair of date selectors. This process involved not just the components themselves but also tweaking the associated code to fit the new context. It was tedious and error-prone. More than once, I caught myself in a situation where, if I missed updating a reference in the code, it led to confusing outcomes. Imagine booking a flight and then a hotel room, and then when you decide to change the end date for your hotel stay, you accidentally end up modifying your flight schedule instead. It was clear that this makeshift solution was not just inelegant; &lt;strong&gt;it was fundamentally flawed&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meeting Nemo
&lt;/h2&gt;

&lt;p&gt;In the deepest point of my journey, the kind where you might expect to meet a wise man, I met Nemo. But he was far from the archetypal sage in appearance. He was no captain from a Jules Verne novel, nor a fish, nor did he fit the typical image of a hero. Nemo was a bulky man in his mid-thirties, with a bald spot that he seemed to casually, almost unintentionally, try to cover with strands of his uncombed hair. At first glance, he didn't strike you as the kind of person who'd make a profound impact, but as I would soon learn, appearances can be deceiving, especially in the world of programming.&lt;/p&gt;

&lt;p&gt;From self-appointed gurus like Steve Jobs, &lt;strong&gt;you often hear that the key to success is focus&lt;/strong&gt;. The mantra is simple: concentrate on one thing and one thing only. Everything else, no matter how tempting or appealing, should be disregarded if it doesn't align with that singular focus. This philosophy advocates for a laser-like concentration, cutting away distractions and peripheral interests to hone in on what truly matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nemo was different, maybe even the opposite of what you'd expect from the Steve Jobs type.&lt;/strong&gt; Back then, Jobs wasn't the big name he is now, and I doubt Nemo paid much attention to his ideas about focusing on just one thing. Nemo was all over the place, in a good way. One week, he'd be all about script languages, telling everyone how great they were. Then, a month later, you'd find him talking up the serious, type-safe languages. He was always trying something new at work. He'd put together a rough prototype of an idea, get everyone excited about it, and then, just like that, he'd be onto something else. He was like a kid in a candy store, always looking for the next sweet thing to try.&lt;/p&gt;

&lt;p&gt;The first time I met Nemo, he was really into object-oriented programming. It was unusual for him to stick with one thing for so long, but he was really excited about it. He was so into it that he put together a whole day workshop, just to talk about it and show everyone what he could do with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making coffee the object-oriented way
&lt;/h2&gt;

&lt;p&gt;Nemo kicked off the workshop with something unexpected. He pointed to the coffee maker in the room, a pretty ordinary-looking machine that you wouldn't give a second glance normally. But there was something about the way he looked at it, full of excitement, that made us all take notice. It wasn't anything fancy – just your regular coffee maker, a bit worn from use. Yet, I still remember exactly how it looked, because that day, Nemo turned it into our first lesson in Object-Oriented Programming (OOP), showing us how even the most everyday things can open up a world of complex ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Generic Idea of a Coffee Maker (Class)&lt;/strong&gt;: In OOP, we start with a 'class', which is like a blueprint. (Think of it as the Platonic idea of a coffee maker if you are philosophically inclined.) This class defines what a coffee maker is and what it can do. It doesn't represent a specific coffee maker in your kitchen but the general concept of what any coffee maker should be like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capabilities of the Coffee Maker (Methods)&lt;/strong&gt;: In our coffee maker class, we define 'methods', which are the actions that any coffee maker can perform. For example, we might have methods like &lt;code&gt;addWater()&lt;/code&gt;, &lt;code&gt;addCoffee()&lt;/code&gt;, or other actions like &lt;code&gt;turnOn()&lt;/code&gt; and &lt;code&gt;turnOff()&lt;/code&gt;. These methods are like instructions that tell the coffee maker what to do.&lt;/p&gt;

&lt;p&gt;The most important method might be &lt;code&gt;makeCoffee()&lt;/code&gt;. When this method is called on a coffee maker object, it uses the water and coffee added to brew a cup of coffee. It’s like giving a command to the coffee maker to perform its main function.&lt;/p&gt;

&lt;p&gt;Continuing with Nemo's explanation, he delved deeper into the workings of the coffee maker as an example of Object-Oriented Programming. "If we peek inside the &lt;code&gt;makeCoffee()&lt;/code&gt; method," he explained, "you'll find that it's calling other methods like &lt;code&gt;brew()&lt;/code&gt;, &lt;code&gt;getWater()&lt;/code&gt;, and &lt;code&gt;getCoffee()&lt;/code&gt;. These are the coffee maker's internal processes, its own business."&lt;/p&gt;

&lt;p&gt;He emphasized that in OOP, this is a key concept. Some capabilities of an object, like our coffee maker, are exposed to the user – these are the methods you can interact with directly, like &lt;code&gt;addWater()&lt;/code&gt; or &lt;code&gt;makeCoffee()&lt;/code&gt;. These are akin to the buttons and levers on the actual machine. However, there are other methods, like &lt;code&gt;brew()&lt;/code&gt;, which are part of the coffee maker's internal mechanics. They're crucial to how the coffee maker works, but as a user, or in programming terms, as someone using the coffee maker object, you don't need to worry about these internal methods.&lt;/p&gt;

&lt;p&gt;"This distinction," Nemo continued, "is about what the user (or other parts of the program) needs to see and interact with, versus what the object manages internally. It's like knowing you can press a button to start the coffee maker, but not needing to know exactly how the heating element works or how the water is pumped through the grounds. In OOP, we encapsulate these details, exposing only what's necessary and keeping the rest tucked away as part of the object's internal implementation." &lt;/p&gt;

&lt;p&gt;Nemo then posed an intriguing question to the group, "But what happens when you press the 'make coffee' button? How much coffee does it produce? And what will it taste like?" He smiled as he saw the puzzled looks around the room. "You see, these questions can't be answered by the coffee maker itself. From its perspective, those details are &lt;a href="https://en.wikipedia.org/wiki/Somebody_else%27s_problem"&gt;somebody else's problem&lt;/a&gt;."&lt;/p&gt;

&lt;h2&gt;
  
  
  Somebody else's problem
&lt;/h2&gt;

&lt;p&gt;He explained further, "When you call the &lt;code&gt;makeCoffee()&lt;/code&gt; method on our coffee maker object, it doesn't just start a process; it actually returns another object – a coffee object. Yes, in the world of OOP, the coffee it makes is an object as well."&lt;/p&gt;

&lt;p&gt;Nemo continued, "This coffee object has its own methods. For example, there's a &lt;code&gt;getServings()&lt;/code&gt; method, which returns the number of servings the coffee maker has produced. And there's another method, &lt;code&gt;getTaste()&lt;/code&gt;, which might give you an idea about the flavor of the coffee. These methods belong to the coffee object, not the coffee maker. It’s a way of organizing our program so that each object has its own responsibilities. The coffee maker makes the coffee, but the coffee object itself can tell you more about its quantity and quality."&lt;/p&gt;

&lt;p&gt;Nemo shared a personal anecdote to further illustrate his point. "I have a coffee maker at home," he said. "It's similar to this one, but there are some key differences." He described his own machine, an expensive Italian model, explaining that unlike the one in the workshop room which used ground coffee, his at home took whole roasted beans and ground them itself. However, he pointed out, the process of adding water was identical in both machines – each had a container that needed to be filled with water.&lt;/p&gt;

&lt;p&gt;"This brings us to a crucial decision in programming," Nemo continued, addressing the room but somehow, it felt like he was speaking directly to me. "When coding for these coffee makers, you have two options. The first is to copy the &lt;code&gt;addWater()&lt;/code&gt; code from one coffee maker to the other. But as some of you might know," he glanced in my direction, "this approach can be tedious and prone to errors." I nodded, thinking back to my struggles with the date selection feature.&lt;/p&gt;

&lt;p&gt;"But," he went on, "programmers have a principle they like to follow – it's called &lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY, or 'Don't Repeat Yourself'&lt;/a&gt;. The idea is to avoid repetition wherever possible." He then introduced a concept that was new to me but made immediate sense – class inheritance. "You can have a general &lt;code&gt;CoffeeMaker&lt;/code&gt; class that includes the &lt;code&gt;addWater()&lt;/code&gt; method. Then, you can create subclasses like &lt;code&gt;SimpleCoffeeMaker&lt;/code&gt; and &lt;code&gt;FancyItalianCoffeeMaker&lt;/code&gt;. Both of these will inherit the &lt;code&gt;addWater()&lt;/code&gt; method from the general class, and it will work the same way in both."&lt;/p&gt;

&lt;p&gt;Nemo then explained a subtlety about the &lt;code&gt;makeCoffee()&lt;/code&gt; method. "In the general &lt;code&gt;CoffeeMaker&lt;/code&gt; class, &lt;code&gt;makeCoffee()&lt;/code&gt; is just a placeholder. It doesn't actually do anything by itself. The specifics of how coffee is made differ between machines, so it's up to the subclasses to define their own &lt;code&gt;makeCoffee()&lt;/code&gt; method." It's somebody else's problem again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The date range selector
&lt;/h2&gt;

&lt;p&gt;Nemo's explanation opened my eyes to a new way of seeing not just programming, but the world around me. He showed us that virtually anything could be modeled in terms of objects and methods within the framework of Object-Oriented Programming. It was like discovering a new language to describe and interact with the environment around us.&lt;/p&gt;

&lt;p&gt;"There are hierarchies of classes," Nemo continued, his enthusiasm infectious. "In these hierarchies, classes inherit methods from their parent classes. This is the beauty of OOP – it mirrors the natural world. Just like in families where children inherit traits from their parents, in programming, subclasses inherit methods from parent classes."&lt;/p&gt;

&lt;p&gt;"And remember," Nemo emphasized, "all these methods we talk about, they operate on objects. An object is an instance of a class, and it's the cornerstone of OOP. It's a self-contained entity with its own attributes and behaviors."&lt;/p&gt;

&lt;p&gt;As Nemo elaborated on these concepts, I began to see the power of this approach. By breaking down complex systems into smaller, manageable objects, and by establishing a clear hierarchy where methods and properties could be inherited, &lt;strong&gt;we could model the whole world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After that workshop, I went home with my head full of new ideas. I had always thought that adding a new component to the Delphi palette was some kind of high-level magic, something way beyond my skills. But that night, I sat down and went through the entire Delphi documentation about adding components. I read and read, and as I did, everything started to fall into place. By the time it was midnight, what had seemed like magic before now made perfect sense. I was so pumped up with excitement that I could hardly sleep.&lt;/p&gt;

&lt;p&gt;The next morning, I got up way earlier than usual, around 7 am, buzzing with energy. I got straight to my computer and began working on creating my own date range picker component. Within just a few hours, I had it figured out and added it to the Delphi palette. It felt amazing. This task that I had once thought was too complex for me was now done, clean and efficient. No more moving code around from one place to another.&lt;/p&gt;

</description>
      <category>oop</category>
      <category>objectorientedprogramming</category>
      <category>tutorial</category>
      <category>story</category>
    </item>
    <item>
      <title>Escape Key: Remote Work Without a Laptop</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Sun, 03 Dec 2023 11:58:57 +0000</pubDate>
      <link>https://forem.com/offcode/escape-key-remote-work-without-a-laptop-4hic</link>
      <guid>https://forem.com/offcode/escape-key-remote-work-without-a-laptop-4hic</guid>
      <description>&lt;h2&gt;
  
  
  'H' 'e' 'l' 'l' 'o'
&lt;/h2&gt;

&lt;p&gt;Back in the day, sending a simple "Hello" on my old cell phone was like playing an advanced version of Morse code. Each letter was a mini adventure on the &lt;a href="https://en.wikipedia.org/wiki/T9_(predictive_text)"&gt;numeric keypad&lt;/a&gt;. I'd start the journey by tapping '4' twice – a light tap-tap, pause, envisioning the 'H' popping up on the tiny screen. Next, '3' needed its share of attention, a double tap for the 'e'. Ah, but then came the 'l's, the true test of patience. Tap '5', wait, tap again, wait, and tap one more time – that's one 'l' down. Repeat the whole dance again for the second 'l'. By the time I got to '6' for the 'o', tapping it thrice felt like a little victory.&lt;/p&gt;

&lt;p&gt;Most phones didn't have a feature for taking notes. But considering how tedious it was to type even a simple message, it's understandable no one was missing it. We stuck to what was manageable – quick texts and the occasional 'LOL' – and left the note-taking to the good old pen and paper.&lt;/p&gt;

&lt;p&gt;So, when I packed my bags for a trek in the Himalayas, my old cell phone came along for the ride. I took it 'just in case,' though I wasn't exactly sure what emergency would justify the astronomical roaming charges. It sat buried deep in my backpack, more of a comforting thought than a practical tool. For the real business of recording my journey, I relied on something far more tangible and less tedious to use: a black hard-cover notebook.&lt;/p&gt;

&lt;p&gt;At 3300 meters, high above the world in a Himalayan hostel, I found a quiet spot in the cafe area to settle with my morning ritual. The warmth of the fresh chai in my hands contrasted with the crisp mountain air. I opened my black hard-cover notebook, and began to jot down my thoughts.&lt;br&gt;
But then, mid-sentence, I stopped. My pen hovered over the page as something caught my attention. It wasn’t the majestic view of the mountains or the usual buzz of the hostel; it was something else, something that starkly contrasted with my analog approach to capturing memories.&lt;/p&gt;

&lt;p&gt;My gaze drifted to a man by the window, comfortably seated at what was undoubtedly the best spot in the cafe, offering a commanding view of the mountains. He reached into the deep pockets of his utility vest, first pulling out a Palm Pilot, then a foldable keyboard. With a practiced ease, he unfolded the keyboard on the table, revealing a slot into which he expertly slid the Palm Pilot.&lt;/p&gt;

&lt;p&gt;What is a &lt;a href="https://en.wikipedia.org/wiki/Palm_(PDA)"&gt;Palm Pilot&lt;/a&gt;? &lt;strong&gt;It was the Lamborghini of handheld devices&lt;/strong&gt;, resembling what we might now see as a bulky prototype of a future smartphone (keep in mind, this was 6-7 years before the first iPhone made its debut). Though it couldn't make phone calls, the Palm Pilot boasted a range of features that were revolutionary at the time. It had a modest-sized screen, a calendar to manage appointments, a variety of games, and yes, even a note-taking app.&lt;/p&gt;

&lt;p&gt;Using the Palm Pilot's note-taking app was an experience in itself. You had to use a stylus, carefully writing out each letter one at a time on its touchscreen. Despite this seeming limitation, using the device felt like operating a high-end luxury car. It wasn't just about the functionality; it was the speed, the elegance of its design, and, not to forget, its price tag. Witnessing someone use a Palm Pilot with a portable keyboard in the remote Himalayas was like watching magic squared.&lt;/p&gt;

&lt;p&gt;I didn't long for the money to afford such a device. Instead, what I truly envied was the freedom it represented – the ability to break free from being tied to a specific location. It was the notion of boundless mobility that captivated me, not the gadget itself. The real dream was being able to write "Hello world" from anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  The clock strikes five
&lt;/h2&gt;

&lt;p&gt;She stood up suddenly, breaking the usual stillness of our office. As she headed for the door, her chair spun a little in her wake. Her regular, precise exit was like clockwork – always at 5 PM, never a minute later. We, a small band of programmers, watched this daily ritual from our corner, a nest of screens and scattered coffee cups.&lt;/p&gt;

&lt;p&gt;There was something amusing about it, almost like watching a scene from an old movie where everyone's life is timed to the second. We glanced at our own screens, confirming the time: 5:00 PM on the dot. It was like she was programmed to leave with the precision of the systems we coded daily. In that moment, she seemed less like a colleague and more like a symbol of the very thing we had escaped - a slave to the job and the clock, bound by a routine that dictated her every move.&lt;/p&gt;

&lt;p&gt;As the door shut behind our punctual colleague, we shared a knowing look. It was our daily signal to shift gears. I reached for the old stereo we had salvaged from a throw-away pile, and I pressed play. The quirky, electronic beats of Orbital’s “Halcyon On and On” filled the room, a 90s anthem that somehow became our unofficial soundtrack. It was niche, a little weird, but so were we.&lt;/p&gt;

&lt;p&gt;We were your typical nerds - a bunch of programmers who got excited about coding and solving tough puzzles. We kicked off our shoes, embracing that nerdy stereotype. There’s something fun about &lt;strong&gt;being the kind of people who work better barefoot&lt;/strong&gt;, and we totally embraced it.&lt;/p&gt;

&lt;p&gt;Our corner of the office was less a workspace and more a haven for free thought and creativity - cluttered, chaotic, and undeniably ours. Amidst the tangle of wires and stacks of books on programming, an extra-sized family pizza box sat on a side table from a few days back. It wasn’t just about being different for the sake of it. We had earned our stripes, or rather, our freedom. We were trusted to take on the task of developing a government portal - a job that came with its fair share of headaches and all-nighters. We could work in our own way because they trusted us to get things done.&lt;/p&gt;

&lt;p&gt;You know the feeling of getting up just before ten, leisurely making a cup of coffee, and taking it out to the balcony – admittedly, it's a really small balcony, but it does the job. Standing there, sipping your coffee, you watch the people in the floors above going about their morning routines. There's a sense of peace in this moment, a feeling of having all the time in the world. For a moment, I pondered skipping work for the day, but the thought of finishing the header of our portal with a new, exciting technology pulled me back to reality.&lt;/p&gt;

&lt;p&gt;You may be familiar with this feeling now, but back then, it was a rare luxury. While I was enjoying my coffee on the balcony, most people were already seated at their desks in their offices. My friend used to call them "the ants.". &lt;strong&gt;The ants are going to work&lt;/strong&gt;. They moved in a steady stream, each person a tiny part of a larger, busier world, while I observed from above.&lt;/p&gt;

&lt;p&gt;Reflecting on it now, it might come off as a bit arrogant. I never actually called those office workers 'ants' out loud. It was more of an amusing thought I kept to myself during my walks to the office. This idea was my little secret, bringing a subtle smile to my face as I moved through the busy morning crowds. I wasn't aware of just how lucky I was. To me, it felt like the natural way of things, the way life was supposed to be.&lt;/p&gt;

&lt;p&gt;By the time I arrived at the office, the woman was already there, settled at her desk. Throughout the six weeks of the project, I never actually learned her name. We didn't exchange even a single word with each other. Our worlds, it seemed, were parallel but never intersecting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby's Roast
&lt;/h2&gt;

&lt;p&gt;At the breakfast table, there is quite a diverse gathering: an Italian cappuccino, a French croissant, an American notebook, and an ordinary sheet of A4 paper, probably made in China. Yet, upon closer inspection, this paper is anything but ordinary. It's printed full of letters and stranger characters, resembling a sample page from a printer. To the uninitiated eye, these markings might look like hieroglyphs, a mysterious array of symbols without meaning. However, to the person at the table, they are far from cryptic. In fact, they are the source code of a program. And that person, deciphering these characters with a knowing eye, is none other than me.&lt;/p&gt;

&lt;p&gt;Printing a program's code on paper is typically a bad idea. Some books used to do this, perhaps to give them a thicker and more serious appearance. But it's a fundamentally flawed concept. Source code is full of empty spaces; many lines consist of nothing more than a solitary curly brace. Navigating through source code on paper is impractical – you have to continuously turn pages, unable to jump to specific sections or scroll through lines, as you would on a computer.&lt;/p&gt;

&lt;p&gt;However, the &lt;a href="https://dev.to/offcode/coding-in-the-shadows-hidden-gems-of-lisp-clojure-and-friends-1bj3#k"&gt;programming language K&lt;/a&gt; is an exception to this rule due to its remarkable conciseness. &lt;strong&gt;A single sheet of paper with a K program printed on it can accomplish what would take 20 pages in another language&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So here I am, sitting in the cafe Ruby's Roast, looking out over Lake Garda, and actually getting some work done. I study the sheet of paper in front of me, full of K code. As I go through it, I spot a misplaced percent sign. I quickly circle it with my pen. Then, an idea for a better way to do something comes to me. I open my notebook and write down a new, simpler line of code. If you knew how much I'm getting paid for this focused, yet seemingly effortless task, you'd be green with envy.&lt;/p&gt;




&lt;p&gt;This story, as vivid and sexy as it is, never actually happened. It was more of a dream, a vision I had for the kind of work I wanted to do. Then came the era of portable laptops, followed by ones you could actually carry around. And now, here I am, coding on a laptop in a cafe, a reality not too far off from my dream. It's true I'm working with different programming languages, ones that require a bit more scrolling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bare essentials of thinking
&lt;/h2&gt;

&lt;p&gt;I step into the bathhouse. At the cloakroom, they hand me a white apron made of simple canvas, like it’s cut from an old bedsheet. It's plain and straightforward. I like that I don't need to bring a swimsuit. I can come here on a whim, without any preparation.&lt;/p&gt;

&lt;p&gt;I change into the apron, leaving my clothes in the locker. The apron covers just the front and leaves my bottom bare. It feels a bit unusual, but here, it’s part of the ritual. As I immerse myself in the steaming water, I'm surrounded by other men, each in their own contemplative state. The bathhouse operates on separate days for men and women, and today, it's a male-only sanctuary.&lt;/p&gt;

&lt;p&gt;The thought does cross my mind, briefly, that being approached by a gay man might feel strange with my exposed state. But that worry fades quickly; I know that the gay community frequents a different bath. Here, it's just a gathering of men, each lost in their own thoughts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There's a relief, too, in the absence of women&lt;/strong&gt;. Not because of any discomfort, but rather it spares me the unconscious act of watching them, something almost automatic. In their absence, the space becomes free of any sexual undertones, a neutral ground where the mind can wander without distraction.&lt;/p&gt;

&lt;p&gt;This bathhouse, with its simple canvas aprons and gender-specific days, becomes a place devoid of sexuality for me. It's a rare environment where the usual dynamics of attraction and distraction are absent.&lt;/p&gt;

&lt;p&gt;I slide into the hot water, feeling the canvas apron lift and float around me. My eyes are drawn to the familiar sign by the pool's edge, noting the water's temperature and the warning not to stay in longer than 10 minutes. It's a gentle rule, one that everyone here seems to ignore.&lt;/p&gt;

&lt;p&gt;You might think that I'm in this hot bath just to relax and let my mind wander without purpose. But that's far from the truth. In these moments, immersed in the heat, I'm actually doing some of my hardest work. The warm water has a way of loosening not just my muscles, but also the rigid structures that programming in Java imposes on my mind. Here, in this steamy, soothing environment, my thoughts are free to roam.&lt;/p&gt;

&lt;p&gt;This isn't work in the traditional sense – I'm not laying bricks or mechanically typing out lines of code. Yet, this is where a crucial part of my work unfolds. As I soak, my mind tackles the problems I've been grappling with, contemplating different approaches and solutions. The actual coding, the typing of line after line, is the easy part. It's in this bath, with my mind softened by the warmth, that the real challenge is met – figuring out what those lines of code should be.&lt;/p&gt;

&lt;p&gt;Just a few meters away, I overhear the conversation between two guys discussing some sort of construction project. One is talking about plans to rebuild a hotel in the countryside, while the other mentions a business opportunity linked to it. Their words blend into the background noise of the bathhouse. I'm not actively listening, their discussion floating in and out of my awareness as I focus on my own thoughts.&lt;/p&gt;

&lt;p&gt;This moment reinforces a powerful realization: &lt;strong&gt;I don't rely on anything in the physical world to do my work&lt;/strong&gt;. The beauty of my profession is that I can work anywhere, as all I need is my brain. I don't require a computer in front of me or people around to bounce ideas off. It's just me and my thoughts. I step into a world inhabited with data structures and links, where I shift pieces of information from one place to another. In this world of changing data, I don't even need an apron.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Special
&lt;/h2&gt;

&lt;p&gt;I used to think I just wanted the freedom to work from anywhere. But I also liked that not many people could do it – it made me feel special. Now, with so many digital nomads and remote jobs, it's not that unique anymore. It's time for me to find something new to make me feel special again.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Coding in the Shadows: Hidden Gems of Lisp, Clojure, and Friends</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Tue, 28 Nov 2023 19:58:41 +0000</pubDate>
      <link>https://forem.com/offcode/coding-in-the-shadows-hidden-gems-of-lisp-clojure-and-friends-1bj3</link>
      <guid>https://forem.com/offcode/coding-in-the-shadows-hidden-gems-of-lisp-clojure-and-friends-1bj3</guid>
      <description>&lt;p&gt;In the world of programming, rankings are more than just numbers; they're a source of endless debate and pride. Much like how people are fascinated by top 10 lists in music or movies, there's a similar &lt;a href="https://www.tiobe.com/tiobe-index/"&gt;ranking system for programming languages&lt;/a&gt;. But unlike box office hits or Billboard charts, the criteria for ranking programming languages aren't as clear-cut.&lt;/p&gt;

&lt;p&gt;There's a constant back-and-forth among programmers about which language is superior. You'll often hear them boast, "My language is better than yours," followed by demonstrations of elegant one-liners or efficient algorithms. But the truth is, we haven't settled on a universally accepted measure for ranking these languages. So, when it comes to these rankings, they're based primarily on popularity.&lt;/p&gt;

&lt;p&gt;Now, this isn't about social media popularity – it's not a matter of likes or shares. It's about how many people are actively using these languages. Measuring this is tricky, as you can't simply count heads or survey every programmer out there. However, with a combination of job market analysis, community activity, and usage statistics in various projects, a somewhat accurate picture can be formed.&lt;/p&gt;

&lt;p&gt;This approach to ranking may not satisfy everyone, especially since it doesn't necessarily reflect the technical merits or innovativeness of a language. Yet, it does offer a snapshot of the programming landscape, showing us which languages are currently in demand and shaping the world of technology.&lt;/p&gt;

&lt;p&gt;The top spots in the programming language rankings are often occupied by names that even those outside the IT world might recognize. Languages like Java, Python, C, and JavaScript are household names in the tech community and beyond. When you delve into the top 20, the "least popular" among these is still used by approximately 1% of programmers worldwide – a small percentage, perhaps, but still significant when you consider the sheer number of people coding across the globe.&lt;/p&gt;

&lt;p&gt;However, the list of programming languages doesn't stop at the top 20. Venture further down to the top 50, and you'll start to encounter some truly niche languages. Among them is Logo, a language developed in 1967 with the aim of teaching programming concepts. It's famously associated with the &lt;strong&gt;'turtle graphics,' where you can control a turtle's movement on-screen through coding commands&lt;/strong&gt;. It’s intriguing to ponder what modern applications it could have, given that it’s still used, albeit by a mere 0.1% of programmers.&lt;/p&gt;

&lt;p&gt;Also nestled in this segment of the list is COBOL – an even older language that first appeared 64 years ago. Despite its age, COBOL remains a vital cog in the machinery of large insurance companies and banks. These institutions rely on massive mainframe computers running on millions of lines of COBOL code. It’s a language that, while seemingly antiquated, underpins systems too critical and complex to risk rewriting. &lt;strong&gt;The mere thought of transitioning away from COBOL raises concerns about potentially catastrophic system failures&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lisp
&lt;/h2&gt;

&lt;p&gt;Venturing even further down the list, you encounter two languages that are my personal heroes. One such language is Lisp, a language that has its roots in academia and theoretical computation. Fascinatingly, Lisp was initially conceived on paper, without any practical implementation on a computer. It's a testament to the pure, almost philosophical approach to programming language design.&lt;/p&gt;

&lt;p&gt;Lisp is built on a handful of core concepts and a mere eight operations. Yet, from this simplicity springs an immense power. Its creator, John McCarthy, mathematically demonstrated that Lisp was a fully capable programming language, earning it the classification of being "Turing-complete." This term refers to a system of computation that, given enough resources, can solve any problem that a Turing machine (a basic model of a computer) can. In this sense, Lisp is akin to geometry as formulated by Euclid – based on just a few axioms, it unfolds into a vast and intricate world of possibilities.&lt;/p&gt;

&lt;p&gt;The elegance of Lisp lies in its minimalism and its flexibility. It's a language that encourages a different way of thinking, one that is more about the essence of computation and less about the specifics of syntax. This philosophical underpinning makes it not just a tool for writing software, but also a medium for exploring the very nature of programming itself. For those who delve into its depths, Lisp offers a unique perspective, revealing the elegant complexity that can arise from the simplest of foundations.&lt;/p&gt;

&lt;p&gt;Lisp's role in the evolution of computer science extends beyond its elegant design. It was &lt;strong&gt;the first programming language widely used for research in Artificial Intelligence (AI)&lt;/strong&gt; during the 1960s and 1970s. At that time, Lisp was at the forefront of this groundbreaking field. This deep association with AI led to the creation of specialized hardware known as Lisp machines. These were computers designed specifically to run Lisp efficiently, representing a unique convergence of software and hardware dedicated entirely to one programming language. Unlike modern computers, which are built to run a wide range of software, Lisp machines were optimized for the nuances and particularities of Lisp.&lt;/p&gt;

&lt;p&gt;The phrase "it was Lisp all the way down" aptly captures this era. In these machines, Lisp wasn't just a programming language running on general-purpose hardware; it was an integral part of the entire system. This period in computing history highlights Lisp's significant influence and the fervent belief in its potential to unlock the secrets of artificial intelligence and advanced computation.&lt;/p&gt;

&lt;p&gt;As the years progressed, however, Lisp's prominence in the programming world began to wane for reasons that are as complex as they are varied. This shift in the landscape saw the rise and fall of various programming languages, each vying for a spot in the rapidly evolving tech industry.&lt;/p&gt;

&lt;p&gt;This was the time when I came across an article by Paul Graham called &lt;a href="http://paulgraham.com/avg.html"&gt;Beating the Averages&lt;/a&gt;. Graham described Lisp as a secret weapon that wasn’t for everyone - it was special, meant for a select group of programmers. Reading this, I felt a strong connection; I knew I was part of that group. Lisp just clicked with me.&lt;/p&gt;

&lt;p&gt;This led me to dive deeper into Graham's other writings about Lisp. The more I read, the more natural it felt to use Lisp. It was as if my mind was perfectly suited for it. This idea reminded me of a quote from Eric Raymond: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During this time, I was playing around with Lisp, immersing myself in its unique style. That's when Clojure appeared, like a fresh wave for those of us who loved Lisp. It felt like a modern version of Lisp, mixing old Lisp ideas with new ways of programming. Clojure made it easier to use Lisp with today's technology, first with the Java Virtual Machine (JVM), then with the browser. For a while, it looked like Clojure would make Lisp popular again. It even became one of the top 20 programming languages for a bit.&lt;/p&gt;

&lt;p&gt;Yet, despite this promising start, Clojure didn't maintain its momentum. It eventually settled into a niche, maintaining a presence in a few actively developed applications but largely receding from the mainstream programming scene. For me, personally, Clojure has been more than just a programming language. It has profoundly shaped my thinking, offering a unique perspective on problem-solving, system design, and the elegance of code.&lt;/p&gt;

&lt;p&gt;Doesn't Clojure deserve its own chapter? It certainly does. You can read more about why it lies so close to my heart: &lt;a href="https://hackernoon.com/why-my-brain-is-wired-for-clojure"&gt;Why My Brain Is Wired for Clojure&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  APL
&lt;/h2&gt;

&lt;p&gt;I promised to mention two programming languages that hold a special place for me; Lisp is the first, and APL is the other. APL, which stands for "A Programming Language," began its life not even as a language for programming, but as a notation system used by people at IBM. It was developed as a way to clearly communicate complex programming and mathematical ideas, extending beyond traditional mathematical notation.&lt;/p&gt;

&lt;p&gt;When you first see APL code, two things will likely catch your eye. Firstly, it looks almost like a secret code from a pirate's treasure map, filled with unique symbols like backward-crossed circles, triangles with extra lines, and an array of other special characters. At the height of APL's popularity, these symbols were so integral to the language that &lt;strong&gt;you could even find special keyboards made just for typing in APL&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This mysterious and almost romantic quality of APL's appearance was one of the things that drew me to it. But there's another aspect of APL that's immediately noticeable: its conciseness. APL is renowned for its ability to condense what would be ten lines of code in other languages into a single line of APL.&lt;/p&gt;

&lt;p&gt;What exactly makes APL so concise? At first glance, it might seem like a simple trick. Other programming languages are filled with long keywords and functions like &lt;code&gt;continue&lt;/code&gt; and &lt;code&gt;length&lt;/code&gt;, while APL appears to just replace these with a single character. But there's much more to it than that.&lt;/p&gt;

&lt;p&gt;Yes, it's true that APL often uses single characters, like the Greek letter rho (ρ), to perform tasks that would require more elaborate expressions in other languages. Rho, for example, is used to determine the length of a string or a vector. But the real power of APL lies in its fundamental approach to data. APL treats nearly everything as a vector, or a list of items, and it's designed to operate on these vectors efficiently.&lt;/p&gt;

&lt;p&gt;Take a simple operation like adding 2 to a vector. In strict mathematical terms, this might not make sense, but APL interprets it as adding 2 to each element of the vector. This characteristic allows you to perform complex operations without the need for writing loops or conditions, which are common and space-consuming in other languages. By thinking in terms of operations on whole vectors or arrays at once, &lt;strong&gt;APL enables a level of conciseness and elegance that is hard to match in more verbose programming languages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Recognizing the limitations imposed by the need for a specialized keyboard, the creators of APL took an innovative step forward. They developed a new language, J, which was designed to be used with the standard ASCII characters available on every keyboard. This move addressed one of APL's biggest accessibility issues, making the language more approachable for a broader audience.&lt;/p&gt;

&lt;p&gt;J's creation marked the beginning of an interesting progression in programming language development. It inspired the creation of K, a language that further refined the ideas of APL and J, focusing on efficiency and speed. K, in turn, led to the development of Q, a language built on the foundations of K but geared more towards database and query operations.&lt;/p&gt;

&lt;p&gt;Q might not be a widely known programming language, but it has a very important role in one specific area: handling financial transactions. This is because Q is really good at processing large amounts of data quickly, which is crucial in finance where every second counts. The demand for Q programmers may not be widespread across the tech industry, but within the finance sector, their skills are highly sought after. If you know how to program in Q, you can actually earn a lot of money.&lt;/p&gt;

&lt;h2&gt;
  
  
  K
&lt;/h2&gt;

&lt;p&gt;This part is going to be more technical. For programmers familiar with the concepts of functional programming, K offers a powerful yet concise way to perform operations like summation. For example, the expression &lt;code&gt;+/!8&lt;/code&gt; in K efficiently sums up the numbers up to 8. Here, &lt;code&gt;!8&lt;/code&gt; generates a list of numbers from 0 to 7. Then, &lt;code&gt;+/&lt;/code&gt; acts as what's known in functional programming as a "reduce" operation, applying the addition function across the list. Another example is calculating factorial: &lt;code&gt;*/1+!8&lt;/code&gt;. We generate a list of the number from 0 to 7; then add 1 to add number: &lt;code&gt;1+!8&lt;/code&gt; -- we already know that adding 1 to a list adds 1 to each element. Finally, we reduce the list applying multiplication.&lt;/p&gt;

&lt;p&gt;One more example. Here is how to find the largest number in a list: &lt;code&gt;|/'4 2 7 1&lt;/code&gt;. Let's break it down how it works.  The phrase &lt;code&gt;|/'&lt;/code&gt; is a combination of two symbols:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;|&lt;/code&gt;: This is the 'maximum' function in K. When used on its own, it gives you the maximum of two numbers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/'&lt;/code&gt;: This is known as an 'over' operator. It is used to apply a function repeatedly between the elements of a list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, &lt;code&gt;|/'&lt;/code&gt; applies the 'maximum' function across the list. It repeatedly compares pairs of numbers and carries forward the larger number each time. This process continues across the entire list until the largest number is determined.&lt;/p&gt;

&lt;p&gt;If programmers have heard of K, it's usually in connection with code golf. &lt;a href="https://codegolf.stackexchange.com"&gt;Code&lt;/a&gt; &lt;a href="https://code.golf"&gt;golf&lt;/a&gt; is a unique and playful programming challenge where the objective is to solve a specific problem or complete a task using the least amount of code possible. Unlike typical programming practices where code is often measured in lines, &lt;strong&gt;code golf counts every single character&lt;/strong&gt;, making each one count. This form of programming competition emphasizes brevity and resourcefulness, encouraging programmers, often referred to as 'code golfers,' to think outside the box. They must employ ingenious methods and deep knowledge of their chosen language's syntax and features to craft a solution that is as short as possible. &lt;/p&gt;

&lt;p&gt;K has gained a reputation as one of the most successful languages for code golf. Its concise syntax and powerful built-in functions allow programmers to express complex operations in just a few characters, making it ideal for these challenges. However, in the world of code golf, some languages have been created solely to excel in this arena. These languages, often referred to as 'esoteric' or 'golfing' languages, might include built-in functions for common code golf tasks, like a one-character function to generate prime numbers - a frequent requirement in code golf challenges.&lt;/p&gt;

&lt;p&gt;While the one-liners showcase K's ability to succinctly express complex ideas, it has a serious consequence beyond winning at code golf. Not only K applications are compact in size, but the K interpreter itself is extremely small, especially when compared to similar programs in other languages. This minimal footprint allows K applications, along with the K interpreter, to fit entirely within the L2 cache of a CPU. The L2 cache is a smaller, faster memory compared to a computer's main RAM, and because it's closer to the CPU, data stored in the L2 cache can be accessed much more quickly. This proximity significantly enhances the execution speed of K applications.&lt;/p&gt;

&lt;p&gt;This compactness and efficient use of the L2 cache set K apart from many other programming languages. In most languages, especially those that produce larger, more memory-intensive applications, critical parts of the program and the interpreter or runtime environment are less likely to fit entirely in this fast-access cache. As a result, K applications, despite being interpreted, can often &lt;strong&gt;achieve execution speeds comparable to compiled C code&lt;/strong&gt;, which is renowned for its performance. The efficiency of K doesn’t just stem from its concise syntax but also from how it harmonizes with the underlying hardware, making the most of the CPU's capabilities to deliver high performance. The speed and efficiency of K make it perfect for working with huge amounts of data in real-time, like in stock trading.&lt;/p&gt;

&lt;p&gt;If you want to try out K, there are some open source implementations, like &lt;a href="https://github.com/JohnEarnest/ok"&gt;John Earnest's oK&lt;/a&gt; which has a REPL and a calculator-like interface for mobile phones with a charting feature.&lt;/p&gt;

</description>
      <category>lisp</category>
      <category>clojure</category>
      <category>vectordatabase</category>
    </item>
    <item>
      <title>The Accidental Programmer</title>
      <dc:creator>Adam Schmideg</dc:creator>
      <pubDate>Tue, 21 Nov 2023 21:42:49 +0000</pubDate>
      <link>https://forem.com/offcode/the-accidental-programmer-196g</link>
      <guid>https://forem.com/offcode/the-accidental-programmer-196g</guid>
      <description>&lt;p&gt;Many years ago, I discovered programming in an unusual way. This is the story of how I became a programmer, first a hobbyist, then a professional.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quiet linguist
&lt;/h2&gt;

&lt;p&gt;A friend once walked into my room and saw me poring over a book. "What are you reading?" she asked, peering over my shoulder.&lt;/p&gt;

&lt;p&gt;"It's a French grammar book," I replied, turning a page filled with explanations of verb tenses (&lt;em&gt;le passé composé&lt;/em&gt; and &lt;em&gt;l'imparfait&lt;/em&gt; in case you want to know).&lt;/p&gt;

&lt;p&gt;She raised an eyebrow in surprise. "So, you're learning French?" she asked.&lt;/p&gt;

&lt;p&gt;"No," I answered with a small smile, "I'm not really learning to speak it. I just like understanding how it's structured, how it works.&lt;/p&gt;

&lt;p&gt;My friend looked puzzled as I explained further. "Actually, I've read quite a few grammar books - Italian, German, even Latin." I gestured towards a stack of books on my desk, each one a testament to my unusual hobby.&lt;/p&gt;

&lt;p&gt;"But how's your French then?" she inquired, still trying to piece it together.&lt;/p&gt;

&lt;p&gt;"It's pretty basic," I admitted. "And my Italian isn't much better. As for Latin, I don't speak it at all. I'm not really focused on speaking these languages. I'm more fascinated by how they're put together, the rules and patterns behind them."&lt;/p&gt;

&lt;p&gt;After the French grammar book, my curiosity led me to something entirely different yet strangely similar. I picked up an introduction to programming in Basic. Then a reference manual for the Pascal language. It was an odd choice, given that I didn't own a computer and wasn't planning on getting one anytime soon. Just like with the languages, my interest wasn't in actually writing any code. I was fascinated by the underlying structure, the logic and rules that made these programming languages tick.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bets and bytes
&lt;/h2&gt;

&lt;p&gt;At this time in my life, betting on football games was a big deal for me and my friend. We used to spend lots of time looking at papers, talking about which teams might win. We looked at how the teams were doing, their past games, and how their best players were playing. We thought about all of this carefully and wrote down what we decided.&lt;/p&gt;

&lt;p&gt;Every next morning, we would meet up with our notes ready. We had lots of betting papers in front of us. I would take a pen and put an 'X' in the boxes that matched our choices. The process was tedious, repetitive, and required precision. Doing this over and over was boring. But we did it because we really wanted to win our bets.&lt;/p&gt;

&lt;p&gt;My tolerance of monotony was so low that I involved my brother, who was pretty good at writing computer programs. So, I figured, why not make this whole betting deal easier? I caught up with him one day and laid it out. "Hey, can you help me turn this betting stuff into a program?" I asked. I gave him the lowdown, like, "We need a loop that runs from 1 to 14, adds up the odds for each game, stuff like that." He got it. It was pretty simple for him – all he had to do was translate my ideas, which I just sort of rambled off, into Pascal, the programming language he used. He seemed cool with it, just taking what I said and turning it into code.&lt;/p&gt;

&lt;p&gt;Finally, after tapping away at his keyboard for a while, my brother hit some command and the whole thing was done. He wrote the program onto a floppy disk - this small, square piece of plastic that suddenly felt like treasure. He handed it over to me, and I remember feeling like I was holding something really valuable. This was my first computer program, even though I hadn't written a single line of the code myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  This one last thing
&lt;/h2&gt;

&lt;p&gt;My birthday brought me an awesome gift: my own desktop computer. This wasn't just a cool present; it opened up a whole new world for me. I started to write my own programs. At first, it was like learning a new language which I literally did. But soon I really got the hang of it.&lt;/p&gt;

&lt;p&gt;Every night, I'd be there at my computer, the screen lighting up my face in the dark room. Around me, everyone else was asleep. That's how it is, right? Late at night is when artists, programmers, and murderers come alive. I was definitely not an artist or a murderer, but I sure felt like a real programmer.&lt;/p&gt;

&lt;p&gt;With a cigarette in one hand, I'd keep telling myself, "Just fix this one last thing, then go to bed." But in programming, there's always another "last thing" that pops up. Hours would pass like minutes. Before I knew it, it would be really late, but I'd still be there, typing away.&lt;/p&gt;

&lt;h2&gt;
  
  
  The far-reaching Yahtzee
&lt;/h2&gt;

&lt;p&gt;I created something pretty neat. It was a program where you could play Yahtzee. Sure, anyone could play Yahtzee the regular way with five dice and a piece of paper, but my program was different. I often wondered what made it special. Maybe not everyone had five dice lying around at home, or perhaps people didn't want to bother adding up their scores on paper.&lt;/p&gt;

&lt;p&gt;Whatever the reason, my friends got pretty excited about it. They started coming over with their floppy disks. "Can you put your Yahtzee game on this for me?" they'd ask. And I was happy to make a copy for them.&lt;/p&gt;

&lt;p&gt;The Yahtzee game I created started to become more popular than I ever expected. My friends didn't just keep it to themselves; they began sharing it with their own friends. Like a message in a bottle tossed into the sea, my little program began a journey far beyond my circle.&lt;/p&gt;

&lt;p&gt;It was fascinating to see how far it reached. One day, I heard from a friend about someone they knew, a friend of a friend – someone I'd never met. This person worked in a theater, all the way at the other end of the country. My little Yahtzee game had traveled that far!&lt;/p&gt;

&lt;p&gt;The theater staff, between their rehearsals and performances, would take a break, pop the floppy into their computer, and dive into a game of Yahtzee. It was a strange and wonderful thought – that something I made in the quiet of my room was bringing a bit of fun to people so far away, people I'd never met.&lt;/p&gt;

&lt;p&gt;One morning, my trusty computer began to behave oddly. It started with a few unusual beeps – sounds I hadn't heard it make before. At first, I thought maybe I had accidentally changed a setting or triggered an unknown command. But as the beeping became more frequent, a sinking realization dawned on me: my computer had caught a virus.&lt;/p&gt;

&lt;p&gt;This wasn't just any hiccup in the system; it was like an unwelcome intruder had slipped into the digital world I had built. I remember feeling a mix of annoyance and worry. Viruses back then were a bit of a mystery, not like the ones we know about today. They could do anything from messing up your files to completely crashing your system.&lt;/p&gt;

&lt;p&gt;I wondered where it came from. Could it have been one of the many floppy disks that came in and out of my computer, carrying my Yahtzee game? It was a risk we rarely thought about in those days of sharing and swapping games.&lt;/p&gt;

&lt;p&gt;I realized the extent of the issue was much larger than I first thought. The virus hadn't just infected my system; it had been copied onto the floppies of my friends along with my Yahtzee game. Each time I shared the game, the virus tagged along, silently spreading to each new computer.&lt;/p&gt;

&lt;p&gt;Later I learned that the virus, piggybacking on my Yahtzee game, had traveled all the way to the theater at the far end of the country. More than just reaching their computer, it had infected their entire system. At the theater, their computer wasn't just for leisure; it was an essential part of their operations. They stored everything on it - from the performance schedules and rehearsal plans to important vouchers. When the virus hit, it wreaked havoc, resulting in the loss of all this crucial information.&lt;/p&gt;

&lt;p&gt;A single program, something I created as a bit of fun and a challenge to myself, had the power to reach and affect so many people, in ways I had never anticipated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding on a shoestring
&lt;/h2&gt;

&lt;p&gt;As a student I had lots of options for making money. You might picture a buffet of choices laid out before me, each more appealing than the last. But the reality was more like a compulsory all-you-can-work marathon. Private lessons? Check. Translation gigs? Double check. And sometimes, the less glamorous option of skipping meals.&lt;/p&gt;

&lt;p&gt;In those days, I noticed an odd but common trend: people who didn't have enough cash for food often still found a way to afford a drink or a pack of cigarettes. I was no exception. Despite my tight budget, there I was in a bar, nursing a single beer that had to last the night, yet somehow, it often turned into more. It was in this setting, one evening, that one of our group spotted a familiar face at another table. Seamlessly, our two groups began to blend together. It was as if introductions weren't needed; everyone just started talking and getting along as if we were all old friends.&lt;/p&gt;

&lt;p&gt;That night at the bar, I met someone new, a guy named Zed. The exact start of our conversation is lost in the haze of memory, but I'll never forget how it ended. We shook hands on a deal – I was going to write a computer program for the research lab he worked at, and they were actually going to pay me for it. Sure, there were details to be figured out, like talking to his boss, and it wasn't a legally binding contract or anything. But it felt like something stronger, a gentleman's agreement, or rather a friend's friend agreement.&lt;/p&gt;

&lt;p&gt;So, I got to work on the program and after some time, I was ready to show what I had done. I found myself in a room with a small group of researchers from the lab, ready to present my progress. The presentation was a bit of a rollercoaster. I navigated through the program, and when I hit a snag, I'd chuckle and say, "Okay, this bit's still under construction, but just imagine it springing to life and zipping around any moment now."&lt;/p&gt;

&lt;p&gt;After that presentation, something amazing happened – I received my first payment for the project, a whole third of what the entire job was worth.&lt;/p&gt;

&lt;p&gt;That night, riding high on the wave of my first big paycheck, I decided to throw a party. It was my way of celebrating this milestone and sharing the joy. I invited all my friends, especially those who had covered those extra beers for me during my leaner times. Zed, the guy who had set this whole opportunity in motion, was of course on the guest list too.&lt;/p&gt;

&lt;p&gt;This would have been the perfect spot to end my tale, a high note of triumph and celebration. But the story of my programming adventure didn't stop there. I still had to earn the other two-thirds of my payment. So, I got back to work, full of confidence. But soon, I hit a wall, the kind that makes you feel like you're stuck in a loop of problems.&lt;/p&gt;

&lt;p&gt;You know that feeling, right? It's like when you finally manage to close your suitcase, only to realize you left out your pants. You manage to stuff them in, but now your t-shirt is playing peek-a-boo with the zipper. No matter how you rearrange everything, something just won't fit. That was me with my program. I'd finish one part, all neat and tidy, then I'd add something new, and boom – it was like I'd pulled the wrong thread, and other parts started unraveling. I'd fix one thing, and another would break. It was this never-ending cycle of fixing and breaking, a programmer's version of the suitcase dilemma.&lt;/p&gt;

&lt;p&gt;So what happened to the other two-thirds of my payment? Well, the simple truth is, I never got it because I never finished the program. Despite my best efforts and countless hours spent trying to piece everything together, I couldn't get it to work as it was supposed to.&lt;/p&gt;

&lt;p&gt;Interestingly, I didn’t even have to pay back the first payment. The partially completed, 'under construction' program I left them with was probably not very useful. But in those days, programmers were such a rare breed that there seemed to be a different set of rules for us. People hiring programmers seemed to operate on a 'hope for the best' mindset. You paid a programmer, and if you were lucky, you got your program. If not, well, it was just part of the risk of investing in tech. And so began the golden era of programming, at least from my perspective.&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>writtenwithai</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
