<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Mobile_App_Development_2021W_Lecture_1</id>
	<title>Mobile App Development 2021W Lecture 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=Mobile_App_Development_2021W_Lecture_1"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Mobile_App_Development_2021W_Lecture_1&amp;action=history"/>
	<updated>2026-04-06T01:08:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Mobile_App_Development_2021W_Lecture_1&amp;diff=22767&amp;oldid=prev</id>
		<title>Soma: Created page with &quot;==Video==  Video from the lecture given on January 11, 2021 [https://homeostasis.scs.carleton.ca/~soma/mad-2021w/lectures/comp1601-2021w-lec01-20210111.m4v is now available]....&quot;</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Mobile_App_Development_2021W_Lecture_1&amp;diff=22767&amp;oldid=prev"/>
		<updated>2021-01-12T02:15:18Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Video==  Video from the lecture given on January 11, 2021 [https://homeostasis.scs.carleton.ca/~soma/mad-2021w/lectures/comp1601-2021w-lec01-20210111.m4v is now available]....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Video==&lt;br /&gt;
&lt;br /&gt;
Video from the lecture given on January 11, 2021 [https://homeostasis.scs.carleton.ca/~soma/mad-2021w/lectures/comp1601-2021w-lec01-20210111.m4v is now available].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mobile Application Development&lt;br /&gt;
Lecture 1&lt;br /&gt;
---------&lt;br /&gt;
&lt;br /&gt;
Course outline&lt;br /&gt;
 - grading&lt;br /&gt;
 - communication&lt;br /&gt;
 - collaboration&lt;br /&gt;
 - accommodation&lt;br /&gt;
 - software&lt;br /&gt;
&lt;br /&gt;
Introduction&lt;br /&gt;
 - why this course doesn&amp;#039;t make sense&lt;br /&gt;
 - why it does make sense&lt;br /&gt;
&lt;br /&gt;
Themes&lt;br /&gt;
 - working with large software systems&lt;br /&gt;
   - managing ignorance&lt;br /&gt;
   - mental models &amp;amp; experimentation&lt;br /&gt;
 - design rationale, not syntax&lt;br /&gt;
 - concurrency, asynchronous programming&lt;br /&gt;
   - event-driven programming&lt;br /&gt;
   - declarative programming&lt;br /&gt;
 - security constraints&lt;br /&gt;
 &lt;br /&gt;
Tools&lt;br /&gt;
 - Xcode           &amp;lt;--- only runs on MacOS&lt;br /&gt;
 - Android Studio  &amp;lt;--- cross-platform&lt;br /&gt;
&lt;br /&gt;
you don&amp;#039;t *need* your own device, but it can be fun!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programming languages for MAD&lt;br /&gt;
&lt;br /&gt;
 - there are many languages&lt;br /&gt;
   - Swift&lt;br /&gt;
     - Legacy: Objective-C&lt;br /&gt;
   - Kotlin&lt;br /&gt;
     - Legacy: Java*&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;re starting with Swift and iOS, then will cover Android&lt;br /&gt;
&lt;br /&gt;
iOS is further along on the &amp;quot;modern&amp;quot; path&lt;br /&gt;
 - SwiftUI&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do I say these languages are more &amp;quot;modern&amp;quot;?&lt;br /&gt;
 - not memory management&lt;br /&gt;
   (we&amp;#039;ll talk about that)&lt;br /&gt;
&lt;br /&gt;
It is all about types&lt;br /&gt;
 - especially type inference&lt;br /&gt;
&lt;br /&gt;
Normally with types we have&lt;br /&gt;
 - static &amp;lt;- C, Java&lt;br /&gt;
 - dynamic &amp;lt;- Python, JavaScript&lt;br /&gt;
   - references have no type, only data does&lt;br /&gt;
   - a reference (variable) can refer to data of any&lt;br /&gt;
     type&lt;br /&gt;
     &lt;br /&gt;
With static types, the compiler can check function/method arguments&lt;br /&gt;
  - but at the cost of extra syntax, mental overhead&lt;br /&gt;
&lt;br /&gt;
With dynamic types, the runtime or app code checks types&lt;br /&gt;
  - so you get runtime errors that would have been&lt;br /&gt;
    detected by a compiler&lt;br /&gt;
  - but, you don&amp;#039;t have to spend as much time thinking/&lt;br /&gt;
    declaring types&lt;br /&gt;
&lt;br /&gt;
Swift, Kotlin do type inference&lt;br /&gt;
 - statically typed&lt;br /&gt;
 - but, compiler infers type based on context where&lt;br /&gt;
   it can&lt;br /&gt;
 - if type cannot be inferred and isn&amp;#039;t specificed,&lt;br /&gt;
   you get a compiler error&lt;br /&gt;
     - no runtime type errors&lt;br /&gt;
&lt;br /&gt;
   double f = 32.0;  &amp;lt;-- C-like&lt;br /&gt;
   var f = 32.0;     &amp;lt;-- JavaScript-like&lt;br /&gt;
   &lt;br /&gt;
   f = &amp;quot;Hello&amp;quot;;  &amp;lt;-- legal in JavaScript, illegal in C&lt;br /&gt;
&lt;br /&gt;
   var f = 32.0      &amp;lt;-- Swift knows that f is a double&lt;br /&gt;
&lt;br /&gt;
   f = &amp;quot;Hello&amp;quot;   &amp;lt;-- compiler error&lt;br /&gt;
&lt;br /&gt;
also used for object-oriented programming&lt;br /&gt;
&lt;br /&gt;
Big advantage: removes non-semantic text from code,&lt;br /&gt;
  makes code &amp;quot;clearer&amp;quot; when determining purpose&lt;br /&gt;
&lt;br /&gt;
Big disadvantage: adds magic, because while the&lt;br /&gt;
  compiler knows the types, the developer may not!&lt;br /&gt;
&lt;br /&gt;
Type inference comes from functional programming&lt;br /&gt;
  ML was a pioneer (I think)&lt;br /&gt;
&lt;br /&gt;
Programming paradigms&lt;br /&gt;
 - procedural   &amp;lt;-- C functions, data&lt;br /&gt;
 - object oriented  &amp;lt;-- Java, C++, objects that combine&lt;br /&gt;
                        functions and data, inheritance&lt;br /&gt;
 - functional&lt;br /&gt;
   - no state, only bindings&lt;br /&gt;
   - based on *math*&lt;br /&gt;
   - changes i = i+1&lt;br /&gt;
   - ML, Haskell, F#, &lt;br /&gt;
&lt;br /&gt;
 - declarative &amp;lt;-- Prolog, automated theorem proving&lt;br /&gt;
   - give rules, knowledge, constraints&lt;br /&gt;
   - system figures out how to combine/use them&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Temperature converter&lt;br /&gt;
 - input a string, convert it to a float&lt;br /&gt;
 - but when I converted it, I got a &amp;quot;float?&amp;quot;&lt;br /&gt;
   - could be a float, could be null&lt;br /&gt;
   - using a null is bad, will cause program to crash&lt;br /&gt;
   - so compiler doesn&amp;#039;t allow you to use a &amp;quot;float?&amp;quot;,&lt;br /&gt;
     you have to check its value to convert it to a&lt;br /&gt;
     &amp;quot;float&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
</feed>