Na jakie stanowisko nadawałaby się osoba pisąca taki kod[C#]

3

Na żadne. Jeden wielki copy paste, brak stosowania powszechnych konwencji, nic nie mówiące nazwy metod i zmiennych, wymieszanie logiki prezentacji i obliczeń w jednej klasie.
Co w ogóle robi ta metoda?

 public double CheckNumberBehindComa(double k)
        {
            string x = Convert.ToString(k);
          

            for (int i = 0; i < x.Length; i++)
            {
                if(x[i] == ',')
                {
                    string z = x.Substring(i + 1, x.Length - (i + 1));
                    return Convert.ToDouble(z);
                }
            }
            return 0;
        }
3

myslalem ze @somekind przesada. Ale ma sporo racji. Przed Toba dluga droga... taki projekt to nie jest nawet na pokazywanie (wielkosciowo chociazby, o jakosci nie pisze bo kazdy sie uczy)

3

o_O wypaliło mi oczy jak zerknąłem na ten kod.

  1. 20 buttonów zrobionych jeden po drugim bez zadnej tablicy a potem inicjalizowanie ich w IDENTYCZNY sposób za pomocą copy-paste. Tak trudno i tablice, pętle i wydzielenie identycznego kodu do osobnej funkcji?
  2. Copy-paste na handlery do tych buttonów zamiast zrobić z tego funkcje.
  3. Tylu ifów to niektórzy przez całe życie nie napisali :D
  4. @OrientMantis24 proszę o małą modyfikację tego kodu. Niech ten kalkulator ma 100 przycisków, z liczbami 0-100. Albo lepiej, niech uzytkownik moze skonfigurować sobie ile przycisków ma tam być. Jak chce 1000 to niech będzie 1000. Co ty na to? Nadal napisałbyś ten kod w ten sposób?

Jak dla mnie taka osoba powinna zrewidować swoje plany życiowe, szczególnie jeśli programuje od 2 lat (patrząc po dacie rejestracji na 4p). Moze piekarz albo stolarz?

0

Myśl lepiej o tym jak lepiej programować. Reszta przyjdzie sama. Na chwilę obecną to może przyjęli by Cię do recepcji.
Twoje odpowiedzi w komentarzu wykazują, że brakuje Tobie fundamentalnej wiedzy z programowania.

PS. Jeżeli przy programowaniu potrzebujesz użyć metody Kopjego-Pejsta, to już wiesz, że coś jest nie tak

7

Kod rzeczywiście jest generalnie bardzo słaby, ale jak na osobę początkującą, która nie ma żadnego doświadczenia zawodowego może być.

Pracę powinieneś generalnie znaleźć, ponieważ wiele firm nie potrafi przeprowadzać procesu rekrutacji, poza tym jest ogromne zapotrzebowanie na programistów i jakaś firma w akcie desperacji powinna wziąć kandydata piszącego taki kod.

5

Nie zgodzę się z @Haskell. Pisząc taki kod nawet jak przejdzie rekrutację, to wyleci po tygodniu.

0

@OrientMantis24

  1. A potrafisz mi wyjaśnić czemu potrzebujesz nazwywać buttony z liczbami 0-9 na przykład? One sie czymś różnią według ciebie? Bo moim zdaniem nie. A nawet jeśli to zawsze możesz zrobić buttons[i]...
  2. Co podobnie? Handler dla każego z tych buttonów będzie identyczny.
  3. Wyobraź sobie że jest zima a ty nie masz czapki i wieje ci po uszach. Odcinasz więc sobie te uszy i juz nie marzną. Idiotyczne? Ale działa...
  4. Serio? Zrobiłeś tak sapera z 81 IDENTYCZNYMI guzikami z których każdy ma identyczny handler? Chylę czoła. Zawsze ciekawi mnie gdzie jest ta granica kiedy ktoś włącza myślenie. Ciekawe jak duze kółko i krzyżyk rozwiązywałbyś rozpatrując wszystkie przypadki ifami, zanim pomyślałbyś że może jest sensowniejsza droga...

Zapamiętaj sobie: jeśli robisz w kodzie copy-paste to na 99% robisz coś źle (ten 1% może wynikać z ograniczeń języka którego używasz jeśli robisz coś bardzo bardzo skomplikowanego, najpewniej jeszcze przez wiele lat nie zobaczysz takiej sytuacji).

0

@OrientMantis24 na bezpłatny staż

7
Sarrus napisał(a):

Nie zgodzę się z @Haskell. Pisząc taki kod nawet jak przejdzie rekrutację, to wyleci po tygodniu.

Bez przesady... Jak trafi na dobrą firmę, gdzie będzie ktoś bardziej wyrozumiały niż typowy specjalista od gównoburzy z 4programmers to szybko nauczy się pisać lepiej.

Żeby pisać lepiej trzeba otrzymać wskazówki od bardziej doświadczonych osób, dlatego tak ważne w naszej pracy jest code review. Dzięki temu kod jest dobrej jakości, bez względu na poziom poszczególnych osób w zespole. Początkujący programista porządne code review otrzyma dopiero jak zacznie pracować.

2

Ok od stażystów nie wymaga się "Rocket Science" zgoda, ale spójrz na ten kod jeszcze raz. Nikt w pracy nie będzie uczył stażysty nawet podstaw programowania. Od tego jest szkoła, a w firmie się to zwyczajnie nie opłaca.

11
Sarrus napisał(a):

Ok od stażystów nie wymaga się "Rocket Science" zgoda, ale spójrz na ten kod jeszcze raz.

Nigdy nie pracowałem w żadnej "wytwórni" w której pracują stażyści, może z tego powodu jestem bardziej wyrozumiały?!

Sarrus napisał(a):

Od tego jest szkoła, a w firmie się to zwyczajnie nie opłaca.

To zależy do firmy. W jednej juniora traktuje się jak inwestycję i oczekuje od niego żeby robił postępy w zadowalającym tempie, w drugiej junior ma zarabiać na siebie już od pierwszego dnia. Jakieś 10 lat temu w jednej ze swoich pierwszych firm trafiłem na początku na trzy miesięczny kurs gdzie poznałem technologię w której pracuje cały zespół, oprócz tego miałem okazję się podszkolić pod okiem bardzo dobrego instruktora. Od pierwszego dnia otrzymywałem normalną pensję powyżej średniej krajowej, chociaż de facto w ogóle nie pracowałem. Później miałem kilka miesięcy na wdrożenie do pracy, ponieważ rozwijałem nowy moduł w kilkuosobowym zespole. Mój kod był zawsze przeglądany i otrzymywałem merytoryczne wskazówki, nikt mi nie dawał takich żenujących rad żebym pracował w recepcji albo jako stolarz...

0

Swoją drogą podoba mi się jak button z numerem 1 ma id 'button13' :D

EDIT: Kiedy uruchomisz program i chcesz zrobić wielokrotne dodawanie np. 1 + 1 + 1 to zamiast 3 masz 12 :P

0

@OrientMantis24

Poczytaj sobie lepiej na temat wzorca Model-View-Presenter (MVP) w C#, Windows Forms i postaraj się zrefaktoryzować zanim bardziej doświadczeni programiści Cię zjedzą tu na forum :-)

http://www.c-sharpcorner.com/UploadFile/ankithakur/mvp-design-pattern-for-window-forms/
http://www.dreamincode.net/forums/topic/342849-introducing-mvp-model-view-presenter-pattern-winforms/

To po pierwsze. A po drugie odnośnie wszystkich zasad i konwencji nazewnictwa i ogólnie wzorców projektowych ale MVP to jest tutaj sprawa zasadnicza.

Natomiast trochę tu innych nie rozumiem. I tak wszystkiego się nauczy w pracy a od czegoś niestety trzeba zacząć a tu ktoś wyjechał z bezpłatnym stażem?

Co do copy-paste, jak jesteście tu tacy mądrzy to spróbujcie podjąć się napisania kalkulatora wyborczego w 3 mies. czasu stosując oczywiście MVP, testy jednostkowe i wszystkie znane Wam wzorce projektowe. Powodzenia :-)

