Budowlaniec chce zostać programistą

Budowlaniec chce zostać programistą
WhiteLightning
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3257
1

@Wybitny Samiec - ja takich nazywam astronautami - bujaja w oblokach tak wysoko ze stracili widok i kontakt z tym co jest na dole.
Poza tym gosciu startowal na Java Developera, a nie na analityka. A doswiadczona osoba techniczna powinna byc w stanie chocby czasami zrobic prototyp.
Ale moze to jak z religia: sa wierzacy niepraktykujacy, to moze sa Developerzy nietechniczni (nieprogramujacy) lub cos w ten desen...

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
0

@WhiteLightning

Ale jaki jest cel testowania seniorów z takim doświadczeniem w ten sposób? To tak jakby dajmy na to jakiegoś doktora, może profesora pytać o tabliczkę mnożenia. Oczywiście, to są fundamenty, natomiast zastanawiam się tylko czy udokumentowane doświadczenie = rozmowy już na innym poziomie? Np. można takiego zapytać w jaki sposób można zoptymalizować duży serwis z dużą ilością użytkowników i ogromną liczbą odwiedzin bo już nie wyrabia i jakich narzędzi się używa, jakie są zalety, jakie wady itd. Wygląda mi to tak jakby rekrutacje były szablonowe.

  • Rejestracja: dni
  • Ostatnio: dni
1
Wybitny Samiec napisał(a):

@WhiteLightning bo seniorzy nie są od tego żeby pisać pętle. 10 lat doświadczenia, czyli oczekujemy po kimś takim bycia dobrym analitykiem, wiedzy, jak poradzić sobie z różnymi problemami natury domenowej...
Tacy kolesie mogą być jak warstwa skalna z trzeciorzędu, już takich wielu widziałem. Nie przeczę, że w wąskiej działce, którą klepią w kółko, można na nich zwykle polegać. Poza tym potrafią nic nie robić i jechać na znajomościach. Wiedza domenowa? Chyba głównie która stara koleżanka z pracy jest nienajcięższych obyczajów. ;P

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
0

Ciężko jest mi sobie wyobrazić coś takiego, żeby ktoś kto klepie cały czas coś od 10 lat nie potrafił napisać prostej pętli for albo foreach. Cóż więc za goście w ogóle aplikują albo jakiego typu aplikacje piszą? Może tylko takie w których nie wykorzystuje się tych pętli? Może goście wykorzystywali tylko while a pętli for albo foreach nie znają?

Ciekawe było jednak to jak na trzecim roku studiów kiedyś wykładowca zapytał co to jest system liczbowy pozycyjny i niepozycyjny. Było to tym bardziej ciekawe że nikt nie odpowiedział... Szkoła ogłupia?

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3755
1

Interesujący przykład z tą pętlą. Nie wyobrażam sobie architekta, seniora czy kogokolwiek z osób stricte technicznych nie potrafiących pisać pętli.

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
1

Wbrew pozorom problem nie jest banalny:
http://howtodoinjava.com/2013/03/26/performance-comparison-of-different-for-loops-in-java/

Na wagę idzie:

  1. szybkość działania pętli
  2. zagadnienia złożone z ewentualnym ryzykiem błędów wynikających z pomyłek

To że i albo j jest tak namiętnie używane w pętlach to chyba nie jest przypadek. Natomiast jak by tak analizować różnego typu aplikacje to for albo foreach też dość często można spotkać, rzadziej np. while (przynajmniej ja mam takie wrażenie).

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
0

Szybkość to jedno, natomiast dodałem sobie jeszcze do tego przykładu na koniec pętlę while, natomiast w każdej z tych pętli System.out.println wyświetlająca wartość elementu z listy. Pętla foreach jest najprostsza w implementacji i pewnie też zalecana pod tym względem (trudniej o błąd przez pomyłkę), co innego w pętli 3, 4 albo np. while. Celowo też ograniczyłem ilość elementów do 10-ciu, bo samo wyświetlenie na konsolę zajmuje dużo więcej czasu. I która pętla jest właściwym rozwiązaniem, biorąc na wagę jeszcze oprócz szybkości stopień skomplikowania takiego kodu i jeszcze to co tak naprawdę ma być w tych pętlach wykonane? Bo optymalizuje się przede wszystkim chyba wtedy jak jest co optymalizować.

