Welcome to Application Development

  • Welcome! Thank you for embarking on this journey with us.
  • Please display your name tent. Bring it and display it every day 🙏🏾
  • To find these slides: In Canvas, click on "Modules" > "In-Class Activities" > "Welcome to AppDev 1" > "Load in a new window".
  • You will arrive at learn.firstdraft.com. Sign up for an account with any email address.
  • After you sign up, find the link to the "Live version of the Course Overview slides".

Welcome to Application Development

  • Please click on this link: https://pollev.com/raghubetina727
  • You can click "Skip for now" if it asks you to register for credit. If it asks for your name, you can enter anything.
  • You should see a survey about your prior programming experience (you might need to refresh the page). Please fill out the survey. (We may run into the response limit for this first poll; don't worry, if so. You'll be able to participate in the later polls.)
  • During class, we'll have lots of group exercises; and I hope you'll form study groups to work on homeworks together.
  • Please form groups of 3-5 people, and take about 2-3 minutes each to share:
  • Your name.
  • Where you're from, and which neighborhood/house you live in now.
  • What's one thing you like to geek out about? (It could be a hobby, a tv show, a cuisine, a place; anything.)
  • Compare schedules/locations for potential study buddies.
  • If you finish with that: do any of you have an idea for an app that you want to build?

Let's get to know each other!

