Let’s start at the very beginning (A very good place to start) I wanted to get into programming or something programming-adjacent, perhaps using my enjoyment of teaching and helping people create things. I had a few ideas for apps, so I thought I’d begin my journey working toward making an app that would be useful to my interests. My exploration of programming would be in the off hours of my 40hr/week job. The closest thing to programming experience I have is reading half a chapter of Learning Python and building a website in HTML & CSS for my handmade purses 15 years ago. A Tale: Her Swift story On February 24, 2022, I started learning Swift by using the game app Playgrounds. As I progressed through the levels and explored increasingly difficult puzzles, I improved my problem-solving skills by better articulating problems, breaking down large problems into smaller pieces, talking through possible solutions, and finding a rubber ducky to talk to (actually, it’s a Clojure-green-colored froggie… foreshadowing?) I also followed along with some beginner Swift tutorials from Code With Chris on YouTube and Hacking With SwiftUI. Let's get down to business It’s challenging for me to sit and use a computer due to RSI and hyper-mobile joints, so I set up my computer workstation with the best tools I had and will work towards small improvements as I go. In the beginning of this journey, I got out of my chair every 15 min to move for 30 seconds to help with stiffness and problem solving. When I had at least half a day to work on things, I would switch topics every two hours (topics were written on notecards) Swift Playgrounds Read Book (at the time, a book from Robert’s collection, The Art of Learning: An Inner Journey to Optimal Performance by Josh Waitzkin) Code with Chris tutorial for Swift UI Hacking with Swift - 100 days of Swift UI Let It Go (or, D ealing with Frustration) Sometimes I felt stuck trying to solve Playgrounds puzzles and understand the Swift concepts. When I got in a rut, sometimes I would just sit there frustrated and bored, reading the same thing over and over. Over time, I realized this was counterproductive, so instead of staying in my rut, I would get up from the computer and do something else: dance to some upbeat music, go outside, go fold laundry. When I was a bit more clear-headed, I could come back to the topic I was working on, or pick a different topic card and work on that. Learning is hard Sometimes, I did not want to deal with this struggle of learning. I could not dance my way out of this one. I had to think about my ideas and attitudes towards learning something new. Did I assume this would be easy? Am I upset if it’s not easy? Do I want to grow? What did I think growing would feel like? Is seeking out challenges more useful than avoiding them? These questions are best met with honesty, saying your answers out loud or writing it down. I found reading The Art of Learning by Josh Waitzkin helpful. I read it over a month or so and thought about learning as discomfort, seeking out challenges instead of avoiding them, and the idea of keeping up with time when I make a mistake, rather than being frozen and falling behind - getting out of sync with time. A Whole New World (of Clojure) At some point I finished the Art of Learning, so I picked another book from Robert’s collection: Learn ClojureScript by Andrew Meredith. He said I’d probably get to my app goal quicker and learn a more useful language if I focused on ClojureScript rather than Swift. I abandoned Swift for the time being (Clojure seemed more useful overall). I started through Learning ClojureScript, googling the many terms I was unfamiliar with. As I read through the book and worked on the examples, I used other resources: Clojuredocs.org > clojure.core Clojuredocs.org > Quickref for Clojure Core Clojure.org > Learn Clojure Clojure.org > Cheatsheet https://learnxinyminutes.com/docs/clojure/ “No man ever steps in the same river twice” I also would watch/listen to Rich Hickey & Stu Halloway talks and google unfamiliar terms: epoch, concurrency, discrete, atomic, orthogonal, and more. Hammock Driven Development Simple Made Easy Sherlock Holmes, Consulting Developer Are We There yet? In Are We There Yet?, Rich quotes Heraclitus, “No man ever steps in the same river twice” which sounded a lot like what Pocahontas sang in Disney’s 1995 film: “ What I like most about rivers is you can’t step in the same river twice.” I had to look it up and apparently Heraclitus, a Greek philosopher born in 544 B.C. said, “No man ever steps in the same river twice, for it’s not the same river and he’s not the same man.” I guess Heraclitus said it before the Disney princess, by a few thousand years. Sure, I didn’t understand every concept in these talks, but I was getting some of it. I felt like a piece of flypaper that is trying to create a picture; I don’t have enough dead bugs on me to make an image yet. But I keep near the light so more bugs will get stuck on me. REPL, VS Code, and Calva On April 18, 2022, I started a learning journal to log what I did each day towards learning Clojure and related tools. Robert suggested I read History of Clojure by Rich Hickey, which I started reading and have enjoyed so far. I like “Table 1. Clojure’s data format” from the paper and keep it at hand for reference. I like to refer to this table and similar from clojure.org and clojuredocs.org. Robert showed me how to access REPL on my laptop, so I started typing in some examples there that he gave me. Later, I tried out some examples from Learning ClojureScript page 41 involving math, so I opened a Notes window next to my REPL to test out some things before I loaded it into the REPL. Robert chuckled at my set up and was glad I figured out that it’s nice to have a place to write code you want to test. I googled for text editors to use with Clojure, and since I don’t want to spend time learning emacs, IntelliJ, etc, I thought Atom or VS Code would be good, based on betweentheparens.com’s suggestions. Robert said Atom is dead, so VS Code it is! Calva… I downloaded VS Code with Calva extension. Initially I had some trouble starting the “Fire up the ”Getting Started” REPL” command because the Calva documentation assumed I knew how to access the Command Palette. Luckily, Peter’s keystrokes are recorded in the “Get Started with Clojure in VS Code in 20 seconds” video, so I replicated what he did, and I was IN! I read through and played with the hello_repl, hello_paredit, and welcome_to_clojure. After a few hours of staring at that black screen with all those colorful s-expressions I didn’t understand, I was sick of not getting it. I should have taken my own advice and taken a break from the computer. Instead, I started documenting where I felt some Clojure or Calva documentation was lacking and left me hanging so I could approach those avenues later for improvement. But I was overwhelmed and upset with all I didn’t know. Into the Unknown I needed an attitude adjustment. I started this adventure. Me. Did I think I’d immediately understand everything in a new world, new language, new tools, new ways? Does that sound like what happens in adventures? No. Well, I’m an adventurer. I’m a gosh darn character in a RPG sandbox, and I don’t know if that lump on the ground is a turd or an apple, but I’m going to guess, try, evaluate, repeat until I figure it out. Listening to “Into the Unknown” from Frozen 2 was helpful. :) I am going into the unknown. Get used to feeling in over your head. Go The Distance At times, reading documentation and listening to heady talks felt useless because I didn’t understand every single thing, but I believed it would be helpful. Sometimes, I’d get discouraged because I didn’t know exactly where I was going or what I’d do next. But if I did SOMETHING - read more or go back a few pages in my Clojure book, tested some things in the REPL, made coding errors and read them and looked up why they were errors - I’d be one bit closer to … whatever. What I think I’ve learned so far: How to describe problems better How to describe solutions better Use keyboard shortcuts Parens are no big deal. Elements are added to the back of vectors Elements are added to the front of lists. How to Identify expressions, functions, arguments, keywords, strings, Getting there with def, defn, fn, map, namespace Some differences between lists (grow at front) and vectors (grow at end) What’s a macro - its magic :) Calva is pretty cool. Some concepts are not explained in helpful order, some features are over-explained. Just because the result of an expression is always the last form/expression evaluated doesn’t mean the first, second, third, etc form/expression is ignored. It is taken into account. Functions being First Class in Clojure means functions are performing actions. They can do stuff. In OO programming, data does stuff. Functions can be treated as values. For is a macro. Def is a special form, creates a var. Def is a special snowflake. How Far I’ll Go The thing I’ve learned the most through this journey, I think, is just getting more comfortable with being uncomfortable and not knowing things. One day I’ll know how far I’ll go. April 24, 2022 Wendy Randolph the-dress-code