WhiteLightning
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3257
1

"premature optimization is the root of all evil"

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

"premature optimization is the root of all evil"
prawda. Szczególnie, że i tak zwykle jeśli aplikacja jest powolna to z takich powodów jak np dostęp do bazy danych, rendering grafiki, przesyłanie danych przez sieć, operacje dyskowe, odwoływanie się do elementów DOM, a nie z powodu tego, że kod wolno działa (no chyba, że wykonujemy nieoptymalne operacje na setkach tysięcy elementów itp. ew. jak odpalamy coś na bardzo starym sprzęcie).

Celowo też ograniczyłem ilość elementów do 10-ciu, bo samo wyświetlenie na konsolę zajmuje dużo więcej czasu.

To prawda. Przynajmniej jak debugguję coś w JavaScript. Już nie raz zastanawiałem się, czemu mi zamula program, okazało się, że to document.title = "dupa coś tam" albo console.log odpalające się ileś razy na sekundę potrafiły ostro zamulać... A po usunięciu debuggującego kodu program śmigał.

Celowo też ograniczyłem ilość elementów do 10-ciu, bo samo wyświetlenie na konsolę zajmuje dużo więcej czasu.

to się inaczej robi. Możesz pisać do konsoli np. co setną iterację ( czyli stare i dobre znane i % 100 == 0). Wtedy konsola cię nie zamuli aż tak.

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
2

jest to zabawne jak niektorzy sie przejmuja narzutem for vs while vs foreach a nie wiedza o boxingu/unboxingu :)
jak ktos jest przyjmowany na architekta czy innego milosnika meetingow to nie musi znac skladni, jak przyjmowany na senior deva to nie ma zmiluj, staz i doswiadczenie to nie wymowka na bycie moronem

  • Rejestracja: dni
  • Ostatnio: dni
0

@W2K

W2K napisał(a):

Miałem podobnie jak autor tematu. Tzn skończyłem budownictwo, łącznie rok pracowałem w zawodznie. W pewnym momnecie stwierdziłem że to nie jest to co chciałbym robić. No może nie było to takie sobie pstryk i chcę zmieniać. Miałem okazję zrobić nieduży projekt na studiach który pomógł mi w magisterce i w sumie od tego się zaczeło, a programowałem coś tam w zasadziee od 5 klasy podstaówki z przerwą na czas studiów. W zasadzie przebranżowienie do poziomu "komercyjnego" kosztowało mnie rok cieżkiej pracy, ale udało się. Teraz od roku pracuję komercyjnie i uważam że była to chyba najlepsza moja decyzja(zarówno pod względem finansowym jak i ogólnej satysfakcji z pracy - różnica kultury/higieny pracy/stresu jest powalająca nawet w porównaniu z biurem projektowym)

Czyli rozumiem, że masz tytuł mgr inż. budownictwa i nie było to dla Twojego pracodawcy żadną przeszkodą w zdobyciu stanowiska programisty? Liczyło się jedynie to, co potrafisz, a nie "papierek"? Pytam, bo w tym roku kończę pierwszy stopień - inżynierkę i jestem w kropce. Z jednej strony zastanawiam się nad pójściem na mgr na informatykę, ale mam poważne obawy czy podołam (musiałbym w zasadzie od dzisiaj mocno pracować, żeby nie mieć jakichś dramatycznych tyłów), a w myśl zmienionej ustawy w sprawie samodzielnych funkcji technicznych w budownictwie nie trzeba mieć mgr żeby ubiegać się o uprawnienia budowlane bez ograniczeń. To znaczy, że na mgr nie ma ciśnienia iść.

