On ne naît pas dev, on le devient

On ne naît pas dev, on le devient

 Moi

On ne naît pas soldat, on le devient 

L'armée francaise 

On ne naît pas terroriste, on le devient 

JC Salomon ??? 

On ne naît pas parent, on le devient

Super Nanny

/** Exercices
 * 1 - Ecrire une fonction qui permute a et b
 * 2 - Ecrire une fonction in[t,n,x] qui retourne comme résultat O si l'élément x 
       appartient du tableau t de longueur n , N sinon
 * 3 - ecrire une fonction distinct[t,n] qui retourne comme résultat O si les éléments 
       du tableau t de longueur n sont deux a deux distincts , N ,sinon
 * 4 - ecrire une fonction maxi[t,n] qui au tableau t d'entiers relatifs de longueur n associe 
       son plus grand élément ainsi que son indice ( Si cet élément apparaît plusieur fois, 
       on retiendra l'élément le plus petit )
 * ....
 */

Ah la prépa <3

// ce que moi j'avais en tête  

def swap[A, B](a: A, b: B): (B, A) = (b, a)
// ce que le prof attendait

void swap(int &x, int &y) 
{ 
    int temp = x; 
    x = y; 
    y = temp; 
}

* 1ère tentative

C

En école*

* 2ème tentative

Apprendre un langage via les algos de tri

Les variables ne doivent jamais contenir plus qu'une lettre

Attention à la gestion de la mémoire ^^

Assembleur

 Enfin... Non!  

Au boulot *


git grep "whatEver" # beaucoup plus rapide qu'un grep -R 

git blame file # permet de trouver le commit hash d'une ligne

* jamais deux sans trois

Au boulot *

* jamais deux sans trois

default['frozen_from_debirf']['source'] = '/etc/criteo-frozen'

frozen =
  begin
    ::File.open(node['frozen_from_debirf']['source'], &:readline).strip.sub(/-.*/, '')
  rescue EOFError, SystemCallError
    ""
  end

frozen = node['frozen_from_debirf']['fallback'] || "" if frozen.empty?

frozen = [node['frozen_from_debirf']['minimum'] || "", frozen].max

unless frozen.empty?
  Chef::Log.warn("frozen_from_debirf: set yum_criteo.current_release to #{frozen}")
  default['yum_criteo']['current_release'] = frozen
end
 

Mon nouveau projet

Projet critique pour Criteo

Hadoop/Kerberos/hive... : bcp trop de composants

Commencer un cours sur coursera

Lire la documentation des librairies

Le mentoring par un sénior

Le mentoring

/* Commencer un projet from scratch
 * - Avec un document de design à presenter à tout le département
 * - Avec un serveur web asynchrone que tu connais pas
 * - Avec une UI
 * - Avec une grosse volumetrie attendue
 * - Avec une base de donnée
 * - Avec une gestion de droit
 * - ...
 */ 
 

Le mauvais mentoring

Le bon mentoring

"Il suffit de commencer"

Faisons du pair programming

Te parle de monade, d'asynchrone bloquant et non bloquants

Focalise sur le design et t'introduit les bonnes pratiques

Te rappelle que tu ne sais pas grand chose

Te félicite et t'encourage

Le mentoring

val copies: Seq[Copy] = database.getCopies()

copies.map(copy => validatePathsForCopy(copy))
trait Functor[F[_]] {
  def map[A, B](fa: F[A])(f: A => B): F[B]
}

 Tu ne sais pas ce que c'est un functor ?

Et la complexité en espace ?

Le mauvais mentoring

Le bon mentoring

map permet d'appliquer à chaque élément de la liste une fonction.

// utilisons la curryfication 
val copies: Seq[Copy] = database.getCopies()
copies.map(validatePathsForCopy)

Mes conseils

Trouver le langage qui vous convient

Multiplier les canaux d’apprentissage (conferences, blogs et meetups)

Ne laisser personne vous dire ce que vous pouvez ou non faire

Investissez du temps sur les méthodes de développement logiciels (DDD, architecture hexagonale...)  

Développeuse Scala

chez

Meriam Lachkar

@meriamLachkar

Des questions ?

Human talks

By mlachkar

Human talks

  • 905