You are on page 1of 4

I want to build a mobile app - OK, But how?

1. Pre-Building
1. Youre doing this as an exercise to learn programming.
2. Youre building this for a fun side project.
3. Youre building this for someone or $$ a.k.a A job.
b. Misconceptions
1. It takes more than knowing iOS or Android.
2. A lot of different types of engineers work together to make high-quality app.
3. If you only know iOS, you could build a simple app, but probably a pretty crappy
one.
b. Front-End
1. Purpose - Implementing the design and vision of the product.
2. UI
1. Any Front-End product or Front-End engineer is judged on how nicely
their application looks and behaves.
2. The details count and its easier said than done to make something
smooth scrolly.
ii. Navigation
1. Pushing / popping out of different flows.
2. Keeping parallel user states of the app intact.
3. Open up your any app on your phone, and just ask yourself. How would
you design the navigation in this app?
ii. Performance
1. You dont want to kill peoples battery.
2. (Network) Dont download huge things if someone is not on wifi.
3. (Network) Dont request from the backend too often if you can cache
things. Download an image once, cache a copy and keep it around.
4. (Graphics) Chill on the animations if necessary
ii. Offline
1. Dont underestimate this.
ii. UX
1. Different than UI.
1. UI -> How nice this menu looks.
2. UX -> How intuitive is it to sign up?
b. Back-End
i. Purpose - powers the mobile apps front-end. Organizes, persists, and returns
relevant data for the application.
ii. Resources
1. Most front-end apps request over HTTP(The Internet) to the back-end
and the back-end will respond with some data.
2. CRUD - Create Read Update Destroy
3. Business Logic.
ii. Organization Data
1. User data - any data specific to a user. Password, logins, your favorites,
etc.
2. Global data - any data that is needed to power the application itself.
1. E.g. Twitter tracks trending data across various topics, and
presents to certain users who might be interested.
ii. Anything Smart
1. E.g. Some kind of smart recommendation engine or heavy-duty technical
feature would probably be implemented on the back-end.
2. The front-end would just tap into the smarts with some interface.
ii. Notification
1. Many notifications happen. Your friend liked your photo and you got a
popup.
2. All logic about this is handled in the backend. What triggers one, who
does it go to, what does it say etc.
ii. Multi-Services
1. Think Amazon. You interact with one website and you click BUY
2. Maybe an inventory service is updated
3. Payment service is initiated.
4. Another recommendation system gets your transaction details and
updates its modeling.
ii. Scaling
1. How would the app potentially handle Snapchat level users?
2. If you have this problem, its a good problem because people are using
your app.
3. Takings collaboration of all engineers everyone. Backend-engineer
collabs with a devops person, and front-end engineers changes how the
client requests data.
ii. Third Party Backend
1. Your client can directly can speak to other backends. (Third Party)
2. You could use and pay for a third party backend to do Analytics and
logging for you. How long did this user stay on the home page?
3. Your backend can speak to other backends or APIs to help out. You
wont be writing your own payment provider.
b. Design
i. Purpose - No one will use your application without design. If youre building a
mobile application, its intending for a consumer audience.

6. Food for Thought


a. Instagram Image Loading. How would we break it down?
i. On a good connection, we rarely see any loading, the images are loaded
right when they scroll in.
ii. Images still appear when were offline, how?
iii. Your camera takes pictures in really high resolution, do you think
instagram keeps the pics in that high resolution?
iv. How would Instagram post-process the pics to make it more performant?
Where are they hosted?

How to Learn a Programming Language (any)


1. Learn language basics
1. Variable Types
2. Operators
3. Basic input and output
4. Print something on STDOUT
5. Basic program structure
b. Learning basic data structures / containers
1. Dictionary
2. Set
3. List
4. Array
5. Thats about it!
b. Learn basic file I/O
1. How to read a file in
2. How to write a file out
3. Crazy mileage ( simple -> complicated )
4. This goes from simple reading of a text file to.
DATABASE. Postgres, or mongodb (extremely
complicated)
b. Learn networking basics
1. Making HTTP requests with your language
1. Learn how to GET, POST, DELETE, etc.
requests.
2. How to set your requests properly, how to
handle responses and status codes
ii. Learn some basic socket programming in your
language.
iii. Overall, there are LIBRARIES out there to help
you to do this.
b. How to build your project and language
i. E.g. C++ youll have to learn how to build static
libraries, shared libraries, how to link your
applications properly.
ii. E.g. Python developer. Youll have to figure out
how to separate out your modules well.
1. Execution vs import style
2. How does this is all fit into your project?
b. Learn OO / functional programming paradigm tools
i. E.g. for OO you need to learn how to use
classes, how to use inheritance, how to use
polymorphism, etc.
ii. E.g. functional. Youll have to learn how your
language uses blocks or lambdas, how function
pointers or callbacks work.
b. EXTRA Goodies in any language
i. Bag of trickies
ii. You can come back to here and learn the
subtleties and nice stuff of any language
iii. E.g. Ruby has a lot of cool methods on
enumerable types.

You might also like