Czy inżynieria programowania to inżynieria?

Czy inżynieria programowania to inżynieria?
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
1

W pobocznym komentarzu tego wątku Narzędzia wspomagajace pisanie kodu a plagiaty i licencje wirusowe zaczęliśmy sobie dyskutować o czymś, co nie ma większego znaczenia, ale chyba warto przegadać temat.

W tradycyjnej inżynierii celem jest stworzenie czegoś materialnego. Architekt, czy projektant przygotowuje projekt, następie wykonawcy stawiają ściany, kładą instalacje, podłogi, tynki itd. Po tym etapie zmiana czegokolwiek w projekcie jest trudne i kosztowne, odzyskanie raz zużytych materiałów praktycznie nie możliwe.

W uproszczeniu mamy projekt za 5000 złotych, wytworzenie tego co on definiuje, kosztuje 500 000 zł. Możliwe, że z czasem rozwój technologii w budownictwie spowoduje, że koszty replikacji spadną (roboty, inne materiały), ale na razie jest tak jak napisałem.

Dla odmiany w programowaniu produktem jest instrukcja dla maszyny, w jaki sposób powinna działać. Powstaje ona od poziomu ogólnego do coraz bardziej szczegółowego:

  1. Chcę system który potrafi dodawać liczby wprowadzone przez użytkownika.
  2. Parametry i wynik mają być przyjmowane jako parametry żądania http.
  3. Usługa ma działać w chmurze.
    4 Deploy usług ma się odbywać zgodnie z definicją umieszczoną w CD.
  4. Ktoś wpisuje return a+b, co stanowi ostateczne uszczegółowienie tego co i jak system ma robić.
  5. Wpisujemy git push i następuje wykonanie wcześniej zaplanowanych czynności, usługa staje się dostępna.

Kwestią drugoplanową jest, czy w trakcie któregoś z tych kroków powstaje diagram UML, dokument w Wordzie, czy jedziemy na żywca z kodem i czy robi to wszystko jedna osoba, czy 50 osobowy zespół. Większość czasu i kosztów tego projektu jest związane z pisaniem (dokumentacji, lub kodu), zaledwie drobna część z faktycznym deploymentem, aka "produkcją". To sugeruje, że metody stosowane w tradycyjnej inżynierii ni jak się mają do tworzenia oprogramowania, a praktycznie całość procesu tworzenia oprogramowania, to tak na prawdę coś, co można nazwać "projektowaniem" na coraz wyższych stopniach precyzji.
O ile w przypadku domu projekt to 2% jego wartości, to w przypadku systemu komputerowego projektem jest 99.99% Jeżeli usługa sieciowa nie przemawia, to pomyślcie o grze - "wyprodukowanie" egzemplarza gry to pobranie jej przez użytkownika. Błędy to skutki tego, że ktoś nie zaprojektował czegoś, lub zrobił to niedostatecznie starannie i nie zalicza nam jakiegoś lvl, pomimo zastrzelenia bossa. Zmiana definicji co i jak ta gra ma robić jest stosunkowo prosta (dobra, bywa różnie, ale wciąż, to nie przebudowa domu publicznego na kościół). Rozpropagowanie tej poprawki, to grosze.

Teza:
Blisko 100% tworzenia oprogramowania to tworzenie (uwaga, abstrakcja) projektu co i w jaki sposób, to oprogramowanie ma robić.

edytowany 1x, ostatnio: piotrpo
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
6

W tradycyjnej inżynierii celem jest stworzenie czegoś materialnego

Możesz przytoczyć źródło takiej definicji? Bo mnie się jednak wydaje że inżynieria polega na wykorzystaniu istniejącej wiedzy i narzędzi do rozwiązania konkretnego problemu. Wynikiem ma być rozwiązanie problemu, nie coś materialnego.

Zgodnie z twoją logiką jakaś inżynieria chemiczna też nie jest inżynierią, bo oni tam przecież opracowują tylko jakiś przebieg reakcji chemicznej i proces! Tak samo inżynieria materiałowa, przecież ci ludzie zajmują się opracowywaniem struktury nowych materiałów i procesów fizycznych które pozwalają je uzyskać.