W2
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam papierk mgr.inż budownictawa. Przez ten rok wielokrotnie chodziłem na rozmowy i zawsze czegoś mi tam brakowało (w kwestii praktycznej wiedzy bo na rozmowach o teorię mało mnie pytali) stąd też impuls do ciągłego poprawiania. Najgorzej było mi się praktycznie zabrać za bazy danych (przez co przeleciała mi naprawdę super oferta pracy). Ostatecznie na pewnym etapie okazało się że urząd pracy realizuje taki program - Wrocław Koduje (3 miesięczny kurs .NET+ miesiąc praktyk w firmie). Dla mnie okazało się to super sprawą bo i ile z samego .NET to niewiele się tam nauczyłem ponad to co już wiedziałem, to ten okres 1mc praktyk był czymś czego bardzo potrzebowałem - żeby mieć okazje pokazania się pracodawcy przez trochę dłużej niż rozmowę. Po prkatykach zostałem już w tej firmie. Z drugiej strony sądzę ze gdyby nie ten kurs to też prędzej czy póxniej uadłoby mi się znaleźć pierwszą pracę. choć pewnie ze względu na bazy danych zajęłoby to nieco dlużej.

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3755
0
drorat1 napisał(a):

Wbrew pozorom problem nie jest banalny:
http://howtodoinjava.com/2013/03/26/performance-comparison-of-different-for-loops-in-java/

Przecież ten test nic nie pokazuje sensownego, takiego senior developera powinni powiesić za ratuszem.

W przypadku #1 mamy iterację po obiektach w liście, #2 i #3 to zwiększanie licznika aż do osiągnięcia pewnej wartości, #4 mierzy tylko sprawdzenie warunku cały jeden raz. Kolo który to pisał potwierdza wszystkie stereotypy o programistach z Indii.
Jedna z perełek: http://howtodoinjava.com/2015/10/20/puzzle-check-if-string-is-complete-contains-all-alphabets/

Sam temat to dno, ale to, że zwraca String "TRUE" i "FALSE" zamiast Booleana dopiero dobija.

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
0
wartek01 napisał(a):
drorat1 napisał(a):

Wbrew pozorom problem nie jest banalny:
http://howtodoinjava.com/2013/03/26/performance-comparison-of-different-for-loops-in-java/

Przecież ten test nic nie pokazuje sensownego

Czyżby?
http://stackoverflow.com/questions/4438710/using-collection-size-in-for-loop-comparision

W tym przykładzie #2 to size() wykona się 10 mln razy, ale jak mam rozumieć (na podstawie tego co na stacku pisze), jest optymalizacja tego typu że zamiast obliczania rozmiaru kolekcji za każdym razem wykorzystywane jest cache, jeśli ta kolekcja się nie zmienia? To to by miało jakieś ręce i nogi, ci co to zaimplementowali mieli łeb na karku.

Ale co w przypadku gdyby mało rozgarnięty senior dev zaimplementował pętlę z przykładu #2 a w niej metodę która za każdą taką iteracją przelatywałaby i tak 10 milionów razy po elementach żeby obliczyć rozmiar albo np. sumę elementów?
Ile user miałby czekać na wyniki jakichś wyszukiwań?

To jest jedna z głównych przyczyn dla których jak ktoś dostanie coś z Codility otrzyma tam wynik który nie będzie satysfakcjonujący dla rekruterów = albo delikwent nie dostanie pracy, bo jest za słaby, albo się mu po prostu mniej zapłaci, bo to prawdę mówiąc mocny argument.

To drugie z True i False jako stringi jest rzeczywiście debilne. I pomyśleć tylko że później ktoś powiela te złe praktyki...

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
0

bez jaj, kto pisze for(int i=0;i<list.size();i++) zeby przeiterowac liste w javie...
swoja droga to na ta chwile ciezko mi znalezc sytuacje w ktorej petla for ma sens, poza jakimis niskopoziomowymi operacjami na byte bufferach (typu wycinasz cos tam z jakiegos offsetu)

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
0

@katelx

Pisałem w ten sposób coś z sieci neuronowych MLP (to jeden z moich open sourcowych projektów), tu na pastebin wkleiłem kod (na stałe żeby nie wygasł i żeby nie zaśmiecać)

http://4programmers.net/Pastebin/4462
http://4programmers.net/Pastebin/4463

