Giter Site home page Giter Site logo

hacking_learning_path's Introduction

LambdaClass Hobby Club - Hacking Learning Path Handbook

Home

Welcome! This is a guide intended to aid employees in their first days in the company.

Disclaimer

Top-down management leveraging command-and-control hierarchies are for the mahogany boardrooms of yesteryear. We are navigators, adventurers, and explorers of the future. We are married to the sea - Yearn's Blue Pill

"With great power, comes great responsibility" probably Uncle Ben, but who knows

At Lambda We won't micromanage you because we don't want to: we give flexibility but ask for responsibility in exchange. Of course you can have days off to study or if you feel sick, but you can also have days off if you feel brain fog, nervous or a bit under the weather; we actually prefer it that way.

If you feel healthy and are comfortable, you will be able to solve more efficiently the problems you have in front of you. And even better, you will contribute to a healthier workspace.

Nobody wants to give up, that's a common emotion. The good news is that you are not giving up, you are getting to know yourself better, so you can recharge energies and keep learning and improving. In turn, when you are working we expect you to hit goals, be proactive and be a valuable member of the team.

There are three key elements we want you to have present at every moment: Communication, Accountability and Empathy.

  • Communication is a key aspect for every human relationship. If you can measure your words to give a positive clear message, you can achieve anything in life through teamwork. Try labeling your emotions before communicating, since it is likely that people in front of you do not know what is going through your head. Also, be transparent but assertive if you disagree about something, it will help understand your point of view. Finally, try to avoid direct messages, working on channels allows more people to be on the loop and better feedback can be given.
  • Accountability. Everyone makes mistakes, learners do something about them. If you get something wrong, communicate poorly or even feel overwhelmed about a situation, raise your hand and say it. It's very likely that a process failed, not you. Many people will be there to help you sort the issue, and you will surely learn something along the way. If you keep quiet and don't say anything you will regret it later when the truth burst through another hole.
  • About empathy, we are all human beings and have complex emotions, if you are feeling great, it doesn't mean your colleague isn't feeling like shit. Perhaps your coworkers don't feel comfortable talking about emotions, so go talk with them and help them. You can talk to them or to their manager if you feel something is going on with them. There is a time when everybody feels weak and needs someone else for support. So be a hero, be empathic.

If you are reading this, you are probably giving your first -or second- steps on the long journey towards being a good developer, but first try to be a good human being and you will see how far that can get you.

Company Culture

Principles for success and teamwork philosophy

We follow a code of conduct that must be followed to ensure a safe space in the team. You signed it when you entered Lambda and we expect you to follow it. Basically, treat everyone with respect.

Learning

Note: Reading order is from top to bottom.

This section is meant to guide you during your learning period.

Practice Level 1

Estimate time: 53-57 hours

Linux

Estimate reading time: 4-5 hours

GDB

Estimate reading time: 2 hours

Reference:

Unix Philosophy

Estimate reading time: 2-3 hours

Python

Estimate reading time: 3-4 hours

Networks

Estimate reading time: 5-6 hours

Git

Estimate reading time: 7-8 hours

Company philosophy

Estimate reading time: 5-6 hours

a.k.a "The way we do things around here"

Database management

Estimate reading time: 9-10 hours

Reference:

Docker

Estimate reading time: 2-3 hours

Management

Estimate reading time: 1 hour

Concepts of computing

Estimate reading time: 2 hours

Theory

Estimate reading time: 15 minutes

Activities

Practice Level 2

Estimate time: 46-56 hours (assuming you read either 'Elixir in Action' or 'Phoenix in Action')

Functional Programming

Estimate reading time: 1-2 hours

Erlang

Estimate reading time: 4-5 hours

Reference:

Elixir

Estimate reading time: 40 hours

Phoenix

Estimate reading time: 40 hours

Clojure

Estimate reading time: 1-2 hours

Possible projects

Estimate time: 6-7 hours The idea is to apply everything learned.

Rust

Estimate reading time: 7-8 hours

Development Workflow

Getting started

  • Two-step authentication is mandatory for every login of the company accounts (e.g. Slack, mail, GitHub).
  • Also, the company's GitHub repositories are accessed via SSH

GitHub & GitLab

  • If you are new to GitHub, you can put your hands on with this course
  • Progress in any project must be pushed every day. This must be done within a branch of the master repository and a Pull Request (PR) must be opened for reviewing the code, previous to merging the branch to master.
  • Never push to master directly, and only reviewers can merge branches to master.

