Let's go ahead and get started with the recording on.
Okay.
Good morning everyone.
Get like 10 more minutes for the submission link.
You've got another. I mean, the closer it closes technically in five minutes. So, submit what you have the next couple of minutes. So, I think you have like two minutes here.
So,
what was I. So my plan today is to
rather disconnected so I haven't copied the answers to it. The server yet so I will do so in a few in a minute once I start talking to these but I want to go over, Simon for solutions.
I want to
say, um, and then I'm.
This is why I want to do today so just to call you about the final exam so today, you're finishing last assignment also the solutions.
And then the final exam is on next week. April 14, so we were actually, I think one of the first exams.
because I believe classes and on the 12th.
So, and then there's normally a day break so I think we're on the first day of exams, which is like, Whoa, that's early.
So, there really isn't even time to do a proper I normally I kind of have a review session during the like preparation the exam period but there is I'll plan on doing the review today, but I'm happy to have on the 13th.
A question answer session, if people have last minute questions.
Okay.
The final exam is.
But you can check to see what exams are yeah okay yeah i'm saying i The reason why I know I know the last day of classes is the 14th is the 12th. And there's normally one buffer day between the exams and the end of classes so on the 14th so it's like,
okay,
so it's gonna be the same format as the midterm and the assignments.
Assignments one through four.
So expect to see you know some echoes of the midterm I'll probably may borrow something from that I haven't finished making it up yet, but I'm expect to see some compare and contrast questions between Android and swifty why, so make sure you've.
So make sure you've. You know, that all should be processed in your head you know you're there. So, um, but we'll talk more about this in a second here I just wanted to just kind of get your mind in the right place.
And then we can go start talking about assignment for when we go ahead and sync the files.
Let me go ahead and sink the files. Okay synced.
And now we can go over here and we go to assignment for. Can I click on the link.
And here we go. Oh, I did.
I didn't wrap the lines that well. So, wait bring up these two promo.
Ah, the questions will be like the questions I've been asking. So,
you know, there's good.
I mean, were there code there are some coding questions on the midterm but very limited What's up, I'll give you some advice about how to take the, why not.
Why is my wiki not loading right now.
Okay, I don't know what happened there.
If you have problems downloading this Finally, can you all get this now if you can't, then I will post a link, I'll post a link to teams.
But yet, if you just go to hear no solutions, can you don't get to the wiki still
mine.
Oh, Hello. Come in.
Here, look book who comes in on the last day of class.
Hello.
Are you doing okay shift. She actually came in jumped in open the door because my door was closed.
Are we good. Are you okay, okay, okay. No no no, I think I'm gonna kick you out though because she wants to eat cables, you out.
When she comes in, she often like runs
really fine.
Why can't I access the wiki.
That's really weird.
Okay, I, anyway.
As long as you as long as it's still up my browser is acting funny but let's just go here so if you change the first. So what's the first question here.
If you change the first line of may activity package, not a real package. The things that break our, our breaks, because the entire are some hierarchy because that's based on the package and that's for getting access to resources so that all is valid
does it work.
Also, it also breaks a reference and main activity in splash screen that Katie, I didn't expect you to set and notice that, but.
But yeah, that also is broken. If.
And the reason why is because the package is what defines, you know, the scope of the scope of the, of the symbols and clean the resources.
So and and note this is defined in Android manifest.
So that's where the packages, really want to show that code here so
okay I just have to stop Android Studio.
Fine.
No. Actually, I'll do this.
There we go.
Why is Firefox flaking out on me.
We can shrink that window over.
And I'm going to quit Firefox.
And then we're going to go to
their.
So notice here in pic fewer to do I actually,
I do include yeah Android manifest. So, the thing to remember is the Android manifest states what's in the, you know, you know what's, you know, kind of like the application is.
And here you have this package that package is what is referenced in the other files, in particular, when you go to the to these here when it says this, that is a reference to it and that package determines what package like an activity main and splash
screen all the also the images you load, those are all in the package of, you know, you know, that is defined here.
So that's, you probably have had these issues when you've copied paste text with things breaking their up.
So, to
of you don't make changes the Android manifest and just as a default one what functional break you lose the splash screen. Instead, it will just start main activity instead of starting the splash screen.
That's what you should have seen because we had to change the attempt.
We had to change this to be.
We know this is, this is actually what you normally have normally hear this the main activity, but here we change this to the splash screen, we made made activity a separate activity here that we start.
So that,
that's all they're up.
Please do ask questions as some of this is unclear if you switch the similarities a dark theme, can you affect the, the layout of the app, other than the opportunity colors.
So the idea here is, I only specified one themes here, and this, you would normally replace this was the day fee.
And if you made the changes here to both theme files you wouldn't see a difference but if you left the night theme, as the same if you switch tonight, in the your on your Android device or the emulated device, you would see that this doesn't, you know,
isn't you know this isn't used and so you see the app title bar, pick your two at the top of the app, which is, this is what suppresses it.
So, that's all I was looking for you to notice that you know, there are different theme files.
And you know, and also that the fact that the change the theme file is what changed the layout there in terms of no hiding or showing the app title mark.
So quick question for, how could you change the layout so that x&y fields are on the left side, left to the screen, and the scalar rotation on the right.
So, this.
I'll be honest, this is the question I did last, this is definitely the most annoying. I had to basically fiddle around with the layout to get it to do this.
But the basic idea of this is that you want.
The things on the left, you have to anchor the labels to the start of parrot started them, and you have to anchor the.
Yeah, you know anchor, I will the other, the scale and rotation are already fine. You just have to make sure that the bottom of rotation is anchored to the bottom, apparently, it'll kind of show up right and then you have to do the same thing on the left,
but you have to do with the labels rather than with the text fields because that's the one that's on the left side, and then anchor those. Besides, so it's a bit of fiddling and get demand that this is you know example one that this does work.
This isn't the only solution, but you should not be hard coding the pixel offsets because otherwise, if you rotate the device. They all break.
Yeah, this, so
it's annoying.
I agree it's annoying. Android layouts are annoying.
I,
wish I had just kind of like a nice thing to say you just do this and it's all not there no it's just you just fiddle and stuff but it's important to do because, and the reason why I put this on here was to make sure that you understood about what's the
difference between start and end and top and bottom and anchoring them in the margins and both those sort of things so what I wanted to ask you about is things like, What is the didn't know what is no margin start margin and what are they doing, what
doing what you know what does it mean to constrain to the start or the end and stuff. Use it is using margins fine, it's fine to use margins for what they're for which is a little bit of a market, but that should not be what determines your overall layout,
it's the margins are just a move it away so it's not right at the edge. So there's a little space around it.
But that shouldn't be your overall positioning your positioning should be based on the console on these constraints.
Then, um so yeah so
if you have questions about how to use constraints I'm happy to talk about those. But, um, but yeah, and there's nothing particularly fun about it but it was it's satisfying once you get it working because then you rotate it you change screen size and
all looks pretty. And that's kind of cool.
But yeah, I think.
Yeah.
With eliminating the pic Prem watch your class and instead putting it it's code into main activity simple to significantly increase the number of lines of code in the program.
Oh groups, I don't think I understand groups that well, there is ways to make these things go together as groups but yeah I haven't filled with that part of the layout stuff.
Oh.
Riley, we're waiting outside margins good inside margins bad.
I'm not sure exactly what you mean by like Android layout something that will have to do more layout.
Android layout something that will have to do more layout. Oh outside the three Yeah.
You don't want the things to be outside of the screen. Yes.
But the margins should never be pushing it off the screen, because you only have small values which are small things if you using them to offset it into like a different part of the screen.
No, that's not what margins are for and you're, you're messing it up.
One Martin to a separate the name view in the might pick up that that sort of thing.
That that's perfect yeah you want to talk a little bit of spacing there. That's exactly what you want.
Anyway, up, we can talk about margins more later but let's let's go on, on, where so would eliminate the pic Prem, watch, watch your classes that but it's kind of main activity so five and six are basically the same questions just asking about the sick,
are the same question is asking about two classes. And the idea here is to recognize that in.
So if we look at how main activity is structured. So we're calling these, we have four calls to pick pram watcher, we have one call to drag you.
And so what that means is if we took away pick brand watcher, and we instead put the code directly in, we would have to duplicate it four times, so that would require require three extra copies of that code, you might be able to do some little that optimization
but it's basically I have three extra copies.
But if you eliminate drag view.
You just use it once, so it's going to be basically the same amount of code. Now that doesn't mean that having dragged view as a separate classes, bad.
It's helps clarity in terms of understanding the purpose of it. So this is a general thing with abstract data types of any kind.
You want to define the abstract data type sometimes it's useful because you use that functionality multiple times. And so it saves on the amount of code you have, but it's also useful to do, even if you only use it once, if it makes it clear how it works.
And maybe it will be and then maybe also can be reused in other programs as a unit, but fundamentally the first rule of programming is trying to make your code clear.
If your code is structured away that becomes confusing you're doing something wrong because yes, the computer has to run it.
But people have to read it in order to fix bugs and extend functionality and such so and and your might have, you may be doing doing so try to make your code clear as possible.
And so that's basically what I'm talking about with five and six is recognizing that within the program execution is drag you pick drag true is it false.
So here is understanding the, why do we have that, you know, the pic dragged here so where's drag right here. So,
pick drag the set true here basically saying that we've moved the picture. And so, that allows these.
The update or to refresh the value of ppx and py.
So because the what's the order of director of of changes here. If you've dragged the picture.
then the.
Then we have to update the text fields, based on the new position of the image, but otherwise normally refresh we update the image based on the values in the text field so we have this bi directional thing and we have to account for that and so that's
why we have the pic drag of Boolean value.
So, the image retains this position retains zoom values was rotated because the program was being preserved or not. So, what's actually happening is they're being destroyed and recreated and so the way you can check this up.
So the easiest way to check this is you can put a little value that's initialized to false. And then have that log and say okay, if that's false then set it to true.
And then, you know, it says true and then generate a log message. and so only generate a log message when the object is created.
the screen these things are all getting re initialized. but the edit text fields are preserving their values automatically. And so when we do an update, we read from those and as we put the position back where it was.
This is a clear I'm happy to discuss this.
And then, nine, why does pic Prem watcher need value changed up. This is all about understanding the feedback loop between
the feedback loop between what do you caught up.
Oh, right.
So when you do and so here we do drag, we do a drag view it's moved.
And then we do this set.
With your was. No, not confusing myself What is the.
Oh, right, right, right.
So when we do a.
We want to make sure that when we do this when we do this refresh this refreshes used elsewhere to make sure that the value in the textual reflects the value of the underlying number because remember we have a number here that's a value that we could
set externally. And then we have this, the actual Edit Text widget, those are separate things we need to keep those synchronized see so much of the work here is in keeping state synchronized up.
And whenever we call refresh, We're calling this set text but set text will cause after text change to be called because we've changed the text and so this a call after it.
So we set this but you know it's already always synchronize and we can get and then this updates and then you basically can get these infinite loops.
So, you need this without this stuff, the thing crashes.
So,
I could demonstrate we can walk through it if you want but that's hopefully you all understand this and saw that.
Now, as far as the extra credit.
I think this is a very good exercise, I have most of the solution together I'm happy to make that available.
Next week if you guys want to but I don't want to.
It's good to do is not necessarily good to review.
At this point if you didn't do it it's probably good to just move on. Except if you're really looking to remember your swift UI stuff that's that's the reason really to do this just so you remember how swift UI works because there's some fiddly bits and
gang this all working and it No it's a.
There's a reason why I made it worth five extra credits, it's a bit of work.
But at this point, if you haven't done it, probably just study I'd rather spend the rest of our time here, reviewing the other things for the final exam.
So any questions about assignment for.
Okay, looks good there. So, what I, what I'd like to do now is start talking about what's going to be at the final exam.
So.
So how should you study for this. What you should do is go to the
go to these assignments and go through each of the questions. Let's go here assignments.
So if you go to the questions here, and you look at these questions, you see, how does the center, you know, go through each of these questions and go like, what is the concept here that's being asked about.
So I here is asking.
Swift dictionaries mutable maps and Caitlyn, and you know maps. What are those, how do they compare. Do you understand those.
How can you change the code that would rotate mode is never none and if it was is changed account.
So, So what's this asking about a thoughts.
Yeah, so this is about saving state change change can so other modes should be no other must be preserved and when the apps. So this is.
So this is a VHS well creating safe instances partially, but it's also about understanding the app life cycle, because there you have to understand that when you rotate, what, how does that differ from the app lifecycle versus the app just starting up.
So because the app, we want the app to be a one way is started and another way when it's rotated so it's like do I understand what the app life cycle is.
And then here, but saved instances as part of that because you know how you save and restore. But how can you change the app so when you switch to another app, and then return the results area shows Welcome back.
So again this is part of understanding the app lifecycle.
Because Welcome back, no return. So, how can you fix the results area so it is horizontally centered, as it was before.
Again this is understanding layout.
And what you do to make something centered so the big thing for your centering is noticing that it's constrained to the start and end. So because this construct then gets put in the center.
How can you move the menu button back to the top again. do you understand how loud works
in the constraints of the menu button. Is there a specified for margin top.
So, what is the process I'm describing right now of going through con concept is exactly how I generate the final exam. I learned go through, that's a concept and I go like, okay, what's a question I can ask about that concept.
So, if you want to practice, you know, studying. One great way is to make up your own final exam, go through the questions make up your own things like what somebody else you could ask about this.
And you have now lots of examples of how I do this, so you should be able to do this on your own and then we'll compare, whether you think you made a better final exam than I did
in the constraints for the menu button. There is a specified for margin top original lyrics is specified affect the appearance.
So this is more about layout, right again this is now margins,
was a TV watcher object for was business with you on. So, this is acting about state variables and asking about how we use watcher objects in Android to achieve the same functionality particularly an object that is updated.
When you know when specific events happen to another, you know, to a to a widget, and then can call other code itself so we have to call the other code manually by using these workshops rather than just having.
We have two things related to the thing state and so those use will all be refreshed. So that's what that's what you expect to understand here.
If we were to add a new entry to the analysis dictionary on the resume method with a new entry show up in the menu. So here.
This is understanding the relationship between the analysis dictionary, and the menu in particular, how are the menus built, when are the menus created or the menus created the beginning of the app and then just stay there or they constantly create whenever
you click on the button.
How is that working.
Understanding how menus are done in Android
adhere to a state very the binding variable, a binding variable is just a reference to a state variable. Exactly.
That's all binding is a binding as a reference to an existing state variable it doesn't create a new variable to reference the existing one. So, if you want to have multiple views access in Swift you are accessing the same state.
You can't have, like, each of them have their own state variable because those will be separate state variables, you have one view, have the state variable, and then have it pass it state variable to the other views include.
And it does go to the arguments and you the dollar notation and stuff and then a binding in the other one.
So yes, it's definitely a reference.
But it's a special kind of reference, it's got a lot of magic stuff going on underneath the but if you look at it but conceptually you can think of it as just a reference as an because it's an active reference.
Not just data code runs, when you access it on stage changes.
Right, so that's seven, eight.
If we were to add a new entry to the analysis dictionary and the resume method with this new entry sharp in the menu. Why or why not.
So again here is understanding that
really eight and
I think eight and six are actually
no director talking about eight, I think.
Anyway, how could you change the program so that no longer use the analysis dictionary. So here is understanding the benefits of using data structures to drive your app versus just hard coding things in your app.
So,
I could ask a simple question of like as know the code but this sort of question actually would make me want to ask a more of a higher level design question whether you know let's say I wanted to do X, Y and Z.
Could I use. You know what I want to use a data structure to, you know, solve this problem, what what I want to put in the data structure.
So this, this makes me think I'd want to do some sort of design type thing.
But that might be a little hard, so maybe I'll what I would do is give you a little bit of code that to analyze, to think about that.
But yeah so that's assignment, three,
and then you know we already talked about this so here, packages is understanding, asking a question about what's the relationship between Android manifest and.
And the main activity and maybe saying so, you know, if you make changes to one Why do you have to make changes to the other. How do those things fit together.
That's also asking here.
If you don't make changes.
You know what's happening. This is asking you about intense. Do you understand the concept of intense Do you understand what they're doing in terms of connecting these things together.
Connecting activities together.
Explicit versus implicit attempt intense now notice I don't ask you about what's an explicit intent wasn't, you know, implicit intent.
Because what I'm really interested in you doing is applying the knowledge, not just remembering it.
I don't actually want you to specifically and making these questions that are not particularly easy to Google. You can't just say Oh what's this only look it up.
No, you have to think through it and see if you understand what you know what it is and what I'm here is like how do all these pieces of an app fit together again here.
What is this, the theme here is like how you themes work in Android the fact that there's different theme files for light and dark and that's how apps specify what they look like when, you know, in day mode versus night mode you can change those colors.
And then potentially the layout, even in dark and noon, could be different unless you read the app developers, make sure to synchronize those things.
How could you change the layout so x and y feel upset so again this is just.
This is the layout.
So probably the thing I would do is have some layout puzzle day and that's actually what I should do I should probably have a little layout puzzle of just saying I want this to happen in this to happen, but it will just be little fragments I don't want
you sitting there and starting up Android, and Android Studio and fiddling with it.
That, that's not good idea, that would take much more time would eliminate pic Prem watch your class and so again this is understanding code duplication and when you want abstract things into a class.
When the production is drag pick very few so this is how events, how you can create circular dependencies between events like you do one thing and then that causes somebody else to happen and so like the thing I probably asked concretely is.
How can you know, if you, if you do a set text. Does that affect the watcher class and it certainly does.
So personally that,
no pic drag these false so this is talking about managing state. So I want to ask you a question about Do you understand how you have to keep state synchronized with your multiple copies of it, because in effect like the position of the position of the
image is actually stored in three places. There's the actual image position.
There's the text field, which has the x, those to text fields the x and y.
You know the Edit Text now x and y. And you have the incoming class which has that value, which has an x&y, all that state has to be synchronized and we have to have code to keep them all together.
This is why state variables can be nice. Now, I will say one problem with state variables is doing state variables in Swift UI without using strings is a real pain, you can make state variables be other things and there's definitely more than nothing
but the code gets but state variables with strings is really simple state variables with other stuff, especially as it gets complicated fast so I found like four simple programs, it's easy just to convert back and forth the strings, more complex one where
you want to have objects and stuff then you really, If do some more advanced stuff which I don't know if we'll cover that next semester so I think will be focusing on Android next year.
That's traditional at 2601 does but I'll probably introduce some jetpack compose and we'll get some of the equivalent stuff.
I really love you.
Okay, so that. So this, again, is asking you about state preservation.
and all you have is that saved the bundle that comes in on create and any. If you need to preserve some state you should put it in there but notice if you include widgets, they may do this preserving of state for you.
Value change, this is, you know, Let's talk about the set tech stuff the pic drag this talking about dragging it versus updates.
Yeah.
So,
I think I honestly at this point, I'm not too concerned about most of you how you're going to do on the final exam.
Because.
Okay, so.
So for those of you who didn't do well in the internet give you a few tips.
First is.
so really you want to.
First, I spent at least the first hour just answering all you can, thinking about it, and then go through and do experiments and look up things and stuff treated, because you should be able to answer most of the exam without it, then maybe you forget
Because, you should be able to answer most of the exam without it, then maybe you forget some things you want to check some answers and then go back and do it.
Yeah.
It's so it will be.
I'll give you an extra, you know 30 minutes the end.
So you can take up to two and a half hours to finish it, but I'm making it as a two hour exam, the first term.
going to try to make it about 50% longer than the midterm terms of content so you should have enough time to do it I mean, expect to be able to spend four.
So, if you calculate like how many points on the test and how long you have you'll know roughly how many minutes you have per point, use that to figure out a budget for each question, and try to first get through everything weight under that.
That way you can then have extra time left over a time savings that you can then spend on the questions that you think are particularly hard, but it's much me a lot of, you know, those are you didn't do well in the mid term.
Those of you didn't do well in the midterm. I know some of you burn time on early questions, and then questions that weren't meant to be that hard. And then last points on later questions that were much easier that you did clearly did understand, but
but just gave inadequate answers or just read the question quickly so you didn't know answer, give everything that was asked for. So, it's like, get through the whole test and see what you can and then come back and deal with the hard ones.
So often those don't answer things to literally some of you just look directly at the code and, like, a lot of you miss points on.
What is the purpose of this, like, Well, it's a dictionary with, you know, strings that are mapped the URLs it's like not as purpose.
You know its purpose is to generate a menu of things to select. And so then you use that to load images from the network.
That's what I'm looking for.
So make sure you, you know, don't read through the questions, give yourself time to really think what am I asking if you know.
some of the some of them not I'm not trying to be obscure.
I'm asking you about things that we have discussed in class and basing things in code that you understand the code that we've talked about.
And that can mean understanding some subtle things like right talk about state variables that's a bit of a subtle thing but a very important thing.
But you should understand that.
But really, that's a valid in terms of the final exam.
Any other questions on the final exam.
So,
let's give some
closing thoughts, I'll say.
One of the things so.
just one last thought is the same to make sure, doing things in the ice can actually be much worse, naturally might get more points, even if you give a slightly less perfect answer, but you explain it properly, as opposed to like, Oh, I got my code working
and then you don't give all the details in your answer.
How many questions I haven't made the exact number of questions but should be about 50% longer than the midterm.
And will it be related to post with UI and Android assignments one through four.
Yes, it is a it is
a.
Oh yes.
If you got some time zone, you know, issues or some sort of timing things, message me I can set up things to like having to get later I just have to make sure you don't know that you can you know you don't share your results with anyone else.
Will there be Bonus questions.
I don't know, I haven't made them Emmett yet.
Maybe.
Oh, depends on it goes. I find that Bonus questions are like, if I come up with a question and I go like this is a good question. But it's too hard. That's what I make into a bonus question.
So,
but in terms of closing thoughts I think
I'll say most of you have done very well in this class, I've actually been rather happy with the grades I've been seeing.
One thing I wanted to know,
What do y'all think of the format of this class.
In particular,
this is a new way of doing tutorials I hadn't really done before, where I've explicitly required check offs and in fact I had moved more towards having written answers to tutorials and instead of doing these sort of deal demos is a different thing.
Okay, so So yeah, anyone.
Okay, so you did like that you trust I it was a bit easier to do, because the class was relatively small, but I think we can do a similar thing with TA.
Um, would you I mean in a larger class would you be okay going to get checked off for for with teaching assistant to say, you know, you've shown your program doing this, then you get checked off.
Is that is that something you all would like or.
Yeah.
okay cuz cuz I feel like, especially with classes being online it's very easy to kind of just sort of be speaking into a void. And so, having some having some interaction helps and also I feel like getting some immediate feedback, or even be able to show
someone like like okay I got this working but I couldn't figure this out like just encouraging that interaction is is key to learning.
So I'm thinking that this worked pretty well, given how you all are doing. But
what I, what well the second year class is going to be. It's gonna be online too because I'm not an Ottawa, and I'm not going to be in Ottawa next winter.
So this class will be online again.
So, I only teach online, just, oh, just so you know, if you're going to take 2601 with me next year. It's going to be online as as come 3000 next year when I teach it because I don't live in Ottawa.
So I do my courses online.
This was a funny thing is this was a special thing that I did.
Starting in 2019 up before the pandemic, and then it kind of, and I had actually had a little more in person parts like I had in person tutorials. So actually what I would do.
I would have in person tutorials for the TA is to meet with you all, but potentially also allow for having an online sexual to do kind of like a sure thing but some way for you to show your work to your TA.
To get checked off for tutorials that I would definitely do like a.
Yeah, there's a whole discussion right now about
the format of how teaching should be done in the university and was, what's the advantage is that in person stuff. I'm not saying I don't I do enjoy teaching person, and having these, I think it becomes less useful, The larger the classes like for a small
class it's really nice to all be there in the same room and be able to interact, especially have discussions and stuff it allows a certain looseness which is nice.
But if you're talking 200 200% lectures.
I don't think there's really much benefit.
Oh, yeah, we see a whole could teach you to do things that could scale yeah that's that's true, yeah. Yeah, dorms. I will say dorms are not the place to live.
You really want to live off campus find some roommates. Get a place I mean having bad roommates the bad but that's a good reason to be social and meet people so you can find people you like and then find a place to live together because random roommates
can be worse than dorms, but yeah.
Find your buds, get a house, it can be nice. Um,
So that's what's the art.
So another question I had is.
So, question, 26 and what is normally pure Android.
The problem with the problem with covering Apple stuff is it requires people to have access to,
to it to an Apple device. It seems that there are a number of people who didn't have access to it easily.
So a number of you using older ones so.
So I have to think a bit about that because the cost description does not mean 16 to one requires apple.
So I can say that safely 26 or one does not.
So,
yeah that's true you know potentially having the you there is the thing of like well you have to have one for this year, next year yeah but I'm
have to think a bit about that.
Yeah, that's, That's the other things I think I might just focus on Android just to have one system, because we're if we want to get into more advanced topics like this inherent repetition in this class we kind of did the same thing same apps kind of
again and again. I couldn't purely build up, so we could actually get some stuff that was pretty complex. By the end of 2016 one if we just stick to Android.
I think I might make reference and show some optional things for Apple but problems to Android but I do think I want to bring jackpot composing because this whole managing state stuff is just waiting
currency of other things up.
What do you. So here's the last thing I want to ask you about.
So.
So here's a question. So, you all now going through the first, our first year curriculum.
Some of you are are are later on in the, in the things. What,
what stuff did I cover in here.
Do you think this model seems to be going away. What do you think your peers would benefit from if it was there I mean, I'm not saying so much the Android and iOS specific things yes that's useful the job market, whatever, but more just any like
what we did in this class that you think would be helpful for the mainstream programming things he felt was particularly valuable is like, oh yeah, that really, you know, I learned something from that, it's perfectly fine to say, No, actually it was cool
here was just the mobile specific stuff.
But like to get some student perspective on that.
Know thoughts
Good example like so for example, I'm the up the handling of no word and nil in in Swift, and in a Caitlyn.
That is not something that's there in Java, not saying that they're Python or the languages. It's a language specific feature.
So if you're not going to teach in. I'm not going to teach swift UI, or color Caitlyn it's a swift or a Caitlyn nice and you're not going to see that directly, but would covering, like, understanding the nature of, of, you know, references to a non existent
objects. And how would you how do you make sure you don't do that and thinking about that.
And the fact that the compiler could potentially you know check for that is that stuff you think covered well in other courses.
Or, like how we spent a lot of time reading code, as opposed to writing code and trying to understand that is that something that you feel like you know okay you do that and other classes that's all covered but no, it would be good to have here are those,
those are kind of like the two big things I see is like there's this you know some little technical things and there's all this stuff about this stuff about making apps and in terms of like layout and stuff.
but
ok so when you say so many things. So it's actually you said Oh,
yeah.
Yeah, I think maybe adding more reading code is useful to the other courses.
Yeah, of course.
Okay, that makes sense.
Yeah, so.
So it sounds like really it's maybe about you know the reading and writing code stuff. And to be honest, part of the reason why I don't have much writing code in this course and believe modifications, is because writing things from scratch and kind of
doing that.
It's kind of painful and these mobile things there's lots of little foot guns, all over the place. So that's certainly something in 2016 one, I kind of want to do more you build an app from scratch and you do that does that.
That's something I feel like we can do in 26 one button 16 one I mean we're just the basic apps I mean if you just look at them there's this all these little things you go like, oh, why do I have that.
You can look and copy.
You can get stuff working by just grabbing templates and just building on examples and get stuff to work but then you got all this code in there that you don't know what's happening.
So for the mobile apps I feel like, try to get a mental model of what's happening first, and then I can start getting you to build apps on your own.
Yeah. So that's why I see it 2601 you're going to be doing, you know, we'll do more apps from scratch.
Yes. That's exactly my plan in the next two years, you're going to have to, you'll be reading some code, but you're also going to be building stuff from scratch part actually a big thing I'll start doing is the code I'll give you will be more like library
code like here is this thing here that I've given you some functionality, build an app to use it to do this, but now you have to then tell me, well what did the library do, is it working right is no is it causing problems, maybe it's messing with your
regular out.
So, some more like more standard development because basically grabbing libraries and stuff using that is is common.
Anyway, all I could keep.