0

Program nie jest zbyt ładnie napisany, inna kwestia jaka mnie zastanawia, to testy - oczywiście przypuszczam, że przetestowałeś podstawową walidację i pozytywne przypadki, ale co się stanie przy innych typach testów. Aplikacja patrząc nie tylko na jakość kodu nie miała pozytywnego wyniku.
Teraz możesz zebrać informacje, jak ma być to zaimplementowane, oczywiście później napisz jeszcze testy jednostkowe, by na wyższych poziomach testów, jak będziesz przeprowadzał testy nie okazało się, że aplikacja jest nie użyteczna.
Popraw kod, masz dzięki temu się nauczysz :)

5

Taki kod pokazuje, że programowanie to nie wszystko. Trzeba umieć myśleć abstrakcyjnie i dostrzegać to co wspólne od tego co jednostkowe. Dokonywać uogólnień zamiast setek ifów. Zamiast uczyć się API i składni języka C#, warto poświęcić czas na myślenie, na próbę zrobienia prostego rozwiązania, które rozwiązuje wszystkie przypadki.

Tak jak napisał @Shalom

  1. Serio? Zrobiłeś tak sapera z 81 IDENTYCZNYMI guzikami z których każdy ma identyczny handler? Chylę czoła. Zawsze ciekawi mnie gdzie jest ta granica kiedy ktoś włącza myślenie. Ciekawe jak duze kółko i krzyżyk rozwiązywałbyś rozpatrując wszystkie przypadki ifami, zanim pomyślałbyś że może jest sensowniejsza droga...