Jeśli chodzi o inżynierie oprogramowania to mam wrażenie że mylisz kod z systemem informatycznym. To mniej więcej taki sam błąd jak mylenie programowania z inżynierią oprogramowania. System informatyczny składa sie z wielu elementów i kod jest tylko jednym z nich. Hardware jest także częścią systemu.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
AreQrm
  • Rejestracja:około 11 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Londyn
  • Postów:873
1

Tak, to inżynieria. Nawet wiki się "kłóci" z Twoją definicją inżynierii.
https://pl.wikipedia.org/wiki/In%C5%BCynieria


piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
0

@Shalom:

Kopiuj
Inżynieria – działalność polegająca na projektowaniu, konstrukcji, modyfikacji i utrzymaniu efektywnych kosztowo rozwiązań dla praktycznych problemów, z wykorzystaniem wiedzy naukowej oraz technicznej. Działalność ta wymaga rozwiązywania problemów różnej natury oraz skali. Bardziej ogólnie, inżynieria zajmuje się też rozwojem techniki i technologii.

W ściślejszym (systemowym) sensie, inżynieria to używanie właściwości materii, energii oraz obiektów abstrakcyjnych dla tworzenia konstrukcji, maszyn i produktów, przeznaczonych do wykonywania określonych funkcji lub rozwiązania określonego problemu.

Inżynier wykorzystuje wyobraźnię i doświadczenie, umiejętność oceny i rozumowanie, stosując świadomie własną wiedzę do projektowania, tworzenia, eksploatacji i usprawnienia użytecznych maszyn oraz procesów (np. inżynieria procesów produkcji, inżynieria środowiska, bioinżynieria).

Źródło dyskusyjne, ale nie chce mi się kłócić na temat drugorzędnej regułki https://pl.wikipedia.org/wiki/In%C5%BCynieria

Co do drugiej części, we współczesnym podejściu:
Masz chmurę, w której ktoś faktycznie musi się nabiedzić z fizycznym połączeniem serwerów, zasilaniem, chłodzeniem, przepustowością i izolacją sieci. ale, już pięterko niżej, czyli jako programista masz do dyspozycji możliwość:

  • definiowania infrastruktury IaaC
  • definiowania sieci
  • definiowania usług zarządzalnych PaaS
  • definiowania procedury delivery

Jeżeli to ma znaczenie, to możesz sobie te rzeczy wyklikać, ale możesz je również wrzucić do pliku z parametrami, albo nawet oprogramować jak ta infrastruktura ma się zachowywać w odpowiedzi na zmiany otoczenia. Jak się ładnie postarałeś, to bierzesz sobie taką definicję, odpalasz na koncie obok i kopia twojego systemu informatycznego pojawi się obok.

edytowany 1x, ostatnio: piotrpo
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

@piotrpo analogicznie możesz wziąć sobie zestaw reakcji chemicznych, przeprowadzić je w dowolnym laboratorium i uzyskać pewne substancje. Czy to oznacza ze inżynier chemiczny który te procesy opracował nie jest inżynierem? A inżynier który zaprojektował jakieś urządzenie i przygotował konfiguracje dla drukarki 3d? Też możesz wziąć ten jego projekt, wrzucić w dowolną drukarkę i dostaniesz "kopie" urządzenia. Czy ten ktoś w takim razie też nie jest inżynierem? o_O
A ktoś kto zrobił w VHDLu procesor? Można sobie to wziać i załadować na dowolne FPGA. Też nie jest inżynierem, bo nie wytrawił sobie tego w krzemie?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
0

Spróbuję krócej z większą koncentracją na faktycznym problemie:
Pomiędzy tradycyjną inżynierią (budowa maszyn, budownictwo, technologia przetwarzania żywności) a inżynierią oprogramowania istnieje duża dysproporcja pomiędzy "projektowaniem" a "wytwarzaniem". Ten (moim zdaniem) fakt implikuje zmianę jakościową w obu podejściach. Tak jak nie da się zbudować elektrowni atomowej w metodyce zwinnej, bo każdy błąd na etapie projektu ciągnie za sobą gigantyczne koszty. Tworząc oprogramowanie, jak ci wyjdzie, że potrzebujesz zmienić np. SOAP na REST możesz zrobić to w sposób banalny, bo wciąż zmieniasz "projekt".
Uważam, że granica typu "UML to jeszcze projekt, a kod w C++ to już implementacja" jest błędnym podejściem.

