Philomath's Dream Job Journey Journal

Thank you so much, @CalStark!

I hadn’t thought of doing that, but as I’m currently super stuck on a coding problem, I think I’ll give it a try RIGHT NOW.

Having a coding community give encouragement like this does wonders for when I feel like giving up! Thanks to you, CalStark, and everyone who has rooted for me, so far!

1 Like

UPDATE: Tuesday 1/18/22

Let the Foundations course begin again! This time with my nemesis AutoConstraints! In all honesty, I know that AutoConstraints are a crucial part of making sure my apps can work on many devices. However, every single time I start to learn how to use them, I get so frustrated I reconsider wanting to make apps.

:partying_face:

Today, I made it through all of M1L2 (including the bonus and the exercise). And I was able to quickly create the exercise layout in about 5 minutes! On my own! I knew all the things to change to get them to overlap correctly. I understood how to edit my constraints when they didn’t look the way I wanted. Thank you CWC team for helping me feel more confident!

:sob:

I feel like I finally understand my grandparents who are always complaining when apps update! The interface of Xcode 9 is SO DIFFERENT from Xcode 13. Occasionally, it is SO confusing to try and follow the tutorial videos. I was not able to do the lesson 2 example (where we add the log-in buttons) because I just couldn’t figure out which of the new options corresponded to the old options in Chris’s video. I’ll keep that project open and keep trying to figure out how to replicate the instructions.

(If anyone has help, here’s a thread where I posted about it : M1L2 (UIKit) - Button Images Not Stretching)

1 Like

Update 1/24/22

:partying_face:

UIKit Foundations M1 and M2 completed! (Module 2 was super fast since I did already know the syntax.) I found it helpful to pause the video and try to complete what Chris was doing before he did it. Just helped me practice my syntax. I had no trouble doing the worksheets included and I feel confident moving on to M3 tomorrow. I did appreciate the reminder on optional chaining. It helped me understand a lot of the things we did with optionals at the end of the SwiftUI Foundations course.

:sob:

While I did appreciate finding the worksheets (thanks Chris Parker), I have been really disappointed to see that the UIKit version of foundations doesn’t have quizzes or challenges. I know that SwiftUI is newer, but since programmers need to know both right now I wish this course was given the same level of detail.

Update 1/25/22

:partying_face:

M3L1 - M3L6 completed! I was able to breeze through several lessons which was such a mood booster. I even paused when we were creating the card class and cardModel and built them entirely on my own! I even realized that I’d get duplicate cards before Chris mentioned it and solved the “challenge” on my own initiative! No idea if it’s the most efficient, but I’m proud of it, so I’ll post my solution below:

I’m especially proud of the highlighted line with the guard statement and the continue statement. I pulled those from my coding knowledge and had to try a couple of things and debugging statements before I figured out I should use a continue statement instead of a break statement or a return statement in the else block!

:sob:

Protocols, delegates, and data sources are definitely my new confusing topic. I know I’ll get it over time, but it’s a little hard to wrap my head around. I saved M3L5 to go back to later. But I still understand it WAY better than when the Apple Swift Textbooks tried to explain it. Thank you, Chris!

Update 1/27/22

:partying_face:

Yesterday I completed M3! That means my match game is completed! Moving along! Someday, I’d like to come back to this app and add some features like:

  • Adding an additional alert action to allow people to reset the game and start over

  • Showing people what score they got in the alert text

  • Making sure the timer stops when the user matches everything. Right now, the timer just keeps going even if the user finished the game.

Today, I rewatched M3L5 to review the protocol/delegate concept. I think I’ll watch it one more time tomorrow to make sure it sinks in. Then I zoomed through M4. (Since I had already learned these concepts, it was easy to go quickly through it. But I did enjoy the practice activities in the worksheets.)

:thinking:

I have some questions for anyone further along in programming than me. Mods? Andrew? (@mikaelacaron @Chris_Parker @RedFox1) I hope it’s ok that I asked you guys specifically. If it’s not, let me know and I won’t do it again.

  1. Can anyone explain to me the difference between the MVC (model-view-controller) pattern that we’re learning in the UIKit version of the course and the MVVM (model-view-viewmodel) pattern that we learned for SwiftUI? Do we use a different pattern because of the differences between UIKit and SwiftUI? Or are they the same thing?

  2. I was trying to classify my files from the Matching Game by the MVC pattern and I’m not sure what exactly the App Delegate and Scene Delegate are. I mean, they’re obviously delegates. But where do they fall in the MVC pattern? And I guessed that the CardCollectionViewCell and the SoundManager were ViewControllers. But I’m really not sure.

