Wednesday, 22 February, 2017 UTC


Summary

This article spells out everything you need to kickstart your journey as an AL engineer or data scientist.
If you are reading this because you are joining the Altitude Labs team, first off, we're excited to have you on board!
We strive to make Altitude Labs a great place for engineers, data scientists and designers to work. In part, this means making sure you work alongside bright, proficient and motivated people. It also means helping you grow both as a person and an engineer.
We have developed a curriculum to help you hit the ground running so that we can focus on advanced concepts from Day 1.
It is VERY important that you set aside an estimated 100-150 hours of time to go through this material. You are expected to know this material thoroughly on the first day to join us.
If you have any questions, feel free to contact us!

Contents
  • Typing
  • Imposter Syndrome
  • Debugging
  • Terminal
  • Git
  • Web
  • iOS
  • Android

Typing
Applies to: Everyone
The keyboard is our instrument through which we make magic happen. It helps if we are able to type accurately, quickly and without looking at the keyboard.
If you cannot touch type, please dedicate a few hours each day to learning it. This will help you tremendously.
Requirements:
  • Be able to type accurately, quickly and without looking at the keyboard
  • Touch the mouse and mousepad only when you absolutely need to
  • Know common shortcuts on Mac OSX

Impostor Syndrome
Applies to: Everyone
"Impostor Syndrome" is a term for the persistent and foreboding feeling that I am undeserving of my position, that everyone around me is more talented and qualified than I am, and that any day now the other shoe is going to drop. It's all bad news, of course; feeling unqualified only sandbags future learning. Don't be alarmed! For numerous reasons it's a common experience for many engineers. Read up on how to approach it.
Imposter syndrome does not only apply to code. It also applies to being resourceful, selling yourself, public speaking, communication, speaking up, initiative and other soft skills. Be ready to step out of your comfort zone when you join us.

Debugging
Applies to: Everyone
Debugging code in the browser is convenient, since all modern browsers come with a powerful debugger built right in. The debugger gives you the ability to pause the execution of your program, inspect the values of variables in real time, and even run new code in a live context if necessary. Leveraging those tools to analyze and determine the cause of unexpected behavior is the most essential programming skill you will ever learn.
Google Chrome, our browser of choice, has a great set of development tools that we'll dive into.
Takeaways:
  • Know the debuggers question
  • Be proficient at debugging in Chrome
Reference:
  • Discover DevTools, Chapters 1-5
  • Debugging JavaScript

Terminal
Applies to: Everyone
Takeaways:
  • Be able to create, update, remove, navigate folders and files in Terminal without using Finder or excessive googling
  • Understand the folder structure on a Mac
  • Be able to use the following commands instinctively: cd, ls, mv, cp, rm, pwd, mkdir, scp, ssh
  • Be able to create ssh keys and add them to Github with the help of an online tutorial
References:
  • How to setup SSH agent forwarding

Git
Applies to: Everyone
Takeaways:
  • Know what a version control system is and why you'd want to use it
  • Be proficient with git commands including clone, push, pull, add, status, diff, commit, rebase, branch, cherrypick, log, reset and remote
  • Be able to create a feature branch and make a pull request
  • Be able to interactively rebase your feature branch if history has changed
Reference:
  • GitImmersion: Labs 1-30: Part one of a comprehensive Git walkthrough. It assumes no previous experience, which makes it a friendly introduction to Git.
  • GitHub - Forks and Pull Requests: A quick video covering two of GitHub's most important features: forks and pull requests. These features are central to collaborating on open- and closed-source projects and are a main component of the workflow you'll use at Altitude Labs.

Web (Frontend & Backend)

Applies to: Web engineers
Takeaways:
  • We use the technologies like React, React Native, Node, Sass, Webpack, Gulp, ES6, MySQL, PostgreSQL, MongoDB and Amazon Web Services at work. Be sure to have some understanding of what they do and how they work
  • Know your Javascript fundamentals: syntax, closures, the keyword this, differences between ES6 and ES5, promises, async functions
  • Be comfortable converting a design image into pixel perfect HTML and CSS. This means using as few HTML elements as possible
  • Basic understanding of CSS rules (e.g. difference between block, inline-block; what is float; what is position: absolute, position: relative, position: fixed; when does vertical-align apply?). CSS is mostly comprised of rule-based principles which can be learnt in your own time. It is not meaningful to have to go through them at work.
  • Know how relational and NoSQL database work. Understand what database migrations are.
  • Understand how templating systems work
  • Understand the difference between functional and object oriented programming
  • Be comfortable creating and working with RESTFul API in Node.js
