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 ?
deck
By mlachkar
deck
- 646