@Philomath great questions! Of course it’s okay to tag people, it often leads to further responses and discussion :slight_smile:

However, I’d suggest in the future, creating an entirely new post for this! Maybe posting this into the App Development section of the forum. That way more people will see this post, and be able to respond versus people keeping track of your great journal, or someone like me that was thankfully tagged :slight_smile:

The biggest difference I see, so far is that in MVC, the Model actually stores/ holds onto its own data. In contrast, in the MVVM pattern, the ViewModel would hold onto the data. Also, in the MVC pattern it seems the entry point into an app is through the controller versus a View. Also, the Controller seems to take user input, while in MVVM the View does this.

The MVVM pattern seems recently adopted by the mobile app industry, it works better in my opinion with the purposes of classes too. For example, we think of classes as blueprints for things. Rather, we instantiate objects of the classes to perform operations on them. We often keep track of their states with the ViewModel in this way too.

I had to read up on these differences, but here’s an article that helped me out: MVC vs MVVM – Difference Between Them.

Still, even that article gets it wrong, by saying that the models in MVVM hold data. While to me, they don’t. I found this article that more definitively confirms that as well: MVC Versus MVP Versus MVVM - Learning JavaScript Design Patterns [Book]
“MVVM consequently allows us to create View-specific subsets of a Model, which can contain state and logic information, avoiding the need to expose the entire Model to a View. Unlike MVP’s Presenter, a ViewModel is not required to reference a View. The View can bind to properties on the ViewModel, which in turn expose data contained in Models to the View.”

Despite the typos and repeated paragraphs, a skim of this article explains some of the differences too. I like the graphic they use for MVVM the best: MVC vs MVVM- A complete guide with comparison

This GeeksForGeeks article gets MVVM wrong in my opinion by saying the model holds the data. While to me the ViewModel plays this role. Although, I liked its simple definitions of all the components:

As for your second question, I have no idea! Haha - I already have a job in the IT space developing Python apps, and doing Site Reliability Engineering (SRE). I don’t plan to become an iOS developer for a company. Rather, I plan to make my own apps :slight_smile: I know how to manage backend infrastructure/ APIs, databases, so will set that up from scratch as well, or use an awesome service like FaunaDB, if I don’t settle for Firebase. Read up more on my background here

Cheers and keep up the great work!

Andrew

1 Like

Wow! Thank you so much, Andrew @RedFox1! Your explanation was so detailed and it really helped me see the difference between them. That’s also a good tip to put my questions over in a different thread. I’ll do that next time. Thank you so much for taking the time to explain it to me in such detail.

Also, I am so glad to hear that I am not the only one who sometimes has trouble separating parts of my app. :laughing:

Update 2/7/22:

:partying_face: :partying_face: :partying_face:
I keep forgetting to update the journal, but I’m really proud of myself because I’m officially done with iOS Foundations! Both versions of the course are completed and done!

I don’t feel completely competent in all of the concepts taught (especially since there were so few quizzes and challenges in the UIKit version of the course), but I feel fairly competent and want to keep pushing forward to learn new things.

Tomorrow, instead of pushing into the Databases courses, I’ll be creating my own study guide from the iOS Foundations courses with the most difficult syntax flows. (Delegate protocol pattern I’m looking at you). That way I can refer to them later in case I need more practice.

Really looking forward to the next courses!

Update 2/8/22:

Feeling really disheartened right now. I know. I know that I should probably just step away and come back when I’m ready to try this again. I’ve been on a roll lately with understanding swift and Xcode, but I just dipped my toes in the iOS Databases course today and WOW. I am just so lost, confused, and disheartened.

The instructions just don’t work. I can’t even get started.

I’m worried I’ve messed things up on my computer by trying to follow terminal commands that don’t even work. I don’t know what I’m doing in terminal.

I paid a bunch of money up front to CWC because I was really impressed with the iOS Foundation courses. I felt like I was really learning how to do this and that CWC was doing a great job teaching me. But with so many setbacks immediately on entering the database course, I’m worried that my purchases went toward courses I can’t learn from. After scanning the forum, it seems like lots of people have had issues with this course for quite a while.