Zastanawiam się tylko ile ugram na optymalizacji w metodach w których są te pętle (tu chodzi o obliczanie MSE i jeszcze trening sieci w pętli, biorąc pod uwagę to cache, biorąc pod uwagę że zamiast standardowego back propagation można by użyć resilient propagation, która jest o niebo szybsza.

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3755
0
drorat1 napisał(a):

Ale co w przypadku gdyby mało rozgarnięty senior dev zaimplementował pętlę z przykładu #2 a w niej metodę która za każdą taką iteracją przelatywałaby i tak 10 milionów razy po elementach żeby obliczyć rozmiar albo np. sumę elementów?
Ile user miałby czekać na wyniki jakichś wyszukiwań?

Na początek - krótki WTF jak dla mnie:

Kopiuj
import java.util.ArrayList;
import java.util.List;

public class TestBenchmark {
    private static List<Integer> list = new ArrayList<>();
    private static long startTime;
    private static long endTime;
    static {
        for(int i=0; i < 10000000; i++) {
            list.add(i);
        }
    }

    public static void main(String[] args){
        //Type 1
        startTime = System.currentTimeMillis();
        for(Integer i : list){
            i.intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("For each loop :: " + (endTime - startTime) + " ms");

        //Type 2
        startTime = System.currentTimeMillis();
        for(int j = 0; j < list.size() ; j++){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using collection.size() :: " + (endTime - startTime) + " ms");

        //Type 3
        startTime = System.currentTimeMillis();
        int size = list.size();
        for(int j = 0; j < size ; j++){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using [int size = list.size(); int j = 0; j < size ; j++] :: " + (endTime - startTime) + " ms");

        //Type 4
        startTime = System.currentTimeMillis();
        for(int j = list.size(); j > size ; j--){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using [int j = list.size(); j > size ; j--] :: " + (endTime - startTime) + " ms");
    }
}

Na Java 8 + Intelij Idea v.14 wyrzuca output:

Kopiuj
For each loop :: 34 ms
Using collection.size() :: 33 ms
Using [int size = list.size(); int j = 0; j < size ; j++] :: 50 ms
Using [int j = list.size(); j > size ; j--] :: 0 ms

#4 jest ciągle bezsensowny, więc to ma sens. Natomiast dziwi mnie różnica pomiędzy #2 i #3, wygląda na to, że:

  • albo dzieje się jakaś JVMowa magia, która skraca wykonanie list.size()
  • albo dzieje się jakaś JVMowa magia, która akurat wypada przy trzeciej pętli i wydłuża jej wykonanie

Tak czy inaczej:
Argument, że ktoś może użyć złej implementacji size() i dlatego nie należy tego używać jest dla mnie słaby. Na tej samej zasadzie należałoby odwoływać się bezpośrednio do pól za pomocą refleksji, bo ktoś może źle zaimplementować settery i gettery.

O1
  • Rejestracja: dni
  • Ostatnio: dni
0
W2K napisał(a):

Mam papierk mgr.inż budownictawa. Przez ten rok wielokrotnie chodziłem na rozmowy i zawsze czegoś mi tam brakowało (w kwestii praktycznej wiedzy bo na rozmowach o teorię mało mnie pytali) stąd też impuls do ciągłego poprawiania. Najgorzej było mi się praktycznie zabrać za bazy danych (przez co przeleciała mi naprawdę super oferta pracy).

Na rozmowach chyba więcej z teorii pytają. Jeśli coś praktycznego to chyba jakieś proste zadanie na miejscu ewentualnie coś do domu. Jakiego typu te pytania miałeś? Aż tak mocno z tego SQLa Cię cisneli? Startowałeś na developera? Jak tak to wydaje mi się, że nie powinno być aż tak ogromnego nacisku, chyba, że zupełnie nic nie kojarzyłeś.

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3755
0

IMO żadne optymalizacje, bo wystarczy zmiana kolejności:

Kopiuj
import java.util.ArrayList;
import java.util.List;

public class TestBenchmark {
    private static List<Integer> list = new ArrayList<>();
    private static long startTime;
    private static long endTime;
    static {
        for(int i=0; i < 10000000; i++) {
            list.add(i);
        }
    }

    public static void main(String[] args){

        //Type 2
        startTime = System.currentTimeMillis();
        for(int j = 0; j < list.size() ; j++){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using collection.size() :: " + (endTime - startTime) + " ms");
        //Type 3

        startTime = System.currentTimeMillis();
        int size = list.size();
        for(int j = 0; j < size ; j++){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using [int size = list.size(); int j = 0; j < size ; j++] :: " + (endTime - startTime) + " ms");

        //Type 4
        startTime = System.currentTimeMillis();
        for(int j = list.size(); j > size ; j--){
            list.get(j).intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("Using [int j = list.size(); j > size ; j--] :: " + (endTime - startTime) + " ms");

        //Type 1
        startTime = System.currentTimeMillis();
        for(Integer i : list){
            i.intValue();
        }
        endTime = System.currentTimeMillis();
        System.out.println("For each loop :: " + (endTime - startTime) + " ms");
    }
}

I wszystko wraca do normy:

Kopiuj
Using collection.size() :: 31 ms
Using [int size = list.size(); int j = 0; j < size ; j++] :: 32 ms
Using [int j = list.size(); j > size ; j--] :: 0 ms
For each loop :: 34 ms

W obu przypadkach test wykonałem kilkukrotnie i za każdym razem wyniki były podobne. Czyli JVM wybierała moment przy trzeciej pętli aby zrobić coś w tle.

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
1

W tej ostatniej gdzie jest 0 ms jest pomyłka:

Kopiuj
for(int j = list.size(); j > size ; j--)
{
    // do something
}

powinno być:

Kopiuj
for(int j = list.size() - 1; j >= 0 ; j--)
{
    // do something
}

Odlicza w dół od końcowego elementu listy (list.size - 1) aż do 0 włącznie.

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

Nic dziwnego, ze wyszło najszybciej.

A poza tym to nie wiem czy się opłaca robić testy szybkości na pętlach które nic nie robią. A jeśli takie coś będzie potem zoptymalizowane przez kompilator? .

WhiteLightning
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3257
1

Tu mozecie posluchac ciekawego wykladu o optymalizacjach JVM: Z tym ze w pewnym momencie zaczynaja sie rzeczy o ktorych zwyklym programerom sie nawet nie snilo:)
Do tego zwroccie uwage na jedna rzecz: ile rzeczy trzeba brac pod uwage przy zwyklej petli.

WG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

To, że hindus zrobił kiepski benchmark to jest pikuś, ale to jaki ma zasięg z tymi swoimi herezjami już powala na kolana:

Kopiuj
Benchmark                               Mode  Samples      Score  Score error  Units
c.t.ForLoopBenchmark.forEach            avgt       15  42426.509      329.083  us/op
c.t.ForLoopBenchmark.lazyFor            avgt       15  41673.289      188.408  us/op
c.t.ForLoopBenchmark.lazyReversedFor    avgt       15  41770.939      514.974  us/op
c.t.ForLoopBenchmark.simpleFor          avgt       15  41859.456      342.960  us/op 
Kopiuj
import org.openjdk.jmh.annotations.*;
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public class ForLoopBenchmark {

    List<Integer> integers;

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include("ForLoopBenchmark")
                .forks(1)
                .warmupIterations(15)
                .measurementIterations(15)
                .build();

        new Runner(opt).run();
    }

    @Setup
    public void init() {
        integers = new ArrayList<>();
        for (int i = 0; i < 10000000; ++i) {
            integers.add(i);
        }

    }

    @Benchmark
    public void forEach() {
        for (Integer integer : integers) {
            integer.intValue();
        }
    }

    @Benchmark
    public void simpleFor() {
        for (int i = 0; i < integers.size(); ++i) {
            integers.get(i).intValue();
        }
    }

    @Benchmark
    public void lazyFor() {
        int size = integers.size();
        for (int i = 0; i < size; ++i) {
            integers.get(i).intValue();
        }
    }

    @Benchmark
    public void lazyReversedFor() {
        for (int i = integers.size() - 1; i >= 0; --i) {
            integers.get(i).intValue();
        }
    }
}
W2
  • Rejestracja: dni
  • Ostatnio: dni
0
olek1 napisał(a):
W2K napisał(a):

Mam papierk mgr.inż budownictawa. Przez ten rok wielokrotnie chodziłem na rozmowy i zawsze czegoś mi tam brakowało (w kwestii praktycznej wiedzy bo na rozmowach o teorię mało mnie pytali) stąd też impuls do ciągłego poprawiania. Najgorzej było mi się praktycznie zabrać za bazy danych (przez co przeleciała mi naprawdę super oferta pracy).

Na rozmowach chyba więcej z teorii pytają. Jeśli coś praktycznego to chyba jakieś proste zadanie na miejscu ewentualnie coś do domu. Jakiego typu te pytania miałeś? Aż tak mocno z tego SQLa Cię cisneli? Startowałeś na developera? Jak tak to wydaje mi się, że nie powinno być aż tak ogromnego nacisku, chyba, że zupełnie nic nie kojarzyłeś.

Bardzo róże. A z teorii to mam na myśli bardziej rzeczy związane z algorytmiką itd. Pytali mnie typowo o jakieś niuansy C#, wzorce projektowe przykłady implementacji itd. Co do SQL to w tamtym czasi faktycznie z tym za dobrze nie było. SQL znałem na poziomie prostych selectów , a poległem na napisaniu programu łączącego się do bazy i wyciającego n rekordów. Z perspektywy czasu może się to wydawać śmieszne (bo w sumie takie teraz też jest dla mnie) ale każdy jakoś zaczynał.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 172
0
likemike napisał(a):

Witam wszystkich i proszę o dobre rady :)
Jestem studentem budownictwa, 22 lata, ostatni rok inżynierki, ogromne wątpliwości zawodowe, doświadczenie informatyczne: podstawy podstaw, czyli to co było w liceum.
Znajoma poleciła mi na początek Pythona, gdyż jest on najłatwiej przyswajalny. Poszedłem za tą radą i aktualnie jestem na lekturze ksiązki Michaela Dawsona "Python dla każdego".
Natomiast niedawno zapisałem się na darmowy kurs podstaw C# organizowany na polibudzie. Pierwsze spotkanie w miarę ogarnąłem w całości, na drugim było już znacznie gorzej i tu pojawia się pytanie:
Co odpuścić, a może nie odpuszczać ani jednego ani drugiego? Z jednej strony przyjaźniejszy Python, a z drugiej strony C# i jak zerkałem na oferty pracy, jeden z najbardziej poszukiwanych języków wśród programistów.
Jakie jest wasza ocena tej sytuacji?

Na razie pewnie nie masz wielkich zobowiązań, więc może po prostu ucz się dalej, równolegle z budowlanką. Nawet jeżeli nie będziesz pracować w wyuczonym zawodzie to jesteś na takim etapie, że głupio byłoby nie zrobić inżyniera. Jeżeli programowanie Ci nie podejdzie to trudno, może nie ta technologia, może źle się za to zabrałeś, może nie ten czas, może po prostu to nie jest dla Ciebie, ale będziesz bogatszy o doświadczenie.
Na czwartym roku raczej luzują z wymaganiami, więc powinieneś dać radę to pogodzić. To właściwie "ostatni dzwonek" gdzie możesz pogodzić naukę programowania z innymi sprawami na przyzwoitym poziomie, bo do zrobienia masz sporo a jak pójdziesz do roboty to będzie ciężej, zwłaszcza, że w budowlance raczej 8 godzin pracować nie będziesz ;) Do tego zwykłe, codzienne obowiązki, partner/ka(o ile jesteś w związku), który/a raczej nie zechce być rzucony/a w kąt i okazuje się, że trzeba się sporo nagimnastykować żeby jeszcze się dokształcać. Nie wiem czy powinienem jeszcze wspominać o czymś takim jak własne zainteresowania ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

@Pietruch

Pietruch napisał(a):

Na razie pewnie nie masz wielkich zobowiązań, więc może po prostu ucz się dalej, równolegle z budowlanką. Nawet jeżeli nie będziesz pracować w wyuczonym zawodzie to jesteś na takim etapie, że głupio byłoby nie zrobić inżyniera. Jeżeli programowanie Ci nie podejdzie to trudno, może nie ta technologia, może źle się za to zabrałeś, może nie ten czas, może po prostu to nie jest dla Ciebie, ale będziesz bogatszy o doświadczenie.
Na czwartym roku raczej luzują z wymaganiami, więc powinieneś dać radę to pogodzić. To właściwie "ostatni dzwonek" gdzie możesz pogodzić naukę programowania z innymi sprawami na przyzwoitym poziomie, bo do zrobienia masz sporo a jak pójdziesz do roboty to będzie ciężej, zwłaszcza, że w budowlance raczej 8 godzin pracować nie będziesz ;) Do tego zwykłe, codzienne obowiązki, partner/ka(o ile jesteś w związku), który/a raczej nie zechce być rzucony/a w kąt i okazuje się, że trzeba się sporo nagimnastykować żeby jeszcze się dokształcać. Nie wiem czy powinienem jeszcze wspominać o czymś takim jak własne zainteresowania ;)

Taki mam zamiar. Chce skończyć inżynierkę na budownictwie, bo wiadomo, że głupio byłoby rzucić to po czterech latach. Nad magisterką się poważnie zastanawiam, ale na całe szczęście mam jeszcze trochę czasu na przekonanie się do programowania i przemyślenie całej sytuacji. Na razie uczę się z książki do C# udostępnionej tutaj na forum i czuje, że nie jest to na zasadzie zmuszania się. Każde kolejne zagadnienie udaje mi się przyswoić bez problemów, a cała ta dziedzina jest dla mnie intrygująca i budzi coraz większe zainteresowanie. Masz sporo racji, co do czasu wolnego. Akurat jestem na praktykach w firmie budowlanej, zatem czasu popołudniami jest sporo, ale od stycznia powrót na uczelnie i zobaczymy, jak to będzie wyglądało.
Wiem już na pewno, gdzie popełniłem zasadnicze błędy. Po pierwsze, gdzieś utrwaliło się przekonanie, że informatyka i całe programowanie jest dla wąskiej grupy geniuszy matematycznych, programujących od małego, którzy znają temat od lat. Okazało się to kompletną nieprawdą, co też potwierdziły przykłady kilku osób. Po drugie, budownictwo pięknie wyglądało na pierwszy rzut oka, a rzeczywistość okazuje się być zupełnie odmienna, a specyfika pracy w tej branży w perspektywie całego życia mi nie do końca odpowiada.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 172
0
likemike napisał(a):

@Pietruch
Nad magisterką się poważnie zastanawiam

Jeżeli zechcesz zostać w zawodzie to warto ją zrobić, bo specjalnie ciężko nie jest, możesz nawet gdzieś żebraćszukać pracy w zawodzie co by łapać wpisy do uprawnień. Nawet jak nie planujesz kariery w biurze projektowym to teraz 1,5/2 lata poświęcone na to nie są tak dużym wyrzeczeniem jak za kilka lat, gdyby nagle Ci się coś odwidziało i chciałbyś mieć uprawnienia projektowe bez ograniczeń.

likemike napisał(a):

@Pietruch
czuje, że nie jest to na zasadzie zmuszania się. Każde kolejne zagadnienie udaje mi się przyswoić bez problemów, a cała ta dziedzina jest dla mnie intrygująca i budzi coraz większe zainteresowanie. Masz sporo racji, co do czasu wolnego.

No i super, oby tak dalej ;)

likemike napisał(a):

Wiem już na pewno, gdzie popełniłem zasadnicze błędy. Po pierwsze, gdzieś utrwaliło się przekonanie, że informatyka i całe programowanie jest dla wąskiej grupy geniuszy matematycznych, programujących od małego, którzy znają temat od lat. Okazało się to kompletną nieprawdą, co też potwierdziły przykłady kilku osób. Po drugie, budownictwo pięknie wyglądało na pierwszy rzut oka, a rzeczywistość okazuje się być zupełnie odmienna, a specyfika pracy w tej branży w perspektywie całego życia mi nie do końca odpowiada.

Jakbym czytał o sobie ;) Gdy kiedyś będziesz miał gorszy dzień i wątpliwości to pogadaj o robocie ze znajomymi ze studiów albo poczytaj fora budowlane. Pomaga ;)

