czwartek, 20 lipca 2017

example how and what for to use anonymous functions

I wrote some short introduction to anonymous function here, some time ago. I wrote some simple example, but no example for real life situation. Today I decided to write down an example which could be very useful on technical interview.

This is a very simple code example. We have a loop and inside this loop we create an array of functions. Every of functions logs i on the console. Then in the end we are calling the first function from the array.

var i = 0;
var funcArray = [];
for (; i < 20; i += 2) {
  funcArray.push(function() {
    console.log('i inside function', i);
  };
});

funcArray[0]();

What we want to achieve here is, to have an array of functions, to use inside of function a value of i. We cannot use index of function in array, as i is incremented by 2. This implementation looks like the easiest solution for our need.

So what would display on console as a result of this line funcArray[0]();? We expect it to be 0, but unfortunately it is... 20... WHY??

The answer is very easy - the scope. The thing which makes JavaScript harder to learn. But is very logic. Scope exists on function level (ES5) or on block level (ES6+). In this case inside of loop the function which uses scope variable i is created. But the function is called outside the loop, where i has a value 20 (the first value, which didn't meet the requirement, so there was no more incrementation of i).

So it doesn't matter which index would be called, the i outside of loop is always equal the first value, which didn't pass the condiition. It means we have to change the way how we create the scope for our function. And here the anonymous function will come with help.

What should be done, then? We have to create immediately invoked anonymous function, which will create the scope and will return the function which will be assigned to array element. As a parameter to anonymous function i will be passed to make it available inside the scope.

funcArray.push(( // immediately invoked function
// anonymous function, which gets i from scope as index
  function (index) {
    return function() { // returns a our function
      console.log('index inside function', index);
    }
  }
)(i)); // i passed to immediately invoked function

środa, 12 lipca 2017

pojęcie o zawodzie programisty wśród młodzieży

Ostatnio na Facebook trafiłam na taką wypowiedź:

Chciałabym poznać opinię. Zaczęłam się interesować samorozwojem i stwierdziłam że branża it jest najwlasciwsza dla mnie. No i super rozeznanie w terenie co jak po co. Sprawdzałam wyksztalcenie, doświadczenie, wiek no wszystko co trzeba. Stwierdziłam że może maturę będę potrzebować więc dałam zapytanie na lokalnej grupie o maturę w uk jak tu zdac, warunki etc. Koleżanka która pomaga czasem innym w sprawach counsil/ revenue/ inne urzędy poradziła mi gdzie się udać i zabiła mnie pytaniem .... A nie lepiej dla Ciebie jakbyś się wzięła za fryzjerstwo czy paznokcie??? ... No kurde. Ja jej mówię o tym że chce programować strony komputerowe, pisać aplikację, generalnie branża no wiadomo, A ta wypala o ee paznokciach? Wlosach? Jak ja kurde miałam raz tipsy na rękach z 8 lat temu a o makijażu mam takie pojęcie że otynkowanie zaczynamy od fluidu pudru czy czegoś. Czy ja przesadzam czy mi się wydaje?

Napisałam panience, że niestety wykształcenie, jeśli nie ma odpowiedniego doświadczenia, jest niezbędne. W odpowiedzi dostałam link do holenderskiej oferty dla juniora frontendowca bez wymagań związanych z wykształceniem/doświadczeniem oraz taki tekst:

Zresztą nie będę wiedzieć jeśli nie sprobuje. Nikt i nic mnie nie zniechęci Bo "gdzieś tam potrzebują szkoly". Do firmy kolegi na stanowisko junior chcieli wziąć chłopaka po 4 tyg kursie za który sami zaplacili. Także ten. I już sama nie wiem, czy to powszechne podejście do zawodu programisty? Pracowałam już z ludźmi, dla których hasło "złożoność obliczeniowa" było zbędnym i wymyślonym na siłę problemem, nad którym nie warto się pochylić...

deadline'y...

Pracuję sobie w firmie, takim prawie prawdziwym startupie. Prawie, bo mamy bogatą firmę-matkę, która łoży na nasze utrzymanie.

Piszemy aplikację WWW, backend dostarcza nam trzecia firma. Ja zajmuję się dość krytyczną częścią, bo zapisem danych wprowadzonych przez przyszłego klienta. Tworzę z mozołem DTO, które mam później pchnąć do backendu i odkrywam, że czegoś nie wiem.

Pierwsze pytanie do naszego konsultanta z firmy trzeciej, który siedzi z nami w open space. Pada odpowiedź - nie da się, już rozmawiałem z działem wdrożeniowym i tej funkcjonalności na razie nie ma.

Nogi się pode mną ugięły. Jak to nie ma? Toż to krytyczna funkcjonalność... Idź do XYZ i z nim pogadaj dostaję dobrą radę i konsultant zakłada słuchawki.

Idę, ale do S, naszego product ownera, i mówię, że mamy bloker. Już nawet się oparłam dodania, że to kolejny. No co ty nie powiesz krzywi się S i uderza do konsultanta, który odsyła go do XYZ.

S właśnie wrócił do mnie z wiadomością, że it is not in scope. A soft launch mamy w pierwszej połowie sierpnia, to ciekawie kiedy trafi do implementacji?