Miang
"technologia przetwarzania żywności" kiedyś to się nazywało gotowanie i zwinne było
piotrpo
@Miang: Skala ma znaczenie. Czym innym jest przerobienie niedzielnego rosołu na poniedziałkową pomidorówkę a czym innym wyprodukowanie iluś tam ton chipsów.
Miang
@piotrpo: no popatrz zupełnie jak z programowaniem
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:dzień
  • Postów:5112
3

Czyli to że soft można robić na pałę i popełniać błędy, bo je można relatywnie tanio poprawić sprawia że SE to nie inżynieria?

o to chodzi?

edytowany 2x, ostatnio: WeiXiao
piotrpo
To jeden ze skutków podejścia "my tylko piszemy". Napisanie czegoś inaczej, to generalnie mniej roboty niż przesunięcie przyczółku mostu o 50m w prawo.
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
3

@piotrpo: Idąc Twoim tokiem rozumowania gdyby w SE nie istniała metodyka zwinna a tylko waterfall to można by ją nazywać inżynierią, ale ponieważ metodyka zwinna istnieje to o inżynierii nie może być mowy.

Pomiędzy tradycyjną inżynierią...

Świat idzie do przodu, definicje rozszerzają się na nowe pola które kiedyś nawet nie istniały. W przeciwnym razie w języku angielskim nie można by również mówić software developer, bo tradycyjnie to ktoś kto buduje budynki.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
edytowany 2x, ostatnio: Aventus
piotrpo
Oczywiście, może kiedyś w budownictwie zrobią się popularne technologie druku 3D i nagle zamiast 2% projektu i 98% produkcji zrobi się odwrotnie.
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:dzień
  • Postów:5112
0

@piotrpo:

To jeden ze skutków podejścia "my tylko piszemy". Napisanie czegoś inaczej, to generalnie mniej roboty niż przesunięcie przyczółku mostu o 50m w prawo. —

ale to może po prostu specyfika tej branży, a mianowicie możliwości oraz tego, jak je wykorzystano?

Boomerzy kiedyś tam się postarały aby źle napisany software nie doprowadzał do pożaru w datacenter, aby błędy powodowały jak najmniejsze szkody i teraz koszty błędów są relatywnie niskie oraz aby było to elastyczne - już nie karty perforowane

Aby dojść do aktualnego stanu poświęcono pewnie miliony man hours

edytowany 7x, ostatnio: WeiXiao
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
0

@WeiXiao: Ale ja właśnie o tej specyfice branży piszę. Replikacja produktu IT w postaci apki na telefon, to całkowicie zautomatyzowany proces kosztujący może centa. Replikacja domu to koszt kilkuset tysięcy złotych. W pierwszym przypadku koszt "zaprojektowania" jest drogi, w drugim odwrotnie - koszt replikacji.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
2

Weźmy na tapet projektowanie CPU (w sumie już opisane, ale się rozpisałem to wrzucę tutaj). Jest tutaj dużo etapów niewymagających zmian w produkcji realnych kawałków krzemu. Po pierwsze na początku tworzy się projekty CPU w językach typu VHDL czy Verilog, które wcale nie muszą być jakoś bardzo odległe od zwykłych języków programowania. Ba, można nawet pisać kod źródłowy procesorów w OpenCLu czy nawet w C++ (chociaż to raczej nisza):

The Intel® HLS Compiler is a high-level synthesis (HLS) tool that takes in untimed C++ as input and generates production-quality register transfer level (RTL) code that is optimized for Intel® FPGAs. This tool accelerates verification time over RTL by raising the abstraction level for FPGA hardware design. Models developed in C++ are typically verified orders of magnitude faster than RTL.

Po drugie, po stworzeniu wstępnego projektu procesora, symuluje się go na FPGA, czyli czymś co można zaprogramować wiele razy, dokładnie tak jak zwykły komputer. Po każdej symulacji można poprawić wykryte błędy, coś zoptymalizować, dorzucić nową funkcjonalność i przeprogramować FPGA od nowa. Po trzecie, sporo błędów w gotowych CPU produkowanych jako układy ASIC łata się mikrokodem, czyli de facto skompilowanym programem zapisanym wprost w pamięci stałej w CPU.

