Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strikingly Backend Training Checklist #10

Open
17 of 86 tasks
JiangYongKang opened this issue May 30, 2018 · 0 comments
Open
17 of 86 tasks

Strikingly Backend Training Checklist #10

JiangYongKang opened this issue May 30, 2018 · 0 comments
Assignees

Comments

@JiangYongKang
Copy link
Owner

JiangYongKang commented May 30, 2018

Version Control

Basic Ruby & Rails

Practical Ruby

Check out these gems we use (used, or potentially will use) for production environment and development:

  • Web server: Thin, Puma, Unicorn, Rainbows!, Passenger(Raptor)
    • What are the main features provided by these web servers, respectively?
    • Comparing Puma v.s. Unicorn, what are the pros and cons?
  • Worker: Sidekiq, Resque
    • Why do we need worker?
    • Sidekiq v.s. Resque
    • Why is Active Job introduced in Rails 4.2? What problem does it solve?
  • Web Frameworks: Rails, Sinatra, Grape, Cuba
    • What scenarios are these frameworks designed for, respectively?
    • What problem do they solve, and what problem can they potentially introduce?
  • Unit Test Frameworks: RSpec, Minitest
    * What does spec, mock, and stub mean?
    • Pros and cons of RSpec and Minitest

Check out these critical gems we use in our product:

  • devise
  • doorkeeper
  • cancancan
  • rollout
    • What can rollout be used for?
  • multi_json
    • Why not use built-in JSON processor?
  • faraday
    • What's the advantage of using faraday?
  • draper
    • What's presenter? What's decorator?
    • Why do we need to use it?
  • sidetiq
    • What's the advantage of using sidetiq as scheduler?
  • gon
    • What problem does it solve?
  • rabl
    • Why do we need this?
  • jbuilder
    • Compare to rabl, what's the pros and cons of jbuilder?
  • dalli

Check out these critical gems we use for BDD:

  • rspec
    • What does mock & stub mean?
    • Why do they deprecate old syntax like "should" and "stub"?
  • factory_girl
  • vcr
    • What problem does it solve?
  • timecop

Advanced Ruby

Checkout "Metaprogramming Ruby":

  • Chap 1. Metaprogramming Ruby
  • Chap 2. Metaprogramming Rails
  • Chap 3. Idioms, DSL & Spell book

Ruby Object Model:

Advanced Rails

Advanced programming techniques

  • Inversion of control
    • Google what you can find about IOC
    • What great improvement can IOC provides to a Rails stack?
    • What benefits can you get with test stack from IOC?
    • How would you implement it in Ruby?
  • Single Responsibility Principle
    • Google what you can find about SRP
    • Why is it important principle to follow?
    • Does that apply for processes or data?
    • Can you imagine simple examples of non SRP code where you can explain why not being SRP is a pain?

See Flo to discuss about your research and thoughts.

Development Workflow

Read the following materials and get familiar with our workflow:

See Flo to discuss about rails large scale applications conventions

Architecture

Our current architecture introduction:

This part will be covered by the backend training session. Please write down your questions if you have any._

Strikingly used to be hosted on Heroku. It is good to get some idea on our old architecture because we borrowed a lot of concepts and best practices from Heroku when designing our new architecture.

Here are some best practices on how to build a SaaS platform:

Third-party Services:

Play around with these 3rd party services we use in daily work:

  • Travis-CI
  • Code Climate
  • Bugsnag
  • Logentries
  • New Relic (optional)
  • Datadog

Frontend Learning Material (optional)

LESS & CSS

Less - 0.5 day

Should be able to answer:

  • What's the difference between position: relative and position: static?
  • What are 3 ways to center an element, and when should they be used?
  • What are the pros and cons of using em units?

Javascript

Strikingly has a fairly sophisticated frontend system, be sure to familiarize yourself with the following technologies

Basic Javascript 1-2 days

https://github.com/airbnb/javascript/tree/master/es5 - Familiarize yourself with some basic javascript concepts. Take note that this is a style guide from AirBnb, we don't necessarily follow all the styles (we have our own in coffeescript), but it covers a lot of basic javascript concepts.

http://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/ - Javascript scoping is probably the most misunderstood part of the language. Having a very good command of it can give you the functional power of Javascript.

If you have more time, go to our library and grab Javascript the Good Parts and read it. Or, go here and read it on your computer: http://www.safaribooksonline.com Set up a trial account and check out the book.

Make sure you can answer the following questions before proceeding

  • Difference between == and ===?
  • What's lexical scope?
  • What do .bind, .call and .apply do?
  • How to create a object that has private and public scope?
  • What are the reserved keywords in javascript that should be avoided? Why are they reserved?
  • How does prototypal inheritance work?

ES6

All the new modules we write are in ES6, so please get familiar with it.

https://babeljs.io/docs/learn-es2015/ - Introduces ES6 features

https://github.com/strikingly/javascript - Our ES6 coding style

Make sure you can answer the following questions before proceeding

  • What problem is rest and spread trying to solve?
  • What are the ES6 features covered by Coffeescript?
  • What is Babel? What does it try to solve

React.js + Flux + Morearty - 1 week

Task: Build a todo list with no use of flux or anything

Task: Build a todo list with the use of flux

Task: Build a todo list with morearty + flux.

  • Read about redux

Task: Build a todo list with redux

Make sure you can answer the following questions before proceeding

  • At which of the React.js component lifecycle are we sure that the DOM has been changed?
  • How do we avoid component re-rendering?
  • What is a Flux store?
  • Why do we need the constants in Flux?
  • What does Immutable.js solve?
  • Where do we put async calls?
  • What does Morearty solve?

Practical Javascript

npm

  • What are the alternatives to NPM?
  • What is bower? What does bower provide that NPM doesn't?
  • Can we use node.js modules from NPM in our frontend? If yes, what are pros and cons of this approach? If no, why not?

webpack

  • What's the difference between commonjs and AMD?
  • What are the differences between webpack and Require.js? Why do you think we prefer webpack over require.js?
  • Can we chain loaders? If so, how would you do this?
  • Write an example code that use code-splitting to async load js chunk

co

  • What's callback hell?
  • How does co avoid this?
  • What are the other alternatives?
@JiangYongKang JiangYongKang changed the title Self Training Checklist - Yongkang Jiang Strikingly Backend Training Checklist Jul 23, 2021
@JiangYongKang JiangYongKang self-assigned this Jul 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant