<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Learning on blog.iankulin.com</title><link>https://blog.iankulin.com/tags/learning/</link><description>Recent content in Learning on blog.iankulin.com</description><generator>Hugo</generator><language>en-AU</language><lastBuildDate>Fri, 19 Jan 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.iankulin.com/tags/learning/index.xml" rel="self" type="application/rss+xml"/><item><title>What's unfinished in your Udemy?</title><link>https://blog.iankulin.com/whats-unfinished-in-your-udemy/</link><pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/whats-unfinished-in-your-udemy/</guid><description>&lt;p&gt;If you work or study in tech, I always feel a good getting-to-know-you question is &amp;ldquo;what courses or tutorials did you start, but not finish?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;My Udemy doesn&amp;rsquo;t look &lt;em&gt;too&lt;/em&gt; bad:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2023-12-29-at-1.30.02-pm.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The ZTM course was good, but I got stuck on an AI API exercise. I think it&amp;rsquo;s a common sticking point for students since Andrei includes a little rant about how it definitely does work - but I downloaded his repo with the solution and it was having the same errors I was and I gave up in frustration. I probably should have just skipped that one.&lt;/p&gt;
&lt;p&gt;The Linux one was really good - I learned a heap of basic little things (although I struggled with the guy&amp;rsquo;s accent a little) - things like tab for CLI completion. I guess you would learn this stuff from work colleagues, but if you&amp;rsquo;re self taught someone else needs to show you. This isn&amp;rsquo;t the highly recommended Linux basics course I wanted to do (&lt;a href="https://www.udemy.com/course/learn-linux-in-5-days/"&gt;Learn Linux in 5 days&lt;/a&gt;), but it was a lot cheaper.&lt;/p&gt;
&lt;h2 id="what-else"&gt;What else?&lt;/h2&gt;
&lt;p&gt;So that&amp;rsquo;s my Udemy, what else haven&amp;rsquo;t I finished?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.hackingwithswift.com/100/swiftui"&gt;100 Days of Swift UI&lt;/a&gt; (47/100) - This is the free Paul Hudson course. I so highly recommend it for budding iOS developers I paid to join his super club or whatever that&amp;rsquo;s called although you don&amp;rsquo;t really need to. I got up to day 47 before deciding I wanted to work on web dev rather than iOS. I still use these skills occasionally for writing little MacOS apps.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://missing.csail.mit.edu/"&gt;Missing Semester Lectures&lt;/a&gt; (6/11) - Some CS lecturers at MIT realised there was some mechanics of day-to-day development missing from their courses (such as source control) so they put these together. They are great. Some of it falls into the &amp;lsquo;didn&amp;rsquo;t know you needed to know&amp;rsquo; so I plan to come back to these and finish one day.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cs193p.sites.stanford.edu/2021-0"&gt;CS193p&lt;/a&gt; (4/16) - These iOS development lectures are high quality and enjoyable, but if you run into issues (and are not enrolled in this unit at Stanford) you can get stuck - my best source of assistance was searching on github and finding others who had been through it. I gave up on these to focus on the Paul Hudson ones that were in more digestible chunks, and with some assistance (if you cared to pay for it).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also completed numerous little free courses and stand-alone videos from YouTube - names that spring to mind are Jay from &lt;a href="https://www.youtube.com/@LearnLinuxTV"&gt;Learn Linux TV&lt;/a&gt;, &lt;a href="https://www.youtube.com/@WebDevSimplified"&gt;Web Dev Simplified&lt;/a&gt;, &lt;a href="https://www.youtube.com/@Fireship"&gt;Fireship&lt;/a&gt;, the &lt;a href="https://www.youtube.com/@NetNinja"&gt;Net Ninja&lt;/a&gt;, &lt;a href="https://www.youtube.com/@programmingwithmosh"&gt;Mosh&lt;/a&gt;, &lt;a href="https://www.youtube.com/@t3dotgg"&gt;Theo&lt;/a&gt;, &lt;a href="https://www.youtube.com/@NetworkChuck"&gt;Network Chuck&lt;/a&gt;, &lt;a href="https://www.youtube.com/@JamesQQuick"&gt;James Quick&lt;/a&gt;, and &lt;a href="https://www.youtube.com/@apalrdsadventures"&gt;Apalrd&amp;rsquo;s Adventures&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mosh - I&amp;rsquo;ve paid for a month with the intention of doing his React 18 course in that time. I&amp;rsquo;m optimistic I will.&lt;/p&gt;
&lt;h3 id="whats-better-than-finishing-a-course"&gt;What&amp;rsquo;s better than finishing a course?&lt;/h3&gt;
&lt;p&gt;In most cases, what&amp;rsquo;s prevented me from finishing these courses, is that I&amp;rsquo;ve invested the time into writing code or doing projects that use the skills instead. I don&amp;rsquo;t feel bad about this, and in fact I&amp;rsquo;d recommend it. The only benefit of a course over just building projects is that they can teach you the things you didn&amp;rsquo;t know you needed. I listen to industry podcasts, and follow a lot of webdev people on Masterdon to try and help with that sort of discovery.&lt;/p&gt;
&lt;p&gt;For example, I&amp;rsquo;ve never used Zod, NextJS or Tailwind. But I know what they are, and where they would be useful to me because I&amp;rsquo;m tuned in to developer chatter about things.&lt;/p&gt;</description></item><item><title>ZTM - Complete Web Developer</title><link>https://blog.iankulin.com/ztm-complete-web-developer/</link><pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/ztm-complete-web-developer/</guid><description>&lt;p&gt;&lt;a href="https://zerotomastery.io/courses/coding-bootcamp/"&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-12-11-at-8.31.15-pm.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I started my first Udemy a few days ago. I was watching one of those &amp;ldquo;&lt;a href="https://www.youtube.com/watch?v=cYNVVspXUdA"&gt;How I&amp;rsquo;d learn to code if I started over&lt;/a&gt;&amp;rdquo; YouTubes, mainly because I&amp;rsquo;d like to know enough JavaScript to write little REST API&amp;rsquo;s on Node.js, but also because I&amp;rsquo;m starting to think web development makes more sense for a couple of the applications I&amp;rsquo;ve got on my (ever growing) list of app ideas.&lt;/p&gt;
&lt;p&gt;The video recommended a &amp;ldquo;&lt;a href="https://www.udemy.com/course/the-complete-web-developer-zero-to-mastery/"&gt;Zero to Mastery&lt;/a&gt;&amp;rdquo; course. When I googled it, I could see on Udemy it had a stack of people enrolled, had been updated recently, it had 40 hours of video content, good ratings (4.7 from 57K reviews), and claimed to cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML/HTML5&lt;/li&gt;
&lt;li&gt;CSS/CSS3&lt;/li&gt;
&lt;li&gt;SemanticUI&lt;/li&gt;
&lt;li&gt;Responsive Design&lt;/li&gt;
&lt;li&gt;Flexbox&lt;/li&gt;
&lt;li&gt;CSS Grid&lt;/li&gt;
&lt;li&gt;Bootstrap 5&lt;/li&gt;
&lt;li&gt;DOM Manipulation&lt;/li&gt;
&lt;li&gt;Javascript (including ES6/ES7/ES8/ES9/ES10/ES2020/ES2021/ES2022)&lt;/li&gt;
&lt;li&gt;Asynchronous JavaScript&lt;/li&gt;
&lt;li&gt;HTTP/JSON/AJAX&lt;/li&gt;
&lt;li&gt;React + Redux + React Hooks&lt;/li&gt;
&lt;li&gt;Git + Github&lt;/li&gt;
&lt;li&gt;Command Line&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;NPM&lt;/li&gt;
&lt;li&gt;RESTful API Design&lt;/li&gt;
&lt;li&gt;PostgresSQL&lt;/li&gt;
&lt;li&gt;SQL&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Scalable Infrastructure&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Production and Deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Which is a lot for $20!&lt;/p&gt;
&lt;p&gt;So far I&amp;rsquo;m up to section 9 (out of about 30) which is still in the 2nd item above - CSS, and I have a couple of observations, especially in comparison with my experience of Paul Hudson&amp;rsquo;s &lt;a href="https://www.hackingwithswift.com/100/swiftui"&gt;100 Days of Swift UI&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="video-v-text"&gt;Video v Text&lt;/h4&gt;
&lt;p&gt;The content in the ZTM course is more video orientated. Under each of Paul&amp;rsquo;s videos is a text version that very closely follows the video (although no dog snacks). If you&amp;rsquo;re a person who likes to follow along all the code, the text versions are valuable. I&amp;rsquo;ve found myself winding the ZTM videos back and forward a few times to see the code on their screen to figure out where I&amp;rsquo;ve gone wrong.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;ve been doing #100Days I&amp;rsquo;ve gone back and forwards a bit on watching the videos or reading the text. It probably just comes down to mood, but the option is very nice to have.&lt;/p&gt;
&lt;h4 id="size-of-the-bites"&gt;Size of the bites&lt;/h4&gt;
&lt;p&gt;The ZTM seems to go a bit faster, and leave the student to do some of their own research. I guess they&amp;rsquo;re covering a bigger topic (full stack web development including tools v SwiftUI) in less time - Paul is asking for 100 hours, ZTM is around 40. But I am used to leaving each of Paul&amp;rsquo;s sessions feeling like I really know it, whereas with the ZTM stuff it&amp;rsquo;s more like &amp;ldquo;I know that thing exists and I could probably remember it well enough to google it if a situation called for it&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;On the current topic - CSS, I am definitely going to have to spend some time on content outside of the course to get my head around it, and I think that&amp;rsquo;s likely to be the same with the JavaScript content.&lt;/p&gt;
&lt;h4 id="currency"&gt;Currency&lt;/h4&gt;
&lt;p&gt;Both of these courses are being kept up to date, which is crucial (and probably a pain for the course owners), but I feel Paul must do a better job of re-writing and re-shooting his content - I&amp;rsquo;ve never bumped into any out of date content yet. In the ZTM, they include some old stuff (for example &lt;a href="https://getbootstrap.com/"&gt;BootStrap&lt;/a&gt;) but prefix it with advice that it&amp;rsquo;s not current best practice, and several videos have either overlays about or are preceded with advice about how to make things work in current versions. It&amp;rsquo;s great they have those, but not as good as Paul&amp;rsquo;s system. Again, that might also just be easier with SwiftUI - everything comes from Apple each September, so it&amp;rsquo;s on a regular schedule as well as being a much smaller volume (than all the possible third party stuff going on in web development each month).&lt;/p&gt;
&lt;h4 id="student-activity"&gt;Student Activity&lt;/h4&gt;
&lt;p&gt;Paul seems to have more challenges along the way to check that you&amp;rsquo;ve actually absorbed the learning, and if you&amp;rsquo;re a hacking with swift+ member (I am) there&amp;rsquo;s a feedback video. I&amp;rsquo;m about 20% the way through the ZTM and just got to my first one - it&amp;rsquo;s been a more passive experience so far. That might change as the content get harder - so far it&amp;rsquo;s been pretty straight forward HTML, and I&amp;rsquo;m only now feeling challenged in all the CSS layout stuff, so this challenge and feedback is coming at the right time.&lt;/p&gt;
&lt;h4 id="cost"&gt;Cost&lt;/h4&gt;
&lt;p&gt;Although Paul&amp;rsquo;s 100 Days is completely free, it is so good, I felt obliged to pay for the + membership, and I bought a book I don&amp;rsquo;t have time to read in his Black Friday sale - so that&amp;rsquo;s about $340 total. The ZTM Complete Web Developer was &amp;ldquo;on special&amp;rdquo; for $18 when I bought it, but is now saying it&amp;rsquo;s back up to $27. I have a feeling if I visited it in incognito mode it might be on special again. I have heard a couple of people on podcasts mention they have bought more Udemy courses than they can every complete - it&amp;rsquo;s the Steam business model. So I&amp;rsquo;m sworn off any more until this one is finished.&lt;/p&gt;
&lt;p&gt;Overall, I&amp;rsquo;m very happy with this course so far. I&amp;rsquo;d heartily recommend it based on what I&amp;rsquo;ve done so far.&lt;/p&gt;</description></item><item><title>Project Based Learning</title><link>https://blog.iankulin.com/project-based-learning/</link><pubDate>Thu, 01 Dec 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/project-based-learning/</guid><description>&lt;p&gt;A couple of times in conversations on &lt;a href="https://firesideswift.fireside.fm/"&gt;Fireside Swift&lt;/a&gt; and &lt;a href="https://podcasts.apple.com/au/podcast/swift-over-coffee/id1435076502"&gt;Swift Over Coffee&lt;/a&gt; the presenters have talked about the danger of just doing more and more tutorials to learn programming, and the benefit, in contrast, of building your own real app. Although I am very much still benefiting from the 100DaysOfSwiftUI I have been seeing some of the upside of working on a real app in the last day and a half.&lt;/p&gt;
&lt;p&gt;From my search history, I&amp;rsquo;ve learned about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exporting files&lt;/li&gt;
&lt;li&gt;Regex&lt;/li&gt;
&lt;li&gt;Disabling autocorrect in a search box so the search doesn&amp;rsquo;t re-run incorrectly the second you click out of it&lt;/li&gt;
&lt;li&gt;You can&amp;rsquo;t use .onDelete without a ForEach&lt;/li&gt;
&lt;li&gt;There are good websites for converting CSV to JSON, and they mostly run in the browser which is good if you&amp;rsquo;re using sensitive data&lt;/li&gt;
&lt;li&gt;FileDocument&lt;/li&gt;
&lt;li&gt;URLs to the sandbox&lt;/li&gt;
&lt;li&gt;How UUIDs are really unique (spoiler, there&amp;rsquo;s only a tiny chance they&amp;rsquo;re not)&lt;/li&gt;
&lt;li&gt;The frustratingly large number of ways to format dates&lt;/li&gt;
&lt;li&gt;Sorting a FetchRequest in reverse order&lt;/li&gt;
&lt;li&gt;Change in initial values of pickers in iOS16&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s possible, but not as easy as I was imagining to add your own data to the Environment&lt;/li&gt;
&lt;li&gt;How to extract parts of strings&lt;/li&gt;
&lt;li&gt;The Array(Set(array)) method of eliminating duplicates - I actually knew, but couldn&amp;rsquo;t remember the details&lt;/li&gt;
&lt;li&gt;Using a toggle switch&lt;/li&gt;
&lt;li&gt;Jumping around in NavigationViews&lt;/li&gt;
&lt;li&gt;Making a bottom tab bar&lt;/li&gt;
&lt;li&gt;Dynamic filtering of a FetchRequest - revisited the &lt;a href="https://www.hackingwithswift.com/books/ios-swiftui/dynamically-filtering-fetchrequest-with-swiftui"&gt;@twostraws method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adding a search bar to a list&lt;/li&gt;
&lt;li&gt;Using url response to see why a fetch wasn&amp;rsquo;t working&lt;/li&gt;
&lt;li&gt;Refreshed the trick to convert from snake_case in JSON&lt;/li&gt;
&lt;li&gt;Copying files to a remote SSH&lt;/li&gt;
&lt;li&gt;Generating fake JSON data&lt;/li&gt;
&lt;li&gt;The range of an Int32&lt;/li&gt;
&lt;li&gt;Installing apache on the Pi&lt;/li&gt;
&lt;li&gt;Looked up what the mergeByPropertyObjectTrump rules actually are&lt;/li&gt;
&lt;li&gt;How to get the XCode preview back when you accidentally close it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think it&amp;rsquo;s significant that it&amp;rsquo;s a real app. When I&amp;rsquo;m just noodling around making a fun app, if something seems hard when you look into it, there&amp;rsquo;s the temptation to just do something else. In a real app you need to push through. For example I was bogged on having a search bar that live updated the list of results returned from Core Data as the user types. But this was a core part of the user experience required in this app, so I had to push through and learn the answers.&lt;/p&gt;</description></item><item><title>A deadline is a good thing</title><link>https://blog.iankulin.com/a-deadline-is-a-good-thing/</link><pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/a-deadline-is-a-good-thing/</guid><description>&lt;p&gt;I usually have a few days of blog posts written in advance so I can schedule one to come out each day, and not sweat if I&amp;rsquo;m caught up in real life. There&amp;rsquo;s no real reason why I should have that strict publishing schedule, but it is part of my internal discipline to ensure that, at least on average I&amp;rsquo;m making some sort of report-able progress or effort each day.&lt;/p&gt;
&lt;p&gt;And of course, there&amp;rsquo;s the psychological weight of my streak!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-09-07-at-7.45.40-pm.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m bushed from work tonight, and probably would not have done any programming work beyond watching a related YouTube, but I&amp;rsquo;d run out of scheduled posts, and had a half started project as the next thing to do.&lt;/p&gt;
&lt;p&gt;The pressure of having to come up with a post here made me drag it out and do a MVP of it to met the specifications. Yay deadlines.&lt;/p&gt;</description></item><item><title>Learn to Code</title><link>https://blog.iankulin.com/learn-to-code/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/learn-to-code/</guid><description>&lt;p&gt;This blog exists for a couple of reasons - firstly Paul Hudson insisted on posting progress in the 100 days of SwiftUI on social media, and secondly, when I try to explain something, I&amp;rsquo;m forced to understand it clearly - so I know this is a good learning technique.&lt;/p&gt;
&lt;p&gt;This video from &lt;a href="https://fireship.io/"&gt;Fireship&lt;/a&gt; says this idea is called the &lt;a href="https://www.lifehack.org/862931/feynman-technique"&gt;Feynman Technique&lt;/a&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NtfbWkxJTHw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
</description></item><item><title>Uwrap App</title><link>https://blog.iankulin.com/uwrap-app/</link><pubDate>Thu, 25 Aug 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/uwrap-app/</guid><description>&lt;img src="https://blog.iankulin.com/images/img_2549.png" width="269" alt=""&gt;
&lt;p&gt;Part of the &lt;a href="https://twitter.com/twostraws"&gt;@twostraws&lt;/a&gt; programmatic universe is his Swift learning app, &lt;a href="https://apps.apple.com/us/app/unwrap/id1440611372"&gt;Unwrap&lt;/a&gt; that I&amp;rsquo;ve included in my learning goals. It presents little snippets of learning with a 60 second video, and in a written version, then tests the user to check their understanding. It is slightly gamified - you get points for answers, but it&amp;rsquo;s not clear to me how that works beyond the satisfying haptics when your score runs up at the end of a section.&lt;/p&gt;
&lt;p&gt;The tests so far (I&amp;rsquo;m up to Functions) have been code examples along with a &amp;ldquo;true or false&amp;rdquo; question for the set - often &amp;ldquo;This code is valid Swift&amp;rdquo;, but sometimes things like &amp;ldquo;This code prints four messages&amp;rdquo;. At first, I didn&amp;rsquo;t love the tests as they often didn&amp;rsquo;t test the thing I&amp;rsquo;d just learned. For example in the unit about for loops, the hidden error in some code might have been an undeclared variable being used. But the effect of this has been to make me look at each example carefully to look for errors - in the process I&amp;rsquo;ve learned the Swift syntax well (which I would otherwise have relied on Xcode to help me with), and sharpened my ability to spot errors (that I would otherwise have relied on the compiler to help me with).&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_2553.png" width="142" alt=""&gt;
&lt;p&gt;The screen shots here are from my SE2 iPhone - so on a sensible sized device the code may be a little easier to read (no it does not to landscape on the phone). I do value having it on the phone though - it&amp;rsquo;s perfect for making good use of tiny bites of time through the day which would be Swift learning free otherwise.&lt;/p&gt;
&lt;p&gt;Even if you&amp;rsquo;re not following one of Paul&amp;rsquo;s Hacking with Swift courses, the Unwrap app is a great way to polish your Swift knowledge.&lt;/p&gt;</description></item><item><title>Playgrounds are good</title><link>https://blog.iankulin.com/playgrounds-are-good/</link><pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/playgrounds-are-good/</guid><description>&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/img_2778.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;A couple of times (&lt;a href="https://blog.iankulin.com/protocols/"&gt;Protocols&lt;/a&gt; &amp;amp; &lt;a href="https://blog.iankulin.com/named-loops/"&gt;Named Loops&lt;/a&gt;) in the past few days I&amp;rsquo;ve needed to write and run a couple of tiny C or C++ snippets, and I&amp;rsquo;ve acutely felt the lack of Swift Playgrounds for it. It occurred to me that Playgrounds has been instrumental in my enjoyment of learning Swift - it&amp;rsquo;s just a bit magic to grab the closest device and noodle out an idea or to make sure I&amp;rsquo;ve understood a new concept.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/15152540.jpg" width="89" alt=""&gt;
&lt;p&gt;In a &lt;a href="https://podcasts.apple.com/us/podcast/episode-11-chris-lattner/id1505697997?i=1000478871841"&gt;conversation between Chris Lattner and Paul Hudson&lt;/a&gt; I&amp;rsquo;ve listened to recently, they discuss the value of &lt;a href="https://www.apple.com/swift/playgrounds/"&gt;Playgrounds&lt;/a&gt; and the excellent &lt;a href="https://docs.swift.org/swift-book/"&gt;Swift book&lt;/a&gt; in bringing the community along from Objective C. I could not agree more about the value of these two.&lt;/p&gt;
&lt;p&gt;As an alternative, I downloaded &lt;a href="https://apps.apple.com/in/app/c-programming-language/id499545918"&gt;C Language app&lt;/a&gt; for the iPad. This seems like a reasonable editor that uses an online compiler - it worked for my purpose although it wasn&amp;rsquo;t real snappy.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/img_2779.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;A couple of alternatives in the app store mentioned the ability to compile offline - which didn&amp;rsquo;t make sense to me until I pressed build on this one and realised it was using a server somewhere to do that work. So this may well not be the best one for AUD5.&lt;/p&gt;
&lt;p&gt;I was amazed to find heaps of online compilers for things which would have done the job just as well. I&amp;rsquo;ve bookmarked &lt;a href="https://itsourcecode.com/compile-code-run-using-online-compiler-ide-for-free/"&gt;this one&lt;/a&gt; which does all sorts of languages including C and Swift.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://itsourcecode.com/compile-code-run-using-online-compiler-ide-for-free/"&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-08-13-at-12.19.58-pm.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Learning Retention</title><link>https://blog.iankulin.com/learning-retention/</link><pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/learning-retention/</guid><description>&lt;p&gt;In order to have something to put up on GitHub (as part of working all that out) I went back to re-write the Checkpoint 2 code that I&amp;rsquo;d written, but not saved, three or four days ago.&lt;/p&gt;
&lt;p&gt;The task was to count the unique elements in an array. The teaching had been about the complex data types, so clearly the hint was to cast the array to a set. Although the idea of sets is new to me this year, I&amp;rsquo;ve come across them twice. Once in the 100 days course (the same day as having to write this code) and once from a few days earlier from a &lt;a href="https://firesideswift.fireside.fm/157"&gt;podcast episode&lt;/a&gt;. This is high quality learning - getting the same topic a couple of different ways a few days apart, then having to use the information for real.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; This time the challenge is to create an array of strings, then write some code that prints the number of items in the array and also the number of unique items in the array.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; */
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;let strArray = [&amp;#34;one&amp;#34;, &amp;#34;two&amp;#34;, &amp;#34;one&amp;#34;, &amp;#34;three&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;let strSet = Set(strArray)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(&amp;#34;Array size:\(strArray.count) unique count:\(strSet.count)&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>