Working method

  • There is a weekly call with every member of the team to set the most important goals of the week, as well as a daily call to focus on the problems of the daily tasks.
  • When working on projects, the specific tasks to tackle are written in clickup.

Design and coding standards

  • Suggested reading: Coders at work
  • make is the build tool. Consider these notes.
  • Postgresql is the default database.
  • Write tests.
  • Favor integration tests over unit tests, but do write unit tests when the functions merit them.
  • Do not write tests before you have solved the problem, you may waste time writing tests for the wrong implementation.
  • Start with the simplest thing that could possibly work.
  • Don't try to foresee future uses of your program: You aren't gonna need it.
  • Write for humans: coding for computers is easy, but writing code that is understandable by another person is an art.
  • Code and document in english, unless you have a very specific reason no to.
  • Use meaningful, readable names for variables, functions and files. Don't try to save characters.
  • Documentation is a sign of the quality of an API. It's easier to write it when the design is right.
  • The less code you have the better. Deleted code is debugged code.
  • Aim for simplicity, not performance. The latter is a by-product of the first.
  • Only introduce optimizations if you have benchmarks that proof an improvement and that the improvement is relevant in the context of the program.
  • Only introduce optimizations if they represent a concrete gain (e.g. cost savings, improved user experience).
  • Follow the Zen of Python, regardless of the language you are using at the moment. English also counts as a language.
  • Don't introduce dependencies prematurely. You must evaluate your requirements, maintenance and integration costs first.
  • If you want to upgrade a dependency, test it first.
  • Always lock your dependencies. Pin a specific version and a commit of a dependency, don't use the version at master. Use git and commit often, even in one-person projects.

Open source projects

  • Suggested reading: The Architecture of Open Source Applications.
  • Use MIT license.
  • Fill the description field at the top of the repo page.
  • Write a decent README.
  • A good readme starts with a succint description (one or two sentences) and, when possible, a very short and illustrative example use. The rest of the details go after this header.
  • Use continuous integration, most likely travis.org.
  • Make a good balance of features vs maintenance. Maintenance details usually matter more than adding a lot of features.

Community projects

We organize activities where we share thoughts and interests with anyone who want to join us.

Python

  • The Zen of Python is your bible.
  • Use Python 3 in greenfield projects.
  • Strive to migrate to Python 3 in non greenfield projects.
  • Read this to understand environment hell in Python.
  • Use pipenv to escape from environment hell in Python. You can even do this locally in projects that are set up to use virtualenv and virtualenvwrapper.
  • If you also need to stick with a specific minor version of Python (e.g. Python 2.7.14) you can use pyenv in combination with pipenv.

Julia

  • Julia Koans that will give you some short but effective understanding.
  • Julia Academy for getting your hands dirty with some great tutorials.

Erlang & Elixir

Reading code

This is a list of interesting projects to read code and learn:

Reading Club

Some of us at Lambda have formed a reading club, where we propose, vote, select, read, and discuss books, papers, posts, videos, or any material we feel is interesting or advances our skills as developers and humans.

How to propose a book/post/talk

Please visit the following document for adding reading suggestions:

The group gathers on Tuesdays at 17:00. Ping someone to get added to the calendar event.

Previous Readings

A Pipeline Made of Airbags

Fred Hebert https://ferd.ca/a-pipeline-made-of-airbags.html

Complexity Has to Live Somewhere

Fred Hebert https://ferd.ca/complexity-has-to-live-somewhere.html

The Mythical Man-Month + The Tar Pit

Frederick Brooks We read the first 2 chapters.

You can Change Your Organization or Change Your Organization

James Shore

We read all the entries from this autobiographic diary about how to tackle organizational change.

https://www.jamesshore.com/v2/projects/change-diary

Understanding, detecting and localizing partial failures in large system software

(Talk & PDF) The Morning Paper's post about the paper

Designing Data-Intensive Applications

Martin Kleppmann We discussed every chapter of the book.

hacking_learning_path's People

Contributors

gabrielbosio avatar unbalancedparentheses avatar igaray avatar entropidelic avatar martinacantaro avatar tomasdema avatar santiagopittella avatar hermanobst avatar pefontana avatar mmsc2 avatar juanbono avatar oppen avatar nico-sanchez avatar daphneher avatar jrigada avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.