References:
  • A Visual Guide to CSS
  • Functional vs. OOP

iOS

Applies to: Mobile engineers
We use Objective-C and Swift as our development language for iOS apps. Be sure to familiarize yourself with the following concepts:
1.Objective-C Basic : Introduction of String, Number,Array and Dictionary
Link: http://www.techotopia.com/index.php/Working_with_String_Objects_in_Objective-C
Link: http://www.techotopia.com/index.php/Understanding_Objective-C_Number_Objects
Link: http://www.techotopia.com/index.php/Working_with_Objective-C_Array_Objects
Link: http://www.techotopia.com/index.php/Objective-C_Dictionary_Objects
Duration: 1 Hour
Although these are some fundamental topics, we recommend you to read through them to make sure that you didn't miss any essential concepts.
2.Auto Layout
Link: http://www.sitepoint.com/building-adaptive-user-interfaces-ios-8/?utm_content=bufferad687&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
Duration: 0.5 - 1 Hour
Since there are multitude of iPhone deivces with different screen sizes in current market, this tutorial demostrates how to make an adaptive layout.
3.MVC and Delegate
Link: http://www.tutorialspoint.com/ios/ios_delegates.htm
Duration: 0.5 Hour
Demonstration of how to use delegate.
Link: https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/DesignPatterns.html
Duration: 0.5 Hour
Concept of MVC design pattern and why delegate is so important.
4.Declare private variable in Obj-C
Link: http://inchoo.net/dev-talk/ios-development/how-to-add-a-property-via-class-category/
Duration: 15 Mins
Objective-C does not have access modifiers. However, it's a good practice to separate public and private variables. This tutorial shows a workaround to declare private variable in Obj-C.
5.Obj-C style guide
Link: https://github.com/altitudelabs/wiki/blob/master/style-guides/style-guide-objective-c.md
Duration: 1 Hour
Now You've mastered the essential knowledge of iOS development. However, to be a good team player, you need to know how to make a clear and readable code so other people can review your masterpiece easily. Please read this wiki page in detail. It might cost you a lot of time but it will benefit your career.
6.Simple UITableView
Link: http://www.appcoda.com/ios-programming-tutorial-create-a-simple-table-view-app/
Duration: 0.5 Hours
6.UITableView with custom cell
Link: http://www.appcoda.com/customize-table-view-cells-for-uitableview/
Duration: 0.5 Hours
7.JSON in iOS
Link: http://code.tutsplus.com/tutorials/getting-started-with-jsonmodel--cms-19840/
Duration: 0.5 Hours

Android

Applies to: Mobile engineers
We use Android Studio as our development environment. Read up and familiarise yourself with the following concepts.
Fragment
Link: http://www.vogella.com/tutorials/AndroidFragments/article.html
How to pass argument to fragment using static constructor
Link: http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html
Custom ListView, GridView, RecyclerView
Link: http://www.codelearn.org/android-tutorial/android-listview#Custom-ListView-with-BaseAdapter
ViewPager
Link: http://www.javacodegeeks.com/2013/04/android-tutorial-using-the-viewpager.html
Multithread
Link: http://www.techotopia.com/index.php/A_Basic_Overview_of_Android_Threads_and_Thread_handlers#Creating_a_New_Thread
AsyncTask
Link: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
Screen rotation
Link: http://www.gitshah.com/2011/03/how-to-handle-screen-orientation.html
Link: http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
JSON
Link: http://www.survivingwithandroid.com/2013/10/android-json-tutorial-create-and-parse.html
Networking
Link: http://hayageek.com/android-http-post-get/
Link: http://www.vogella.com/tutorials/AndroidNetworking/article.html
ImageLoader API for image cache and display
Link: http://www.101apps.co.za/index.php/articles/gridview-tutorial-using-the-universal-image-loader-library.html
ActionBar
Link: http://www.androidhive.info/2013/11/android-working-with-action-bar/
Custom view
Link: http://www.vogella.com/tutorials/AndroidTouch/article.html#singletouch
Memory management
Link: https://www.youtube.com/watch?v=_CruQY55HOk
Link: http://android-developers.blogspot.hk/2011/03/memory-analysis-for-android.html
Re-using layouts
Link: http://developer.android.com/training/improving-layouts/reusing-layouts.html