The worst part is that I really didn’t want to use Google for my apps. Even if I get these random programs installed (Cocoapods, Firebase, Homebrew???), I don’t know if I’ll really need them. I don’t like Google’s business model and I don’t like their privacy policies.

I am such a newbie so who knows if this is even possible: But I wanted to design apps that had people login with their Apple ID and store their data in iCloud. But in order to do that, I have to understand the basics of databases in the first place.

I’m just feeling so frustrated right now with how hard it is to understand the basics.

Forgive the rant, please. I’ll just give up for now. I’m sure this disconnect is by virtue of how fast technology updates. That’s why it’s so hard to teach people technology heavy concepts, I’m sure. But I wish priority (within technology education) was given to making sure introductory explanations work. Because it’s people like me, who know enough to follow instructions - but not enough to know what we’re doing - that cause problems.

See my reply to your other message regarding installing HomBrew.

Also note that you can achieve the same functionality in terms of installing Firebase libraries by using Swift Package Manager within Xcode.

From the Xcode menu select File > Add Packages

In the next window presented paste in the url for the Firebase SDK into the search box at the top right.

That url is specified in the Firebase Documentation on this page. Step 4

https://firebase.google.com/docs/ios/setup

Next, click on Add Package and then wait for it to resolve the Github URL. You will see the progress like this.

When that completes you will be presented with a list of frameworks to select from which are much like what you would specify in a Podfile if you were installing the same packages via cocoapods.

Select each one you require and then click on Add Package.

Those dependencies will be installed and Xcode will then show a message up the top “Indexing | Processing files” so just let it finish that process

That’s it. Done.

1 Like

Hey!! I went through the same thing: you can make it past it! It was so painful for me as well for three or four days. Seemed like such a waste of time, trying to get things working. Still, keep at it!!

Hey one of the biggest benefits of this platform is their community, and more than that, their awesome teaching assistants. Look, @Chris_Parker has already reached out with detailed help/ instructions :slight_smile: he kept working with me and got me through my Cocoapods fiasco on an M1 Mac as well. Super helpful!! So people are here to help you. You got this!

@Chris_Parker Thank you for responding so quickly. I took a two day break and came back with a clear head. I’ll reply to your other post, but knowing that I wasn’t causing huge errors with my computer really helped me calm down and push through. Using the Package Manager has so far worked great. From spending so long on the forum, I know that I might hit issues in a later module since I used the package manager, but I’ll deal with that when I get there. Thank you again for so quickly finding my posts and giving me such clear directions.

Thank you, Andrew. You have no idea how much that helped me. I was feeling so stupid. I knew I was only doing basic terminal operations, but I was terrified that I was ruining my computer because I just had no idea what was going on. To know that you struggled with it too made me feel so much better.

You were totally right. I feel like my critique of the course still stands, but it really needs to be tempered with the following facts:

1- The out-of-date instructions really seem to only apply to the very beginning of the course when you’re learning how to install Firebase. (I was so worried the whole course was going to be like that. But as far as I can tell, that’s not the case.) Micah is doing a great job explaining Firebase so far.

2 - Unlike every other platform I’ve ever tried to learn coding with, the CWC team responds quickly and helpfully every time I contact them. Thank you CWC team for prioritizing that. Andrew is absolutely right. You guys are doing amazing with that and it is an invaluable resource.

I’ll give this feedback elsewhere too, but if there is one thing the CWC team could do to help the confusion when Xcode or other tech updates is to pin a post with the most up-to-date fix. It’s really frustrating to go through multiple fixes that don’t work while you try to find the most up-to-date one. Especially for problems that are constantly being asked. I know I’ve seen Chris often answering the same question (in one format or the other) over and over again for a few common issues.

1 Like

Update 3/15/22

It has been so long since I posted in my journal. And I should probably be better about that in order to improve my accountability.

  1. I never was able to get past my block in the database course. There were so many out-dated instructions and I still couldn’t get cocoapods to work with my new Mac.

  2. For a while, I just gave up on the course entirely and just tried watching more up-to-date YouTube videos to learn. I did learn some stuff. But I’m just getting ahead of myself in some areas and super confused in others.

  3. Now I’m back to trying to watch the database course but since I can’t follow along all the time, I’m trying to apply each step I learn to a new app I designed.