Te błędy, których nie da się naprawić mikrokodem, naprawia się w kolejnym steppingu https://en.wikipedia.org/wiki/Stepping_level . Polecam poszukać frazy "intel cpu errata". Wynik to np: https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-spec-update.html Czasami błędy są na tyle poważne (chociażby wizerunkowo) i niemożliwe do załatania, że producent organizuje zwrot produktu, np: https://en.wikipedia.org/wiki/Pentium_FDIV_bug

Nikt nikomu podczas projektowania CPU nie zabrania zrobienia w nim pętelki czy rekurencji na jawnym stosie (oczywiście trzeba to rozdzielić na wiele taktów, ale generalnie da się). Mamy wtedy kod trochę jak w zwykłym programie. Jest to jednak pewnie często nieoptymalne. Z drugiej strony, pętelek i rekurencji unika się nie tylko w projektowaniu procesorów, ale także np. w programowaniu GPGPU.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:dzień
  • Postów:5112
0

Jednak wyrzuciłbym ten cudzysłów z zaprojektowania i faktycznie dodał tam i zaimplementowania oraz utrzymania

No dobra, a jak tak cały czas kręcimy się w okół tych kosztów

A czym jest fabryka procesorów? no bo wiesz, największe koszta to pewnie wybudowanie, wyposażenie, eksploatacja, know how i to są pewnie jakieś $20 miliardów, a koszt wytworzenia jednego CPU to jakiś bardzo mały %

edytowany 1x, ostatnio: WeiXiao
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
piotrpo napisał(a):

@WeiXiao: Ale ja właśnie o tej specyfice branży piszę. Replikacja produktu IT w postaci apki na telefon, to całkowicie zautomatyzowany proces kosztujący może centa. Replikacja domu to koszt kilkuset tysięcy złotych. W pierwszym przypadku koszt "zaprojektowania" jest drogi, w drugim odwrotnie - koszt replikacji.

Co ma koszt do definicji czym jest inżynieria? Uczepiłeś się tego materializmu jak Einstein fizyki kwantowej i na siłę próbujesz nas tym zainteresować.

Aventus
Ale Einsteina i fizykę kwantową to Ty szanuj!
piotrpo
Pieniądz jest uniwersalnym miernikiem wartości - ekonomia. Jeżeli cię to nie interesuje, to po co post?
vpiotr
@Aventus: Einstein nigdy w swoim życiu nie przekonał się do mechaniki kwantowej, a w szczególności do jej interpretacji kopenhaskiej Nielsa Bohra, interpretacji probabilistycznej.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:31 minut
  • Lokalizacja:Wrocław
1
piotrpo napisał(a):

W tradycyjnej inżynierii celem jest stworzenie czegoś materialnego.

Często, aczkolwiek nie zawsze. Czasem wystarczy opracować procedurę albo proces optymalizacyjny.

Architekt, czy projektant przygotowuje projekt, następie wykonawcy stawiają ściany, kładą instalacje, podłogi, tynki itd. Po tym etapie zmiana czegokolwiek w projekcie jest trudne i kosztowne, odzyskanie raz zużytych materiałów praktycznie nie możliwe.

W programowaniu też za bardzo nie da się odzyskać raz zużytych materiałów. :P

O ile w przypadku domu projekt to 2% jego wartości, to w przypadku systemu komputerowego projektem jest 99.99%

Not even wrong.

Po pierwsze system komputerowy w znacznej mierze składa się ze sprzętu, więc skupianie się na kodzie jest bez sensu.
Jeśli zaś chodziło Ci o system informatyczny, to nadal, projekt jest jakąś niewielką jego częścią, a patrząc na sporą część z nich, to zdaje się, że projektu nigdy nie było. Główną częścią jest jednak implementacja.

Jeżeli usługa sieciowa nie przemawia, to pomyślcie o grze - "wyprodukowanie" egzemplarza gry to pobranie jej przez użytkownika.

Ty tak na serio? Bo brzmisz jak student, który narzeka na to, że musi zapłacić 5 stówek za projekt zaliczeniowy z programowania, a przecież "cała gra w sklepie kosztuje 100zł".
Pobieranie egzemplarza gry nie ma nic wspólnego z inżynierią oprogramowania.

Błędy to skutki tego, że ktoś nie zaprojektował czegoś, lub zrobił to niedostatecznie starannie i nie zalicza nam jakiegoś lvl, pomimo zastrzelenia bossa.

Czasem błędy wynikają z projektu, niemniej jednak wiele z nich wynika z błędnej implementacji, niewystarczającego testowania albo niepoprawnego wdrożenia.