LI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam ponownie :)

Minęło trochę czasu od kiedy założyłem ten temat. Postanowiłem dać sobie trochę na przemyślenie drogi rozwoju, kariery, a także rozważenie różnych plusów i minusów przebranżowienia. Upływ czasu zweryfikował również moją motywację, a także to czy w ogóle chciałbym się w to bawić. Mam jeszcze jakieś resztki niepewności, ale z drugiej strony wiem, że muszę spróbować, żeby poznać odpowiedź na pytanie, czy programowanie jest dla mnie.

Pierwszy kontakt z C# mam już za sobą – kurs Boba Tabora i kurs podstaw na uczelni. Aktualnie jestem na etapie pracy ze zbiorem zadań do C# od Kubiaka, a także lektury C# Ćwiczenia od Lisa. Czuję, że przyszedł czas na ujęcie wszystkiego w pewien plan działania, zebranie do kupy, aby w pełni wystartować z nauką. Chcę przez to uniknąć niepotrzebnego błądzenia czy też przeoczenia ważnych zagadnień. Da mi to również dobrego kopa motywacyjnego.

Koniec gadania. Przejdę do rzeczy.

  1. Zastanawiam się nad określeniem głównych działów, jakie musiałbym przestudiować na stanowisko junior dev/stażysta.
  • technologia
  • wzorce projektowe
  • algorytmy i struktury danych
    a) Czy coś przeoczyłem, a jeżeli tak to co?
    b) Jak wygląda kwestia znaczenia technologii/wzorców/algorytmów/struktur w kontekście stanowiska juniora? Zdaję sobie sprawę z tego, że wszystkie te tematy są ważne, ale na etapie aplikowania na stażystę/juniora, które są bardziej istotne od pozostałych i w jakim stopniu należy je opanować? Na które kłaść nacisk w pierwszej kolejności?
  1. Czy znalezienie mentora przyspiesza/poprawia naukę? Nie wiem czy to ma sens, bo wszystko zależy to od indywidualnych predyspozycji do nauki, kto jak przyswaja wiedzę, ale może macie inne zdanie.

  2. Czy podczas rekrutacji patrzy ktoś z HRu na uzyskane certyfikaty np. z serwisu edx, codecademy? Czy raczej skupiają się głównie na własnych projektach aplikującego i co potrafi?

  3. Czy warto uczyć się wzorców projektowych, algorytmów i struktur na podstawie literatury (warto w to inwestować $$$?) czy materiały dostępne w sieci powinny wystarczyć jak na razie?
    Z góry dzięki wielkie za odpowiedzi.

  • Rejestracja: dni
  • Ostatnio: dni