Coding is so frustrating some times. I love when I know how to do something and I get to create this thing from scratch. I love when I get something working!


My current project is so tangled with problems. And because the project builds, I can’t even figure out where to start. I think I’ll have to approach it with a new mind tomorrow. As of now, my UIKit project has these identifiable problems:

  1. The keyboard covers the textFields.
  2. Clicking the sign-in button is presenting a blank view as a pop-over.

I can’t even test if all my work for creating a tableView works, because of this blank view.


Questions:

1. Why is it presenting as a popover and not just a new view.
Need to review different segues

2. Is the view it’s presenting even the HomeView?

  • If so, then why is it blank?
  • Is the tableView broken somehow?
  • Is the data not loading from the database?

3. Is the view blank because it’s presenting the Food Detail view?

  • If so, why does it think a row is selected?

Right now, I can’t even think of ways to test these different questions. Coding an app is really hard y’all.

1 Like

Hey you and me both brother! It’s great to see the posts and progress go right along with it. For now, I’m not going to open up Xcode again until I ensure I journaled about the previous work

Hey don’t give up! Post about it. I ran into the same problem, and almost gave up on it too! However, I posted the issue, despite the duplicates, and someone awesome like @Chris_Parker came to help.
Here I deleted all of the Pods in my current project, because I might’ve corrupted them with everything I tried:
rm -rf Pods
Then I re-installed homebrew. Lastly, I followed the instructions on this post to get things working:

Hey, RedFox! Good to talk to you again. It’s so motivating to know there are other people coding and getting stuck and pushing through too.

I only gave up after Chris Parker and several other people couldn’t figure out why it still wasn’t working. I have been able to use Firestore using the native Package Manager. So I’m still able to make apps with databases. I just can’t do all of the modules since not all of Firebase’s pods are available through package manager.

I haven’t seen those bottom instructions before, so I’ll give those ones a try. It’s slightly different from all the other things I’ve tried.

Wednesday 3/16/22 Update

Guys, coding is less like riding a bike and more like playing an instrument. After taking a week off of coding, I’m finding it takes a few hours to get my mind up and running in the coding sphere again.

Lesson: Don’t be discouraged if it takes a little while to remember how to do things.

Today I:

  • Reset the rules for my Firebase projects so I can keep working on them.
  • Rewatched SwiftUI Databases M3 to help catch up my brain on syntax

I’ve had an enforced three-day break due to my Mac mini going on a go-slow (even slower than usual!) but, fortunately, it chose to do this in the middle of a fairly straightforward set of lessons on the CitySightsApp module so I’ve been able to get back into it quite quickly.

I definitely wouldn’t want to take a week off, especially during a tricky bit.

I do find that if my head is too bogged down with code, and I’m struggling to see the wood for the trees, taking a couple of hours out and going on a run (especially if it’s sunny) works a treat to get me back on track.

That is an excellent idea, Rudderham. I also feel like my mind is clearer after spending some time outside. Foggy brain is a real thing.

Monday 3/21/22:

Today I completed M4L3 of the iOS Database Course (SwiftUI). I also discovered the SwiftUI View Library “course”! Love that addition! I’m going to start watching one view a day to help reinforce the tools I already have in my toolbox and learn new tips on how to use them.


I Learned / Reviewed:

  • How to determine if I my app should show the authentication workflow or the normal capabilities
  • TabView Syntax
  • Enums
  • Picker Syntax
  • Computed Properties
  • Way to make textFields look better
.textFieldStyle(.roundedBorder)
  • Why VStacks never seemed to do the right thing with alignment

DID YOU KNOW???

VStack alignment is RELATIVE to everything IN THE VSTACK! When you set the alignment property of a VStack, it’s not saying how you want that VStack to appear on the screen. It’s saying, “How do you want all the things in here to align relative to each other?” The Vstack itself is only as big as its largest element and by default everything (including container views) are centered on the screen.

SO . . . . how do I get that VStack to align to the left or right?

Put a flexible frame property on the VStack and add an alignment parameter to the frame!

VStack {}
    .frame(maxWidth: .infinity, alignment: .leading)

OR

Put the first item in the VStack inside an HStack with a Spacer() to make the VStack take up all the available space.

VStack (alignment: .leading) {
   
   HStack {
          Text("It's a me, Mario")
          Spacer()
   }

   Text("Wahoo!")
}
1 Like