Ogólnie sugeruję wziąć jakiś podręcznik o wytwarzaniu systemów informatycznych i zapoznać się po kolei z fazami jego tworzenia począwszy od analizy, poprzez projekt, implementację, wdrożenie, utrzymanie aż do wygaszenia.
Zresztą, podręcznik... praca inżynierska powinna wystarczyć.


Osobiście uważam, że IO daleko jest do inżynierii klasycznych poprzez brak ograniczeń fizycznych w wytwarzaniu oprogramowania, a co za tym idzie możliwe jest wytworzenie dowolnie kuriozalnej, niewydajnej i niespójnej konstrukcji, i dlatego często wstyd to zestawiać z normalnymi inżynieriami, w których jak zacznie się stawiać ciężkie elementy na mało wytrzymałych, albo zamocuje coś za słabo, to się na łeb spierdzieli albo go w ogóle utnie, więc klasyczni inżynierowie szybciej się uczą na błędach. ;)

BR
  • Rejestracja:około 6 lat
  • Ostatnio:19 dni
  • Postów:79
1

Tak, inżynieria programowania to inżynieria, a używając Twojej analogii budownictwa, nie od każdej osoby która robi remont kawalerki są od razu wymagane pokłady inżynieryjnej wiedzy, dokładnie tak samo jest na przykład w projektach legacy. Budowanie małego garażu nie jest porównywalne z budowaniem mostu, a również w IT są projekty o skali małej i ogromnej.

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Słowo "inżynier" pochodzi od "wynalazek", więc może mieć zastosowanie zarówno w inżynierii mostów, oprogramowania, genetyce jak i w inżynierii społecznej.

Słowa „inżynieria” i „inżynier” pochodzą od francuskich słów ingénieur oraz ingénierie. Określenia te pochodzą z kolei od starofrancuskiego terminu engigneor, które oznaczało konstruktora machin wojennych.

Fr. ingénieur 'człowiek twórczego umysłu, wynalazca, konstruktor' jest wyrazem ogólnoromańskim (z łacińskiego ingeniosus (wł. ingegnoso) oznaczającego osobę wyszkoloną), co pochodzi z łac. ingenium 'wynalazek').

Każdy z nas ma jakiś swój uproszczony obraz świata go otaczającego tylko nie każdy próbuje te uproszczenia wciskać innym.

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:16 dni
  • Postów:3561
2
somekind napisał(a):
piotrpo napisał(a):

W programowaniu też za bardzo nie da się odzyskać raz zużytych materiałów. :P

Wielokrotnie, jak spotykam inteligentnego przedstawiciela architektury budowlanej, staram się sprowokować fajny wątek.
I nasza największa różnica do budowy klasycznej, to gruz jest niewidzialny
Gdyby u inwestora tradycyjnego (zwalmy, że zmiany = zmieniające się wymagania) koło prawie wybudowanego budynku rosła kupa gruzu porównywalna wielkością, głowy by się posypały i to szybko, gwarantowane.
Ale u nas jest niewidzialny ...

somekind napisał(a):

Osobiście uważam, że IO daleko jest do inżynierii klasycznych poprzez brak ograniczeń fizycznych w wytwarzaniu oprogramowania, a co za tym idzie możliwe jest wytworzenie dowolnie kuriozalnej, niewydajnej i niespójnej konstrukcji, i dlatego często wstyd to zestawiać z normalnymi inżynieriami, w których jak zacznie się stawiać ciężkie elementy na mało wytrzymałych, albo zamocuje coś za słabo, to się na łeb spierdzieli albo go w ogóle utnie, więc klasyczni inżynierowie szybciej się uczą na błędach. ;)

Głębokie stwierdzenie, podoba mi się
Mają większą, intuicyjną barierę odejścia od dobrych praktyk i wzorców (tfu, tfu - nie rozumiem religijnie, co więcej, wzorce u nich są zdrowsze)
Balkon stojący na wątłym patyczku, tego nie da się ukryć, hamulec jest naturalny


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 2x, ostatnio: AnyKtokolwiek
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
0
AnyKtokolwiek napisał(a):