1

Zrób sobie jakiś kurs na codecademy zeby ogarnac podstawy a pozniej wymysl sobie jakis projekt i go zacznij tworzyc, bedziesz mial od razu do portfolio, tylko cos bardziej ambitnego niz kalkulator ;D

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 172
0

Czy znalezienie mentora przyspiesza/poprawia naukę? Nie wiem czy to ma sens, bo wszystko zależy to od indywidualnych predyspozycji do nauki, kto jak przyswaja wiedzę, ale może macie inne zdanie.

Jak najbardziej. Też jestem samoukiem tylko bez żadnego mentora, szukam informacji na własną rękę, prawie nigdy nie pytam na forach, bo cały czas mam (głupie) przekonanie, że "to już było i wstyd pytać o tak proste rzeczy, tylko pokażesz, że nie jesteś samodzielny". Efekt tego jest taki, że traciłem (i tracę) dużo czasu na "bzdety", bo nie wiedziałem czy i jak jest to przydatne. Mając kogoś życzliwego u boku możesz usłyszeć "stary, sporo już nad tym siedzisz, zainteresuj się tym i tamtym, zobaczysz, że utrwalisz to co teraz robisz".

Czy podczas rekrutacji patrzy ktoś z HRu na uzyskane certyfikaty np. z serwisu edx, codecademy? Czy raczej skupiają się głównie na własnych projektach aplikującego i co potrafi?

Edx nie kojarzę, Codecademy już tak, zrobiłem kursy z JavaScriptu, jQuery, PHP, GIT i bodajże SQL. Są proste, przyjemne, nieskomplikowane, dają podstawowe rozeznanie w temacie i...tyle. To bardziej jakaś forma motywacji dla Ciebie, bo widzisz efekty swojej pracy i nie jest to tylko wypisanie jakiegoś tekstu na ekranie ;) Trochę jak chwalenie się zrobieniem kursu AutoCADa ze strony CAD.pl. Można, tylko po co, skoro wszyscy to umieją i nawet na stanowisko dywanika w wejściu do biura projektowego trzeba to znać ;) Własne projekty to plus, stajesz się mniejszą niewiadomą, bo przynajmniej pokazują co potrafisz.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.