1
LukeJL napisał(a):

Taki kod pokazuje, że programowanie to nie wszystko. Trzeba umieć myśleć abstrakcyjnie i dostrzegać to co wspólne od tego co jednostkowe. Dokonywać uogólnień zamiast setek ifów. Zamiast uczyć się API i składni języka C#, warto poświęcić czas na myślenie, na próbę zrobienia prostego rozwiązania, które rozwiązuje wszystkie przypadki.

Eeeee tam wymyślasz jakieś filozofie...

Programista po prostu musi być leniwy :D Wtedy mu się nie chce pisać i copy pastować dziesiątek linii kodu i dąży do tego, żeby napisać jak najmniej ;)

3
Haskell napisał(a):

Kod rzeczywiście jest generalnie bardzo słaby, ale jak na osobę początkującą, która nie ma żadnego doświadczenia zawodowego może być.

No tak może wyglądać kod kogoś, kto pierwszy raz cokolwiek napisał, ale nie kogoś, kto chce iść do pracy.

Junior nie musi znać całych frameworków, nie musi płynnie stosować wzorców, nie musi zastanawiać się nad wydajnością i architekturą, jedyne co musi, to znać język. Ktoś, kto nie widzi, gdzie w kodzie użyć pętli, gdzie tablicy, a gdzie można wydzielić funkcję po prostu nie zna jeszcze języka i jeszcze "trochę" nauki przed nim jest.

Piszę to bez złośliwości - wątpię, aby ktokolwiek zatrudnił na juniora kogoś, kto nie zna języka. Nawet na darmowe praktyki takich nie biorą.

Haskell napisał(a):

Żeby pisać lepiej trzeba otrzymać wskazówki od bardziej doświadczonych osób, dlatego tak ważne w naszej pracy jest code review. Dzięki temu kod jest dobrej jakości, bez względu na poziom poszczególnych osób w zespole.

Jeśli wszyscy mają niski poziom, to code review nie pomoże.

drorat1 napisał(a):

A po drugie odnośnie wszystkich zasad i konwencji nazewnictwa i ogólnie wzorców projektowych ale MVP to jest tutaj sprawa zasadnicza.

MVP tutaj to jest overkill. W zupełności wystarczy wydzielenie logiki z GUI do jakiejś prostej klasy, czegoś w rodzaju ViewModelu.

Co do copy-paste, jak jesteście tu tacy mądrzy to spróbujcie podjąć się napisania kalkulatora wyborczego w 3 mies. czasu stosując oczywiście MVP, testy jednostkowe i wszystkie znane Wam wzorce projektowe. Powodzenia :-)

Nie ma sprawy, podeślij dane do faktury.

0
somekind napisał(a):

No tak może wyglądać kod kogoś, kto pierwszy raz cokolwiek napisał, ale nie kogoś, kto chce iść do pracy.

Autor tego kalkulatora ma na githubie jeszcze kilka innych produkcji, więc nie jest to raczej jego pierwszy kod.

somekind napisał(a):

Ktoś, kto nie widzi, gdzie w kodzie użyć pętli, gdzie tablicy, a gdzie można wydzielić funkcję po prostu nie zna jeszcze języka i jeszcze "trochę" nauki przed nim jest.

Ja bym powiedział, że ten ktoś ma po prostu małe doświadczenie. To, że ktoś napisał coś bez użycia tablicy nie oznacza, że ich nie zna. Po prostu nie posiada praktycznej wiedzy i umiejętności kiedy z nich korzystać.

somekind napisał(a):

Piszę to bez złośliwości - wątpię, aby ktokolwiek zatrudnił na juniora kogoś, kto nie zna języka. Nawet na darmowe praktyki takich nie biorą.

Myślę, że każdy pracodawca ma prawo zatrudnić kogo mu się podoba. Jestem zdania, że w dobie wielkiego zapotrzebowania na programistów znajdą się firmy, które byłyby gotowe zapłacić programiście, który pisze kod w taki sposób. Zaletą takiego programisty będzie z pewnością to, że nie będzie oczekiwał wysokich zarobków.

somekind napisał(a):

Jeśli wszyscy mają niski poziom, to code review nie pomoże.