Wielokrotnie, jak spotykam inteligentnego przedstawiciela architektury budowlanej, staram się sprowokować fajny wątek.
I nasza największa różnica do budowy klasycznej, to gruz jest niewidzialny
Gdyby u inwestora tradycyjnego (zwalmy, że zmiany = zmieniające się wymagania) koło prawie wybudowanego budynku rosła kupa gruzu porównywalna wielkością, głowy by się posypały i to szybko, gwarantowane.
Ale u nas jest niewidzialny ...

Pytanie, czy to jest niewidzialny gruz, czy wypełniony wcześniejszymi koncepcjami kubeł na papiery (trzymając się podejścia budowlanego).

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:16 dni
  • Postów:3561
1
piotrpo napisał(a):
AnyKtokolwiek napisał(a):

I nasza największa różnica do budowy klasycznej, to gruz jest niewidzialny

Pytanie, czy to jest niewidzialny gruz, czy wypełniony wcześniejszymi koncepcjami kubeł na papiery (trzymając się podejścia budowlanego).

Za kubeł na papiery nikogo nie wyrzucili (tam, jako się rzekło, to TYLKO 2%).
Co więcej, dobrze, ze jest to na tym etapie, a nie na budowie - to jest PRAWIDŁOWE miejsce do zmian


Bo C to najlepszy język, każdy uczeń ci to powie
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:31 minut
  • Lokalizacja:Wrocław
1
piotrpo napisał(a):

Pytanie, czy to jest niewidzialny gruz, czy wypełniony wcześniejszymi koncepcjami kubeł na papiery (trzymając się podejścia budowlanego).

Nieważne, czy gruz jest widzialny, czy nie, ważne ile jego stworzenie poszło dni roboczych. No, ale w sumie czasu też nie widać, więc pewnie nie istnieje. ;)

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:16 dni
  • Postów:3561
0
AnyKtokolwiek napisał(a):
piotrpo napisał(a):
AnyKtokolwiek napisał(a):

I nasza największa różnica do budowy klasycznej, to gruz jest niewidzialny

Pytanie, czy to jest niewidzialny gruz, czy wypełniony wcześniejszymi koncepcjami kubeł na papiery (trzymając się podejścia budowlanego).

Za kubeł na papiery nikogo nie wyrzucili (tam, jako się rzekło, to TYLKO 2%).
Co więcej, dobrze, ze jest to na tym etapie, a nie na budowie - to jest PRAWIDŁOWE miejsce do zmian

Coś nowego mnie oświeciło.
Tu dotykamy szerszego problemu,.
Nie tylko my, ludzie IT mamy swoje grzechy - ale nasz klient ma mniejszą wyobraźnię co do zmian na etapie 2%, w czym WYCHOWUJE ich (klientów) "od wieków" niewidzialny gruz.
Przecież zmiany w oprogramowaniu nic nie kosztują.

Nie wiem, może na super-korpo i waterfallu przenosi się na klienta koszt jego szalonych zmian (albo z góry daje się margines cenowy 300%) , ale na rynku dolno-średnim bardzo rzadko tak się dzieje.
A jeśli, to raczej na poziomie ludzkim: no wiesz Kazik / Rysiek / Władek, zrobiliśmy wq..ę zmian, które chcieliście i poszły do kosza i jak Kazik / Rysiek / Władek ma klasę, to zapyta ile dopłacić.


Bo C to najlepszy język, każdy uczeń ci to powie
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 12 godzin
  • Postów:3277
0

@AnyKtokolwiek:
To kwestia intuicyjności. Jak klient chce móc się przemieszczać z punktu A do punktu B a po środku jest rzeka, to wie też, że chce most a nie koniecznie katapultę. U większości ludzi myślenie o czymś co ma, bądź ma mieć postać fizyczną jest dużo bardziej naturalne. Mamy to zakodowane przez ewolucję, że większe znaczy lepsze (kupcie 3 latkowi małą wywrotkę i dużą wywrotkę, to zobaczycie którą wybierze). Nie jesteśmy też przyzwyczajeni do tego, że coś co nie jest materialne kosztuje.

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 godziny
  • Postów:3563
1

Inżynieria oprogramowania to jak najbardziej inżynieria, natomiast często zwrotu "inżynieria oprogramowania" używa się po prostu źle. Samo klepanie kodu na podstawie wymagań nie jest inżynierią, ale już projektowanie, wycena, monitorowanie/tuning itp. już tak. Dlatego według mnie inżynier oprogramowania powinien być czymś więcej niż zwykłym programistą.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)