https://docs.google.com/document/d/e/2PACX-1vS6wnp3kbNrjT9TEfHVpEqbAITqH_G6QubjczV8KRXFmOQ1JSTt1oNWHxVpLNRZU14J4VBd7wTMuDSS/pub Published using Google Docs Report abuseLearn more The Beginning of My Programming Journey - Wendy Randolph Updated automatically every 5 minutes Let's start at the very beginning (A very good place to start) [ANYlcfA30s] 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 [ANYlcfD4u3] [ANYlcfC9G_] 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 [ANYlcfAqFY] 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, Dealing with Frustration) [ANYlcfCk0v] 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 [ANYlcfAb3Q] 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) [ANYlcfAF_5] 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" [ANYlcfBYfL] 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 [ANYlcfDDbh] 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... [ANYlcfBzRm] 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. [ANYlcfBwMn] Into the Unknown [ANYlcfBCKN] 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 [ANYlcfA_z5] 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 [ANYlcfCLVs] 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