Plan for the day

  • A few housekeeping slides.
  • First half of class: An overview of the course and what we're here to learn.
  • 15-ish minute break.
  • Second half of class: First taste of database design.
  • We'll be using interactive slide decks from slides.com, so that you have a real-time copy of my deck in your own browser tab.
  • As I advance to a new slide, your copy should also automatically advance.
  • There will occassionally be polls or other interactive exercises embedded in the slides.
  • If you want to jump around the deck without being locked to whichever slide I am looking at, you can open the "Non-live" link.
  • There are PDFs in the "Files" section of Canvas as well, but they will be missing all of the interactive exercises. (If you can't find the PDF, please remind us.)

Slides.com Live slides

Your main job in this course....

"Questions are places in your mind where answers fit. If you haven't asked the question, the answer has nowhere to go. It hits your mind and bounces right off."

Clayton Christensen

  • Your main job in this course is to think up questions. 
  • The course is question-driven. We need you to ask questions.
  • Raise your hand often, or please just speak up (especially if I'm looking down at my screen writing code).
  • Wave over a TA if you think it's not in scope for everyone; they'll answer or escalate.
  • After class, post questions on our forum, ask.firstdraft.com (a.k.a. Ask). Our rule: You're only allowed to get stuck for 15 minutes before writing up a question.
  • The course is organized according to the the lock-before-key principle; sometimes until someone asks for it, I won't provide the info needed to solve an exercise.

Questions

Aside: the term "app"

  • There are three main kinds of software:
  • "system software" (like Windows and MacOS) interacts with and manages the physical hardware of the computer. Everything else runs on top. A.k.a. the "operating system".
  • "utility software" (like the system clock, file manager, or clipboard) are tools provided by the operating system to software developers, who then build...
  • "application software" — software that people ("users") use directly to achieve some specific goal. Examples would be a word processor or a social network.

Aside: the term "app"

  • Whenever you hear me say "app", what I mean is "application software". I'm just too lazy to keep saying it the long way over and over. (This was the traditional meaning of "app" for a long time, but....)
  • Nowadays many people, when they say "app", are referring to native mobile apps (things that you download from Apple's App Store or Google's Play Store, it shows up as an icon on your phone's homescreen).
  • But, in this course, we'll use the term "app" more broadly; to mean "application software".
  • Our use of "app" is independent of interface; which means that it encompasses native mobile apps, native desktop apps, web apps (used within a web browser), and more.
  • Are we all agreed so that we can just say "app" instead of "application software" from now on? Any questions?
  • Are any of you willing to share why you signed up for this weird, MBA coding course?

Why are we here today?

  • If you said "yes" to any of the questions in the prior programming experience survey, do you consider yourself someone who knows "how to code"?
  • If someone has:
    • set up a landing page with Wix, a blog with Wordpress, or a store with Shopify
    • done data analysis with R or Stata
    • scraped websites with Python or Ruby
    • has written C++ or Java for a CS course
  • does that mean they "know how to code"?

What does it mean to know "how to code"?

  • I think the answer depends on you — and what you want to do.
  • I think when people say they want to learn "how to code," what they generally mean is that they want to be able to build the kind of software that they themselves use on a daily basis.
  • Naturally, this is the kind of software that they are most familiar with.
  • If they are the entrepreneurial type, if they have ideas, these are the kind of ideas they'll have and want to implement.

What does it mean to "know how to code"?

Knowing how to hack also means that when you have ideas, you'll be able to implement them.... It's a big advantage, when you're considering an idea like putting a college facebook online, if instead of merely thinking ‘That’s an interesting idea,’ you can think instead ‘That’s an interesting idea. I’ll try building an initial version tonight.’
 

— Paul Graham, “How to Get Startup Ideas”

Knowing how to hack also means that when you have ideas, you'll be able to implement them.... It's a big advantage, when you're considering an idea like putting a college facebook online, if instead of merely thinking ‘That’s an interesting idea,’ you can think instead ‘That’s an interesting idea. I’ll try building an initial version tonight.’
 

— Paul Graham, “How to Get Startup Ideas”

“Knowing how to hack also means that when you have ideas, you'll be able to implement them.... It's a big advantage, when you're considering an idea like putting a college facebook online, if instead of merely thinking ‘That’s an interesting idea,’ you can think instead ‘That’s an interesting idea. I’ll try building an initial version tonight.’
 

— Paul Graham, “How to Get Startup Ideas”

Knowing how to hack also means that when you have ideas, you'll be able to implement them.... It's a big advantage, when you're considering an idea like putting a college facebook online, if instead of merely thinking ‘That’s an interesting idea,’ you can think instead ‘That’s an interesting idea. I’ll try building an initial version tonight.’ 
 

— Paul Graham, “How to Get Startup Ideas”

What does it mean to "know how to code"?

  • What kind of application software do you use most often?
    • R scripts?
    • Python scrapers?
    • Embedded C programs?
  • Maybe, but for most people probably not the above (at least not directly).
  • How about Adobe Photoshop? Minecraft? Alexa? Those are a bit closer to daily life for most people.
  • What's the first software you use on a given day? Or when you get to work or school? When you're out with friends? What app do you use most often?

What does it mean to "know how to code"?

The kind of software applications that I use most frequently look like this...

"More and more major businesses and industries are being run on software and delivered as online services — from movies to agriculture to national defense.

 

Many of the winners are Silicon Valley-style entrepreneurial technology companies that are invading and overturning established industry structures.

 

Over the next 10 years, I expect many more industries to be disrupted by software, with new world-beating Silicon Valley companies doing the disruption in more cases than not."
 

— Marc Andreesen, "Why Software Is Eating the World" (2011)

Marc, let me fix the title of your 2011 essay for you....

  • Rather than "Why Software Is Eating The World", consider:
  • Why Internet-Delivered Software Is Eating The World
  • Why "Cloud"-Based Software Is Eating The World
  • Why Software-As-A-Service (SaaS) Is Eating The World

Is it cloud-based?

  • Nowadays, nearly every app has some internet component, even it's just backups of high scores or downloading templates.
  • Some heuristics I use to distinguish mostly cloud-based apps:
  • If you turn off your wifi, is it still useful?
    • Canvas, Airbnb, etc — definitely not.
    • Photoshop, Excel — mostly yes. 
  • How much of the value is in the information being stored/retrieved, versus the pleasure/efficiency of the interface itself?
    • Canvas — value is in the information; interface is definitely not a pleasure.
    • Most video games — information being stored is incidental; value is in the interactions.

We're going to learn how to build web apps

  • Not system software, nor utility software.
  • Not 3D games.
  • Not applications that are installed and run on a single device, without any communication to the outside world.
  • We're building Software-as-a-Service (or "SaaS", or "cloud-based software") that delivers useful information to users over the internet, via URLs.
    • In this course, we'll focus on delivering that information through a web browser, but in the future we could add other interfaces — iPhone, Android, Apple Watch, Alexa, etc. We just don't have time in nine weeks.
  • Not only are cloud-based apps a relatively straightforward class of software for beginners to cut their teeth on, it's a super-useful class of software — so much so that it's eaten the world!

The world now turns around the humble...

URL

Uniform

Resource

Locator

Step 1: Type in a URL

(or the equivalents: click on a link, submit a form, tap on something, etc)

Step 3: Profit!

(get back information that is relevant and valuable to me)

Step 2:

(me in 2011)

Rug-who?

  • Hi! I'm Raghu (RUG-oo)
  • I was a non-technical founder of software-based startups.
  • That was... frustrating. The development side of things was a black box.
  • I wanted to to learn "how to code". I dropped back into college.
  • I had a vague I idea of  what I wanted to do — but I didn't know what to learn to get there.

Computer

This is the first of many comics from xkcd.com that you will see in this course 🤓🖤

I did the thing that I think many students in my position do...

  • First CS course. Language: Scheme. End result: I was able to draw a sphere on the screen.
  • Second CS course. Language: C. End result: I was able to create a list of numbers and sort them.
  • Third CS course. Language C++. End result: I was able to sort a list of words. Four different ways, and very efficiently.
  • It felt like it was going to, at that rate, take at least 10 years — including on the job training — before I would be able to implement my ideas.
  • The next quarter, I gave up (yet again) and switched majors.

“That’s exactly the thing that will turn people away from programming forever,” he said. “It’s like teaching someone chemistry as the first thing if they want to learn how to paint.”

 

— me, on teaching CS to people who want to learn application development 

Okay, if not CS, then what should
we start with if we want to
learn how to write web apps?

(And also, btw, if you gave up then why are you teaching us right now?)

Let's go back to 2011 again

"On the back end, software programming tools and Internet-based services make it easy to launch new global software-powered start-ups in many industries — without the need to invest in new infrastructure and train new employees.

 

In 2000, when my partner Ben Horowitz was CEO of the first cloud computing company, Loudcloud, the cost of a customer running a basic Internet application was approximately $150,000 a month. Running that same application today in Amazon’s cloud costs about $1,500 a month."

 

— Marc Andreesen, "Why Software Is Eating the World" (2011)

(Within a few weeks, you'll know how to do this for $17/month)

  • There were many things coming together in the 2000s to make SaaS companies ever cheaper to build and launch — datacenters for rent, the open-source movement, modern high-level languages and frameworks.
  • It was not a coincidence that 2011 is also when the first "coding bootcamps" arose to fill the gap in developers that Computer Science departments were not addressing. They promised to teach you "how to code" in 3 or 6 months.
  • Some of the same things that brought the cost of running a SaaS product down by two orders of magnitude are also why it became possible for beginners to build useful software after learning for 3 months instead of 10 years.
  • I heard about the first one of these, before coding bootcamps were called coding bootcamps. I decided to give this whole programming thing one last try and enrolled in their very first class, in the fall of 2011.
  • It worked! Finally, I learned "how to code" — that is, I learned how to build the kind of software that I had ideas for; not just draw a sphere or sort a list of numbers.

Step 1: Type in a URL

(or the equivalents: click on a link,  submit a form, tap on something, etc)

Step 3: Profit!

(get back information that is relevant and valuable to me)

Step 2:

Not these kinds of things

  • How to implement lists, starting from scratch (i.e., working with the physical memory of the computer).
  • How to sort those lists.
  • How to actually draw to the pixels of the screen.
  • These are solved problems. We can focus on our ideas instead.

These kinds of things

  • How to write programs (of course) — but using the most productive, "batteries-included" languages available.
  • How to listen for requests over the internet (HTTP requests) from users.
  • When we hear a particular request, how to run the corresponding program that we've prepared to handle that request.
  • Usually requests involve storing/retrieving information — how to do that (usually with a database).
  • How to make the information look nice with some formatting.
  • How to host our application, buy a domain name and connect it, etc.

That still sounds like a lot to learn in nine weeks

  • Did you know that the DNA of humans and chimpanzees is about 98% the same?
  • Most of our DNA is the plumbing of being alive, being primates, etc.
  • Only a tiny bit makes us distinct from chimpanzees.
  • We have exactly the same 98% since we descended from a common ancestor, approximately 6-10 million years ago.
  • Similarly, Twitter and Airbnb share 98% of their code.
  • Most of any SaaS application are common plumbing:  having a web server, connecting to the database, etc.
  • Only a tiny bit makes them distinct from one another — tweets instead of listings, etc.
  • Twitter and Airbnb, too, have exactly the same core code; since they too had a common ancestor.
  • In 2003, a Chicago-based designer (Jason Fried) hired a Denmark-based programmer (David Heinemeier Hansson) to build an idea he had for project management SaaS. They called it Basecamp.
  • DHH, as he's known, loved an obscure programming language called Ruby, which was invented in Japan in the mid 1990's. Ruby was slow, but expressive and "beautiful" (to David). Jason didn't really care what DHH used so he said 👍🏾
  • Once he got Basecamp working, DHH extracted the 98% of it that was common plumbing for all SaaS and released it for free, open-source. He called this package of Ruby code that let you quickly get a web application up and running "Ruby on Rails." It was, at the time, revolutionary.
  • So this is going to be our hack:
  • Much like Twitter, Airbnb, NYTimes, GitHub, and tens of thousands of other companies, we're going to borrow DHH's (and, by now, thousands of other contributors') code.
  • This will let us skip re-inventing tens of thousands of lines of code and many years of learning.
  • We just need to learn enough of the Ruby language to be able to navigate Ruby on Rails, the framework. ("Framework" or "library" means "a bunch of pre-written code we're borrowing".)
  • This will be our M.O. in other areas as well. For example, we'll learn just enough of another language, CSS, to navigate the Bootstrap framework for our front-ends.
  • In general, we will stand on the shoulders of giants.

Play the whole game

  • For me, the crucial piece in finally making programming "click" was learning all the skills needed to deploy an application, not just one or two. I.e., we became full-stack developers.
  • Most courses or books teach you one language or skill, but then you're left wondering how that fits in with the 99 other things you need to know in order to deploy an application.
  • In other words, we learned how to play the whole game.
  • Making a real, functional application was motivating! It gave me a reason to continue learning — to improve it, and to make my next one.
  • And I was having interesting and productive conversations with my team immediately.

The teaching team

Beginners

Don't know
what they
don't know

Intermediate

Know
what they
don't know

Advanced

Know
what they
know

Experts

Don't know
what they
know

Awareness

Knowledge

Best
Teachers 💯

Worst
Teachers 😔

Let me assure you that none of us are experts 😐

Ben Purinton

We're all relatively recent beginners... your questions cannot be "dumber" than the ones we had not too long ago. Ask away.

Swaathi Kakarla

Jelani Woods

Raghu Betina

Summer 2024: new things

  • This quarter is the debut of a complete overhaul of the course.
  • This is, by far, the biggest set of changes since I created the course in 2013.
  • I hope and believe the new tools & content will make the course more approachable, efficient, enjoyable, and up-to-date with recent developments (like AI).

New things: ask.firstdraft.com

  • Rather than Canvas Discussions or Piazza, we built our own Q&A forum: ask.firstdraft.com — "Ask". Sign up here.
  • It has an AI TA built-in so that you can get instantaneous answers to many of your questions — we call it "GP-TA".
  • The underlying technology is a machine learning model called GPT-4 from a company called OpenAI — you may have heard of it.
  • OpenAI built a chatbot called ChatGPT to advertise the capabilities of their model (and it took the world by storm).
  • But OpenAI's real revenue comes from 3rd-party developers (like me, and soon you) who integrate GPT-4 into their apps (like ask.firstdraft.com).

New things: ask.firstdraft.com

  • "Why should I use Ask (ask.firstdraft.com) rather than ChatGPT (chat.openai.com) itself?"
  • Ask uses the latest version of the model, GPT-4. It is vastly better than the GPT-3.5.
  • Free users of ChatGPT are only allowed a limited number of GPT-4 messages per three hour window; after that they switch you back to GPT-3.5. This greatly diminishes it's main utility (vs e.g. Google) — the ability to have a dialogue.
  • With Ask, there is no limit to how many messages you can send GPT-4. I.e., you can ask as many follow-up questions as you want.

New things: ask.firstdraft.com

  • "Why should I use Ask (ask.firstdraft.com) rather than ChatGPT (chat.openai.com) itself?"
  • In Ask, we've specially tuned GPT-4 for this course. You'll get different responses for the same question vs. ChatGPT.
  • To reach us (the instructors)! We're on Ask too (it's a forum after all), and we're still better than GPT-4 (for now 😅).
  • On Ask, Instructors will be monitoring responses, so we can step in when the AI "hallucinates" a completely wrong answer — which it still does sometimes, even GPT-4.
  • It's free for you, unlike ChatGPT Pro.

New things: ask.firstdraft.com

  • Please consider making your questions visible to everyone; usually, many others have the same question and would benefit from the discussion.
  • If you select "Only author", the instructors will still see it (so that we can chime in, correct GP-TA when it's wrong, and observe how students are using this new tool).
  • We're not watching to check for "cheating" — use it however you want to.
  • That said, try to use GP-TA as a tutor/brainstorming aid. Try not to let it do all of the heavy thinking for you. That defeats the purpose.

New things: Codespaces

  • Rather than installing a bunch of things on your laptops — which invariably causes headaches and delays — we'll be using a cloud-based Integrated Development Environment (IDE) that provides everything you need to write & run apps right within Chrome.
  • We've been using a cloud IDE for years with great success. What's new this quarter is the shift to a product called Codespaces, made by a company called GitHub (purchased by Microsoft).
  • GitHub is the center of the software development universe — pretty much every company and open-source project uses it already for code storage, collaboration, and lots more.

New things: Codespaces

  • Using Codespaces instead of other options should have many benefits:
  • Developing familiarity with GitHub has always been a primary learning goal for this course. Using Codespaces will enhance that familiarity.
  • Allows us to use powerful 3rd party extensions from the official Microsoft marketplace.
  • Lets us use an educational plan that makes it free for you (in the past, you would have to pay if you exceeded 50 hours/month).

New things: learn.firstdraft.com

  • We've written a brand new content management system: learn.firstdraft.com — a.k.a. "Learn".
  • In the past, readings (of which there are many) were static.
  • Now, readings include interactive exercises — multiple choice questions, programming challenges, etc.
  • This provides instant feedback — are you actually getting it? — and engagement.
  • I hope it helps reduce skimming & skipping — the bane of my existence when teaching MBAs! 😅

New things: learn.firstdraft.com

  • Learn now contains most of the course structure, rather than Canvas.
  • You get to a Learn course from a Canvas assignment.
  • Your score for the single Canvas assignment will go up as you progress through the Learn course.
  • Your homework for next week is to finish the "Getting Started" mini-course — this contains the bulk of the work this quarter.
  • Due dates are visible in Learn, not in Canvas.
  • You can still submit work after the due date. You will take a small discount.
    • Corollary: don't ask me for extensions!

New things: all new content

  • Most importantly: we're writing new content, recording new videos, and creating new projects.
  • We'll be asking you to report how much time you're spending on each assignment, to help us pace out assignments.
  • Since we're adjusting as we go, sometimes some parts of the homework won't be posted until 5pm on Fridays.

New things: lots else

  • Those are the biggest things, but there are also lots of other changes.
  • Behind the scenes updates to e.g. Ruby and Rails versions, so that you have access to the latest language features.
  • Updates to other, existing tools:
    • ideas.firstdraft.com helps you write your own apps.
    • grades.firstdraft.com provides automatic grading and instant feedback on programming projects.

New things bring rough edges

  • I apologize in advance for the rough edges you will encounter, as the pioneers of these new things.
  • In the bottom-right corner of learn.firstdraft.com, there's a button you can click to submit feedback.
  • Please use it to make feature requests, report bugs & typos, and any other feedback you can think of.
  • We'll prioritize the issues that you upvote most.
  • You will have a very significant impact on the experience of the next several generations of learners.

New things bring rough edges

  • We'll have even more office hours available than usual on our calendars. The links to book office hours are on the Canvas homepage.
  • Book lots of office hours! It's my #1 tip for succeeding in this course.
  • Remember that the slots on our calendars are just suggestions; it's not an exhaustive list. If you can't find a slot that works, post privately on Ask and list some times that work for you.
  • Thank you.

Add/Drop

  • If you decide to Drop the class, please do it ASAP so that others can Add before the deadline.
  • If you're not registered yet and want to start the homework, send us an email and we'll provide access to the first assignment.
  • Email boothregistrar@lists.chicagobooth.edu for more information about Adding.

Next up: lab time

  • This concludes the lecture for today.
  • Next, we'll together dive into the Week 1 (in class) module on Canvas. 
  • Instructors will be standing by to assist with any issues you encounter.
  • If you finish the Week 1 (in class) module, keep going to start on the homework — the Week 2 (before class) module.
  • Please pepper us with questions as you're working!
  • Please also review the syllabus (posted on Canvas) and ask any questions you have about that.
  • If you have ideas for your final ("first of many") project, come run them by me.
  • You can call it a day and head out whenever you like.

[AppDev] 01. Course overview

By Raghu Betina

[AppDev] 01. Course overview