To jest akurat święta racja. Każdy z nas zna chyba z autopsji lub z opowieści firmy JanuszSoft i wie co tam się dzieje :)

8

ja wlasnie skonczylam pisany od roku projekt w htmlu, zastanawiam sie czy bedzie ze mnie webdeveloper :)

1

First commit. Have fun :)

Szkoda że tu nie ma prawdziwej historii powstawania projektu, tylko od razu wszystko w jednym komicie.

Na przyszłość od razu zaczynaj projekt z wersjonowaniem.

0

@katelx

W zasadzie to nonsens (py 2.7):

from PIL import Image

def rgb_to_hex(r, g, b):
    return '#%02x%02x%02x' % (r, g, b)

im = Image.open("test.jpg")
pix = im.load()
width, height = im.size
f = open("test.html", "w")
f.write('<HTML><HEAD><TITLE>TEST</TITLE></HEAD><BODY><TABLE style="border-spacing: 0">')
for y in range(height):
    f.write('<TR>')
    for x in range(width):
        r, g, b = pix[x, y]
        f.write('<TD style="background-color: %s"></TD>' % (rgb_to_hex(r, g, b)))
    f.write('</TR>')

f.write('</TABLE></BODY></HTML>')
f.close()

Wyrzeźbiłem to w ciągu jakichś kilku minut.

2

@OrientMantis24: niestety ten kod nawet trudno omawiać.
Równie dobrze mogłeś zarzucić listing hexa.

Proponuje zacząć od czegoś mniejszego. Np. program który tylko dodaje.

0
Haskell napisał(a):

Ja bym powiedział, że ten ktoś ma po prostu małe doświadczenie. To, że ktoś napisał coś bez użycia tablicy nie oznacza, że ich nie zna. Po prostu nie posiada praktycznej wiedzy i umiejętności kiedy z nich korzystać.

Programowanie to jest czynność praktyczna, jeśli ktoś wie, że jest coś takiego jak tablica, ale ich nie stosuje, to znaczy, że ich nie zna. Znać to znaczy wiedzieć do czego coś służy, jaki problem rozwiązuje, i kiedy należy tego używać. Wiedza o tym, że coś w ogóle istnieje, to nie jest znajomość.

somekind napisał(a):

Myślę, że każdy pracodawca ma prawo zatrudnić kogo mu się podoba. Jestem zdania, że w dobie wielkiego zapotrzebowania na programistów znajdą się firmy, które byłyby gotowe zapłacić programiście, który pisze kod w taki sposób. Zaletą takiego programisty będzie z pewnością to, że nie będzie oczekiwał wysokich zarobków.

Może i tak. Ale lepiej na pewno się poduczyć, przeczytać parę książek o dobrych praktykach, następny projekt wykonać lepiej i faktycznie mieć się czym pochwalić.

Ja nawet chciałbym doradzić, co w tym kodzie można poprawić, żeby było lepiej... Ale nie jestem w stanie, tu naprawdę wszystko jest do zrobienia od nowa. Tylko tym razem sensownie nazywając zmienne, bo to jest naprawdę najbardziej podstawowa z podstaw.
I wydaje mi się też, że sporo problemów i co najmniej połowa kodu jest efektem tego, że zamiast TextBoxa zastosowany jest Label.

0
drorat1 napisał(a):

@katelx

W zasadzie to nonsens (py 2.7):

from PIL import Image

def rgb_to_hex(r, g, b):
    return '#%02x%02x%02x' % (r, g, b)

im = Image.open("test.jpg")
pix = im.load()
width, height = im.size
f = open("test.html", "w")
f.write('<HTML><HEAD><TITLE>TEST</TITLE></HEAD><BODY><TABLE style="border-spacing: 0">')
for y in range(height):
    f.write('<TR>')
    for x in range(width):
        r, g, b = pix[x, y]
        f.write('<TD style="background-color: %s"></TD>' % (rgb_to_hex(r, g, b)))
    f.write('</TR>')

f.write('</TABLE></BODY></HTML>')
f.close()

Wyrzeźbiłem to w ciągu jakichś kilku minut.

to w sumie tak jak ja, tylko chyba troche ladniejszy kod napisales

from PIL import Image
img = Image.open("5526730b30343.jpg").convert('RGB')
open("tst.htm", "w").write("<html><head><title>4p</title></head><body><table style=\"border-spacing: 0px\">" + "".join("<tr>" + "".join("<td style=\"background-color: #%02x%02x%02x\"></td>" % img.getpixel((x, y)) for x in xrange(img.width)) + "</tr>" for y in xrange(img.height)) + "</table></body></html>")

1 użytkowników online, w tym zalogowanych: 0, gości: 1